@@ -38,6 +38,11 @@ type client struct {
3838 service * admin.Service
3939}
4040
41+ const (
42+ // Maximum number of retries for admin api
43+ MaxRetries = 5
44+ )
45+
4146// NewClient creates a new client for Google's Admin API
4247func NewClient (ctx context.Context , adminEmail string , serviceAccountKey []byte ) (Client , error ) {
4348 config , err := google .JWTConfigFromJSON (serviceAccountKey , admin .AdminDirectoryGroupReadonlyScope ,
@@ -65,6 +70,19 @@ func NewClient(ctx context.Context, adminEmail string, serviceAccountKey []byte)
6570
6671// GetDeletedUsers will get the deleted users from the Google's Admin API.
6772func (c * client ) GetDeletedUsers () ([]* admin.User , error ) {
73+ var err error
74+ var members []* admin.User
75+
76+ for iteration := 1 ; iteration < MaxRetries ; iteration ++ {
77+ members , err = c .getDeletedUsers ()
78+ if err == nil {
79+ return members , nil
80+ }
81+ }
82+ return nil , err
83+ }
84+
85+ func (c * client ) getDeletedUsers () ([]* admin.User , error ) {
6886 u := make ([]* admin.User , 0 )
6987 var err error
7088
@@ -80,6 +98,19 @@ func (c *client) GetDeletedUsers() ([]*admin.User, error) {
8098
8199// GetGroupMembers will get the members of the group specified
82100func (c * client ) GetGroupMembers (g * admin.Group ) ([]* admin.Member , error ) {
101+ var err error
102+ var members []* admin.Member
103+
104+ for iteration := 1 ; iteration < MaxRetries ; iteration ++ {
105+ members , err = c .getGroupMembers (g )
106+ if err == nil {
107+ return members , nil
108+ }
109+ }
110+ return nil , err
111+ }
112+
113+ func (c * client ) getGroupMembers (g * admin.Group ) ([]* admin.Member , error ) {
83114 m := make ([]* admin.Member , 0 )
84115 var err error
85116
@@ -108,12 +139,25 @@ func (c *client) GetGroupMembers(g *admin.Group) ([]*admin.Member, error) {
108139// orgName=Engineering orgTitle:Manager
109140// EmploymentData.projects:'GeneGnomes'
110141func (c * client ) GetUsers (query string , filter string ) ([]* admin.User , error ) {
142+ var err error
143+ var users []* admin.User
144+
145+ for iteration := 1 ; iteration < MaxRetries ; iteration ++ {
146+ users , err = c .getUsers (query , filter )
147+ if err == nil {
148+ return users , nil
149+ }
150+ }
151+ return nil , err
152+ }
153+
154+ func (c * client ) getUsers (query string , filter string ) ([]* admin.User , error ) {
111155 u := make ([]* admin.User , 0 )
112156 var err error
113157
114158 // If we have an empty query, return nothing.
115159 if query == "" {
116- return u , err
160+ return nil , nil
117161 }
118162
119163 // If we have wildcard then fetch all users
@@ -170,6 +214,19 @@ func (c *client) GetUsers(query string, filter string) ([]*admin.User, error) {
170214// name:Admin* email:aws-*
171215// email:aws-*
172216func (c * client ) GetGroups (query string ) ([]* admin.Group , error ) {
217+ var err error
218+ var groups []* admin.Group
219+
220+ for iteration := 1 ; iteration < MaxRetries ; iteration ++ {
221+ groups , err = c .getGroups (query )
222+ if err == nil {
223+ return groups , nil
224+ }
225+ }
226+ return nil , err
227+ }
228+
229+ func (c * client ) getGroups (query string ) ([]* admin.Group , error ) {
173230 g := make ([]* admin.Group , 0 )
174231 var err error
175232
0 commit comments