in groups/service.go [135:204]
func (as *adminService) AddOrUpdateGroupMembers(group GoogleGroup, role string, members []string) error {
if *verbose {
log.Printf("adminService.AddOrUpdateGroupMembers %s %s %v", group.EmailId, role, members)
}
l, err := as.client.ListMembers(group.EmailId)
if err != nil {
if as.checkForAPIErr404(err) {
log.Printf("skipping adding members to group %q as it has not yet been created\n", group.EmailId)
return nil
}
return fmt.Errorf("unable to retrieve members in group %q: %w", group.EmailId, err)
}
// aggregate the errors that occured and return them together in the end.
var errs []error
for _, memberEmailId := range members {
var member *admin.Member
for _, m := range l {
if EmailAddressEquals(m.Email, memberEmailId) {
member = m
break
}
}
if member != nil {
// update if necessary
if member.Role != role {
member.Role = role
if config.ConfirmChanges {
log.Printf("Updating %s to %q as a %s\n", memberEmailId, group.EmailId, role)
_, err := as.client.UpdateMember(group.EmailId, member.Email, member)
if err != nil {
logErr := fmt.Errorf("unable to update %s in %q as %s: %w", memberEmailId, group.EmailId, role, err)
log.Printf("%s\n", logErr)
errs = append(errs, logErr)
continue
}
log.Printf("Updated %s to %q as a %s\n", memberEmailId, group.EmailId, role)
} else {
log.Printf("dry-run: would update %s to %q as %s\n", memberEmailId, group.EmailId, role)
}
}
continue
}
member = &admin.Member{
Email: memberEmailId,
Role: role,
}
// We did not find the person in the google group, so we add them
if config.ConfirmChanges {
log.Printf("Adding %s to %q as a %s\n", memberEmailId, group.EmailId, role)
_, err := as.client.InsertMember(group.EmailId, member)
if err != nil {
logErr := fmt.Errorf("unable to add %s to %q as %s: %w", memberEmailId, group.EmailId, role, err)
log.Printf("%s\n", logErr)
errs = append(errs, logErr)
continue
}
log.Printf("Added %s to %q as a %s\n", memberEmailId, group.EmailId, role)
} else {
log.Printf("dry-run: would add %s to %q as %s\n", memberEmailId, group.EmailId, role)
}
}
return utilerrors.NewAggregate(errs)
}