in internal/sync.go [592:628]
func getUserOperations(awsUsers []*aws.User, googleUsers []*admin.User) (add []*aws.User, delete []*aws.User, update []*aws.User, equals []*aws.User) {
awsMap := make(map[string]*aws.User)
googleMap := make(map[string]struct{})
for _, awsUser := range awsUsers {
awsMap[awsUser.Username] = awsUser
}
for _, gUser := range googleUsers {
googleMap[gUser.PrimaryEmail] = struct{}{}
}
// AWS Users found and not found in google
for _, gUser := range googleUsers {
if awsUser, found := awsMap[gUser.PrimaryEmail]; found {
if awsUser.Active == gUser.Suspended ||
awsUser.Name.GivenName != gUser.Name.GivenName ||
awsUser.Name.FamilyName != gUser.Name.FamilyName {
update = append(update, aws.NewUser(gUser.Name.GivenName, gUser.Name.FamilyName, gUser.PrimaryEmail, !gUser.Suspended))
} else {
equals = append(equals, awsUser)
}
} else {
add = append(add, aws.NewUser(gUser.Name.GivenName, gUser.Name.FamilyName, gUser.PrimaryEmail, !gUser.Suspended))
}
}
// Google Users founds and not in aws
for _, awsUser := range awsUsers {
if _, found := googleMap[awsUser.Username]; !found {
delete = append(delete, aws.NewUser(awsUser.Name.GivenName, awsUser.Name.FamilyName, awsUser.Username, awsUser.Active))
}
}
return add, delete, update, equals
}