Merge Go frontend (apiserver + xcecli) into meson build
This commit is contained in:
parent
43dc12a36c
commit
c9dc8c4676
205 changed files with 30793 additions and 328 deletions
154
src/frontend/apiserver/router/routers.go
Normal file
154
src/frontend/apiserver/router/routers.go
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
package router
|
||||
|
||||
import (
|
||||
"apiserver/common"
|
||||
"apiserver/controllers"
|
||||
"apiserver/middleware"
|
||||
"apiserver/utils"
|
||||
logger "apiserver/utils"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
swaggerFiles "github.com/swaggo/files"
|
||||
ginSwagger "github.com/swaggo/gin-swagger"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func Router() *gin.Engine {
|
||||
logger.Debug("Enter Router() function")
|
||||
r := gin.Default()
|
||||
|
||||
// check access URL whitelist
|
||||
r.Use(middleware.WhitelistURLMiddleware())
|
||||
|
||||
// check client IP whitelist
|
||||
whitelistConfig := utils.WhitelistYamlConfig
|
||||
logger.Debug("whitelistConfig", zap.Any("whitelistConfig", whitelistConfig))
|
||||
r.Use(middleware.WhitelistIPMiddleware(whitelistConfig.Whitelist))
|
||||
|
||||
// Initialize rate limiter: 10 requests per second with a burst of 20
|
||||
rateLimitConfig := utils.RateLimitYamlConfig
|
||||
globalRL := middleware.NewRateLimiter(rateLimitConfig)
|
||||
r.Use(globalRL.Limit())
|
||||
r.Use(middleware.ValidateHandler()) //validate token
|
||||
|
||||
// CORS
|
||||
corsOrigins := middleware.CORSOriginsFromConfig(
|
||||
utils.CORSYamlConfig != nil && utils.CORSYamlConfig.Enabled,
|
||||
func() []string {
|
||||
if utils.CORSYamlConfig != nil {
|
||||
return utils.CORSYamlConfig.AllowedOrigins
|
||||
}
|
||||
return nil
|
||||
}(),
|
||||
)
|
||||
r.Use(middleware.CORSMiddleware(corsOrigins))
|
||||
|
||||
// load default rbac built-in roles
|
||||
rbacPath := filepath.Join(utils.Global_TopDir, "config", "rbac.yaml")
|
||||
if err := controllers.LoadRBACConfig(rbacPath); err != nil {
|
||||
logger.Error("Failed to load RBAC config: " + err.Error())
|
||||
}
|
||||
|
||||
// ################ case: ping route
|
||||
r.GET("/ping", func(ctx *gin.Context) {
|
||||
logger.Debug("Get /ping successfully from ", zap.String("client_ip", ctx.ClientIP()))
|
||||
controllers.ReturnSuccess(ctx, common.SUCCESS_CODE, common.SUCCESS_MSG, "pong success")
|
||||
})
|
||||
|
||||
// ################ case: swagger route
|
||||
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||
|
||||
// ################ case: auth route
|
||||
auth := r.Group("/xce/v1/auth")
|
||||
{
|
||||
authHandler := &controllers.AuthController{}
|
||||
auth.POST("/logon", authHandler.Logon)
|
||||
auth.POST("/logout", authHandler.Logout)
|
||||
}
|
||||
|
||||
// ################ case: permissions route
|
||||
permsApi := r.Group("/xce/v1/permissions")
|
||||
{
|
||||
permHandler := &controllers.PermController{}
|
||||
permsApi.GET("", controllers.RequirePermission("rbac:view"), permHandler.GetPermsInfo)
|
||||
}
|
||||
// ################ case: roles route
|
||||
rolesApi := r.Group("/xce/v1/roles")
|
||||
{
|
||||
roleHandler := &controllers.RoleController{}
|
||||
rolesApi.GET("", controllers.RequirePermission("rbac:view"), roleHandler.GetRolesInfo)
|
||||
rolesApi.GET("/:rolename", controllers.RequirePermission("rbac:view"), roleHandler.GetRoleByRolename)
|
||||
rolesApi.POST("/create", controllers.RequirePermission("rbac:control"), roleHandler.CreateRole)
|
||||
rolesApi.POST("/:roleid/permissions", controllers.RequirePermission("rbac:control"), roleHandler.AddPermissionsForRole)
|
||||
// update role_permission table
|
||||
rolesApi.DELETE("/:rolename", controllers.RequirePermission("rbac:control"), roleHandler.DeleteRoleAndPermissions)
|
||||
}
|
||||
// ################ case: users route
|
||||
usersApi := r.Group("/xce/v1/users")
|
||||
{
|
||||
userHandler := &controllers.UserController{}
|
||||
usersApi.GET("", controllers.RequirePermission("rbac:view"), userHandler.GetUserRolesInfo)
|
||||
usersApi.GET("/current", controllers.RequirePermission("rbac:view"), userHandler.GetCurrentUserInfo)
|
||||
usersApi.GET("/:username/permissions", controllers.RequirePermission("rbac:view"), userHandler.GetUserPermInfo)
|
||||
usersApi.POST("/:username/roles", controllers.RequirePermission("rbac:control"), userHandler.AddRolesForUser)
|
||||
// update user_role table
|
||||
usersApi.DELETE("/:username/:rolename", controllers.RequirePermission("rbac:control"), userHandler.DeleteRolesForUser)
|
||||
}
|
||||
// ################ case: clusters route
|
||||
clusterApi := r.Group("/xce/v1/clusters")
|
||||
{
|
||||
clusterHandler := &controllers.ClusterController{}
|
||||
clusterApi.GET("", controllers.RequirePermission("cluster:view"), clusterHandler.GetClustersInfo)
|
||||
}
|
||||
// ################ case: hosts route
|
||||
hostsApi := r.Group("xce/v1/hosts")
|
||||
{
|
||||
hostHandler := &controllers.HostHandler{}
|
||||
hostsApi.GET("", controllers.RequirePermission("host:view"), hostHandler.GetHostsInfo)
|
||||
hostsApi.GET("/:hostname", controllers.RequirePermission("host:view"), hostHandler.GetHostByHostname)
|
||||
// for select res_req contains &&, ||, >,<, !, == charactars, so use POST method.
|
||||
hostsApi.POST("/select", controllers.RequirePermission("host:view"), hostHandler.FilterHostByResReqSelect)
|
||||
hostsApi.POST("/control", controllers.RequirePermission("host:control"), hostHandler.ControlHost)
|
||||
}
|
||||
|
||||
// ################ case: queues route
|
||||
queueApi := r.Group("/xce/v1/queues")
|
||||
{
|
||||
queueHandler := &controllers.QueueController{}
|
||||
queueApi.GET("", controllers.RequirePermission("queue:view"), queueHandler.GetQueuesInfo)
|
||||
queueApi.GET("/:queuename", controllers.RequirePermission("queue:view"), queueHandler.GetQueueByName)
|
||||
queueApi.POST("/control", controllers.RequirePermission("queue:control"), queueHandler.ControlQueue)
|
||||
}
|
||||
|
||||
// ################ case: jobs route
|
||||
jobsApi := r.Group("/xce/v1/jobs")
|
||||
{
|
||||
jobHandler := &controllers.JobController{}
|
||||
jobsApi.GET("", controllers.RequirePermission("job:view"), jobHandler.GetJobsInfo)
|
||||
jobsApi.GET("/:jobids", controllers.RequirePermission("job:view"), jobHandler.GetJobByIDs)
|
||||
jobsApi.POST("/create", controllers.RequirePermission("queue:submit"), jobHandler.CreateJob)
|
||||
jobsApi.POST("/:jobids/control", controllers.RequirePermission("job:control"), jobHandler.ControlJobByID)
|
||||
jobsApi.POST("/control", controllers.RequirePermission("job:control"), jobHandler.ControlJob)
|
||||
jobsApi.POST("/:jobids/restart", controllers.RequirePermission("queue:submit"), jobHandler.RestartJobByID)
|
||||
}
|
||||
|
||||
// ################ case: resources route
|
||||
resApi := r.Group("/xce/v1/resources")
|
||||
{
|
||||
resHandler := &controllers.ResourceController{}
|
||||
resApi.GET("/distribution", controllers.RequirePermission("resource:view"), resHandler.GetResourcesDistributionInfo)
|
||||
resApi.GET("/definition", controllers.RequirePermission("resource:view"), resHandler.GetResourcesDefinitionInfo)
|
||||
}
|
||||
// ################ case: files route
|
||||
filesApi := r.Group("/xce/v1/files")
|
||||
{
|
||||
filesHandler := &controllers.FilesController{}
|
||||
filesApi.POST("/upload", controllers.RequirePermission("file:control"), filesHandler.UploadFiles) //upload one or more files
|
||||
//filesApi.DELETE("", filesHandler.DeleteFiles) //delete
|
||||
filesApi.GET("/:uuid/:filename", controllers.RequirePermission("file:view"), filesHandler.DownloadFile) //download
|
||||
filesApi.GET("", controllers.RequirePermission("file:view"), filesHandler.GetFileLists) //query
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue