Skip to content

Commit 6cf86ad

Browse files
committed
Fix Github authentication
1 parent 66ba3ef commit 6cf86ad

3 files changed

Lines changed: 20 additions & 24 deletions

File tree

pkg/cfg/oauth.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,13 +250,13 @@ func setDefaultsGitHub() {
250250
GenOAuth.TokenURL = github.Endpoint.TokenURL
251251
}
252252
if GenOAuth.UserInfoURL == "" {
253-
GenOAuth.UserInfoURL = "https://api.github.com/user?access_token="
253+
GenOAuth.UserInfoURL = "https://api.github.com/user"
254254
}
255255
if GenOAuth.UserTeamURL == "" {
256-
GenOAuth.UserTeamURL = "https://api.github.com/orgs/:org_id/teams/:team_slug/memberships/:username?access_token="
256+
GenOAuth.UserTeamURL = "https://api.github.com/orgs/:org_id/teams/:team_slug/memberships/:username"
257257
}
258258
if GenOAuth.UserOrgURL == "" {
259-
GenOAuth.UserOrgURL = "https://api.github.com/orgs/:org_id/members/:username?access_token="
259+
GenOAuth.UserOrgURL = "https://api.github.com/orgs/:org_id/members/:username"
260260
}
261261
if len(GenOAuth.Scopes) == 0 {
262262
// https://github.com/vouch/vouch-proxy/issues/63

pkg/providers/github/github.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,13 @@ func (Provider) Configure() {
3737
}
3838

3939
// GetUserInfo github user info, calls github api for org and teams
40-
// https://developer.github.com/apps/building-integrations/setting-up-and-registering-oauth-apps/about-authorization-options-for-oauth-apps/
4140
func (me Provider) GetUserInfo(r *http.Request, user *structs.User, customClaims *structs.CustomClaims, ptokens *structs.PTokens, opts ...oauth2.AuthCodeOption) (rerr error) {
42-
client, ptoken, err := me.PrepareTokensAndClient(r, ptokens, true)
41+
client, _, err := me.PrepareTokensAndClient(r, ptokens, true, opts...)
4342
if err != nil {
44-
// http.Error(w, err.Error(), http.StatusBadRequest)
4543
return err
4644
}
47-
log.Debugf("ptoken.AccessToken: %s", ptoken.AccessToken)
48-
userinfo, err := client.Get(cfg.GenOAuth.UserInfoURL + ptoken.AccessToken)
45+
userinfo, err := client.Get(cfg.GenOAuth.UserInfoURL)
4946
if err != nil {
50-
// http.Error(w, err.Error(), http.StatusBadRequest)
5147
return err
5248
}
5349
defer func() {
@@ -99,9 +95,9 @@ func (me Provider) GetUserInfo(r *http.Request, user *structs.User, customClaims
9995
var err error
10096
isMember := false
10197
if team != "" {
102-
isMember, err = getTeamMembershipStateFromGitHub(client, user, org, team, ptoken)
98+
isMember, err = getTeamMembershipStateFromGitHub(client, user, org, team)
10399
} else {
104-
isMember, err = getOrgMembershipStateFromGitHub(client, user, org, ptoken)
100+
isMember, err = getOrgMembershipStateFromGitHub(client, user, org)
105101
}
106102
if err != nil {
107103
return err
@@ -121,9 +117,9 @@ func (me Provider) GetUserInfo(r *http.Request, user *structs.User, customClaims
121117
return nil
122118
}
123119

124-
func getOrgMembershipStateFromGitHub(client *http.Client, user *structs.User, orgID string, ptoken *oauth2.Token) (isMember bool, rerr error) {
120+
func getOrgMembershipStateFromGitHub(client *http.Client, user *structs.User, orgID string) (isMember bool, rerr error) {
125121
replacements := strings.NewReplacer(":org_id", orgID, ":username", user.Username)
126-
orgMembershipResp, err := client.Get(replacements.Replace(cfg.GenOAuth.UserOrgURL) + ptoken.AccessToken)
122+
orgMembershipResp, err := client.Get(replacements.Replace(cfg.GenOAuth.UserOrgURL))
127123
if err != nil {
128124
log.Error(err)
129125
return false, err
@@ -149,9 +145,9 @@ func getOrgMembershipStateFromGitHub(client *http.Client, user *structs.User, or
149145
}
150146
}
151147

152-
func getTeamMembershipStateFromGitHub(client *http.Client, user *structs.User, orgID string, team string, ptoken *oauth2.Token) (isMember bool, rerr error) {
148+
func getTeamMembershipStateFromGitHub(client *http.Client, user *structs.User, orgID string, team string) (isMember bool, rerr error) {
153149
replacements := strings.NewReplacer(":org_id", orgID, ":team_slug", team, ":username", user.Username)
154-
membershipStateResp, err := client.Get(replacements.Replace(cfg.GenOAuth.UserTeamURL) + ptoken.AccessToken)
150+
membershipStateResp, err := client.Get(replacements.Replace(cfg.GenOAuth.UserTeamURL))
155151
if err != nil {
156152
log.Error(err)
157153
return false, err

pkg/providers/github/github_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func TestGetTeamMembershipStateFromGitHubActive(t *testing.T) {
105105
setUp()
106106
mockResponse(regexMatcher(".*"), http.StatusOK, map[string]string{}, []byte("{\"state\": \"active\"}"))
107107

108-
isMember, err := getTeamMembershipStateFromGitHub(client, user, "org1", "team1", token)
108+
isMember, err := getTeamMembershipStateFromGitHub(client, user, "org1", "team1")
109109

110110
assert.Nil(t, err)
111111
assert.True(t, isMember)
@@ -115,7 +115,7 @@ func TestGetTeamMembershipStateFromGitHubInactive(t *testing.T) {
115115
setUp()
116116
mockResponse(regexMatcher(".*"), http.StatusOK, map[string]string{}, []byte("{\"state\": \"inactive\"}"))
117117

118-
isMember, err := getTeamMembershipStateFromGitHub(client, user, "org1", "team1", token)
118+
isMember, err := getTeamMembershipStateFromGitHub(client, user, "org1", "team1")
119119

120120
assert.Nil(t, err)
121121
assert.False(t, isMember)
@@ -125,7 +125,7 @@ func TestGetTeamMembershipStateFromGitHubNotAMember(t *testing.T) {
125125
setUp()
126126
mockResponse(regexMatcher(".*"), http.StatusNotFound, map[string]string{}, []byte(""))
127127

128-
isMember, err := getTeamMembershipStateFromGitHub(client, user, "org1", "team1", token)
128+
isMember, err := getTeamMembershipStateFromGitHub(client, user, "org1", "team1")
129129

130130
assert.Nil(t, err)
131131
assert.False(t, isMember)
@@ -135,12 +135,12 @@ func TestGetOrgMembershipStateFromGitHubNotFound(t *testing.T) {
135135
setUp()
136136
mockResponse(regexMatcher(".*"), http.StatusNotFound, map[string]string{}, []byte(""))
137137

138-
isMember, err := getOrgMembershipStateFromGitHub(client, user, "myorg", token)
138+
isMember, err := getOrgMembershipStateFromGitHub(client, user, "myorg")
139139

140140
assert.Nil(t, err)
141141
assert.False(t, isMember)
142142

143-
expectedOrgMembershipURL := "https://api.github.com/orgs/myorg/members/" + user.Username + "?access_token=" + token.AccessToken
143+
expectedOrgMembershipURL := "https://api.github.com/orgs/myorg/members/" + user.Username
144144
assertURLCalled(t, expectedOrgMembershipURL)
145145
}
146146

@@ -151,12 +151,12 @@ func TestGetOrgMembershipStateFromGitHubNoOrgAccess(t *testing.T) {
151151
mockResponse(regexMatcher(".*orgs/myorg/members.*"), http.StatusFound, map[string]string{"Location": location}, []byte(""))
152152
mockResponse(regexMatcher(".*orgs/myorg/public_members.*"), http.StatusNoContent, map[string]string{}, []byte(""))
153153

154-
isMember, err := getOrgMembershipStateFromGitHub(client, user, "myorg", token)
154+
isMember, err := getOrgMembershipStateFromGitHub(client, user, "myorg")
155155

156156
assert.Nil(t, err)
157157
assert.True(t, isMember)
158158

159-
expectedOrgMembershipURL := "https://api.github.com/orgs/myorg/members/" + user.Username + "?access_token=" + token.AccessToken
159+
expectedOrgMembershipURL := "https://api.github.com/orgs/myorg/members/" + user.Username
160160
assertURLCalled(t, expectedOrgMembershipURL)
161161

162162
expectedOrgPublicMembershipURL := "https://api.github.com/orgs/myorg/public_members/" + user.Username
@@ -178,7 +178,7 @@ func TestGetUserInfo(t *testing.T) {
178178
Login: "myusername",
179179
Picture: "avatar-url",
180180
})
181-
mockResponse(urlEquals(cfg.GenOAuth.UserInfoURL+token.AccessToken), http.StatusOK, map[string]string{}, userInfoContent)
181+
mockResponse(urlEquals(cfg.GenOAuth.UserInfoURL), http.StatusOK, map[string]string{}, userInfoContent)
182182

183183
cfg.Cfg.TeamWhiteList = append(cfg.Cfg.TeamWhiteList, "myOtherOrg", "myorg/myteam")
184184

@@ -194,6 +194,6 @@ func TestGetUserInfo(t *testing.T) {
194194
assert.Equal(t, "myusername", user.Username)
195195
assert.Equal(t, []string{"myOtherOrg", "myorg/myteam"}, user.TeamMemberships)
196196

197-
expectedTeamMembershipURL := "https://api.github.com/orgs/myorg/teams/myteam/memberships/myusername?access_token=" + token.AccessToken
197+
expectedTeamMembershipURL := "https://api.github.com/orgs/myorg/teams/myteam/memberships/myusername"
198198
assertURLCalled(t, expectedTeamMembershipURL)
199199
}

0 commit comments

Comments
 (0)