Skip to content

Commit d92fb72

Browse files
committed
BearerAuth function changed to AccessTokenResolveHandler
BearerAuth function changed to AccessTokenResolveHandler removed unused dep setter
1 parent c36e1f8 commit d92fb72

File tree

4 files changed

+97
-17
lines changed

4 files changed

+97
-17
lines changed

server/handler.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package server
33
import (
44
"context"
55
"net/http"
6+
"strings"
67
"time"
78

89
"github.com/go-oauth2/oauth2/v4"
@@ -54,6 +55,9 @@ type (
5455

5556
// Handler to fetch the refresh token from the request
5657
RefreshTokenResolveHandler func(r *http.Request) (string, error)
58+
59+
// Handler to fetch the access token from the request
60+
AccessTokenResolveHandler func(r *http.Request) (string, bool)
5761
)
5862

5963
// ClientFormHandler get client data from form
@@ -92,3 +96,26 @@ func RefreshTokenCookieResolveHandler(r *http.Request) (string, error) {
9296

9397
return c.Value, nil
9498
}
99+
100+
func AccessTokenDefaultResolveHandler(r *http.Request) (string, bool) {
101+
token := ""
102+
auth := r.Header.Get("Authorization")
103+
prefix := "Bearer "
104+
105+
if auth != "" && strings.HasPrefix(auth, prefix) {
106+
token = auth[len(prefix):]
107+
} else {
108+
token = r.FormValue("access_token")
109+
}
110+
111+
return token, token != ""
112+
}
113+
114+
func AccessTokenCookieResolveHandler(r *http.Request) (string, bool) {
115+
c, err := r.Cookie("access_token")
116+
if err != nil {
117+
return "", false
118+
}
119+
120+
return c.Value, true
121+
}

server/handler_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,60 @@ func TestRefreshTokenCookieResolveHandler(t *testing.T) {
6262
So(token, ShouldBeEmpty)
6363
})
6464
}
65+
66+
func TestAccessTokenDefaultHandler(t *testing.T) {
67+
Convey("Request Has Header", t, func() {
68+
r := httptest.NewRequest(http.MethodPost, "/", nil)
69+
r.Header.Add("Authorization", "Bearer test_token")
70+
71+
token, ok := AccessTokenDefaultResolveHandler(r)
72+
So(ok, ShouldBeTrue)
73+
So(token, ShouldEqual, "test_token")
74+
})
75+
76+
Convey("Request Has FormValue", t, func() {
77+
f := url.Values{}
78+
f.Add("access_token", "test_token")
79+
r := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(f.Encode()))
80+
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
81+
82+
token, ok := AccessTokenDefaultResolveHandler(r)
83+
So(ok, ShouldBeTrue)
84+
So(token, ShouldEqual, "test_token")
85+
})
86+
87+
Convey("Request Has Nothing", t, func() {
88+
r := httptest.NewRequest(http.MethodPost, "/", nil)
89+
90+
token, ok := AccessTokenDefaultResolveHandler(r)
91+
So(ok, ShouldBeFalse)
92+
So(token, ShouldBeEmpty)
93+
})
94+
}
95+
96+
func TestAccessTokenCookieHandler(t *testing.T) {
97+
Convey("Request Has Cookie", t, func() {
98+
r := httptest.NewRequest(http.MethodPost, "/", nil)
99+
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
100+
r.AddCookie(&http.Cookie{
101+
Name: "access_token",
102+
Value: "test_token",
103+
HttpOnly: true,
104+
Path: "/",
105+
Domain: ".example.com",
106+
Expires: time.Now().Add(time.Hour),
107+
})
108+
109+
token, ok := AccessTokenCookieResolveHandler(r)
110+
So(ok, ShouldBeTrue)
111+
So(token, ShouldEqual, "test_token")
112+
})
113+
114+
Convey("Request Has No Cookie", t, func() {
115+
r := httptest.NewRequest(http.MethodPost, "/", nil)
116+
117+
token, ok := AccessTokenCookieResolveHandler(r)
118+
So(ok, ShouldBeFalse)
119+
So(token, ShouldBeEmpty)
120+
})
121+
}

server/server.go

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"fmt"
77
"net/http"
88
"net/url"
9-
"strings"
109
"time"
1110

1211
"github.com/go-oauth2/oauth2/v4"
@@ -28,6 +27,7 @@ func NewServer(cfg *Config, manager oauth2.Manager) *Server {
2827
// default handlers
2928
srv.ClientInfoHandler = ClientBasicHandler
3029
srv.RefreshTokenResolveHandler = RefreshTokenFormResolveHandler
30+
srv.AccessTokenResolveHandler = AccessTokenDefaultResolveHandler
3131

3232
srv.UserAuthorizationHandler = func(w http.ResponseWriter, r *http.Request) (string, error) {
3333
return "", errors.ErrAccessDenied
@@ -58,6 +58,7 @@ type Server struct {
5858
AuthorizeScopeHandler AuthorizeScopeHandler
5959
ResponseTokenHandler ResponseTokenHandler
6060
RefreshTokenResolveHandler RefreshTokenResolveHandler
61+
AccessTokenResolveHandler AccessTokenResolveHandler
6162
}
6263

6364
func (s *Server) handleError(w http.ResponseWriter, req *AuthorizeRequest, err error) error {
@@ -571,27 +572,12 @@ func (s *Server) GetErrorData(err error) (map[string]interface{}, int, http.Head
571572
return data, statusCode, re.Header
572573
}
573574

574-
// BearerAuth parse bearer token
575-
func (s *Server) BearerAuth(r *http.Request) (string, bool) {
576-
auth := r.Header.Get("Authorization")
577-
prefix := "Bearer "
578-
token := ""
579-
580-
if auth != "" && strings.HasPrefix(auth, prefix) {
581-
token = auth[len(prefix):]
582-
} else {
583-
token = r.FormValue("access_token")
584-
}
585-
586-
return token, token != ""
587-
}
588-
589575
// ValidationBearerToken validation the bearer tokens
590576
// https://tools.ietf.org/html/rfc6750
591577
func (s *Server) ValidationBearerToken(r *http.Request) (oauth2.TokenInfo, error) {
592578
ctx := r.Context()
593579

594-
accessToken, ok := s.BearerAuth(r)
580+
accessToken, ok := s.AccessTokenResolveHandler(r)
595581
if !ok {
596582
return nil, errors.ErrInvalidAccessToken
597583
}

server/server_config.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,13 @@ func (s *Server) SetAuthorizeScopeHandler(handler AuthorizeScopeHandler) {
9393
func (s *Server) SetResponseTokenHandler(handler ResponseTokenHandler) {
9494
s.ResponseTokenHandler = handler
9595
}
96+
97+
// SetRefreshTokenResolveHandler refresh token resolver
98+
func (s *Server) SetRefreshTokenResolveHandler(handler RefreshTokenResolveHandler) {
99+
s.RefreshTokenResolveHandler = handler
100+
}
101+
102+
// SetAccessTokenResolveHandler access token resolver
103+
func (s *Server) SetAccessTokenResolveHandler(handler AccessTokenResolveHandler) {
104+
s.AccessTokenResolveHandler = handler
105+
}

0 commit comments

Comments
 (0)