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 }