diff --git a/internal/app/api/api.go b/internal/app/api/api.go index 6d27eea..4e9cf6e 100644 --- a/internal/app/api/api.go +++ b/internal/app/api/api.go @@ -67,3 +67,9 @@ func getQueryString(ctx *gin.Context, query string) (s string) { errCheck(ctx, s == "", "Invalid parameters!") return } + +func bind[T any](ctx *gin.Context) T { + var data T + errCheck(ctx, ctx.ShouldBind(&data) != nil, "Invalid parameters!") + return data +} diff --git a/internal/app/api/config.go b/internal/app/api/config.go index dac218c..926fce2 100644 --- a/internal/app/api/config.go +++ b/internal/app/api/config.go @@ -15,7 +15,8 @@ func (c *configApi) GetSystemConfiguration(ctx *gin.Context) { 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!") rOk(ctx, "Operation successful!", nil) } diff --git a/internal/app/api/log.go b/internal/app/api/log.go index 7dc34b2..75de206 100644 --- a/internal/app/api/log.go +++ b/internal/app/api/log.go @@ -15,7 +15,8 @@ type logApi struct{} 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) { rOk(ctx, "Query successful!", logic.LogLogicImpl.Search(req, req.FilterName...)) } else { diff --git a/internal/app/api/permission.go b/internal/app/api/permission.go index 36c49b8..e031422 100644 --- a/internal/app/api/permission.go +++ b/internal/app/api/permission.go @@ -11,7 +11,8 @@ var PermissionApi = new(permissionApi) 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) errCheck(ctx, err != nil, err) rOk(ctx, "Operation successful!", nil) diff --git a/internal/app/api/proc.go b/internal/app/api/proc.go index 4fc7c5d..bb42d6d 100644 --- a/internal/app/api/proc.go +++ b/internal/app/api/proc.go @@ -12,7 +12,8 @@ type procApi struct{} 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) errCheck(ctx, err != nil, err) 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) err := repository.ProcessRepository.UpdateProcessConfig(req) errCheck(ctx, err != nil, err) diff --git a/internal/app/api/push.go b/internal/app/api/push.go index cc32595..4ee909f 100644 --- a/internal/app/api/push.go +++ b/internal/app/api/push.go @@ -20,13 +20,15 @@ func (p *pushApi) GetPushById(ctx *gin.Context) { 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) errCheck(ctx, err != nil, err) 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) errCheck(ctx, err != nil, err) rOk(ctx, "Operation successful!", nil) diff --git a/internal/app/api/task.go b/internal/app/api/task.go index c2ef62e..3432fc6 100644 --- a/internal/app/api/task.go +++ b/internal/app/api/task.go @@ -12,7 +12,8 @@ type taskApi struct{} 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) errCheck(ctx, err != nil, err) rOk(ctx, "Operation successful!", nil) @@ -45,13 +46,15 @@ func (t *taskApi) StopTask(ctx *gin.Context) { 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) errCheck(ctx, err != nil, err) 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) errCheck(ctx, err != nil, err) rOk(ctx, "Operation successful!", nil) diff --git a/internal/app/api/user.go b/internal/app/api/user.go index 8b487d7..31b9a6a 100644 --- a/internal/app/api/user.go +++ b/internal/app/api/user.go @@ -16,7 +16,8 @@ var UserApi = new(userApi) 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"] password := req["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.Account == constants.CONSOLE, "Operation failed!") 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) } -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) errCheck(ctx, getRole(ctx) != constants.ROLE_ROOT && req.Account != "", "Invalid parameters!") var userName string diff --git a/internal/app/logic/task_logic.go b/internal/app/logic/task_logic.go index 9328d07..e94f264 100644 --- a/internal/app/logic/task_logic.go +++ b/internal/app/logic/task_logic.go @@ -148,7 +148,6 @@ func (t *taskLogic) EditTask(data model.Task) error { return errors.New("can't edit task while it is running") } - // 如果 Cron 已经存在,停止并清理 if tj.Cron != nil { tj.Cron.Stop() tj.Cron = nil @@ -182,7 +181,6 @@ func (t *taskLogic) EditTask(data model.Task) error { if data.Enable { c.Start() } - tj.Cron = c // 更新任务到数据库 @@ -203,7 +201,7 @@ func (t *taskLogic) EditTaskEnable(id int, status bool) error { } else if status { return errors.New("cron job create failed") } - + tj.Task.Enable = status if err := repository.TaskRepository.EditTaskEnable(id, status); err != nil { return err } diff --git a/internal/app/route/route.go b/internal/app/route/route.go index 0ad7c0c..5b7a5cc 100644 --- a/internal/app/route/route.go +++ b/internal/app/route/route.go @@ -70,33 +70,33 @@ func routePathInit(r *gin.Engine) { 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.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) } } - taskGroup := apiGroup.Group("/task").Use(middle.RolePermission(constants.ROLE_ADMIN)) + taskGroup := apiGroup.Group("/task") { - taskGroup.GET("", api.TaskApi.GetTaskById) - taskGroup.GET("/all", api.TaskApi.GetTaskList) - taskGroup.GET("/all/wait", middle.TaskWaitCond.WaitGetMiddel, api.TaskApi.GetTaskList) - taskGroup.POST("", middle.TaskWaitCond.WaitTriggerMiddel, bind(api.TaskApi.CreateTask)) - taskGroup.DELETE("", middle.TaskWaitCond.WaitTriggerMiddel, api.TaskApi.DeleteTaskById) - taskGroup.PUT("", middle.TaskWaitCond.WaitTriggerMiddel, bind(api.TaskApi.EditTask)) - taskGroup.PUT("/enable", middle.TaskWaitCond.WaitTriggerMiddel, bind(api.TaskApi.EditTaskEnable)) - taskGroup.GET("/start", api.TaskApi.StartTask) - taskGroup.GET("/stop", api.TaskApi.StopTask) - taskGroup.POST("/key", api.TaskApi.CreateTaskApiKey) + taskGroup.GET("", middle.RolePermission(constants.ROLE_ADMIN), api.TaskApi.GetTaskById) + taskGroup.GET("/all", middle.RolePermission(constants.ROLE_ADMIN), api.TaskApi.GetTaskList) + taskGroup.GET("/all/wait", middle.RolePermission(constants.ROLE_ADMIN), middle.TaskWaitCond.WaitGetMiddel, api.TaskApi.GetTaskList) + taskGroup.POST("", middle.RolePermission(constants.ROLE_ADMIN), middle.TaskWaitCond.WaitTriggerMiddel, api.TaskApi.CreateTask) + taskGroup.DELETE("", middle.RolePermission(constants.ROLE_ADMIN), middle.TaskWaitCond.WaitTriggerMiddel, api.TaskApi.DeleteTaskById) + taskGroup.PUT("", middle.RolePermission(constants.ROLE_ADMIN), middle.TaskWaitCond.WaitTriggerMiddel, api.TaskApi.EditTask) + taskGroup.PUT("/enable", middle.RolePermission(constants.ROLE_ADMIN), middle.TaskWaitCond.WaitTriggerMiddel, api.TaskApi.EditTaskEnable) + taskGroup.GET("/start", middle.RolePermission(constants.ROLE_ADMIN), api.TaskApi.StartTask) + taskGroup.GET("/stop", middle.RolePermission(constants.ROLE_ADMIN), api.TaskApi.StopTask) + taskGroup.POST("/key", middle.RolePermission(constants.ROLE_ADMIN), api.TaskApi.CreateTaskApiKey) taskGroup.GET("/api-key/:key", api.TaskApi.RunTaskByKey) } userGroup := apiGroup.Group("/user") { - userGroup.POST("/login", bind(api.UserApi.LoginHandler)) - userGroup.POST("", middle.RolePermission(constants.ROLE_ROOT), bind((api.UserApi.CreateUser))) - userGroup.PUT("/password", middle.RolePermission(constants.ROLE_USER), bind(api.UserApi.ChangePassword)) + userGroup.POST("/login", api.UserApi.LoginHandler) + userGroup.POST("", middle.RolePermission(constants.ROLE_ROOT), api.UserApi.CreateUser) + userGroup.PUT("/password", middle.RolePermission(constants.ROLE_USER), api.UserApi.ChangePassword) userGroup.DELETE("", middle.RolePermission(constants.ROLE_ROOT), api.UserApi.DeleteUser) 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("", api.PushApi.GetPushById) - pushGroup.POST("", bind(api.PushApi.AddPushConfig)) - pushGroup.PUT("", bind(api.PushApi.UpdatePushConfig)) + pushGroup.POST("", api.PushApi.AddPushConfig) + pushGroup.PUT("", api.PushApi.UpdatePushConfig) 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.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.POST("", bind(api.LogApi.GetLog)) + logGroup.POST("", api.LogApi.GetLog) logGroup.GET("/running", api.LogApi.GetRunningLog) } configGroup := apiGroup.Group("/config").Use(middle.RolePermission(constants.ROLE_ROOT)) { configGroup.GET("", api.ConfigApi.GetSystemConfiguration) - configGroup.PUT("", bind(api.ConfigApi.SetSystemConfiguration)) + configGroup.PUT("", api.ConfigApi.SetSystemConfiguration) 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) - } -}