2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 13:47:15 +08:00

feat: 规范统一使用 422 状态码

This commit is contained in:
耗子
2023-10-29 02:59:17 +08:00
parent 08a443333f
commit fe4a6e2e78
21 changed files with 244 additions and 208 deletions

View File

@@ -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))

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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")

View File

@@ -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")

View File

@@ -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")

View File

@@ -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")

View File

@@ -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) {

View File

@@ -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

View File

@@ -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")

View File

@@ -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, `'`, `\'`)

View File

@@ -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}'")

View File

@@ -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")

View File

@@ -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{}

View File

@@ -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)
})