| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package helper
- import (
- "errors"
- "fmt"
- "kng_feed_api/model"
- "os"
- "strconv"
- "strings"
- "time"
- "github.com/gin-gonic/gin"
- "github.com/golang-jwt/jwt/v4"
- )
- var privateKey = []byte(os.Getenv("JWT_PRIVATE_KEY"))
- func GenerateJWT(user model.User) (string, error) {
- tokenTTL, _ := strconv.Atoi(os.Getenv("TOKEN_TTL"))
- token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
- "id": user.ID,
- "iat": time.Now().Unix(),
- "eat": time.Now().Add(time.Second * time.Duration(tokenTTL)).Unix(),
- })
- return token.SignedString(privateKey)
- }
- func ValidateJWT(context *gin.Context) error {
- token, err := getToken(context)
- if err != nil {
- return err
- }
- _, ok := token.Claims.(jwt.MapClaims)
- if ok && token.Valid {
- return nil
- }
- return errors.New("invalid token provided")
- }
- func CurentUser(context *gin.Context) (model.User, error) {
- err := ValidateJWT(context)
- if err != nil {
- return model.User{}, err
- }
- token, _ := getToken(context)
- claims, _ := token.Claims.(jwt.MapClaims)
- userId := uint(claims["id"].(float64))
- user, err := model.FindUserById(userId)
- if err != nil {
- return model.User{}, err
- }
- return user, nil
- }
- func getToken(context *gin.Context) (*jwt.Token, error) {
- tokenString := getTokenFromRequest(context)
- token, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
- if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
- return nil, fmt.Errorf("unexpected signing method: %v", t.Header["alg"])
- }
- return privateKey, nil
- })
- return token, err
- }
- func getTokenFromRequest(context *gin.Context) string {
- bearerToken := context.Request.Header.Get("Autorization")
- splitToken := strings.Split(bearerToken, " ")
- if len(splitToken) == 2 {
- return splitToken[1]
- }
- return ""
- }
|