This commit is contained in:
akrike
2025-03-20 01:13:57 +08:00
parent d488e89e57
commit 8eb8888a5a
10 changed files with 54 additions and 53 deletions

View File

@@ -67,3 +67,9 @@ func getQueryString(ctx *gin.Context, query string) (s string) {
errCheck(ctx, s == "", "Invalid parameters!") errCheck(ctx, s == "", "Invalid parameters!")
return return
} }
func bind[T any](ctx *gin.Context) T {
var data T
errCheck(ctx, ctx.ShouldBind(&data) != nil, "Invalid parameters!")
return data
}

View File

@@ -15,7 +15,8 @@ func (c *configApi) GetSystemConfiguration(ctx *gin.Context) {
rOk(ctx, "Operation successful!", result) rOk(ctx, "Operation successful!", result)
} }
func (c *configApi) SetSystemConfiguration(ctx *gin.Context, req map[string]string) { func (c *configApi) SetSystemConfiguration(ctx *gin.Context) {
req := bind[map[string]string](ctx)
errCheck(ctx, logic.ConfigLogic.SetSystemConfiguration(req) != nil, "Set config fail!") errCheck(ctx, logic.ConfigLogic.SetSystemConfiguration(req) != nil, "Set config fail!")
rOk(ctx, "Operation successful!", nil) rOk(ctx, "Operation successful!", nil)
} }

View File

