Skip to content

Commit 29251a5

Browse files
committed
use bag
1 parent 206fc0d commit 29251a5

File tree

1 file changed

+56
-50
lines changed

1 file changed

+56
-50
lines changed

pkg/connector/org.go

Lines changed: 56 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)