go-mongo/app/helpers.go
2025-05-31 18:38:18 +03:00

54 lines
1.1 KiB
Go

package app
import (
"fmt"
"os"
"strings"
"github.com/farahty/go-mongo/models"
"github.com/golang-jwt/jwt/v4"
"github.com/mitchellh/mapstructure"
)
func getTokenFromHeader(authHeader string) (string, error) {
if authHeader == "" {
return "", fmt.Errorf("there is no authorization header provided")
}
authSlice := strings.Split(authHeader, " ")
if len(authSlice) != 2 {
return "", fmt.Errorf("wrong access token or header format")
}
return strings.TrimSpace(authSlice[1]), nil
}
func getUserFromToken(tokenString string) (*models.UserJWT, error) {
token, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("wrong token format ")
}
return []byte(os.Getenv("ACCESS_SECRET")), nil
})
if err != nil {
return nil, err
}
if !token.Valid {
return nil, fmt.Errorf("token is not valid")
}
var user *models.UserJWT
claims := token.Claims.(jwt.MapClaims)
if err := mapstructure.Decode(claims["data"], &user); err != nil {
return nil, fmt.Errorf("error while decoding payload claim")
}
return user, nil
}