@@ -15,7 +15,8 @@ type logApi struct{}
var LogApi = new(logApi) var LogApi = new(logApi)
func (a *logApi) GetLog(ctx *gin.Context, req model.GetLogReq) { func (a *logApi) GetLog(ctx *gin.Context) {
req := bind[model.GetLogReq](ctx)
if isAdmin(ctx) { if isAdmin(ctx) {
rOk(ctx, "Query successful!", logic.LogLogicImpl.Search(req, req.FilterName...)) rOk(ctx, "Query successful!", logic.LogLogicImpl.Search(req, req.FilterName...))
} else { } else {

View File

@@ -11,7 +11,8 @@ var PermissionApi = new(permissionApi)
type permissionApi struct{} type permissionApi struct{}
func (p *permissionApi) EditPermssion(ctx *gin.Context, req model.Permission) { func (p *permissionApi) EditPermssion(ctx *gin.Context) {
req := bind[model.Permission](ctx)
err := repository.PermissionRepository.EditPermssion(req) err := repository.PermissionRepository.EditPermssion(req)
errCheck(ctx, err != nil, err) errCheck(ctx, err != nil, err)
rOk(ctx, "Operation successful!", nil) rOk(ctx, "Operation successful!", nil)

View File

@@ -12,7 +12,8 @@ type procApi struct{}
var ProcApi = new(procApi) var ProcApi = new(procApi)
func (p *procApi) CreateNewProcess(ctx *gin.Context, req model.Process) { func (p *procApi) CreateNewProcess(ctx *gin.Context) {
req := bind[model.Process](ctx)
index, err := repository.ProcessRepository.AddProcessConfig(req) index, err := repository.ProcessRepository.AddProcessConfig(req)
errCheck(ctx, err != nil, err) errCheck(ctx, err != nil, err)
req.Uuid = index req.Uuid = index
@@ -83,7 +84,8 @@ func (p *procApi) GetProcessList(ctx *gin.Context) {
} }
} }
func (p *procApi) UpdateProcessConfig(ctx *gin.Context, req model.Process) { func (p *procApi) UpdateProcessConfig(ctx *gin.Context) {
req := bind[model.Process](ctx)
logic.ProcessCtlLogic.UpdateProcessConfig(req) logic.ProcessCtlLogic.UpdateProcessConfig(req)
err := repository.ProcessRepository.UpdateProcessConfig(req) err := repository.ProcessRepository.UpdateProcessConfig(req)
errCheck(ctx, err != nil, err) errCheck(ctx, err != nil, err)

View File

@@ -20,13 +20,15 @@ func (p *pushApi) GetPushById(ctx *gin.Context) {
rOk(ctx, "Query successful!", repository.PushRepository.GetPushConfigById(id)) rOk(ctx, "Query successful!", repository.PushRepository.GetPushConfigById(id))
} }
func (p *pushApi) AddPushConfig(ctx *gin.Context, req model.Push) { func (p *pushApi) AddPushConfig(ctx *gin.Context) {
req := bind[model.Push](ctx)
err := repository.PushRepository.AddPushConfig(req) err := repository.PushRepository.AddPushConfig(req)
errCheck(ctx, err != nil, err) errCheck(ctx, err != nil, err)
rOk(ctx, "Operation successful!", nil) rOk(ctx, "Operation successful!", nil)
} }
func (p *pushApi) UpdatePushConfig(ctx *gin.Context, req model.Push) { func (p *pushApi) UpdatePushConfig(ctx *gin.Context) {
req := bind[model.Push](ctx)
err := repository.PushRepository.UpdatePushConfig(req) err := repository.PushRepository.UpdatePushConfig(req)
errCheck(ctx, err != nil, err) errCheck(ctx, err != nil, err)
rOk(ctx, "Operation successful!", nil) rOk(ctx, "Operation successful!", nil)

View File

@@ -12,7 +12,8 @@ type taskApi struct{}
var TaskApi = new(taskApi) var TaskApi = new(taskApi)
func (t *taskApi) CreateTask(ctx *gin.Context, req model.Task) { func (t *taskApi) CreateTask(ctx *gin.Context) {
req := bind[model.Task](ctx)
err := logic.TaskLogic.CreateTask(req) err := logic.TaskLogic.CreateTask(req)
errCheck(ctx, err != nil, err) errCheck(ctx, err != nil, err)
rOk(ctx, "Operation successful!", nil) rOk(ctx, "Operation successful!", nil)
@@ -45,13 +46,15 @@ func (t *taskApi) StopTask(ctx *gin.Context) {
rOk(ctx, "Operation successful!", nil) rOk(ctx, "Operation successful!", nil)
} }
func (t *taskApi) EditTask(ctx *gin.Context, req model.Task) { func (t *taskApi) EditTask(ctx *gin.Context) {
req := bind[model.Task](ctx)
err := logic.TaskLogic.EditTask(req) err := logic.TaskLogic.EditTask(req)
errCheck(ctx, err != nil, err) errCheck(ctx, err != nil, err)
rOk(ctx, "Operation successful!", nil) rOk(ctx, "Operation successful!", nil)
} }
func (t *taskApi) EditTaskEnable(ctx *gin.Context, req model.Task) { func (t *taskApi) EditTaskEnable(ctx *gin.Context) {
req := bind[model.Task](ctx)
err := logic.TaskLogic.EditTaskEnable(req.Id, req.Enable) err := logic.TaskLogic.EditTaskEnable(req.Id, req.Enable)
errCheck(ctx, err != nil, err) errCheck(ctx, err != nil, err)
rOk(ctx, "Operation successful!", nil) rOk(ctx, "Operation successful!", nil)

View File

@@ -16,7 +16,8 @@ var UserApi = new(userApi)
const DEFAULT_ROOT_PASSWORD = "root" const DEFAULT_ROOT_PASSWORD = "root"
func (u *userApi) LoginHandler(ctx *gin.Context, req map[string]string) { func (u *userApi) LoginHandler(ctx *gin.Context) {
req := bind[map[string]string](ctx)
account := req["account"] account := req["account"]
password := req["password"] password := req["password"]
errCheck(ctx, !u.checkLoginInfo(account, password), "Incorrect username or password!") errCheck(ctx, !u.checkLoginInfo(account, password), "Incorrect username or password!")
@@ -29,7 +30,8 @@ func (u *userApi) LoginHandler(ctx *gin.Context, req map[string]string) {
}) })
} }
func (u *userApi) CreateUser(ctx *gin.Context, req model.User) { func (u *userApi) CreateUser(ctx *gin.Context) {
req := bind[model.User](ctx)
errCheck(ctx, req.Role == constants.ROLE_ROOT, "Creation of root accounts is forbidden!") errCheck(ctx, req.Role == constants.ROLE_ROOT, "Creation of root accounts is forbidden!")
errCheck(ctx, req.Account == constants.CONSOLE, "Operation failed!") errCheck(ctx, req.Account == constants.CONSOLE, "Operation failed!")
errCheck(ctx, len(req.Password) < config.CF.UserPassWordMinLength, "Password is too short") errCheck(ctx, len(req.Password) < config.CF.UserPassWordMinLength, "Password is too short")
@@ -38,7 +40,8 @@ func (u *userApi) CreateUser(ctx *gin.Context, req model.User) {
rOk(ctx, "Operation successful!", nil) rOk(ctx, "Operation successful!", nil)
} }
func (u *userApi) ChangePassword(ctx *gin.Context, req model.User) { func (u *userApi) ChangePassword(ctx *gin.Context) {
req := bind[model.User](ctx)
reqUser := getUserName(ctx) reqUser := getUserName(ctx)
errCheck(ctx, getRole(ctx) != constants.ROLE_ROOT && req.Account != "", "Invalid parameters!") errCheck(ctx, getRole(ctx) != constants.ROLE_ROOT && req.Account != "", "Invalid parameters!")
var userName string var userName string

View File

@@ -148,7 +148,6 @@ func (t *taskLogic) EditTask(data model.Task) error {
return errors.New("can't edit task while it is running") return errors.New("can't edit task while it is running")
} }
// 如果 Cron 已经存在,停止并清理
if tj.Cron != nil { if tj.Cron != nil {
tj.Cron.Stop() tj.Cron.Stop()
tj.Cron = nil tj.Cron = nil
@@ -182,7 +181,6 @@ func (t *taskLogic) EditTask(data model.Task) error {
if data.Enable { if data.Enable {
c.Start() c.Start()
} }
tj.Cron = c tj.Cron = c
// 更新任务到数据库 // 更新任务到数据库
@@ -203,7 +201,7 @@ func (t *taskLogic) EditTaskEnable(id int, status bool) error {
} else if status { } else if status {
return errors.New("cron job create failed") return errors.New("cron job create failed")
} }
tj.Task.Enable = status
if err := repository.TaskRepository.EditTaskEnable(id, status); err != nil { if err := repository.TaskRepository.EditTaskEnable(id, status); err != nil {
return err return err
} }

View File

@@ -70,33 +70,33 @@ func routePathInit(r *gin.Engine) {
proConfigGroup := processGroup.Group("/config") proConfigGroup := processGroup.Group("/config")
{ {
proConfigGroup.POST("", middle.RolePermission(constants.ROLE_ROOT), middle.ProcessWaitCond.WaitTriggerMiddel, bind(api.ProcApi.CreateNewProcess)) proConfigGroup.POST("", middle.RolePermission(constants.ROLE_ROOT), middle.ProcessWaitCond.WaitTriggerMiddel, api.ProcApi.CreateNewProcess)
proConfigGroup.DELETE("", middle.RolePermission(constants.ROLE_ROOT), middle.ProcessWaitCond.WaitTriggerMiddel, api.ProcApi.DeleteNewProcess) proConfigGroup.DELETE("", middle.RolePermission(constants.ROLE_ROOT), middle.ProcessWaitCond.WaitTriggerMiddel, api.ProcApi.DeleteNewProcess)
proConfigGroup.PUT("", middle.RolePermission(constants.ROLE_ROOT), bind(api.ProcApi.UpdateProcessConfig)) proConfigGroup.PUT("", middle.RolePermission(constants.ROLE_ROOT), api.ProcApi.UpdateProcessConfig)
proConfigGroup.GET("", middle.RolePermission(constants.ROLE_ADMIN), api.ProcApi.GetProcessConfig) proConfigGroup.GET("", middle.RolePermission(constants.ROLE_ADMIN), api.ProcApi.GetProcessConfig)
} }
} }
taskGroup := apiGroup.Group("/task").Use(middle.RolePermission(constants.ROLE_ADMIN)) taskGroup := apiGroup.Group("/task")
{ {
taskGroup.GET("", api.TaskApi.GetTaskById) taskGroup.GET("", middle.RolePermission(constants.ROLE_ADMIN), api.TaskApi.GetTaskById)
taskGroup.GET("/all", api.TaskApi.GetTaskList) taskGroup.GET("/all", middle.RolePermission(constants.ROLE_ADMIN), api.TaskApi.GetTaskList)
taskGroup.GET("/all/wait", middle.TaskWaitCond.WaitGetMiddel, api.TaskApi.GetTaskList) taskGroup.GET("/all/wait", middle.RolePermission(constants.ROLE_ADMIN), middle.TaskWaitCond.WaitGetMiddel, api.TaskApi.GetTaskList)
taskGroup.POST("", middle.TaskWaitCond.WaitTriggerMiddel, bind(api.TaskApi.CreateTask)) taskGroup.POST("", middle.RolePermission(constants.ROLE_ADMIN), middle.TaskWaitCond.WaitTriggerMiddel, api.TaskApi.CreateTask)
taskGroup.DELETE("", middle.TaskWaitCond.WaitTriggerMiddel, api.TaskApi.DeleteTaskById) taskGroup.DELETE("", middle.RolePermission(constants.ROLE_ADMIN), middle.TaskWaitCond.WaitTriggerMiddel, api.TaskApi.DeleteTaskById)
taskGroup.PUT("", middle.TaskWaitCond.WaitTriggerMiddel, bind(api.TaskApi.EditTask)) taskGroup.PUT("", middle.RolePermission(constants.ROLE_ADMIN), middle.TaskWaitCond.WaitTriggerMiddel, api.TaskApi.EditTask)
taskGroup.PUT("/enable", middle.TaskWaitCond.WaitTriggerMiddel, bind(api.TaskApi.EditTaskEnable)) taskGroup.PUT("/enable", middle.RolePermission(constants.ROLE_ADMIN), middle.TaskWaitCond.WaitTriggerMiddel, api.TaskApi.EditTaskEnable)
taskGroup.GET("/start", api.TaskApi.StartTask) taskGroup.GET("/start", middle.RolePermission(constants.ROLE_ADMIN), api.TaskApi.StartTask)
taskGroup.GET("/stop", api.TaskApi.StopTask) taskGroup.GET("/stop", middle.RolePermission(constants.ROLE_ADMIN), api.TaskApi.StopTask)
taskGroup.POST("/key", api.TaskApi.CreateTaskApiKey) taskGroup.POST("/key", middle.RolePermission(constants.ROLE_ADMIN), api.TaskApi.CreateTaskApiKey)
taskGroup.GET("/api-key/:key", api.TaskApi.RunTaskByKey) taskGroup.GET("/api-key/:key", api.TaskApi.RunTaskByKey)
} }
userGroup := apiGroup.Group("/user") userGroup := apiGroup.Group("/user")
{ {
userGroup.POST("/login", bind(api.UserApi.LoginHandler)) userGroup.POST("/login", api.UserApi.LoginHandler)
userGroup.POST("", middle.RolePermission(constants.ROLE_ROOT), bind((api.UserApi.CreateUser))) userGroup.POST("", middle.RolePermission(constants.ROLE_ROOT), api.UserApi.CreateUser)
userGroup.PUT("/password", middle.RolePermission(constants.ROLE_USER), bind(api.UserApi.ChangePassword)) userGroup.PUT("/password", middle.RolePermission(constants.ROLE_USER), api.UserApi.ChangePassword)
userGroup.DELETE("", middle.RolePermission(constants.ROLE_ROOT), api.UserApi.DeleteUser) userGroup.DELETE("", middle.RolePermission(constants.ROLE_ROOT), api.UserApi.DeleteUser)
userGroup.GET("", middle.RolePermission(constants.ROLE_ROOT), api.UserApi.GetUserList) userGroup.GET("", middle.RolePermission(constants.ROLE_ROOT), api.UserApi.GetUserList)
} }
@@ -105,8 +105,8 @@ func routePathInit(r *gin.Engine) {
{ {
pushGroup.GET("/list", api.PushApi.GetPushList) pushGroup.GET("/list", api.PushApi.GetPushList)
pushGroup.GET("", api.PushApi.GetPushById) pushGroup.GET("", api.PushApi.GetPushById)
pushGroup.POST("", bind(api.PushApi.AddPushConfig)) pushGroup.POST("", api.PushApi.AddPushConfig)
pushGroup.PUT("", bind(api.PushApi.UpdatePushConfig)) pushGroup.PUT("", api.PushApi.UpdatePushConfig)
pushGroup.DELETE("", api.PushApi.DeletePushConfig) pushGroup.DELETE("", api.PushApi.DeletePushConfig)
} }
@@ -120,36 +120,20 @@ func routePathInit(r *gin.Engine) {
permissionGroup := apiGroup.Group("/permission").Use(middle.RolePermission(constants.ROLE_ROOT)) permissionGroup := apiGroup.Group("/permission").Use(middle.RolePermission(constants.ROLE_ROOT))
{ {
permissionGroup.GET("/list", api.PermissionApi.GetPermissionList) permissionGroup.GET("/list", api.PermissionApi.GetPermissionList)
permissionGroup.PUT("", middle.ProcessWaitCond.WaitTriggerMiddel, bind(api.PermissionApi.EditPermssion)) permissionGroup.PUT("", middle.ProcessWaitCond.WaitTriggerMiddel, api.PermissionApi.EditPermssion)
} }
logGroup := apiGroup.Group("/log").Use(middle.RolePermission(constants.ROLE_USER)) logGroup := apiGroup.Group("/log").Use(middle.RolePermission(constants.ROLE_USER))
{ {
logGroup.POST("", bind(api.LogApi.GetLog)) logGroup.POST("", api.LogApi.GetLog)
logGroup.GET("/running", api.LogApi.GetRunningLog) logGroup.GET("/running", api.LogApi.GetRunningLog)
} }
configGroup := apiGroup.Group("/config").Use(middle.RolePermission(constants.ROLE_ROOT)) configGroup := apiGroup.Group("/config").Use(middle.RolePermission(constants.ROLE_ROOT))
{ {
configGroup.GET("", api.ConfigApi.GetSystemConfiguration) configGroup.GET("", api.ConfigApi.GetSystemConfiguration)
configGroup.PUT("", bind(api.ConfigApi.SetSystemConfiguration)) configGroup.PUT("", api.ConfigApi.SetSystemConfiguration)
configGroup.PUT("/es", api.ConfigApi.EsConfigReload) configGroup.PUT("/es", api.ConfigApi.EsConfigReload)
} }
} }
} }
func bind[T any](f func(ctx *gin.Context, req T)) func(ctx *gin.Context) {
return func(ctx *gin.Context) {
var data T
err := ctx.ShouldBindJSON(&data)
if err != nil {
ctx.JSON(500, gin.H{
"code": -1,
"msg": "Invalid parameters!",
})
ctx.Abort()
return
}
f(ctx, data)
}
}