Skip to content

Commit 95cd8a9

Browse files
committed
add bag to team grants
1 parent 29251a5 commit 95cd8a9

File tree

1 file changed

+53
-37
lines changed

1 file changed

+53
-37
lines changed

pkg/connector/team.go

Lines changed: 53 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -174,56 +174,72 @@ func (o *teamResourceType) Grants(ctx context.Context, resource *v2.Resource, pT
174174
return nil, "", nil, err
175175
}
176176

177-
opts := github.TeamListTeamMembersOptions{
178-
ListOptions: github.ListOptions{
179-
Page: page,
180-
PerPage: maxPageSize,
181-
},
182-
}
183-
184-
users, resp, err := o.client.Teams.ListTeamMembersByID(ctx, org.GetID(), githubID, &opts)
185-
if err != nil {
186-
if isNotFoundError(resp) {
187-
return nil, "", nil, uhttp.WrapErrors(codes.NotFound, fmt.Sprintf("org: %d not found", org.GetID()))
188-
}
189-
if isRatelimited(resp) {
190-
return nil, "", nil, uhttp.WrapErrors(codes.Unavailable, "too many requests", err)
177+
var (
178+
reqAnnos annotations.Annotations
179+
pageToken string
180+
rv = []*v2.Grant{}
181+
)
182+
switch rId := bag.ResourceTypeID(); rId {
183+
case resourceTypeTeam.Id:
184+
bag.Pop()
185+
bag.Push(pagination.PageState{
186+
ResourceTypeID: teamRoleMember,
187+
})
188+
bag.Push(pagination.PageState{
189+
ResourceTypeID: teamRoleMaintainer,
190+
})
191+
case teamRoleMember, teamRoleMaintainer:
192+
opts := github.TeamListTeamMembersOptions{
193+
ListOptions: github.ListOptions{
194+
Page: page,
195+
PerPage: maxPageSize,
196+
},
197+
Role: rId,
191198
}
192-
return nil, "", nil, fmt.Errorf("github-connectorv2: failed to fetch team members: %w", err)
193-
}
194-
195-
nextPage, reqAnnos, err := parseResp(resp)
196-
if err != nil {
197-
return nil, "", nil, fmt.Errorf("github-connectorv2: failed to parse response: %w", err)
198-
}
199-
200-
pageToken, err := bag.NextToken(nextPage)
201-
if err != nil {
202-
return nil, "", nil, err
203-
}
204199

205-
var rv []*v2.Grant
206-
for _, user := range users {
207-
membership, _, err := o.client.Teams.GetTeamMembershipByID(ctx, org.GetID(), githubID, user.GetLogin())
200+
users, resp, err := o.client.Teams.ListTeamMembersByID(ctx, org.GetID(), githubID, &opts)
208201
if err != nil {
209202
if isNotFoundError(resp) {
210-
return nil, "", nil, uhttp.WrapErrors(codes.NotFound, fmt.Sprintf("user: %s not found", user.GetLogin()))
203+
return nil, "", nil, uhttp.WrapErrors(codes.NotFound, fmt.Sprintf("org: %d not found", org.GetID()))
204+
}
205+
if isRatelimited(resp) {
206+
return nil, "", nil, uhttp.WrapErrors(codes.Unavailable, "too many requests", err)
211207
}
212-
return nil, "", nil, fmt.Errorf("github-connectorv2: failed to get team membership for user: %w", err)
208+
return nil, "", nil, fmt.Errorf("github-connectorv2: failed to fetch team members: %w", err)
209+
}
210+
211+
var nextPage string
212+
nextPage, reqAnnos, err = parseResp(resp)
213+
if err != nil {
214+
return nil, "", nil, fmt.Errorf("github-connectorv2: failed to parse response: %w", err)
213215
}
214216

215-
ur, err := userResource(ctx, user, user.GetEmail(), nil)
217+
err = bag.Next(nextPage)
216218
if err != nil {
217219
return nil, "", nil, err
218220
}
219221

220-
rv = append(rv, grant.NewGrant(resource, membership.GetRole(), ur.Id,
221-
grant.WithAnnotation(&v2.V1Identifier{
222-
Id: fmt.Sprintf("team-grant:%s:%d:%s", resource.Id.Resource, user.GetID(), membership.GetRole()),
223-
}),
224-
))
222+
for _, user := range users {
223+
ur, err := userResource(ctx, user, user.GetEmail(), nil)
224+
if err != nil {
225+
return nil, "", nil, err
226+
}
227+
rv = append(rv, grant.NewGrant(resource, rId, ur.Id,
228+
grant.WithAnnotation(&v2.V1Identifier{
229+
Id: fmt.Sprintf("team-grant:%s:%d:%s", resource.Id.Resource, user.GetID(), rId),
230+
}),
231+
))
232+
}
233+
default:
234+
ctxzap.Extract(ctx).Warn("Unknown GitHub Role Name",
235+
zap.String("role_name", rId),
236+
)
225237
}
226238

239+
pageToken, err = bag.Marshal()
240+
if err != nil {
241+
return nil, "", nil, err
242+
}
227243
return rv, pageToken, reqAnnos, nil
228244
}
229245

0 commit comments

Comments
 (0)