initial commit
This commit is contained in:
68
controllers/tokens.go
Normal file
68
controllers/tokens.go
Normal file
@@ -0,0 +1,68 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/dgrijalva/jwt-go"
|
||||
)
|
||||
|
||||
const mySuperSecretKey = "jdnfksdmfksd"
|
||||
|
||||
func CreateToken(userId string) (string, error) {
|
||||
var err error
|
||||
//Creating Access Token
|
||||
// os.Setenv("ACCESS_SECRET", "jdnfksdmfksd") //this should be in an env file
|
||||
atClaims := jwt.MapClaims{}
|
||||
atClaims["authorized"] = true
|
||||
atClaims["user_id"] = userId
|
||||
atClaims["exp"] = time.Now().UTC().Add(time.Hour * 15).Unix()
|
||||
at := jwt.NewWithClaims(jwt.SigningMethodHS256, atClaims)
|
||||
token, err := at.SignedString([]byte(mySuperSecretKey))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return token, nil
|
||||
}
|
||||
|
||||
func IsValidToken(jwtToken string) (*jwt.Token, error) {
|
||||
token, err := jwt.Parse(jwtToken, func(token *jwt.Token) (interface{}, error) {
|
||||
//TODO: Validate expected algorithm
|
||||
return []byte(mySuperSecretKey), nil
|
||||
})
|
||||
|
||||
var message string
|
||||
|
||||
if err == nil && token.Valid {
|
||||
return token, nil
|
||||
} else if ve, ok := err.(*jwt.ValidationError); ok {
|
||||
if ve.Errors&jwt.ValidationErrorMalformed != 0 {
|
||||
message = "Token " + jwtToken + " is not even a token"
|
||||
} else if ve.Errors&(jwt.ValidationErrorExpired|jwt.ValidationErrorNotValidYet) != 0 {
|
||||
message = "Token is either expired or not active yet"
|
||||
} else {
|
||||
message = "Couldn't handle this token: " + err.Error()
|
||||
}
|
||||
}
|
||||
|
||||
logs.Debug(message)
|
||||
return nil, errors.New(message)
|
||||
}
|
||||
|
||||
func GetUsernameFromToken(token string) (string, error) {
|
||||
|
||||
tokenObj, err := IsValidToken(token)
|
||||
if err != nil {
|
||||
logs.Debug(err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
if claims, ok := tokenObj.Claims.(jwt.MapClaims); ok {
|
||||
return claims["user_id"].(string), nil
|
||||
}
|
||||
|
||||
logs.Debug("Unknow JWT error")
|
||||
return "", errors.New("Unknow JWT error")
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user