@@ -182,78 +182,49 @@ func (o *orgResourceType) Grants(
182182 resource * v2.Resource ,
183183 pToken * pagination.Token ,
184184) ([]* v2.Grant , string , annotations.Annotations , error ) {
185- bag , page , err := parsePageToken (pToken .Token , resource .Id )
186- if err != nil {
187- return nil , "" , nil , err
188- }
189-
190- opts := github.ListMembersOptions {
191- ListOptions : github.ListOptions {
192- Page : page ,
193- PerPage : maxPageSize ,
194- },
195- }
196-
197185 orgName , err := o .orgCache .GetOrgName (ctx , resource .Id )
198186 if err != nil {
199187 return nil , "" , nil , err
200188 }
201189
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 ))
206- }
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 )
210- }
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 )
227- if err != nil {
228- return nil , "" , nil , fmt .Errorf ("github-connectorv2: failed to get org memberships for user: %w" , err )
229- }
230- if membership .GetState () == "pending" {
231- continue
232- }
233-
234- ur , err := userResource (ctx , user , user .GetEmail (), nil )
235- if err != nil {
236- return nil , "" , nil , err
190+ rv := []* v2.Grant {}
191+ for _ , role := range []string {orgRoleMember , orgRoleAdmin } {
192+ opts := github.ListMembersOptions {
193+ Role : role ,
194+ ListOptions : github.ListOptions {
195+ Page : 0 ,
196+ PerPage : maxPageSize ,
197+ },
237198 }
238199
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 ()))
200+ for {
201+ users , resp , err := o .client .Organizations .ListMembers (ctx , orgName , & opts )
202+ if err != nil {
203+ if isNotFoundError (resp ) {
204+ return nil , "" , nil , uhttp .WrapErrors (codes .NotFound , fmt .Sprintf ("org: %s not found" , orgName ))
205+ }
206+ errMsg := "github-connectorv2: failed to list org members"
207+ if isRatelimited (resp ) {
208+ return nil , "" , nil , uhttp .WrapErrors (codes .Unavailable , "too many requests" , err )
209+ }
210+ return nil , "" , nil , fmt .Errorf ("%s: %w" , errMsg , err )
211+ }
244212
245- case orgRoleMember :
246- rv = append (rv , o .orgRoleGrant (orgRoleMember , resource , ur .Id , user .GetID ()))
213+ for _ , user := range users {
214+ ur , err := userResource (ctx , user , user .GetEmail (), nil )
215+ if err != nil {
216+ return nil , "" , nil , err
217+ }
218+ rv = append (rv , o .orgRoleGrant (role , resource , ur .Id , user .GetID ()))
219+ }
247220
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- )
221+ if resp .NextPage == 0 {
222+ break
223+ }
224+ opts .ListOptions .Page = resp .NextPage
253225 }
254226 }
255-
256- return rv , pageToken , reqAnnos , nil
227+ return rv , "" , nil , nil
257228}
258229
259230func (o * orgResourceType ) Grant (ctx context.Context , principal * v2.Resource , en * v2.Entitlement ) (annotations.Annotations , error ) {
0 commit comments