@@ -187,72 +187,78 @@ func (o *orgResourceType) Grants(
187187 return nil , "" , nil , err
188188 }
189189
190- opts := github.ListMembersOptions {
191- ListOptions : github.ListOptions {
192- Page : page ,
193- PerPage : maxPageSize ,
194- },
195- }
190+ var (
191+ reqAnnos annotations.Annotations
192+ pageToken string
193+ rv = []* v2.Grant {}
194+ )
196195
197- orgName , err := o .orgCache .GetOrgName (ctx , resource .Id )
198- if err != nil {
199- return nil , "" , nil , err
200- }
196+ switch rId := bag .ResourceTypeID (); rId {
197+ case resourceTypeOrg .Id :
198+ bag .Pop ()
199+ bag .Push (pagination.PageState {
200+ ResourceTypeID : orgRoleAdmin ,
201+ })
202+ bag .Push (pagination.PageState {
203+ ResourceTypeID : orgRoleMember ,
204+ })
205+ case orgRoleAdmin , orgRoleMember :
201206
202- users , resp , err := o .client .Organizations .ListMembers (ctx , orgName , & opts )
203- if err != nil {
204- if isNotFoundError (resp ) {
205- return nil , "" , nil , uhttp .WrapErrors (codes .NotFound , fmt .Sprintf ("org: %s not found" , orgName ))
207+ orgName , err := o .orgCache .GetOrgName (ctx , resource .Id )
208+ if err != nil {
209+ return nil , "" , nil , err
206210 }
207- errMsg := "github-connectorv2: failed to list org members"
208- if isRatelimited (resp ) {
209- return nil , "" , nil , uhttp .WrapErrors (codes .Unavailable , "too many requests" , err )
211+ opts := github.ListMembersOptions {
212+ Role : rId ,
213+ ListOptions : github.ListOptions {
214+ Page : page ,
215+ PerPage : maxPageSize ,
216+ },
210217 }
211- return nil , "" , nil , fmt .Errorf ("%s: %w" , errMsg , err )
212- }
213-
214- nextPage , reqAnnos , err := parseResp (resp )
215- if err != nil {
216- return nil , "" , nil , fmt .Errorf ("github-connectorv2: failed to parse response: %w" , err )
217- }
218-
219- pageToken , err := bag .NextToken (nextPage )
220- if err != nil {
221- return nil , "" , nil , err
222- }
223-
224- var rv []* v2.Grant
225- for _ , user := range users {
226- membership , _ , err := o .client .Organizations .GetOrgMembership (ctx , user .GetLogin (), orgName )
218+ users , resp , err := o .client .Organizations .ListMembers (ctx , orgName , & opts )
227219 if err != nil {
228- return nil , "" , nil , fmt .Errorf ("github-connectorv2: failed to get org memberships for user: %w" , err )
220+ if isNotFoundError (resp ) {
221+ return nil , "" , nil , uhttp .WrapErrors (codes .NotFound , fmt .Sprintf ("org: %s not found" , orgName ))
222+ }
223+ errMsg := "github-connectorv2: failed to list org members"
224+ if isRatelimited (resp ) {
225+ return nil , "" , nil , uhttp .WrapErrors (codes .Unavailable , "too many requests" , err )
226+ }
227+ return nil , "" , nil , fmt .Errorf ("%s: %w" , errMsg , err )
229228 }
230- if membership .GetState () == "pending" {
231- continue
229+
230+ var nextPage string
231+ nextPage , reqAnnos , err = parseResp (resp )
232+ if err != nil {
233+ return nil , "" , nil , fmt .Errorf ("github-connectorv2: failed to parse response: %w" , err )
232234 }
233235
234- ur , err := userResource ( ctx , user , user . GetEmail (), nil )
236+ err = bag . Next ( nextPage )
235237 if err != nil {
236238 return nil , "" , nil , err
237239 }
238240
239- roleName := strings .ToLower (membership .GetRole ())
240- switch roleName {
241- case orgRoleAdmin :
242- rv = append (rv , o .orgRoleGrant (orgRoleAdmin , resource , ur .Id , user .GetID ()))
243- rv = append (rv , o .orgRoleGrant (orgRoleMember , resource , ur .Id , user .GetID ()))
244-
245- case orgRoleMember :
246- rv = append (rv , o .orgRoleGrant (orgRoleMember , resource , ur .Id , user .GetID ()))
241+ for _ , user := range users {
242+ ur , err := userResource (ctx , user , user .GetEmail (), nil )
243+ if err != nil {
244+ return nil , "" , nil , err
245+ }
247246
248- default :
249- ctxzap .Extract (ctx ).Warn ("Unknown GitHub Role Name" ,
250- zap .String ("role_name" , roleName ),
251- zap .String ("github_username" , user .GetLogin ()),
252- )
247+ if rId == orgRoleAdmin {
248+ rv = append (rv , o .orgRoleGrant (orgRoleMember , resource , ur .Id , user .GetID ()))
249+ }
250+ rv = append (rv , o .orgRoleGrant (rId , resource , ur .Id , user .GetID ()))
253251 }
252+ default :
253+ ctxzap .Extract (ctx ).Warn ("Unknown GitHub Role Name" ,
254+ zap .String ("role_name" , rId ),
255+ )
254256 }
255257
258+ pageToken , err = bag .Marshal ()
259+ if err != nil {
260+ return nil , "" , nil , err
261+ }
256262 return rv , pageToken , reqAnnos , nil
257263}
258264
0 commit comments