Files
CertifiedInvSWDB/api/authMiddleware.go
T
2025-09-21 14:30:33 +01:00

59 lines
1.2 KiB
Go

package api
import (
"net/http"
"strings"
"github.com/ESilva15/PTInvCertSWDB/config"
"github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt/v4"
)
type TokenData struct {
Token string `json:"JWTToken"`
}
func validateToken(tStr string) (bool, error) {
cfg := config.GetInstance()
token, err := jwt.Parse(tStr, func(token *jwt.Token) (any, error) {
return []byte(cfg.AuthKey), nil
}, jwt.WithValidMethods([]string{jwt.SigningMethodHS256.Alg()}))
if err != nil {
return false, err
}
if _, ok := token.Claims.(jwt.MapClaims); ok {
return true, nil
}
return false, nil
}
func APIAuthMiddleWare() gin.HandlerFunc {
return func(c *gin.Context) {
auth := c.GetHeader("Authorization")
if !strings.HasPrefix(auth, "Bearer ") {
c.JSON(http.StatusBadRequest, gin.H{"error": "missing token"})
c.Abort()
return
}
tokenStr := strings.TrimPrefix(auth, "Bearer ")
validateToken, err := validateToken(tokenStr)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
c.Abort()
return
}
if !validateToken {
c.JSON(http.StatusUnauthorized, gin.H{"error": "token is not valid"})
c.Abort()
return
}
c.Next()
}
}