Commit 32bcafe6 authored by Akshay Bharambe's avatar Akshay Bharambe
Browse files

Refactor: Move reuse common code to decode JWT

parent a427a1ae
Branches
Tags
2 merge requests!210Staging mepdeployment05072020,!200Add: Session control
Showing with 79 additions and 53 deletions
......@@ -16,6 +16,12 @@ import (
// GlobalJWTKey - key to decode and encode token
var GlobalJWTKey string
var keyFunc = func(key string) jwt.Keyfunc {
return func(*jwt.Token) (interface{}, error) {
return []byte(key), nil
}
}
// // DecodeTokenWithJWTKey decode token
// func DecodeTokenWithJWTKey(req *http.Request, jwtKey string) (jwt.MapClaims, error) {
// token, err := request.ParseFromRequest(req, request.OAuth2Extractor, func(token *jwt.Token) (interface{}, error) {
......@@ -69,6 +75,28 @@ func generate(claims jwtCustomClaim, key string) (string, error) {
return jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString([]byte(key))
}
// decode accepts a parsed token and error from parse operation.
func decode(token *jwt.Token, err error) (jwt.MapClaims, error) {
if err != nil {
loggermdl.LogError("Error while parsing JWT Token: ", err)
return nil, err
}
claims, ok := token.Claims.(jwt.MapClaims)
if !ok {
loggermdl.LogError("Error while parsing claims to MapClaims")
return nil, errormdl.Wrap("Error while getting claims")
}
// validate user session from session id present in token
if err := sessionmdl.ValidateSessionFromToken(claims); err != nil {
loggermdl.LogError("session validation failed with err:", err)
return nil, sessionmdl.ErrSessionValidationFailed
}
return claims, nil
}
func GenerateTokenWithOptions(args ...Option) (string, error) {
options := new(Options)
......
......@@ -3,15 +3,12 @@
package jwtmdl
import (
"fmt"
"strings"
jwt "github.com/dgrijalva/jwt-go"
"github.com/valyala/fasthttp"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/authmdl/sessionmdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/errormdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/loggermdl"
jwt "github.com/dgrijalva/jwt-go"
)
// DecodeTokenWithJWTKey decode token
......@@ -23,34 +20,36 @@ func DecodeTokenWithJWTKey(req *fasthttp.Request, jwtKey string) (jwt.MapClaims,
return nil, errormdl.Wrap("Provided JWT token is nil or invalid ")
}
tokenFromRequest = strings.Trim(tokenArray[1], " ")
// get data i.e.Claims from token
token, err := jwt.Parse(tokenFromRequest, func(token *jwt.Token) (interface{}, error) {
// Don't forget to validate the alg is what you expect:
_, ok := token.Method.(*jwt.SigningMethodHMAC)
if !ok {
return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
}
return []byte(jwtKey), nil
})
// // get data i.e.Claims from token
// token, err := jwt.Parse(tokenFromRequest, func(token *jwt.Token) (interface{}, error) {
// // Don't forget to validate the alg is what you expect:
// _, ok := token.Method.(*jwt.SigningMethodHMAC)
// if !ok {
// return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
// }
// return []byte(jwtKey), nil
// })
if err != nil {
loggermdl.LogError("Error while parsing JWT Token: ", err)
return nil, err
}
// if err != nil {
// loggermdl.LogError("Error while parsing JWT Token: ", err)
// return nil, err
// }
claims, ok := token.Claims.(jwt.MapClaims)
if !errormdl.CheckBool1(ok) {
loggermdl.LogError("Error while parsing claims to MapClaims")
return nil, errormdl.Wrap("Error while getting claims")
}
// claims, ok := token.Claims.(jwt.MapClaims)
// if !errormdl.CheckBool1(ok) {
// loggermdl.LogError("Error while parsing claims to MapClaims")
// return nil, errormdl.Wrap("Error while getting claims")
// }
// validate user session from session id present in token
if err := sessionmdl.ValidateSessionFromToken(claims); err != nil {
loggermdl.LogError("session validation failed with err:", err)
return nil, sessionmdl.ErrSessionValidationFailed
}
// // validate user session from session id present in token
// if err := sessionmdl.ValidateSessionFromToken(claims); err != nil {
// loggermdl.LogError("session validation failed with err:", err)
// return nil, sessionmdl.ErrSessionValidationFailed
// }
// return claims, nil
return claims, nil
return decode(jwt.Parse(tokenFromRequest, keyFunc(jwtKey)))
}
// DecodeToken decode token
......
......@@ -7,37 +7,36 @@ import (
"github.com/dgrijalva/jwt-go/request"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/authmdl/sessionmdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/errormdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/loggermdl"
jwt "github.com/dgrijalva/jwt-go"
)
// DecodeTokenWithJWTKey decode token
func DecodeTokenWithJWTKey(req *http.Request, jwtKey string) (jwt.MapClaims, error) {
token, err := request.ParseFromRequest(req, request.OAuth2Extractor, func(token *jwt.Token) (interface{}, error) {
b := ([]byte(jwtKey))
return b, nil
})
if errormdl.CheckErr(err) != nil {
loggermdl.LogError("Error while parsing JWT Token: ", errormdl.CheckErr(err))
return nil, errormdl.CheckErr(err)
}
claims, ok := token.Claims.(jwt.MapClaims)
if !errormdl.CheckBool1(ok) {
loggermdl.LogError("Error while parsing claims to MapClaims")
return nil, errormdl.Wrap("Error while getting claims")
}
// validate user session from session id present in token
if err := sessionmdl.ValidateSessionFromToken(claims); err != nil {
loggermdl.LogError("session validation failed with err:", err)
return nil, sessionmdl.ErrSessionValidationFailed
}
return claims, nil
// token, err := request.ParseFromRequest(req, request.OAuth2Extractor, func(token *jwt.Token) (interface{}, error) {
// b := ([]byte(jwtKey))
// return b, nil
// })
// if errormdl.CheckErr(err) != nil {
// loggermdl.LogError("Error while parsing JWT Token: ", errormdl.CheckErr(err))
// return nil, errormdl.CheckErr(err)
// }
// claims, ok := token.Claims.(jwt.MapClaims)
// if !errormdl.CheckBool1(ok) {
// loggermdl.LogError("Error while parsing claims to MapClaims")
// return nil, errormdl.Wrap("Error while getting claims")
// }
// // validate user session from session id present in token
// if err := sessionmdl.ValidateSessionFromToken(claims); err != nil {
// loggermdl.LogError("session validation failed with err:", err)
// return nil, sessionmdl.ErrSessionValidationFailed
// }
// return claims, nil
return decode(request.ParseFromRequest(req, request.OAuth2Extractor, keyFunc(jwtKey)))
}
// DecodeToken decode token
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment