...

Source file src/edge-infra.dev/pkg/edge/api/services/role_service.go

Documentation: edge-infra.dev/pkg/edge/api/services

     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  //go:generate mockgen -destination=../mocks/mock_role_service.go -package=mocks edge-infra.dev/pkg/edge/api/services RoleService
    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