[#654] updated OAuth2 providers to return the access token and raw user data

This commit is contained in:
Gani Georgiev
2022-11-30 15:16:09 +02:00
parent 9ba710cdc5
commit 799e1d96f8
12 changed files with 250 additions and 115 deletions
+11 -13
View File
@@ -2,7 +2,6 @@ package auth
import (
"context"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
@@ -107,42 +106,41 @@ func (p *baseProvider) Client(token *oauth2.Token) *http.Client {
}
// FetchRawUserData implements Provider.FetchRawUserData interface.
func (p *baseProvider) FetchRawUserData(token *oauth2.Token, result any) error {
func (p *baseProvider) FetchRawUserData(token *oauth2.Token) ([]byte, error) {
req, err := http.NewRequest("GET", p.userApiUrl, nil)
if err != nil {
return err
return nil, err
}
return p.sendRawUserDataRequest(req, token, result)
return p.sendRawUserDataRequest(req, token)
}
// sendRawUserDataRequest sends the specified request and
// unmarshal the response body into result.
func (p *baseProvider) sendRawUserDataRequest(req *http.Request, token *oauth2.Token, result any) error {
// sendRawUserDataRequest sends the specified user data request and return its raw response body.
func (p *baseProvider) sendRawUserDataRequest(req *http.Request, token *oauth2.Token) ([]byte, error) {
client := p.Client(token)
response, err := client.Do(req)
if err != nil {
return err
return nil, err
}
defer response.Body.Close()
content, err := ioutil.ReadAll(response.Body)
result, err := ioutil.ReadAll(response.Body)
if err != nil {
return err
return nil, err
}
// http.Client.Get doesn't treat non 2xx responses as error
if response.StatusCode >= 400 {
return fmt.Errorf(
return nil, fmt.Errorf(
"Failed to fetch OAuth2 user profile via %s (%d):\n%s",
p.userApiUrl,
response.StatusCode,
string(content),
string(result),
)
}
return json.Unmarshal(content, &result)
return result, nil
}
// oauth2Config constructs a oauth2.Config instance based on the provider settings.