in internal/sync.go [473:526]
func (s *syncGSuite) getGoogleGroupsAndUsers(googleGroups []*admin.Group) ([]*admin.User, map[string][]*admin.User, error) {
gUsers := make([]*admin.User, 0)
gGroupsUsers := make(map[string][]*admin.User)
gUniqUsers := make(map[string]*admin.User)
for _, g := range googleGroups {
log := log.WithFields(log.Fields{"group": g.Name})
if s.ignoreGroup(g.Email) {
log.Debug("ignoring group")
continue
}
log.Debug("get group members from google")
groupMembers, err := s.google.GetGroupMembers(g)
if err != nil {
return nil, nil, err
}
log.Debug("get users")
membersUsers := make([]*admin.User, 0)
for _, m := range groupMembers {
if s.ignoreUser(m.Email) {
log.WithField("id", m.Email).Debug("ignoring user")
continue
}
log.WithField("id", m.Email).Debug("get user")
q := fmt.Sprintf("email:%s", m.Email)
u, err := s.google.GetUsers(q) // TODO: implement GetUser(m.Email)
if err != nil {
return nil, nil, err
}
membersUsers = append(membersUsers, u[0])
_, ok := gUniqUsers[m.Email]
if !ok {
gUniqUsers[m.Email] = u[0]
}
}
gGroupsUsers[g.Name] = membersUsers
}
for _, user := range gUniqUsers {
gUsers = append(gUsers, user)
}
return gUsers, gGroupsUsers, nil
}