Skip to content

Commit c1b0f44

Browse files
tronghnReasonable-Solutions
authored andcommitted
teams: expose list of authorized repositories
1 parent d0b21ef commit c1b0f44

File tree

3 files changed

+254
-180
lines changed

3 files changed

+254
-180
lines changed

internal/grpc/teams.go

+42-1
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,15 @@ import (
1313
"k8s.io/utils/ptr"
1414
)
1515

16+
type repo interface {
17+
database.TeamRepo
18+
database.ReconcilerResourceRepo
19+
database.RepositoryAuthorizationRepo
20+
}
21+
1622
type TeamsServer struct {
17-
db database.TeamRepo
23+
db repo
24+
1825
protoapi.UnimplementedTeamsServer
1926
}
2027

@@ -142,6 +149,40 @@ func (t *TeamsServer) Environments(ctx context.Context, req *protoapi.ListTeamEn
142149
return resp, nil
143150
}
144151

152+
func (t *TeamsServer) ListAuthorizedRepositories(ctx context.Context, req *protoapi.ListAuthorizedRepositoriesRequest) (*protoapi.ListAuthorizedRepositoriesResponse, error) {
153+
teamSlug := slug.Slug(req.Slug)
154+
155+
// get all repositories for team
156+
limit, offset := pagination(req)
157+
res, total, err := t.db.GetReconcilerResourcesByKey(ctx, "github:team", teamSlug, "repo", database.Page{
158+
Limit: limit,
159+
Offset: offset,
160+
})
161+
if err != nil {
162+
return nil, status.Errorf(codes.Internal, "fetching github repositories for team: %s", err)
163+
}
164+
165+
// filter out repositories without authorizations
166+
filtered := make([]string, 0)
167+
for _, r := range res {
168+
repoName := string(r.Value)
169+
170+
authorizations, err := t.db.GetRepositoryAuthorizations(ctx, teamSlug, repoName)
171+
if err != nil {
172+
return nil, status.Errorf(codes.Internal, "fetching authorization for repository: %s", err)
173+
}
174+
175+
if len(authorizations) > 0 {
176+
filtered = append(filtered, repoName)
177+
}
178+
}
179+
180+
return &protoapi.ListAuthorizedRepositoriesResponse{
181+
GithubRepositories: filtered,
182+
PageInfo: pageInfo(req, total),
183+
}, nil
184+
}
185+
145186
func toProtoTeam(team *database.Team) *protoapi.Team {
146187
var aID *string
147188
if team.AzureGroupID != nil {

pkg/protoapi/schema/teams.proto

+4-1
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@ message Team {
1717

1818
message ListAuthorizedRepositoriesRequest {
1919
string slug = 1;
20+
int64 limit = 2;
21+
int64 offset = 3;
2022
}
2123

2224
message ListAuthorizedRepositoriesResponse {
23-
repeated string github_repository = 1;
25+
repeated string github_repositories = 1;
26+
PageInfo page_info = 2;
2427
}
2528

2629
service Teams {

0 commit comments

Comments
 (0)