Files
ionscale/internal/service/acl.go
T
2022-06-03 14:25:31 +02:00

48 lines
1.3 KiB
Go

package service
import (
"context"
"encoding/json"
"fmt"
"github.com/bufbuild/connect-go"
"github.com/jsiebens/ionscale/internal/domain"
api "github.com/jsiebens/ionscale/pkg/gen/ionscale/v1"
)
func (s *Service) GetACLPolicy(ctx context.Context, req *connect.Request[api.GetACLPolicyRequest]) (*connect.Response[api.GetACLPolicyResponse], error) {
policy, err := s.repository.GetACLPolicy(ctx, req.Msg.TailnetId)
if err != nil {
return nil, err
}
marshal, err := json.Marshal(policy)
if err != nil {
return nil, err
}
return connect.NewResponse(&api.GetACLPolicyResponse{Value: marshal}), nil
}
func (s *Service) SetACLPolicy(ctx context.Context, req *connect.Request[api.SetACLPolicyRequest]) (*connect.Response[api.SetACLPolicyResponse], error) {
tailnet, err := s.repository.GetTailnet(ctx, req.Msg.TailnetId)
if err != nil {
return nil, err
}
if tailnet == nil {
return nil, connect.NewError(connect.CodeNotFound, fmt.Errorf("tailnet does not exist"))
}
var policy domain.ACLPolicy
if err := json.Unmarshal(req.Msg.Value, &policy); err != nil {
return nil, err
}
if err := s.repository.SetACLPolicy(ctx, tailnet.ID, &policy); err != nil {
return nil, err
}
s.brokers(tailnet.ID).SignalACLUpdated()
return connect.NewResponse(&api.SetACLPolicyResponse{}), nil
}