package Middleware import ( "larago/config" "net/http" "strings" "time" "github.com/dgrijalva/jwt-go" "github.com/gin-gonic/gin" ) var mySigningKey = []byte(config.EnvFunc("APP_KEYS")) func ValidateToken() gin.HandlerFunc { return func(c *gin.Context) { tokenString := c.Request.Header.Get("Authorization") if tokenString == "" { c.JSON(http.StatusUnauthorized, gin.H{"error": "Missing token"}) c.Abort() return } tokenString = strings.TrimPrefix(tokenString, "Bearer ") claims := &jwt.MapClaims{} token, err := jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) { return mySigningKey, nil }) if err != nil || !token.Valid { c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"}) c.Abort() return } if exp, ok := (*claims)["exp"].(float64); ok { if time.Now().Unix() > int64(exp) { c.JSON(http.StatusUnauthorized, gin.H{"error": "Token has expired"}) c.Abort() return } } c.Set("claims", claims) c.Next() } }