@@ -18,9 +18,6 @@ type AWSSCIMProvider interface {
1818 // ListUsers lists users in SCIM Provider
1919 ListUsers (ctx context.Context , filter string ) (* aws.ListUsersResponse , error )
2020
21- // CreateUser creates a user in SCIM Provider
22- CreateUser (ctx context.Context , u * aws.CreateUserRequest ) (* aws.CreateUserResponse , error )
23-
2421 // CreateOrGetUser creates a user in SCIM Provider
2522 CreateOrGetUser (ctx context.Context , u * aws.CreateUserRequest ) (* aws.CreateUserResponse , error )
2623
@@ -39,9 +36,6 @@ type AWSSCIMProvider interface {
3936 // ListGroups lists groups in SCIM Provider
4037 ListGroups (ctx context.Context , filter string ) (* aws.ListGroupsResponse , error )
4138
42- // CreateGroup creates a group in SCIM Provider
43- CreateGroup (ctx context.Context , g * aws.CreateGroupRequest ) (* aws.CreateGroupResponse , error )
44-
4539 // CreateOrGetGroup creates a group in SCIM Provider
4640 CreateOrGetGroup (ctx context.Context , g * aws.CreateGroupRequest ) (* aws.CreateGroupResponse , error )
4741
@@ -81,24 +75,28 @@ func (s *Provider) GetGroups(ctx context.Context) (*model.GroupsResult, error) {
8175
8276 groups := make ([]* model.Group , len (groupsResponse .Resources ))
8377 for i , group := range groupsResponse .Resources {
84- e := model .GroupBuilder ().
78+ g := model .GroupBuilder ().
8579 WithSCIMID (group .ID ).
8680 WithName (group .DisplayName ).
8781 WithIPID (group .ExternalID ).
8882 Build ()
8983
90- groups [i ] = e
84+ groups [i ] = g
85+
9186 }
9287
9388 groupsResult := model .GroupsResultBuilder ().WithResources (groups ).Build ()
94-
9589 slog .Debug ("scim: GetGroups()" , "groups" , len (groups ))
9690
9791 return groupsResult , nil
9892}
9993
10094// CreateGroups creates groups in SCIM Provider
10195func (s * Provider ) CreateGroups (ctx context.Context , gr * model.GroupsResult ) (* model.GroupsResult , error ) {
96+ if gr == nil {
97+ return nil , fmt .Errorf ("scim: error creating groups, groups result is nil" )
98+ }
99+
102100 groups := make ([]* model.Group , len (gr .Resources ))
103101
104102 for i , group := range gr .Resources {
@@ -114,18 +112,17 @@ func (s *Provider) CreateGroups(ctx context.Context, gr *model.GroupsResult) (*m
114112 return nil , fmt .Errorf ("scim: error creating group: %w" , err )
115113 }
116114
117- e := model .GroupBuilder ().
115+ g := model .GroupBuilder ().
118116 WithSCIMID (r .ID ).
119117 WithName (group .Name ).
120118 WithIPID (group .IPID ).
121119 WithEmail (group .Email ).
122120 Build ()
123121
124- groups [i ] = e
122+ groups [i ] = g
125123 }
126124
127125 groupsResult := model .GroupsResultBuilder ().WithResources (groups ).Build ()
128-
129126 slog .Debug ("scim: CreateGroups()" , "groups" , len (groups ))
130127
131128 return groupsResult , nil
@@ -162,14 +159,14 @@ func (s *Provider) UpdateGroups(ctx context.Context, gr *model.GroupsResult) (*m
162159 }
163160
164161 // return the same group
165- e := model .GroupBuilder ().
162+ g := model .GroupBuilder ().
166163 WithSCIMID (group .SCIMID ).
167164 WithName (group .Name ).
168165 WithIPID (group .IPID ).
169166 WithEmail (group .Email ).
170167 Build ()
171168
172- groups [i ] = e
169+ groups [i ] = g
173170 }
174171
175172 groupsResult := model .GroupsResultBuilder ().WithResources (groups ).Build ()
@@ -200,8 +197,8 @@ func (s *Provider) GetUsers(ctx context.Context) (*model.UsersResult, error) {
200197
201198 users := make ([]* model.User , len (usersResponse .Resources ))
202199 for i , user := range usersResponse .Resources {
203- e := buildUser (user )
204- users [i ] = e
200+ u := buildUser (user )
201+ users [i ] = u
205202 }
206203
207204 usersResult := model .UsersResultBuilder ().WithResources (users ).Build ()
@@ -286,13 +283,13 @@ type patchValue struct {
286283
287284// CreateGroupsMembers creates groups members in SCIM Provider given a list of groups members
288285func (s * Provider ) CreateGroupsMembers (ctx context.Context , gmr * model.GroupsMembersResult ) (* model.GroupsMembersResult , error ) {
289- groupsMembers := make ([]* model.GroupMembers , 0 )
286+ groupsMembers := make ([]* model.GroupMembers , len ( gmr . Resources ) )
290287
291- for _ , groupMembers := range gmr .Resources {
292- members := make ([]* model.Member , 0 )
293- membersIDValue := []patchValue {}
288+ for i , groupMembers := range gmr .Resources {
289+ members := make ([]* model.Member , len ( groupMembers . Resources ) )
290+ membersIDValue := make ( []patchValue , len ( groupMembers . Resources ))
294291
295- for _ , member := range groupMembers .Resources {
292+ for j , member := range groupMembers .Resources {
296293 if member .SCIMID == "" {
297294 u , err := s .scim .GetUserByUserName (ctx , member .Email )
298295 if err != nil {
@@ -301,28 +298,27 @@ func (s *Provider) CreateGroupsMembers(ctx context.Context, gmr *model.GroupsMem
301298 member .SCIMID = u .ID
302299 }
303300
304- membersIDValue = append ( membersIDValue , patchValue {
301+ membersIDValue [ j ] = patchValue {
305302 Value : member .SCIMID ,
306- })
303+ }
307304
308- e := model .MemberBuilder ().
305+ m := model .MemberBuilder ().
309306 WithIPID (member .IPID ).
310307 WithSCIMID (member .SCIMID ).
311308 WithEmail (member .Email ).
312309 WithStatus (member .Status ).
313310 Build ()
314311
315312 slog .Warn ("adding member to group" , "group" , groupMembers .Group .Name , "email" , member .Email )
316- members = append (members , e )
317-
313+ members [j ] = m
318314 }
319315
320- e := model .GroupMembersBuilder ().
316+ gm := model .GroupMembersBuilder ().
321317 WithGroup (groupMembers .Group ).
322318 WithResources (members ).
323319 Build ()
324320
325- groupsMembers = append ( groupsMembers , e )
321+ groupsMembers [ i ] = gm
326322
327323 patchOperations := patchGroupOperations ("add" , "members" , membersIDValue , groupMembers )
328324
@@ -397,9 +393,9 @@ func (s *Provider) GetGroupsMembers(ctx context.Context, gr *model.GroupsResult)
397393 }
398394
399395 for _ , gr := range lgr .Resources {
400- members := make ([]* model.Member , 0 )
396+ members := make ([]* model.Member , len ( gr . Members ) )
401397
402- for _ , member := range gr .Members {
398+ for j , member := range gr .Members {
403399 u , err := s .scim .GetUser (ctx , member .Value )
404400 if err != nil {
405401 return nil , fmt .Errorf ("scim: error getting user: %s, error %w" , member .Value , err )
@@ -410,15 +406,15 @@ func (s *Provider) GetGroupsMembers(ctx context.Context, gr *model.GroupsResult)
410406 WithEmail (u .Emails [0 ].Value ).
411407 Build ()
412408
413- members = append ( members , m )
409+ members [ j ] = m
414410 }
415411
416- e := model .GroupMembersBuilder ().
412+ gms := model .GroupMembersBuilder ().
417413 WithGroup (group ).
418414 WithResources (members ).
419415 Build ()
420416
421- groupMembers = append (groupMembers , e )
417+ groupMembers = append (groupMembers , gms )
422418 }
423419 }
424420
@@ -431,22 +427,23 @@ func (s *Provider) GetGroupsMembers(ctx context.Context, gr *model.GroupsResult)
431427// GetGroupsMembersBruteForce returns a list of groups and their members from the SCIM Provider
432428// NOTE: this is an bad alternative to the method GetGroupsMembers, because read the note in the method.
433429func (s * Provider ) GetGroupsMembersBruteForce (ctx context.Context , gr * model.GroupsResult , ur * model.UsersResult ) (* model.GroupsMembersResult , error ) {
434- groupMembers := make ([]* model.GroupMembers , 0 )
430+ groupMembers := make ([]* model.GroupMembers , len ( gr . Resources ) )
435431
436432 // brute force implemented here thanks to the fxxckin' aws sso scim api
437- for _ , group := range gr .Resources {
433+ for i , group := range gr .Resources {
438434 members := make ([]* model.Member , 0 )
439435
440436 for _ , user := range ur .Resources {
441437
442438 // https://docs.aws.amazon.com/singlesignon/latest/developerguide/listgroups.html
443- f := fmt .Sprintf ("id eq %q and members eq %q" , group .SCIMID , user .SCIMID )
444- lgr , err := s .scim .ListGroups (ctx , f )
439+ filter := fmt .Sprintf ("id eq %q and members eq %q" , group .SCIMID , user .SCIMID )
440+ lgr , err := s .scim .ListGroups (ctx , filter )
445441 if err != nil {
446442 return nil , fmt .Errorf ("scim: error listing groups: %w" , err )
447443 }
448444
449- if lgr .TotalResults > 0 { // crazy thing of the AWS SSO SCIM API, it doesn't return the member into the Resources array
445+ // AWS SSO SCIM API, it doesn't return the member into the Resources array
446+ if lgr .TotalResults > 0 {
450447 m := model .MemberBuilder ().
451448 WithIPID (user .IPID ).
452449 WithSCIMID (user .SCIMID ).
@@ -460,12 +457,13 @@ func (s *Provider) GetGroupsMembersBruteForce(ctx context.Context, gr *model.Gro
460457 members = append (members , m )
461458 }
462459 }
463- e := model .GroupMembersBuilder ().
460+
461+ gms := model .GroupMembersBuilder ().
464462 WithGroup (group ).
465463 WithResources (members ).
466464 Build ()
467465
468- groupMembers = append ( groupMembers , e )
466+ groupMembers [ i ] = gms
469467 }
470468
471469 slog .Debug ("scim: GetGroupsMembersBruteForce()" , "groups_members" , len (groupMembers ))
0 commit comments