50 lines
1.0 KiB
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()
|
|
}
|
|
}
|