mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2026-10-21 01:58:29 +02:00
More complete HTTP error logging
This commit is contained in:
+20
-8
@@ -2,6 +2,7 @@ package providers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
@@ -58,10 +59,11 @@ func (p *GitHubProvider) hasOrg(accessToken string) (bool, error) {
|
||||
|
||||
params := url.Values{
|
||||
"access_token": {accessToken},
|
||||
"limit": {"100"},
|
||||
"limit": {"100"},
|
||||
}
|
||||
|
||||
req, _ := http.NewRequest("GET", "https://api.github.com/user/orgs?"+params.Encode(), nil)
|
||||
endpoint := "https://api.github.com/user/orgs?" + params.Encode()
|
||||
req, _ := http.NewRequest("GET", endpoint, nil)
|
||||
req.Header.Set("Accept", "application/vnd.github.moondragon+json")
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
@@ -73,6 +75,9 @@ func (p *GitHubProvider) hasOrg(accessToken string) (bool, error) {
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if resp.StatusCode != 200 {
|
||||
return false, fmt.Errorf("got %d from %q %s", resp.StatusCode, endpoint, body)
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(body, &orgs); err != nil {
|
||||
return false, err
|
||||
@@ -99,10 +104,11 @@ func (p *GitHubProvider) hasOrgAndTeam(accessToken string) (bool, error) {
|
||||
|
||||
params := url.Values{
|
||||
"access_token": {accessToken},
|
||||
"limit": {"100"},
|
||||
"limit": {"100"},
|
||||
}
|
||||
|
||||
req, _ := http.NewRequest("GET", "https://api.github.com/user/teams?"+params.Encode(), nil)
|
||||
endpoint := "https://api.github.com/user/teams?" + params.Encode()
|
||||
req, _ := http.NewRequest("GET", endpoint, nil)
|
||||
req.Header.Set("Accept", "application/vnd.github.moondragon+json")
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
@@ -114,9 +120,12 @@ func (p *GitHubProvider) hasOrgAndTeam(accessToken string) (bool, error) {
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if resp.StatusCode != 200 {
|
||||
return false, fmt.Errorf("got %d from %q %s", resp.StatusCode, endpoint, body)
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(body, &teams); err != nil {
|
||||
return false, err
|
||||
return false, fmt.Errorf("%s unmarshaling %s", err, body)
|
||||
}
|
||||
|
||||
for _, team := range teams {
|
||||
@@ -136,7 +145,6 @@ func (p *GitHubProvider) GetEmailAddress(body []byte, access_token string) (stri
|
||||
Primary bool `json:"primary"`
|
||||
}
|
||||
|
||||
|
||||
// if we require an Org or Team, check that first
|
||||
if p.Org != "" {
|
||||
if p.Team != "" {
|
||||
@@ -153,7 +161,8 @@ func (p *GitHubProvider) GetEmailAddress(body []byte, access_token string) (stri
|
||||
params := url.Values{
|
||||
"access_token": {access_token},
|
||||
}
|
||||
resp, err := http.DefaultClient.Get("https://api.github.com/user/emails?" + params.Encode())
|
||||
endpoint := "https://api.github.com/user/emails?" + params.Encode()
|
||||
resp, err := http.DefaultClient.Get(endpoint)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -162,9 +171,12 @@ func (p *GitHubProvider) GetEmailAddress(body []byte, access_token string) (stri
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if resp.StatusCode != 200 {
|
||||
return "", fmt.Errorf("got %d from %q %s", resp.StatusCode, endpoint, body)
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(body, &emails); err != nil {
|
||||
return "", err
|
||||
return "", fmt.Errorf("%s unmarshaling %s", err, body)
|
||||
}
|
||||
|
||||
for _, email := range emails {
|
||||
|
||||
@@ -6,8 +6,7 @@ import (
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func validateToken(p Provider, access_token string,
|
||||
header http.Header) bool {
|
||||
func validateToken(p Provider, access_token string, header http.Header) bool {
|
||||
if access_token == "" || p.Data().ValidateUrl == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -4,9 +4,11 @@ import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (p *ProviderData) Redeem(redirectUrl, code string) (body []byte, token string, err error) {
|
||||
@@ -37,6 +39,10 @@ func (p *ProviderData) Redeem(redirectUrl, code string) (body []byte, token stri
|
||||
return nil, "", err
|
||||
}
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
return body, "", fmt.Errorf("got %d from %q %s", resp.StatusCode, p.RedeemUrl.String(), body)
|
||||
}
|
||||
|
||||
// blindly try json and x-www-form-urlencoded
|
||||
var jsonResponse struct {
|
||||
AccessToken string `json:"access_token"`
|
||||
@@ -49,3 +55,16 @@ func (p *ProviderData) Redeem(redirectUrl, code string) (body []byte, token stri
|
||||
v, err := url.ParseQuery(string(body))
|
||||
return body, v.Get("access_token"), err
|
||||
}
|
||||
|
||||
func (p *ProviderData) GetLoginURL(redirectURI, finalRedirect string) string {
|
||||
params := url.Values{}
|
||||
params.Add("redirect_uri", redirectURI)
|
||||
params.Add("approval_prompt", "force")
|
||||
params.Add("scope", p.Scope)
|
||||
params.Add("client_id", p.ClientID)
|
||||
params.Add("response_type", "code")
|
||||
if strings.HasPrefix(finalRedirect, "/") {
|
||||
params.Add("state", finalRedirect)
|
||||
}
|
||||
return fmt.Sprintf("%s?%s", p.LoginUrl, params.Encode())
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ type Provider interface {
|
||||
GetEmailAddress(body []byte, access_token string) (string, error)
|
||||
Redeem(string, string) ([]byte, string, error)
|
||||
ValidateToken(access_token string) bool
|
||||
GetLoginURL(redirectURI, finalRedirect string) string
|
||||
}
|
||||
|
||||
func New(provider string, p *ProviderData) Provider {
|
||||
|
||||
Reference in New Issue
Block a user