@@ -19,18 +19,21 @@ var (
1919 // implementation method that doesn't have sensible defaults
2020 ErrNotImplemented = errors.New("not implemented")
2121
22+ // ErrMissingCode is returned when a Redeem method is called with an empty
23+ // code
24+ ErrMissingCode = errors.New("missing code")
25+
2226 _ Provider = (*ProviderData)(nil)
2327)
2428
2529// Redeem provides a default implementation of the OAuth2 token redemption process
26−func (p *ProviderData) Redeem(ctx context.Context, redirectURL, code string) (s *sessions.SessionState, err error) {
30+func (p *ProviderData) Redeem(ctx context.Context, redirectURL, code string) (*sessions.SessionState, error) {
2731 if code == "" {
28− err = errors.New("missing code")
29− return
32+ return nil, ErrMissingCode
3033 }
3134 clientSecret, err := p.GetClientSecret()
3235 if err != nil {
33− return
36+ return nil, err
3437 }
3538
3639 params := url.Values{}
@@ -59,24 +62,21 @@ func (p *ProviderData) Redeem(ctx context.Context, redirectURL, code string) (s
5962 }
6063 err = result.UnmarshalInto(&jsonResponse)
6164 if err == nil {
62− s = &sessions.SessionState{
65+ return &sessions.SessionState{
6366 AccessToken: jsonResponse.AccessToken,
64− }
65− return
67+ }, nil
6668 }
6769
68− var v url.Values
69− v, err = url.ParseQuery(string(result.Body()))
70+ values, err := url.ParseQuery(string(result.Body()))
7071 if err != nil {
71− return
72+ return nil, err
7273 }
73− if a := v.Get("access_token"); a != "" {
74+ if token := values.Get("access_token"); token != "" {
7475 created := time.Now()
75− s = &sessions.SessionState{AccessToken: a, CreatedAt: &created}
76− } else {
77− err = fmt.Errorf("no access token found %s", result.Body())
76+ return &sessions.SessionState{AccessToken: token, CreatedAt: &created}, nil
7877 }
79− return
78+
79+ return nil, fmt.Errorf("no access token found %s", result.Body())
8080}
8181
8282// GetLoginURL with typical oauth parameters
@@ -100,7 +100,7 @@ func (p *ProviderData) EnrichSessionState(_ context.Context, _ *sessions.Session
100100
101101// Authorize performs global authorization on an authenticated session.
102102// This is not used for fine-grained per route authorization rules.
103−func (p *ProviderData) Authorize(ctx context.Context, s *sessions.SessionState) (bool, error) {
103+func (p *ProviderData) Authorize(_ context.Context, s *sessions.SessionState) (bool, error) {
104104 if len(p.AllowedGroups) == 0 {
105105 return true, nil
106106 }