Newer
Older
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/errormdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/loggermdl"
jwt "github.com/dgrijalva/jwt-go"
"github.com/dgrijalva/jwt-go/request"
)
// GlobalJWTKey - key to decode and encode token
var GlobalJWTKey string
// 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")
}
return claims, nil
}
// DecodeToken decode token
func DecodeToken(req *http.Request) (jwt.MapClaims, error) {
token, err := request.ParseFromRequest(req, request.OAuth2Extractor, func(token *jwt.Token) (interface{}, error) {
b := ([]byte(GlobalJWTKey))
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")
}
return claims, nil
}
type jwtCustomClaim struct {
UserID string `json:"userId"`
Groups interface{} `json:"groups,omitempty"`
jwt.StandardClaims
}
// GenerateToken generates JWT token from Login object
func GenerateToken(loginID string, groups interface{}, expirationTime time.Duration) (string, error) {
claims := jwtCustomClaim{
loginID,
groups,
jwt.StandardClaims{
ExpiresAt: time.Now().Add(expirationTime).Unix(),
},
}
// Create token with claims
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
// Generate encoded token and send it as response.
t, err := token.SignedString([]byte(GlobalJWTKey))
if errormdl.CheckErr(err) != nil {
loggermdl.LogError(err)
return t, errormdl.CheckErr(err)
}
return t, nil
}
// GenerateTokenWithJWTKey generates JWT token from Login object
func GenerateTokenWithJWTKey(loginID string, groups interface{}, expirationTime time.Duration, JWTKey string) (string, error) {
claims := jwtCustomClaim{
loginID,
groups,
jwt.StandardClaims{
ExpiresAt: time.Now().Add(expirationTime).Unix(),
},
}
// Create token with claims
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
// Generate encoded token and send it as response.
t, err := token.SignedString([]byte(JWTKey))
if errormdl.CheckErr(err) != nil {
loggermdl.LogError(err)
return t, errormdl.CheckErr(err)
}
return t, nil
}