Compare commits

...

6 Commits

Author SHA1 Message Date
Maksim Nabokikh d5f2651d63
Merge pull request #2397 from dexidp/backport-2390
Backport #2390: Replace /teams API w/ /workspaces endpoints
2022-02-02 21:48:05 +04:00
Rahul M Chheda 244be09554 [fix] Replace /teams API w/ /workspaces endpoints
Signed-off-by: Rahul M Chheda <rahul.chheda@accurics.com>
2022-02-02 20:51:52 +04:00
Márk Sági-Kazár 6e30b362b7
Merge pull request #2330 from dexidp/backport-2329
Backport #2329: Fix GitHub Actions container image permissions
2021-11-15 19:46:43 +01:00
Mark Sagi-Kazar eb3c5e01f6
ci: fix container image permissions
Signed-off-by: Mark Sagi-Kazar <mark.sagikazar@gmail.com>
2021-11-15 19:08:28 +01:00
Márk Sági-Kazár 7e826fd68d
Merge pull request #2327 from dexidp/backport-alpine-upgrade
Backport alpine upgrade
2021-11-15 15:18:31 +01:00
Mark Sagi-Kazar 1bd753dc08
chore: upgrade alpine
Signed-off-by: Mark Sagi-Kazar <mark.sagikazar@gmail.com>
2021-11-15 14:27:45 +01:00
4 changed files with 31 additions and 29 deletions

View File

@ -12,6 +12,8 @@ jobs:
docker: docker:
name: Docker name: Docker
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
packages: "write"
steps: steps:
- name: Checkout - name: Checkout

View File

@ -1,4 +1,4 @@
FROM golang:1.16.6-alpine3.13 AS builder FROM golang:1.16.6-alpine3.14 AS builder
WORKDIR /usr/local/src/dex WORKDIR /usr/local/src/dex
@ -29,11 +29,11 @@ ARG TARGETVARIANT
ENV GOMPLATE_VERSION=v3.9.0 ENV GOMPLATE_VERSION=v3.9.0
RUN wget -O /usr/local/bin/gomplate \ RUN wget -O /usr/local/bin/gomplate \
"https://github.com/hairyhenderson/gomplate/releases/download/${GOMPLATE_VERSION}/gomplate_${TARGETOS:-linux}-${TARGETARCH:-amd64}${TARGETVARIANT}" \ "https://github.com/hairyhenderson/gomplate/releases/download/${GOMPLATE_VERSION}/gomplate_${TARGETOS:-linux}-${TARGETARCH:-amd64}${TARGETVARIANT}" \
&& chmod +x /usr/local/bin/gomplate && chmod +x /usr/local/bin/gomplate
FROM alpine:3.14.0 FROM alpine:3.14.3
# Dex connectors, such as GitHub and Google logins require root certificates. # Dex connectors, such as GitHub and Google logins require root certificates.
# Proper installations should manage those certificates, but it's a bad user # Proper installations should manage those certificates, but it's a bad user

View File

@ -351,7 +351,7 @@ func (b *bitbucketConnector) userEmail(ctx context.Context, client *http.Client)
// getGroups retrieves Bitbucket teams a user is in, if any. // 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) { 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 { if err != nil {
return nil, err return nil, err
} }
@ -369,33 +369,33 @@ func (b *bitbucketConnector) getGroups(ctx context.Context, client *http.Client,
return nil, nil return nil, nil
} }
type teamName struct { type workspaceSlug struct {
Name string `json:"username"` // The "username" from Bitbucket Cloud is actually the team name here Slug string `json:"slug"`
} }
type team struct { type workspace struct {
Team teamName `json:"team"` Workspace workspaceSlug `json:"workspace"`
} }
type userTeamsResponse struct { type userWorkspacesResponse struct {
pagedResponse 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 var teams []string
apiURL := b.apiURL + "/user/permissions/teams" apiURL := b.apiURL + "/user/permissions/workspaces"
for { for {
// https://developer.atlassian.com/bitbucket/api/2/reference/resource/user/permissions/teams // https://developer.atlassian.com/cloud/bitbucket/rest/api-group-workspaces/#api-workspaces-get
var response userTeamsResponse var response userWorkspacesResponse
if err := get(ctx, client, apiURL, &response); err != nil { if err := get(ctx, client, apiURL, &response); err != nil {
return nil, fmt.Errorf("bitbucket: get user teams: %v", err) return nil, fmt.Errorf("bitbucket: get user teams: %v", err)
} }
for _, value := range response.Values { for _, value := range response.Values {
teams = append(teams, value.Team.Name) teams = append(teams, value.Workspace.Slug)
} }
if response.Next == nil { if response.Next == nil {

View File

@ -14,28 +14,28 @@ import (
) )
func TestUserGroups(t *testing.T) { func TestUserGroups(t *testing.T) {
teamsResponse := userTeamsResponse{ teamsResponse := userWorkspacesResponse{
pagedResponse: pagedResponse{ pagedResponse: pagedResponse{
Size: 3, Size: 3,
Page: 1, Page: 1,
PageLen: 10, PageLen: 10,
}, },
Values: []team{ Values: []workspace{
{Team: teamName{Name: "team-1"}}, {Workspace: workspaceSlug{Slug: "team-1"}},
{Team: teamName{Name: "team-2"}}, {Workspace: workspaceSlug{Slug: "team-2"}},
{Team: teamName{Name: "team-3"}}, {Workspace: workspaceSlug{Slug: "team-3"}},
}, },
} }
s := newTestServer(map[string]interface{}{ s := newTestServer(map[string]interface{}{
"/user/permissions/teams": teamsResponse, "/user/permissions/workspaces": teamsResponse,
"/groups/team-1": []group{{Slug: "administrators"}, {Slug: "members"}}, "/groups/team-1": []group{{Slug: "administrators"}, {Slug: "members"}},
"/groups/team-2": []group{{Slug: "everyone"}}, "/groups/team-2": []group{{Slug: "everyone"}},
"/groups/team-3": []group{}, "/groups/team-3": []group{},
}) })
connector := bitbucketConnector{apiURL: s.URL, legacyAPIURL: s.URL} 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) expectNil(t, err)
expectEquals(t, groups, []string{ expectEquals(t, groups, []string{
@ -45,7 +45,7 @@ func TestUserGroups(t *testing.T) {
}) })
connector.includeTeamGroups = true connector.includeTeamGroups = true
groups, err = connector.userTeams(context.Background(), newClient()) groups, err = connector.userWorkspaces(context.Background(), newClient())
expectNil(t, err) expectNil(t, err)
expectEquals(t, groups, []string{ expectEquals(t, groups, []string{
@ -62,11 +62,11 @@ func TestUserGroups(t *testing.T) {
func TestUserWithoutTeams(t *testing.T) { func TestUserWithoutTeams(t *testing.T) {
s := newTestServer(map[string]interface{}{ s := newTestServer(map[string]interface{}{
"/user/permissions/teams": userTeamsResponse{}, "/user/permissions/workspaces": userWorkspacesResponse{},
}) })
connector := bitbucketConnector{apiURL: s.URL} connector := bitbucketConnector{apiURL: s.URL}
groups, err := connector.userTeams(context.Background(), newClient()) groups, err := connector.userWorkspaces(context.Background(), newClient())
expectNil(t, err) expectNil(t, err)
expectEquals(t, len(groups), 0) expectEquals(t, len(groups), 0)