56 lines
1.8 KiB
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()
|
|
}
|
|
}
|