wms-be/middlewares/authentication.go

56 lines
1.8 KiB
Go

package middlewares
import (
"net/http"
"strings"
"github.com/Caknoooo/go-gin-clean-starter/modules/auth/service"
"github.com/Caknoooo/go-gin-clean-starter/modules/user/dto"
"github.com/Caknoooo/go-gin-clean-starter/pkg/utils"
"github.com/gin-gonic/gin"
)
func Authenticate(jwtService service.JWTService) gin.HandlerFunc {
return func(ctx *gin.Context) {
authHeader := ctx.GetHeader("Authorization")
if authHeader == "" {
response := utils.BuildResponseFailed(dto.MESSAGE_FAILED_PROSES_REQUEST, dto.MESSAGE_FAILED_TOKEN_NOT_FOUND, nil)
ctx.AbortWithStatusJSON(http.StatusUnauthorized, response)
return
}
if !strings.Contains(authHeader, "Bearer ") {
response := utils.BuildResponseFailed(dto.MESSAGE_FAILED_PROSES_REQUEST, dto.MESSAGE_FAILED_TOKEN_NOT_VALID, nil)
ctx.AbortWithStatusJSON(http.StatusUnauthorized, response)
return
}
authHeader = strings.Replace(authHeader, "Bearer ", "", -1)
token, err := jwtService.ValidateToken(authHeader)
if err != nil {
response := utils.BuildResponseFailed(dto.MESSAGE_FAILED_PROSES_REQUEST, dto.MESSAGE_FAILED_TOKEN_NOT_VALID, nil)
ctx.AbortWithStatusJSON(http.StatusUnauthorized, response)
return
}
if !token.Valid {
response := utils.BuildResponseFailed(dto.MESSAGE_FAILED_PROSES_REQUEST, dto.MESSAGE_FAILED_DENIED_ACCESS, nil)
ctx.AbortWithStatusJSON(http.StatusUnauthorized, response)
return
}
tokenInfo, err := jwtService.GetUserIDByToken(authHeader)
if err != nil {
response := utils.BuildResponseFailed(dto.MESSAGE_FAILED_PROSES_REQUEST, err.Error(), nil)
ctx.AbortWithStatusJSON(http.StatusUnauthorized, response)
return
}
ctx.Set("token", authHeader)
ctx.Set("tenant_id", tokenInfo.TenantID)
ctx.Set("user_id", tokenInfo.UserID)
ctx.Next()
}
}