git.iko.soy/typeable/oauth2-proxy
on master help sign in
Implement ValidateSessionState for GitHubProvider (#385)

Refactors the setting of the Authorization header into getGitHubHeader. Refs #382 Co-authored-by: Joel Speed <Joel.speed@hotmail.co.uk>

commit2033ce81c3a96e75eb73e92af648ea6ed5c02a6f authorIain Buclaw <iain.buclaw@sociomantic.com> dateSat 15 Feb 2020, 16:11 (7 years ago) parent7a6204c
2 files changed+17−6
CHANGELOG.md+1 providers/github.go+16−6
CHANGELOG.md+1
@@ -9,6 +9,7 @@
99
1010## Changes since v5.0.0
1111
12+- [#385](https://github.com/pusher/oauth2_proxy/pull/385) Use the `Authorization` header instead of `access_token` for refreshing GitHub Provider sessions (@ibuclaw)
1213- [#372](https://github.com/pusher/oauth2_proxy/pull/372) Allow fallback to secondary verified email address in GitHub provider (@dmnemec)
1314- [#335](https://github.com/pusher/oauth2_proxy/pull/335) OIDC Provider support for empty id_tokens in the access token refresh response (@howzat)
1415- [#363](https://github.com/pusher/oauth2_proxy/pull/363) Extension of Redis Session Store to Support Redis Cluster (@yan-dblinf)
providers/github.go+16−6
@@ -53,6 +53,13 @@ func NewGitHubProvider(p *ProviderData) *GitHubProvider {
5353 return &GitHubProvider{ProviderData: p}
5454}
5555
56+func getGitHubHeader(accessToken string) http.Header {
57+ header := make(http.Header)
58+ header.Set("Accept", "application/vnd.github.v3+json")
59+ header.Set("Authorization", fmt.Sprintf("token %s", accessToken))
60+ return header
61+}
62+
5663// SetOrgTeam adds GitHub org reading parameters to the OAuth2 scope
5764func (p *GitHubProvider) SetOrgTeam(org, team string) {
5865 p.Org = org
@@ -87,8 +94,7 @@ func (p *GitHubProvider) hasOrg(accessToken string) (bool, error) {
8794 RawQuery: params.Encode(),
8895 }
8996 req, _ := http.NewRequest("GET", endpoint.String(), nil)
90− req.Header.Set("Accept", "application/vnd.github.v3+json")
91− req.Header.Set("Authorization", fmt.Sprintf("token %s", accessToken))
97+ req.Header = getGitHubHeader(accessToken)
9298 resp, err := http.DefaultClient.Do(req)
9399 if err != nil {
94100 return false, err
@@ -164,8 +170,7 @@ func (p *GitHubProvider) hasOrgAndTeam(accessToken string) (bool, error) {
164170 }
165171
166172 req, _ := http.NewRequest("GET", endpoint.String(), nil)
167− req.Header.Set("Accept", "application/vnd.github.v3+json")
168− req.Header.Set("Authorization", fmt.Sprintf("token %s", accessToken))
173+ req.Header = getGitHubHeader(accessToken)
169174 resp, err := http.DefaultClient.Do(req)
170175 if err != nil {
171176 return false, err
@@ -283,7 +288,7 @@ func (p *GitHubProvider) GetEmailAddress(s *sessions.SessionState) (string, erro
283288 Path: path.Join(p.ValidateURL.Path, "/user/emails"),
284289 }
285290 req, _ := http.NewRequest("GET", endpoint.String(), nil)
286− req.Header.Set("Authorization", fmt.Sprintf("token %s", s.AccessToken))
291+ req.Header = getGitHubHeader(s.AccessToken)
287292 resp, err := http.DefaultClient.Do(req)
288293 if err != nil {
289294 return "", err
@@ -336,7 +341,7 @@ func (p *GitHubProvider) GetUserName(s *sessions.SessionState) (string, error) {
336341 return "", fmt.Errorf("could not create new GET request: %v", err)
337342 }
338343
339− req.Header.Set("Authorization", fmt.Sprintf("token %s", s.AccessToken))
344+ req.Header = getGitHubHeader(s.AccessToken)
340345 resp, err := http.DefaultClient.Do(req)
341346 if err != nil {
342347 return "", err
@@ -361,3 +366,8 @@ func (p *GitHubProvider) GetUserName(s *sessions.SessionState) (string, error) {
361366
362367 return user.Login, nil
363368}
369+
370+// ValidateSessionState validates the AccessToken
371+func (p *GitHubProvider) ValidateSessionState(s *sessions.SessionState) bool {
372+ return validateToken(p, s.AccessToken, getGitHubHeader(s.AccessToken))
373+}