Skip to content

Commit 03d1e5d

Browse files
committed
Refactor orgRole resource methods to simplify pagination handling. Removed unnecessary page token parsing and streamlined return values for list and grants functions. Improved handling of permission errors and added pagination logic for teams and users.
1 parent 8745e67 commit 03d1e5d

File tree

1 file changed

+33
-23
lines changed

1 file changed

+33
-23
lines changed

pkg/connector/org_role.go

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,6 @@ func (o *orgRoleResourceType) List(
7575
return nil, "", nil, nil
7676
}
7777

78-
bag, _, err := parsePageToken(pToken.Token, &v2.ResourceId{ResourceType: resourceTypeOrgRole.Id})
79-
if err != nil {
80-
return nil, "", nil, err
81-
}
82-
8378
orgName, err := o.orgCache.GetOrgName(ctx, parentID)
8479
if err != nil {
8580
return nil, "", nil, err
@@ -90,11 +85,7 @@ func (o *orgRoleResourceType) List(
9085
// Handle permission errors gracefully
9186
if resp != nil && (resp.StatusCode == http.StatusForbidden || resp.StatusCode == http.StatusNotFound) {
9287
// Return empty list with no error to indicate we skipped this resource
93-
pageToken, err := bag.NextToken("")
94-
if err != nil {
95-
return nil, "", nil, err
96-
}
97-
return nil, pageToken, nil, nil
88+
return nil, "", nil, nil
9889
}
9990
return nil, "", nil, fmt.Errorf("failed to list organization roles: %w", err)
10091
}
@@ -112,12 +103,7 @@ func (o *orgRoleResourceType) List(
112103
ret = append(ret, roleResource)
113104
}
114105

115-
pageToken, err := bag.NextToken("")
116-
if err != nil {
117-
return nil, "", nil, err
118-
}
119-
120-
return ret, pageToken, nil, nil
106+
return ret, "", nil, nil
121107
}
122108

123109
func (o *orgRoleResourceType) Entitlements(
@@ -147,7 +133,7 @@ func (o *orgRoleResourceType) Grants(
147133
return nil, "", nil, nil
148134
}
149135

150-
bag, _, err := parsePageToken(pToken.Token, &v2.ResourceId{ResourceType: resourceTypeOrgRole.Id})
136+
bag, page, err := parsePageToken(pToken.Token, &v2.ResourceId{ResourceType: resourceTypeOrgRole.Id})
151137
if err != nil {
152138
return nil, "", nil, err
153139
}
@@ -165,7 +151,11 @@ func (o *orgRoleResourceType) Grants(
165151
var ret []*v2.Grant
166152

167153
// First, get teams with this role
168-
teams, resp, err := o.client.Organizations.ListTeamsAssignedToOrgRole(ctx, orgName, roleID, nil)
154+
opts := &github.ListOptions{
155+
Page: page,
156+
PerPage: pToken.Size,
157+
}
158+
teams, resp, err := o.client.Organizations.ListTeamsAssignedToOrgRole(ctx, orgName, roleID, opts)
169159
if err != nil {
170160
// Handle permission errors without erroring out. Some customers may not want to give us permissions to get org roles and members.
171161
if resp != nil && (resp.StatusCode == http.StatusForbidden || resp.StatusCode == http.StatusNotFound) {
@@ -198,22 +188,33 @@ func (o *orgRoleResourceType) Grants(
198188
ret = append(ret, grant)
199189
}
200190

191+
// If we got a full page of teams, return them and let the next page handle users
192+
if len(teams) == pToken.Size {
193+
pageToken, err := bag.NextToken(fmt.Sprintf("%d", page+1))
194+
if err != nil {
195+
return nil, "", nil, err
196+
}
197+
return ret, pageToken, nil, nil
198+
}
199+
201200
// Then, get direct user assignments
202-
users, resp, err := o.client.Organizations.ListUsersAssignedToOrgRole(ctx, orgName, roleID, nil)
201+
users, resp, err := o.client.Organizations.ListUsersAssignedToOrgRole(ctx, orgName, roleID, opts)
203202
if err != nil {
203+
// Handle permission errors without erroring out. Some customers may not want to give us permissions to get org roles and members.
204204
if resp != nil && (resp.StatusCode == http.StatusForbidden || resp.StatusCode == http.StatusNotFound) {
205+
// Return empty list with no error to indicate we skipped this resource
205206
pageToken, err := bag.NextToken("")
206207
if err != nil {
207208
return nil, "", nil, err
208209
}
209-
return ret, pageToken, nil, nil
210+
return nil, pageToken, nil, nil
210211
}
211212
return nil, "", nil, fmt.Errorf("failed to list role users: %w", err)
212213
}
213214

214-
// Create regular grants for direct user assignments.
215+
// Create grants for users
215216
for _, user := range users {
216-
userResource, err := userResource(ctx, user, user.GetEmail(), nil)
217+
userResource, err := userResource(ctx, user, *user.Email, nil)
217218
if err != nil {
218219
return nil, "", nil, err
219220
}
@@ -226,11 +227,20 @@ func (o *orgRoleResourceType) Grants(
226227
ret = append(ret, grant)
227228
}
228229

230+
// If we got a full page of users, return them and let the next page handle more users
231+
if len(users) == pToken.Size {
232+
pageToken, err := bag.NextToken(fmt.Sprintf("%d", page+1))
233+
if err != nil {
234+
return nil, "", nil, err
235+
}
236+
return ret, pageToken, nil, nil
237+
}
238+
239+
// No more pages
229240
pageToken, err := bag.NextToken("")
230241
if err != nil {
231242
return nil, "", nil, err
232243
}
233-
234244
return ret, pageToken, nil, nil
235245
}
236246

0 commit comments

Comments
 (0)