@@ -12,8 +12,44 @@ import (
1212 "strings"
1313)
1414
15- func GenerateTokenFromModel (model User , blinder string , signingMethod jwt.SigningMethod , signingKey any ) (string , error ) {
16- hash := GenerateTokenHash (model , blinder )
15+ type JWTConfig struct {
16+ signingMethod jwt.SigningMethod
17+ signingKey any
18+ verificationKey any
19+ blinder string
20+ }
21+
22+ func (config JWTConfig ) SigningMethod () jwt.SigningMethod {
23+ return config .signingMethod
24+ }
25+
26+ func (config JWTConfig ) SigningKey () any {
27+ return config .signingKey
28+ }
29+
30+ func (config JWTConfig ) VerificationKey () any {
31+ return config .verificationKey
32+ }
33+
34+ func (config JWTConfig ) Blinder () string {
35+ return config .blinder
36+ }
37+
38+ func (config JWTConfig ) Copy () JWTConfig {
39+ return JWTConfig {
40+ signingMethod : config .signingMethod ,
41+ signingKey : config .signingKey ,
42+ verificationKey : config .verificationKey ,
43+ blinder : config .blinder ,
44+ }
45+ }
46+
47+ func NewJWTConfig (signingMethod jwt.SigningMethod , signingKey any , verificationKey any , blinder string ) * JWTConfig {
48+ return & JWTConfig {signingMethod : signingMethod , signingKey : signingKey , verificationKey : verificationKey , blinder : blinder }
49+ }
50+
51+ func (config JWTConfig ) GenerateTokenFromModel (model User ) (string , error ) {
52+ hash := GenerateTokenHash (model , config .blinder )
1753
1854 claims := struct {
1955 Hash string `json:"hash"`
@@ -25,21 +61,21 @@ func GenerateTokenFromModel(model User, blinder string, signingMethod jwt.Signin
2561 Issuer : "auth" ,
2662 },
2763 }
28- tokenObj := jwt .NewWithClaims (signingMethod , claims )
64+ tokenObj := jwt .NewWithClaims (config . signingMethod , claims )
2965
30- token , err := tokenObj .SignedString (signingKey )
66+ token , err := tokenObj .SignedString (config . signingKey )
3167 if err != nil {
3268 return "" , err
3369 }
3470 return token , nil
3571}
3672
37- func GetClaimsFromToken (token string , currentSigningMethod jwt. SigningMethod , currentSigningKey any ) (map [string ]any , error ) {
73+ func ( config JWTConfig ) GetClaimsFromToken (token string ) (map [string ]any , error ) {
3874 tokenObj , err := jwt .ParseWithClaims (token , & jwt.MapClaims {}, func (token * jwt.Token ) (any , error ) {
39- if token .Method .Alg () != currentSigningMethod .Alg () {
75+ if token .Method .Alg () != config . signingMethod .Alg () {
4076 return nil , fmt .Errorf ("unexpected signing method: %v" , token .Header ["alg" ])
4177 }
42- return currentSigningKey , nil
78+ return config . verificationKey , nil
4379 })
4480
4581 if err != nil {
@@ -79,7 +115,7 @@ func GenerateTokenHash(model User, blinder string) string {
79115 return hex .EncodeToString (sha .Sum (nil ))
80116}
81117
82- func SafeExtractUserIdFromHeader (h http.Header , currentSigningMethod jwt. SigningMethod , signingKey any ) (string , error ) {
118+ func ( config JWTConfig ) SafeExtractUserIdFromHeader (h http.Header ) (string , error ) {
83119 // Check if Authorization header exists
84120 authHeader , ok := h ["Authorization" ]
85121 if ! ok || len (authHeader ) == 0 {
@@ -94,7 +130,7 @@ func SafeExtractUserIdFromHeader(h http.Header, currentSigningMethod jwt.Signing
94130
95131 token := tokenParts [1 ]
96132
97- claims , err := GetClaimsFromToken (token , currentSigningMethod , signingKey )
133+ claims , err := config . GetClaimsFromToken (token )
98134 if err != nil {
99135 return "" , err
100136 }
@@ -112,8 +148,8 @@ func SafeExtractUserIdFromHeader(h http.Header, currentSigningMethod jwt.Signing
112148 return userIdFromJwt , nil
113149}
114150
115- func GetValidUserFromToken (token string , config Config ) (* User , error ) {
116- claims , err := GetClaimsFromToken (token , config . signingMethod , config . signingKey )
151+ func ( config JWTConfig ) GetValidUserFromToken (token string ) (* User , error ) {
152+ claims , err := config . GetClaimsFromToken (token )
117153 if err != nil {
118154 return nil , err
119155 }
0 commit comments