[FEATURE] Adding auth middleware

This commit is contained in:
areeqakbr 2025-02-17 13:43:05 +07:00
parent c7a23a51a4
commit 726ae35fd1
8 changed files with 106 additions and 25 deletions

View File

@ -2,6 +2,7 @@ package controller
import ( import (
"net/http" "net/http"
"users_management/m/middleware"
"users_management/m/model/dto/req" "users_management/m/model/dto/req"
"users_management/m/usecase" "users_management/m/usecase"
"users_management/m/utils/common" "users_management/m/utils/common"
@ -17,11 +18,14 @@ type BackboneController struct {
func (bc *BackboneController) Route() { func (bc *BackboneController) Route() {
rg := bc.rg.Group("/backbone") rg := bc.rg.Group("/backbone")
rg.Use(middleware.AuthMiddleware())
{
rg.GET("", bc.GetBackbone()) rg.GET("", bc.GetBackbone())
rg.POST("", bc.CreateBackbone()) rg.POST("", bc.CreateBackbone())
rg.GET("/:uuid", bc.GetBackboneByID()) rg.GET("/:uuid", bc.GetBackboneByID())
rg.PUT("/:uuid", bc.UpdateBackbone()) rg.PUT("/:uuid", bc.UpdateBackbone())
} }
}
func NewBackboneController(bu usecase.BackboneUseCase, rg *gin.RouterGroup) *BackboneController { func NewBackboneController(bu usecase.BackboneUseCase, rg *gin.RouterGroup) *BackboneController {
return &BackboneController{ return &BackboneController{

View File

@ -2,6 +2,7 @@ package controller
import ( import (
"net/http" "net/http"
"users_management/m/middleware"
"users_management/m/model/dto/req" "users_management/m/model/dto/req"
"users_management/m/usecase" "users_management/m/usecase"
"users_management/m/utils/common" "users_management/m/utils/common"
@ -17,11 +18,14 @@ type DevicePortController struct {
func (dc *DevicePortController) Route() { func (dc *DevicePortController) Route() {
rg := dc.rg.Group("/device-port") rg := dc.rg.Group("/device-port")
rg.Use(middleware.AuthMiddleware())
{
rg.GET("", dc.GetDevicePort()) rg.GET("", dc.GetDevicePort())
rg.POST("", dc.CreateDevicePort()) rg.POST("", dc.CreateDevicePort())
rg.GET("/:uuid", dc.GetDevicePortByID()) rg.GET("/:uuid", dc.GetDevicePortByID())
rg.PUT("/:uuid", dc.UpdateDevicePort()) rg.PUT("/:uuid", dc.UpdateDevicePort())
} }
}
func NewDevicePortController(du usecase.DevicePortUseCase, rg *gin.RouterGroup) *DevicePortController { func NewDevicePortController(du usecase.DevicePortUseCase, rg *gin.RouterGroup) *DevicePortController {
return &DevicePortController{ return &DevicePortController{

View File

@ -2,6 +2,7 @@ package controller
import ( import (
"net/http" "net/http"
"users_management/m/middleware"
"users_management/m/model/dto/req" "users_management/m/model/dto/req"
"users_management/m/usecase" "users_management/m/usecase"
"users_management/m/utils/common" "users_management/m/utils/common"
@ -17,11 +18,14 @@ type DeviceController struct {
func (dc *DeviceController) Route() { func (dc *DeviceController) Route() {
rg := dc.rg.Group("/devices") rg := dc.rg.Group("/devices")
rg.Use(middleware.AuthMiddleware())
{
rg.POST("", dc.CreateDevice()) rg.POST("", dc.CreateDevice())
rg.GET("", dc.GetAllDevices()) rg.GET("", dc.GetAllDevices())
rg.GET("/:uuid", dc.GetDeviceByID()) rg.GET("/:uuid", dc.GetDeviceByID())
rg.PUT("/:uuid", dc.UpdateDevice()) rg.PUT("/:uuid", dc.UpdateDevice())
} }
}
func NewDeviceController(du usecase.DeviceUseCase, rg *gin.RouterGroup) *DeviceController { func NewDeviceController(du usecase.DeviceUseCase, rg *gin.RouterGroup) *DeviceController {
return &DeviceController{ return &DeviceController{

View File

@ -2,6 +2,7 @@ package controller
import ( import (
"net/http" "net/http"
"users_management/m/middleware"
"users_management/m/model/dto/req" "users_management/m/model/dto/req"
"users_management/m/usecase" "users_management/m/usecase"
"users_management/m/utils/common" "users_management/m/utils/common"
@ -17,11 +18,14 @@ type FishboneController struct {
func (fc *FishboneController) Route() { func (fc *FishboneController) Route() {
rg := fc.rg.Group("/fishbone") rg := fc.rg.Group("/fishbone")
rg.Use(middleware.AuthMiddleware())
{
rg.GET("", fc.GetFishbone()) rg.GET("", fc.GetFishbone())
rg.POST("", fc.CreateFishbone()) rg.POST("", fc.CreateFishbone())
rg.GET("/:uuid", fc.GetFishboneByID()) rg.GET("/:uuid", fc.GetFishboneByID())
rg.PUT("/:uuid", fc.UpdateFishbone()) rg.PUT("/:uuid", fc.UpdateFishbone())
} }
}
func NewFishboneController(fu usecase.FishboneUseCase, rg *gin.RouterGroup) *FishboneController { func NewFishboneController(fu usecase.FishboneUseCase, rg *gin.RouterGroup) *FishboneController {
return &FishboneController{ return &FishboneController{

View File

@ -2,6 +2,7 @@ package controller
import ( import (
"net/http" "net/http"
"users_management/m/middleware"
"users_management/m/model/dto/req" "users_management/m/model/dto/req"
"users_management/m/usecase" "users_management/m/usecase"
"users_management/m/utils/common" "users_management/m/utils/common"
@ -17,11 +18,14 @@ type TowerController struct {
func (tc *TowerController) Route() { func (tc *TowerController) Route() {
rg := tc.rg.Group("/tower") rg := tc.rg.Group("/tower")
rg.Use(middleware.AuthMiddleware())
{
rg.GET("", tc.GetTower()) rg.GET("", tc.GetTower())
rg.POST("", tc.CreateTower()) rg.POST("", tc.CreateTower())
rg.GET("/:uuid", tc.GetTowerByID()) rg.GET("/:uuid", tc.GetTowerByID())
rg.PUT("/:uuid", tc.UpdateTower()) rg.PUT("/:uuid", tc.UpdateTower())
} }
}
func NewTowerController(tu usecase.TowerUseCase, rg *gin.RouterGroup) *TowerController { func NewTowerController(tu usecase.TowerUseCase, rg *gin.RouterGroup) *TowerController {
return &TowerController{ return &TowerController{

View File

@ -5,6 +5,7 @@ import (
"users_management/m/config" "users_management/m/config"
"users_management/m/delivery/controller" "users_management/m/delivery/controller"
"users_management/m/manager" "users_management/m/manager"
"users_management/m/middleware"
"users_management/m/utils/common" "users_management/m/utils/common"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@ -43,12 +44,15 @@ func NewServer() *Server {
func (s *Server) setupController() { func (s *Server) setupController() {
rg := s.engine.Group("/api/v1") rg := s.engine.Group("/api/v1")
controller.NewUsersController(s.ucManager.NewUserUsecase(), s.ucManager.NewAuthUsecase(),rg).Route() controller.NewUsersController(s.ucManager.NewUserUsecase(), s.ucManager.NewAuthUsecase(),rg).Route()
rg.Use(middleware.AuthMiddleware())
{
controller.NewDeviceController(s.ucManager.NewDeviceUsecase(), rg).Route() controller.NewDeviceController(s.ucManager.NewDeviceUsecase(), rg).Route()
controller.NewBackboneController(s.ucManager.NewBackboneUsecase(), rg).Route() controller.NewBackboneController(s.ucManager.NewBackboneUsecase(), rg).Route()
controller.NewFishboneController(s.ucManager.NewFishboneUsecase(), rg).Route() controller.NewFishboneController(s.ucManager.NewFishboneUsecase(), rg).Route()
controller.NewTowerController(s.ucManager.NewTowerUsecase(), rg).Route() controller.NewTowerController(s.ucManager.NewTowerUsecase(), rg).Route()
controller.NewDevicePortController(s.ucManager.NewDevicePortUsecase(), rg).Route() controller.NewDevicePortController(s.ucManager.NewDevicePortUsecase(), rg).Route()
} }
}
func (s *Server) Run() { func (s *Server) Run() {
s.setupController() s.setupController()

1
go.mod
View File

@ -15,6 +15,7 @@ require (
github.com/bytedance/sonic v1.12.8 // indirect github.com/bytedance/sonic v1.12.8 // indirect
github.com/bytedance/sonic/loader v0.2.3 // indirect github.com/bytedance/sonic/loader v0.2.3 // indirect
github.com/cloudwego/base64x v0.1.5 // indirect github.com/cloudwego/base64x v0.1.5 // indirect
github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect
github.com/gabriel-vasile/mimetype v1.4.8 // indirect github.com/gabriel-vasile/mimetype v1.4.8 // indirect
github.com/gin-contrib/sse v1.0.0 // indirect github.com/gin-contrib/sse v1.0.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/locales v0.14.1 // indirect

View File

@ -0,0 +1,56 @@
package middleware
import (
"net/http"
"strings"
"users_management/m/utils/common"
"github.com/gin-gonic/gin"
)
func AuthMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
token := c.GetHeader("Authorization")
if token == "" {
common.ErrorResponses(c, http.StatusUnauthorized, "authorization token required")
c.Abort()
return
}
token = strings.TrimPrefix(token, "Bearer ")
c.Set("token", token)
req, err := http.NewRequest("POST", "https://demo.api-hrm.winteraccess.id/api/v2/auth/me", nil)
if err != nil {
common.ErrorResponses(c, http.StatusInternalServerError, err.Error())
c.Abort()
return
}
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
common.ErrorResponses(c, http.StatusInternalServerError, err.Error())
c.Abort()
return
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
common.ErrorResponses(c, http.StatusUnauthorized, "Unauthroized")
c.Abort()
return
}
c.Next()
}
}