Rehab_React_Vite/app/Http/Middleware/JWTMiddleware.go

50 lines
1.0 KiB
Go

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()
}
}