Skip to content

Commit 94965a2

Browse files
snekoploxiln
authored andcommitted
Google provider: refactor userInGroup() to use Members.HasMember() (#28)
more efficient, works with nested groups (it was thought that #6 added support for nested groups but it didn't)
1 parent 2b40ede commit 94965a2

File tree

2 files changed

+12
-24
lines changed

2 files changed

+12
-24
lines changed

Gopkg.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

providers/google.go

+11-23
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616

1717
"golang.org/x/oauth2"
1818
"golang.org/x/oauth2/google"
19-
"google.golang.org/api/admin/directory/v1"
19+
admin "google.golang.org/api/admin/directory/v1"
2020
)
2121

2222
type GoogleProvider struct {
@@ -179,33 +179,21 @@ func getAdminService(adminEmail string, credentialsReader io.Reader) *admin.Serv
179179
}
180180

181181
func userInGroup(service *admin.Service, groups []string, email string) bool {
182-
pageToken := ""
183-
// limit to 10 pages/requests
184-
for i := 0; i < 10; i++ {
185-
req := service.Groups.List().UserKey(email)
186-
if pageToken != "" {
187-
req.PageToken(pageToken)
188-
}
189-
resp, err := req.Do()
182+
for _, allowedgroup := range groups {
183+
resp, err := service.Members.HasMember(allowedgroup, email).Do()
184+
190185
if err != nil {
191-
log.Printf("Error calling service.Groups.List().userKey(%s)", email)
186+
log.Printf("Error calling service.Members.HasMember(%s, %s): %s", allowedgroup, email, err)
192187
return false
193188
}
194-
for _, group := range resp.Groups {
195-
for _, allowedgroup := range groups {
196-
if group.Email == allowedgroup {
197-
log.Printf("%s is a member of %s, authorized", email, allowedgroup)
198-
return true
199-
}
200-
}
201-
}
202-
if resp.NextPageToken == "" {
203-
log.Printf("%s not found in any allowed groups", email)
204-
return false
189+
190+
if resp.IsMember {
191+
log.Printf("%s is a member of %s, authorized", email, allowedgroup)
192+
return true
205193
}
206-
pageToken = resp.NextPageToken
207194
}
208-
log.Printf("WARNING: %s has more than 10 pages of groups", email)
195+
196+
log.Printf("%s not found in any allowed groups", email)
209197
return false
210198
}
211199

0 commit comments

Comments
 (0)