Skip to content

Commit a2b25d2

Browse files
authored
Add handling for an email alias for a user (#276)
* de-alias Users Where member is included within a group using a user's email alias. This is then de-aliased to the users primary email address. * Improve logging
1 parent 0b541bd commit a2b25d2

File tree

1 file changed

+47
-16
lines changed

1 file changed

+47
-16
lines changed

internal/sync.go

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -767,8 +767,9 @@ func (s *syncGSuite) getGoogleGroupsAndUsers(queryGroups string, queryUsers stri
767767
// If we've not seen the user email address before add it to the list of unique users
768768
// also, we need to deduplicate the list of members.
769769
log.WithFields(log.Fields{
770-
"func": funcName,
771-
"group.Id": g.Id,
770+
"func": funcName,
771+
"group.Id": g.Id,
772+
"membersUsers": membersUsers,
772773
}).Debug("Process group membership")
773774

774775
gUniqMembers := make(map[string]*admin.User)
@@ -1333,15 +1334,16 @@ func (s *syncGSuite) getGoogleUsersInGroup(group *admin.Group, userCache map[str
13331334
"func": funcName,
13341335
"GroupId": group.Id,
13351336
"# Members": len(groupMembers),
1336-
}).Debug("processing membership")
1337+
"Members": groupMembers,
1338+
}).Debug("Group membership")
13371339

13381340
// process the members of the group
13391341
for memberIndex, m := range groupMembers {
13401342
log.WithFields(log.Fields{
13411343
"func": funcName,
13421344
"GroupId": group.Id,
13431345
"Member#": memberIndex,
1344-
}).WithField("Member", m)
1346+
}).Debug("Parsing member")
13451347

13461348
if len(m.Email) == 0 {
13471349
log.WithFields(log.Fields{
@@ -1367,6 +1369,7 @@ func (s *syncGSuite) getGoogleUsersInGroup(group *admin.Group, userCache map[str
13671369
log.WithFields(log.Fields{
13681370
"func": funcName,
13691371
"GroupId": group.Id,
1372+
"Member#": memberIndex,
13701373
}).Info("skip: external user")
13711374
continue
13721375
}
@@ -1377,6 +1380,7 @@ func (s *syncGSuite) getGoogleUsersInGroup(group *admin.Group, userCache map[str
13771380
log.WithFields(log.Fields{
13781381
"func": funcName,
13791382
"GroupId": group.Id,
1383+
"Member#": memberIndex,
13801384
}).Info("skip: suspended user")
13811385
continue
13821386
}
@@ -1386,30 +1390,38 @@ func (s *syncGSuite) getGoogleUsersInGroup(group *admin.Group, userCache map[str
13861390
log.WithFields(log.Fields{
13871391
"func": funcName,
13881392
"GroupId": group.Id,
1393+
"Member#": memberIndex,
13891394
}).Info("skip: ignore list")
13901395
continue
13911396
}
13921397

1398+
// Ignore any users that don't have a valid status
13931399
allowedStatus := map[string]bool{"ACTIVE": true, "SUSPENDED": true}
13941400
if !allowedStatus[m.Status] {
13951401
log.WithFields(log.Fields{
13961402
"func": funcName,
13971403
"GroupId": group.Id,
1404+
"Member#": memberIndex,
13981405
}).Info("skip: !ACTIVE")
13991406
continue
14001407
}
14011408

1409+
// This is a member that should be synced to AWS
14021410
log.WithFields(log.Fields{
14031411
"func": funcName,
14041412
"GroupId": group.Id,
1413+
"Member#": memberIndex,
14051414
}).Debug("valid member")
1415+
var memberEmail string
14061416
// Find the group member in the cache of UserDetails
14071417
if _, found := userCache[m.Email]; !found {
14081418
log.WithFields(log.Fields{
14091419
"func": funcName,
14101420
"GroupId": group.Id,
1421+
"Member#": memberIndex,
14111422
}).Debug("Cache: user not found")
1412-
1423+
// Looking up the user based on the member email address,
1424+
// it might be an alias
14131425
googleUsers, err := s.google.GetUsers("email="+m.Email, s.cfg.UserFilter)
14141426
if err != nil {
14151427
log.WithFields(log.Fields{
@@ -1419,33 +1431,52 @@ func (s *syncGSuite) getGoogleUsersInGroup(group *admin.Group, userCache map[str
14191431
}).Error("Fetching user")
14201432
continue
14211433
}
1434+
// Add user to the cache
14221435
for _, u := range googleUsers {
1436+
if _, found := userCache[u.PrimaryEmail]; !found {
1437+
log.WithFields(log.Fields{
1438+
"func": funcName,
1439+
"GroupId": group.Id,
1440+
"Member#": memberIndex,
1441+
}).Debug("Cache user")
1442+
userCache[u.PrimaryEmail] = u
1443+
}
1444+
memberEmail = u.PrimaryEmail
1445+
}
1446+
// Check whether the member was based on an alias
1447+
if memberEmail != m.Email {
14231448
log.WithFields(log.Fields{
14241449
"func": funcName,
14251450
"GroupId": group.Id,
14261451
"Member#": memberIndex,
1427-
}).Debug("Cache user")
1428-
userCache[u.PrimaryEmail] = u
1452+
}).Debug("Member listed using an alias")
14291453
}
1454+
} else {
1455+
// member (email address) found in user cache
1456+
memberEmail = m.Email
14301457
}
1431-
log.WithFields(log.Fields{
1432-
"func": funcName,
1433-
"GroupId": group.Id,
1434-
"Member#": memberIndex,
1435-
}).Debug("Add member")
1436-
if userCache[m.Email] == nil {
1458+
1459+
// Add user based on user cache
1460+
if userCache[memberEmail] == nil {
14371461
log.WithFields(log.Fields{
1438-
"func": funcName,
1439-
"Member": m,
1462+
"func": funcName,
1463+
"memberEmail": memberEmail,
14401464
}).Error("Can't retrieve user")
14411465
continue
1466+
} else {
1467+
log.WithFields(log.Fields{
1468+
"func": funcName,
1469+
"GroupId": group.Id,
1470+
"Member#": memberIndex,
1471+
}).Debug("Add member")
14421472
}
1443-
membersUsers = append(membersUsers, userCache[m.Email])
1473+
membersUsers = append(membersUsers, userCache[memberEmail])
14441474

14451475
}
14461476
log.WithFields(log.Fields{
14471477
"func": funcName,
14481478
"GroupId": group.Id,
1479+
"# Members": len(membersUsers),
14491480
"membersUsers": membersUsers,
14501481
}).Debug("Return")
14511482
return membersUsers

0 commit comments

Comments
 (0)