dragonfly/manager/server/router.go

111 lines
3.0 KiB
Go

package server
import (
"d7y.io/dragonfly/v2/manager/handlers"
"d7y.io/dragonfly/v2/manager/middlewares"
rbacbase "d7y.io/dragonfly/v2/manager/permission/rbac"
"d7y.io/dragonfly/v2/manager/service"
"github.com/casbin/casbin/v2"
"github.com/gin-gonic/gin"
ginprometheus "github.com/mcuadros/go-gin-prometheus"
)
func initRouter(verbose bool, service service.REST, enforcer *casbin.Enforcer) (*gin.Engine, error) {
// Set mode
if !verbose {
gin.SetMode(gin.ReleaseMode)
}
r := gin.New()
h := handlers.New(service)
// Prometheus
p := ginprometheus.NewPrometheus("dragonfly_manager")
p.Use(r)
// Middleware
r.Use(gin.Logger())
r.Use(gin.Recovery())
r.Use(middlewares.Error())
rbac := middlewares.RBAC(enforcer)
jwt, err := middlewares.Jwt(service)
if err != nil {
return nil, err
}
// Router
apiv1 := r.Group("/api/v1")
// User
ai := apiv1.Group("/users")
ai.POST("/signin", jwt.LoginHandler)
ai.POST("/signout", jwt.LogoutHandler)
ai.POST("/refresh_token", jwt.RefreshHandler)
ai.POST("/signup", jwt.MiddlewareFunc(), rbac, h.SignUp)
// Scheduler Cluster
sc := apiv1.Group("/scheduler-clusters")
sc.POST("", h.CreateSchedulerCluster)
sc.DELETE(":id", h.DestroySchedulerCluster)
sc.PATCH(":id", h.UpdateSchedulerCluster)
sc.GET(":id", h.GetSchedulerCluster)
sc.GET("", h.GetSchedulerClusters)
sc.PUT(":id/schedulers/:scheduler_id", h.AddSchedulerToSchedulerCluster)
// Scheduler
si := apiv1.Group("/schedulers")
si.POST("", h.CreateScheduler)
si.DELETE(":id", h.DestroyScheduler)
si.PATCH(":id", h.UpdateScheduler)
si.GET(":id", h.GetScheduler)
si.GET("", h.GetSchedulers)
// CDN Cluster
cc := apiv1.Group("/cdn-clusters")
cc.POST("", h.CreateCDNCluster)
cc.DELETE(":id", h.DestroyCDNCluster)
cc.PATCH(":id", h.UpdateCDNCluster)
cc.GET(":id", h.GetCDNCluster)
cc.GET("", h.GetCDNClusters)
cc.PUT(":id/cdns/:cdn_id", h.AddCDNToCDNCluster)
cc.PUT(":id/scheduler-clusters/:scheduler_cluster_id", h.AddSchedulerClusterToCDNCluster)
// CDN
ci := apiv1.Group("/cdns")
ci.POST("", h.CreateCDN)
ci.DELETE(":id", h.DestroyCDN)
ci.PATCH(":id", h.UpdateCDN)
ci.GET(":id", h.GetCDN)
ci.GET("", h.GetCDNs)
// Permission
pn := apiv1.Group("/permission", jwt.MiddlewareFunc(), rbac)
pn.POST("", h.CreatePermission)
pn.DELETE("", h.DestroyPermission)
pn.GET("/groups", h.GetPermissionGroups(r))
pn.GET("/roles/:subject", h.GetRolesForUser)
pn.GET("/:subject/:object/:action", h.HasRoleForUser)
// Security Group
sg := apiv1.Group("/security-groups")
sg.POST("", h.CreateSecurityGroup)
sg.DELETE(":id", h.DestroySecurityGroup)
sg.PATCH(":id", h.UpdateSecurityGroup)
sg.GET(":id", h.GetSecurityGroup)
sg.GET("", h.GetSecurityGroups)
sg.PUT(":id/scheduler-clusters/:scheduler_cluster_id", h.AddSchedulerClusterToSecurityGroup)
sg.PUT(":id/cdn-clusters/:cdn_cluster_id", h.AddCDNClusterToSecurityGroup)
// Health Check
r.GET("/healthy/*action", h.GetHealth)
// Auto init roles and check roles
err = rbacbase.InitRole(enforcer, r)
if err != nil {
return nil, err
}
return r, nil
}