ParseToken parse jwt token from gin context
(c *gin.Context)
| 968 | |
| 969 | // ParseToken parse jwt token from gin context |
| 970 | func (mw *GinJWTMiddleware) ParseToken(c *gin.Context) (*jwt.Token, error) { |
| 971 | var token string |
| 972 | var err error |
| 973 | |
| 974 | methods := strings.Split(mw.TokenLookup, ",") |
| 975 | for _, method := range methods { |
| 976 | if len(token) > 0 { |
| 977 | break |
| 978 | } |
| 979 | parts := strings.Split(strings.TrimSpace(method), ":") |
| 980 | k := strings.TrimSpace(parts[0]) |
| 981 | v := strings.TrimSpace(parts[1]) |
| 982 | switch k { |
| 983 | case "header": |
| 984 | token, err = mw.jwtFromHeader(c, v) |
| 985 | case "query": |
| 986 | token, err = mw.jwtFromQuery(c, v) |
| 987 | case "cookie": |
| 988 | token, err = mw.jwtFromCookie(c, v) |
| 989 | case "param": |
| 990 | token, err = mw.jwtFromParam(c, v) |
| 991 | case "form": |
| 992 | token, err = mw.jwtFromForm(c, v) |
| 993 | } |
| 994 | } |
| 995 | |
| 996 | if err != nil { |
| 997 | return nil, err |
| 998 | } |
| 999 | |
| 1000 | if mw.KeyFunc != nil { |
| 1001 | return jwt.Parse(token, func(t *jwt.Token) (any, error) { |
| 1002 | key, err := mw.KeyFunc(t) |
| 1003 | if err != nil { |
| 1004 | return nil, err |
| 1005 | } |
| 1006 | |
| 1007 | // save token string if valid |
| 1008 | c.Set(tokenContextKey, token) |
| 1009 | |
| 1010 | return key, nil |
| 1011 | }, mw.ParseOptions...) |
| 1012 | } |
| 1013 | |
| 1014 | return jwt.Parse(token, func(t *jwt.Token) (any, error) { |
| 1015 | if jwt.GetSigningMethod(mw.SigningAlgorithm) != t.Method { |
| 1016 | return nil, ErrInvalidSigningAlgorithm |
| 1017 | } |
| 1018 | if mw.usingPublicKeyAlgo() { |
| 1019 | return mw.pubKey, nil |
| 1020 | } |
| 1021 | |
| 1022 | // save token string if valid |
| 1023 | c.Set(tokenContextKey, token) |
| 1024 | |
| 1025 | return mw.Key, nil |
| 1026 | }, mw.ParseOptions...) |
| 1027 | } |
no test coverage detected