Skip to content

Commit aca5060

Browse files
Joshua Hellerdrdaeman
Joshua Heller
authored andcommitted
1 parent 07b8756 commit aca5060

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

internal/google/client.go

+30
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package google
1717

1818
import (
1919
"context"
20+
"fmt"
2021

2122
"golang.org/x/oauth2/google"
2223
admin "google.golang.org/api/admin/directory/v1"
@@ -29,6 +30,7 @@ type Client interface {
2930
GetDeletedUsers() ([]*admin.User, error)
3031
GetGroups(string) ([]*admin.Group, error)
3132
GetGroupMembers(*admin.Group) ([]*admin.Member, error)
33+
GetGroupMemberUsers(*admin.Group) ([]*admin.Member, error)
3234
}
3335

3436
type client struct {
@@ -83,6 +85,34 @@ func (c *client) GetGroupMembers(g *admin.Group) ([]*admin.Member, error) {
8385
return m, err
8486
}
8587

88+
// GetGroupMemberUsers will recursively get the users of the group specified
89+
func (c *client) GetGroupMemberUsers(g *admin.Group) ([]*admin.Member, error) {
90+
u := make([]*admin.Member, 0)
91+
err := c.service.Members.List(g.Id).Pages(context.TODO(), func(members *admin.Members) error {
92+
for _, m := range members.Members {
93+
if m.Type == "GROUP" {
94+
q := fmt.Sprintf("email=%s", m.Email)
95+
g, err := c.GetGroups(q)
96+
if err != nil {
97+
return err
98+
}
99+
100+
c, err := c.GetGroupMembers(g[0])
101+
if err != nil {
102+
return err
103+
}
104+
105+
u = append(u, c...)
106+
} else {
107+
u = append(u, m)
108+
}
109+
}
110+
return nil
111+
})
112+
113+
return u, err
114+
}
115+
86116
// GetUsers will get the users from Google's Admin API
87117
// using the Method: users.list with parameter "query"
88118
// References:

internal/sync.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ func (s *syncGSuite) getGoogleGroupsAndUsers(googleGroups []*admin.Group) ([]*ad
491491
}
492492

493493
log.Debug("get group members from google")
494-
groupMembers, err := s.google.GetGroupMembers(g)
494+
groupMembers, err := s.google.GetGroupMemberUsers(g)
495495
if err != nil {
496496
return nil, nil, err
497497
}

0 commit comments

Comments
 (0)