refactor: transitioned auth controller to use the new controller structure;
feat: setup DI for controllers; refactor: marked old utils and routes package parts as deprecated
This commit is contained in:
@@ -19,7 +19,6 @@ package controllers
|
||||
|
||||
import (
|
||||
"easywish/internal/dto"
|
||||
"easywish/internal/middleware"
|
||||
"easywish/internal/services"
|
||||
"easywish/internal/utils/enums"
|
||||
"easywish/internal/validation"
|
||||
@@ -48,39 +47,16 @@ type ControllerMethod struct {
|
||||
|
||||
type controllerImpl struct {
|
||||
Path string
|
||||
Authorization enums.Role
|
||||
Middleware []gin.HandlerFunc
|
||||
Methods []ControllerMethod
|
||||
}
|
||||
|
||||
func (ctrl *controllerImpl) Setup(group *gin.RouterGroup, log *zap.Logger, auth services.AuthService) *gin.RouterGroup {
|
||||
type Controller interface {
|
||||
Setup(group *gin.RouterGroup, log *zap.Logger, auth services.AuthService)
|
||||
}
|
||||
|
||||
func (ctrl *controllerImpl) Setup(group *gin.RouterGroup, log *zap.Logger, auth services.AuthService) {
|
||||
ctrlGroup := group.Group(ctrl.Path)
|
||||
ctrlGroup.Use(middleware.AuthMiddleware(log, auth))
|
||||
ctrlGroup.Use(gin.HandlerFunc(func(c *gin.Context) {
|
||||
ip := c.ClientIP()
|
||||
userAgent := c.Request.UserAgent()
|
||||
sessionInfoFromCtx, ok := c.Get("session_info"); if !ok {
|
||||
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "Invalid or missing session data"})
|
||||
return
|
||||
}
|
||||
|
||||
sessionInfo := sessionInfoFromCtx.(dto.SessionInfo)
|
||||
|
||||
if sessionInfo.Role < ctrl.Authorization {
|
||||
c.AbortWithStatusJSON(
|
||||
http.StatusForbidden,
|
||||
gin.H{"error": "Insufficient authorization for this controller"})
|
||||
return
|
||||
}
|
||||
|
||||
c.Set("client_info", dto.ClientInfo{
|
||||
SessionInfo: sessionInfo,
|
||||
IP: ip,
|
||||
UserAgent: userAgent,
|
||||
})
|
||||
|
||||
c.Next()
|
||||
}))
|
||||
ctrlGroup.Use(ctrl.Middleware...)
|
||||
|
||||
for _, method := range ctrl.Methods {
|
||||
@@ -100,11 +76,6 @@ func (ctrl *controllerImpl) Setup(group *gin.RouterGroup, log *zap.Logger, auth
|
||||
}),
|
||||
method.Function)...,
|
||||
)}
|
||||
return ctrlGroup
|
||||
}
|
||||
|
||||
type Controller interface {
|
||||
Setup(group *gin.RouterGroup, log *zap.Logger, auth services.AuthService)
|
||||
}
|
||||
|
||||
func GetRequest[ModelT any](c *gin.Context) (*dto.Request[ModelT], error) {
|
||||
|
||||
Reference in New Issue
Block a user