From fe4a6e2e78e2ff1a2bd26dedc4f07ff7053ff04b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Sun, 29 Oct 2023 02:59:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=84=E8=8C=83=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20422=20=E7=8A=B6=E6=80=81=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/http/controllers/cron_controller.go | 30 ++++---- app/http/controllers/plugin_controller.go | 8 +- .../plugins/fail2ban/fail2ban_controller.go | 4 +- .../plugins/mysql57/mysql57_controller.go | 74 ++++++++++++------- .../plugins/mysql80/mysql80_controller.go | 74 ++++++++++++------- .../plugins/php74/php74_controller.go | 12 +-- .../plugins/php80/php80_controller.go | 12 +-- .../plugins/php81/php81_controller.go | 12 +-- .../plugins/php82/php82_controller.go | 12 +-- .../phpmyadmin/phpmyadmin_controller.go | 8 +- .../postgresql15/postgresql15_controller.go | 40 +++++----- .../postgresql16/postgresql16_controller.go | 40 +++++----- .../plugins/pureftpd/pureftpd_controller.go | 18 ++--- .../plugins/redis/redis_controller.go | 2 +- .../plugins/s3fs/s3fs_controller.go | 2 +- .../supervisor/supervisor_controller.go | 4 +- .../controllers/plugins/toolbox/toolbox.go | 16 ++-- app/http/controllers/safe_controller.go | 14 ++-- app/http/controllers/ssh_controller.go | 4 +- app/http/controllers/website_controller.go | 54 +++++++------- routes/plugin.go | 12 +-- 21 files changed, 244 insertions(+), 208 deletions(-) diff --git a/app/http/controllers/cron_controller.go b/app/http/controllers/cron_controller.go index aa26710d..f9b8263b 100644 --- a/app/http/controllers/cron_controller.go +++ b/app/http/controllers/cron_controller.go @@ -54,15 +54,15 @@ func (c *CronController) Add(ctx http.Context) http.Response { "backup_type": "required_if:type,backup|in:website,mysql,postgresql", }) if err != nil { - return Error(ctx, http.StatusBadRequest, err.Error()) + return Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } // 单独验证时间格式 if !regexp.MustCompile(`^((\*|\d+|\d+-\d+|\d+/\d+|\d+-\d+/\d+|\*/\d+)(,(\*|\d+|\d+-\d+|\d+/\d+|\d+-\d+/\d+|\*/\d+))*\s?){5}$`).MatchString(ctx.Request().Input("time")) { - return Error(ctx, http.StatusBadRequest, "时间格式错误") + return Error(ctx, http.StatusUnprocessableEntity, "时间格式错误") } shell := ctx.Request().Input("script") @@ -151,7 +151,7 @@ func (c *CronController) Script(ctx http.Context) http.Response { var cron models.Cron err := facades.Orm().Query().Where("id", ctx.Request().Input("id")).FirstOrFail(&cron) if err != nil { - return Error(ctx, http.StatusBadRequest, "计划任务不存在") + return Error(ctx, http.StatusUnprocessableEntity, "计划任务不存在") } return Success(ctx, tools.Read(cron.Shell)) @@ -165,25 +165,25 @@ func (c *CronController) Update(ctx http.Context) http.Response { "script": "required", }) if err != nil { - return Error(ctx, http.StatusBadRequest, err.Error()) + return Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } // 单独验证时间格式 if !regexp.MustCompile(`^((\*|\d+|\d+-\d+|\d+/\d+|\d+-\d+/\d+|\*/\d+)(,(\*|\d+|\d+-\d+|\d+/\d+|\d+-\d+/\d+|\*/\d+))*\s?){5}$`).MatchString(ctx.Request().Input("time")) { - return Error(ctx, http.StatusBadRequest, "时间格式错误") + return Error(ctx, http.StatusUnprocessableEntity, "时间格式错误") } var cron models.Cron err = facades.Orm().Query().Where("id", ctx.Request().Input("id")).FirstOrFail(&cron) if err != nil { - return Error(ctx, http.StatusBadRequest, "计划任务不存在") + return Error(ctx, http.StatusUnprocessableEntity, "计划任务不存在") } if !cron.Status { - return Error(ctx, http.StatusBadRequest, "计划任务已禁用") + return Error(ctx, http.StatusUnprocessableEntity, "计划任务已禁用") } cron.Time = ctx.Request().Input("time") @@ -213,7 +213,7 @@ func (c *CronController) Delete(ctx http.Context) http.Response { var cron models.Cron err := facades.Orm().Query().Where("id", ctx.Request().Input("id")).FirstOrFail(&cron) if err != nil { - return Error(ctx, http.StatusBadRequest, "计划任务不存在") + return Error(ctx, http.StatusUnprocessableEntity, "计划任务不存在") } c.cron.DeleteFromSystem(cron) @@ -234,16 +234,16 @@ func (c *CronController) Status(ctx http.Context) http.Response { "status": "bool", }) if err != nil { - return Error(ctx, http.StatusBadRequest, err.Error()) + return Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } var cron models.Cron err = facades.Orm().Query().Where("id", ctx.Request().Input("id")).FirstOrFail(&cron) if err != nil { - return Error(ctx, http.StatusBadRequest, "计划任务不存在") + return Error(ctx, http.StatusUnprocessableEntity, "计划任务不存在") } cron.Status = ctx.Request().InputBool("status") @@ -266,11 +266,11 @@ func (c *CronController) Log(ctx http.Context) http.Response { var cron models.Cron err := facades.Orm().Query().Where("id", ctx.Request().Input("id")).FirstOrFail(&cron) if err != nil { - return Error(ctx, http.StatusBadRequest, "计划任务不存在") + return Error(ctx, http.StatusUnprocessableEntity, "计划任务不存在") } if !tools.Exists(cron.Log) { - return Error(ctx, http.StatusBadRequest, "日志文件不存在") + return Error(ctx, http.StatusUnprocessableEntity, "日志文件不存在") } return Success(ctx, tools.Read(cron.Log)) diff --git a/app/http/controllers/plugin_controller.go b/app/http/controllers/plugin_controller.go index 740150b2..9e2848cc 100644 --- a/app/http/controllers/plugin_controller.go +++ b/app/http/controllers/plugin_controller.go @@ -105,7 +105,7 @@ func (r *PluginController) Install(ctx http.Context) http.Response { } if installedPlugin.ID != 0 { - return Error(ctx, http.StatusBadRequest, "插件已安装") + return Error(ctx, http.StatusUnprocessableEntity, "插件已安装") } var lock sync.RWMutex @@ -161,7 +161,7 @@ func (r *PluginController) Uninstall(ctx http.Context) http.Response { } if installedPlugin.ID == 0 { - return Error(ctx, http.StatusBadRequest, "插件未安装") + return Error(ctx, http.StatusUnprocessableEntity, "插件未安装") } var lock sync.RWMutex @@ -217,7 +217,7 @@ func (r *PluginController) Update(ctx http.Context) http.Response { } if installedPlugin.ID == 0 { - return Error(ctx, http.StatusBadRequest, "插件未安装") + return Error(ctx, http.StatusUnprocessableEntity, "插件未安装") } var lock sync.RWMutex @@ -272,7 +272,7 @@ func (r *PluginController) UpdateShow(ctx http.Context) http.Response { return Error(ctx, http.StatusInternalServerError, "系统内部错误") } if plugin.ID == 0 { - return Error(ctx, http.StatusBadRequest, "插件未安装") + return Error(ctx, http.StatusUnprocessableEntity, "插件未安装") } plugin.Show = show diff --git a/app/http/controllers/plugins/fail2ban/fail2ban_controller.go b/app/http/controllers/plugins/fail2ban/fail2ban_controller.go index 668a4653..7e983dec 100644 --- a/app/http/controllers/plugins/fail2ban/fail2ban_controller.go +++ b/app/http/controllers/plugins/fail2ban/fail2ban_controller.go @@ -143,12 +143,12 @@ func (c *Fail2banController) List(ctx http.Context) http.Response { limit := ctx.Request().QueryInt("limit", 10) raw := tools.Read("/etc/fail2ban/jail.local") if len(raw) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "Fail2ban 规则为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "Fail2ban 规则为空") } jailList := regexp.MustCompile(`\[(.*?)]`).FindAllStringSubmatch(raw, -1) if len(jailList) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "Fail2ban 规则为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "Fail2ban 规则为空") } var jails []Jail diff --git a/app/http/controllers/plugins/mysql57/mysql57_controller.go b/app/http/controllers/plugins/mysql57/mysql57_controller.go index 7fd0a8b7..6a7340b9 100644 --- a/app/http/controllers/plugins/mysql57/mysql57_controller.go +++ b/app/http/controllers/plugins/mysql57/mysql57_controller.go @@ -152,7 +152,7 @@ func (c *Mysql57Controller) SaveConfig(ctx http.Context) http.Response { config := ctx.Request().Input("config") if len(config) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "配置不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "配置不能为空") } if !tools.Write("/www/server/mysql/conf/my.cnf", config, 0644) { @@ -171,7 +171,7 @@ func (c *Mysql57Controller) Load(ctx http.Context) http.Response { rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) if len(rootPassword) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "MySQL root密码为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "MySQL root密码为空") } status := tools.Exec("systemctl status mysqld | grep Active | grep -v grep | awk '{print $2}'") @@ -181,7 +181,7 @@ func (c *Mysql57Controller) Load(ctx http.Context) http.Response { raw := tools.Exec("/www/server/mysql/bin/mysqladmin -uroot -p" + rootPassword + " extended-status 2>&1") if strings.Contains(raw, "Access denied for user") { - return controllers.Error(ctx, http.StatusBadRequest, "MySQL root密码错误") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "MySQL root密码错误") } if !strings.Contains(raw, "Uptime") { return controllers.Error(ctx, http.StatusInternalServerError, "获取MySQL负载失败") @@ -290,7 +290,7 @@ func (c *Mysql57Controller) GetRootPassword(ctx http.Context) http.Response { rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) if len(rootPassword) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "MySQL root密码为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "MySQL root密码为空") } return controllers.Success(ctx, rootPassword) @@ -313,7 +313,7 @@ func (c *Mysql57Controller) SetRootPassword(ctx http.Context) http.Response { rootPassword := ctx.Request().Input(models.SettingKeyMysqlRootPassword) if len(rootPassword) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "MySQL root密码不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "MySQL root密码不能为空") } oldRootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) @@ -407,10 +407,10 @@ func (c *Mysql57Controller) AddDatabase(ctx http.Context) http.Response { "password": "required|min_len:8|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) @@ -437,10 +437,10 @@ func (c *Mysql57Controller) DeleteDatabase(ctx http.Context) http.Response { "database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:information_schema,mysql,performance_schema,sys", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) @@ -463,7 +463,25 @@ func (c *Mysql57Controller) BackupList(ctx http.Context) http.Response { return controllers.Error(ctx, http.StatusInternalServerError, "获取备份列表失败") } - return controllers.Success(ctx, backupList) + page := ctx.Request().QueryInt("page", 1) + limit := ctx.Request().QueryInt("limit", 10) + startIndex := (page - 1) * limit + endIndex := page * limit + if startIndex > len(backupList) { + return controllers.Success(ctx, http.Json{ + "total": 0, + "items": []services.BackupFile{}, + }) + } + if endIndex > len(backupList) { + endIndex = len(backupList) + } + pagedBackupList := backupList[startIndex:endIndex] + + return controllers.Success(ctx, http.Json{ + "total": len(backupList), + "items": pagedBackupList, + }) } // UploadBackup 上传备份 @@ -475,7 +493,7 @@ func (c *Mysql57Controller) UploadBackup(ctx http.Context) http.Response { file, err := ctx.Request().File("file") if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, "上传文件失败") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "上传文件失败") } backupPath := c.setting.Get(models.SettingKeyBackupPath) + "/mysql" @@ -486,7 +504,7 @@ func (c *Mysql57Controller) UploadBackup(ctx http.Context) http.Response { name := file.GetClientOriginalName() _, err = file.StoreAs(backupPath, name) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, "上传文件失败") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "上传文件失败") } return controllers.Success(ctx, "上传文件成功") @@ -503,10 +521,10 @@ func (c *Mysql57Controller) CreateBackup(ctx http.Context) http.Response { "database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:information_schema,mysql,performance_schema,sys", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } database := ctx.Request().Input("database") @@ -527,17 +545,17 @@ func (c *Mysql57Controller) DeleteBackup(ctx http.Context) http.Response { } validator, err := ctx.Request().Validate(map[string]string{ - "backup": "required|min_len:1|max_len:255", + "name": "required|min_len:1|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } backupPath := c.setting.Get(models.SettingKeyBackupPath) + "/mysql" - fileName := ctx.Request().Input("backup") + fileName := ctx.Request().Input("name") tools.Remove(backupPath + "/" + fileName) return controllers.Success(ctx, "删除备份成功") @@ -555,10 +573,10 @@ func (c *Mysql57Controller) RestoreBackup(ctx http.Context) http.Response { "database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:information_schema,mysql,performance_schema,sys", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } err = c.backup.MysqlRestore(ctx.Request().Input("database"), ctx.Request().Input("backup")) @@ -669,10 +687,10 @@ func (c *Mysql57Controller) AddUser(ctx http.Context) http.Response { "password": "required|min_len:8|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) @@ -697,10 +715,10 @@ func (c *Mysql57Controller) DeleteUser(ctx http.Context) http.Response { "user": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) @@ -722,10 +740,10 @@ func (c *Mysql57Controller) SetUserPassword(ctx http.Context) http.Response { "password": "required|min_len:8|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) @@ -749,10 +767,10 @@ func (c *Mysql57Controller) SetUserPrivileges(ctx http.Context) http.Response { "database": "required|min_len:1|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) diff --git a/app/http/controllers/plugins/mysql80/mysql80_controller.go b/app/http/controllers/plugins/mysql80/mysql80_controller.go index c5b1e28f..b3d82a83 100644 --- a/app/http/controllers/plugins/mysql80/mysql80_controller.go +++ b/app/http/controllers/plugins/mysql80/mysql80_controller.go @@ -152,7 +152,7 @@ func (c *Mysql80Controller) SaveConfig(ctx http.Context) http.Response { config := ctx.Request().Input("config") if len(config) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "配置不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "配置不能为空") } if !tools.Write("/www/server/mysql/conf/my.cnf", config, 0644) { @@ -171,7 +171,7 @@ func (c *Mysql80Controller) Load(ctx http.Context) http.Response { rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) if len(rootPassword) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "MySQL root密码为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "MySQL root密码为空") } status := tools.Exec("systemctl status mysqld | grep Active | grep -v grep | awk '{print $2}'") @@ -181,7 +181,7 @@ func (c *Mysql80Controller) Load(ctx http.Context) http.Response { raw := tools.Exec("/www/server/mysql/bin/mysqladmin -uroot -p" + rootPassword + " extended-status 2>&1") if strings.Contains(raw, "Access denied for user") { - return controllers.Error(ctx, http.StatusBadRequest, "MySQL root密码错误") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "MySQL root密码错误") } if !strings.Contains(raw, "Uptime") { return controllers.Error(ctx, http.StatusInternalServerError, "获取MySQL负载失败") @@ -290,7 +290,7 @@ func (c *Mysql80Controller) GetRootPassword(ctx http.Context) http.Response { rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) if len(rootPassword) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "MySQL root密码为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "MySQL root密码为空") } return controllers.Success(ctx, rootPassword) @@ -313,7 +313,7 @@ func (c *Mysql80Controller) SetRootPassword(ctx http.Context) http.Response { rootPassword := ctx.Request().Input(models.SettingKeyMysqlRootPassword) if len(rootPassword) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "MySQL root密码不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "MySQL root密码不能为空") } oldRootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) @@ -407,10 +407,10 @@ func (c *Mysql80Controller) AddDatabase(ctx http.Context) http.Response { "password": "required|min_len:8|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) @@ -437,10 +437,10 @@ func (c *Mysql80Controller) DeleteDatabase(ctx http.Context) http.Response { "database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:information_schema,mysql,performance_schema,sys", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) @@ -463,7 +463,25 @@ func (c *Mysql80Controller) BackupList(ctx http.Context) http.Response { return controllers.Error(ctx, http.StatusInternalServerError, "获取备份列表失败") } - return controllers.Success(ctx, backupList) + page := ctx.Request().QueryInt("page", 1) + limit := ctx.Request().QueryInt("limit", 10) + startIndex := (page - 1) * limit + endIndex := page * limit + if startIndex > len(backupList) { + return controllers.Success(ctx, http.Json{ + "total": 0, + "items": []services.BackupFile{}, + }) + } + if endIndex > len(backupList) { + endIndex = len(backupList) + } + pagedBackupList := backupList[startIndex:endIndex] + + return controllers.Success(ctx, http.Json{ + "total": len(backupList), + "items": pagedBackupList, + }) } // UploadBackup 上传备份 @@ -475,7 +493,7 @@ func (c *Mysql80Controller) UploadBackup(ctx http.Context) http.Response { file, err := ctx.Request().File("file") if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, "上传文件失败") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "上传文件失败") } backupPath := c.setting.Get(models.SettingKeyBackupPath) + "/mysql" @@ -486,7 +504,7 @@ func (c *Mysql80Controller) UploadBackup(ctx http.Context) http.Response { name := file.GetClientOriginalName() _, err = file.StoreAs(backupPath, name) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, "上传文件失败") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "上传文件失败") } return controllers.Success(ctx, "上传文件成功") @@ -503,10 +521,10 @@ func (c *Mysql80Controller) CreateBackup(ctx http.Context) http.Response { "database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:information_schema,mysql,performance_schema,sys", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } database := ctx.Request().Input("database") @@ -527,17 +545,17 @@ func (c *Mysql80Controller) DeleteBackup(ctx http.Context) http.Response { } validator, err := ctx.Request().Validate(map[string]string{ - "backup": "required|min_len:1|max_len:255", + "name": "required|min_len:1|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } backupPath := c.setting.Get(models.SettingKeyBackupPath) + "/mysql" - fileName := ctx.Request().Input("backup") + fileName := ctx.Request().Input("name") tools.Remove(backupPath + "/" + fileName) return controllers.Success(ctx, "删除备份成功") @@ -555,10 +573,10 @@ func (c *Mysql80Controller) RestoreBackup(ctx http.Context) http.Response { "database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:information_schema,mysql,performance_schema,sys", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } err = c.backup.MysqlRestore(ctx.Request().Input("database"), ctx.Request().Input("backup")) @@ -669,10 +687,10 @@ func (c *Mysql80Controller) AddUser(ctx http.Context) http.Response { "password": "required|min_len:8|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) @@ -697,10 +715,10 @@ func (c *Mysql80Controller) DeleteUser(ctx http.Context) http.Response { "user": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) @@ -722,10 +740,10 @@ func (c *Mysql80Controller) SetUserPassword(ctx http.Context) http.Response { "password": "required|min_len:8|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) @@ -749,10 +767,10 @@ func (c *Mysql80Controller) SetUserPrivileges(ctx http.Context) http.Response { "database": "required|min_len:1|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } rootPassword := c.setting.Get(models.SettingKeyMysqlRootPassword) diff --git a/app/http/controllers/plugins/php74/php74_controller.go b/app/http/controllers/plugins/php74/php74_controller.go index 1acd2d28..b1c36efb 100644 --- a/app/http/controllers/plugins/php74/php74_controller.go +++ b/app/http/controllers/plugins/php74/php74_controller.go @@ -250,14 +250,14 @@ func (c *Php74Controller) InstallExtension(ctx http.Context) http.Response { slug := ctx.Request().Input("slug") if len(slug) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "参数错误") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "参数错误") } extensions := c.GetExtensions() for _, item := range extensions { if item.Slug == slug { if item.Installed { - return controllers.Error(ctx, http.StatusBadRequest, "扩展已安装") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展已安装") } var task models.Task @@ -276,7 +276,7 @@ func (c *Php74Controller) InstallExtension(ctx http.Context) http.Response { } } - return controllers.Error(ctx, http.StatusBadRequest, "扩展不存在") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展不存在") } func (c *Php74Controller) UninstallExtension(ctx http.Context) http.Response { @@ -287,14 +287,14 @@ func (c *Php74Controller) UninstallExtension(ctx http.Context) http.Response { slug := ctx.Request().Input("slug") if len(slug) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "参数错误") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "参数错误") } extensions := c.GetExtensions() for _, item := range extensions { if item.Slug == slug { if !item.Installed { - return controllers.Error(ctx, http.StatusBadRequest, "扩展未安装") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展未安装") } var task models.Task @@ -313,7 +313,7 @@ func (c *Php74Controller) UninstallExtension(ctx http.Context) http.Response { } } - return controllers.Error(ctx, http.StatusBadRequest, "扩展不存在") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展不存在") } func (c *Php74Controller) GetExtensions() []Extension { diff --git a/app/http/controllers/plugins/php80/php80_controller.go b/app/http/controllers/plugins/php80/php80_controller.go index e37c823b..dc80ecad 100644 --- a/app/http/controllers/plugins/php80/php80_controller.go +++ b/app/http/controllers/plugins/php80/php80_controller.go @@ -250,14 +250,14 @@ func (c *Php80Controller) InstallExtension(ctx http.Context) http.Response { slug := ctx.Request().Input("slug") if len(slug) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "参数错误") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "参数错误") } extensions := c.GetExtensions() for _, item := range extensions { if item.Slug == slug { if item.Installed { - return controllers.Error(ctx, http.StatusBadRequest, "扩展已安装") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展已安装") } var task models.Task @@ -276,7 +276,7 @@ func (c *Php80Controller) InstallExtension(ctx http.Context) http.Response { } } - return controllers.Error(ctx, http.StatusBadRequest, "扩展不存在") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展不存在") } func (c *Php80Controller) UninstallExtension(ctx http.Context) http.Response { @@ -287,14 +287,14 @@ func (c *Php80Controller) UninstallExtension(ctx http.Context) http.Response { slug := ctx.Request().Input("slug") if len(slug) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "参数错误") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "参数错误") } extensions := c.GetExtensions() for _, item := range extensions { if item.Slug == slug { if !item.Installed { - return controllers.Error(ctx, http.StatusBadRequest, "扩展未安装") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展未安装") } var task models.Task @@ -313,7 +313,7 @@ func (c *Php80Controller) UninstallExtension(ctx http.Context) http.Response { } } - return controllers.Error(ctx, http.StatusBadRequest, "扩展不存在") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展不存在") } func (c *Php80Controller) GetExtensions() []Extension { diff --git a/app/http/controllers/plugins/php81/php81_controller.go b/app/http/controllers/plugins/php81/php81_controller.go index 6de7cbe8..20e11f20 100644 --- a/app/http/controllers/plugins/php81/php81_controller.go +++ b/app/http/controllers/plugins/php81/php81_controller.go @@ -250,14 +250,14 @@ func (c *Php81Controller) InstallExtension(ctx http.Context) http.Response { slug := ctx.Request().Input("slug") if len(slug) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "参数错误") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "参数错误") } extensions := c.GetExtensions() for _, item := range extensions { if item.Slug == slug { if item.Installed { - return controllers.Error(ctx, http.StatusBadRequest, "扩展已安装") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展已安装") } var task models.Task @@ -276,7 +276,7 @@ func (c *Php81Controller) InstallExtension(ctx http.Context) http.Response { } } - return controllers.Error(ctx, http.StatusBadRequest, "扩展不存在") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展不存在") } func (c *Php81Controller) UninstallExtension(ctx http.Context) http.Response { @@ -287,14 +287,14 @@ func (c *Php81Controller) UninstallExtension(ctx http.Context) http.Response { slug := ctx.Request().Input("slug") if len(slug) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "参数错误") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "参数错误") } extensions := c.GetExtensions() for _, item := range extensions { if item.Slug == slug { if !item.Installed { - return controllers.Error(ctx, http.StatusBadRequest, "扩展未安装") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展未安装") } var task models.Task @@ -313,7 +313,7 @@ func (c *Php81Controller) UninstallExtension(ctx http.Context) http.Response { } } - return controllers.Error(ctx, http.StatusBadRequest, "扩展不存在") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展不存在") } func (c *Php81Controller) GetExtensions() []Extension { diff --git a/app/http/controllers/plugins/php82/php82_controller.go b/app/http/controllers/plugins/php82/php82_controller.go index 9581e404..bb04f5b1 100644 --- a/app/http/controllers/plugins/php82/php82_controller.go +++ b/app/http/controllers/plugins/php82/php82_controller.go @@ -250,14 +250,14 @@ func (c *Php82Controller) InstallExtension(ctx http.Context) http.Response { slug := ctx.Request().Input("slug") if len(slug) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "参数错误") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "参数错误") } extensions := c.GetExtensions() for _, item := range extensions { if item.Slug == slug { if item.Installed { - return controllers.Error(ctx, http.StatusBadRequest, "扩展已安装") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展已安装") } var task models.Task @@ -276,7 +276,7 @@ func (c *Php82Controller) InstallExtension(ctx http.Context) http.Response { } } - return controllers.Error(ctx, http.StatusBadRequest, "扩展不存在") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展不存在") } func (c *Php82Controller) UninstallExtension(ctx http.Context) http.Response { @@ -287,14 +287,14 @@ func (c *Php82Controller) UninstallExtension(ctx http.Context) http.Response { slug := ctx.Request().Input("slug") if len(slug) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "参数错误") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "参数错误") } extensions := c.GetExtensions() for _, item := range extensions { if item.Slug == slug { if !item.Installed { - return controllers.Error(ctx, http.StatusBadRequest, "扩展未安装") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展未安装") } var task models.Task @@ -313,7 +313,7 @@ func (c *Php82Controller) UninstallExtension(ctx http.Context) http.Response { } } - return controllers.Error(ctx, http.StatusBadRequest, "扩展不存在") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "扩展不存在") } func (c *Php82Controller) GetExtensions() []Extension { diff --git a/app/http/controllers/plugins/phpmyadmin/phpmyadmin_controller.go b/app/http/controllers/plugins/phpmyadmin/phpmyadmin_controller.go index b6a53675..81e56fc6 100644 --- a/app/http/controllers/plugins/phpmyadmin/phpmyadmin_controller.go +++ b/app/http/controllers/plugins/phpmyadmin/phpmyadmin_controller.go @@ -26,7 +26,7 @@ func (c *PhpMyAdminController) Info(ctx http.Context) http.Response { files, err := os.ReadDir("/www/server/phpmyadmin") if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, "找不到 phpMyAdmin 目录") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "找不到 phpMyAdmin 目录") } var phpmyadmin string @@ -36,13 +36,13 @@ func (c *PhpMyAdminController) Info(ctx http.Context) http.Response { } } if len(phpmyadmin) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "找不到 phpMyAdmin 目录") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "找不到 phpMyAdmin 目录") } conf := tools.Read("/www/server/vhost/phpmyadmin.conf") match := regexp.MustCompile(`listen\s+(\d+);`).FindStringSubmatch(conf) if len(match) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "找不到 phpMyAdmin 端口") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "找不到 phpMyAdmin 端口") } return controllers.Success(ctx, http.Json{ @@ -59,7 +59,7 @@ func (c *PhpMyAdminController) SetPort(ctx http.Context) http.Response { port := ctx.Request().Input("port") if len(port) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "端口不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "端口不能为空") } conf := tools.Read("/www/server/vhost/phpmyadmin.conf") diff --git a/app/http/controllers/plugins/postgresql15/postgresql15_controller.go b/app/http/controllers/plugins/postgresql15/postgresql15_controller.go index ffcff6c3..87f97e7b 100644 --- a/app/http/controllers/plugins/postgresql15/postgresql15_controller.go +++ b/app/http/controllers/plugins/postgresql15/postgresql15_controller.go @@ -170,7 +170,7 @@ func (c *Postgresql15Controller) SaveConfig(ctx http.Context) http.Response { config := ctx.Request().Input("config") if len(config) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "配置不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "配置不能为空") } if !tools.Write("/www/server/postgresql/data/postgresql.conf", config, 0644) { @@ -189,7 +189,7 @@ func (c *Postgresql15Controller) SaveUserConfig(ctx http.Context) http.Response config := ctx.Request().Input("config") if len(config) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "配置不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "配置不能为空") } if !tools.Write("/www/server/postgresql/data/pg_hba.conf", config, 0644) { @@ -314,10 +314,10 @@ func (c *Postgresql15Controller) AddDatabase(ctx http.Context) http.Response { "password": "required|min_len:8|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } database := ctx.Request().Input("database") @@ -346,10 +346,10 @@ func (c *Postgresql15Controller) DeleteDatabase(ctx http.Context) http.Response "database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:postgres,template0,template1", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } database := ctx.Request().Input("database") @@ -383,7 +383,7 @@ func (c *Postgresql15Controller) UploadBackup(ctx http.Context) http.Response { file, err := ctx.Request().File("file") if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, "上传文件失败") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "上传文件失败") } backupPath := c.setting.Get(models.SettingKeyBackupPath) + "/postgresql" @@ -394,7 +394,7 @@ func (c *Postgresql15Controller) UploadBackup(ctx http.Context) http.Response { name := file.GetClientOriginalName() _, err = file.StoreAs(backupPath, name) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, "上传文件失败") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "上传文件失败") } return controllers.Success(ctx, nil) @@ -411,10 +411,10 @@ func (c *Postgresql15Controller) CreateBackup(ctx http.Context) http.Response { "database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:information_schema,mysql,performance_schema,sys", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } database := ctx.Request().Input("database") @@ -438,10 +438,10 @@ func (c *Postgresql15Controller) DeleteBackup(ctx http.Context) http.Response { "name": "required|min_len:1|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } backupPath := c.setting.Get(models.SettingKeyBackupPath) + "/postgresql" @@ -463,10 +463,10 @@ func (c *Postgresql15Controller) RestoreBackup(ctx http.Context) http.Response { "database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:information_schema,mysql,performance_schema,sys", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } err = c.backup.PostgresqlRestore(ctx.Request().Input("database"), ctx.Request().Input("name")) @@ -544,10 +544,10 @@ func (c *Postgresql15Controller) AddUser(ctx http.Context) http.Response { "password": "required|min_len:8|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } user := ctx.Request().Input("user") @@ -573,10 +573,10 @@ func (c *Postgresql15Controller) DeleteUser(ctx http.Context) http.Response { "user": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } user := ctx.Request().Input("user") @@ -598,10 +598,10 @@ func (c *Postgresql15Controller) SetUserPassword(ctx http.Context) http.Response "password": "required|min_len:8|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } user := ctx.Request().Input("user") diff --git a/app/http/controllers/plugins/postgresql16/postgresql16_controller.go b/app/http/controllers/plugins/postgresql16/postgresql16_controller.go index 4e6fb98a..545498cf 100644 --- a/app/http/controllers/plugins/postgresql16/postgresql16_controller.go +++ b/app/http/controllers/plugins/postgresql16/postgresql16_controller.go @@ -170,7 +170,7 @@ func (c *Postgresql16Controller) SaveConfig(ctx http.Context) http.Response { config := ctx.Request().Input("config") if len(config) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "配置不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "配置不能为空") } if !tools.Write("/www/server/postgresql/data/postgresql.conf", config, 0644) { @@ -189,7 +189,7 @@ func (c *Postgresql16Controller) SaveUserConfig(ctx http.Context) http.Response config := ctx.Request().Input("config") if len(config) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "配置不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "配置不能为空") } if !tools.Write("/www/server/postgresql/data/pg_hba.conf", config, 0644) { @@ -314,10 +314,10 @@ func (c *Postgresql16Controller) AddDatabase(ctx http.Context) http.Response { "password": "required|min_len:8|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } database := ctx.Request().Input("database") @@ -346,10 +346,10 @@ func (c *Postgresql16Controller) DeleteDatabase(ctx http.Context) http.Response "database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:postgres,template0,template1", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } database := ctx.Request().Input("database") @@ -383,7 +383,7 @@ func (c *Postgresql16Controller) UploadBackup(ctx http.Context) http.Response { file, err := ctx.Request().File("file") if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, "上传文件失败") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "上传文件失败") } backupPath := c.setting.Get(models.SettingKeyBackupPath) + "/postgresql" @@ -394,7 +394,7 @@ func (c *Postgresql16Controller) UploadBackup(ctx http.Context) http.Response { name := file.GetClientOriginalName() _, err = file.StoreAs(backupPath, name) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, "上传文件失败") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "上传文件失败") } return controllers.Success(ctx, nil) @@ -411,10 +411,10 @@ func (c *Postgresql16Controller) CreateBackup(ctx http.Context) http.Response { "database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:information_schema,mysql,performance_schema,sys", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } database := ctx.Request().Input("database") @@ -438,10 +438,10 @@ func (c *Postgresql16Controller) DeleteBackup(ctx http.Context) http.Response { "name": "required|min_len:1|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } backupPath := c.setting.Get(models.SettingKeyBackupPath) + "/postgresql" @@ -463,10 +463,10 @@ func (c *Postgresql16Controller) RestoreBackup(ctx http.Context) http.Response { "database": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$|not_in:information_schema,mysql,performance_schema,sys", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } err = c.backup.PostgresqlRestore(ctx.Request().Input("database"), ctx.Request().Input("name")) @@ -544,10 +544,10 @@ func (c *Postgresql16Controller) AddUser(ctx http.Context) http.Response { "password": "required|min_len:8|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } user := ctx.Request().Input("user") @@ -573,10 +573,10 @@ func (c *Postgresql16Controller) DeleteUser(ctx http.Context) http.Response { "user": "required|min_len:1|max_len:255|regex:^[a-zA-Z][a-zA-Z0-9_]+$", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } user := ctx.Request().Input("user") @@ -598,10 +598,10 @@ func (c *Postgresql16Controller) SetUserPassword(ctx http.Context) http.Response "password": "required|min_len:8|max_len:255", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } user := ctx.Request().Input("user") diff --git a/app/http/controllers/plugins/pureftpd/pureftpd_controller.go b/app/http/controllers/plugins/pureftpd/pureftpd_controller.go index 0efdae8e..61f0ce5f 100644 --- a/app/http/controllers/plugins/pureftpd/pureftpd_controller.go +++ b/app/http/controllers/plugins/pureftpd/pureftpd_controller.go @@ -184,10 +184,10 @@ func (c *PureFtpdController) Add(ctx http.Context) http.Response { "path": "required", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } username := ctx.Request().Input("username") @@ -198,7 +198,7 @@ func (c *PureFtpdController) Add(ctx http.Context) http.Response { path = "/" + path } if !tools.Exists(path) { - return controllers.Error(ctx, http.StatusBadRequest, "目录不存在") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "目录不存在") } tools.Chmod(path, 0755) @@ -220,10 +220,10 @@ func (c *PureFtpdController) Delete(ctx http.Context) http.Response { "username": "required", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } username := ctx.Request().Input("username") @@ -246,10 +246,10 @@ func (c *PureFtpdController) ChangePassword(ctx http.Context) http.Response { "password": "required|min_len:6", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } username := ctx.Request().Input("username") @@ -287,10 +287,10 @@ func (c *PureFtpdController) SetPort(ctx http.Context) http.Response { "port": "required", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } port := ctx.Request().Input("port") diff --git a/app/http/controllers/plugins/redis/redis_controller.go b/app/http/controllers/plugins/redis/redis_controller.go index 4951660e..b5e94be9 100644 --- a/app/http/controllers/plugins/redis/redis_controller.go +++ b/app/http/controllers/plugins/redis/redis_controller.go @@ -145,7 +145,7 @@ func (c *RedisController) SaveConfig(ctx http.Context) http.Response { config := ctx.Request().Input("config") if len(config) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "配置不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "配置不能为空") } if !tools.Write("/www/server/redis/redis.conf", config, 0644) { diff --git a/app/http/controllers/plugins/s3fs/s3fs_controller.go b/app/http/controllers/plugins/s3fs/s3fs_controller.go index c04fc4c9..bcf704a4 100644 --- a/app/http/controllers/plugins/s3fs/s3fs_controller.go +++ b/app/http/controllers/plugins/s3fs/s3fs_controller.go @@ -43,7 +43,7 @@ func (c *S3fsController) List(ctx http.Context) http.Response { var s3fsList []s3fs err := sonic.UnmarshalString(c.setting.Get("s3fs", "[]"), &s3fsList) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, "获取 S3fs 挂载失败") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "获取 S3fs 挂载失败") } startIndex := (page - 1) * limit diff --git a/app/http/controllers/plugins/supervisor/supervisor_controller.go b/app/http/controllers/plugins/supervisor/supervisor_controller.go index 5e10bfcc..70f12e8a 100644 --- a/app/http/controllers/plugins/supervisor/supervisor_controller.go +++ b/app/http/controllers/plugins/supervisor/supervisor_controller.go @@ -345,10 +345,10 @@ func (c *SupervisorController) AddProcess(ctx http.Context) http.Response { "num": "required", }) if err != nil { - return controllers.Error(ctx, http.StatusBadRequest, err.Error()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return controllers.Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return controllers.Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } name := ctx.Request().Input("name") diff --git a/app/http/controllers/plugins/toolbox/toolbox.go b/app/http/controllers/plugins/toolbox/toolbox.go index 378ff034..7d35a974 100644 --- a/app/http/controllers/plugins/toolbox/toolbox.go +++ b/app/http/controllers/plugins/toolbox/toolbox.go @@ -29,7 +29,7 @@ func (c *ToolBoxController) GetDNS(ctx http.Context) http.Response { raw := tools.Read("/etc/resolv.conf") match := regexp.MustCompile(`nameserver\s+(\S+)`).FindAllStringSubmatch(raw, -1) if len(match) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "找不到 DNS 信息") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "找不到 DNS 信息") } var dns []string @@ -51,7 +51,7 @@ func (c *ToolBoxController) SetDNS(ctx http.Context) http.Response { dns2 := ctx.Request().Input("dns2") if len(dns1) == 0 || len(dns2) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "DNS 信息不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "DNS 信息不能为空") } var dns string @@ -112,7 +112,7 @@ func (c *ToolBoxController) SetSWAP(ctx http.Context) http.Response { if size > 1 { free := tools.Exec("df -k /www | awk '{print $4}' | tail -n 1") if cast.ToInt64(free)*1024 < int64(size)*1024*1024 { - return controllers.Error(ctx, http.StatusBadRequest, "磁盘空间不足,当前剩余 "+tools.FormatBytes(cast.ToFloat64(free))) + return controllers.Error(ctx, http.StatusUnprocessableEntity, "磁盘空间不足,当前剩余 "+tools.FormatBytes(cast.ToFloat64(free))) } if strings.Contains(tools.Exec("df -T /www | awk '{print $2}' | tail -n 1"), "btrfs") { @@ -139,7 +139,7 @@ func (c *ToolBoxController) GetTimezone(ctx http.Context) http.Response { raw := tools.Exec("LC_ALL=C timedatectl | grep zone") match := regexp.MustCompile(`zone:\s+(\S+)`).FindStringSubmatch(raw) if len(match) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "找不到时区信息") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "找不到时区信息") } zonesRaw := tools.Exec("LC_ALL=C timedatectl list-timezones") @@ -160,7 +160,7 @@ func (c *ToolBoxController) SetTimezone(ctx http.Context) http.Response { timezone := ctx.Request().Input("timezone") if len(timezone) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "时区不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "时区不能为空") } tools.Exec("timedatectl set-timezone " + timezone) @@ -187,7 +187,7 @@ func (c *ToolBoxController) SetHosts(ctx http.Context) http.Response { hosts := ctx.Request().Input("hosts") if len(hosts) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "hosts 信息不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "hosts 信息不能为空") } tools.Write("/etc/hosts", hosts, 0644) @@ -204,10 +204,10 @@ func (c *ToolBoxController) SetRootPassword(ctx http.Context) http.Response { password := ctx.Request().Input("password") if len(password) == 0 { - return controllers.Error(ctx, http.StatusBadRequest, "密码不能为空") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "密码不能为空") } if !regexp.MustCompile(`^[a-zA-Z0-9·~!@#$%^&*()_+-=\[\]{};:'",./<>?]{6,20}$`).MatchString(password) { - return controllers.Error(ctx, http.StatusBadRequest, "密码必须为 6-20 位字母、数字或特殊字符") + return controllers.Error(ctx, http.StatusUnprocessableEntity, "密码必须为 6-20 位字母、数字或特殊字符") } password = strings.ReplaceAll(password, `'`, `\'`) diff --git a/app/http/controllers/safe_controller.go b/app/http/controllers/safe_controller.go index 92163c5e..9cb1416b 100644 --- a/app/http/controllers/safe_controller.go +++ b/app/http/controllers/safe_controller.go @@ -129,13 +129,13 @@ func (r *SafeController) GetFirewallRules(ctx http.Context) http.Response { // AddFirewallRule 添加防火墙规则 func (r *SafeController) AddFirewallRule(ctx http.Context) http.Response { if !r.firewallStatus() { - return Error(ctx, http.StatusBadRequest, "防火墙未启动") + return Error(ctx, http.StatusUnprocessableEntity, "防火墙未启动") } port := ctx.Request().Input("port") protocol := ctx.Request().Input("protocol") if port == "" || protocol == "" || (protocol != "tcp" && protocol != "udp") { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } // 端口有 2 种写法,一种是 80-443,一种是 80 if strings.Contains(port, "-") { @@ -143,12 +143,12 @@ func (r *SafeController) AddFirewallRule(ctx http.Context) http.Response { startPort := cast.ToInt(ports[0]) endPort := cast.ToInt(ports[1]) if startPort < 1 || startPort > 65535 || endPort < 1 || endPort > 65535 || startPort > endPort { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } } else { port := cast.ToInt(port) if port < 1 || port > 65535 { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } } @@ -172,13 +172,13 @@ func (r *SafeController) AddFirewallRule(ctx http.Context) http.Response { // DeleteFirewallRule 删除防火墙规则 func (r *SafeController) DeleteFirewallRule(ctx http.Context) http.Response { if !r.firewallStatus() { - return Error(ctx, http.StatusBadRequest, "防火墙未启动") + return Error(ctx, http.StatusUnprocessableEntity, "防火墙未启动") } port := ctx.Request().InputInt("port", 0) protocol := ctx.Request().Input("protocol", "") if port == 0 || protocol == "" { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } if tools.IsRHEL() { @@ -265,7 +265,7 @@ func (r *SafeController) GetSshPort(ctx http.Context) http.Response { func (r *SafeController) SetSshPort(ctx http.Context) http.Response { port := ctx.Request().InputInt("port", 0) if port == 0 { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } oldPort := tools.Exec("cat /etc/ssh/sshd_config | grep 'Port ' | awk '{print $2}'") diff --git a/app/http/controllers/ssh_controller.go b/app/http/controllers/ssh_controller.go index 8a46787a..3ecaecc7 100644 --- a/app/http/controllers/ssh_controller.go +++ b/app/http/controllers/ssh_controller.go @@ -56,10 +56,10 @@ func (r *SshController) UpdateInfo(ctx http.Context) http.Response { "password": "required", }) if err != nil { - return Error(ctx, http.StatusBadRequest, err.Error()) + return Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } host := ctx.Request().Input("host") diff --git a/app/http/controllers/website_controller.go b/app/http/controllers/website_controller.go index 8b2e13f8..b93bc23a 100644 --- a/app/http/controllers/website_controller.go +++ b/app/http/controllers/website_controller.go @@ -63,10 +63,10 @@ func (c *WebsiteController) Add(ctx http.Context) http.Response { "db_password": "required_if:db,true", }) if err != nil { - return Error(ctx, http.StatusBadRequest, err.Error()) + return Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } var website services.PanelWebsite @@ -150,7 +150,7 @@ func (c *WebsiteController) GetConfig(ctx http.Context) http.Response { } id := ctx.Request().InputInt("id") if id == 0 { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } config, err := c.website.GetConfig(id) @@ -188,19 +188,19 @@ func (c *WebsiteController) SaveConfig(ctx http.Context) http.Response { "ssl_certificate_key": "required_if:ssl,true", }) if err != nil { - return Error(ctx, http.StatusBadRequest, err.Error()) + return Error(ctx, http.StatusUnprocessableEntity, err.Error()) } if validator.Fails() { - return Error(ctx, http.StatusBadRequest, validator.Errors().One()) + return Error(ctx, http.StatusUnprocessableEntity, validator.Errors().One()) } var website models.Website if facades.Orm().Query().Where("id", ctx.Request().Input("id")).FirstOrFail(&website) != nil { - return Error(ctx, http.StatusBadRequest, "网站不存在") + return Error(ctx, http.StatusUnprocessableEntity, "网站不存在") } if !website.Status { - return Error(ctx, http.StatusBadRequest, "网站已停用,请先启用") + return Error(ctx, http.StatusUnprocessableEntity, "网站已停用,请先启用") } // 原文 @@ -214,7 +214,7 @@ func (c *WebsiteController) SaveConfig(ctx http.Context) http.Response { // 目录 path := ctx.Request().Input("path") if !tools.Exists(path) { - return Error(ctx, http.StatusBadRequest, "网站目录不存在") + return Error(ctx, http.StatusUnprocessableEntity, "网站目录不存在") } website.Path = path @@ -222,7 +222,7 @@ func (c *WebsiteController) SaveConfig(ctx http.Context) http.Response { domain := "server_name" domains := ctx.Request().InputArray("domains") if len(domains) == 0 { - return Error(ctx, http.StatusBadRequest, "域名不能为空") + return Error(ctx, http.StatusUnprocessableEntity, "域名不能为空") } for _, v := range domains { if v == "" { @@ -233,7 +233,7 @@ func (c *WebsiteController) SaveConfig(ctx http.Context) http.Response { domain += ";" domainConfigOld := tools.Cut(raw, "# server_name标记位开始", "# server_name标记位结束") if len(strings.TrimSpace(domainConfigOld)) == 0 { - return Error(ctx, http.StatusBadRequest, "配置文件中缺少server_name标记位") + return Error(ctx, http.StatusUnprocessableEntity, "配置文件中缺少server_name标记位") } raw = strings.Replace(raw, domainConfigOld, "\n "+domain+"\n ", -1) @@ -241,11 +241,11 @@ func (c *WebsiteController) SaveConfig(ctx http.Context) http.Response { var port strings.Builder ports := ctx.Request().InputArray("ports") if len(ports) == 0 { - return Error(ctx, http.StatusBadRequest, "端口不能为空") + return Error(ctx, http.StatusUnprocessableEntity, "端口不能为空") } for i, v := range ports { if _, err := strconv.Atoi(v); err != nil && v != "443 ssl http2" { - return Error(ctx, http.StatusBadRequest, "端口格式错误") + return Error(ctx, http.StatusUnprocessableEntity, "端口格式错误") } if v == "443" && ctx.Request().InputBool("ssl") { v = "443 ssl http2" @@ -258,18 +258,18 @@ func (c *WebsiteController) SaveConfig(ctx http.Context) http.Response { } portConfigOld := tools.Cut(raw, "# port标记位开始", "# port标记位结束") if len(strings.TrimSpace(portConfigOld)) == 0 { - return Error(ctx, http.StatusBadRequest, "配置文件中缺少port标记位") + return Error(ctx, http.StatusUnprocessableEntity, "配置文件中缺少port标记位") } raw = strings.Replace(raw, portConfigOld, "\n"+port.String()+"\n ", -1) // 运行目录 root := tools.Cut(raw, "# root标记位开始", "# root标记位结束") if len(strings.TrimSpace(root)) == 0 { - return Error(ctx, http.StatusBadRequest, "配置文件中缺少root标记位") + return Error(ctx, http.StatusUnprocessableEntity, "配置文件中缺少root标记位") } match := regexp.MustCompile(`root\s+(.+);`).FindStringSubmatch(root) if len(match) != 2 { - return Error(ctx, http.StatusBadRequest, "配置文件中root标记位格式错误") + return Error(ctx, http.StatusUnprocessableEntity, "配置文件中root标记位格式错误") } rootNew := strings.Replace(root, match[1], ctx.Request().Input("root"), -1) raw = strings.Replace(raw, root, rootNew, -1) @@ -277,11 +277,11 @@ func (c *WebsiteController) SaveConfig(ctx http.Context) http.Response { // 默认文件 index := tools.Cut(raw, "# index标记位开始", "# index标记位结束") if len(strings.TrimSpace(index)) == 0 { - return Error(ctx, http.StatusBadRequest, "配置文件中缺少index标记位") + return Error(ctx, http.StatusUnprocessableEntity, "配置文件中缺少index标记位") } match = regexp.MustCompile(`index\s+(.+);`).FindStringSubmatch(index) if len(match) != 2 { - return Error(ctx, http.StatusBadRequest, "配置文件中index标记位格式错误") + return Error(ctx, http.StatusUnprocessableEntity, "配置文件中index标记位格式错误") } indexNew := strings.Replace(index, match[1], ctx.Request().Input("index"), -1) raw = strings.Replace(raw, index, indexNew, -1) @@ -396,7 +396,7 @@ func (c *WebsiteController) ClearLog(ctx http.Context) http.Response { } id := ctx.Request().InputInt("id") if id == 0 { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } website := models.Website{} @@ -415,7 +415,7 @@ func (c *WebsiteController) ClearLog(ctx http.Context) http.Response { func (c *WebsiteController) UpdateRemark(ctx http.Context) http.Response { id := ctx.Request().InputInt("id") if id == 0 { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } website := models.Website{} @@ -450,7 +450,7 @@ func (c *WebsiteController) BackupList(ctx http.Context) http.Response { func (c *WebsiteController) CreateBackup(ctx http.Context) http.Response { id := ctx.Request().InputInt("id") if id == 0 { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } website := models.Website{} @@ -473,7 +473,7 @@ func (c *WebsiteController) CreateBackup(ctx http.Context) http.Response { func (c *WebsiteController) UploadBackup(ctx http.Context) http.Response { file, err := ctx.Request().File("file") if err != nil { - return Error(ctx, http.StatusBadRequest, "上传文件失败") + return Error(ctx, http.StatusUnprocessableEntity, "上传文件失败") } backupPath := c.setting.Get(models.SettingKeyBackupPath) + "/website" @@ -484,7 +484,7 @@ func (c *WebsiteController) UploadBackup(ctx http.Context) http.Response { name := file.GetClientOriginalName() _, err = file.StoreAs(backupPath, name) if err != nil { - return Error(ctx, http.StatusBadRequest, "上传文件失败") + return Error(ctx, http.StatusUnprocessableEntity, "上传文件失败") } return Success(ctx, "上传文件成功") @@ -494,11 +494,11 @@ func (c *WebsiteController) UploadBackup(ctx http.Context) http.Response { func (c *WebsiteController) RestoreBackup(ctx http.Context) http.Response { id := ctx.Request().InputInt("id") if id == 0 { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } fileName := ctx.Request().Input("name") if len(fileName) == 0 { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } website := models.Website{} @@ -521,7 +521,7 @@ func (c *WebsiteController) RestoreBackup(ctx http.Context) http.Response { func (c *WebsiteController) DeleteBackup(ctx http.Context) http.Response { fileName := ctx.Request().Input("name") if len(fileName) == 0 { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } backupPath := c.setting.Get(models.SettingKeyBackupPath) + "/website" @@ -544,7 +544,7 @@ func (c *WebsiteController) ResetConfig(ctx http.Context) http.Response { } id := ctx.Request().InputInt("id") if id == 0 { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } website := models.Website{} @@ -634,7 +634,7 @@ func (c *WebsiteController) Status(ctx http.Context) http.Response { } id := ctx.Request().InputInt("id") if id == 0 { - return Error(ctx, http.StatusBadRequest, "参数错误") + return Error(ctx, http.StatusUnprocessableEntity, "参数错误") } website := models.Website{} diff --git a/routes/plugin.go b/routes/plugin.go index 6a80a8c3..dd50301d 100644 --- a/routes/plugin.go +++ b/routes/plugin.go @@ -56,15 +56,15 @@ func Plugin() { route.Post("rootPassword", mysql57Controller.SetRootPassword) route.Get("databases", mysql57Controller.DatabaseList) route.Post("databases", mysql57Controller.AddDatabase) - route.Delete("databases", mysql57Controller.DeleteDatabase) + route.Delete("databases/{database}", mysql57Controller.DeleteDatabase) route.Get("backups", mysql57Controller.BackupList) route.Post("backups", mysql57Controller.CreateBackup) route.Put("backups", mysql57Controller.UploadBackup) - route.Delete("backups", mysql57Controller.DeleteBackup) + route.Delete("backups/{name}", mysql57Controller.DeleteBackup) route.Post("backups/restore", mysql57Controller.RestoreBackup) route.Get("users", mysql57Controller.UserList) route.Post("users", mysql57Controller.AddUser) - route.Delete("users", mysql57Controller.DeleteUser) + route.Delete("users/{user}", mysql57Controller.DeleteUser) route.Post("users/password", mysql57Controller.SetUserPassword) route.Post("users/privileges", mysql57Controller.SetUserPrivileges) }) @@ -86,15 +86,15 @@ func Plugin() { route.Post("rootPassword", mysql80Controller.SetRootPassword) route.Get("databases", mysql80Controller.DatabaseList) route.Post("databases", mysql80Controller.AddDatabase) - route.Delete("databases", mysql80Controller.DeleteDatabase) + route.Delete("databases/{database}", mysql80Controller.DeleteDatabase) route.Get("backups", mysql80Controller.BackupList) route.Post("backups", mysql80Controller.CreateBackup) route.Put("backups", mysql80Controller.UploadBackup) - route.Delete("backups", mysql80Controller.DeleteBackup) + route.Delete("backups/{name}", mysql80Controller.DeleteBackup) route.Post("backups/restore", mysql80Controller.RestoreBackup) route.Get("users", mysql80Controller.UserList) route.Post("users", mysql80Controller.AddUser) - route.Delete("users", mysql80Controller.DeleteUser) + route.Delete("users/{user}", mysql80Controller.DeleteUser) route.Post("users/password", mysql80Controller.SetUserPassword) route.Post("users/privileges", mysql80Controller.SetUserPrivileges) })