40 lines
781 B
Go
40 lines
781 B
Go
package core
|
|
|
|
import (
|
|
"github.com/golang-jwt/jwt/v5"
|
|
)
|
|
|
|
type JWTClaims struct {
|
|
jwt.RegisteredClaims
|
|
AccountId int `json:"account_id"`
|
|
RoleId int `json:"role_id"`
|
|
}
|
|
|
|
var jwtSecret string
|
|
|
|
func InitJWT(secret string) {
|
|
jwtSecret = secret
|
|
}
|
|
|
|
func SignJWT(claims JWTClaims) (string, error) {
|
|
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
|
|
|
return token.SignedString([]byte(jwtSecret))
|
|
}
|
|
|
|
func VerifyJWT(token string) (JWTClaims, error) {
|
|
parsedClaims := JWTClaims{}
|
|
claims, err := jwt.ParseWithClaims(token, &parsedClaims, func(token *jwt.Token) (any, error) {
|
|
return []byte(jwtSecret), nil
|
|
})
|
|
|
|
if err != nil {
|
|
return JWTClaims{}, NewInternalServerError(err)
|
|
}
|
|
|
|
if !claims.Valid {
|
|
return JWTClaims{}, ErrInvalidToken
|
|
}
|
|
|
|
return parsedClaims, nil
|
|
}
|