@@ -17,6 +17,7 @@ package google
17
17
18
18
import (
19
19
"context"
20
+ "fmt"
20
21
21
22
"golang.org/x/oauth2/google"
22
23
admin "google.golang.org/api/admin/directory/v1"
@@ -29,6 +30,7 @@ type Client interface {
29
30
GetDeletedUsers () ([]* admin.User , error )
30
31
GetGroups (string ) ([]* admin.Group , error )
31
32
GetGroupMembers (* admin.Group ) ([]* admin.Member , error )
33
+ GetGroupMemberUsers (* admin.Group ) ([]* admin.Member , error )
32
34
}
33
35
34
36
type client struct {
@@ -83,6 +85,34 @@ func (c *client) GetGroupMembers(g *admin.Group) ([]*admin.Member, error) {
83
85
return m , err
84
86
}
85
87
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
+
86
116
// GetUsers will get the users from Google's Admin API
87
117
// using the Method: users.list with parameter "query"
88
118
// References:
0 commit comments