github.com/hellofresh/janus@v0.0.0-20230925145208-ce8de8183c67/pkg/plugin/oauth2/jwt_manager_test.go (about) 1 package oauth2 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 jwtbase "github.com/dgrijalva/jwt-go" 9 "github.com/hellofresh/janus/pkg/jwt" 10 "github.com/hellofresh/janus/pkg/metrics" 11 "github.com/hellofresh/stats-go" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestJWTManagerValidKey(t *testing.T) { 17 signingMethod := jwt.SigningMethod{Alg: "HS256", Key: "secret"} 18 config := jwt.NewParserConfig(0, signingMethod) 19 parser := jwt.NewParser(config) 20 manager := NewJWTManager(parser) 21 22 token, err := issueToken(signingMethod, 1*time.Hour) 23 require.NoError(t, err) 24 25 client, err := stats.NewClient("noop://") 26 require.NoError(t, err) 27 28 ctx := metrics.NewContext(context.Background(), client) 29 assert.True(t, manager.IsKeyAuthorized(ctx, token)) 30 } 31 32 func TestJWTManagerInvalidKey(t *testing.T) { 33 signingMethod := jwt.SigningMethod{Alg: "HS256", Key: "secret"} 34 config := jwt.NewParserConfig(0, signingMethod) 35 parser := jwt.NewParser(config) 36 manager := NewJWTManager(parser) 37 38 client, err := stats.NewClient("noop://") 39 require.NoError(t, err) 40 41 ctx := metrics.NewContext(context.Background(), client) 42 assert.False(t, manager.IsKeyAuthorized(ctx, "wrong")) 43 } 44 45 func TestJWTManagerNilContext(t *testing.T) { 46 signingMethod := jwt.SigningMethod{Alg: "HS256", Key: "secret"} 47 config := jwt.NewParserConfig(0, signingMethod) 48 parser := jwt.NewParser(config) 49 manager := NewJWTManager(parser) 50 51 assert.False(t, manager.IsKeyAuthorized(nil, "wrong")) 52 } 53 54 func TestJWTManagerNilStast(t *testing.T) { 55 signingMethod := jwt.SigningMethod{Alg: "HS256", Key: "secret"} 56 config := jwt.NewParserConfig(0, signingMethod) 57 parser := jwt.NewParser(config) 58 manager := NewJWTManager(parser) 59 60 assert.False(t, manager.IsKeyAuthorized(context.Background(), "wrong")) 61 } 62 63 func issueToken(signingMethod jwt.SigningMethod, expireIn time.Duration) (string, error) { 64 token := jwtbase.New(jwtbase.GetSigningMethod(signingMethod.Alg)) 65 claims := token.Claims.(jwtbase.MapClaims) 66 67 expire := time.Now().Add(expireIn) 68 claims["exp"] = expire.Unix() 69 claims["iat"] = time.Now().Unix() 70 71 // currently only HSXXX algorithms are supported for issuing admin token, so we cast key to bytes array 72 return token.SignedString([]byte(signingMethod.Key)) 73 }