...
1 package services
2
3 import (
4 "context"
5 "fmt"
6
7 "edge-infra.dev/pkg/edge/bsl"
8
9 "edge-infra.dev/pkg/edge/api/bsl/types"
10 "edge-infra.dev/pkg/edge/api/graph/mapper"
11 "edge-infra.dev/pkg/edge/api/graph/model"
12 "edge-infra.dev/pkg/edge/api/utils"
13 )
14
15 const (
16 assignGroupPath = "/security/group-memberships"
17 revokeGroupPath = "/security/group-memberships/remove"
18 getUsersGroups = "/security/group-memberships/groups?username=%s"
19 recoverPassword = "/security/security-user-passwords/%s/recover"
20 tokenParam = "token"
21 )
22
23
24 type RoleService interface {
25 AddRoleToUser(ctx context.Context, username, roleName string) error
26 AddRoleToUserLegacy(ctx context.Context, org, username, roleName string) error
27 RevokeRoleFromUser(ctx context.Context, username, roleName string) error
28 IsOrgAdmin(roles []string) bool
29 IsBannerAdmin(roles []string) bool
30 GetEdgeGroupsForUserUser(ctx context.Context, username string) ([]string, error)
31 RecoverPassword(ctx context.Context, username string, organization string) error
32 }
33
34 type roleService struct {
35 BSPConfig types.BSPConfig
36 BSLClient *bsl.Client
37 }
38
39 func (r roleService) IsOrgAdmin(roles []string) bool {
40 return utils.Contains(roles, string(model.RoleEdgeOrgAdmin))
41 }
42
43 func (r roleService) IsBannerAdmin(roles []string) bool {
44 return utils.Contains(roles, string(model.RoleEdgeBannerAdmin))
45 }
46
47 func (r roleService) GetEdgeGroupsForUserUser(ctx context.Context, username string) ([]string, error) {
48 return GetGroupsForUser(ctx, r.BSLClient.WithUserTokenCredentials(ctx), username)
49 }
50
51 func (r roleService) AddRoleToUser(ctx context.Context, username, roleName string) error {
52 return r.BSLClient.
53 WithUserTokenCredentials(ctx).
54 SetPayload(mapper.ToGroupData(username, roleName)).
55 Post(assignGroupPath)
56 }
57
58 func (r roleService) AddRoleToUserLegacy(ctx context.Context, org, username, roleName string) error {
59 client, err := r.BSLClient.WithBackendOrgAccessKey(ctx, org)
60 if err != nil {
61 return err
62 }
63 return client.SetPayload(mapper.ToGroupData(username, roleName)).Post(assignGroupPath)
64 }
65
66 func (r roleService) RevokeRoleFromUser(ctx context.Context, username, roleName string) error {
67 return r.BSLClient.
68 WithUserTokenCredentials(ctx).
69 SetPayload(mapper.ToGroupData(username, roleName)).
70 Post(revokeGroupPath)
71 }
72
73 func (r roleService) RecoverPassword(ctx context.Context, username string, organization string) error {
74 client, err := r.BSLClient.WithBackendOrgAccessKey(ctx, organization)
75 if err != nil {
76 return err
77 }
78 req := types.RecoverPasswordRequest{
79 ResetURL: r.BSPConfig.ResetURL,
80 TokenParam: tokenParam,
81 }
82 return client.SetPayload(req).Post(fmt.Sprintf(recoverPassword, username))
83 }
84
85 func NewRoleService(BSPConfig types.BSPConfig, cl *bsl.Client) RoleService {
86 return &roleService{
87 BSPConfig: BSPConfig,
88 BSLClient: cl,
89 }
90 }
91
View as plain text