in groups/service.go [311:361]
func (as *adminService) RemoveOwnerOrManagersFromGroup(group GoogleGroup, members []string) error {
if *verbose {
log.Printf("adminService.RemoveOwnerOrManagersGroup %s %v", group.EmailId, members)
}
l, err := as.client.ListMembers(group.EmailId)
if err != nil {
if as.checkForAPIErr404(err) {
log.Printf("skipping removing members group %q as group 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 _, m := range l {
found := false
for _, m2 := range members {
if EmailAddressEquals(m2, m.Email) {
found = true
break
}
}
// If a member m exists in our desired list of members, do nothing.
// However, if this member m does not exist in our desired list of
// members but is in the role of a MEMBER (non OWNER/MANAGER), still
// do nothing since we care only about OWNER/MANAGER roles here.
if found || m.Role == MemberRole {
continue
}
// a person was deleted from a group, let's remove them
if config.ConfirmChanges {
log.Printf("Removing %s from %q as OWNER or MANAGER\n", m.Email, group.EmailId)
err := as.client.DeleteMember(group.EmailId, m.Id)
if err != nil {
logErr := fmt.Errorf("unable to remove %s from %q as a %s: %w", m.Email, group.EmailId, m.Role, err)
log.Printf("%s\n", logErr)
errs = append(errs, logErr)
continue
}
log.Printf("Removed %s from %q as OWNER or MANAGER\n", m.Email, group.EmailId)
} else {
log.Printf("dry-run: would remove %s from %q as OWNER or MANAGER\n", m.Email, group.EmailId)
}
}
return utilerrors.NewAggregate(errs)
}