Skip to content

Commit ece72c3

Browse files
committed
chore: move all parsing logic to internal
1 parent c162da0 commit ece72c3

File tree

2 files changed

+75
-47
lines changed

2 files changed

+75
-47
lines changed

auth/strategies/token/parser.go

Lines changed: 6 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ package token
22

33
import (
44
"net/http"
5-
"strings"
5+
6+
"github.com/shaj13/go-guardian/internal"
67
)
78

89
// Parser parse and extract token from incoming HTTP request.
@@ -19,14 +20,7 @@ func (fn tokenFn) Token(r *http.Request) (string, error) {
1920
// XHeaderParser return a token parser, where token extracted form "X-" header.
2021
func XHeaderParser(header string) Parser {
2122
fn := func(r *http.Request) (string, error) {
22-
val := r.Header.Get(header)
23-
val = strings.TrimSpace(val)
24-
25-
if val == "" {
26-
return "", ErrInvalidToken
27-
}
28-
29-
return val, nil
23+
return internal.ParseHeader(header, r, ErrInvalidToken)
3024
}
3125

3226
return tokenFn(fn)
@@ -35,23 +29,7 @@ func XHeaderParser(header string) Parser {
3529
// AuthorizationParser return a token parser, where token extracted form Authorization header.
3630
func AuthorizationParser(key string) Parser {
3731
fn := func(r *http.Request) (string, error) {
38-
header := r.Header.Get("Authorization")
39-
header = strings.TrimSpace(header)
40-
41-
if header == "" {
42-
return "", ErrInvalidToken
43-
}
44-
45-
token := strings.Split(header, " ")
46-
if len(token) < 2 || token[0] != key {
47-
return "", ErrInvalidToken
48-
}
49-
50-
if len(token[1]) == 0 {
51-
return "", ErrInvalidToken
52-
}
53-
54-
return token[1], nil
32+
return internal.ParseAuthorizationHeader(key, r, ErrInvalidToken)
5533
}
5634

5735
return tokenFn(fn)
@@ -60,15 +38,7 @@ func AuthorizationParser(key string) Parser {
6038
// QueryParser return a token parser, where token extracted form HTTP query string.
6139
func QueryParser(key string) Parser {
6240
fn := func(r *http.Request) (string, error) {
63-
query := r.URL.Query()
64-
token := query.Get(key)
65-
token = strings.TrimSpace(token)
66-
67-
if token == "" {
68-
return "", ErrInvalidToken
69-
}
70-
71-
return token, nil
41+
return internal.ParseQuery(key, r, ErrInvalidToken)
7242
}
7343

7444
return tokenFn(fn)
@@ -77,18 +47,7 @@ func QueryParser(key string) Parser {
7747
// CookieParser return a token parser, where token extracted form HTTP Cookie.
7848
func CookieParser(key string) Parser {
7949
fn := func(r *http.Request) (string, error) {
80-
cookie, err := r.Cookie(key)
81-
if err != nil {
82-
return "", err
83-
}
84-
85-
token := strings.TrimSpace(cookie.Value)
86-
87-
if token == "" {
88-
return "", ErrInvalidToken
89-
}
90-
91-
return token, nil
50+
return internal.ParseCookie(key, r, ErrInvalidToken)
9251
}
9352

9453
return tokenFn(fn)

internal/parse.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// Package internal contains support & helpers for go-guardian packages.
2+
package internal
3+
4+
import (
5+
"net/http"
6+
"strings"
7+
)
8+
9+
//ParseHeader extract specific header value or return provided error.
10+
func ParseHeader(header string, r *http.Request, err error) (string, error) {
11+
value := r.Header.Get(header)
12+
value = strings.TrimSpace(value)
13+
14+
if value == "" {
15+
return "", err
16+
}
17+
18+
return value, nil
19+
}
20+
21+
//ParseAuthorizationHeader extract Authorization header value or return provided error.
22+
func ParseAuthorizationHeader(key string, r *http.Request, err error) (string, error) {
23+
header := r.Header.Get("Authorization")
24+
header = strings.TrimSpace(header)
25+
26+
if header == "" {
27+
return "", err
28+
}
29+
30+
value := strings.Split(header, " ")
31+
if len(value) < 2 || value[0] != key {
32+
return "", err
33+
}
34+
35+
if len(value[1]) == 0 {
36+
return "", err
37+
}
38+
39+
return value[1], nil
40+
}
41+
42+
//ParseQuery extract key value form HTTP query string or return provided error.
43+
func ParseQuery(key string, r *http.Request, err error) (string, error) {
44+
query := r.URL.Query()
45+
value := query.Get(key)
46+
value = strings.TrimSpace(value)
47+
48+
if value == "" {
49+
return "", err
50+
}
51+
52+
return value, nil
53+
}
54+
55+
//ParseCookie extract key value form form HTTP Cookie or return provided error.
56+
func ParseCookie(key string, r *http.Request, e error) (string, error) {
57+
cookie, err := r.Cookie(key)
58+
if err != nil {
59+
return "", err
60+
}
61+
62+
value := strings.TrimSpace(cookie.Value)
63+
64+
if value == "" {
65+
return "", e
66+
}
67+
68+
return value, nil
69+
}

0 commit comments

Comments
 (0)