Skip to content

Commit

Permalink
Merge pull request #2397 from dexidp/backport-2390
Browse files Browse the repository at this point in the history
Backport #2390: Replace /teams API w/ /workspaces endpoints
  • Loading branch information
nabokihms authored Feb 2, 2022
2 parents 6e30b36 + 244be09 commit d5f2651
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 25 deletions.
24 changes: 12 additions & 12 deletions connector/bitbucketcloud/bitbucketcloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ func (b *bitbucketConnector) userEmail(ctx context.Context, client *http.Client)

// getGroups retrieves Bitbucket teams a user is in, if any.
func (b *bitbucketConnector) getGroups(ctx context.Context, client *http.Client, groupScope bool, userLogin string) ([]string, error) {
bitbucketTeams, err := b.userTeams(ctx, client)
bitbucketTeams, err := b.userWorkspaces(ctx, client)
if err != nil {
return nil, err
}
Expand All @@ -369,33 +369,33 @@ func (b *bitbucketConnector) getGroups(ctx context.Context, client *http.Client,
return nil, nil
}

type teamName struct {
Name string `json:"username"` // The "username" from Bitbucket Cloud is actually the team name here
type workspaceSlug struct {
Slug string `json:"slug"`
}

type team struct {
Team teamName `json:"team"`
type workspace struct {
Workspace workspaceSlug `json:"workspace"`
}

type userTeamsResponse struct {
type userWorkspacesResponse struct {
pagedResponse
Values []team
Values []workspace `json:"values"`
}

func (b *bitbucketConnector) userTeams(ctx context.Context, client *http.Client) ([]string, error) {
func (b *bitbucketConnector) userWorkspaces(ctx context.Context, client *http.Client) ([]string, error) {
var teams []string
apiURL := b.apiURL + "/user/permissions/teams"
apiURL := b.apiURL + "/user/permissions/workspaces"

for {
// https://developer.atlassian.com/bitbucket/api/2/reference/resource/user/permissions/teams
var response userTeamsResponse
// https://developer.atlassian.com/cloud/bitbucket/rest/api-group-workspaces/#api-workspaces-get
var response userWorkspacesResponse

if err := get(ctx, client, apiURL, &response); err != nil {
return nil, fmt.Errorf("bitbucket: get user teams: %v", err)
}

for _, value := range response.Values {
teams = append(teams, value.Team.Name)
teams = append(teams, value.Workspace.Slug)
}

if response.Next == nil {
Expand Down
26 changes: 13 additions & 13 deletions connector/bitbucketcloud/bitbucketcloud_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,28 +14,28 @@ import (
)

func TestUserGroups(t *testing.T) {
teamsResponse := userTeamsResponse{
teamsResponse := userWorkspacesResponse{
pagedResponse: pagedResponse{
Size: 3,
Page: 1,
PageLen: 10,
},
Values: []team{
{Team: teamName{Name: "team-1"}},
{Team: teamName{Name: "team-2"}},
{Team: teamName{Name: "team-3"}},
Values: []workspace{
{Workspace: workspaceSlug{Slug: "team-1"}},
{Workspace: workspaceSlug{Slug: "team-2"}},
{Workspace: workspaceSlug{Slug: "team-3"}},
},
}

s := newTestServer(map[string]interface{}{
"/user/permissions/teams": teamsResponse,
"/groups/team-1": []group{{Slug: "administrators"}, {Slug: "members"}},
"/groups/team-2": []group{{Slug: "everyone"}},
"/groups/team-3": []group{},
"/user/permissions/workspaces": teamsResponse,
"/groups/team-1": []group{{Slug: "administrators"}, {Slug: "members"}},
"/groups/team-2": []group{{Slug: "everyone"}},
"/groups/team-3": []group{},
})

connector := bitbucketConnector{apiURL: s.URL, legacyAPIURL: s.URL}
groups, err := connector.userTeams(context.Background(), newClient())
groups, err := connector.userWorkspaces(context.Background(), newClient())

expectNil(t, err)
expectEquals(t, groups, []string{
Expand All @@ -45,7 +45,7 @@ func TestUserGroups(t *testing.T) {
})

connector.includeTeamGroups = true
groups, err = connector.userTeams(context.Background(), newClient())
groups, err = connector.userWorkspaces(context.Background(), newClient())

expectNil(t, err)
expectEquals(t, groups, []string{
Expand All @@ -62,11 +62,11 @@ func TestUserGroups(t *testing.T) {

func TestUserWithoutTeams(t *testing.T) {
s := newTestServer(map[string]interface{}{
"/user/permissions/teams": userTeamsResponse{},
"/user/permissions/workspaces": userWorkspacesResponse{},
})

connector := bitbucketConnector{apiURL: s.URL}
groups, err := connector.userTeams(context.Background(), newClient())
groups, err := connector.userWorkspaces(context.Background(), newClient())

expectNil(t, err)
expectEquals(t, len(groups), 0)
Expand Down

0 comments on commit d5f2651

Please sign in to comment.