11package tfa
22
33import (
4+ "errors"
45 "net/http"
56 "net/http/httptest"
67 "net/url"
@@ -9,20 +10,76 @@ import (
910 "time"
1011
1112 "github.com/logica0419/traefik-forward-auth/internal/provider"
13+ "github.com/logica0419/traefik-forward-auth/internal/provider/mock"
1214 "github.com/stretchr/testify/assert"
15+ "go.uber.org/mock/gomock"
1316)
1417
1518/**
1619 * Tests
1720 */
1821
22+ func TestAuthValidateBearerJWT (t * testing.T ) {
23+ assert := assert .New (t )
24+ config , _ = NewConfig ([]string {})
25+ r , _ := http .NewRequest ("GET" , "http://example.com" , nil )
26+ ctrl := gomock .NewController (t )
27+ mockProvider := mock .NewMockProvider (ctrl )
28+
29+ // Should require Authorization header
30+ mockProvider .EXPECT ().GetUser ("" ).Times (0 )
31+ _ , _ , err := ValidateBearerJWT (r , mockProvider )
32+ if assert .Error (err ) {
33+ assert .Equal ("No Authorization header" , err .Error ())
34+ }
35+
36+ // Should require 2 parts
37+ r .Header .Set ("Authorization" , "invalid" )
38+ mockProvider .EXPECT ().GetUser ("" ).Times (0 )
39+ _ , _ , err = ValidateBearerJWT (r , mockProvider )
40+ if assert .Error (err ) {
41+ assert .Equal ("Invalid authorization header: invalid" , err .Error ())
42+ }
43+
44+ r .Header .Set ("Authorization" , "not valid header" )
45+ mockProvider .EXPECT ().GetUser ("" ).Times (0 )
46+ _ , _ , err = ValidateBearerJWT (r , mockProvider )
47+ if assert .Error (err ) {
48+ assert .Equal ("Invalid authorization header: not valid header" , err .Error ())
49+ }
50+
51+ // Should require Bearer Authorization header
52+ r .Header .Set ("Authorization" , "Basic dGVzdDp0ZXN0" )
53+ mockProvider .EXPECT ().GetUser ("" ).Times (0 )
54+ _ , _ , err = ValidateBearerJWT (r , mockProvider )
55+ if assert .Error (err ) {
56+ assert .Equal ("No Bearer token: Basic dGVzdDp0ZXN0" , err .Error ())
57+ }
58+
59+ // Should cache invalid token
60+ r .Header .Set ("Authorization" , "Bearer invalid_token" )
61+ mockProvider .EXPECT ().GetUser ("invalid_token" ).Return (provider.User {}, errors .New ("invalid token" ))
62+ _ , _ , err = ValidateBearerJWT (r , mockProvider )
63+ if assert .Error (err ) {
64+ assert .Equal ("invalid token" , err .Error ())
65+ }
66+
67+ // Should accept valid Bearer token
68+ r .Header .Set ("Authorization" , "Bearer valid_token" )
69+ mockProvider .EXPECT ().GetUser ("valid_token" ).Return (provider.User {Email : "test@test.com" }, nil )
70+ email , token , err := ValidateBearerJWT (r , mockProvider )
71+ assert .Nil (err , "valid request should not return an error" )
72+ assert .Equal ("test@test.com" , email , "valid request should return user email" )
73+ assert .Equal ("valid_token" , token , "valid request should return user token" )
74+ }
75+
1976func TestAuthValidateCookie (t * testing.T ) {
2077 assert := assert .New (t )
2178 config , _ = NewConfig ([]string {})
2279 r , _ := http .NewRequest ("GET" , "http://example.com" , nil )
2380 c := & http.Cookie {}
2481
25- // Should require 3 parts
82+ // Should require 4 parts
2683 c .Value = ""
2784 _ , _ , err := ValidateCookie (r , c )
2885 if assert .Error (err ) {
0 commit comments