func()

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)
}