From 2ef7b8b3b1f7af8226381cb9dfd6f31dcae022e6 Mon Sep 17 00:00:00 2001
From: ssongliu <songlius11@163.com>
Date: Fri, 19 Jul 2024 19:04:11 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20core=20=E5=8A=9F=E8=83=BD=E4=BB=A3?=
 =?UTF-8?q?=E7=A0=81=E6=8B=86=E5=88=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 core/app/api/v1/auth.go                |   186 +
 core/app/api/v1/entry.go               |    16 +
 core/app/api/v1/helper/helper.go       |    86 +
 core/app/api/v1/logs.go                |    83 +
 core/app/api/v1/setting.go             |   344 +
 core/app/api/v1/upgrade.go             |    67 +
 core/app/dto/auth.go                   |    40 +
 core/app/dto/common_req.go             |    54 +
 core/app/dto/common_res.go             |    16 +
 core/app/dto/logs.go                   |    50 +
 core/app/dto/setting.go                |   220 +
 core/app/model/base.go                 |     9 +
 core/app/model/logs.go                 |    31 +
 core/app/model/setting.go              |     8 +
 core/app/repo/common.go                |   128 +
 core/app/repo/logs.go                  |   101 +
 core/app/repo/setting.go               |    59 +
 core/app/service/auth.go               |   196 +
 core/app/service/entry.go              |     9 +
 core/app/service/logs.go               |   128 +
 core/app/service/setting.go            |   403 +
 core/app/service/upgrade.go            |   352 +
 core/buserr/errors.go                  |    55 +
 core/buserr/multi_err.go               |    23 +
 core/cmd/server/cmd/listen-ip.go       |    60 +
 core/cmd/server/cmd/reset.go           |   102 +
 core/cmd/server/cmd/restore.go         |   122 +
 core/cmd/server/cmd/root.go            |    80 +
 core/cmd/server/cmd/update.go          |   240 +
 core/cmd/server/cmd/user-info.go       |    56 +
 core/cmd/server/cmd/version.go         |    40 +
 core/cmd/server/conf/app.yaml          |    17 +
 core/cmd/server/conf/conf.go           |     6 +
 core/cmd/server/docs/docs.go           | 23464 +++++++++++++++++++++++
 core/cmd/server/docs/swagger.go        |     6 +
 core/cmd/server/docs/swagger.json      | 23441 ++++++++++++++++++++++
 core/cmd/server/docs/swagger.yaml      | 15166 +++++++++++++++
 core/cmd/server/web/favicon.png        |   Bin 0 -> 9330 bytes
 core/cmd/server/web/web.go             |    15 +
 core/configs/config.go                 |     6 +
 core/configs/log.go                    |     9 +
 core/configs/system.go                 |    25 +
 core/constant/common.go                |    20 +
 core/constant/dir.go                   |    20 +
 core/constant/errs.go                  |   164 +
 core/constant/session.go               |    13 +
 core/constant/status.go                |     6 +
 core/global/global.go                  |    26 +
 core/go.mod                            |   105 +
 core/go.sum                            |   393 +
 core/i18n/i18n.go                      |    98 +
 core/i18n/lang/en.yaml                 |   198 +
 core/i18n/lang/zh-Hant.yaml            |   200 +
 core/i18n/lang/zh.yaml                 |   202 +
 core/init/cache/badger_db/badger_db.go |    79 +
 core/init/cache/cache.go               |    56 +
 core/init/db/db.go                     |    58 +
 core/init/hook/hook.go                 |    82 +
 core/init/log/log.go                   |    67 +
 core/init/migration/migrate.go         |    20 +
 core/init/migration/migrations/init.go |   123 +
 core/init/router/router.go             |    76 +
 core/init/session/psession/psession.go |    47 +
 core/init/session/session.go           |    11 +
 core/init/validator/validator.go       |    65 +
 core/init/viper/viper.go               |   122 +
 core/log/config.go                     |    41 +
 core/log/dup_write_darwin.go           |    20 +
 core/log/dup_write_linux.go            |    20 +
 core/log/dup_write_windows.go          |     9 +
 core/log/manager.go                    |    53 +
 core/log/writer.go                     |   250 +
 core/main.go                           |    28 +
 core/middleware/bind_domain.go         |    41 +
 core/middleware/demo_handle.go         |    57 +
 core/middleware/helper.go              |    32 +
 core/middleware/ip_limit.go            |    67 +
 core/middleware/jwt.go                 |    28 +
 core/middleware/loading.go             |    24 +
 core/middleware/operation.go           |   216 +
 core/middleware/password_expired.go    |    45 +
 core/middleware/session.go             |    38 +
 core/router/common.go                  |     9 +
 core/router/entry.go                   |     9 +
 core/router/ro_base.go                 |    22 +
 core/router/ro_log.go                  |    21 +
 core/router/ro_router.go               |     7 +
 core/router/ro_setting.go              |    42 +
 core/server/init.go                    |     6 +
 core/server/server.go                  |    88 +
 core/utils/captcha/captcha.go          |    45 +
 core/utils/cmd/cmd.go                  |    76 +
 core/utils/common/common.go            |    96 +
 core/utils/copier/copier.go            |    18 +
 core/utils/encrypt/encrypt.go          |   104 +
 core/utils/files/files.go              |   139 +
 core/utils/http/http.go                |    97 +
 core/utils/jwt/jwt.go                  |    69 +
 core/utils/mfa/mfa.go                  |    46 +
 99 files changed, 69633 insertions(+)
 create mode 100644 core/app/api/v1/auth.go
 create mode 100644 core/app/api/v1/entry.go
 create mode 100644 core/app/api/v1/helper/helper.go
 create mode 100644 core/app/api/v1/logs.go
 create mode 100644 core/app/api/v1/setting.go
 create mode 100644 core/app/api/v1/upgrade.go
 create mode 100644 core/app/dto/auth.go
 create mode 100644 core/app/dto/common_req.go
 create mode 100644 core/app/dto/common_res.go
 create mode 100644 core/app/dto/logs.go
 create mode 100644 core/app/dto/setting.go
 create mode 100644 core/app/model/base.go
 create mode 100644 core/app/model/logs.go
 create mode 100644 core/app/model/setting.go
 create mode 100644 core/app/repo/common.go
 create mode 100644 core/app/repo/logs.go
 create mode 100644 core/app/repo/setting.go
 create mode 100644 core/app/service/auth.go
 create mode 100644 core/app/service/entry.go
 create mode 100644 core/app/service/logs.go
 create mode 100644 core/app/service/setting.go
 create mode 100644 core/app/service/upgrade.go
 create mode 100644 core/buserr/errors.go
 create mode 100644 core/buserr/multi_err.go
 create mode 100644 core/cmd/server/cmd/listen-ip.go
 create mode 100644 core/cmd/server/cmd/reset.go
 create mode 100644 core/cmd/server/cmd/restore.go
 create mode 100644 core/cmd/server/cmd/root.go
 create mode 100644 core/cmd/server/cmd/update.go
 create mode 100644 core/cmd/server/cmd/user-info.go
 create mode 100644 core/cmd/server/cmd/version.go
 create mode 100644 core/cmd/server/conf/app.yaml
 create mode 100644 core/cmd/server/conf/conf.go
 create mode 100644 core/cmd/server/docs/docs.go
 create mode 100644 core/cmd/server/docs/swagger.go
 create mode 100644 core/cmd/server/docs/swagger.json
 create mode 100644 core/cmd/server/docs/swagger.yaml
 create mode 100644 core/cmd/server/web/favicon.png
 create mode 100644 core/cmd/server/web/web.go
 create mode 100644 core/configs/config.go
 create mode 100644 core/configs/log.go
 create mode 100644 core/configs/system.go
 create mode 100644 core/constant/common.go
 create mode 100644 core/constant/dir.go
 create mode 100644 core/constant/errs.go
 create mode 100644 core/constant/session.go
 create mode 100644 core/constant/status.go
 create mode 100644 core/global/global.go
 create mode 100644 core/go.mod
 create mode 100644 core/go.sum
 create mode 100644 core/i18n/i18n.go
 create mode 100644 core/i18n/lang/en.yaml
 create mode 100644 core/i18n/lang/zh-Hant.yaml
 create mode 100644 core/i18n/lang/zh.yaml
 create mode 100644 core/init/cache/badger_db/badger_db.go
 create mode 100644 core/init/cache/cache.go
 create mode 100644 core/init/db/db.go
 create mode 100644 core/init/hook/hook.go
 create mode 100644 core/init/log/log.go
 create mode 100644 core/init/migration/migrate.go
 create mode 100644 core/init/migration/migrations/init.go
 create mode 100644 core/init/router/router.go
 create mode 100644 core/init/session/psession/psession.go
 create mode 100644 core/init/session/session.go
 create mode 100644 core/init/validator/validator.go
 create mode 100644 core/init/viper/viper.go
 create mode 100644 core/log/config.go
 create mode 100644 core/log/dup_write_darwin.go
 create mode 100644 core/log/dup_write_linux.go
 create mode 100644 core/log/dup_write_windows.go
 create mode 100644 core/log/manager.go
 create mode 100644 core/log/writer.go
 create mode 100644 core/main.go
 create mode 100644 core/middleware/bind_domain.go
 create mode 100644 core/middleware/demo_handle.go
 create mode 100644 core/middleware/helper.go
 create mode 100644 core/middleware/ip_limit.go
 create mode 100644 core/middleware/jwt.go
 create mode 100644 core/middleware/loading.go
 create mode 100644 core/middleware/operation.go
 create mode 100644 core/middleware/password_expired.go
 create mode 100644 core/middleware/session.go
 create mode 100644 core/router/common.go
 create mode 100644 core/router/entry.go
 create mode 100644 core/router/ro_base.go
 create mode 100644 core/router/ro_log.go
 create mode 100644 core/router/ro_router.go
 create mode 100644 core/router/ro_setting.go
 create mode 100644 core/server/init.go
 create mode 100644 core/server/server.go
 create mode 100644 core/utils/captcha/captcha.go
 create mode 100644 core/utils/cmd/cmd.go
 create mode 100644 core/utils/common/common.go
 create mode 100644 core/utils/copier/copier.go
 create mode 100644 core/utils/encrypt/encrypt.go
 create mode 100644 core/utils/files/files.go
 create mode 100644 core/utils/http/http.go
 create mode 100644 core/utils/jwt/jwt.go
 create mode 100644 core/utils/mfa/mfa.go

diff --git a/core/app/api/v1/auth.go b/core/app/api/v1/auth.go
new file mode 100644
index 000000000..e9e7a7588
--- /dev/null
+++ b/core/app/api/v1/auth.go
@@ -0,0 +1,186 @@
+package v1
+
+import (
+	"encoding/base64"
+
+	"github.com/1Panel-dev/1Panel/core/app/api/v1/helper"
+	"github.com/1Panel-dev/1Panel/core/app/dto"
+	"github.com/1Panel-dev/1Panel/core/app/model"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/global"
+
+	// "github.com/1Panel-dev/1Panel/core/middleware"
+	"github.com/1Panel-dev/1Panel/core/utils/captcha"
+	"github.com/gin-gonic/gin"
+)
+
+type BaseApi struct{}
+
+// @Tags Auth
+// @Summary User login
+// @Description 用户登录
+// @Accept json
+// @Param EntranceCode header string true "安全入口 base64 加密串"
+// @Param request body dto.Login true "request"
+// @Success 200 {object} dto.UserLoginInfo
+// @Router /auth/login [post]
+func (b *BaseApi) Login(c *gin.Context) {
+	var req dto.Login
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	if req.AuthMethod != "jwt" && !req.IgnoreCaptcha {
+		if err := captcha.VerifyCode(req.CaptchaID, req.Captcha); err != nil {
+			helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+			return
+		}
+	}
+	entranceItem := c.Request.Header.Get("EntranceCode")
+	var entrance []byte
+	if len(entranceItem) != 0 {
+		entrance, _ = base64.StdEncoding.DecodeString(entranceItem)
+	}
+
+	user, err := authService.Login(c, req, string(entrance))
+	go saveLoginLogs(c, err)
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, user)
+}
+
+// @Tags Auth
+// @Summary User login with mfa
+// @Description 用户 mfa 登录
+// @Accept json
+// @Param request body dto.MFALogin true "request"
+// @Success 200 {object} dto.UserLoginInfo
+// @Router /auth/mfalogin [post]
+// @Header 200 {string} EntranceCode "安全入口"
+func (b *BaseApi) MFALogin(c *gin.Context) {
+	var req dto.MFALogin
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	entranceItem := c.Request.Header.Get("EntranceCode")
+	var entrance []byte
+	if len(entranceItem) != 0 {
+		entrance, _ = base64.StdEncoding.DecodeString(entranceItem)
+	}
+
+	user, err := authService.MFALogin(c, req, string(entrance))
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, user)
+}
+
+// @Tags Auth
+// @Summary User logout
+// @Description 用户登出
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /auth/logout [post]
+func (b *BaseApi) LogOut(c *gin.Context) {
+	if err := authService.LogOut(c); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, nil)
+}
+
+// @Tags Auth
+// @Summary Load captcha
+// @Description 加载验证码
+// @Success 200 {object} dto.CaptchaResponse
+// @Router /auth/captcha [get]
+func (b *BaseApi) Captcha(c *gin.Context) {
+	captcha, err := captcha.CreateCaptcha()
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, captcha)
+}
+
+// @Tags Auth
+// @Summary Load safety status
+// @Description 获取系统安全登录状态
+// @Success 200
+// @Router /auth/issafety [get]
+func (b *BaseApi) CheckIsSafety(c *gin.Context) {
+	code := c.DefaultQuery("code", "")
+	status, err := authService.CheckIsSafety(code)
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	if status == "disable" && len(code) != 0 {
+		helper.ErrorWithDetail(c, constant.CodeErrNotFound, constant.ErrTypeInternalServer, err)
+		return
+	}
+	if status == "unpass" {
+		// if middleware.Get.LoadErrCode("err-entrance") != 200 {
+		// 	helper.ErrResponse(c, middleware.LoadErrCode("err-entrance"))
+		// 	return
+		// }
+		helper.ErrorWithDetail(c, constant.CodeErrEntrance, constant.ErrTypeInternalServer, nil)
+		return
+	}
+	helper.SuccessWithOutData(c)
+}
+
+func (b *BaseApi) GetResponsePage(c *gin.Context) {
+	pageCode, err := authService.GetResponsePage()
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, pageCode)
+}
+
+// @Tags Auth
+// @Summary Check System isDemo
+// @Description 判断是否为demo环境
+// @Success 200
+// @Router /auth/demo [get]
+func (b *BaseApi) CheckIsDemo(c *gin.Context) {
+	helper.SuccessWithData(c, global.CONF.System.IsDemo)
+}
+
+// @Tags Auth
+// @Summary Load System Language
+// @Description 获取系统语言设置
+// @Success 200
+// @Router /auth/language [get]
+func (b *BaseApi) GetLanguage(c *gin.Context) {
+	settingInfo, err := settingService.GetSettingInfo()
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, settingInfo.Language)
+}
+
+func saveLoginLogs(c *gin.Context, err error) {
+	var logs model.LoginLog
+	if err != nil {
+		logs.Status = constant.StatusFailed
+		logs.Message = err.Error()
+	} else {
+		logs.Status = constant.StatusSuccess
+	}
+	logs.IP = c.ClientIP()
+	// qqWry, err := qqwry.NewQQwry()
+	// if err != nil {
+	// 	global.LOG.Errorf("load qqwry datas failed: %s", err)
+	// }
+	// res := qqWry.Find(logs.IP)
+	logs.Agent = c.GetHeader("User-Agent")
+	// logs.Address = res.Area
+	_ = logService.CreateLoginLog(logs)
+}
diff --git a/core/app/api/v1/entry.go b/core/app/api/v1/entry.go
new file mode 100644
index 000000000..f1a2c5c36
--- /dev/null
+++ b/core/app/api/v1/entry.go
@@ -0,0 +1,16 @@
+package v1
+
+import "github.com/1Panel-dev/1Panel/core/app/service"
+
+type ApiGroup struct {
+	BaseApi
+}
+
+var ApiGroupApp = new(ApiGroup)
+
+var (
+	authService    = service.NewIAuthService()
+	settingService = service.NewISettingService()
+	logService     = service.NewILogService()
+	upgradeService = service.NewIUpgradeService()
+)
diff --git a/core/app/api/v1/helper/helper.go b/core/app/api/v1/helper/helper.go
new file mode 100644
index 000000000..257c3e166
--- /dev/null
+++ b/core/app/api/v1/helper/helper.go
@@ -0,0 +1,86 @@
+package helper
+
+import (
+	"net/http"
+
+	"github.com/1Panel-dev/1Panel/core/app/dto"
+	"github.com/1Panel-dev/1Panel/core/buserr"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/i18n"
+	"github.com/gin-gonic/gin"
+	"github.com/pkg/errors"
+)
+
+func ErrorWithDetail(ctx *gin.Context, code int, msgKey string, err error) {
+	res := dto.Response{
+		Code:    code,
+		Message: "",
+	}
+	if msgKey == constant.ErrTypeInternalServer {
+		switch {
+		case errors.Is(err, constant.ErrRecordExist):
+			res.Message = i18n.GetMsgWithMap("ErrRecordExist", nil)
+		case errors.Is(constant.ErrRecordNotFound, err):
+			res.Message = i18n.GetMsgWithMap("ErrRecordNotFound", nil)
+		case errors.Is(constant.ErrInvalidParams, err):
+			res.Message = i18n.GetMsgWithMap("ErrInvalidParams", nil)
+		case errors.Is(constant.ErrStructTransform, err):
+			res.Message = i18n.GetMsgWithMap("ErrStructTransform", map[string]interface{}{"detail": err})
+		case errors.Is(constant.ErrCaptchaCode, err):
+			res.Code = constant.CodeAuth
+			res.Message = "ErrCaptchaCode"
+		case errors.Is(constant.ErrAuth, err):
+			res.Code = constant.CodeAuth
+			res.Message = "ErrAuth"
+		case errors.Is(constant.ErrInitialPassword, err):
+			res.Message = i18n.GetMsgWithMap("ErrInitialPassword", map[string]interface{}{"detail": err})
+		case errors.As(err, &buserr.BusinessError{}):
+			res.Message = err.Error()
+		default:
+			res.Message = i18n.GetMsgWithMap(msgKey, map[string]interface{}{"detail": err})
+		}
+	} else {
+		res.Message = i18n.GetMsgWithMap(msgKey, map[string]interface{}{"detail": err})
+	}
+	ctx.JSON(http.StatusOK, res)
+	ctx.Abort()
+}
+
+func SuccessWithData(ctx *gin.Context, data interface{}) {
+	if data == nil {
+		data = gin.H{}
+	}
+	res := dto.Response{
+		Code: constant.CodeSuccess,
+		Data: data,
+	}
+	ctx.JSON(http.StatusOK, res)
+	ctx.Abort()
+}
+
+func SuccessWithOutData(ctx *gin.Context) {
+	res := dto.Response{
+		Code:    constant.CodeSuccess,
+		Message: "success",
+	}
+	ctx.JSON(http.StatusOK, res)
+	ctx.Abort()
+}
+
+func CheckBindAndValidate(req interface{}, c *gin.Context) error {
+	if err := c.ShouldBindJSON(req); err != nil {
+		ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
+		return err
+	}
+	if err := global.VALID.Struct(req); err != nil {
+		ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
+		return err
+	}
+	return nil
+}
+
+func ErrResponse(ctx *gin.Context, code int) {
+	ctx.JSON(code, nil)
+	ctx.Abort()
+}
diff --git a/core/app/api/v1/logs.go b/core/app/api/v1/logs.go
new file mode 100644
index 000000000..f88da7bac
--- /dev/null
+++ b/core/app/api/v1/logs.go
@@ -0,0 +1,83 @@
+package v1
+
+import (
+	"github.com/1Panel-dev/1Panel/core/app/api/v1/helper"
+	"github.com/1Panel-dev/1Panel/core/app/dto"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/gin-gonic/gin"
+)
+
+// @Tags Logs
+// @Summary Page login logs
+// @Description 获取系统登录日志列表分页
+// @Accept json
+// @Param request body dto.SearchLgLogWithPage true "request"
+// @Success 200 {object} dto.PageResult
+// @Security ApiKeyAuth
+// @Router /logs/login [post]
+func (b *BaseApi) GetLoginLogs(c *gin.Context) {
+	var req dto.SearchLgLogWithPage
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	total, list, err := logService.PageLoginLog(req)
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+
+	helper.SuccessWithData(c, dto.PageResult{
+		Items: list,
+		Total: total,
+	})
+}
+
+// @Tags Logs
+// @Summary Page operation logs
+// @Description 获取系统操作日志列表分页
+// @Accept json
+// @Param request body dto.SearchOpLogWithPage true "request"
+// @Success 200 {object} dto.PageResult
+// @Security ApiKeyAuth
+// @Router /logs/operation [post]
+func (b *BaseApi) GetOperationLogs(c *gin.Context) {
+	var req dto.SearchOpLogWithPage
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	total, list, err := logService.PageOperationLog(req)
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+
+	helper.SuccessWithData(c, dto.PageResult{
+		Items: list,
+		Total: total,
+	})
+}
+
+// @Tags Logs
+// @Summary Clean operation logs
+// @Description 清空操作日志
+// @Accept json
+// @Param request body dto.CleanLog true "request"
+// @Success 200 {object} dto.PageResult
+// @Security ApiKeyAuth
+// @Router /logs/clean [post]
+// @x-panel-log {"bodyKeys":["logType"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"清空 [logType] 日志信息","formatEN":"Clean the [logType] log information"}
+func (b *BaseApi) CleanLogs(c *gin.Context) {
+	var req dto.CleanLog
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	if err := logService.CleanLogs(req.LogType); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+
+	helper.SuccessWithData(c, nil)
+}
diff --git a/core/app/api/v1/setting.go b/core/app/api/v1/setting.go
new file mode 100644
index 000000000..b5bf4fe6c
--- /dev/null
+++ b/core/app/api/v1/setting.go
@@ -0,0 +1,344 @@
+package v1
+
+import (
+	"encoding/base64"
+	"errors"
+	"os"
+	"path"
+
+	"github.com/1Panel-dev/1Panel/core/app/api/v1/helper"
+	"github.com/1Panel-dev/1Panel/core/app/dto"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/utils/mfa"
+	"github.com/gin-gonic/gin"
+)
+
+// @Tags System Setting
+// @Summary Load system setting info
+// @Description 加载系统配置信息
+// @Success 200 {object} dto.SettingInfo
+// @Security ApiKeyAuth
+// @Router /settings/search [post]
+func (b *BaseApi) GetSettingInfo(c *gin.Context) {
+	setting, err := settingService.GetSettingInfo()
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, setting)
+}
+
+// @Tags System Setting
+// @Summary Load system available status
+// @Description 获取系统可用状态
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/search/available [get]
+func (b *BaseApi) GetSystemAvailable(c *gin.Context) {
+	helper.SuccessWithData(c, nil)
+}
+
+// @Tags System Setting
+// @Summary Update system setting
+// @Description 更新系统配置
+// @Accept json
+// @Param request body dto.SettingUpdate true "request"
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/update [post]
+// @x-panel-log {"bodyKeys":["key","value"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"修改系统配置 [key] => [value]","formatEN":"update system setting [key] => [value]"}
+func (b *BaseApi) UpdateSetting(c *gin.Context) {
+	var req dto.SettingUpdate
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	if err := settingService.Update(req.Key, req.Value); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, nil)
+}
+
+// @Tags System Setting
+// @Summary Update proxy setting
+// @Description 服务器代理配置
+// @Accept json
+// @Param request body dto.ProxyUpdate true "request"
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/proxy/update [post]
+// @x-panel-log {"bodyKeys":["proxyUrl","proxyPort"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"服务器代理配置 [proxyPort]:[proxyPort]","formatEN":"set proxy [proxyPort]:[proxyPort]."}
+func (b *BaseApi) UpdateProxy(c *gin.Context) {
+	var req dto.ProxyUpdate
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	if len(req.ProxyPasswd) != 0 && len(req.ProxyType) != 0 {
+		pass, err := base64.StdEncoding.DecodeString(req.ProxyPasswd)
+		if err != nil {
+			helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
+			return
+		}
+		req.ProxyPasswd = string(pass)
+	}
+
+	if err := settingService.UpdateProxy(req); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, nil)
+}
+
+// @Tags System Setting
+// @Summary Update system setting
+// @Description 隐藏高级功能菜单
+// @Accept json
+// @Param request body dto.SettingUpdate true "request"
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/menu/update [post]
+// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"隐藏高级功能菜单","formatEN":"Hide advanced feature menu."}
+func (b *BaseApi) UpdateMenu(c *gin.Context) {
+	var req dto.SettingUpdate
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	if err := settingService.Update(req.Key, req.Value); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, nil)
+}
+
+// @Tags System Setting
+// @Summary Update system password
+// @Description 更新系统登录密码
+// @Accept json
+// @Param request body dto.PasswordUpdate true "request"
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/password/update [post]
+// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"修改系统密码","formatEN":"update system password"}
+func (b *BaseApi) UpdatePassword(c *gin.Context) {
+	var req dto.PasswordUpdate
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	if err := settingService.UpdatePassword(c, req.OldPassword, req.NewPassword); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, nil)
+}
+
+// @Tags System Setting
+// @Summary Update system ssl
+// @Description 修改系统 ssl 登录
+// @Accept json
+// @Param request body dto.SSLUpdate true "request"
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/ssl/update [post]
+// @x-panel-log {"bodyKeys":["ssl"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"修改系统 ssl => [ssl]","formatEN":"update system ssl => [ssl]"}
+func (b *BaseApi) UpdateSSL(c *gin.Context) {
+	var req dto.SSLUpdate
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	if err := settingService.UpdateSSL(c, req); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, nil)
+}
+
+// @Tags System Setting
+// @Summary Load system cert info
+// @Description 获取证书信息
+// @Success 200 {object} dto.SettingInfo
+// @Security ApiKeyAuth
+// @Router /settings/ssl/info [get]
+func (b *BaseApi) LoadFromCert(c *gin.Context) {
+	info, err := settingService.LoadFromCert()
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, info)
+}
+
+// @Tags System Setting
+// @Summary Download system cert
+// @Description 下载证书
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/ssl/download [post]
+func (b *BaseApi) DownloadSSL(c *gin.Context) {
+	pathItem := path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt")
+	if _, err := os.Stat(pathItem); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+
+	c.File(pathItem)
+}
+
+// @Tags System Setting
+// @Summary Load system address
+// @Description 获取系统地址信息
+// @Accept json
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/interface [get]
+func (b *BaseApi) LoadInterfaceAddr(c *gin.Context) {
+	data, err := settingService.LoadInterfaceAddr()
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, data)
+}
+
+// @Tags System Setting
+// @Summary Update system bind info
+// @Description 更新系统监听信息
+// @Accept json
+// @Param request body dto.BindInfo true "request"
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/bind/update [post]
+// @x-panel-log {"bodyKeys":["ipv6", "bindAddress"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"修改系统监听信息 => ipv6: [ipv6], 监听 IP: [bindAddress]","formatEN":"update system bind info => ipv6: [ipv6], 监听 IP: [bindAddress]"}
+func (b *BaseApi) UpdateBindInfo(c *gin.Context) {
+	var req dto.BindInfo
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	if err := settingService.UpdateBindInfo(req); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, nil)
+}
+
+// @Tags System Setting
+// @Summary Update system port
+// @Description 更新系统端口
+// @Accept json
+// @Param request body dto.PortUpdate true "request"
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/port/update [post]
+// @x-panel-log {"bodyKeys":["serverPort"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"修改系统端口 => [serverPort]","formatEN":"update system port => [serverPort]"}
+func (b *BaseApi) UpdatePort(c *gin.Context) {
+	var req dto.PortUpdate
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	if err := settingService.UpdatePort(req.ServerPort); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, nil)
+}
+
+// @Tags System Setting
+// @Summary Reset system password expired
+// @Description 重置过期系统登录密码
+// @Accept json
+// @Param request body dto.PasswordUpdate true "request"
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/expired/handle [post]
+// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"重置过期密码","formatEN":"reset an expired Password"}
+func (b *BaseApi) HandlePasswordExpired(c *gin.Context) {
+	var req dto.PasswordUpdate
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	if err := settingService.HandlePasswordExpired(c, req.OldPassword, req.NewPassword); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, nil)
+}
+
+// @Tags System Setting
+// @Summary Load local backup dir
+// @Description 获取安装根目录
+// @Success 200 {string} path
+// @Security ApiKeyAuth
+// @Router /settings/basedir [get]
+func (b *BaseApi) LoadBaseDir(c *gin.Context) {
+	helper.SuccessWithData(c, global.CONF.System.DataDir)
+}
+
+// @Tags System Setting
+// @Summary Load mfa info
+// @Description 获取 mfa 信息
+// @Accept json
+// @Param request body dto.MfaCredential true "request"
+// @Success 200 {object} mfa.Otp
+// @Security ApiKeyAuth
+// @Router /settings/mfa [post]
+func (b *BaseApi) LoadMFA(c *gin.Context) {
+	var req dto.MfaRequest
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	otp, err := mfa.GetOtp("admin", req.Title, req.Interval)
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+
+	helper.SuccessWithData(c, otp)
+}
+
+// @Tags System Setting
+// @Summary Bind mfa
+// @Description Mfa 绑定
+// @Accept json
+// @Param request body dto.MfaCredential true "request"
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/mfa/bind [post]
+// @x-panel-log {"bodyKeys":[],"paramKeys":[],"BeforeFunctions":[],"formatZH":"mfa 绑定","formatEN":"bind mfa"}
+func (b *BaseApi) MFABind(c *gin.Context) {
+	var req dto.MfaCredential
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	success := mfa.ValidCode(req.Code, req.Interval, req.Secret)
+	if !success {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, errors.New("code is not valid"))
+		return
+	}
+
+	if err := settingService.Update("MFAInterval", req.Interval); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+
+	if err := settingService.Update("MFAStatus", "enable"); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+
+	if err := settingService.Update("MFASecret", req.Secret); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+
+	helper.SuccessWithData(c, nil)
+}
diff --git a/core/app/api/v1/upgrade.go b/core/app/api/v1/upgrade.go
new file mode 100644
index 000000000..62d5fe30e
--- /dev/null
+++ b/core/app/api/v1/upgrade.go
@@ -0,0 +1,67 @@
+package v1
+
+import (
+	"github.com/1Panel-dev/1Panel/core/app/api/v1/helper"
+	"github.com/1Panel-dev/1Panel/core/app/dto"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/gin-gonic/gin"
+)
+
+// @Tags System Setting
+// @Summary Load upgrade info
+// @Description 系统更新信息
+// @Success 200 {object} dto.UpgradeInfo
+// @Security ApiKeyAuth
+// @Router /settings/upgrade [get]
+func (b *BaseApi) GetUpgradeInfo(c *gin.Context) {
+	info, err := upgradeService.SearchUpgrade()
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, info)
+}
+
+// @Tags System Setting
+// @Summary Load release notes by version
+// @Description 获取版本 release notes
+// @Accept json
+// @Param request body dto.Upgrade true "request"
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/upgrade [get]
+func (b *BaseApi) GetNotesByVersion(c *gin.Context) {
+	var req dto.Upgrade
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	notes, err := upgradeService.LoadNotes(req)
+	if err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, notes)
+}
+
+// @Tags System Setting
+// @Summary Upgrade
+// @Description 系统更新
+// @Accept json
+// @Param request body dto.Upgrade true "request"
+// @Success 200
+// @Security ApiKeyAuth
+// @Router /settings/upgrade [post]
+// @x-panel-log {"bodyKeys":["version"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"更新系统 => [version]","formatEN":"upgrade system => [version]"}
+func (b *BaseApi) Upgrade(c *gin.Context) {
+	var req dto.Upgrade
+	if err := helper.CheckBindAndValidate(&req, c); err != nil {
+		return
+	}
+
+	if err := upgradeService.Upgrade(req); err != nil {
+		helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+		return
+	}
+	helper.SuccessWithData(c, nil)
+}
diff --git a/core/app/dto/auth.go b/core/app/dto/auth.go
new file mode 100644
index 000000000..ccaa2ec12
--- /dev/null
+++ b/core/app/dto/auth.go
@@ -0,0 +1,40 @@
+package dto
+
+type CaptchaResponse struct {
+	CaptchaID string `json:"captchaID"`
+	ImagePath string `json:"imagePath"`
+}
+
+type UserLoginInfo struct {
+	Name      string `json:"name"`
+	Token     string `json:"token"`
+	MfaStatus string `json:"mfaStatus"`
+}
+
+type MfaRequest struct {
+	Title    string `json:"title" validate:"required"`
+	Interval int    `json:"interval" validate:"required"`
+}
+
+type MfaCredential struct {
+	Secret   string `json:"secret" validate:"required"`
+	Code     string `json:"code" validate:"required"`
+	Interval string `json:"interval" validate:"required"`
+}
+
+type Login struct {
+	Name          string `json:"name" validate:"required"`
+	Password      string `json:"password" validate:"required"`
+	IgnoreCaptcha bool   `json:"ignoreCaptcha"`
+	Captcha       string `json:"captcha"`
+	CaptchaID     string `json:"captchaID"`
+	AuthMethod    string `json:"authMethod" validate:"required,oneof=jwt session"`
+	Language      string `json:"language" validate:"required,oneof=zh en tw"`
+}
+
+type MFALogin struct {
+	Name       string `json:"name" validate:"required"`
+	Password   string `json:"password" validate:"required"`
+	Code       string `json:"code" validate:"required"`
+	AuthMethod string `json:"authMethod"`
+}
diff --git a/core/app/dto/common_req.go b/core/app/dto/common_req.go
new file mode 100644
index 000000000..b493fac55
--- /dev/null
+++ b/core/app/dto/common_req.go
@@ -0,0 +1,54 @@
+package dto
+
+type SearchWithPage struct {
+	PageInfo
+	Info string `json:"info"`
+}
+
+type PageInfo struct {
+	Page     int `json:"page" validate:"required,number"`
+	PageSize int `json:"pageSize" validate:"required,number"`
+}
+
+type UpdateDescription struct {
+	ID          uint   `json:"id" validate:"required"`
+	Description string `json:"description" validate:"max=256"`
+}
+
+type OperationWithName struct {
+	Name string `json:"name" validate:"required"`
+}
+
+type OperateByID struct {
+	ID uint `json:"id" validate:"required"`
+}
+
+type Operate struct {
+	Operation string `json:"operation" validate:"required"`
+}
+
+type BatchDeleteReq struct {
+	Ids []uint `json:"ids" validate:"required"`
+}
+
+type FilePath struct {
+	Path string `json:"path" validate:"required"`
+}
+
+type DeleteByName struct {
+	Name string `json:"name" validate:"required"`
+}
+
+type UpdateByFile struct {
+	File string `json:"file"`
+}
+
+type UpdateByNameAndFile struct {
+	Name string `json:"name"`
+	File string `json:"file"`
+}
+
+type OperationWithNameAndType struct {
+	Name string `json:"name"`
+	Type string `json:"type" validate:"required"`
+}
diff --git a/core/app/dto/common_res.go b/core/app/dto/common_res.go
new file mode 100644
index 000000000..5c7c11193
--- /dev/null
+++ b/core/app/dto/common_res.go
@@ -0,0 +1,16 @@
+package dto
+
+type PageResult struct {
+	Total int64       `json:"total"`
+	Items interface{} `json:"items"`
+}
+
+type Response struct {
+	Code    int         `json:"code"`
+	Message string      `json:"message"`
+	Data    interface{} `json:"data"`
+}
+
+type Options struct {
+	Option string `json:"option"`
+}
diff --git a/core/app/dto/logs.go b/core/app/dto/logs.go
new file mode 100644
index 000000000..8831801db
--- /dev/null
+++ b/core/app/dto/logs.go
@@ -0,0 +1,50 @@
+package dto
+
+import (
+	"time"
+)
+
+type OperationLog struct {
+	ID     uint   `json:"id"`
+	Source string `json:"source"`
+
+	IP        string `json:"ip"`
+	Path      string `json:"path"`
+	Method    string `json:"method"`
+	UserAgent string `json:"userAgent"`
+
+	Latency time.Duration `json:"latency"`
+	Status  string        `json:"status"`
+	Message string        `json:"message"`
+
+	DetailZH  string    `json:"detailZH"`
+	DetailEN  string    `json:"detailEN"`
+	CreatedAt time.Time `json:"createdAt"`
+}
+
+type SearchOpLogWithPage struct {
+	PageInfo
+	Source    string `json:"source"`
+	Status    string `json:"status"`
+	Operation string `json:"operation"`
+}
+
+type SearchLgLogWithPage struct {
+	PageInfo
+	IP     string `json:"ip"`
+	Status string `json:"status"`
+}
+
+type LoginLog struct {
+	ID        uint      `json:"id"`
+	IP        string    `json:"ip"`
+	Address   string    `json:"address"`
+	Agent     string    `json:"agent"`
+	Status    string    `json:"status"`
+	Message   string    `json:"message"`
+	CreatedAt time.Time `json:"createdAt"`
+}
+
+type CleanLog struct {
+	LogType string `json:"logType" validate:"required,oneof=login operation"`
+}
diff --git a/core/app/dto/setting.go b/core/app/dto/setting.go
new file mode 100644
index 000000000..29f8b24a2
--- /dev/null
+++ b/core/app/dto/setting.go
@@ -0,0 +1,220 @@
+package dto
+
+import "time"
+
+type SettingInfo struct {
+	UserName       string `json:"userName"`
+	Email          string `json:"email"`
+	SystemIP       string `json:"systemIP"`
+	SystemVersion  string `json:"systemVersion"`
+	DockerSockPath string `json:"dockerSockPath"`
+	DeveloperMode  string `json:"developerMode"`
+
+	SessionTimeout string `json:"sessionTimeout"`
+	LocalTime      string `json:"localTime"`
+	TimeZone       string `json:"timeZone"`
+	NtpSite        string `json:"ntpSite"`
+
+	Port           string `json:"port"`
+	Ipv6           string `json:"ipv6"`
+	BindAddress    string `json:"bindAddress"`
+	PanelName      string `json:"panelName"`
+	Theme          string `json:"theme"`
+	MenuTabs       string `json:"menuTabs"`
+	Language       string `json:"language"`
+	DefaultNetwork string `json:"defaultNetwork"`
+	LastCleanTime  string `json:"lastCleanTime"`
+	LastCleanSize  string `json:"lastCleanSize"`
+	LastCleanData  string `json:"lastCleanData"`
+
+	ServerPort             string `json:"serverPort"`
+	SSL                    string `json:"ssl"`
+	SSLType                string `json:"sslType"`
+	BindDomain             string `json:"bindDomain"`
+	AllowIPs               string `json:"allowIPs"`
+	SecurityEntrance       string `json:"securityEntrance"`
+	ExpirationDays         string `json:"expirationDays"`
+	ExpirationTime         string `json:"expirationTime"`
+	ComplexityVerification string `json:"complexityVerification"`
+	MFAStatus              string `json:"mfaStatus"`
+	MFASecret              string `json:"mfaSecret"`
+	MFAInterval            string `json:"mfaInterval"`
+
+	MonitorStatus    string `json:"monitorStatus"`
+	MonitorInterval  string `json:"monitorInterval"`
+	MonitorStoreDays string `json:"monitorStoreDays"`
+
+	MessageType string `json:"messageType"`
+	EmailVars   string `json:"emailVars"`
+	WeChatVars  string `json:"weChatVars"`
+	DingVars    string `json:"dingVars"`
+
+	AppStoreVersion      string `json:"appStoreVersion"`
+	AppStoreLastModified string `json:"appStoreLastModified"`
+	AppStoreSyncStatus   string `json:"appStoreSyncStatus"`
+
+	FileRecycleBin string `json:"fileRecycleBin"`
+
+	SnapshotIgnore string `json:"snapshotIgnore"`
+	XpackHideMenu  string `json:"xpackHideMenu"`
+	NoAuthSetting  string `json:"noAuthSetting"`
+
+	ProxyUrl        string `json:"proxyUrl"`
+	ProxyType       string `json:"proxyType"`
+	ProxyPort       string `json:"proxyPort"`
+	ProxyUser       string `json:"proxyUser"`
+	ProxyPasswd     string `json:"proxyPasswd"`
+	ProxyPasswdKeep string `json:"proxyPasswdKeep"`
+}
+
+type SettingUpdate struct {
+	Key   string `json:"key" validate:"required"`
+	Value string `json:"value"`
+}
+
+type SSLUpdate struct {
+	SSLType string `json:"sslType" validate:"required,oneof=self select import import-paste import-local"`
+	Domain  string `json:"domain"`
+	SSL     string `json:"ssl" validate:"required,oneof=enable disable"`
+	Cert    string `json:"cert"`
+	Key     string `json:"key"`
+	SSLID   uint   `json:"sslID"`
+}
+type SSLInfo struct {
+	Domain   string `json:"domain"`
+	Timeout  string `json:"timeout"`
+	RootPath string `json:"rootPath"`
+	Cert     string `json:"cert"`
+	Key      string `json:"key"`
+	SSLID    uint   `json:"sslID"`
+}
+
+type PasswordUpdate struct {
+	OldPassword string `json:"oldPassword" validate:"required"`
+	NewPassword string `json:"newPassword" validate:"required"`
+}
+
+type PortUpdate struct {
+	ServerPort uint `json:"serverPort" validate:"required,number,max=65535,min=1"`
+}
+
+type SnapshotStatus struct {
+	Panel      string `json:"panel"`
+	PanelInfo  string `json:"panelInfo"`
+	DaemonJson string `json:"daemonJson"`
+	AppData    string `json:"appData"`
+	PanelData  string `json:"panelData"`
+	BackupData string `json:"backupData"`
+
+	Compress string `json:"compress"`
+	Size     string `json:"size"`
+	Upload   string `json:"upload"`
+}
+
+type SnapshotCreate struct {
+	ID              uint   `json:"id"`
+	From            string `json:"from" validate:"required"`
+	DefaultDownload string `json:"defaultDownload" validate:"required"`
+	Description     string `json:"description" validate:"max=256"`
+	Secret          string `json:"secret"`
+}
+type SnapshotRecover struct {
+	IsNew      bool   `json:"isNew"`
+	ReDownload bool   `json:"reDownload"`
+	ID         uint   `json:"id" validate:"required"`
+	Secret     string `json:"secret"`
+}
+type SnapshotBatchDelete struct {
+	DeleteWithFile bool   `json:"deleteWithFile"`
+	Ids            []uint `json:"ids" validate:"required"`
+}
+type SnapshotImport struct {
+	From        string   `json:"from"`
+	Names       []string `json:"names"`
+	Description string   `json:"description" validate:"max=256"`
+}
+type SnapshotInfo struct {
+	ID              uint      `json:"id"`
+	Name            string    `json:"name"`
+	Description     string    `json:"description" validate:"max=256"`
+	From            string    `json:"from"`
+	DefaultDownload string    `json:"defaultDownload"`
+	Status          string    `json:"status"`
+	Message         string    `json:"message"`
+	CreatedAt       time.Time `json:"createdAt"`
+	Version         string    `json:"version"`
+	Size            int64     `json:"size"`
+
+	InterruptStep    string `json:"interruptStep"`
+	RecoverStatus    string `json:"recoverStatus"`
+	RecoverMessage   string `json:"recoverMessage"`
+	LastRecoveredAt  string `json:"lastRecoveredAt"`
+	RollbackStatus   string `json:"rollbackStatus"`
+	RollbackMessage  string `json:"rollbackMessage"`
+	LastRollbackedAt string `json:"lastRollbackedAt"`
+}
+
+type UpgradeInfo struct {
+	TestVersion   string `json:"testVersion"`
+	NewVersion    string `json:"newVersion"`
+	LatestVersion string `json:"latestVersion"`
+	ReleaseNote   string `json:"releaseNote"`
+}
+
+type SyncTime struct {
+	NtpSite string `json:"ntpSite" validate:"required"`
+}
+
+type BindInfo struct {
+	Ipv6        string `json:"ipv6" validate:"required,oneof=enable disable"`
+	BindAddress string `json:"bindAddress" validate:"required"`
+}
+
+type Upgrade struct {
+	Version string `json:"version" validate:"required"`
+}
+
+type ProxyUpdate struct {
+	ProxyUrl        string `json:"proxyUrl"`
+	ProxyType       string `json:"proxyType"`
+	ProxyPort       string `json:"proxyPort"`
+	ProxyUser       string `json:"proxyUser"`
+	ProxyPasswd     string `json:"proxyPasswd"`
+	ProxyPasswdKeep string `json:"proxyPasswdKeep"`
+}
+
+type CleanData struct {
+	SystemClean    []CleanTree `json:"systemClean"`
+	UploadClean    []CleanTree `json:"uploadClean"`
+	DownloadClean  []CleanTree `json:"downloadClean"`
+	SystemLogClean []CleanTree `json:"systemLogClean"`
+	ContainerClean []CleanTree `json:"containerClean"`
+}
+
+type CleanTree struct {
+	ID       string      `json:"id"`
+	Label    string      `json:"label"`
+	Children []CleanTree `json:"children"`
+
+	Type string `json:"type"`
+	Name string `json:"name"`
+
+	Size        uint64 `json:"size"`
+	IsCheck     bool   `json:"isCheck"`
+	IsRecommend bool   `json:"isRecommend"`
+}
+
+type Clean struct {
+	TreeType string `json:"treeType"`
+	Name     string `json:"name"`
+	Size     uint64 `json:"size"`
+}
+
+type XpackHideMenu struct {
+	ID       string          `json:"id"`
+	Label    string          `json:"label"`
+	IsCheck  bool            `json:"isCheck"`
+	Title    string          `json:"title"`
+	Path     string          `json:"path,omitempty"`
+	Children []XpackHideMenu `json:"children,omitempty"`
+}
diff --git a/core/app/model/base.go b/core/app/model/base.go
new file mode 100644
index 000000000..69921d41d
--- /dev/null
+++ b/core/app/model/base.go
@@ -0,0 +1,9 @@
+package model
+
+import "time"
+
+type BaseModel struct {
+	ID        uint      `gorm:"primarykey;AUTO_INCREMENT" json:"id"`
+	CreatedAt time.Time `json:"createdAt"`
+	UpdatedAt time.Time `json:"updatedAt"`
+}
diff --git a/core/app/model/logs.go b/core/app/model/logs.go
new file mode 100644
index 000000000..4018f4322
--- /dev/null
+++ b/core/app/model/logs.go
@@ -0,0 +1,31 @@
+package model
+
+import (
+	"time"
+)
+
+type OperationLog struct {
+	BaseModel
+	Source string `gorm:"type:varchar(64)" json:"source"`
+
+	IP        string `gorm:"type:varchar(64)" json:"ip"`
+	Path      string `gorm:"type:varchar(64)" json:"path"`
+	Method    string `gorm:"type:varchar(64)" json:"method"`
+	UserAgent string `gorm:"type:varchar(256)" json:"userAgent"`
+
+	Latency time.Duration `gorm:"type:varchar(64)" json:"latency"`
+	Status  string        `gorm:"type:varchar(64)" json:"status"`
+	Message string        `gorm:"type:varchar(256)" json:"message"`
+
+	DetailZH string `gorm:"type:varchar(256)" json:"detailZH"`
+	DetailEN string `gorm:"type:varchar(256)" json:"detailEN"`
+}
+
+type LoginLog struct {
+	BaseModel
+	IP      string `gorm:"type:varchar(64)" json:"ip"`
+	Address string `gorm:"type:varchar(64)" json:"address"`
+	Agent   string `gorm:"type:varchar(256)" json:"agent"`
+	Status  string `gorm:"type:varchar(64)" json:"status"`
+	Message string `gorm:"type:longText" json:"message"`
+}
diff --git a/core/app/model/setting.go b/core/app/model/setting.go
new file mode 100644
index 000000000..e9791b79b
--- /dev/null
+++ b/core/app/model/setting.go
@@ -0,0 +1,8 @@
+package model
+
+type Setting struct {
+	BaseModel
+	Key   string `json:"key" gorm:"type:varchar(256);not null;"`
+	Value string `json:"value" gorm:"type:varchar(256)"`
+	About string `json:"about" gorm:"type:longText"`
+}
diff --git a/core/app/repo/common.go b/core/app/repo/common.go
new file mode 100644
index 000000000..1cb726c2a
--- /dev/null
+++ b/core/app/repo/common.go
@@ -0,0 +1,128 @@
+package repo
+
+import (
+	"fmt"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"gorm.io/gorm"
+)
+
+type DBOption func(*gorm.DB) *gorm.DB
+
+type ICommonRepo interface {
+	WithByID(id uint) DBOption
+	WithByName(name string) DBOption
+	WithByType(tp string) DBOption
+	WithOrderBy(orderStr string) DBOption
+	WithOrderRuleBy(orderBy, order string) DBOption
+	WithByGroupID(groupID uint) DBOption
+	WithLikeName(name string) DBOption
+	WithIdsIn(ids []uint) DBOption
+	WithByDate(startTime, endTime time.Time) DBOption
+	WithByStartDate(startTime time.Time) DBOption
+	WithByStatus(status string) DBOption
+	WithByFrom(from string) DBOption
+}
+
+type CommonRepo struct{}
+
+func NewCommonRepo() ICommonRepo {
+	return &CommonRepo{}
+}
+
+func (c *CommonRepo) WithByID(id uint) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		return g.Where("id = ?", id)
+	}
+}
+
+func (c *CommonRepo) WithByName(name string) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		return g.Where("name = ?", name)
+	}
+}
+
+func (c *CommonRepo) WithByDate(startTime, endTime time.Time) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		return g.Where("start_time > ? AND start_time < ?", startTime, endTime)
+	}
+}
+
+func (c *CommonRepo) WithByStartDate(startTime time.Time) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		return g.Where("start_time < ?", startTime)
+	}
+}
+
+func (c *CommonRepo) WithByType(tp string) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		return g.Where("type = ?", tp)
+	}
+}
+
+func (c *CommonRepo) WithByGroupID(groupID uint) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		if groupID == 0 {
+			return g
+		}
+		return g.Where("group_id = ?", groupID)
+	}
+}
+
+func (c *CommonRepo) WithByStatus(status string) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		if len(status) == 0 {
+			return g
+		}
+		return g.Where("status = ?", status)
+	}
+}
+
+func (c *CommonRepo) WithByFrom(from string) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		return g.Where("`from` = ?", from)
+	}
+}
+
+func (c *CommonRepo) WithLikeName(name string) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		if len(name) == 0 {
+			return g
+		}
+		return g.Where("name like ?", "%"+name+"%")
+	}
+}
+
+func (c *CommonRepo) WithOrderBy(orderStr string) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		return g.Order(orderStr)
+	}
+}
+
+func (c *CommonRepo) WithOrderRuleBy(orderBy, order string) DBOption {
+	switch order {
+	case constant.OrderDesc:
+		order = "desc"
+	case constant.OrderAsc:
+		order = "asc"
+	default:
+		orderBy = "created_at"
+		order = "desc"
+	}
+	return func(g *gorm.DB) *gorm.DB {
+		return g.Order(fmt.Sprintf("%s %s", orderBy, order))
+	}
+}
+
+func (c *CommonRepo) WithIdsIn(ids []uint) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		return g.Where("id in (?)", ids)
+	}
+}
+
+func (c *CommonRepo) WithIdsNotIn(ids []uint) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		return g.Where("id not in (?)", ids)
+	}
+}
diff --git a/core/app/repo/logs.go b/core/app/repo/logs.go
new file mode 100644
index 000000000..6b094b9f7
--- /dev/null
+++ b/core/app/repo/logs.go
@@ -0,0 +1,101 @@
+package repo
+
+import (
+	"github.com/1Panel-dev/1Panel/core/app/model"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"gorm.io/gorm"
+)
+
+type LogRepo struct{}
+
+type ILogRepo interface {
+	CleanLogin() error
+	CreateLoginLog(user *model.LoginLog) error
+	PageLoginLog(limit, offset int, opts ...DBOption) (int64, []model.LoginLog, error)
+
+	WithByIP(ip string) DBOption
+	WithByStatus(status string) DBOption
+	WithByGroup(group string) DBOption
+	WithByLikeOperation(operation string) DBOption
+	CleanOperation() error
+	CreateOperationLog(user *model.OperationLog) error
+	PageOperationLog(limit, offset int, opts ...DBOption) (int64, []model.OperationLog, error)
+}
+
+func NewILogRepo() ILogRepo {
+	return &LogRepo{}
+}
+
+func (u *LogRepo) CleanLogin() error {
+	return global.DB.Exec("delete from login_logs;").Error
+}
+
+func (u *LogRepo) CreateLoginLog(log *model.LoginLog) error {
+	return global.DB.Create(log).Error
+}
+
+func (u *LogRepo) PageLoginLog(page, size int, opts ...DBOption) (int64, []model.LoginLog, error) {
+	var ops []model.LoginLog
+	db := global.DB.Model(&model.LoginLog{})
+	for _, opt := range opts {
+		db = opt(db)
+	}
+	count := int64(0)
+	db = db.Count(&count)
+	err := db.Limit(size).Offset(size * (page - 1)).Find(&ops).Error
+	return count, ops, err
+}
+
+func (u *LogRepo) CleanOperation() error {
+	return global.DB.Exec("delete from operation_logs").Error
+}
+
+func (u *LogRepo) CreateOperationLog(log *model.OperationLog) error {
+	return global.DB.Create(log).Error
+}
+
+func (u *LogRepo) PageOperationLog(page, size int, opts ...DBOption) (int64, []model.OperationLog, error) {
+	var ops []model.OperationLog
+	db := global.DB.Model(&model.OperationLog{})
+	for _, opt := range opts {
+		db = opt(db)
+	}
+	count := int64(0)
+	db = db.Count(&count)
+	err := db.Limit(size).Offset(size * (page - 1)).Find(&ops).Error
+	return count, ops, err
+}
+
+func (c *LogRepo) WithByStatus(status string) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		if len(status) == 0 {
+			return g
+		}
+		return g.Where("status = ?", status)
+	}
+}
+func (c *LogRepo) WithByGroup(group string) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		if len(group) == 0 {
+			return g
+		}
+		return g.Where("source = ?", group)
+	}
+}
+func (c *LogRepo) WithByIP(ip string) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		if len(ip) == 0 {
+			return g
+		}
+		return g.Where("ip LIKE ?", "%"+ip+"%")
+	}
+}
+func (c *LogRepo) WithByLikeOperation(operation string) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		if len(operation) == 0 {
+			return g
+		}
+		infoStr := "%" + operation + "%"
+		return g.Where("detail_zh LIKE ? OR detail_en LIKE ?", infoStr, infoStr)
+	}
+}
diff --git a/core/app/repo/setting.go b/core/app/repo/setting.go
new file mode 100644
index 000000000..4e8358b10
--- /dev/null
+++ b/core/app/repo/setting.go
@@ -0,0 +1,59 @@
+package repo
+
+import (
+	"github.com/1Panel-dev/1Panel/core/app/model"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"gorm.io/gorm"
+)
+
+type SettingRepo struct{}
+
+type ISettingRepo interface {
+	GetList(opts ...DBOption) ([]model.Setting, error)
+	Get(opts ...DBOption) (model.Setting, error)
+	Create(key, value string) error
+	Update(key, value string) error
+	WithByKey(key string) DBOption
+}
+
+func NewISettingRepo() ISettingRepo {
+	return &SettingRepo{}
+}
+
+func (u *SettingRepo) GetList(opts ...DBOption) ([]model.Setting, error) {
+	var settings []model.Setting
+	db := global.DB.Model(&model.Setting{})
+	for _, opt := range opts {
+		db = opt(db)
+	}
+	err := db.Find(&settings).Error
+	return settings, err
+}
+
+func (u *SettingRepo) Create(key, value string) error {
+	setting := &model.Setting{
+		Key:   key,
+		Value: value,
+	}
+	return global.DB.Create(setting).Error
+}
+
+func (u *SettingRepo) Get(opts ...DBOption) (model.Setting, error) {
+	var settings model.Setting
+	db := global.DB.Model(&model.Setting{})
+	for _, opt := range opts {
+		db = opt(db)
+	}
+	err := db.First(&settings).Error
+	return settings, err
+}
+
+func (c *SettingRepo) WithByKey(key string) DBOption {
+	return func(g *gorm.DB) *gorm.DB {
+		return g.Where("key = ?", key)
+	}
+}
+
+func (u *SettingRepo) Update(key, value string) error {
+	return global.DB.Model(&model.Setting{}).Where("key = ?", key).Updates(map[string]interface{}{"value": value}).Error
+}
diff --git a/core/app/service/auth.go b/core/app/service/auth.go
new file mode 100644
index 000000000..e8ae8b9d6
--- /dev/null
+++ b/core/app/service/auth.go
@@ -0,0 +1,196 @@
+package service
+
+import (
+	"crypto/hmac"
+	"strconv"
+
+	"github.com/1Panel-dev/1Panel/core/app/dto"
+	"github.com/1Panel-dev/1Panel/core/buserr"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/utils/encrypt"
+	"github.com/1Panel-dev/1Panel/core/utils/jwt"
+	"github.com/1Panel-dev/1Panel/core/utils/mfa"
+	"github.com/gin-gonic/gin"
+	"github.com/google/uuid"
+	"github.com/pkg/errors"
+)
+
+type AuthService struct{}
+
+type IAuthService interface {
+	CheckIsSafety(code string) (string, error)
+	GetResponsePage() (string, error)
+	VerifyCode(code string) (bool, error)
+	Login(c *gin.Context, info dto.Login, entrance string) (*dto.UserLoginInfo, error)
+	LogOut(c *gin.Context) error
+	MFALogin(c *gin.Context, info dto.MFALogin, entrance string) (*dto.UserLoginInfo, error)
+}
+
+func NewIAuthService() IAuthService {
+	return &AuthService{}
+}
+
+func (u *AuthService) Login(c *gin.Context, info dto.Login, entrance string) (*dto.UserLoginInfo, error) {
+	nameSetting, err := settingRepo.Get(settingRepo.WithByKey("UserName"))
+	if err != nil {
+		return nil, errors.WithMessage(constant.ErrRecordNotFound, err.Error())
+	}
+	passwordSetting, err := settingRepo.Get(settingRepo.WithByKey("Password"))
+	if err != nil {
+		return nil, errors.WithMessage(constant.ErrRecordNotFound, err.Error())
+	}
+	pass, err := encrypt.StringDecrypt(passwordSetting.Value)
+	if err != nil {
+		return nil, constant.ErrAuth
+	}
+	if !hmac.Equal([]byte(info.Password), []byte(pass)) || nameSetting.Value != info.Name {
+		return nil, constant.ErrAuth
+	}
+	entranceSetting, err := settingRepo.Get(settingRepo.WithByKey("SecurityEntrance"))
+	if err != nil {
+		return nil, err
+	}
+	if len(entranceSetting.Value) != 0 && entranceSetting.Value != entrance {
+		return nil, buserr.New(constant.ErrEntrance)
+	}
+	mfa, err := settingRepo.Get(settingRepo.WithByKey("MFAStatus"))
+	if err != nil {
+		return nil, err
+	}
+	if err = settingRepo.Update("Language", info.Language); err != nil {
+		return nil, err
+	}
+	if mfa.Value == "enable" {
+		return &dto.UserLoginInfo{Name: nameSetting.Value, MfaStatus: mfa.Value}, nil
+	}
+	return u.generateSession(c, info.Name, info.AuthMethod)
+}
+
+func (u *AuthService) MFALogin(c *gin.Context, info dto.MFALogin, entrance string) (*dto.UserLoginInfo, error) {
+	nameSetting, err := settingRepo.Get(settingRepo.WithByKey("UserName"))
+	if err != nil {
+		return nil, errors.WithMessage(constant.ErrRecordNotFound, err.Error())
+	}
+	passwordSetting, err := settingRepo.Get(settingRepo.WithByKey("Password"))
+	if err != nil {
+		return nil, errors.WithMessage(constant.ErrRecordNotFound, err.Error())
+	}
+	pass, err := encrypt.StringDecrypt(passwordSetting.Value)
+	if err != nil {
+		return nil, err
+	}
+	if !hmac.Equal([]byte(info.Password), []byte(pass)) || nameSetting.Value != info.Name {
+		return nil, constant.ErrAuth
+	}
+	entranceSetting, err := settingRepo.Get(settingRepo.WithByKey("SecurityEntrance"))
+	if err != nil {
+		return nil, err
+	}
+	if len(entranceSetting.Value) != 0 && entranceSetting.Value != entrance {
+		return nil, buserr.New(constant.ErrEntrance)
+	}
+	mfaSecret, err := settingRepo.Get(settingRepo.WithByKey("MFASecret"))
+	if err != nil {
+		return nil, err
+	}
+	mfaInterval, err := settingRepo.Get(settingRepo.WithByKey("MFAInterval"))
+	if err != nil {
+		return nil, err
+	}
+	success := mfa.ValidCode(info.Code, mfaInterval.Value, mfaSecret.Value)
+	if !success {
+		return nil, constant.ErrAuth
+	}
+
+	return u.generateSession(c, info.Name, info.AuthMethod)
+}
+
+func (u *AuthService) generateSession(c *gin.Context, name, authMethod string) (*dto.UserLoginInfo, error) {
+	setting, err := settingRepo.Get(settingRepo.WithByKey("SessionTimeout"))
+	if err != nil {
+		return nil, err
+	}
+	httpsSetting, err := settingRepo.Get(settingRepo.WithByKey("SSL"))
+	if err != nil {
+		return nil, err
+	}
+	lifeTime, err := strconv.Atoi(setting.Value)
+	if err != nil {
+		return nil, err
+	}
+
+	if authMethod == constant.AuthMethodJWT {
+		j := jwt.NewJWT()
+		claims := j.CreateClaims(jwt.BaseClaims{
+			Name: name,
+		})
+		token, err := j.CreateToken(claims)
+		if err != nil {
+			return nil, err
+		}
+		return &dto.UserLoginInfo{Name: name, Token: token}, nil
+	}
+	sID, _ := c.Cookie(constant.SessionName)
+	sessionUser, err := global.SESSION.Get(sID)
+	if err != nil {
+		sID = uuid.New().String()
+		c.SetCookie(constant.SessionName, sID, 0, "", "", httpsSetting.Value == "enable", true)
+		err := global.SESSION.Set(sID, sessionUser, lifeTime)
+		if err != nil {
+			return nil, err
+		}
+		return &dto.UserLoginInfo{Name: name}, nil
+	}
+	if err := global.SESSION.Set(sID, sessionUser, lifeTime); err != nil {
+		return nil, err
+	}
+
+	return &dto.UserLoginInfo{Name: name}, nil
+}
+
+func (u *AuthService) LogOut(c *gin.Context) error {
+	httpsSetting, err := settingRepo.Get(settingRepo.WithByKey("SSL"))
+	if err != nil {
+		return err
+	}
+	sID, _ := c.Cookie(constant.SessionName)
+	if sID != "" {
+		c.SetCookie(constant.SessionName, sID, -1, "", "", httpsSetting.Value == "enable", true)
+		err := global.SESSION.Delete(sID)
+		if err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
+func (u *AuthService) VerifyCode(code string) (bool, error) {
+	setting, err := settingRepo.Get(settingRepo.WithByKey("SecurityEntrance"))
+	if err != nil {
+		return false, err
+	}
+	return hmac.Equal([]byte(setting.Value), []byte(code)), nil
+}
+
+func (u *AuthService) CheckIsSafety(code string) (string, error) {
+	status, err := settingRepo.Get(settingRepo.WithByKey("SecurityEntrance"))
+	if err != nil {
+		return "", err
+	}
+	if len(status.Value) == 0 {
+		return "disable", nil
+	}
+	if status.Value == code {
+		return "pass", nil
+	}
+	return "unpass", nil
+}
+
+func (u *AuthService) GetResponsePage() (string, error) {
+	pageCode, err := settingRepo.Get(settingRepo.WithByKey("NoAuthSetting"))
+	if err != nil {
+		return "", err
+	}
+	return pageCode.Value, nil
+}
diff --git a/core/app/service/entry.go b/core/app/service/entry.go
new file mode 100644
index 000000000..f4987166d
--- /dev/null
+++ b/core/app/service/entry.go
@@ -0,0 +1,9 @@
+package service
+
+import "github.com/1Panel-dev/1Panel/core/app/repo"
+
+var (
+	commonRepo  = repo.NewCommonRepo()
+	settingRepo = repo.NewISettingRepo()
+	logRepo     = repo.NewILogRepo()
+)
diff --git a/core/app/service/logs.go b/core/app/service/logs.go
new file mode 100644
index 000000000..ffafb46e2
--- /dev/null
+++ b/core/app/service/logs.go
@@ -0,0 +1,128 @@
+package service
+
+import (
+	"os"
+	"path"
+	"path/filepath"
+	"sort"
+	"strings"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/app/dto"
+	"github.com/1Panel-dev/1Panel/core/app/model"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/utils/cmd"
+	"github.com/jinzhu/copier"
+	"github.com/pkg/errors"
+)
+
+type LogService struct{}
+
+const logs = "https://resource.fit2cloud.com/installation-log.sh"
+
+type ILogService interface {
+	ListSystemLogFile() ([]string, error)
+	CreateLoginLog(operation model.LoginLog) error
+	PageLoginLog(search dto.SearchLgLogWithPage) (int64, interface{}, error)
+
+	CreateOperationLog(operation model.OperationLog) error
+	PageOperationLog(search dto.SearchOpLogWithPage) (int64, interface{}, error)
+
+	CleanLogs(logtype string) error
+}
+
+func NewILogService() ILogService {
+	return &LogService{}
+}
+
+func (u *LogService) CreateLoginLog(operation model.LoginLog) error {
+	return logRepo.CreateLoginLog(&operation)
+}
+
+func (u *LogService) ListSystemLogFile() ([]string, error) {
+	logDir := path.Join(global.CONF.System.BaseDir, "1panel/log")
+	var files []string
+	if err := filepath.Walk(logDir, func(pathItem string, info os.FileInfo, err error) error {
+		if err != nil {
+			return err
+		}
+		if !info.IsDir() && strings.HasPrefix(info.Name(), "1Panel") {
+			if info.Name() == "1Panel.log" {
+				files = append(files, time.Now().Format("2006-01-02"))
+				return nil
+			}
+			itemFileName := strings.TrimPrefix(info.Name(), "1Panel-")
+			itemFileName = strings.TrimSuffix(itemFileName, ".gz")
+			itemFileName = strings.TrimSuffix(itemFileName, ".log")
+			files = append(files, itemFileName)
+			return nil
+		}
+		return nil
+	}); err != nil {
+		return nil, err
+	}
+
+	if len(files) < 2 {
+		return files, nil
+	}
+	sort.Slice(files, func(i, j int) bool {
+		return files[i] > files[j]
+	})
+
+	return files, nil
+}
+
+func (u *LogService) PageLoginLog(req dto.SearchLgLogWithPage) (int64, interface{}, error) {
+	total, ops, err := logRepo.PageLoginLog(
+		req.Page,
+		req.PageSize,
+		logRepo.WithByIP(req.IP),
+		logRepo.WithByStatus(req.Status),
+		commonRepo.WithOrderBy("created_at desc"),
+	)
+	var dtoOps []dto.LoginLog
+	for _, op := range ops {
+		var item dto.LoginLog
+		if err := copier.Copy(&item, &op); err != nil {
+			return 0, nil, errors.WithMessage(constant.ErrStructTransform, err.Error())
+		}
+		dtoOps = append(dtoOps, item)
+	}
+	return total, dtoOps, err
+}
+
+func (u *LogService) CreateOperationLog(operation model.OperationLog) error {
+	return logRepo.CreateOperationLog(&operation)
+}
+
+func (u *LogService) PageOperationLog(req dto.SearchOpLogWithPage) (int64, interface{}, error) {
+	total, ops, err := logRepo.PageOperationLog(
+		req.Page,
+		req.PageSize,
+		logRepo.WithByGroup(req.Source),
+		logRepo.WithByLikeOperation(req.Operation),
+		logRepo.WithByStatus(req.Status),
+		commonRepo.WithOrderBy("created_at desc"),
+	)
+	var dtoOps []dto.OperationLog
+	for _, op := range ops {
+		var item dto.OperationLog
+		if err := copier.Copy(&item, &op); err != nil {
+			return 0, nil, errors.WithMessage(constant.ErrStructTransform, err.Error())
+		}
+		dtoOps = append(dtoOps, item)
+	}
+	return total, dtoOps, err
+}
+
+func (u *LogService) CleanLogs(logtype string) error {
+	if logtype == "operation" {
+		return logRepo.CleanOperation()
+	}
+	return logRepo.CleanLogin()
+}
+
+func writeLogs(version string) {
+	_, _ = cmd.Execf("curl -sfL %s | sh -s 1p upgrade %s", logs, version)
+}
diff --git a/core/app/service/setting.go b/core/app/service/setting.go
new file mode 100644
index 000000000..9115efd1d
--- /dev/null
+++ b/core/app/service/setting.go
@@ -0,0 +1,403 @@
+package service
+
+import (
+	"crypto/tls"
+	"crypto/x509"
+	"encoding/json"
+	"encoding/pem"
+	"fmt"
+	"net"
+	"os"
+	"path"
+	"strconv"
+	"strings"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/app/dto"
+	"github.com/1Panel-dev/1Panel/core/buserr"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/utils/cmd"
+	"github.com/1Panel-dev/1Panel/core/utils/common"
+	"github.com/1Panel-dev/1Panel/core/utils/encrypt"
+	"github.com/gin-gonic/gin"
+)
+
+type SettingService struct{}
+
+type ISettingService interface {
+	GetSettingInfo() (*dto.SettingInfo, error)
+	LoadInterfaceAddr() ([]string, error)
+	Update(key, value string) error
+	UpdateProxy(req dto.ProxyUpdate) error
+	UpdatePassword(c *gin.Context, old, new string) error
+	UpdatePort(port uint) error
+	UpdateBindInfo(req dto.BindInfo) error
+	UpdateSSL(c *gin.Context, req dto.SSLUpdate) error
+	LoadFromCert() (*dto.SSLInfo, error)
+	HandlePasswordExpired(c *gin.Context, old, new string) error
+}
+
+func NewISettingService() ISettingService {
+	return &SettingService{}
+}
+
+func (u *SettingService) GetSettingInfo() (*dto.SettingInfo, error) {
+	setting, err := settingRepo.GetList()
+	if err != nil {
+		return nil, constant.ErrRecordNotFound
+	}
+	settingMap := make(map[string]string)
+	for _, set := range setting {
+		settingMap[set.Key] = set.Value
+	}
+	var info dto.SettingInfo
+	arr, err := json.Marshal(settingMap)
+	if err != nil {
+		return nil, err
+	}
+	if err := json.Unmarshal(arr, &info); err != nil {
+		return nil, err
+	}
+	if info.ProxyPasswdKeep != constant.StatusEnable {
+		info.ProxyPasswd = ""
+	} else {
+		info.ProxyPasswd, _ = encrypt.StringDecrypt(info.ProxyPasswd)
+	}
+
+	info.LocalTime = time.Now().Format("2006-01-02 15:04:05 MST -0700")
+	return &info, err
+}
+
+func (u *SettingService) Update(key, value string) error {
+	switch key {
+	case "AppStoreLastModified":
+		exist, _ := settingRepo.Get(settingRepo.WithByKey("AppStoreLastModified"))
+		if exist.ID == 0 {
+			_ = settingRepo.Create("AppStoreLastModified", value)
+			return nil
+		}
+	}
+
+	if err := settingRepo.Update(key, value); err != nil {
+		return err
+	}
+
+	switch key {
+	case "ExpirationDays":
+		timeout, err := strconv.Atoi(value)
+		if err != nil {
+			return err
+		}
+		if err := settingRepo.Update("ExpirationTime", time.Now().AddDate(0, 0, timeout).Format(constant.DateTimeLayout)); err != nil {
+			return err
+		}
+	case "BindDomain":
+		if len(value) != 0 {
+			_ = global.SESSION.Clean()
+		}
+	case "UserName", "Password":
+		_ = global.SESSION.Clean()
+
+	}
+
+	return nil
+}
+
+func (u *SettingService) LoadInterfaceAddr() ([]string, error) {
+	addrMap := make(map[string]struct{})
+	addrs, err := net.InterfaceAddrs()
+	if err != nil {
+		return nil, err
+	}
+	for _, addr := range addrs {
+		ipNet, ok := addr.(*net.IPNet)
+		if ok && ipNet.IP.To16() != nil {
+			addrMap[ipNet.IP.String()] = struct{}{}
+		}
+	}
+	var data []string
+	for key := range addrMap {
+		data = append(data, key)
+	}
+	return data, nil
+}
+
+func (u *SettingService) UpdateBindInfo(req dto.BindInfo) error {
+	if err := settingRepo.Update("Ipv6", req.Ipv6); err != nil {
+		return err
+	}
+	if err := settingRepo.Update("BindAddress", req.BindAddress); err != nil {
+		return err
+	}
+	go func() {
+		time.Sleep(1 * time.Second)
+		_, err := cmd.Exec("systemctl restart 1panel.service")
+		if err != nil {
+			global.LOG.Errorf("restart system with new bind info failed, err: %v", err)
+		}
+	}()
+	return nil
+}
+
+func (u *SettingService) UpdateProxy(req dto.ProxyUpdate) error {
+	if err := settingRepo.Update("ProxyUrl", req.ProxyUrl); err != nil {
+		return err
+	}
+	if err := settingRepo.Update("ProxyType", req.ProxyType); err != nil {
+		return err
+	}
+	if err := settingRepo.Update("ProxyPort", req.ProxyPort); err != nil {
+		return err
+	}
+	if err := settingRepo.Update("ProxyUser", req.ProxyUser); err != nil {
+		return err
+	}
+	pass, _ := encrypt.StringEncrypt(req.ProxyPasswd)
+	if err := settingRepo.Update("ProxyPasswd", pass); err != nil {
+		return err
+	}
+	if err := settingRepo.Update("ProxyPasswdKeep", req.ProxyPasswdKeep); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (u *SettingService) UpdatePort(port uint) error {
+	if common.ScanPort(int(port)) {
+		return buserr.WithDetail(constant.ErrPortInUsed, port, nil)
+	}
+	// TODO 修改防火墙端口
+
+	if err := settingRepo.Update("ServerPort", strconv.Itoa(int(port))); err != nil {
+		return err
+	}
+	go func() {
+		time.Sleep(1 * time.Second)
+		_, err := cmd.Exec("systemctl restart 1panel.service")
+		if err != nil {
+			global.LOG.Errorf("restart system port failed, err: %v", err)
+		}
+	}()
+	return nil
+}
+
+func (u *SettingService) UpdateSSL(c *gin.Context, req dto.SSLUpdate) error {
+	secretDir := path.Join(global.CONF.System.BaseDir, "1panel/secret")
+	if req.SSL == "disable" {
+		if err := settingRepo.Update("SSL", "disable"); err != nil {
+			return err
+		}
+		if err := settingRepo.Update("SSLType", "self"); err != nil {
+			return err
+		}
+		_ = os.Remove(path.Join(secretDir, "server.crt"))
+		_ = os.Remove(path.Join(secretDir, "server.key"))
+		sID, _ := c.Cookie(constant.SessionName)
+		c.SetCookie(constant.SessionName, sID, 0, "", "", false, true)
+
+		go func() {
+			_, err := cmd.Exec("systemctl restart 1panel.service")
+			if err != nil {
+				global.LOG.Errorf("restart system failed, err: %v", err)
+			}
+		}()
+		return nil
+	}
+	if _, err := os.Stat(secretDir); err != nil && os.IsNotExist(err) {
+		if err = os.MkdirAll(secretDir, os.ModePerm); err != nil {
+			return err
+		}
+	}
+	if err := settingRepo.Update("SSLType", req.SSLType); err != nil {
+		return err
+	}
+	var (
+		secret string
+		key    string
+	)
+
+	switch req.SSLType {
+	case "import-paste":
+		secret = req.Cert
+		key = req.Key
+	case "import-local":
+		keyFile, err := os.ReadFile(req.Key)
+		if err != nil {
+			return err
+		}
+		key = string(keyFile)
+		certFile, err := os.ReadFile(req.Cert)
+		if err != nil {
+			return err
+		}
+		secret = string(certFile)
+	}
+
+	if err := os.WriteFile(path.Join(secretDir, "server.crt.tmp"), []byte(secret), 0600); err != nil {
+		return err
+	}
+	if err := os.WriteFile(path.Join(secretDir, "server.key.tmp"), []byte(key), 0600); err != nil {
+		return err
+	}
+	if err := checkCertValid(); err != nil {
+		return err
+	}
+	if err := os.Rename(path.Join(secretDir, "server.crt.tmp"), path.Join(secretDir, "server.crt")); err != nil {
+		return err
+	}
+	if err := os.Rename(path.Join(secretDir, "server.key.tmp"), path.Join(secretDir, "server.key")); err != nil {
+		return err
+	}
+	if err := settingRepo.Update("SSL", req.SSL); err != nil {
+		return err
+	}
+
+	sID, _ := c.Cookie(constant.SessionName)
+	c.SetCookie(constant.SessionName, sID, 0, "", "", true, true)
+	go func() {
+		time.Sleep(1 * time.Second)
+		_, err := cmd.Exec("systemctl restart 1panel.service")
+		if err != nil {
+			global.LOG.Errorf("restart system failed, err: %v", err)
+		}
+	}()
+	return nil
+}
+
+func (u *SettingService) LoadFromCert() (*dto.SSLInfo, error) {
+	ssl, err := settingRepo.Get(settingRepo.WithByKey("SSL"))
+	if err != nil {
+		return nil, err
+	}
+	if ssl.Value == "disable" {
+		return &dto.SSLInfo{}, nil
+	}
+	sslType, err := settingRepo.Get(settingRepo.WithByKey("SSLType"))
+	if err != nil {
+		return nil, err
+	}
+	var data dto.SSLInfo
+	switch sslType.Value {
+	case "self":
+		data, err = loadInfoFromCert()
+		if err != nil {
+			return nil, err
+		}
+	case "import":
+		data, err = loadInfoFromCert()
+		if err != nil {
+			return nil, err
+		}
+		if _, err := os.Stat(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt")); err != nil {
+			return nil, fmt.Errorf("load server.crt file failed, err: %v", err)
+		}
+		certFile, _ := os.ReadFile(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt"))
+		data.Cert = string(certFile)
+
+		if _, err := os.Stat(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.key")); err != nil {
+			return nil, fmt.Errorf("load server.key file failed, err: %v", err)
+		}
+		keyFile, _ := os.ReadFile(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.key"))
+		data.Key = string(keyFile)
+	case "select":
+		// TODO select ssl from website
+	}
+	return &data, nil
+}
+
+func (u *SettingService) HandlePasswordExpired(c *gin.Context, old, new string) error {
+	setting, err := settingRepo.Get(settingRepo.WithByKey("Password"))
+	if err != nil {
+		return err
+	}
+	passwordFromDB, err := encrypt.StringDecrypt(setting.Value)
+	if err != nil {
+		return err
+	}
+	if passwordFromDB == old {
+		newPassword, err := encrypt.StringEncrypt(new)
+		if err != nil {
+			return err
+		}
+		if err := settingRepo.Update("Password", newPassword); err != nil {
+			return err
+		}
+
+		expiredSetting, err := settingRepo.Get(settingRepo.WithByKey("ExpirationDays"))
+		if err != nil {
+			return err
+		}
+		timeout, _ := strconv.Atoi(expiredSetting.Value)
+		if err := settingRepo.Update("ExpirationTime", time.Now().AddDate(0, 0, timeout).Format(constant.DateTimeLayout)); err != nil {
+			return err
+		}
+		return nil
+	}
+	return constant.ErrInitialPassword
+}
+
+func (u *SettingService) UpdatePassword(c *gin.Context, old, new string) error {
+	if err := u.HandlePasswordExpired(c, old, new); err != nil {
+		return err
+	}
+	_ = global.SESSION.Clean()
+	return nil
+}
+
+func loadInfoFromCert() (dto.SSLInfo, error) {
+	var info dto.SSLInfo
+	certFile := path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt")
+	if _, err := os.Stat(certFile); err != nil {
+		return info, err
+	}
+	certData, err := os.ReadFile(certFile)
+	if err != nil {
+		return info, err
+	}
+	certBlock, _ := pem.Decode(certData)
+	if certBlock == nil {
+		return info, err
+	}
+	certObj, err := x509.ParseCertificate(certBlock.Bytes)
+	if err != nil {
+		return info, err
+	}
+	var domains []string
+	if len(certObj.IPAddresses) != 0 {
+		for _, ip := range certObj.IPAddresses {
+			domains = append(domains, ip.String())
+		}
+	}
+	if len(certObj.DNSNames) != 0 {
+		domains = append(domains, certObj.DNSNames...)
+	}
+	return dto.SSLInfo{
+		Domain:   strings.Join(domains, ","),
+		Timeout:  certObj.NotAfter.Format(constant.DateTimeLayout),
+		RootPath: path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt"),
+	}, nil
+}
+
+func checkCertValid() error {
+	certificate, err := os.ReadFile(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt.tmp"))
+	if err != nil {
+		return err
+	}
+	key, err := os.ReadFile(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.key.tmp"))
+	if err != nil {
+		return err
+	}
+	if _, err = tls.X509KeyPair(certificate, key); err != nil {
+		return err
+	}
+	certBlock, _ := pem.Decode(certificate)
+	if certBlock == nil {
+		return err
+	}
+	if _, err := x509.ParseCertificate(certBlock.Bytes); err != nil {
+		return err
+	}
+
+	return nil
+}
diff --git a/core/app/service/upgrade.go b/core/app/service/upgrade.go
new file mode 100644
index 000000000..3e9e5b8c2
--- /dev/null
+++ b/core/app/service/upgrade.go
@@ -0,0 +1,352 @@
+package service
+
+import (
+	"encoding/json"
+	"fmt"
+	"net/http"
+	"os"
+	"path"
+	"strconv"
+	"strings"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/app/dto"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/utils/cmd"
+	"github.com/1Panel-dev/1Panel/core/utils/common"
+	"github.com/1Panel-dev/1Panel/core/utils/files"
+	httpUtil "github.com/1Panel-dev/1Panel/core/utils/http"
+)
+
+type UpgradeService struct{}
+
+type IUpgradeService interface {
+	Upgrade(req dto.Upgrade) error
+	LoadNotes(req dto.Upgrade) (string, error)
+	SearchUpgrade() (*dto.UpgradeInfo, error)
+}
+
+func NewIUpgradeService() IUpgradeService {
+	return &UpgradeService{}
+}
+
+func (u *UpgradeService) SearchUpgrade() (*dto.UpgradeInfo, error) {
+	var upgrade dto.UpgradeInfo
+	currentVersion, err := settingRepo.Get(settingRepo.WithByKey("SystemVersion"))
+	if err != nil {
+		return nil, err
+	}
+	DeveloperMode, err := settingRepo.Get(settingRepo.WithByKey("DeveloperMode"))
+	if err != nil {
+		return nil, err
+	}
+
+	upgrade.TestVersion, upgrade.NewVersion, upgrade.LatestVersion = u.loadVersionByMode(DeveloperMode.Value, currentVersion.Value)
+	var itemVersion string
+	if len(upgrade.LatestVersion) != 0 {
+		itemVersion = upgrade.LatestVersion
+	}
+	if len(upgrade.NewVersion) != 0 {
+		itemVersion = upgrade.NewVersion
+	}
+	if (global.CONF.System.Mode == "dev" || DeveloperMode.Value == "enable") && len(upgrade.TestVersion) != 0 {
+		itemVersion = upgrade.TestVersion
+	}
+	if len(itemVersion) == 0 {
+		return &upgrade, nil
+	}
+	mode := global.CONF.System.Mode
+	if strings.Contains(itemVersion, "beta") {
+		mode = "beta"
+	}
+	notes, err := u.loadReleaseNotes(fmt.Sprintf("%s/%s/%s/release/1panel-%s-release-notes", global.CONF.System.RepoUrl, mode, itemVersion, itemVersion))
+	if err != nil {
+		return nil, fmt.Errorf("load releases-notes of version %s failed, err: %v", itemVersion, err)
+	}
+	upgrade.ReleaseNote = notes
+	return &upgrade, nil
+}
+
+func (u *UpgradeService) LoadNotes(req dto.Upgrade) (string, error) {
+	mode := global.CONF.System.Mode
+	if strings.Contains(req.Version, "beta") {
+		mode = "beta"
+	}
+	notes, err := u.loadReleaseNotes(fmt.Sprintf("%s/%s/%s/release/1panel-%s-release-notes", global.CONF.System.RepoUrl, mode, req.Version, req.Version))
+	if err != nil {
+		return "", fmt.Errorf("load releases-notes of version %s failed, err: %v", req.Version, err)
+	}
+	return notes, nil
+}
+
+func (u *UpgradeService) Upgrade(req dto.Upgrade) error {
+	global.LOG.Info("start to upgrade now...")
+	timeStr := time.Now().Format(constant.DateTimeSlimLayout)
+	rootDir := path.Join(global.CONF.System.TmpDir, fmt.Sprintf("upgrade/upgrade_%s/downloads", timeStr))
+	originalDir := path.Join(global.CONF.System.TmpDir, fmt.Sprintf("upgrade/upgrade_%s/original", timeStr))
+	if err := os.MkdirAll(rootDir, os.ModePerm); err != nil {
+		return err
+	}
+	if err := os.MkdirAll(originalDir, os.ModePerm); err != nil {
+		return err
+	}
+	itemArch, err := loadArch()
+	if err != nil {
+		return err
+	}
+
+	mode := global.CONF.System.Mode
+	if strings.Contains(req.Version, "beta") {
+		mode = "beta"
+	}
+	downloadPath := fmt.Sprintf("%s/%s/%s/release", global.CONF.System.RepoUrl, mode, req.Version)
+	fileName := fmt.Sprintf("1panel-%s-%s-%s.tar.gz", req.Version, "linux", itemArch)
+	_ = settingRepo.Update("SystemStatus", "Upgrading")
+	go func() {
+		if err := files.DownloadFileWithProxy(downloadPath+"/"+fileName, rootDir+"/"+fileName); err != nil {
+			global.LOG.Errorf("download service file failed, err: %v", err)
+			_ = settingRepo.Update("SystemStatus", "Free")
+			return
+		}
+		global.LOG.Info("download all file successful!")
+		defer func() {
+			_ = os.Remove(rootDir)
+		}()
+		if err := files.HandleUnTar(rootDir+"/"+fileName, rootDir, ""); err != nil {
+			global.LOG.Errorf("decompress file failed, err: %v", err)
+			_ = settingRepo.Update("SystemStatus", "Free")
+			return
+		}
+		tmpDir := rootDir + "/" + strings.ReplaceAll(fileName, ".tar.gz", "")
+
+		if err := u.handleBackup(originalDir); err != nil {
+			global.LOG.Errorf("handle backup original file failed, err: %v", err)
+			_ = settingRepo.Update("SystemStatus", "Free")
+			return
+		}
+		global.LOG.Info("backup original data successful, now start to upgrade!")
+
+		if err := files.CopyFile(path.Join(tmpDir, "1panel"), "/usr/local/bin"); err != nil {
+			global.LOG.Errorf("upgrade 1panel failed, err: %v", err)
+			u.handleRollback(originalDir, 1)
+			return
+		}
+
+		if err := files.CopyFile(path.Join(tmpDir, "1pctl"), "/usr/local/bin"); err != nil {
+			global.LOG.Errorf("upgrade 1pctl failed, err: %v", err)
+			u.handleRollback(originalDir, 2)
+			return
+		}
+		if _, err := cmd.Execf("sed -i -e 's#BASE_DIR=.*#BASE_DIR=%s#g' /usr/local/bin/1pctl", global.CONF.System.BaseDir); err != nil {
+			global.LOG.Errorf("upgrade basedir in 1pctl failed, err: %v", err)
+			u.handleRollback(originalDir, 2)
+			return
+		}
+
+		if err := files.CopyFile(path.Join(tmpDir, "1panel.service"), "/etc/systemd/system"); err != nil {
+			global.LOG.Errorf("upgrade 1panel.service failed, err: %v", err)
+			u.handleRollback(originalDir, 3)
+			return
+		}
+
+		global.LOG.Info("upgrade successful!")
+		go writeLogs(req.Version)
+		_ = settingRepo.Update("SystemVersion", req.Version)
+		_ = settingRepo.Update("SystemStatus", "Free")
+		checkPointOfWal()
+		_, _ = cmd.ExecWithTimeOut("systemctl daemon-reload && systemctl restart 1panel.service", 1*time.Minute)
+	}()
+	return nil
+}
+
+func (u *UpgradeService) handleBackup(originalDir string) error {
+	if err := files.CopyFile("/usr/local/bin/1panel", originalDir); err != nil {
+		return err
+	}
+	if err := files.CopyFile("/usr/local/bin/1pctl", originalDir); err != nil {
+		return err
+	}
+	if err := files.CopyFile("/etc/systemd/system/1panel.service", originalDir); err != nil {
+		return err
+	}
+	checkPointOfWal()
+	if err := files.HandleTar(path.Join(global.CONF.System.BaseDir, "1panel/db"), originalDir, "db.tar.gz", "db/1Panel.db-*", ""); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (u *UpgradeService) handleRollback(originalDir string, errStep int) {
+	_ = settingRepo.Update("SystemStatus", "Free")
+
+	checkPointOfWal()
+	if _, err := os.Stat(path.Join(originalDir, "1Panel.db")); err == nil {
+		if err := files.CopyFile(path.Join(originalDir, "1Panel.db"), global.CONF.System.DbPath); err != nil {
+			global.LOG.Errorf("rollback 1panel db failed, err: %v", err)
+		}
+	}
+	if _, err := os.Stat(path.Join(originalDir, "db.tar.gz")); err == nil {
+		if err := files.HandleUnTar(path.Join(originalDir, "db.tar.gz"), global.CONF.System.DbPath, ""); err != nil {
+			global.LOG.Errorf("rollback 1panel db failed, err: %v", err)
+		}
+	}
+	if err := files.CopyFile(path.Join(originalDir, "1panel"), "/usr/local/bin"); err != nil {
+		global.LOG.Errorf("rollback 1pctl failed, err: %v", err)
+	}
+	if errStep == 1 {
+		return
+	}
+	if err := files.CopyFile(path.Join(originalDir, "1pctl"), "/usr/local/bin"); err != nil {
+		global.LOG.Errorf("rollback 1panel failed, err: %v", err)
+	}
+	if errStep == 2 {
+		return
+	}
+	if err := files.CopyFile(path.Join(originalDir, "1panel.service"), "/etc/systemd/system"); err != nil {
+		global.LOG.Errorf("rollback 1panel failed, err: %v", err)
+	}
+}
+
+func (u *UpgradeService) loadVersionByMode(developer, currentVersion string) (string, string, string) {
+	var current, latest string
+	if global.CONF.System.Mode == "dev" {
+		betaVersionLatest := u.loadVersion(true, currentVersion, "beta")
+		devVersionLatest := u.loadVersion(true, currentVersion, "dev")
+		if common.ComparePanelVersion(betaVersionLatest, devVersionLatest) {
+			return betaVersionLatest, "", ""
+		}
+		return devVersionLatest, "", ""
+	}
+
+	betaVersionLatest := ""
+	latest = u.loadVersion(true, currentVersion, "stable")
+	current = u.loadVersion(false, currentVersion, "stable")
+	if developer == "enable" {
+		betaVersionLatest = u.loadVersion(true, currentVersion, "beta")
+	}
+	if current != latest {
+		return betaVersionLatest, current, latest
+	}
+
+	versionPart := strings.Split(current, ".")
+	if len(versionPart) < 3 {
+		return betaVersionLatest, current, latest
+	}
+	num, _ := strconv.Atoi(versionPart[1])
+	if num == 0 {
+		return betaVersionLatest, current, latest
+	}
+	if num >= 10 {
+		if current[:6] == currentVersion[:6] {
+			return betaVersionLatest, current, ""
+		}
+		return betaVersionLatest, "", latest
+	}
+	if current[:5] == currentVersion[:5] {
+		return betaVersionLatest, current, ""
+	}
+	return betaVersionLatest, "", latest
+}
+
+func (u *UpgradeService) loadVersion(isLatest bool, currentVersion, mode string) string {
+	path := fmt.Sprintf("%s/%s/latest", global.CONF.System.RepoUrl, mode)
+	if !isLatest {
+		path = fmt.Sprintf("%s/%s/latest.current", global.CONF.System.RepoUrl, mode)
+	}
+	_, latestVersionRes, err := httpUtil.HandleGet(path, http.MethodGet, constant.TimeOut20s)
+	if err != nil {
+		global.LOG.Errorf("load latest version from oss failed, err: %v", err)
+		return ""
+	}
+	version := string(latestVersionRes)
+	if strings.Contains(version, "<") {
+		global.LOG.Errorf("load latest version from oss failed, err: %v", version)
+		return ""
+	}
+	if isLatest {
+		return u.checkVersion(version, currentVersion)
+	}
+
+	versionMap := make(map[string]string)
+	if err := json.Unmarshal(latestVersionRes, &versionMap); err != nil {
+		global.LOG.Errorf("load latest version from oss failed (error unmarshal), err: %v", err)
+		return ""
+	}
+
+	versionPart := strings.Split(currentVersion, ".")
+	if len(versionPart) < 3 {
+		global.LOG.Errorf("current version is error format: %s", currentVersion)
+		return ""
+	}
+	num, _ := strconv.Atoi(versionPart[1])
+	if num == 0 {
+		global.LOG.Errorf("current version is error format: %s", currentVersion)
+		return ""
+	}
+	if num >= 10 {
+		if version, ok := versionMap[currentVersion[0:5]]; ok {
+			return u.checkVersion(version, currentVersion)
+		}
+		return ""
+	}
+	if version, ok := versionMap[currentVersion[0:4]]; ok {
+		return u.checkVersion(version, currentVersion)
+	}
+	return ""
+}
+
+func (u *UpgradeService) checkVersion(v2, v1 string) string {
+	addSuffix := false
+	if !strings.Contains(v1, "-") {
+		v1 = v1 + "-lts"
+	}
+	if !strings.Contains(v2, "-") {
+		addSuffix = true
+		v2 = v2 + "-lts"
+	}
+	if common.ComparePanelVersion(v2, v1) {
+		if addSuffix {
+			return strings.TrimSuffix(v2, "-lts")
+		}
+		return v2
+	}
+	return ""
+}
+
+func (u *UpgradeService) loadReleaseNotes(path string) (string, error) {
+	_, releaseNotes, err := httpUtil.HandleGet(path, http.MethodGet, constant.TimeOut20s)
+	if err != nil {
+		return "", err
+	}
+	return string(releaseNotes), nil
+}
+
+func loadArch() (string, error) {
+	std, err := cmd.Exec("uname -a")
+	if err != nil {
+		return "", fmt.Errorf("std: %s, err: %s", std, err.Error())
+	}
+	if strings.Contains(std, "x86_64") {
+		return "amd64", nil
+	}
+	if strings.Contains(std, "arm64") || strings.Contains(std, "aarch64") {
+		return "arm64", nil
+	}
+	if strings.Contains(std, "armv7l") {
+		return "armv7", nil
+	}
+	if strings.Contains(std, "ppc64le") {
+		return "ppc64le", nil
+	}
+	if strings.Contains(std, "s390x") {
+		return "s390x", nil
+	}
+	return "", fmt.Errorf("unsupported such arch: %s", std)
+}
+
+func checkPointOfWal() {
+	if err := global.DB.Exec("PRAGMA wal_checkpoint(TRUNCATE);").Error; err != nil {
+		global.LOG.Errorf("handle check point failed, err: %v", err)
+	}
+}
diff --git a/core/buserr/errors.go b/core/buserr/errors.go
new file mode 100644
index 000000000..a71020dd0
--- /dev/null
+++ b/core/buserr/errors.go
@@ -0,0 +1,55 @@
+package buserr
+
+import (
+	"github.com/1Panel-dev/1Panel/core/i18n"
+	"github.com/pkg/errors"
+)
+
+type BusinessError struct {
+	Msg    string
+	Detail interface{}
+	Map    map[string]interface{}
+	Err    error
+}
+
+func (e BusinessError) Error() string {
+	content := ""
+	if e.Detail != nil {
+		content = i18n.GetErrMsg(e.Msg, map[string]interface{}{"detail": e.Detail})
+	} else if e.Map != nil {
+		content = i18n.GetErrMsg(e.Msg, e.Map)
+	} else {
+		content = i18n.GetErrMsg(e.Msg, nil)
+	}
+	if content == "" {
+		if e.Err != nil {
+			return e.Err.Error()
+		}
+		return errors.New(e.Msg).Error()
+	}
+	return content
+}
+
+func New(Key string) BusinessError {
+	return BusinessError{
+		Msg:    Key,
+		Detail: nil,
+		Err:    nil,
+	}
+}
+
+func WithDetail(Key string, detail interface{}, err error) BusinessError {
+	return BusinessError{
+		Msg:    Key,
+		Detail: detail,
+		Err:    err,
+	}
+}
+
+func WithMap(Key string, maps map[string]interface{}, err error) BusinessError {
+	return BusinessError{
+		Msg: Key,
+		Map: maps,
+		Err: err,
+	}
+}
diff --git a/core/buserr/multi_err.go b/core/buserr/multi_err.go
new file mode 100644
index 000000000..bf0c875ce
--- /dev/null
+++ b/core/buserr/multi_err.go
@@ -0,0 +1,23 @@
+package buserr
+
+import (
+	"bytes"
+	"fmt"
+	"sort"
+)
+
+type MultiErr map[string]error
+
+func (e MultiErr) Error() string {
+	var keys []string
+	for key := range e {
+		keys = append(keys, key)
+	}
+	sort.Strings(keys)
+
+	buffer := bytes.NewBufferString("")
+	for _, key := range keys {
+		buffer.WriteString(fmt.Sprintf("[%s] %s\n", key, e[key]))
+	}
+	return buffer.String()
+}
diff --git a/core/cmd/server/cmd/listen-ip.go b/core/cmd/server/cmd/listen-ip.go
new file mode 100644
index 000000000..c0168878f
--- /dev/null
+++ b/core/cmd/server/cmd/listen-ip.go
@@ -0,0 +1,60 @@
+package cmd
+
+import (
+	"fmt"
+
+	"github.com/spf13/cobra"
+)
+
+func init() {
+	RootCmd.AddCommand(listenCmd)
+	listenCmd.AddCommand(listenIpv4Cmd)
+	listenCmd.AddCommand(listenIpv6Cmd)
+}
+
+var listenCmd = &cobra.Command{
+	Use:   "listen-ip",
+	Short: "切换监听 IP",
+}
+
+var listenIpv4Cmd = &cobra.Command{
+	Use:   "ipv4",
+	Short: "监听 IPv4",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		return updateBindInfo("ipv4")
+	},
+}
+var listenIpv6Cmd = &cobra.Command{
+	Use:   "ipv6",
+	Short: "监听 IPv6",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		return updateBindInfo("ipv6")
+	},
+}
+
+func updateBindInfo(protocol string) error {
+	if !isRoot() {
+		fmt.Println("请使用 sudo 1pctl listen-ip ipv6 或者切换到 root 用户")
+		return nil
+	}
+	db, err := loadDBConn()
+	if err != nil {
+		return err
+	}
+	ipv6 := "disable"
+	tcp := "tcp4"
+	address := "0.0.0.0"
+	if protocol == "ipv6" {
+		ipv6 = "enable"
+		tcp = "tcp6"
+		address = "::"
+	}
+	if err := setSettingByKey(db, "Ipv6", ipv6); err != nil {
+		return err
+	}
+	if err := setSettingByKey(db, "BindAddress", address); err != nil {
+		return err
+	}
+	fmt.Printf("切换成功!已切换至监听 %s [%s]", tcp, address)
+	return nil
+}
diff --git a/core/cmd/server/cmd/reset.go b/core/cmd/server/cmd/reset.go
new file mode 100644
index 000000000..d398b967c
--- /dev/null
+++ b/core/cmd/server/cmd/reset.go
@@ -0,0 +1,102 @@
+package cmd
+
+import (
+	"fmt"
+
+	"github.com/spf13/cobra"
+)
+
+func init() {
+	RootCmd.AddCommand(resetCmd)
+	resetCmd.AddCommand(resetMFACmd)
+	resetCmd.AddCommand(resetSSLCmd)
+	resetCmd.AddCommand(resetEntranceCmd)
+	resetCmd.AddCommand(resetBindIpsCmd)
+	resetCmd.AddCommand(resetDomainCmd)
+}
+
+var resetCmd = &cobra.Command{
+	Use:   "reset",
+	Short: "重置系统信息",
+}
+
+var resetMFACmd = &cobra.Command{
+	Use:   "mfa",
+	Short: "取消 1Panel 两步验证",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		if !isRoot() {
+			fmt.Println("请使用 sudo 1pctl reset mfa 或者切换到 root 用户")
+			return nil
+		}
+		db, err := loadDBConn()
+		if err != nil {
+			return err
+		}
+
+		return setSettingByKey(db, "MFAStatus", "disable")
+	},
+}
+var resetSSLCmd = &cobra.Command{
+	Use:   "https",
+	Short: "取消 1Panel https 方式登录",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		if !isRoot() {
+			fmt.Println("请使用 sudo 1pctl reset https 或者切换到 root 用户")
+			return nil
+		}
+		db, err := loadDBConn()
+		if err != nil {
+			return err
+		}
+
+		return setSettingByKey(db, "SSL", "disable")
+	},
+}
+var resetEntranceCmd = &cobra.Command{
+	Use:   "entrance",
+	Short: "取消 1Panel 安全入口",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		if !isRoot() {
+			fmt.Println("请使用 sudo 1pctl reset entrance 或者切换到 root 用户")
+			return nil
+		}
+		db, err := loadDBConn()
+		if err != nil {
+			return err
+		}
+
+		return setSettingByKey(db, "SecurityEntrance", "")
+	},
+}
+var resetBindIpsCmd = &cobra.Command{
+	Use:   "ips",
+	Short: "取消 1Panel 授权 IP 限制",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		if !isRoot() {
+			fmt.Println("请使用 sudo 1pctl reset ips 或者切换到 root 用户")
+			return nil
+		}
+		db, err := loadDBConn()
+		if err != nil {
+			return err
+		}
+
+		return setSettingByKey(db, "AllowIPs", "")
+	},
+}
+var resetDomainCmd = &cobra.Command{
+	Use:   "domain",
+	Short: "取消 1Panel 访问域名绑定",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		if !isRoot() {
+			fmt.Println("请使用 sudo 1pctl reset domain 或者切换到 root 用户")
+			return nil
+		}
+		db, err := loadDBConn()
+		if err != nil {
+			return err
+		}
+
+		return setSettingByKey(db, "BindDomain", "")
+	},
+}
diff --git a/core/cmd/server/cmd/restore.go b/core/cmd/server/cmd/restore.go
new file mode 100644
index 000000000..d12e669d4
--- /dev/null
+++ b/core/cmd/server/cmd/restore.go
@@ -0,0 +1,122 @@
+package cmd
+
+import (
+	"fmt"
+	"os"
+	"path"
+	"sort"
+	"strings"
+	"time"
+
+	cmdUtils "github.com/1Panel-dev/1Panel/core/utils/cmd"
+	"github.com/1Panel-dev/1Panel/core/utils/files"
+	"github.com/pkg/errors"
+
+	"github.com/spf13/cobra"
+)
+
+func init() {
+	RootCmd.AddCommand(restoreCmd)
+}
+
+var restoreCmd = &cobra.Command{
+	Use:   "restore",
+	Short: "回滚 1Panel 服务及数据",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		if !isRoot() {
+			fmt.Println("请使用 sudo 1pctl restore 或者切换到 root 用户")
+			return nil
+		}
+		stdout, err := cmdUtils.Exec("grep '^BASE_DIR=' /usr/local/bin/1pctl | cut -d'=' -f2")
+		if err != nil {
+			return fmt.Errorf("handle load `BASE_DIR` failed, err: %v", err)
+		}
+		baseDir := strings.ReplaceAll(stdout, "\n", "")
+		upgradeDir := path.Join(baseDir, "1panel", "tmp", "upgrade")
+
+		tmpPath, err := loadRestorePath(upgradeDir)
+		if err != nil {
+			return err
+		}
+		if tmpPath == "暂无可回滚文件" {
+			fmt.Println("暂无可回滚文件")
+			return nil
+		}
+		tmpPath = path.Join(upgradeDir, tmpPath, "original")
+		fmt.Printf("(0/4) 开始从 %s 目录回滚 1Panel 服务及数据... \n", tmpPath)
+
+		if err := files.CopyFile(path.Join(tmpPath, "1panel"), "/usr/local/bin"); err != nil {
+			return err
+		}
+		fmt.Println("(1/4) 1panel 二进制回滚成功")
+		if err := files.CopyFile(path.Join(tmpPath, "1pctl"), "/usr/local/bin"); err != nil {
+			return err
+		}
+		fmt.Println("(2/4) 1panel 脚本回滚成功")
+		if err := files.CopyFile(path.Join(tmpPath, "1panel.service"), "/etc/systemd/system"); err != nil {
+			return err
+		}
+		fmt.Println("(3/4) 1panel 服务回滚成功")
+		checkPointOfWal()
+		if _, err := os.Stat(path.Join(tmpPath, "1Panel.db")); err == nil {
+			if err := files.CopyFile(path.Join(tmpPath, "1Panel.db"), path.Join(baseDir, "1panel/db")); err != nil {
+				return err
+			}
+		}
+		if _, err := os.Stat(path.Join(tmpPath, "db.tar.gz")); err == nil {
+			if err := handleUnTar(path.Join(tmpPath, "db.tar.gz"), path.Join(baseDir, "1panel")); err != nil {
+				return err
+			}
+		}
+		fmt.Printf("(4/4) 1panel 数据回滚成功 \n\n")
+
+		fmt.Println("回滚成功!正在重启服务,请稍候...")
+		return nil
+	},
+}
+
+func checkPointOfWal() {
+	db, err := loadDBConn()
+	if err != nil {
+		return
+	}
+	_ = db.Exec("PRAGMA wal_checkpoint(TRUNCATE);").Error
+}
+
+func loadRestorePath(upgradeDir string) (string, error) {
+	if _, err := os.Stat(upgradeDir); err != nil && os.IsNotExist(err) {
+		return "暂无可回滚文件", nil
+	}
+	files, err := os.ReadDir(upgradeDir)
+	if err != nil {
+		return "", err
+	}
+	var folders []string
+	for _, file := range files {
+		if file.IsDir() {
+			folders = append(folders, file.Name())
+		}
+	}
+	if len(folders) == 0 {
+		return "暂无可回滚文件", nil
+	}
+	sort.Slice(folders, func(i, j int) bool {
+		return folders[i] > folders[j]
+	})
+	return folders[0], nil
+}
+
+func handleUnTar(sourceFile, targetDir string) error {
+	if _, err := os.Stat(targetDir); err != nil && os.IsNotExist(err) {
+		if err = os.MkdirAll(targetDir, os.ModePerm); err != nil {
+			return err
+		}
+	}
+
+	commands := fmt.Sprintf("tar zxvfC %s %s", sourceFile, targetDir)
+	stdout, err := cmdUtils.ExecWithTimeOut(commands, 20*time.Second)
+	if err != nil {
+		return errors.New(stdout)
+	}
+	return nil
+}
diff --git a/core/cmd/server/cmd/root.go b/core/cmd/server/cmd/root.go
new file mode 100644
index 000000000..7063cac42
--- /dev/null
+++ b/core/cmd/server/cmd/root.go
@@ -0,0 +1,80 @@
+package cmd
+
+import (
+	"fmt"
+	"os/user"
+	"strings"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/server"
+	cmdUtils "github.com/1Panel-dev/1Panel/core/utils/cmd"
+	"github.com/glebarez/sqlite"
+	"github.com/spf13/cobra"
+	"gorm.io/gorm"
+)
+
+func init() {}
+
+var RootCmd = &cobra.Command{
+	Use:   "1panel",
+	Short: "1Panel ,一款现代化的 Linux 面板",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		server.Start()
+		return nil
+	},
+}
+
+type setting struct {
+	ID        uint      `gorm:"primarykey;AUTO_INCREMENT" json:"id"`
+	CreatedAt time.Time `json:"createdAt"`
+	UpdatedAt time.Time `json:"updatedAt"`
+	Key       string    `json:"key" gorm:"type:varchar(256);not null;"`
+	Value     string    `json:"value" gorm:"type:varchar(256)"`
+	About     string    `json:"about" gorm:"type:longText"`
+}
+
+func loadDBConn() (*gorm.DB, error) {
+	stdout, err := cmdUtils.Exec("grep '^BASE_DIR=' /usr/local/bin/1pctl | cut -d'=' -f2")
+	if err != nil {
+		return nil, fmt.Errorf("handle load `BASE_DIR` failed, err: %v", err)
+	}
+	baseDir := strings.ReplaceAll(stdout, "\n", "")
+	if len(baseDir) == 0 {
+		return nil, fmt.Errorf("error `BASE_DIR` find in /usr/local/bin/1pctl \n")
+	}
+	if strings.HasSuffix(baseDir, "/") {
+		baseDir = baseDir[:strings.LastIndex(baseDir, "/")]
+	}
+
+	db, err := gorm.Open(sqlite.Open(baseDir+"/1panel/db/1Panel.db"), &gorm.Config{})
+	if err != nil {
+		return nil, fmt.Errorf("init my db conn failed, err: %v \n", err)
+	}
+	return db, nil
+}
+
+func getSettingByKey(db *gorm.DB, key string) string {
+	var setting setting
+	_ = db.Where("key = ?", key).First(&setting).Error
+	return setting.Value
+}
+
+type LoginLog struct{}
+
+func isDefault(db *gorm.DB) bool {
+	logCount := int64(0)
+	_ = db.Model(&LoginLog{}).Where("status = ?", "Success").Count(&logCount).Error
+	return logCount == 0
+}
+
+func setSettingByKey(db *gorm.DB, key, value string) error {
+	return db.Model(&setting{}).Where("key = ?", key).Updates(map[string]interface{}{"value": value}).Error
+}
+
+func isRoot() bool {
+	currentUser, err := user.Current()
+	if err != nil {
+		return false
+	}
+	return currentUser.Uid == "0"
+}
diff --git a/core/cmd/server/cmd/update.go b/core/cmd/server/cmd/update.go
new file mode 100644
index 000000000..9b9709ec6
--- /dev/null
+++ b/core/cmd/server/cmd/update.go
@@ -0,0 +1,240 @@
+package cmd
+
+import (
+	"bufio"
+	"fmt"
+	"os"
+	"regexp"
+	"strconv"
+	"strings"
+	"unicode"
+
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/utils/cmd"
+	"github.com/1Panel-dev/1Panel/core/utils/common"
+	"github.com/1Panel-dev/1Panel/core/utils/encrypt"
+	"github.com/spf13/cobra"
+	"golang.org/x/term"
+)
+
+func init() {
+	RootCmd.AddCommand(updateCmd)
+	updateCmd.AddCommand(updateUserName)
+	updateCmd.AddCommand(updatePassword)
+	updateCmd.AddCommand(updatePort)
+}
+
+var updateCmd = &cobra.Command{
+	Use:   "update",
+	Short: "修改面板信息",
+}
+
+var updateUserName = &cobra.Command{
+	Use:   "username",
+	Short: "修改面板用户",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		if !isRoot() {
+			fmt.Println("请使用 sudo 1pctl update username 或者切换到 root 用户")
+			return nil
+		}
+		username()
+		return nil
+	},
+}
+var updatePassword = &cobra.Command{
+	Use:   "password",
+	Short: "修改面板密码",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		if !isRoot() {
+			fmt.Println("请使用 sudo 1pctl update password 或者切换到 root 用户")
+			return nil
+		}
+		password()
+		return nil
+	},
+}
+var updatePort = &cobra.Command{
+	Use:   "port",
+	Short: "修改面板端口",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		if !isRoot() {
+			fmt.Println("请使用 sudo 1pctl update port 或者切换到 root 用户")
+			return nil
+		}
+		port()
+		return nil
+	},
+}
+
+func username() {
+	reader := bufio.NewReader(os.Stdin)
+	fmt.Print("修改面板用户: ")
+	newUsername, _ := reader.ReadString('\n')
+	newUsername = strings.Trim(newUsername, "\n")
+	if len(newUsername) == 0 {
+		fmt.Println("错误:输入面板用户为空!")
+		return
+	}
+	if strings.Contains(newUsername, " ") {
+		fmt.Println("错误:输入面板用户中包含空格字符!")
+		return
+	}
+	result, err := regexp.MatchString("^[a-zA-Z0-9_\u4e00-\u9fa5]{3,30}$", newUsername)
+	if !result || err != nil {
+		fmt.Println("错误:输入面板用户错误!仅支持英文、中文、数字和_,长度3-30")
+		return
+	}
+
+	db, err := loadDBConn()
+	if err != nil {
+		fmt.Printf("错误:初始化数据库连接失败,%v\n", err)
+		return
+	}
+	if err := setSettingByKey(db, "UserName", newUsername); err != nil {
+		fmt.Printf("错误:面板用户修改失败,%v\n", err)
+		return
+	}
+
+	fmt.Printf("修改成功!\n\n")
+	fmt.Printf("面板用户:%s\n", newUsername)
+}
+
+func password() {
+	fmt.Print("修改面板密码:")
+	bytePassword, err := term.ReadPassword(int(os.Stdin.Fd()))
+	if err != nil {
+		fmt.Printf("\n错误:面板密码信息读取错误,%v\n", err)
+		return
+	}
+	newPassword := string(bytePassword)
+	newPassword = strings.Trim(newPassword, "\n")
+
+	if len(newPassword) == 0 {
+		fmt.Println("\n错误:输入面板密码为空!")
+		return
+	}
+	if strings.Contains(newPassword, " ") {
+		fmt.Println("\n错误:输入面板密码中包含空格字符!")
+		return
+	}
+	db, err := loadDBConn()
+	if err != nil {
+		fmt.Printf("\n错误:初始化数据库连接失败,%v\n", err)
+		return
+	}
+	complexSetting := getSettingByKey(db, "ComplexityVerification")
+	if complexSetting == "enable" {
+		if isValidPassword("newPassword") {
+			fmt.Println("\n错误:面板密码仅支持字母、数字、特殊字符(!@#$%*_,.?),长度 8-30 位!")
+			return
+		}
+	}
+	if len(newPassword) < 6 {
+		fmt.Println("错误:请输入 6 位以上密码!")
+		return
+	}
+
+	fmt.Print("\n确认密码:")
+	byteConfirmPassword, err := term.ReadPassword(int(os.Stdin.Fd()))
+	if err != nil {
+		fmt.Printf("\n错误:面板密码信息读取错误,%v\n", err)
+		return
+	}
+	confirmPassword := string(byteConfirmPassword)
+	confirmPassword = strings.Trim(confirmPassword, "\n")
+
+	if newPassword != confirmPassword {
+		fmt.Printf("\n错误:两次密码不匹配,请检查后重试!,%v\n", err)
+		return
+	}
+
+	p := ""
+	encryptSetting := getSettingByKey(db, "EncryptKey")
+	if len(encryptSetting) == 16 {
+		global.CONF.System.EncryptKey = encryptSetting
+		p, _ = encrypt.StringEncrypt(newPassword)
+	} else {
+		p = newPassword
+	}
+	if err := setSettingByKey(db, "Password", p); err != nil {
+		fmt.Printf("\n错误:面板密码修改失败,%v\n", err)
+		return
+	}
+	username := getSettingByKey(db, "UserName")
+
+	fmt.Printf("\n修改成功!\n\n")
+	fmt.Printf("面板用户:%s\n", username)
+	fmt.Printf("面板密码:%s\n", string(newPassword))
+}
+
+func port() {
+	reader := bufio.NewReader(os.Stdin)
+	fmt.Print("修改面板端口:")
+
+	newPortStr, _ := reader.ReadString('\n')
+	newPortStr = strings.Trim(newPortStr, "\n")
+	newPort, err := strconv.Atoi(strings.TrimSpace(newPortStr))
+	if err != nil || newPort < 1 || newPort > 65535 {
+		fmt.Println("错误:输入的端口号必须在 1 到 65535 之间!")
+		return
+	}
+	if common.ScanPort(newPort) {
+		fmt.Println("错误:该端口号正被占用,请检查后重试!")
+		return
+	}
+	db, err := loadDBConn()
+	if err != nil {
+		fmt.Printf("错误:初始化数据库连接失败,%v\n", err)
+		return
+	}
+	if err := setSettingByKey(db, "ServerPort", newPortStr); err != nil {
+		fmt.Printf("错误:面板端口修改失败,%v\n", err)
+		return
+	}
+
+	fmt.Printf("修改成功!\n\n")
+	fmt.Printf("面板端口:%s\n", newPortStr)
+
+	std, err := cmd.Exec("1pctl restart")
+	if err != nil {
+		fmt.Println(std)
+	}
+}
+func isValidPassword(password string) bool {
+	numCount := 0
+	alphaCount := 0
+	specialCount := 0
+
+	for _, char := range password {
+		switch {
+		case unicode.IsDigit(char):
+			numCount++
+		case unicode.IsLetter(char):
+			alphaCount++
+		case isSpecialChar(char):
+			specialCount++
+		}
+	}
+
+	if len(password) < 8 && len(password) > 30 {
+		return false
+	}
+	if (numCount == 0 && alphaCount == 0) || (alphaCount == 0 && specialCount == 0) || (numCount == 0 && specialCount == 0) {
+		return false
+	}
+	return true
+}
+
+func isSpecialChar(char rune) bool {
+	specialChars := "!@#$%*_,.?"
+	return unicode.IsPunct(char) && contains(specialChars, char)
+}
+
+func contains(specialChars string, char rune) bool {
+	for _, c := range specialChars {
+		if c == char {
+			return true
+		}
+	}
+	return false
+}
diff --git a/core/cmd/server/cmd/user-info.go b/core/cmd/server/cmd/user-info.go
new file mode 100644
index 000000000..991a18749
--- /dev/null
+++ b/core/cmd/server/cmd/user-info.go
@@ -0,0 +1,56 @@
+package cmd
+
+import (
+	"fmt"
+
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/utils/encrypt"
+	"github.com/spf13/cobra"
+)
+
+func init() {
+	RootCmd.AddCommand(userinfoCmd)
+}
+
+var userinfoCmd = &cobra.Command{
+	Use:   "user-info",
+	Short: "获取面板信息",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		if !isRoot() {
+			fmt.Println("请使用 sudo 1pctl user-info 或者切换到 root 用户")
+			return nil
+		}
+		db, err := loadDBConn()
+		if err != nil {
+			return fmt.Errorf("init my db conn failed, err: %v \n", err)
+		}
+		user := getSettingByKey(db, "UserName")
+		pass := "********"
+		if isDefault(db) {
+			encryptSetting := getSettingByKey(db, "EncryptKey")
+			pass = getSettingByKey(db, "Password")
+			if len(encryptSetting) == 16 {
+				global.CONF.System.EncryptKey = encryptSetting
+				pass, _ = encrypt.StringDecrypt(pass)
+			}
+		}
+		port := getSettingByKey(db, "ServerPort")
+		ssl := getSettingByKey(db, "SSL")
+		entrance := getSettingByKey(db, "SecurityEntrance")
+		address := getSettingByKey(db, "SystemIP")
+
+		protocol := "http"
+		if ssl == "enable" {
+			protocol = "https"
+		}
+		if address == "" {
+			address = "$LOCAL_IP"
+		}
+
+		fmt.Printf("面板地址: %s://%s:%s/%s \n", protocol, address, port, entrance)
+		fmt.Println("面板用户: ", user)
+		fmt.Println("面板密码: ", pass)
+		fmt.Println("提示:修改密码可执行命令:1pctl update password")
+		return nil
+	},
+}
diff --git a/core/cmd/server/cmd/version.go b/core/cmd/server/cmd/version.go
new file mode 100644
index 000000000..0559573c3
--- /dev/null
+++ b/core/cmd/server/cmd/version.go
@@ -0,0 +1,40 @@
+package cmd
+
+import (
+	"fmt"
+
+	"github.com/1Panel-dev/1Panel/core/cmd/server/conf"
+	"github.com/1Panel-dev/1Panel/core/configs"
+	"gopkg.in/yaml.v3"
+
+	"github.com/spf13/cobra"
+)
+
+func init() {
+	RootCmd.AddCommand(versionCmd)
+}
+
+var versionCmd = &cobra.Command{
+	Use:   "version",
+	Short: "获取系统版本信息",
+	RunE: func(cmd *cobra.Command, args []string) error {
+		if !isRoot() {
+			fmt.Println("请使用 sudo 1pctl version 或者切换到 root 用户")
+			return nil
+		}
+		db, err := loadDBConn()
+		if err != nil {
+			return err
+		}
+		version := getSettingByKey(db, "SystemVersion")
+
+		fmt.Printf("1panel version: %s\n", version)
+		config := configs.ServerConfig{}
+		if err := yaml.Unmarshal(conf.AppYaml, &config); err != nil {
+			return fmt.Errorf("unmarshal conf.App.Yaml failed, errL %v", err)
+		} else {
+			fmt.Printf("mode: %s\n", config.System.Mode)
+		}
+		return nil
+	},
+}
diff --git a/core/cmd/server/conf/app.yaml b/core/cmd/server/conf/app.yaml
new file mode 100644
index 000000000..0da0e5163
--- /dev/null
+++ b/core/cmd/server/conf/app.yaml
@@ -0,0 +1,17 @@
+system:
+  db_file: 1Panel.db
+  base_dir: /opt
+  mode: dev
+  repo_url: https://resource.fit2cloud.com/1panel/package
+  app_repo: https://apps-assets.fit2cloud.com
+  is_demo: false
+  port: 9999
+  username: admin
+  password: admin123
+
+log:
+  level: debug
+  time_zone: Asia/Shanghai
+  log_name: 1Panel
+  log_suffix: .log
+  max_backup: 10
diff --git a/core/cmd/server/conf/conf.go b/core/cmd/server/conf/conf.go
new file mode 100644
index 000000000..6654d8bcf
--- /dev/null
+++ b/core/cmd/server/conf/conf.go
@@ -0,0 +1,6 @@
+package conf
+
+import _ "embed"
+
+//go:embed app.yaml
+var AppYaml []byte
diff --git a/core/cmd/server/docs/docs.go b/core/cmd/server/docs/docs.go
new file mode 100644
index 000000000..b004a49f5
--- /dev/null
+++ b/core/cmd/server/docs/docs.go
@@ -0,0 +1,23464 @@
+// Code generated by swaggo/swag. DO NOT EDIT.
+
+package docs
+
+import "github.com/swaggo/swag"
+
+const docTemplate = `{
+    "schemes": {{ marshal .Schemes }},
+    "swagger": "2.0",
+    "info": {
+        "description": "{{escape .Description}}",
+        "title": "{{.Title}}",
+        "termsOfService": "http://swagger.io/terms/",
+        "contact": {},
+        "license": {
+            "name": "Apache 2.0",
+            "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
+        },
+        "version": "{{.Version}}"
+    },
+    "host": "{{.Host}}",
+    "basePath": "{{.BasePath}}",
+    "paths": {
+        "/apps/:key": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 key 获取应用信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search app by key",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "app key",
+                        "name": "key",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.AppDTO"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/checkupdate": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取应用更新版本",
+                "tags": [
+                    "App"
+                ],
+                "summary": "Get app list update",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/apps/detail/:appId/:version/:type": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 appid 获取应用详情",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search app detail by appid",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "app id",
+                        "name": "appId",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "app 版本",
+                        "name": "version",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "app 类型",
+                        "name": "version",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.AppDetailDTO"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/details/:id": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 id 获取应用详情",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Get app detail by id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "id",
+                        "name": "appId",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.AppDetailDTO"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/ignored": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取忽略的应用版本",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Get Ignore App",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.IgnoredApp"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/install": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "安装应用",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Install app",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppInstallCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/model.AppInstall"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "app_installs",
+                            "input_column": "name",
+                            "input_value": "name",
+                            "isList": false,
+                            "output_column": "app_id",
+                            "output_value": "appId"
+                        },
+                        {
+                            "db": "apps",
+                            "info": "appId",
+                            "isList": false,
+                            "output_column": "key",
+                            "output_value": "appKey"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Install app [appKey]-[name]",
+                    "formatZH": "安装应用 [appKey]-[name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/apps/installed/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "检查应用安装情况",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Check app installed",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppInstalledInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.AppInstalledCheck"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/conf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 key 获取应用默认配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search default config by key",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/conninfo/:key": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取应用连接信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search app password by key",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/delete/check/:appInstallId": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除前检查",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Check before delete",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "App install id",
+                        "name": "appInstallId",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.AppResource"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/ignore": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "忽略应用升级版本",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "ignore App Update",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppInstalledIgnoreUpgrade"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "installId"
+                    ],
+                    "formatEN": "Application param update [installId]",
+                    "formatZH": "忽略应用 [installId] 版本升级",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/apps/installed/list": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取已安装应用列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "List app installed",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.AppInstallInfo"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/loadport": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取应用端口",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search app port by key",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "integer"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/op": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作已安装应用",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Operate installed app",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppInstalledOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "app_installs",
+                            "input_column": "id",
+                            "input_value": "installId",
+                            "isList": false,
+                            "output_column": "app_id",
+                            "output_value": "appId"
+                        },
+                        {
+                            "db": "app_installs",
+                            "input_column": "id",
+                            "input_value": "installId",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "appName"
+                        },
+                        {
+                            "db": "apps",
+                            "input_column": "id",
+                            "input_value": "appId",
+                            "isList": false,
+                            "output_column": "key",
+                            "output_value": "appKey"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "installId",
+                        "operate"
+                    ],
+                    "formatEN": "[operate] App [appKey][appName]",
+                    "formatZH": "[operate] 应用 [appKey][appName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/apps/installed/params/:appInstallId": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 install id 获取应用参数",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search params by appInstallId",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "appInstallId",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.AppParam"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/params/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改应用参数",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Change app params",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppInstalledUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "installId"
+                    ],
+                    "formatEN": "Application param update [installId]",
+                    "formatZH": "应用参数修改 [installId]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/apps/installed/port/change": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改应用端口",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Change app port",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.PortUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "name",
+                        "port"
+                    ],
+                    "formatEN": "Application port update [key]-[name] =\u003e [port]",
+                    "formatZH": "应用端口修改 [key]-[name] =\u003e [port]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/apps/installed/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "分页获取已安装应用列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Page app installed",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppInstalledSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/apps/installed/sync": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "同步已安装应用列表",
+                "tags": [
+                    "App"
+                ],
+                "summary": "Sync app installed",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Sync the list of installed apps",
+                    "formatZH": "同步已安装应用列表",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/apps/installed/update/versions": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 install id 获取应用更新版本",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search app update version by install id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "appInstallId",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.AppVersion"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取应用列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "List apps",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/apps/services/:key": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 key 获取应用 service",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search app service by key",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "key",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.AppService"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/sync": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "同步应用列表",
+                "tags": [
+                    "App"
+                ],
+                "summary": "Sync app list",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "App store synchronization",
+                    "formatZH": "应用商店同步",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/auth/captcha": {
+            "get": {
+                "description": "加载验证码",
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "Load captcha",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.CaptchaResponse"
+                        }
+                    }
+                }
+            }
+        },
+        "/auth/demo": {
+            "get": {
+                "description": "判断是否为demo环境",
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "Check System isDemo",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/auth/issafety": {
+            "get": {
+                "description": "获取系统安全登录状态",
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "Load safety status",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/auth/language": {
+            "get": {
+                "description": "获取系统语言设置",
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "Load System Language",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/auth/login": {
+            "post": {
+                "description": "用户登录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "User login",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "安全入口 base64 加密串",
+                        "name": "EntranceCode",
+                        "in": "header",
+                        "required": true
+                    },
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Login"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.UserLoginInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/auth/logout": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "用户登出",
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "User logout",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/auth/mfalogin": {
+            "post": {
+                "description": "用户 mfa 登录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "User login with mfa",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MFALogin"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.UserLoginInfo"
+                        },
+                        "headers": {
+                            "EntranceCode": {
+                                "type": "string",
+                                "description": "安全入口"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/containers": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建容器",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Create container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "image"
+                    ],
+                    "formatEN": "create container [name][image]",
+                    "formatZH": "创建容器 [name][image]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/clean/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清理容器日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Clean container log",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithName"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "clean container [name] logs",
+                    "formatZH": "清理容器 [name] 日志",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/commit": {
+            "post": {
+                "description": "容器提交生成新镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Commit Container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerCommit"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/containers/compose": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建容器编排",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose"
+                ],
+                "summary": "Create compose",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ComposeCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create compose [name]",
+                    "formatZH": "创建 compose [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/compose/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器编排操作",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose"
+                ],
+                "summary": "Operate compose",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ComposeOperation"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "operation"
+                    ],
+                    "formatEN": "compose [operation] [name]",
+                    "formatZH": "compose [operation] [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/compose/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取编排列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose"
+                ],
+                "summary": "Page composes",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/compose/search/log": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "docker-compose 日志",
+                "tags": [
+                    "Container Compose"
+                ],
+                "summary": "Container Compose logs",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "compose 文件地址",
+                        "name": "compose",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "时间筛选",
+                        "name": "since",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "是否追踪",
+                        "name": "follow",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "显示行号",
+                        "name": "tail",
+                        "in": "query"
+                    }
+                ],
+                "responses": {}
+            }
+        },
+        "/containers/compose/test": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "测试 compose 是否可用",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose"
+                ],
+                "summary": "Test compose",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ComposeCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "check compose [name]",
+                    "formatZH": "检测 compose [name] 格式",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/compose/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新容器编排",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose"
+                ],
+                "summary": "Update compose",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ComposeUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "update compose information [name]",
+                    "formatZH": "更新 compose [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/daemonjson": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 docker 配置信息",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Load docker daemon.json",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.DaemonJsonConf"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/daemonjson/file": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 docker 配置信息(表单)",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Load docker daemon.json",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/daemonjson/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 docker 配置信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Update docker daemon.json",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "value"
+                    ],
+                    "formatEN": "Updated configuration [key]",
+                    "formatZH": "更新配置 [key]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/daemonjson/update/byfile": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "上传替换 docker 配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Update docker daemon.json by upload file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DaemonJsonUpdateByFile"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Updated configuration file",
+                    "formatZH": "更新配置文件",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/docker/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Docker 操作",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Operate docker",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DockerOperation"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operation"
+                    ],
+                    "formatEN": "[operation] docker service",
+                    "formatZH": "docker 服务 [operation]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/docker/status": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 docker 服务状态",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Load docker status",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/download/log": {
+            "post": {
+                "description": "下载容器日志",
+                "responses": {}
+            }
+        },
+        "/containers/image": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取镜像名称列表",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "load images options",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.Options"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/image/all": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取所有镜像列表",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "List all images",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.ImageInfo"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/image/build": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "构建镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Build image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageBuild"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "build image [name]",
+                    "formatZH": "构建镜像 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/image/load": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "导入镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Load image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageLoad"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "load image from [path]",
+                    "formatZH": "从 [path] 加载镜像",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/image/pull": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "拉取镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Pull image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImagePull"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "image_repos",
+                            "input_column": "id",
+                            "input_value": "repoID",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "reponame"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "repoID",
+                        "imageName"
+                    ],
+                    "formatEN": "image pull [reponame][imageName]",
+                    "formatZH": "镜像拉取 [reponame][imageName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/image/push": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "推送镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Push image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImagePush"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "image_repos",
+                            "input_column": "id",
+                            "input_value": "repoID",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "reponame"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "repoID",
+                        "tagName",
+                        "name"
+                    ],
+                    "formatEN": "push [tagName] to [reponame][name]",
+                    "formatZH": "[tagName] 推送到 [reponame][name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/image/remove": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Delete image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "names"
+                    ],
+                    "formatEN": "remove image [names]",
+                    "formatZH": "移除镜像 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/image/save": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "导出镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Save image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageSave"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "tagName",
+                        "path",
+                        "name"
+                    ],
+                    "formatEN": "save [tagName] as [path]/[name]",
+                    "formatZH": "保留 [tagName] 为 [path]/[name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/image/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取镜像列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Page images",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/image/tag": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Tag 镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Tag image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageTag"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "image_repos",
+                            "input_column": "id",
+                            "input_value": "repoID",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "reponame"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "repoID",
+                        "targetName"
+                    ],
+                    "formatEN": "tag image [reponame][targetName]",
+                    "formatZH": "tag 镜像 [reponame][targetName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/info": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器表单信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Load container info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithName"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerOperate"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/inspect": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器详情",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Container inspect",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.InspectReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/ipv6option/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 docker ipv6 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Update docker daemon.json ipv6 option",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.LogOption"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Updated the ipv6 option",
+                    "formatZH": "更新 ipv6 配置",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/limit": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器限制",
+                "summary": "Load container limits",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.ResourceLimit"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/list": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器名称",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "List containers",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/containers/list/stats": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器列表资源占用",
+                "summary": "Load container stats",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.ContainerListStats"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/load/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器操作日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Load container log",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/containers/logoption/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 docker 日志配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Update docker daemon.json log option",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.LogOption"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Updated the log option",
+                    "formatZH": "更新日志配置",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/network": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器网络列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Network"
+                ],
+                "summary": "List networks",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.Options"
+                            }
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建容器网络",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Network"
+                ],
+                "summary": "Create network",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.NetworkCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create container network [name]",
+                    "formatZH": "创建容器网络 name",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/network/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除容器网络",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Network"
+                ],
+                "summary": "Delete network",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "names"
+                    ],
+                    "formatEN": "delete container network [names]",
+                    "formatZH": "删除容器网络 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/network/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器网络列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Network"
+                ],
+                "summary": "Page networks",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器操作",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Operate Container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerOperation"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "names",
+                        "operation"
+                    ],
+                    "formatEN": "container [operation] [names]",
+                    "formatZH": "容器 [names] 执行 [operation]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/prune": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器清理",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Clean container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerPrune"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerPruneReport"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "pruneType"
+                    ],
+                    "formatEN": "clean container [pruneType]",
+                    "formatZH": "清理容器 [pruneType]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/rename": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器重命名",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Rename Container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerRename"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "newName"
+                    ],
+                    "formatEN": "rename container [name] =\u003e [newName]",
+                    "formatZH": "容器重命名 [name] =\u003e [newName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/repo": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取镜像仓库列表",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image-repo"
+                ],
+                "summary": "List image repos",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.ImageRepoOption"
+                            }
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建镜像仓库",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image-repo"
+                ],
+                "summary": "Create image repo",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageRepoDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create image repo [name]",
+                    "formatZH": "创建镜像仓库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/repo/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除镜像仓库",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image-repo"
+                ],
+                "summary": "Delete image repo",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageRepoDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "image_repos",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete image repo [names]",
+                    "formatZH": "删除镜像仓库 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/repo/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取镜像仓库列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image-repo"
+                ],
+                "summary": "Page image repos",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/repo/status": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 docker 仓库状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image-repo"
+                ],
+                "summary": "Load repo status",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/containers/repo/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新镜像仓库",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image-repo"
+                ],
+                "summary": "Update image repo",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageRepoUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "image_repos",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "update image repo information [name]",
+                    "formatZH": "更新镜像仓库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Page containers",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageContainer"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/search/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器日志",
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Container logs",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "容器名称",
+                        "name": "container",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "时间筛选",
+                        "name": "since",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "是否追踪",
+                        "name": "follow",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "显示行号",
+                        "name": "tail",
+                        "in": "query"
+                    }
+                ],
+                "responses": {}
+            }
+        },
+        "/containers/stats/:id": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器监控信息",
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Container stats",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "容器id",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerStats"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/template": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器编排模版列表",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose-template"
+                ],
+                "summary": "List compose templates",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.ComposeTemplateInfo"
+                            }
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建容器编排模版",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose-template"
+                ],
+                "summary": "Create compose template",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ComposeTemplateCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create compose template [name]",
+                    "formatZH": "创建 compose 模版 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/template/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除容器编排模版",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose-template"
+                ],
+                "summary": "Delete compose template",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "compose_templates",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete compose template [names]",
+                    "formatZH": "删除 compose 模版 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/template/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器编排模版列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose-template"
+                ],
+                "summary": "Page compose templates",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/template/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新容器编排模版",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose-template"
+                ],
+                "summary": "Update compose template",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ComposeTemplateUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "compose_templates",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "update compose template information [name]",
+                    "formatZH": "更新 compose 模版 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新容器",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Update container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "image"
+                    ],
+                    "formatEN": "update container [name][image]",
+                    "formatZH": "更新容器 [name][image]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/upgrade": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新容器镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Upgrade container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerUpgrade"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "image"
+                    ],
+                    "formatEN": "upgrade container image [name][image]",
+                    "formatZH": "更新容器镜像 [name][image]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/volume": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器存储卷列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Volume"
+                ],
+                "summary": "List volumes",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.Options"
+                            }
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建容器存储卷",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Volume"
+                ],
+                "summary": "Create volume",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.VolumeCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create container volume [name]",
+                    "formatZH": "创建容器存储卷 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/volume/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除容器存储卷",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Volume"
+                ],
+                "summary": "Delete volume",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "names"
+                    ],
+                    "formatEN": "delete container volume [names]",
+                    "formatZH": "删除容器存储卷 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/volume/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器存储卷分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Volume"
+                ],
+                "summary": "Page volumes",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/cronjobs": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建计划任务",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Create cronjob",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CronjobCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type",
+                        "name"
+                    ],
+                    "formatEN": "create cronjob [type][name]",
+                    "formatZH": "创建计划任务 [type][name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/cronjobs/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除计划任务",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Delete cronjob",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CronjobBatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "cronjobs",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete cronjob [names]",
+                    "formatZH": "删除计划任务 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/cronjobs/download": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载计划任务记录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Download cronjob records",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CronjobDownload"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "job_records",
+                            "input_column": "id",
+                            "input_value": "recordID",
+                            "isList": false,
+                            "output_column": "file",
+                            "output_value": "file"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "recordID"
+                    ],
+                    "formatEN": "download the cronjob record [file]",
+                    "formatZH": "下载计划任务记录 [file]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/cronjobs/handle": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "手动执行计划任务",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Handle cronjob once",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "cronjobs",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "manually execute the cronjob [name]",
+                    "formatZH": "手动执行计划任务 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/cronjobs/records/clean": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清空计划任务记录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Clean job records",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CronjobClean"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "cronjobs",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "clean cronjob [name] records",
+                    "formatZH": "清空计划任务记录 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/cronjobs/records/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取计划任务记录日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Load Cronjob record log",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/cronjobs/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取计划任务分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Page cronjobs",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageCronjob"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/cronjobs/search/records": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取计划任务记录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Page job records",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchRecord"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/cronjobs/status": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新计划任务状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Update cronjob status",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CronjobUpdateStatus"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "cronjobs",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "status"
+                    ],
+                    "formatEN": "change the status of cronjob [name] to [status].",
+                    "formatZH": "修改计划任务 [name] 状态为 [status]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/cronjobs/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新计划任务",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Update cronjob",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CronjobUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "cronjobs",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "update cronjob [name]",
+                    "formatZH": "更新计划任务 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/dashboard/base/:ioOption/:netOption": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取首页基础数据",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Dashboard"
+                ],
+                "summary": "Load dashboard base info",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "ioOption",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "netOption",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.DashboardBase"
+                        }
+                    }
+                }
+            }
+        },
+        "/dashboard/base/os": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取服务器基础数据",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Dashboard"
+                ],
+                "summary": "Load os info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.OsInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/dashboard/current/:ioOption/:netOption": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取首页实时数据",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Dashboard"
+                ],
+                "summary": "Load dashboard current info",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "ioOption",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "netOption",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.DashboardCurrent"
+                        }
+                    }
+                }
+            }
+        },
+        "/dashboard/system/restart/:operation": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "重启服务器/面板",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Dashboard"
+                ],
+                "summary": "System restart",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "operation",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/databases": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建 mysql 数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Create mysql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlDBCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create mysql database [name]",
+                    "formatZH": "创建 mysql 数据库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/bind": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "绑定 mysql 数据库用户",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Bind user of mysql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BindUser"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "database",
+                        "username"
+                    ],
+                    "formatEN": "bind mysql database [database] [username]",
+                    "formatZH": "绑定 mysql 数据库名 [database] [username]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/change/access": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 mysql 访问权限",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Change mysql access",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangeDBInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_mysqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update database [name] access",
+                    "formatZH": "更新数据库 [name] 访问权限",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/change/password": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 mysql 密码",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Change mysql password",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangeDBInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_mysqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update database [name] password",
+                    "formatZH": "更新数据库 [name] 密码",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/common/info": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取数据库基础信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Common"
+                ],
+                "summary": "Load base info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.DBBaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/common/load/file": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取数据库配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Common"
+                ],
+                "summary": "Load Database conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/databases/common/update/conf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "上传替换配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Common"
+                ],
+                "summary": "Update conf by upload file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DBConfUpdateByFile"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type",
+                        "database"
+                    ],
+                    "formatEN": "update the [type] [database] database configuration information",
+                    "formatZH": "更新 [type] 数据库 [database] 配置信息",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/db": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建远程数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Create database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DatabaseCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "type"
+                    ],
+                    "formatEN": "create database [name][type]",
+                    "formatZH": "创建远程数据库 [name][type]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/db/:name": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取远程数据库",
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Get databases",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.DatabaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/db/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "检测远程数据库连接性",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Check database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DatabaseCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "type"
+                    ],
+                    "formatEN": "check if database [name][type] is connectable",
+                    "formatZH": "检测远程数据库 [name][type] 连接性",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/db/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除远程数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Delete database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DatabaseDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "databases",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete database [names]",
+                    "formatZH": "删除远程数据库 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/db/item/:type": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取数据库列表",
+                "tags": [
+                    "Database"
+                ],
+                "summary": "List databases",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.DatabaseItem"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/db/list/:type": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取远程数据库列表",
+                "tags": [
+                    "Database"
+                ],
+                "summary": "List databases",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.DatabaseOption"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/db/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取远程数据库列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Page databases",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DatabaseSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/db/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新远程数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Update database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DatabaseUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "update database [name]",
+                    "formatZH": "更新远程数据库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除 mysql 数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Delete mysql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlDBDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_mysqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "delete mysql database [name]",
+                    "formatZH": "删除 mysql 数据库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/del/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Mysql 数据库删除前检查",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Check before delete mysql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlDBDeleteCheck"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/description/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 mysql 数据库库描述信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Update mysql database description",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateDescription"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_mysqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "description"
+                    ],
+                    "formatEN": "The description of the mysql database [name] is modified =\u003e [description]",
+                    "formatZH": "mysql 数据库 [name] 描述信息修改 [description]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/load": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "从服务器获取",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Load mysql database from remote",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlLoadDB"
+                        }
+                    }
+                ],
+                "responses": {}
+            }
+        },
+        "/databases/options": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 mysql 数据库列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "List mysql database names",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.MysqlOption"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/pg": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建 postgresql 数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Create postgresql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PostgresqlDBCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create postgresql database [name]",
+                    "formatZH": "创建 postgresql 数据库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/pg/:database/load": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "从服务器获取",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Load postgresql database from remote",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PostgresqlLoadDB"
+                        }
+                    }
+                ],
+                "responses": {}
+            }
+        },
+        "/databases/pg/bind": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "绑定 postgresql 数据库用户",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Bind postgresql user",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PostgresqlBindUser"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "username"
+                    ],
+                    "formatEN": "bind postgresql database [name] user [username]",
+                    "formatZH": "绑定 postgresql 数据库 [name] 用户 [username]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/pg/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除 postgresql 数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Delete postgresql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PostgresqlDBDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_postgresqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "delete postgresql database [name]",
+                    "formatZH": "删除 postgresql 数据库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/pg/del/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Postgresql 数据库删除前检查",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Check before delete postgresql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PostgresqlDBDeleteCheck"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/pg/description": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 postgresql 数据库库描述信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Update postgresql database description",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateDescription"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_postgresqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "description"
+                    ],
+                    "formatEN": "The description of the postgresql database [name] is modified =\u003e [description]",
+                    "formatZH": "postgresql 数据库 [name] 描述信息修改 [description]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/pg/password": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 postgresql 密码",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Change postgresql password",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangeDBInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_postgresqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update database [name] password",
+                    "formatZH": "更新数据库 [name] 密码",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/pg/privileges": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 postgresql 用户权限",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Change postgresql privileges",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangeDBInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "database",
+                        "username"
+                    ],
+                    "formatEN": "Update [user] privileges of database [database]",
+                    "formatZH": "更新数据库 [database] 用户 [username] 权限",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/pg/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 postgresql 数据库列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Page postgresql databases",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PostgresqlDBSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/redis/conf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 redis 配置信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Load redis conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithName"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.RedisConf"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/redis/conf/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 redis 配置信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Update redis conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.RedisConfUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "update the redis database configuration information",
+                    "formatZH": "更新 redis 数据库配置信息",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/redis/install/cli": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "安装 redis cli",
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Install redis-cli",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/databases/redis/password": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 redis 密码",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Change redis password",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangeRedisPass"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "change the password of the redis database",
+                    "formatZH": "修改 redis 数据库密码",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/redis/persistence/conf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 redis 持久化配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Load redis persistence conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithName"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.RedisPersistence"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/redis/persistence/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 redis 持久化配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Update redis persistence conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.RedisConfPersistenceUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "redis database persistence configuration update",
+                    "formatZH": "redis 数据库持久化配置更新",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/redis/status": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 redis 状态信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Load redis status info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithName"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.RedisStatus"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/remote": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 mysql 远程访问权限",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Load mysql remote access",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "boolean"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 mysql 数据库列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Page mysql databases",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlDBSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/status": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 mysql 状态信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Load mysql status info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlStatus"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/variables": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 mysql 性能参数信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Load mysql variables info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlVariables"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/variables/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "mysql 性能调优",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Update mysql variables",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlVariablesUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "adjust mysql database performance parameters",
+                    "formatZH": "调整 mysql 数据库性能参数",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/db/remote/del/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Mysql 远程数据库删除前检查",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Check before delete remote database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/files": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建文件/文件夹",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Create file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Create dir or file [path]",
+                    "formatZH": "创建文件/文件夹 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/batch/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "批量删除文件/文件夹",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Batch delete file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileBatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "paths"
+                    ],
+                    "formatEN": "Batch delete dir or file [paths]",
+                    "formatZH": "批量删除文件/文件夹 [paths]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/batch/role": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "批量修改文件权限和用户/组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Batch change file mode and owner",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileRoleReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "paths",
+                        "mode",
+                        "user",
+                        "group"
+                    ],
+                    "formatEN": "Batch change file mode and owner [paths] =\u003e [mode]/[user]/[group]",
+                    "formatZH": "批量修改文件权限和用户/组 [paths] =\u003e [mode]/[user]/[group]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "检测文件是否存在",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Check file exist",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FilePathCheck"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/chunkdownload": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "分片下载下载文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Chunk Download file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileDownload"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Download file [name]",
+                    "formatZH": "下载文件 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/chunkupload": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "分片上传文件",
+                "tags": [
+                    "File"
+                ],
+                "summary": "ChunkUpload file",
+                "parameters": [
+                    {
+                        "type": "file",
+                        "description": "request",
+                        "name": "file",
+                        "in": "formData",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/compress": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "压缩文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Compress file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileCompress"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Compress file [name]",
+                    "formatZH": "压缩文件 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/content": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取文件内容",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Load file content",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileContentReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.FileInfo"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Load file content [path]",
+                    "formatZH": "获取文件内容 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/decompress": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "解压文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Decompress file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileDeCompress"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Decompress file [path]",
+                    "formatZH": "解压 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除文件/文件夹",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Delete file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Delete dir or file [path]",
+                    "formatZH": "删除文件/文件夹 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/download": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Download file",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/favorite": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建收藏",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Create favorite",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FavoriteCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "收藏文件/文件夹 [path]",
+                    "formatZH": "收藏文件/文件夹 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/favorite/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除收藏",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Delete favorite",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FavoriteDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "favorites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "path",
+                            "output_value": "path"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "delete avorite [path]",
+                    "formatZH": "删除收藏 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/favorite/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取收藏列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "List favorites",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/mode": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改文件权限",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Change file mode",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path",
+                        "mode"
+                    ],
+                    "formatEN": "Change mode [paths] =\u003e [mode]",
+                    "formatZH": "修改权限 [paths] =\u003e [mode]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/move": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "移动文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Move file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileMove"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "oldPaths",
+                        "newPath"
+                    ],
+                    "formatEN": "Move [oldPaths] =\u003e [newPath]",
+                    "formatZH": "移动文件 [oldPaths] =\u003e [newPath]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/owner": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改文件用户/组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Change file owner",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileRoleUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path",
+                        "user",
+                        "group"
+                    ],
+                    "formatEN": "Change owner [paths] =\u003e [user]/[group]",
+                    "formatZH": "修改用户/组 [paths] =\u003e [user]/[group]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/read": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "按行读取日志文件",
+                "tags": [
+                    "File"
+                ],
+                "summary": "Read file by Line",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileReadByLineReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/recycle/clear": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清空回收站文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Clear RecycleBin files",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "清空回收站",
+                    "formatZH": "清空回收站",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/recycle/reduce": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "还原回收站文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Reduce RecycleBin files",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.RecycleBinReduce"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Reduce RecycleBin file [name]",
+                    "formatZH": "还原回收站文件 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/recycle/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取回收站文件列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "List RecycleBin files",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/recycle/status": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取回收站状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Get RecycleBin status",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/rename": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改文件名称",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Change file name",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileRename"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "oldName",
+                        "newName"
+                    ],
+                    "formatEN": "Rename [oldName] =\u003e [newName]",
+                    "formatZH": "重命名 [oldName] =\u003e [newName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/save": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新文件内容",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Update file content",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileEdit"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Update file content [path]",
+                    "formatZH": "更新文件内容 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取文件列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "List files",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileOption"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.FileInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/files/size": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取文件夹大小",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Load file size",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.DirSizeReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Load file size [path]",
+                    "formatZH": "获取文件夹大小 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/tree": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "加载文件树",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Load files tree",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileOption"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.FileTree"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/files/upload": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "上传文件",
+                "tags": [
+                    "File"
+                ],
+                "summary": "Upload file",
+                "parameters": [
+                    {
+                        "type": "file",
+                        "description": "request",
+                        "name": "file",
+                        "in": "formData",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Upload file [path]",
+                    "formatZH": "上传文件 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/upload/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "分页获取上传文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Page file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.SearchUploadWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.FileInfo"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/files/wget": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载远端文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Wget file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileWget"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "url",
+                        "path",
+                        "name"
+                    ],
+                    "formatEN": "Download url =\u003e [path]/[name]",
+                    "formatZH": "下载 url =\u003e [path]/[name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/groups": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建系统组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Group"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.GroupCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "type"
+                    ],
+                    "formatEN": "create group [name][type]",
+                    "formatZH": "创建组 [name][type]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/groups/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除系统组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Group"
+                ],
+                "summary": "Delete group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "groups",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        },
+                        {
+                            "db": "groups",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "type",
+                            "output_value": "type"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "delete group [type][name]",
+                    "formatZH": "删除组 [type][name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/groups/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "查询系统组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Group"
+                ],
+                "summary": "List groups",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.GroupSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.GroupInfo"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/groups/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新系统组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Group"
+                ],
+                "summary": "Update group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.GroupUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "type"
+                    ],
+                    "formatEN": "update group [name][type]",
+                    "formatZH": "更新组 [name][type]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/conffile/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "上传文件更新 SSH 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Update host SSH setting by file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SSHConf"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "update SSH conf",
+                    "formatZH": "修改 SSH 配置文件",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/ssh/conf": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 SSH 配置文件",
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Load host SSH conf",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/host/ssh/generate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "生成 SSH 密钥",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Generate host SSH secret",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.GenerateSSH"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "generate SSH secret",
+                    "formatZH": "生成 SSH 密钥 ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/ssh/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 SSH 登录日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Load host SSH logs",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchSSHLog"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.SSHLog"
+                        }
+                    }
+                }
+            }
+        },
+        "/host/ssh/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 SSH 服务状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Operate SSH",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Operate"
+                        }
+                    }
+                ],
+                "responses": {},
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operation"
+                    ],
+                    "formatEN": "[operation] SSH",
+                    "formatZH": "[operation] SSH ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/ssh/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "加载 SSH 配置信息",
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Load host SSH setting info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.SSHInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/host/ssh/secret": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 SSH 密钥",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Load host SSH secret",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.GenerateLoad"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/host/ssh/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 SSH 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Update host SSH setting",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SSHUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "value"
+                    ],
+                    "formatEN": "update SSH setting [key] =\u003e [value]",
+                    "formatZH": "修改 SSH 配置 [key] =\u003e [value]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/tool": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取主机工具状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Get tool",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.HostToolReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/host/tool/config": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作主机工具配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Get tool config",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.HostToolConfig"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operate"
+                    ],
+                    "formatEN": "[operate] tool config",
+                    "formatZH": "[operate] 主机工具配置文件 ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/tool/create": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建主机工具配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Create Host tool Config",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.HostToolCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type"
+                    ],
+                    "formatEN": "create [type] config",
+                    "formatZH": "创建 [type] 配置",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/tool/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取主机工具日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Get tool",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.HostToolLogReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/host/tool/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作主机工具",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Operate tool",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.HostToolReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operate",
+                        "type"
+                    ],
+                    "formatEN": "[operate] [type]",
+                    "formatZH": "[operate] [type] ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/tool/supervisor/process": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 Supervisor 进程配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Get Supervisor process config",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作守护进程",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Create Supervisor process",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.SupervisorProcessConfig"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operate"
+                    ],
+                    "formatEN": "[operate] process",
+                    "formatZH": "[operate] 守护进程 ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/tool/supervisor/process/file": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作 Supervisor 进程文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Get Supervisor process config",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.SupervisorProcessFileReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operate"
+                    ],
+                    "formatEN": "[operate] Supervisor Process Config file",
+                    "formatZH": "[operate] Supervisor 进程文件 ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建主机",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Create host",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.HostOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "addr"
+                    ],
+                    "formatEN": "create host [name][addr]",
+                    "formatZH": "创建主机 [name][addr]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/command": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取快速命令列表",
+                "tags": [
+                    "Command"
+                ],
+                "summary": "List commands",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.CommandInfo"
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建快速命令",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Command"
+                ],
+                "summary": "Create command",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CommandOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "command"
+                    ],
+                    "formatEN": "create quick command [name][command]",
+                    "formatZH": "创建快捷命令 [name][command]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/command/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除快速命令",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Command"
+                ],
+                "summary": "Delete command",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDeleteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "commands",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete quick command [names]",
+                    "formatZH": "删除快捷命令 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/command/redis": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 redis 快速命令列表",
+                "tags": [
+                    "Redis Command"
+                ],
+                "summary": "List redis commands",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "Array"
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "保存 Redis 快速命令",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Redis Command"
+                ],
+                "summary": "Save redis command",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.RedisCommand"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "command"
+                    ],
+                    "formatEN": "save quick command for redis [name][command]",
+                    "formatZH": "保存 redis 快捷命令 [name][command]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/command/redis/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除 redis 快速命令",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Redis Command"
+                ],
+                "summary": "Delete redis command",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDeleteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "redis_commands",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete quick command of redis [names]",
+                    "formatZH": "删除 redis 快捷命令 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/command/redis/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 redis 快速命令列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Redis Command"
+                ],
+                "summary": "Page redis commands",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/command/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取快速命令列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Command"
+                ],
+                "summary": "Page commands",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/command/tree": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取快速命令树",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Command"
+                ],
+                "summary": "Tree commands",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "Array"
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/command/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新快速命令",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Command"
+                ],
+                "summary": "Update command",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CommandOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "update quick command [name]",
+                    "formatZH": "更新快捷命令 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除主机",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Delete host",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDeleteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "hosts",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "addr",
+                            "output_value": "addrs"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete host [addrs]",
+                    "formatZH": "删除主机 [addrs]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/firewall/base": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取防火墙基础信息",
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Load firewall base info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.FirewallBaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/firewall/batch": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "批量删除防火墙规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchRuleOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/hosts/firewall/forward": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新防火墙端口转发规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ForwardRuleOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "source_port"
+                    ],
+                    "formatEN": "update port forward rules [source_port]",
+                    "formatZH": "更新端口转发规则 [source_port]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/firewall/ip": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建防火墙 IP 规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.AddrRuleOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "strategy",
+                        "address"
+                    ],
+                    "formatEN": "create address rules [strategy][address]",
+                    "formatZH": "添加 ip 规则 [strategy] [address]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/firewall/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改防火墙状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Page firewall status",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.FirewallOperation"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operation"
+                    ],
+                    "formatEN": "[operation] firewall",
+                    "formatZH": "[operation] 防火墙",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/firewall/port": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建防火墙端口规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PortRuleOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "port",
+                        "strategy"
+                    ],
+                    "formatEN": "create port rules [strategy][port]",
+                    "formatZH": "添加端口规则 [strategy] [port]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/firewall/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取防火墙规则列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Page firewall rules",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.RuleSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/firewall/update/addr": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 ip 防火墙规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.AddrRuleUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/hosts/firewall/update/description": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新防火墙描述",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Update rule description",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateFirewallDescription"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/hosts/firewall/update/port": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新端口防火墙规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PortRuleUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/hosts/monitor/clean": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清空监控数据",
+                "tags": [
+                    "Monitor"
+                ],
+                "summary": "Clean monitor datas",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "clean monitor datas",
+                    "formatZH": "清空监控数据",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/monitor/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取监控数据",
+                "tags": [
+                    "Monitor"
+                ],
+                "summary": "Load monitor datas",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MonitorSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/hosts/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取主机列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Page host",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchHostWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.HostTree"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/test/byid/:id": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "测试主机连接",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Test host conn by host id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "boolean"
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/test/byinfo": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "测试主机连接",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Test host conn by info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.HostConnTest"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/hosts/tree": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "加载主机树",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Load host tree",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchForTree"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.HostTree"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新主机",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Update host",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.HostOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "addr"
+                    ],
+                    "formatEN": "update host [name][addr]",
+                    "formatZH": "更新主机信息 [name][addr]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/update/group": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "切换分组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Update host group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangeHostGroup"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "hosts",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "addr",
+                            "output_value": "addr"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "group"
+                    ],
+                    "formatEN": "change host [addr] group =\u003e [group]",
+                    "formatZH": "切换主机[addr]分组 =\u003e [group]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/logs/clean": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清空操作日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Logs"
+                ],
+                "summary": "Clean operation logs",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CleanLog"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "logType"
+                    ],
+                    "formatEN": "Clean the [logType] log information",
+                    "formatZH": "清空 [logType] 日志信息",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/logs/login": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统登录日志列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Logs"
+                ],
+                "summary": "Page login logs",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchLgLogWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/logs/operation": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统操作日志列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Logs"
+                ],
+                "summary": "Page operation logs",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchOpLogWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/logs/system": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统日志",
+                "tags": [
+                    "Logs"
+                ],
+                "summary": "Load system logs",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/logs/system/files": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统日志文件列表",
+                "tags": [
+                    "Logs"
+                ],
+                "summary": "Load system log files",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/openresty": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 OpenResty 配置信息",
+                "tags": [
+                    "OpenResty"
+                ],
+                "summary": "Load OpenResty conf",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.FileInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/openresty/clear": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清理 OpenResty 代理缓存",
+                "tags": [
+                    "OpenResty"
+                ],
+                "summary": "Clear OpenResty proxy cache",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Clear nginx proxy cache",
+                    "formatZH": "清理 Openresty 代理缓存",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/openresty/file": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "上传更新 OpenResty 配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "OpenResty"
+                ],
+                "summary": "Update OpenResty conf by upload file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxConfigFileUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Update nginx conf",
+                    "formatZH": "更新 nginx 配置",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/openresty/scope": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取部分 OpenResty 配置信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "OpenResty"
+                ],
+                "summary": "Load partial OpenResty conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxScopeReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.NginxParam"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/openresty/status": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 OpenResty 状态信息",
+                "tags": [
+                    "OpenResty"
+                ],
+                "summary": "Load OpenResty status info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.NginxStatus"
+                        }
+                    }
+                }
+            }
+        },
+        "/openresty/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 OpenResty 配置信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "OpenResty"
+                ],
+                "summary": "Update OpenResty conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxConfigUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteId",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteId"
+                    ],
+                    "formatEN": "Update nginx conf [domain]",
+                    "formatZH": "更新 nginx 配置 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/process/stop": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "停止进程",
+                "tags": [
+                    "Process"
+                ],
+                "summary": "Stop Process",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.ProcessReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "PID"
+                    ],
+                    "formatEN": "结束进程 [PID]",
+                    "formatZH": "结束进程 [PID]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/runtimes": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建运行环境",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Create runtime",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.RuntimeCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Create runtime [name]",
+                    "formatZH": "创建运行环境 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/runtimes/:id": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取运行环境",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Get runtime",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除运行环境",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Delete runtime",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.RuntimeDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Delete website [name]",
+                    "formatZH": "删除网站 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/runtimes/node/modules": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 Node 项目的 modules",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Get Node modules",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NodeModuleReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/node/modules/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作 Node 项目 modules",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Operate Node modules",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NodeModuleReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/node/package": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 Node 项目的 scripts",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Get Node package scripts",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NodePackageReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作运行环境",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Operate runtime",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.RuntimeOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Operate runtime [name]",
+                    "formatZH": "操作运行环境 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/runtimes/php/extensions": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Create Extensions",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "PHP Extensions"
+                ],
+                "summary": "Create Extensions",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.PHPExtensionsCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/php/extensions/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Delete Extensions",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "PHP Extensions"
+                ],
+                "summary": "Delete Extensions",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.PHPExtensionsDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/php/extensions/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Page Extensions",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "PHP Extensions"
+                ],
+                "summary": "Page Extensions",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.PHPExtensionsSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.PHPExtensionsDTO"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/runtimes/php/extensions/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Update Extensions",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "PHP Extensions"
+                ],
+                "summary": "Update Extensions",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.PHPExtensionsUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取运行环境列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "List runtimes",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.RuntimeSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/sync": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "同步运行环境状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Sync runtime status",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新运行环境",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Update runtime",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.RuntimeUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Update runtime [name]",
+                    "formatZH": "更新运行环境 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建备份账号",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Create backup account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BackupOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type"
+                    ],
+                    "formatEN": "create backup account [type]",
+                    "formatZH": "创建备份账号 [type]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/backup": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "备份系统数据",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Backup system data",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CommonBackup"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type",
+                        "name",
+                        "detailName"
+                    ],
+                    "formatEN": "backup [type] data [name][detailName]",
+                    "formatZH": "备份 [type] 数据 [name][detailName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除备份账号",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Delete backup account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "backup_accounts",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "type",
+                            "output_value": "types"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "delete backup account [types]",
+                    "formatZH": "删除备份账号 [types]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/onedrive": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 OneDrive 信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Load OneDrive info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.OneDriveInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/backup/record/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除备份记录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Delete backup record",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDeleteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "backup_records",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "file_name",
+                            "output_value": "files"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete backup records [files]",
+                    "formatZH": "删除备份记录 [files]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/record/download": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载备份记录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Download backup record",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DownloadRecord"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "source",
+                        "fileName"
+                    ],
+                    "formatEN": "download backup records [source][fileName]",
+                    "formatZH": "下载备份记录 [source][fileName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/record/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取备份记录列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Page backup records",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.RecordSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/backup/record/search/bycronjob": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过计划任务获取备份记录列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Page backup records by cronjob",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.RecordSearchByCronjob"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/backup/recover": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "恢复系统数据",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Recover system data",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CommonRecover"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type",
+                        "name",
+                        "detailName",
+                        "file"
+                    ],
+                    "formatEN": "recover [type] data [name][detailName] from [file]",
+                    "formatZH": "从 [file] 恢复 [type] 数据 [name][detailName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/recover/byupload": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "从上传恢复系统数据",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Recover system data by upload",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CommonRecover"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type",
+                        "name",
+                        "detailName",
+                        "file"
+                    ],
+                    "formatEN": "recover [type] data [name][detailName] from [file]",
+                    "formatZH": "从 [file] 恢复 [type] 数据 [name][detailName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/refresh/onedrive": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "刷新 OneDrive token",
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Refresh OneDrive token",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/backup/search": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取备份账号列表",
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "List backup accounts",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.BackupInfo"
+                            }
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 bucket 列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "List buckets",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ForBuckets"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/backup/search/files": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取备份账号内文件列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "List files from backup accounts",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BackupSearchFile"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/backup/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新备份账号信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Update backup account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BackupOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type"
+                    ],
+                    "formatEN": "update backup account [types]",
+                    "formatZH": "更新备份账号 [types]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/basedir": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取安装根目录",
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load local backup dir",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/bind/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新系统监听信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update system bind info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BindInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "ipv6",
+                        "bindAddress"
+                    ],
+                    "formatEN": "update system bind info =\u003e ipv6: [ipv6], 监听 IP: [bindAddress]",
+                    "formatZH": "修改系统监听信息 =\u003e ipv6: [ipv6], 监听 IP: [bindAddress]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/expired/handle": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "重置过期系统登录密码",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Reset system password expired",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PasswordUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "reset an expired Password",
+                    "formatZH": "重置过期密码",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/interface": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统地址信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load system address",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/menu/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "隐藏高级功能菜单",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update system setting",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Hide advanced feature menu.",
+                    "formatZH": "隐藏高级功能菜单",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/mfa": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 mfa 信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load mfa info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MfaCredential"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/mfa.Otp"
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/mfa/bind": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Mfa 绑定",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Bind mfa",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MfaCredential"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "bind mfa",
+                    "formatZH": "mfa 绑定",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/password/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新系统登录密码",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update system password",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PasswordUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "update system password",
+                    "formatZH": "修改系统密码",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/port/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新系统端口",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update system port",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PortUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "serverPort"
+                    ],
+                    "formatEN": "update system port =\u003e [serverPort]",
+                    "formatZH": "修改系统端口 =\u003e [serverPort]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/proxy/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "服务器代理配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update proxy setting",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ProxyUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "proxyUrl",
+                        "proxyPort"
+                    ],
+                    "formatEN": "set proxy [proxyPort]:[proxyPort].",
+                    "formatZH": "服务器代理配置 [proxyPort]:[proxyPort]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "加载系统配置信息",
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load system setting info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/search/available": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统可用状态",
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load system available status",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/snapshot": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建系统快照",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Create system snapshot",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SnapshotCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "from",
+                        "description"
+                    ],
+                    "formatEN": "Create system backup [description] to [from]",
+                    "formatZH": "创建系统快照 [description] 到 [from]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/snapshot/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除系统快照",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Delete system backup",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SnapshotBatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "snapshots",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "Delete system backup [name]",
+                    "formatZH": "删除系统快照 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/snapshot/description/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新快照描述信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update snapshot description",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateDescription"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "snapshots",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "description"
+                    ],
+                    "formatEN": "The description of the snapshot [name] is modified =\u003e [description]",
+                    "formatZH": "快照 [name] 描述信息修改 [description]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/snapshot/import": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "导入已有快照",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Import system snapshot",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SnapshotImport"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "from",
+                        "names"
+                    ],
+                    "formatEN": "Sync system snapshots [names] from [from]",
+                    "formatZH": "从 [from] 同步系统快照 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/snapshot/recover": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "从系统快照恢复",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Recover system backup",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SnapshotRecover"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "snapshots",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Recover from system backup [name]",
+                    "formatZH": "从系统快照 [name] 恢复",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/snapshot/rollback": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "从系统快照回滚",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Rollback system backup",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SnapshotRecover"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "snapshots",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Rollback from system backup [name]",
+                    "formatZH": "从系统快照 [name] 回滚",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/snapshot/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统快照列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Page system snapshot",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/snapshot/status": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取快照状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load Snapshot status",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/ssl/download": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载证书",
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Download system cert",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/ssl/info": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取证书信息",
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load system cert info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/ssl/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改系统 ssl 登录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update system ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SSLUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "ssl"
+                    ],
+                    "formatEN": "update system ssl =\u003e [ssl]",
+                    "formatZH": "修改系统 ssl =\u003e [ssl]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新系统配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update system setting",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "value"
+                    ],
+                    "formatEN": "update system setting [key] =\u003e [value]",
+                    "formatZH": "修改系统配置 [key] =\u003e [value]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/upgrade": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取版本 release notes",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load release notes by version",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Upgrade"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "系统更新",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Upgrade",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Upgrade"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "version"
+                    ],
+                    "formatEN": "upgrade system =\u003e [version]",
+                    "formatZH": "更新系统 =\u003e [version]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建扫描规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Create clam",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "path"
+                    ],
+                    "formatEN": "create clam [name][path]",
+                    "formatZH": "创建扫描规则 [name][path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam/base": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 Clam 基础信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Load clam base info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamBaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/clam/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除扫描规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Delete clam",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "clams",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete clam [names]",
+                    "formatZH": "删除扫描规则 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam/file/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取扫描文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Load clam file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamFileReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/clam/file/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新病毒扫描配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Update clam file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateByNameAndFile"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/clam/handle": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "执行病毒扫描",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Handle clam scan",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "clams",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "handle clam scan [name]",
+                    "formatZH": "执行病毒扫描 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 Clam 状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Operate Clam",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Operate"
+                        }
+                    }
+                ],
+                "responses": {},
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operation"
+                    ],
+                    "formatEN": "[operation] FTP",
+                    "formatZH": "[operation] Clam",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam/record/clean": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清空扫描报告",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Clean clam record",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {},
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "clams",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "clean clam record [name]",
+                    "formatZH": "清空扫描报告 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam/record/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取扫描结果详情",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Load clam record detail",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamLogReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/clam/record/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取扫描结果列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Page clam record",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamLogSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/clam/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取扫描规则列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Page clam",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/clam/status/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改扫描规则状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Update clam status",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamUpdateStatus"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "clams",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "status"
+                    ],
+                    "formatEN": "change the status of clam [name] to [status].",
+                    "formatZH": "修改扫描规则 [name] 状态为 [status]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改扫描规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Update clam",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "path"
+                    ],
+                    "formatEN": "update clam [name][path]",
+                    "formatZH": "修改扫描规则 [name][path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clean": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清理系统垃圾文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Clean system",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.Clean"
+                            }
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Clean system junk files",
+                    "formatZH": "清理系统垃圾文件",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/device/base": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取设备基础信息",
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Load device base info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.DeviceBaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/device/check/dns": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "检查系统 DNS 配置可用性",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Check device DNS conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/device/conf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "load conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithName"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/device/update/byconf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过文件修改配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Update device conf by file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateByNameAndFile"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/device/update/conf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改系统参数",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Update device",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "value"
+                    ],
+                    "formatEN": "update device conf [key] =\u003e [value]",
+                    "formatZH": "修改主机参数 [key] =\u003e [value]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/device/update/host": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改系统 hosts",
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Update device hosts",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "value"
+                    ],
+                    "formatEN": "update device host [key] =\u003e [value]",
+                    "formatZH": "修改主机 Host [key] =\u003e [value]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/device/update/passwd": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改系统密码",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Update device passwd",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangePasswd"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/device/update/swap": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改系统 Swap",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Update device swap",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SwapHelper"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operate",
+                        "path"
+                    ],
+                    "formatEN": "[operate] device swap [path]",
+                    "formatZH": "[operate] 主机 swap [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/device/zone/options": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统可用时区选项",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "list time zone options",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "Array"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/fail2ban/base": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 Fail2ban 基础信息",
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Load fail2ban base info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.Fail2BanBaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/fail2ban/load/conf": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 fail2ban 配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Load fail2ban conf",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/fail2ban/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 Fail2ban 状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Operate fail2ban",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Operate"
+                        }
+                    }
+                ],
+                "responses": {},
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operation"
+                    ],
+                    "formatEN": "[operation] Fail2ban",
+                    "formatZH": "[operation] Fail2ban",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/fail2ban/operate/sshd": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "配置 sshd",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Operate sshd of fail2ban",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Operate"
+                        }
+                    }
+                ],
+                "responses": {}
+            }
+        },
+        "/toolbox/fail2ban/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 Fail2ban ip",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Page fail2ban ip list",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Fail2BanSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "Array"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/fail2ban/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 Fail2ban 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Update fail2ban conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Fail2BanUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "value"
+                    ],
+                    "formatEN": "update fail2ban conf [key] =\u003e [value]",
+                    "formatZH": "修改 Fail2ban 配置 [key] =\u003e [value]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/fail2ban/update/byconf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过文件修改 fail2ban 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Update fail2ban conf by file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateByFile"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/ftp": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建 FTP 账户",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Create FTP user",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.FtpCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "user",
+                        "path"
+                    ],
+                    "formatEN": "create FTP [user][path]",
+                    "formatZH": "创建 FTP 账户 [user][path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/ftp/base": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 FTP 基础信息",
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Load FTP base info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.FtpBaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/ftp/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除 FTP 账户",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Delete FTP user",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDeleteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "ftps",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "user",
+                            "output_value": "users"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete FTP users [users]",
+                    "formatZH": "删除 FTP 账户 [users]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/ftp/log/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 FTP 操作日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Load FTP operation log",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.FtpLogSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/ftp/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 FTP 状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Operate FTP",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Operate"
+                        }
+                    }
+                ],
+                "responses": {},
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operation"
+                    ],
+                    "formatEN": "[operation] FTP",
+                    "formatZH": "[operation] FTP",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/ftp/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 FTP 账户列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Page FTP user",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/ftp/sync": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "同步 FTP 账户",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Sync FTP user",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDeleteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "sync FTP users",
+                    "formatZH": "同步 FTP 账户",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/ftp/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 FTP 账户",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Update FTP user",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.FtpUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "user",
+                        "path"
+                    ],
+                    "formatEN": "update FTP [user][path]",
+                    "formatZH": "修改 FTP 账户 [user][path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/scan": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "扫描系统垃圾文件",
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Scan system",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "scan System Junk Files",
+                    "formatZH": "扫描系统垃圾文件",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建网站",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Create website",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "primaryDomain"
+                    ],
+                    "formatEN": "Create website [primaryDomain]",
+                    "formatZH": "创建网站 [primaryDomain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/:id": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 id 查询网站",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Search website by id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteDTO"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/:id/config/:type": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 id 查询网站 nginx",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Nginx"
+                ],
+                "summary": "Search website nginx by id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.FileInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/:id/https": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 https 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website HTTPS"
+                ],
+                "summary": "Load https conf",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteHTTPS"
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 https 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website HTTPS"
+                ],
+                "summary": "Update https conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteHTTPSOp"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteHTTPS"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteId",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteId"
+                    ],
+                    "formatEN": "Update website https [domain] conf",
+                    "formatZH": "更新网站 [domain] https 配置",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/acme": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建网站 acme",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Acme"
+                ],
+                "summary": "Create website acme account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteAcmeAccountCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteAcmeAccountDTO"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "email"
+                    ],
+                    "formatEN": "Create website acme [email]",
+                    "formatZH": "创建网站 acme [email]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/acme/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除网站 acme",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Acme"
+                ],
+                "summary": "Delete website acme account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteResourceReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_acme_accounts",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "email",
+                            "output_value": "email"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Delete website acme [email]",
+                    "formatZH": "删除网站 acme [email]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/acme/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站 acme 列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Acme"
+                ],
+                "summary": "Page website acme accounts",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/auths": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取密码访问配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get AuthBasic conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxAuthReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/auths/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新密码访问配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get AuthBasic conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxAuthUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/ca": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建网站 ca",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Create website ca",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCACreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCACreate"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Create website ca [name]",
+                    "formatZH": "创建网站 ca [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ca/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除网站 ca",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Delete website ca",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCommonReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_cas",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Delete website ca [name]",
+                    "formatZH": "删除网站 ca [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ca/download": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载 CA 证书文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Download CA file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteResourceReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_cas",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "download ca file [name]",
+                    "formatZH": "下载 CA 证书文件 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ca/obtain": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "自签 SSL 证书",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Obtain SSL",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCAObtain"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_cas",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Obtain SSL [name]",
+                    "formatZH": "自签 SSL 证书 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ca/renew": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "续签 SSL 证书",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Obtain SSL",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCAObtain"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_cas",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Obtain SSL [name]",
+                    "formatZH": "自签 SSL 证书 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ca/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站 ca 列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Page website ca",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCASearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/ca/{id}": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站 ca",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Get website ca",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "id",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteCADTO"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "网站创建前检查",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Check before create website",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteInstallCheckReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.WebsitePreInstallCheck"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/config": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 nginx 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Nginx"
+                ],
+                "summary": "Load nginx conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxScopeReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteNginxConfig"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/config/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 nginx 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Nginx"
+                ],
+                "summary": "Update nginx conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxConfigUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteId",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteId"
+                    ],
+                    "formatEN": "Nginx conf update [domain]",
+                    "formatZH": "nginx 配置修改 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/default/html/:type": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取默认 html",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get default html",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.FileInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/default/html/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新默认 html",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update default html",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteHtmlUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type"
+                    ],
+                    "formatEN": "Update default html",
+                    "formatZH": "更新默认 html",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/default/server": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作网站日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Change default server",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDefaultUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "operate"
+                    ],
+                    "formatEN": "Change default server =\u003e [domain]",
+                    "formatZH": "修改默认 server =\u003e [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除网站",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Delete website",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Delete website [domain]",
+                    "formatZH": "删除网站 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/dir": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站目录配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get website dir",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCommonReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/dir/permission": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新网站目录权限",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update Site Dir permission",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteUpdateDirPermission"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update  domain [domain] dir permission",
+                    "formatZH": "更新网站 [domain] 目录权限",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/dir/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新网站目录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update Site Dir",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteUpdateDir"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update  domain [domain] dir",
+                    "formatZH": "更新网站 [domain] 目录",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/dns": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建网站 dns",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website DNS"
+                ],
+                "summary": "Create website dns account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDnsAccountCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Create website dns [name]",
+                    "formatZH": "创建网站 dns [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/dns/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除网站 dns",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website DNS"
+                ],
+                "summary": "Delete website dns account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteResourceReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_dns_accounts",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Delete website dns [name]",
+                    "formatZH": "删除网站 dns [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/dns/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站 dns 列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website DNS"
+                ],
+                "summary": "Page website dns accounts",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/dns/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新网站 dns",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website DNS"
+                ],
+                "summary": "Update website dns account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDnsAccountUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Update website dns [name]",
+                    "formatZH": "更新网站 dns [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/domains": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建网站域名",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Domain"
+                ],
+                "summary": "Create website domain",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDomainCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/model.WebsiteDomain"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "domain"
+                    ],
+                    "formatEN": "Create domain [domain]",
+                    "formatZH": "创建域名 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/domains/:websiteId": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过网站 id 查询域名",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Domain"
+                ],
+                "summary": "Search website domains by websiteId",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "websiteId",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/model.WebsiteDomain"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/domains/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除网站域名",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Domain"
+                ],
+                "summary": "Delete website domain",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDomainDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_domains",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Delete domain [domain]",
+                    "formatZH": "删除域名 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/leech": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取防盗链配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get AntiLeech conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxCommonReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/leech/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新防盗链配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update AntiLeech",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxAntiLeechUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/list": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站列表",
+                "tags": [
+                    "Website"
+                ],
+                "summary": "List websites",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.WebsiteDTO"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作网站日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Operate website log",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteLogReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteLog"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "operate"
+                    ],
+                    "formatEN": "[domain][operate] logs",
+                    "formatZH": "[domain][operate] 日志",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/nginx/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 网站 nginx 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Nginx"
+                ],
+                "summary": "Update website nginx conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteNginxUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "[domain] Nginx conf update",
+                    "formatZH": "[domain] Nginx 配置修改",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作网站",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Operate website",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteOp"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "operate"
+                    ],
+                    "formatEN": "[operate] website [domain]",
+                    "formatZH": "[operate] 网站 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/options": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站列表",
+                "tags": [
+                    "Website"
+                ],
+                "summary": "List website names",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/php/config": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 网站 PHP 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website PHP"
+                ],
+                "summary": "Update website php conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsitePHPConfigUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "[domain] PHP conf update",
+                    "formatZH": "[domain] PHP 配置修改",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/php/config/:id": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站 php 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Load website php conf",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.PHPConfig"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/php/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 php 配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website PHP"
+                ],
+                "summary": "Update php conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsitePHPFileUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteId",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteId"
+                    ],
+                    "formatEN": "Nginx conf update [domain]",
+                    "formatZH": "php 配置修改 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/php/version": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "变更 php 版本",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website PHP"
+                ],
+                "summary": "Update php version",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsitePHPVersionReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteId",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteId"
+                    ],
+                    "formatEN": "php version update [domain]",
+                    "formatZH": "php 版本变更 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/proxies": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取反向代理配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get proxy conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteProxyReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/proxies/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改反向代理配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update proxy conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteProxyConfig"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update domain [domain] proxy config",
+                    "formatZH": "修改网站 [domain] 反向代理配置 ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/proxy/file": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新反向代理文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update proxy file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxProxyUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteID",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteID"
+                    ],
+                    "formatEN": "Nginx conf proxy file update [domain]",
+                    "formatZH": "更新反向代理文件 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/redirect": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取重定向配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get redirect conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteProxyReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/redirect/file": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新重定向文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update redirect file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxRedirectUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteID",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteID"
+                    ],
+                    "formatEN": "Nginx conf redirect file update [domain]",
+                    "formatZH": "更新重定向文件 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/redirect/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改重定向配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update redirect conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxRedirectReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteID",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteID"
+                    ],
+                    "formatEN": "Update domain [domain] redirect config",
+                    "formatZH": "修改网站 [domain] 重定向理配置 ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/rewrite": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取伪静态配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get rewrite conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxRewriteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/rewrite/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新伪静态配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update rewrite conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxRewriteUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteID",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteID"
+                    ],
+                    "formatEN": "Nginx conf rewrite update [domain]",
+                    "formatZH": "伪静态配置修改 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Page websites",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/ssl": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建网站 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Create website ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSSLCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSSLCreate"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "primaryDomain"
+                    ],
+                    "formatEN": "Create website ssl [primaryDomain]",
+                    "formatZH": "创建网站 ssl [primaryDomain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ssl/:id": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 id 查询 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Search website ssl by id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/ssl/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除网站 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Delete website ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteBatchDelReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_ssls",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "Delete ssl [domain]",
+                    "formatZH": "删除 ssl [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ssl/download": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载证书文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Download SSL  file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteResourceReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_ssls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "download ssl file [domain]",
+                    "formatZH": "下载证书文件 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ssl/obtain": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "申请证书",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Apply  ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSSLApply"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_ssls",
+                            "input_column": "id",
+                            "input_value": "ID",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ID"
+                    ],
+                    "formatEN": "apply ssl [domain]",
+                    "formatZH": "申请证书  [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ssl/resolve": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "解析网站 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Resolve website ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDNSReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.WebsiteDNSRes"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/ssl/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站 ssl 列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Page website ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSSLSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/ssl/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Update ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSSLUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_ssls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update ssl config [domain]",
+                    "formatZH": "更新证书设置 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ssl/upload": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "上传 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Upload ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSSLUpload"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type"
+                    ],
+                    "formatEN": "Upload ssl [type]",
+                    "formatZH": "上传 ssl [type]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ssl/website/:websiteId": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过网站 id 查询 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Search website ssl by website id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "websiteId",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新网站",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update website",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "primaryDomain"
+                    ],
+                    "formatEN": "Update website [primaryDomain]",
+                    "formatZH": "更新网站 [primaryDomain]",
+                    "paramKeys": []
+                }
+            }
+        }
+    },
+    "definitions": {
+        "dto.AddrRuleOperate": {
+            "type": "object",
+            "required": [
+                "address",
+                "operation",
+                "strategy"
+            ],
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "operation": {
+                    "type": "string",
+                    "enum": [
+                        "add",
+                        "remove"
+                    ]
+                },
+                "strategy": {
+                    "type": "string",
+                    "enum": [
+                        "accept",
+                        "drop"
+                    ]
+                }
+            }
+        },
+        "dto.AddrRuleUpdate": {
+            "type": "object",
+            "properties": {
+                "newRule": {
+                    "$ref": "#/definitions/dto.AddrRuleOperate"
+                },
+                "oldRule": {
+                    "$ref": "#/definitions/dto.AddrRuleOperate"
+                }
+            }
+        },
+        "dto.AppInstallInfo": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "key": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.AppResource": {
+            "type": "object",
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.AppVersion": {
+            "type": "object",
+            "properties": {
+                "detailId": {
+                    "type": "integer"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.BackupInfo": {
+            "type": "object",
+            "properties": {
+                "backupPath": {
+                    "type": "string"
+                },
+                "bucket": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "vars": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.BackupOperate": {
+            "type": "object",
+            "required": [
+                "type",
+                "vars"
+            ],
+            "properties": {
+                "accessKey": {
+                    "type": "string"
+                },
+                "backupPath": {
+                    "type": "string"
+                },
+                "bucket": {
+                    "type": "string"
+                },
+                "credential": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "vars": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.BackupSearchFile": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.BatchDelete": {
+            "type": "object",
+            "required": [
+                "names"
+            ],
+            "properties": {
+                "force": {
+                    "type": "boolean"
+                },
+                "names": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "dto.BatchDeleteReq": {
+            "type": "object",
+            "required": [
+                "ids"
+            ],
+            "properties": {
+                "ids": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
+        "dto.BatchRuleOperate": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "rules": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.PortRuleOperate"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.BindInfo": {
+            "type": "object",
+            "required": [
+                "bindAddress",
+                "ipv6"
+            ],
+            "properties": {
+                "bindAddress": {
+                    "type": "string"
+                },
+                "ipv6": {
+                    "type": "string",
+                    "enum": [
+                        "enable",
+                        "disable"
+                    ]
+                }
+            }
+        },
+        "dto.BindUser": {
+            "type": "object",
+            "required": [
+                "database",
+                "db",
+                "password",
+                "permission",
+                "username"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "db": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "permission": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CaptchaResponse": {
+            "type": "object",
+            "properties": {
+                "captchaID": {
+                    "type": "string"
+                },
+                "imagePath": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ChangeDBInfo": {
+            "type": "object",
+            "required": [
+                "database",
+                "from",
+                "type",
+                "value"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "local",
+                        "remote"
+                    ]
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "mysql",
+                        "mariadb",
+                        "postgresql"
+                    ]
+                },
+                "value": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ChangeHostGroup": {
+            "type": "object",
+            "required": [
+                "groupID",
+                "id"
+            ],
+            "properties": {
+                "groupID": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.ChangePasswd": {
+            "type": "object",
+            "properties": {
+                "passwd": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ChangeRedisPass": {
+            "type": "object",
+            "required": [
+                "database"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "value": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamBaseInfo": {
+            "type": "object",
+            "properties": {
+                "freshIsActive": {
+                    "type": "boolean"
+                },
+                "freshIsExist": {
+                    "type": "boolean"
+                },
+                "freshVersion": {
+                    "type": "string"
+                },
+                "isActive": {
+                    "type": "boolean"
+                },
+                "isExist": {
+                    "type": "boolean"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamCreate": {
+            "type": "object",
+            "properties": {
+                "description": {
+                    "type": "string"
+                },
+                "infectedDir": {
+                    "type": "string"
+                },
+                "infectedStrategy": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "spec": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamDelete": {
+            "type": "object",
+            "required": [
+                "ids"
+            ],
+            "properties": {
+                "ids": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                },
+                "removeInfected": {
+                    "type": "boolean"
+                },
+                "removeRecord": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "dto.ClamFileReq": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "tail": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamLogReq": {
+            "type": "object",
+            "properties": {
+                "clamName": {
+                    "type": "string"
+                },
+                "recordName": {
+                    "type": "string"
+                },
+                "tail": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamLogSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "clamID": {
+                    "type": "integer"
+                },
+                "endTime": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "startTime": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamUpdate": {
+            "type": "object",
+            "properties": {
+                "description": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "infectedDir": {
+                    "type": "string"
+                },
+                "infectedStrategy": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "spec": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamUpdateStatus": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.Clean": {
+            "type": "object",
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "size": {
+                    "type": "integer"
+                },
+                "treeType": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CleanLog": {
+            "type": "object",
+            "required": [
+                "logType"
+            ],
+            "properties": {
+                "logType": {
+                    "type": "string",
+                    "enum": [
+                        "login",
+                        "operation"
+                    ]
+                }
+            }
+        },
+        "dto.CommandInfo": {
+            "type": "object",
+            "properties": {
+                "command": {
+                    "type": "string"
+                },
+                "groupBelong": {
+                    "type": "string"
+                },
+                "groupID": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CommandOperate": {
+            "type": "object",
+            "required": [
+                "command",
+                "name"
+            ],
+            "properties": {
+                "command": {
+                    "type": "string"
+                },
+                "groupBelong": {
+                    "type": "string"
+                },
+                "groupID": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CommonBackup": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "detailName": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "app",
+                        "mysql",
+                        "mariadb",
+                        "redis",
+                        "website",
+                        "postgresql"
+                    ]
+                }
+            }
+        },
+        "dto.CommonRecover": {
+            "type": "object",
+            "required": [
+                "source",
+                "type"
+            ],
+            "properties": {
+                "detailName": {
+                    "type": "string"
+                },
+                "file": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                },
+                "source": {
+                    "type": "string",
+                    "enum": [
+                        "OSS",
+                        "S3",
+                        "SFTP",
+                        "MINIO",
+                        "LOCAL",
+                        "COS",
+                        "KODO",
+                        "OneDrive",
+                        "WebDAV"
+                    ]
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "app",
+                        "mysql",
+                        "mariadb",
+                        "redis",
+                        "website",
+                        "postgresql"
+                    ]
+                }
+            }
+        },
+        "dto.ComposeCreate": {
+            "type": "object",
+            "required": [
+                "from"
+            ],
+            "properties": {
+                "file": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "edit",
+                        "path",
+                        "template"
+                    ]
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "template": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.ComposeOperation": {
+            "type": "object",
+            "required": [
+                "name",
+                "operation",
+                "path"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "operation": {
+                    "type": "string",
+                    "enum": [
+                        "start",
+                        "stop",
+                        "down"
+                    ]
+                },
+                "path": {
+                    "type": "string"
+                },
+                "withFile": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "dto.ComposeTemplateCreate": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ComposeTemplateInfo": {
+            "type": "object",
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ComposeTemplateUpdate": {
+            "type": "object",
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.ComposeUpdate": {
+            "type": "object",
+            "required": [
+                "content",
+                "name",
+                "path"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ContainerCommit": {
+            "type": "object",
+            "required": [
+                "containerID"
+            ],
+            "properties": {
+                "author": {
+                    "type": "string"
+                },
+                "comment": {
+                    "type": "string"
+                },
+                "containerID": {
+                    "type": "string"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "newImageName": {
+                    "type": "string"
+                },
+                "pause": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "dto.ContainerListStats": {
+            "type": "object",
+            "properties": {
+                "containerID": {
+                    "type": "string"
+                },
+                "cpuPercent": {
+                    "type": "number"
+                },
+                "cpuTotalUsage": {
+                    "type": "integer"
+                },
+                "memoryCache": {
+                    "type": "integer"
+                },
+                "memoryLimit": {
+                    "type": "integer"
+                },
+                "memoryPercent": {
+                    "type": "number"
+                },
+                "memoryUsage": {
+                    "type": "integer"
+                },
+                "percpuUsage": {
+                    "type": "integer"
+                },
+                "systemUsage": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.ContainerOperate": {
+            "type": "object",
+            "required": [
+                "image",
+                "name"
+            ],
+            "properties": {
+                "autoRemove": {
+                    "type": "boolean"
+                },
+                "cmd": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "containerID": {
+                    "type": "string"
+                },
+                "cpuShares": {
+                    "type": "integer"
+                },
+                "entrypoint": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "env": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "exposedPorts": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.PortHelper"
+                    }
+                },
+                "forcePull": {
+                    "type": "boolean"
+                },
+                "image": {
+                    "type": "string"
+                },
+                "ipv4": {
+                    "type": "string"
+                },
+                "ipv6": {
+                    "type": "string"
+                },
+                "labels": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "memory": {
+                    "type": "number"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "nanoCPUs": {
+                    "type": "number"
+                },
+                "network": {
+                    "type": "string"
+                },
+                "openStdin": {
+                    "type": "boolean"
+                },
+                "privileged": {
+                    "type": "boolean"
+                },
+                "publishAllPorts": {
+                    "type": "boolean"
+                },
+                "restartPolicy": {
+                    "type": "string"
+                },
+                "tty": {
+                    "type": "boolean"
+                },
+                "volumes": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.VolumeHelper"
+                    }
+                }
+            }
+        },
+        "dto.ContainerOperation": {
+            "type": "object",
+            "required": [
+                "names",
+                "operation"
+            ],
+            "properties": {
+                "names": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "operation": {
+                    "type": "string",
+                    "enum": [
+                        "start",
+                        "stop",
+                        "restart",
+                        "kill",
+                        "pause",
+                        "unpause",
+                        "remove"
+                    ]
+                }
+            }
+        },
+        "dto.ContainerPrune": {
+            "type": "object",
+            "required": [
+                "pruneType"
+            ],
+            "properties": {
+                "pruneType": {
+                    "type": "string",
+                    "enum": [
+                        "container",
+                        "image",
+                        "volume",
+                        "network",
+                        "buildcache"
+                    ]
+                },
+                "withTagAll": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "dto.ContainerPruneReport": {
+            "type": "object",
+            "properties": {
+                "deletedNumber": {
+                    "type": "integer"
+                },
+                "spaceReclaimed": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.ContainerRename": {
+            "type": "object",
+            "required": [
+                "name",
+                "newName"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "newName": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ContainerStats": {
+            "type": "object",
+            "properties": {
+                "cache": {
+                    "type": "number"
+                },
+                "cpuPercent": {
+                    "type": "number"
+                },
+                "ioRead": {
+                    "type": "number"
+                },
+                "ioWrite": {
+                    "type": "number"
+                },
+                "memory": {
+                    "type": "number"
+                },
+                "networkRX": {
+                    "type": "number"
+                },
+                "networkTX": {
+                    "type": "number"
+                },
+                "shotTime": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ContainerUpgrade": {
+            "type": "object",
+            "required": [
+                "image",
+                "name"
+            ],
+            "properties": {
+                "forcePull": {
+                    "type": "boolean"
+                },
+                "image": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CronjobBatchDelete": {
+            "type": "object",
+            "required": [
+                "ids"
+            ],
+            "properties": {
+                "cleanData": {
+                    "type": "boolean"
+                },
+                "ids": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
+        "dto.CronjobClean": {
+            "type": "object",
+            "required": [
+                "cronjobID"
+            ],
+            "properties": {
+                "cleanData": {
+                    "type": "boolean"
+                },
+                "cronjobID": {
+                    "type": "integer"
+                },
+                "isDelete": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "dto.CronjobCreate": {
+            "type": "object",
+            "required": [
+                "name",
+                "spec",
+                "type"
+            ],
+            "properties": {
+                "appID": {
+                    "type": "string"
+                },
+                "backupAccounts": {
+                    "type": "string"
+                },
+                "command": {
+                    "type": "string"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "dbName": {
+                    "type": "string"
+                },
+                "dbType": {
+                    "type": "string"
+                },
+                "defaultDownload": {
+                    "type": "string"
+                },
+                "exclusionRules": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "retainCopies": {
+                    "type": "integer",
+                    "minimum": 1
+                },
+                "script": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                },
+                "sourceDir": {
+                    "type": "string"
+                },
+                "spec": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                },
+                "website": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CronjobDownload": {
+            "type": "object",
+            "required": [
+                "backupAccountID",
+                "recordID"
+            ],
+            "properties": {
+                "backupAccountID": {
+                    "type": "integer"
+                },
+                "recordID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.CronjobUpdate": {
+            "type": "object",
+            "required": [
+                "id",
+                "name",
+                "spec"
+            ],
+            "properties": {
+                "appID": {
+                    "type": "string"
+                },
+                "backupAccounts": {
+                    "type": "string"
+                },
+                "command": {
+                    "type": "string"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "dbName": {
+                    "type": "string"
+                },
+                "dbType": {
+                    "type": "string"
+                },
+                "defaultDownload": {
+                    "type": "string"
+                },
+                "exclusionRules": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "retainCopies": {
+                    "type": "integer",
+                    "minimum": 1
+                },
+                "script": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                },
+                "sourceDir": {
+                    "type": "string"
+                },
+                "spec": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                },
+                "website": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CronjobUpdateStatus": {
+            "type": "object",
+            "required": [
+                "id",
+                "status"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DBBaseInfo": {
+            "type": "object",
+            "properties": {
+                "containerName": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.DBConfUpdateByFile": {
+            "type": "object",
+            "required": [
+                "database",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "file": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "mysql",
+                        "mariadb",
+                        "postgresql",
+                        "redis"
+                    ]
+                }
+            }
+        },
+        "dto.DaemonJsonConf": {
+            "type": "object",
+            "properties": {
+                "cgroupDriver": {
+                    "type": "string"
+                },
+                "experimental": {
+                    "type": "boolean"
+                },
+                "fixedCidrV6": {
+                    "type": "string"
+                },
+                "insecureRegistries": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "ip6Tables": {
+                    "type": "boolean"
+                },
+                "iptables": {
+                    "type": "boolean"
+                },
+                "ipv6": {
+                    "type": "boolean"
+                },
+                "isSwarm": {
+                    "type": "boolean"
+                },
+                "liveRestore": {
+                    "type": "boolean"
+                },
+                "logMaxFile": {
+                    "type": "string"
+                },
+                "logMaxSize": {
+                    "type": "string"
+                },
+                "registryMirrors": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "status": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DaemonJsonUpdateByFile": {
+            "type": "object",
+            "properties": {
+                "file": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DashboardBase": {
+            "type": "object",
+            "properties": {
+                "appInstalledNumber": {
+                    "type": "integer"
+                },
+                "cpuCores": {
+                    "type": "integer"
+                },
+                "cpuLogicalCores": {
+                    "type": "integer"
+                },
+                "cpuModelName": {
+                    "type": "string"
+                },
+                "cronjobNumber": {
+                    "type": "integer"
+                },
+                "currentInfo": {
+                    "$ref": "#/definitions/dto.DashboardCurrent"
+                },
+                "databaseNumber": {
+                    "type": "integer"
+                },
+                "hostname": {
+                    "type": "string"
+                },
+                "kernelArch": {
+                    "type": "string"
+                },
+                "kernelVersion": {
+                    "type": "string"
+                },
+                "os": {
+                    "type": "string"
+                },
+                "platform": {
+                    "type": "string"
+                },
+                "platformFamily": {
+                    "type": "string"
+                },
+                "platformVersion": {
+                    "type": "string"
+                },
+                "virtualizationSystem": {
+                    "type": "string"
+                },
+                "websiteNumber": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.DashboardCurrent": {
+            "type": "object",
+            "properties": {
+                "cpuPercent": {
+                    "type": "array",
+                    "items": {
+                        "type": "number"
+                    }
+                },
+                "cpuTotal": {
+                    "type": "integer"
+                },
+                "cpuUsed": {
+                    "type": "number"
+                },
+                "cpuUsedPercent": {
+                    "type": "number"
+                },
+                "diskData": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.DiskInfo"
+                    }
+                },
+                "gpuData": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.GPUInfo"
+                    }
+                },
+                "ioCount": {
+                    "type": "integer"
+                },
+                "ioReadBytes": {
+                    "type": "integer"
+                },
+                "ioReadTime": {
+                    "type": "integer"
+                },
+                "ioWriteBytes": {
+                    "type": "integer"
+                },
+                "ioWriteTime": {
+                    "type": "integer"
+                },
+                "load1": {
+                    "type": "number"
+                },
+                "load15": {
+                    "type": "number"
+                },
+                "load5": {
+                    "type": "number"
+                },
+                "loadUsagePercent": {
+                    "type": "number"
+                },
+                "memoryAvailable": {
+                    "type": "integer"
+                },
+                "memoryTotal": {
+                    "type": "integer"
+                },
+                "memoryUsed": {
+                    "type": "integer"
+                },
+                "memoryUsedPercent": {
+                    "type": "number"
+                },
+                "netBytesRecv": {
+                    "type": "integer"
+                },
+                "netBytesSent": {
+                    "type": "integer"
+                },
+                "procs": {
+                    "type": "integer"
+                },
+                "shotTime": {
+                    "type": "string"
+                },
+                "swapMemoryAvailable": {
+                    "type": "integer"
+                },
+                "swapMemoryTotal": {
+                    "type": "integer"
+                },
+                "swapMemoryUsed": {
+                    "type": "integer"
+                },
+                "swapMemoryUsedPercent": {
+                    "type": "number"
+                },
+                "timeSinceUptime": {
+                    "type": "string"
+                },
+                "uptime": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.DatabaseCreate": {
+            "type": "object",
+            "required": [
+                "from",
+                "name",
+                "type",
+                "username",
+                "version"
+            ],
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "clientCert": {
+                    "type": "string"
+                },
+                "clientKey": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "local",
+                        "remote"
+                    ]
+                },
+                "name": {
+                    "type": "string",
+                    "maxLength": 256
+                },
+                "password": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "rootCert": {
+                    "type": "string"
+                },
+                "skipVerify": {
+                    "type": "boolean"
+                },
+                "ssl": {
+                    "type": "boolean"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DatabaseDelete": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "deleteBackup": {
+                    "type": "boolean"
+                },
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.DatabaseInfo": {
+            "type": "object",
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "clientCert": {
+                    "type": "string"
+                },
+                "clientKey": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string",
+                    "maxLength": 256
+                },
+                "password": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "rootCert": {
+                    "type": "string"
+                },
+                "skipVerify": {
+                    "type": "boolean"
+                },
+                "ssl": {
+                    "type": "boolean"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DatabaseItem": {
+            "type": "object",
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DatabaseOption": {
+            "type": "object",
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "database": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DatabaseSearch": {
+            "type": "object",
+            "required": [
+                "order",
+                "orderBy",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "info": {
+                    "type": "string"
+                },
+                "order": {
+                    "type": "string",
+                    "enum": [
+                        "null",
+                        "ascending",
+                        "descending"
+                    ]
+                },
+                "orderBy": {
+                    "type": "string",
+                    "enum": [
+                        "name",
+                        "created_at"
+                    ]
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DatabaseUpdate": {
+            "type": "object",
+            "required": [
+                "type",
+                "username",
+                "version"
+            ],
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "clientCert": {
+                    "type": "string"
+                },
+                "clientKey": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "rootCert": {
+                    "type": "string"
+                },
+                "skipVerify": {
+                    "type": "boolean"
+                },
+                "ssl": {
+                    "type": "boolean"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DeviceBaseInfo": {
+            "type": "object",
+            "properties": {
+                "dns": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "hostname": {
+                    "type": "string"
+                },
+                "hosts": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.HostHelper"
+                    }
+                },
+                "localTime": {
+                    "type": "string"
+                },
+                "maxSize": {
+                    "type": "integer"
+                },
+                "ntp": {
+                    "type": "string"
+                },
+                "swapDetails": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.SwapHelper"
+                    }
+                },
+                "swapMemoryAvailable": {
+                    "type": "integer"
+                },
+                "swapMemoryTotal": {
+                    "type": "integer"
+                },
+                "swapMemoryUsed": {
+                    "type": "integer"
+                },
+                "timeZone": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DiskInfo": {
+            "type": "object",
+            "properties": {
+                "device": {
+                    "type": "string"
+                },
+                "free": {
+                    "type": "integer"
+                },
+                "inodesFree": {
+                    "type": "integer"
+                },
+                "inodesTotal": {
+                    "type": "integer"
+                },
+                "inodesUsed": {
+                    "type": "integer"
+                },
+                "inodesUsedPercent": {
+                    "type": "number"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "total": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "used": {
+                    "type": "integer"
+                },
+                "usedPercent": {
+                    "type": "number"
+                }
+            }
+        },
+        "dto.DockerOperation": {
+            "type": "object",
+            "required": [
+                "operation"
+            ],
+            "properties": {
+                "operation": {
+                    "type": "string",
+                    "enum": [
+                        "start",
+                        "restart",
+                        "stop"
+                    ]
+                }
+            }
+        },
+        "dto.DownloadRecord": {
+            "type": "object",
+            "required": [
+                "fileDir",
+                "fileName",
+                "source"
+            ],
+            "properties": {
+                "fileDir": {
+                    "type": "string"
+                },
+                "fileName": {
+                    "type": "string"
+                },
+                "source": {
+                    "type": "string",
+                    "enum": [
+                        "OSS",
+                        "S3",
+                        "SFTP",
+                        "MINIO",
+                        "LOCAL",
+                        "COS",
+                        "KODO",
+                        "OneDrive",
+                        "WebDAV"
+                    ]
+                }
+            }
+        },
+        "dto.Fail2BanBaseInfo": {
+            "type": "object",
+            "properties": {
+                "banAction": {
+                    "type": "string"
+                },
+                "banTime": {
+                    "type": "string"
+                },
+                "findTime": {
+                    "type": "string"
+                },
+                "isActive": {
+                    "type": "boolean"
+                },
+                "isEnable": {
+                    "type": "boolean"
+                },
+                "isExist": {
+                    "type": "boolean"
+                },
+                "logPath": {
+                    "type": "string"
+                },
+                "maxRetry": {
+                    "type": "integer"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.Fail2BanSearch": {
+            "type": "object",
+            "required": [
+                "status"
+            ],
+            "properties": {
+                "status": {
+                    "type": "string",
+                    "enum": [
+                        "banned",
+                        "ignore"
+                    ]
+                }
+            }
+        },
+        "dto.Fail2BanUpdate": {
+            "type": "object",
+            "required": [
+                "key"
+            ],
+            "properties": {
+                "key": {
+                    "type": "string",
+                    "enum": [
+                        "port",
+                        "bantime",
+                        "findtime",
+                        "maxretry",
+                        "banaction",
+                        "logpath",
+                        "port"
+                    ]
+                },
+                "value": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.FirewallBaseInfo": {
+            "type": "object",
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "pingStatus": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.FirewallOperation": {
+            "type": "object",
+            "required": [
+                "operation"
+            ],
+            "properties": {
+                "operation": {
+                    "type": "string",
+                    "enum": [
+                        "start",
+                        "stop",
+                        "restart",
+                        "disablePing",
+                        "enablePing"
+                    ]
+                }
+            }
+        },
+        "dto.ForBuckets": {
+            "type": "object",
+            "required": [
+                "credential",
+                "type",
+                "vars"
+            ],
+            "properties": {
+                "accessKey": {
+                    "type": "string"
+                },
+                "credential": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "vars": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ForwardRuleOperate": {
+            "type": "object",
+            "properties": {
+                "rules": {
+                    "type": "array",
+                    "items": {
+                        "type": "object",
+                        "required": [
+                            "operation",
+                            "port",
+                            "protocol",
+                            "targetPort"
+                        ],
+                        "properties": {
+                            "num": {
+                                "type": "string"
+                            },
+                            "operation": {
+                                "type": "string",
+                                "enum": [
+                                    "add",
+                                    "remove"
+                                ]
+                            },
+                            "port": {
+                                "type": "string"
+                            },
+                            "protocol": {
+                                "type": "string",
+                                "enum": [
+                                    "tcp",
+                                    "udp",
+                                    "tcp/udp"
+                                ]
+                            },
+                            "targetIP": {
+                                "type": "string"
+                            },
+                            "targetPort": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "dto.FtpBaseInfo": {
+            "type": "object",
+            "properties": {
+                "isActive": {
+                    "type": "boolean"
+                },
+                "isExist": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "dto.FtpCreate": {
+            "type": "object",
+            "required": [
+                "password",
+                "path",
+                "user"
+            ],
+            "properties": {
+                "description": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.FtpLogSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "operation": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.FtpUpdate": {
+            "type": "object",
+            "required": [
+                "password",
+                "path"
+            ],
+            "properties": {
+                "description": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.GPUInfo": {
+            "type": "object",
+            "properties": {
+                "fanSpeed": {
+                    "type": "string"
+                },
+                "gpuUtil": {
+                    "type": "string"
+                },
+                "index": {
+                    "type": "integer"
+                },
+                "maxPowerLimit": {
+                    "type": "string"
+                },
+                "memTotal": {
+                    "type": "string"
+                },
+                "memUsed": {
+                    "type": "string"
+                },
+                "memoryUsage": {
+                    "type": "string"
+                },
+                "performanceState": {
+                    "type": "string"
+                },
+                "powerDraw": {
+                    "type": "string"
+                },
+                "powerUsage": {
+                    "type": "string"
+                },
+                "productName": {
+                    "type": "string"
+                },
+                "temperature": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.GenerateLoad": {
+            "type": "object",
+            "required": [
+                "encryptionMode"
+            ],
+            "properties": {
+                "encryptionMode": {
+                    "type": "string",
+                    "enum": [
+                        "rsa",
+                        "ed25519",
+                        "ecdsa",
+                        "dsa"
+                    ]
+                }
+            }
+        },
+        "dto.GenerateSSH": {
+            "type": "object",
+            "required": [
+                "encryptionMode"
+            ],
+            "properties": {
+                "encryptionMode": {
+                    "type": "string",
+                    "enum": [
+                        "rsa",
+                        "ed25519",
+                        "ecdsa",
+                        "dsa"
+                    ]
+                },
+                "password": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.GroupCreate": {
+            "type": "object",
+            "required": [
+                "name",
+                "type"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.GroupInfo": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "isDefault": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.GroupSearch": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.GroupUpdate": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "isDefault": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.HostConnTest": {
+            "type": "object",
+            "required": [
+                "addr",
+                "port",
+                "user"
+            ],
+            "properties": {
+                "addr": {
+                    "type": "string"
+                },
+                "authMode": {
+                    "type": "string",
+                    "enum": [
+                        "password",
+                        "key"
+                    ]
+                },
+                "passPhrase": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer",
+                    "maximum": 65535,
+                    "minimum": 1
+                },
+                "privateKey": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.HostHelper": {
+            "type": "object",
+            "properties": {
+                "host": {
+                    "type": "string"
+                },
+                "ip": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.HostOperate": {
+            "type": "object",
+            "required": [
+                "addr",
+                "port",
+                "user"
+            ],
+            "properties": {
+                "addr": {
+                    "type": "string"
+                },
+                "authMode": {
+                    "type": "string",
+                    "enum": [
+                        "password",
+                        "key"
+                    ]
+                },
+                "description": {
+                    "type": "string"
+                },
+                "groupID": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "passPhrase": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer",
+                    "maximum": 65535,
+                    "minimum": 1
+                },
+                "privateKey": {
+                    "type": "string"
+                },
+                "rememberPassword": {
+                    "type": "boolean"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.HostTree": {
+            "type": "object",
+            "properties": {
+                "children": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.TreeChild"
+                    }
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "label": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ImageBuild": {
+            "type": "object",
+            "required": [
+                "dockerfile",
+                "from",
+                "name"
+            ],
+            "properties": {
+                "dockerfile": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "dto.ImageInfo": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "string"
+                },
+                "isUsed": {
+                    "type": "boolean"
+                },
+                "size": {
+                    "type": "string"
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "dto.ImageLoad": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ImagePull": {
+            "type": "object",
+            "required": [
+                "imageName"
+            ],
+            "properties": {
+                "imageName": {
+                    "type": "string"
+                },
+                "repoID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.ImagePush": {
+            "type": "object",
+            "required": [
+                "name",
+                "repoID",
+                "tagName"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "repoID": {
+                    "type": "integer"
+                },
+                "tagName": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ImageRepoDelete": {
+            "type": "object",
+            "required": [
+                "ids"
+            ],
+            "properties": {
+                "ids": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
+        "dto.ImageRepoOption": {
+            "type": "object",
+            "properties": {
+                "downloadUrl": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ImageRepoUpdate": {
+            "type": "object",
+            "properties": {
+                "auth": {
+                    "type": "boolean"
+                },
+                "downloadUrl": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "password": {
+                    "type": "string",
+                    "maxLength": 256
+                },
+                "protocol": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string",
+                    "maxLength": 256
+                }
+            }
+        },
+        "dto.ImageSave": {
+            "type": "object",
+            "required": [
+                "name",
+                "path",
+                "tagName"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "tagName": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ImageTag": {
+            "type": "object",
+            "required": [
+                "sourceID",
+                "targetName"
+            ],
+            "properties": {
+                "sourceID": {
+                    "type": "string"
+                },
+                "targetName": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.InspectReq": {
+            "type": "object",
+            "required": [
+                "id",
+                "type"
+            ],
+            "properties": {
+                "id": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.LogOption": {
+            "type": "object",
+            "properties": {
+                "logMaxFile": {
+                    "type": "string"
+                },
+                "logMaxSize": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.Login": {
+            "type": "object",
+            "required": [
+                "authMethod",
+                "language",
+                "name",
+                "password"
+            ],
+            "properties": {
+                "authMethod": {
+                    "type": "string",
+                    "enum": [
+                        "jwt",
+                        "session"
+                    ]
+                },
+                "captcha": {
+                    "type": "string"
+                },
+                "captchaID": {
+                    "type": "string"
+                },
+                "ignoreCaptcha": {
+                    "type": "boolean"
+                },
+                "language": {
+                    "type": "string",
+                    "enum": [
+                        "zh",
+                        "en",
+                        "tw"
+                    ]
+                },
+                "name": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MFALogin": {
+            "type": "object",
+            "required": [
+                "code",
+                "name",
+                "password"
+            ],
+            "properties": {
+                "authMethod": {
+                    "type": "string"
+                },
+                "code": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MfaCredential": {
+            "type": "object",
+            "required": [
+                "code",
+                "interval",
+                "secret"
+            ],
+            "properties": {
+                "code": {
+                    "type": "string"
+                },
+                "interval": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MonitorSearch": {
+            "type": "object",
+            "required": [
+                "param"
+            ],
+            "properties": {
+                "endTime": {
+                    "type": "string"
+                },
+                "info": {
+                    "type": "string"
+                },
+                "param": {
+                    "type": "string",
+                    "enum": [
+                        "all",
+                        "cpu",
+                        "memory",
+                        "load",
+                        "io",
+                        "network"
+                    ]
+                },
+                "startTime": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MysqlDBCreate": {
+            "type": "object",
+            "required": [
+                "database",
+                "format",
+                "from",
+                "name",
+                "password",
+                "permission",
+                "username"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "format": {
+                    "type": "string",
+                    "enum": [
+                        "utf8mb4",
+                        "utf8",
+                        "gbk",
+                        "big5"
+                    ]
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "local",
+                        "remote"
+                    ]
+                },
+                "name": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "permission": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MysqlDBDelete": {
+            "type": "object",
+            "required": [
+                "database",
+                "id",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "deleteBackup": {
+                    "type": "boolean"
+                },
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "mysql",
+                        "mariadb"
+                    ]
+                }
+            }
+        },
+        "dto.MysqlDBDeleteCheck": {
+            "type": "object",
+            "required": [
+                "database",
+                "id",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "mysql",
+                        "mariadb"
+                    ]
+                }
+            }
+        },
+        "dto.MysqlDBSearch": {
+            "type": "object",
+            "required": [
+                "database",
+                "order",
+                "orderBy",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "info": {
+                    "type": "string"
+                },
+                "order": {
+                    "type": "string",
+                    "enum": [
+                        "null",
+                        "ascending",
+                        "descending"
+                    ]
+                },
+                "orderBy": {
+                    "type": "string",
+                    "enum": [
+                        "name",
+                        "created_at"
+                    ]
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.MysqlLoadDB": {
+            "type": "object",
+            "required": [
+                "database",
+                "from",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "local",
+                        "remote"
+                    ]
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "mysql",
+                        "mariadb"
+                    ]
+                }
+            }
+        },
+        "dto.MysqlOption": {
+            "type": "object",
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MysqlStatus": {
+            "type": "object",
+            "properties": {
+                "Aborted_clients": {
+                    "type": "string"
+                },
+                "Aborted_connects": {
+                    "type": "string"
+                },
+                "Bytes_received": {
+                    "type": "string"
+                },
+                "Bytes_sent": {
+                    "type": "string"
+                },
+                "Com_commit": {
+                    "type": "string"
+                },
+                "Com_rollback": {
+                    "type": "string"
+                },
+                "Connections": {
+                    "type": "string"
+                },
+                "Created_tmp_disk_tables": {
+                    "type": "string"
+                },
+                "Created_tmp_tables": {
+                    "type": "string"
+                },
+                "File": {
+                    "type": "string"
+                },
+                "Innodb_buffer_pool_pages_dirty": {
+                    "type": "string"
+                },
+                "Innodb_buffer_pool_read_requests": {
+                    "type": "string"
+                },
+                "Innodb_buffer_pool_reads": {
+                    "type": "string"
+                },
+                "Key_read_requests": {
+                    "type": "string"
+                },
+                "Key_reads": {
+                    "type": "string"
+                },
+                "Key_write_requests": {
+                    "type": "string"
+                },
+                "Key_writes": {
+                    "type": "string"
+                },
+                "Max_used_connections": {
+                    "type": "string"
+                },
+                "Open_tables": {
+                    "type": "string"
+                },
+                "Opened_files": {
+                    "type": "string"
+                },
+                "Opened_tables": {
+                    "type": "string"
+                },
+                "Position": {
+                    "type": "string"
+                },
+                "Qcache_hits": {
+                    "type": "string"
+                },
+                "Qcache_inserts": {
+                    "type": "string"
+                },
+                "Questions": {
+                    "type": "string"
+                },
+                "Run": {
+                    "type": "string"
+                },
+                "Select_full_join": {
+                    "type": "string"
+                },
+                "Select_range_check": {
+                    "type": "string"
+                },
+                "Sort_merge_passes": {
+                    "type": "string"
+                },
+                "Table_locks_waited": {
+                    "type": "string"
+                },
+                "Threads_cached": {
+                    "type": "string"
+                },
+                "Threads_connected": {
+                    "type": "string"
+                },
+                "Threads_created": {
+                    "type": "string"
+                },
+                "Threads_running": {
+                    "type": "string"
+                },
+                "Uptime": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MysqlVariables": {
+            "type": "object",
+            "properties": {
+                "binlog_cache_size": {
+                    "type": "string"
+                },
+                "innodb_buffer_pool_size": {
+                    "type": "string"
+                },
+                "innodb_log_buffer_size": {
+                    "type": "string"
+                },
+                "join_buffer_size": {
+                    "type": "string"
+                },
+                "key_buffer_size": {
+                    "type": "string"
+                },
+                "long_query_time": {
+                    "type": "string"
+                },
+                "max_connections": {
+                    "type": "string"
+                },
+                "max_heap_table_size": {
+                    "type": "string"
+                },
+                "query_cache_size": {
+                    "type": "string"
+                },
+                "query_cache_type": {
+                    "type": "string"
+                },
+                "read_buffer_size": {
+                    "type": "string"
+                },
+                "read_rnd_buffer_size": {
+                    "type": "string"
+                },
+                "slow_query_log": {
+                    "type": "string"
+                },
+                "sort_buffer_size": {
+                    "type": "string"
+                },
+                "table_open_cache": {
+                    "type": "string"
+                },
+                "thread_cache_size": {
+                    "type": "string"
+                },
+                "thread_stack": {
+                    "type": "string"
+                },
+                "tmp_table_size": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MysqlVariablesUpdate": {
+            "type": "object",
+            "required": [
+                "database",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "mysql",
+                        "mariadb"
+                    ]
+                },
+                "variables": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.MysqlVariablesUpdateHelper"
+                    }
+                }
+            }
+        },
+        "dto.MysqlVariablesUpdateHelper": {
+            "type": "object",
+            "properties": {
+                "param": {
+                    "type": "string"
+                },
+                "value": {}
+            }
+        },
+        "dto.NetworkCreate": {
+            "type": "object",
+            "required": [
+                "driver",
+                "name"
+            ],
+            "properties": {
+                "auxAddress": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.SettingUpdate"
+                    }
+                },
+                "auxAddressV6": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.SettingUpdate"
+                    }
+                },
+                "driver": {
+                    "type": "string"
+                },
+                "gateway": {
+                    "type": "string"
+                },
+                "gatewayV6": {
+                    "type": "string"
+                },
+                "ipRange": {
+                    "type": "string"
+                },
+                "ipRangeV6": {
+                    "type": "string"
+                },
+                "ipv4": {
+                    "type": "boolean"
+                },
+                "ipv6": {
+                    "type": "boolean"
+                },
+                "labels": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "name": {
+                    "type": "string"
+                },
+                "options": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "subnet": {
+                    "type": "string"
+                },
+                "subnetV6": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.NginxKey": {
+            "type": "string",
+            "enum": [
+                "index",
+                "limit-conn",
+                "ssl",
+                "cache",
+                "http-per",
+                "proxy-cache"
+            ],
+            "x-enum-varnames": [
+                "Index",
+                "LimitConn",
+                "SSL",
+                "CACHE",
+                "HttpPer",
+                "ProxyCache"
+            ]
+        },
+        "dto.OneDriveInfo": {
+            "type": "object",
+            "properties": {
+                "client_id": {
+                    "type": "string"
+                },
+                "client_secret": {
+                    "type": "string"
+                },
+                "redirect_uri": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.Operate": {
+            "type": "object",
+            "required": [
+                "operation"
+            ],
+            "properties": {
+                "operation": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.OperateByID": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.OperationWithName": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.OperationWithNameAndType": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.Options": {
+            "type": "object",
+            "properties": {
+                "option": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.OsInfo": {
+            "type": "object",
+            "properties": {
+                "diskSize": {
+                    "type": "integer"
+                },
+                "kernelArch": {
+                    "type": "string"
+                },
+                "kernelVersion": {
+                    "type": "string"
+                },
+                "os": {
+                    "type": "string"
+                },
+                "platform": {
+                    "type": "string"
+                },
+                "platformFamily": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.PageContainer": {
+            "type": "object",
+            "required": [
+                "order",
+                "orderBy",
+                "page",
+                "pageSize",
+                "state"
+            ],
+            "properties": {
+                "excludeAppStore": {
+                    "type": "boolean"
+                },
+                "filters": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "order": {
+                    "type": "string",
+                    "enum": [
+                        "null",
+                        "ascending",
+                        "descending"
+                    ]
+                },
+                "orderBy": {
+                    "type": "string",
+                    "enum": [
+                        "name",
+                        "state",
+                        "created_at"
+                    ]
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "state": {
+                    "type": "string",
+                    "enum": [
+                        "all",
+                        "created",
+                        "running",
+                        "paused",
+                        "restarting",
+                        "removing",
+                        "exited",
+                        "dead"
+                    ]
+                }
+            }
+        },
+        "dto.PageCronjob": {
+            "type": "object",
+            "required": [
+                "order",
+                "orderBy",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "info": {
+                    "type": "string"
+                },
+                "order": {
+                    "type": "string",
+                    "enum": [
+                        "null",
+                        "ascending",
+                        "descending"
+                    ]
+                },
+                "orderBy": {
+                    "type": "string",
+                    "enum": [
+                        "name",
+                        "status",
+                        "created_at"
+                    ]
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.PageInfo": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.PageResult": {
+            "type": "object",
+            "properties": {
+                "items": {},
+                "total": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.PasswordUpdate": {
+            "type": "object",
+            "required": [
+                "newPassword",
+                "oldPassword"
+            ],
+            "properties": {
+                "newPassword": {
+                    "type": "string"
+                },
+                "oldPassword": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.PortHelper": {
+            "type": "object",
+            "properties": {
+                "containerPort": {
+                    "type": "string"
+                },
+                "hostIP": {
+                    "type": "string"
+                },
+                "hostPort": {
+                    "type": "string"
+                },
+                "protocol": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.PortRuleOperate": {
+            "type": "object",
+            "required": [
+                "operation",
+                "port",
+                "protocol",
+                "strategy"
+            ],
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "operation": {
+                    "type": "string",
+                    "enum": [
+                        "add",
+                        "remove"
+                    ]
+                },
+                "port": {
+                    "type": "string"
+                },
+                "protocol": {
+                    "type": "string",
+                    "enum": [
+                        "tcp",
+                        "udp",
+                        "tcp/udp"
+                    ]
+                },
+                "strategy": {
+                    "type": "string",
+                    "enum": [
+                        "accept",
+                        "drop"
+                    ]
+                }
+            }
+        },
+        "dto.PortRuleUpdate": {
+            "type": "object",
+            "properties": {
+                "newRule": {
+                    "$ref": "#/definitions/dto.PortRuleOperate"
+                },
+                "oldRule": {
+                    "$ref": "#/definitions/dto.PortRuleOperate"
+                }
+            }
+        },
+        "dto.PortUpdate": {
+            "type": "object",
+            "required": [
+                "serverPort"
+            ],
+            "properties": {
+                "serverPort": {
+                    "type": "integer",
+                    "maximum": 65535,
+                    "minimum": 1
+                }
+            }
+        },
+        "dto.PostgresqlBindUser": {
+            "type": "object",
+            "required": [
+                "database",
+                "name",
+                "password",
+                "username"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "superUser": {
+                    "type": "boolean"
+                },
+                "username": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.PostgresqlDBCreate": {
+            "type": "object",
+            "required": [
+                "database",
+                "from",
+                "name",
+                "password",
+                "username"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "format": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "local",
+                        "remote"
+                    ]
+                },
+                "name": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "superUser": {
+                    "type": "boolean"
+                },
+                "username": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.PostgresqlDBDelete": {
+            "type": "object",
+            "required": [
+                "database",
+                "id",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "deleteBackup": {
+                    "type": "boolean"
+                },
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "postgresql"
+                    ]
+                }
+            }
+        },
+        "dto.PostgresqlDBDeleteCheck": {
+            "type": "object",
+            "required": [
+                "database",
+                "id",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "postgresql"
+                    ]
+                }
+            }
+        },
+        "dto.PostgresqlDBSearch": {
+            "type": "object",
+            "required": [
+                "database",
+                "order",
+                "orderBy",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "info": {
+                    "type": "string"
+                },
+                "order": {
+                    "type": "string",
+                    "enum": [
+                        "null",
+                        "ascending",
+                        "descending"
+                    ]
+                },
+                "orderBy": {
+                    "type": "string",
+                    "enum": [
+                        "name",
+                        "created_at"
+                    ]
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.PostgresqlLoadDB": {
+            "type": "object",
+            "required": [
+                "database",
+                "from",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "local",
+                        "remote"
+                    ]
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "postgresql"
+                    ]
+                }
+            }
+        },
+        "dto.ProxyUpdate": {
+            "type": "object",
+            "properties": {
+                "proxyPasswd": {
+                    "type": "string"
+                },
+                "proxyPasswdKeep": {
+                    "type": "string"
+                },
+                "proxyPort": {
+                    "type": "string"
+                },
+                "proxyType": {
+                    "type": "string"
+                },
+                "proxyUrl": {
+                    "type": "string"
+                },
+                "proxyUser": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.RecordSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize",
+                "type"
+            ],
+            "properties": {
+                "detailName": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.RecordSearchByCronjob": {
+            "type": "object",
+            "required": [
+                "cronjobID",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "cronjobID": {
+                    "type": "integer"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.RedisCommand": {
+            "type": "object",
+            "properties": {
+                "command": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.RedisConf": {
+            "type": "object",
+            "required": [
+                "database"
+            ],
+            "properties": {
+                "containerName": {
+                    "type": "string"
+                },
+                "database": {
+                    "type": "string"
+                },
+                "maxclients": {
+                    "type": "string"
+                },
+                "maxmemory": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "requirepass": {
+                    "type": "string"
+                },
+                "timeout": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.RedisConfPersistenceUpdate": {
+            "type": "object",
+            "required": [
+                "database",
+                "type"
+            ],
+            "properties": {
+                "appendfsync": {
+                    "type": "string"
+                },
+                "appendonly": {
+                    "type": "string"
+                },
+                "database": {
+                    "type": "string"
+                },
+                "save": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "aof",
+                        "rbd"
+                    ]
+                }
+            }
+        },
+        "dto.RedisConfUpdate": {
+            "type": "object",
+            "required": [
+                "database"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "maxclients": {
+                    "type": "string"
+                },
+                "maxmemory": {
+                    "type": "string"
+                },
+                "timeout": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.RedisPersistence": {
+            "type": "object",
+            "required": [
+                "database"
+            ],
+            "properties": {
+                "appendfsync": {
+                    "type": "string"
+                },
+                "appendonly": {
+                    "type": "string"
+                },
+                "database": {
+                    "type": "string"
+                },
+                "save": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.RedisStatus": {
+            "type": "object",
+            "required": [
+                "database"
+            ],
+            "properties": {
+                "connected_clients": {
+                    "type": "string"
+                },
+                "database": {
+                    "type": "string"
+                },
+                "instantaneous_ops_per_sec": {
+                    "type": "string"
+                },
+                "keyspace_hits": {
+                    "type": "string"
+                },
+                "keyspace_misses": {
+                    "type": "string"
+                },
+                "latest_fork_usec": {
+                    "type": "string"
+                },
+                "mem_fragmentation_ratio": {
+                    "type": "string"
+                },
+                "tcp_port": {
+                    "type": "string"
+                },
+                "total_commands_processed": {
+                    "type": "string"
+                },
+                "total_connections_received": {
+                    "type": "string"
+                },
+                "uptime_in_days": {
+                    "type": "string"
+                },
+                "used_memory": {
+                    "type": "string"
+                },
+                "used_memory_peak": {
+                    "type": "string"
+                },
+                "used_memory_rss": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ResourceLimit": {
+            "type": "object",
+            "properties": {
+                "cpu": {
+                    "type": "integer"
+                },
+                "memory": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.RuleSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize",
+                "type"
+            ],
+            "properties": {
+                "info": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "strategy": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SSHConf": {
+            "type": "object",
+            "properties": {
+                "file": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SSHHistory": {
+            "type": "object",
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "area": {
+                    "type": "string"
+                },
+                "authMode": {
+                    "type": "string"
+                },
+                "date": {
+                    "type": "string"
+                },
+                "dateStr": {
+                    "type": "string"
+                },
+                "message": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SSHInfo": {
+            "type": "object",
+            "properties": {
+                "autoStart": {
+                    "type": "boolean"
+                },
+                "listenAddress": {
+                    "type": "string"
+                },
+                "message": {
+                    "type": "string"
+                },
+                "passwordAuthentication": {
+                    "type": "string"
+                },
+                "permitRootLogin": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "string"
+                },
+                "pubkeyAuthentication": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "useDNS": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SSHLog": {
+            "type": "object",
+            "properties": {
+                "failedCount": {
+                    "type": "integer"
+                },
+                "logs": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.SSHHistory"
+                    }
+                },
+                "successfulCount": {
+                    "type": "integer"
+                },
+                "totalCount": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.SSHUpdate": {
+            "type": "object",
+            "required": [
+                "key"
+            ],
+            "properties": {
+                "key": {
+                    "type": "string"
+                },
+                "newValue": {
+                    "type": "string"
+                },
+                "oldValue": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SSLUpdate": {
+            "type": "object",
+            "required": [
+                "ssl",
+                "sslType"
+            ],
+            "properties": {
+                "cert": {
+                    "type": "string"
+                },
+                "domain": {
+                    "type": "string"
+                },
+                "key": {
+                    "type": "string"
+                },
+                "ssl": {
+                    "type": "string",
+                    "enum": [
+                        "enable",
+                        "disable"
+                    ]
+                },
+                "sslID": {
+                    "type": "integer"
+                },
+                "sslType": {
+                    "type": "string",
+                    "enum": [
+                        "self",
+                        "select",
+                        "import",
+                        "import-paste",
+                        "import-local"
+                    ]
+                }
+            }
+        },
+        "dto.SearchForTree": {
+            "type": "object",
+            "properties": {
+                "info": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SearchHostWithPage": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "groupID": {
+                    "type": "integer"
+                },
+                "info": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.SearchLgLogWithPage": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "ip": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SearchOpLogWithPage": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "operation": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "source": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SearchRecord": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "cronjobID": {
+                    "type": "integer"
+                },
+                "endTime": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "startTime": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SearchSSHLog": {
+            "type": "object",
+            "required": [
+                "Status",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "Status": {
+                    "type": "string",
+                    "enum": [
+                        "Success",
+                        "Failed",
+                        "All"
+                    ]
+                },
+                "info": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.SearchWithPage": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "info": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.SettingInfo": {
+            "type": "object",
+            "properties": {
+                "allowIPs": {
+                    "type": "string"
+                },
+                "appStoreLastModified": {
+                    "type": "string"
+                },
+                "appStoreSyncStatus": {
+                    "type": "string"
+                },
+                "appStoreVersion": {
+                    "type": "string"
+                },
+                "bindAddress": {
+                    "type": "string"
+                },
+                "bindDomain": {
+                    "type": "string"
+                },
+                "complexityVerification": {
+                    "type": "string"
+                },
+                "defaultNetwork": {
+                    "type": "string"
+                },
+                "developerMode": {
+                    "type": "string"
+                },
+                "dingVars": {
+                    "type": "string"
+                },
+                "dockerSockPath": {
+                    "type": "string"
+                },
+                "email": {
+                    "type": "string"
+                },
+                "emailVars": {
+                    "type": "string"
+                },
+                "expirationDays": {
+                    "type": "string"
+                },
+                "expirationTime": {
+                    "type": "string"
+                },
+                "fileRecycleBin": {
+                    "type": "string"
+                },
+                "ipv6": {
+                    "type": "string"
+                },
+                "language": {
+                    "type": "string"
+                },
+                "lastCleanData": {
+                    "type": "string"
+                },
+                "lastCleanSize": {
+                    "type": "string"
+                },
+                "lastCleanTime": {
+                    "type": "string"
+                },
+                "localTime": {
+                    "type": "string"
+                },
+                "menuTabs": {
+                    "type": "string"
+                },
+                "messageType": {
+                    "type": "string"
+                },
+                "mfaInterval": {
+                    "type": "string"
+                },
+                "mfaSecret": {
+                    "type": "string"
+                },
+                "mfaStatus": {
+                    "type": "string"
+                },
+                "monitorInterval": {
+                    "type": "string"
+                },
+                "monitorStatus": {
+                    "type": "string"
+                },
+                "monitorStoreDays": {
+                    "type": "string"
+                },
+                "noAuthSetting": {
+                    "type": "string"
+                },
+                "ntpSite": {
+                    "type": "string"
+                },
+                "panelName": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "string"
+                },
+                "proxyPasswd": {
+                    "type": "string"
+                },
+                "proxyPasswdKeep": {
+                    "type": "string"
+                },
+                "proxyPort": {
+                    "type": "string"
+                },
+                "proxyType": {
+                    "type": "string"
+                },
+                "proxyUrl": {
+                    "type": "string"
+                },
+                "proxyUser": {
+                    "type": "string"
+                },
+                "securityEntrance": {
+                    "type": "string"
+                },
+                "serverPort": {
+                    "type": "string"
+                },
+                "sessionTimeout": {
+                    "type": "string"
+                },
+                "snapshotIgnore": {
+                    "type": "string"
+                },
+                "ssl": {
+                    "type": "string"
+                },
+                "sslType": {
+                    "type": "string"
+                },
+                "systemIP": {
+                    "type": "string"
+                },
+                "systemVersion": {
+                    "type": "string"
+                },
+                "theme": {
+                    "type": "string"
+                },
+                "timeZone": {
+                    "type": "string"
+                },
+                "userName": {
+                    "type": "string"
+                },
+                "weChatVars": {
+                    "type": "string"
+                },
+                "xpackHideMenu": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SettingUpdate": {
+            "type": "object",
+            "required": [
+                "key"
+            ],
+            "properties": {
+                "key": {
+                    "type": "string"
+                },
+                "value": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SnapshotBatchDelete": {
+            "type": "object",
+            "required": [
+                "ids"
+            ],
+            "properties": {
+                "deleteWithFile": {
+                    "type": "boolean"
+                },
+                "ids": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
+        "dto.SnapshotCreate": {
+            "type": "object",
+            "required": [
+                "defaultDownload",
+                "from"
+            ],
+            "properties": {
+                "defaultDownload": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string",
+                    "maxLength": 256
+                },
+                "from": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "secret": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SnapshotImport": {
+            "type": "object",
+            "properties": {
+                "description": {
+                    "type": "string",
+                    "maxLength": 256
+                },
+                "from": {
+                    "type": "string"
+                },
+                "names": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "dto.SnapshotRecover": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "isNew": {
+                    "type": "boolean"
+                },
+                "reDownload": {
+                    "type": "boolean"
+                },
+                "secret": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SwapHelper": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "isNew": {
+                    "type": "boolean"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "size": {
+                    "type": "integer"
+                },
+                "used": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.TreeChild": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "label": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.UpdateByFile": {
+            "type": "object",
+            "properties": {
+                "file": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.UpdateByNameAndFile": {
+            "type": "object",
+            "properties": {
+                "file": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.UpdateDescription": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "description": {
+                    "type": "string",
+                    "maxLength": 256
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.UpdateFirewallDescription": {
+            "type": "object",
+            "required": [
+                "strategy"
+            ],
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "string"
+                },
+                "protocol": {
+                    "type": "string"
+                },
+                "strategy": {
+                    "type": "string",
+                    "enum": [
+                        "accept",
+                        "drop"
+                    ]
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.Upgrade": {
+            "type": "object",
+            "required": [
+                "version"
+            ],
+            "properties": {
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.UpgradeInfo": {
+            "type": "object",
+            "properties": {
+                "latestVersion": {
+                    "type": "string"
+                },
+                "newVersion": {
+                    "type": "string"
+                },
+                "releaseNote": {
+                    "type": "string"
+                },
+                "testVersion": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.UserLoginInfo": {
+            "type": "object",
+            "properties": {
+                "mfaStatus": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "token": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.VolumeCreate": {
+            "type": "object",
+            "required": [
+                "driver",
+                "name"
+            ],
+            "properties": {
+                "driver": {
+                    "type": "string"
+                },
+                "labels": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "name": {
+                    "type": "string"
+                },
+                "options": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "dto.VolumeHelper": {
+            "type": "object",
+            "properties": {
+                "containerDir": {
+                    "type": "string"
+                },
+                "mode": {
+                    "type": "string"
+                },
+                "sourceDir": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "files.FileInfo": {
+            "type": "object",
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "extension": {
+                    "type": "string"
+                },
+                "favoriteID": {
+                    "type": "integer"
+                },
+                "gid": {
+                    "type": "string"
+                },
+                "group": {
+                    "type": "string"
+                },
+                "isDetail": {
+                    "type": "boolean"
+                },
+                "isDir": {
+                    "type": "boolean"
+                },
+                "isHidden": {
+                    "type": "boolean"
+                },
+                "isSymlink": {
+                    "type": "boolean"
+                },
+                "itemTotal": {
+                    "type": "integer"
+                },
+                "items": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/files.FileInfo"
+                    }
+                },
+                "linkPath": {
+                    "type": "string"
+                },
+                "mimeType": {
+                    "type": "string"
+                },
+                "modTime": {
+                    "type": "string"
+                },
+                "mode": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "size": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "uid": {
+                    "type": "string"
+                },
+                "updateTime": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "mfa.Otp": {
+            "type": "object",
+            "properties": {
+                "qrImage": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.App": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "crossVersionUpdate": {
+                    "type": "boolean"
+                },
+                "document": {
+                    "type": "string"
+                },
+                "github": {
+                    "type": "string"
+                },
+                "icon": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "key": {
+                    "type": "string"
+                },
+                "lastModified": {
+                    "type": "integer"
+                },
+                "limit": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "readMe": {
+                    "type": "string"
+                },
+                "recommend": {
+                    "type": "integer"
+                },
+                "required": {
+                    "type": "string"
+                },
+                "resource": {
+                    "type": "string"
+                },
+                "shortDescEn": {
+                    "type": "string"
+                },
+                "shortDescZh": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "website": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.AppInstall": {
+            "type": "object",
+            "properties": {
+                "app": {
+                    "$ref": "#/definitions/model.App"
+                },
+                "appDetailId": {
+                    "type": "integer"
+                },
+                "appId": {
+                    "type": "integer"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "env": {
+                    "type": "string"
+                },
+                "httpPort": {
+                    "type": "integer"
+                },
+                "httpsPort": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "message": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "param": {
+                    "type": "string"
+                },
+                "serviceName": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.Tag": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "key": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "sort": {
+                    "type": "integer"
+                },
+                "updatedAt": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.Website": {
+            "type": "object",
+            "properties": {
+                "IPV6": {
+                    "type": "boolean"
+                },
+                "accessLog": {
+                    "type": "boolean"
+                },
+                "alias": {
+                    "type": "string"
+                },
+                "appInstallId": {
+                    "type": "integer"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "defaultServer": {
+                    "type": "boolean"
+                },
+                "domains": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.WebsiteDomain"
+                    }
+                },
+                "errorLog": {
+                    "type": "boolean"
+                },
+                "expireDate": {
+                    "type": "string"
+                },
+                "ftpId": {
+                    "type": "integer"
+                },
+                "group": {
+                    "type": "string"
+                },
+                "httpConfig": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "protocol": {
+                    "type": "string"
+                },
+                "proxy": {
+                    "type": "string"
+                },
+                "proxyType": {
+                    "type": "string"
+                },
+                "remark": {
+                    "type": "string"
+                },
+                "rewrite": {
+                    "type": "string"
+                },
+                "runtimeID": {
+                    "type": "integer"
+                },
+                "siteDir": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                },
+                "webSiteGroupId": {
+                    "type": "integer"
+                },
+                "webSiteSSL": {
+                    "$ref": "#/definitions/model.WebsiteSSL"
+                },
+                "webSiteSSLId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "model.WebsiteAcmeAccount": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "eabHmacKey": {
+                    "type": "string"
+                },
+                "eabKid": {
+                    "type": "string"
+                },
+                "email": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.WebsiteDnsAccount": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.WebsiteDomain": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "domain": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "websiteId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "model.WebsiteSSL": {
+            "type": "object",
+            "properties": {
+                "acmeAccount": {
+                    "$ref": "#/definitions/model.WebsiteAcmeAccount"
+                },
+                "acmeAccountId": {
+                    "type": "integer"
+                },
+                "autoRenew": {
+                    "type": "boolean"
+                },
+                "caId": {
+                    "type": "integer"
+                },
+                "certURL": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "dir": {
+                    "type": "string"
+                },
+                "disableCNAME": {
+                    "type": "boolean"
+                },
+                "dnsAccount": {
+                    "$ref": "#/definitions/model.WebsiteDnsAccount"
+                },
+                "dnsAccountId": {
+                    "type": "integer"
+                },
+                "domains": {
+                    "type": "string"
+                },
+                "execShell": {
+                    "type": "boolean"
+                },
+                "expireDate": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string"
+                },
+                "message": {
+                    "type": "string"
+                },
+                "nameserver1": {
+                    "type": "string"
+                },
+                "nameserver2": {
+                    "type": "string"
+                },
+                "organization": {
+                    "type": "string"
+                },
+                "pem": {
+                    "type": "string"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "privateKey": {
+                    "type": "string"
+                },
+                "provider": {
+                    "type": "string"
+                },
+                "pushDir": {
+                    "type": "boolean"
+                },
+                "shell": {
+                    "type": "string"
+                },
+                "skipDNS": {
+                    "type": "boolean"
+                },
+                "startDate": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "websites": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Website"
+                    }
+                }
+            }
+        },
+        "request.AppInstallCreate": {
+            "type": "object",
+            "required": [
+                "appDetailId",
+                "name"
+            ],
+            "properties": {
+                "advanced": {
+                    "type": "boolean"
+                },
+                "allowPort": {
+                    "type": "boolean"
+                },
+                "appDetailId": {
+                    "type": "integer"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "cpuQuota": {
+                    "type": "number"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "editCompose": {
+                    "type": "boolean"
+                },
+                "hostMode": {
+                    "type": "boolean"
+                },
+                "memoryLimit": {
+                    "type": "number"
+                },
+                "memoryUnit": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": true
+                },
+                "pullImage": {
+                    "type": "boolean"
+                },
+                "services": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "request.AppInstalledIgnoreUpgrade": {
+            "type": "object",
+            "required": [
+                "detailID",
+                "operate"
+            ],
+            "properties": {
+                "detailID": {
+                    "type": "integer"
+                },
+                "operate": {
+                    "type": "string",
+                    "enum": [
+                        "cancel",
+                        "ignore"
+                    ]
+                }
+            }
+        },
+        "request.AppInstalledInfo": {
+            "type": "object",
+            "required": [
+                "key"
+            ],
+            "properties": {
+                "key": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.AppInstalledOperate": {
+            "type": "object",
+            "required": [
+                "installId",
+                "operate"
+            ],
+            "properties": {
+                "backup": {
+                    "type": "boolean"
+                },
+                "backupId": {
+                    "type": "integer"
+                },
+                "deleteBackup": {
+                    "type": "boolean"
+                },
+                "deleteDB": {
+                    "type": "boolean"
+                },
+                "detailId": {
+                    "type": "integer"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "installId": {
+                    "type": "integer"
+                },
+                "operate": {
+                    "type": "string"
+                },
+                "pullImage": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.AppInstalledSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "all": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "sync": {
+                    "type": "boolean"
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                },
+                "unused": {
+                    "type": "boolean"
+                },
+                "update": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.AppInstalledUpdate": {
+            "type": "object",
+            "required": [
+                "installId",
+                "params"
+            ],
+            "properties": {
+                "advanced": {
+                    "type": "boolean"
+                },
+                "allowPort": {
+                    "type": "boolean"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "cpuQuota": {
+                    "type": "number"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "editCompose": {
+                    "type": "boolean"
+                },
+                "hostMode": {
+                    "type": "boolean"
+                },
+                "installId": {
+                    "type": "integer"
+                },
+                "memoryLimit": {
+                    "type": "number"
+                },
+                "memoryUnit": {
+                    "type": "string"
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": true
+                },
+                "pullImage": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.AppSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "recommend": {
+                    "type": "boolean"
+                },
+                "resource": {
+                    "type": "string"
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.DirSizeReq": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.ExposedPort": {
+            "type": "object",
+            "properties": {
+                "containerPort": {
+                    "type": "integer"
+                },
+                "hostPort": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.FavoriteCreate": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FavoriteDelete": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.FileBatchDelete": {
+            "type": "object",
+            "required": [
+                "paths"
+            ],
+            "properties": {
+                "isDir": {
+                    "type": "boolean"
+                },
+                "paths": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "request.FileCompress": {
+            "type": "object",
+            "required": [
+                "dst",
+                "files",
+                "name",
+                "type"
+            ],
+            "properties": {
+                "dst": {
+                    "type": "string"
+                },
+                "files": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "name": {
+                    "type": "string"
+                },
+                "replace": {
+                    "type": "boolean"
+                },
+                "secret": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileContentReq": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "isDetail": {
+                    "type": "boolean"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileCreate": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "isDir": {
+                    "type": "boolean"
+                },
+                "isLink": {
+                    "type": "boolean"
+                },
+                "isSymlink": {
+                    "type": "boolean"
+                },
+                "linkPath": {
+                    "type": "string"
+                },
+                "mode": {
+                    "type": "integer"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "sub": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.FileDeCompress": {
+            "type": "object",
+            "required": [
+                "dst",
+                "path",
+                "type"
+            ],
+            "properties": {
+                "dst": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileDelete": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "isDir": {
+                    "type": "boolean"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileDownload": {
+            "type": "object",
+            "required": [
+                "name",
+                "paths",
+                "type"
+            ],
+            "properties": {
+                "compress": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "paths": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileEdit": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileMove": {
+            "type": "object",
+            "required": [
+                "newPath",
+                "oldPaths",
+                "type"
+            ],
+            "properties": {
+                "cover": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "newPath": {
+                    "type": "string"
+                },
+                "oldPaths": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileOption": {
+            "type": "object",
+            "properties": {
+                "containSub": {
+                    "type": "boolean"
+                },
+                "dir": {
+                    "type": "boolean"
+                },
+                "expand": {
+                    "type": "boolean"
+                },
+                "isDetail": {
+                    "type": "boolean"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "search": {
+                    "type": "string"
+                },
+                "showHidden": {
+                    "type": "boolean"
+                },
+                "sortBy": {
+                    "type": "string"
+                },
+                "sortOrder": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FilePathCheck": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileReadByLineReq": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize",
+                "type"
+            ],
+            "properties": {
+                "ID": {
+                    "type": "integer"
+                },
+                "latest": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileRename": {
+            "type": "object",
+            "required": [
+                "newName",
+                "oldName"
+            ],
+            "properties": {
+                "newName": {
+                    "type": "string"
+                },
+                "oldName": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileRoleReq": {
+            "type": "object",
+            "required": [
+                "group",
+                "mode",
+                "paths",
+                "user"
+            ],
+            "properties": {
+                "group": {
+                    "type": "string"
+                },
+                "mode": {
+                    "type": "integer"
+                },
+                "paths": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "sub": {
+                    "type": "boolean"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileRoleUpdate": {
+            "type": "object",
+            "required": [
+                "group",
+                "path",
+                "user"
+            ],
+            "properties": {
+                "group": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "sub": {
+                    "type": "boolean"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileWget": {
+            "type": "object",
+            "required": [
+                "name",
+                "path",
+                "url"
+            ],
+            "properties": {
+                "ignoreCertificate": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.HostToolConfig": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "operate": {
+                    "type": "string",
+                    "enum": [
+                        "get",
+                        "set"
+                    ]
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "supervisord"
+                    ]
+                }
+            }
+        },
+        "request.HostToolCreate": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "configPath": {
+                    "type": "string"
+                },
+                "serviceName": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.HostToolLogReq": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "supervisord"
+                    ]
+                }
+            }
+        },
+        "request.HostToolReq": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "operate": {
+                    "type": "string",
+                    "enum": [
+                        "status",
+                        "restart",
+                        "start",
+                        "stop"
+                    ]
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "supervisord"
+                    ]
+                }
+            }
+        },
+        "request.NewAppInstall": {
+            "type": "object",
+            "properties": {
+                "advanced": {
+                    "type": "boolean"
+                },
+                "allowPort": {
+                    "type": "boolean"
+                },
+                "appDetailID": {
+                    "type": "integer"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "cpuQuota": {
+                    "type": "number"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "editCompose": {
+                    "type": "boolean"
+                },
+                "hostMode": {
+                    "type": "boolean"
+                },
+                "memoryLimit": {
+                    "type": "number"
+                },
+                "memoryUnit": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": true
+                },
+                "pullImage": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.NginxAntiLeechUpdate": {
+            "type": "object",
+            "required": [
+                "extends",
+                "return",
+                "websiteID"
+            ],
+            "properties": {
+                "blocked": {
+                    "type": "boolean"
+                },
+                "cache": {
+                    "type": "boolean"
+                },
+                "cacheTime": {
+                    "type": "integer"
+                },
+                "cacheUint": {
+                    "type": "string"
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "extends": {
+                    "type": "string"
+                },
+                "logEnable": {
+                    "type": "boolean"
+                },
+                "noneRef": {
+                    "type": "boolean"
+                },
+                "return": {
+                    "type": "string"
+                },
+                "serverNames": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxAuthReq": {
+            "type": "object",
+            "required": [
+                "websiteID"
+            ],
+            "properties": {
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxAuthUpdate": {
+            "type": "object",
+            "required": [
+                "operate",
+                "websiteID"
+            ],
+            "properties": {
+                "operate": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "remark": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string"
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxCommonReq": {
+            "type": "object",
+            "required": [
+                "websiteID"
+            ],
+            "properties": {
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxConfigFileUpdate": {
+            "type": "object",
+            "required": [
+                "content"
+            ],
+            "properties": {
+                "backup": {
+                    "type": "boolean"
+                },
+                "content": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.NginxConfigUpdate": {
+            "type": "object",
+            "required": [
+                "operate"
+            ],
+            "properties": {
+                "operate": {
+                    "type": "string",
+                    "enum": [
+                        "add",
+                        "update",
+                        "delete"
+                    ]
+                },
+                "params": {},
+                "scope": {
+                    "$ref": "#/definitions/dto.NginxKey"
+                },
+                "websiteId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxProxyUpdate": {
+            "type": "object",
+            "required": [
+                "content",
+                "name",
+                "websiteID"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxRedirectReq": {
+            "type": "object",
+            "required": [
+                "name",
+                "operate",
+                "redirect",
+                "target",
+                "type",
+                "websiteID"
+            ],
+            "properties": {
+                "domains": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "keepPath": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "operate": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "redirect": {
+                    "type": "string"
+                },
+                "redirectRoot": {
+                    "type": "boolean"
+                },
+                "target": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxRedirectUpdate": {
+            "type": "object",
+            "required": [
+                "content",
+                "name",
+                "websiteID"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxRewriteReq": {
+            "type": "object",
+            "required": [
+                "name",
+                "websiteId"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "websiteId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxRewriteUpdate": {
+            "type": "object",
+            "required": [
+                "name",
+                "websiteId"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "websiteId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxScopeReq": {
+            "type": "object",
+            "required": [
+                "scope"
+            ],
+            "properties": {
+                "scope": {
+                    "$ref": "#/definitions/dto.NginxKey"
+                },
+                "websiteId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NodeModuleReq": {
+            "type": "object",
+            "required": [
+                "ID"
+            ],
+            "properties": {
+                "ID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NodePackageReq": {
+            "type": "object",
+            "properties": {
+                "codeDir": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.PHPExtensionsCreate": {
+            "type": "object",
+            "required": [
+                "extensions",
+                "name"
+            ],
+            "properties": {
+                "extensions": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.PHPExtensionsDelete": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.PHPExtensionsSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "all": {
+                    "type": "boolean"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.PHPExtensionsUpdate": {
+            "type": "object",
+            "required": [
+                "extensions",
+                "id"
+            ],
+            "properties": {
+                "extensions": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.PortUpdate": {
+            "type": "object",
+            "properties": {
+                "key": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.ProcessReq": {
+            "type": "object",
+            "required": [
+                "PID"
+            ],
+            "properties": {
+                "PID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.RecycleBinReduce": {
+            "type": "object",
+            "required": [
+                "from",
+                "rName"
+            ],
+            "properties": {
+                "from": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "rName": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.RuntimeCreate": {
+            "type": "object",
+            "properties": {
+                "appDetailId": {
+                    "type": "integer"
+                },
+                "clean": {
+                    "type": "boolean"
+                },
+                "codeDir": {
+                    "type": "string"
+                },
+                "exposedPorts": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/request.ExposedPort"
+                    }
+                },
+                "image": {
+                    "type": "string"
+                },
+                "install": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": true
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "resource": {
+                    "type": "string"
+                },
+                "source": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.RuntimeDelete": {
+            "type": "object",
+            "properties": {
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.RuntimeOperate": {
+            "type": "object",
+            "properties": {
+                "ID": {
+                    "type": "integer"
+                },
+                "operate": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.RuntimeSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.RuntimeUpdate": {
+            "type": "object",
+            "properties": {
+                "clean": {
+                    "type": "boolean"
+                },
+                "codeDir": {
+                    "type": "string"
+                },
+                "exposedPorts": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/request.ExposedPort"
+                    }
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "image": {
+                    "type": "string"
+                },
+                "install": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": true
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "rebuild": {
+                    "type": "boolean"
+                },
+                "source": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.SearchUploadWithPage": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize",
+                "path"
+            ],
+            "properties": {
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.SupervisorProcessConfig": {
+            "type": "object",
+            "properties": {
+                "command": {
+                    "type": "string"
+                },
+                "dir": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "numprocs": {
+                    "type": "string"
+                },
+                "operate": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.SupervisorProcessFileReq": {
+            "type": "object",
+            "required": [
+                "file",
+                "name",
+                "operate"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "file": {
+                    "type": "string",
+                    "enum": [
+                        "out.log",
+                        "err.log",
+                        "config"
+                    ]
+                },
+                "name": {
+                    "type": "string"
+                },
+                "operate": {
+                    "type": "string",
+                    "enum": [
+                        "get",
+                        "clear",
+                        "update"
+                    ]
+                }
+            }
+        },
+        "request.WebsiteAcmeAccountCreate": {
+            "type": "object",
+            "required": [
+                "email",
+                "keyType",
+                "type"
+            ],
+            "properties": {
+                "eabHmacKey": {
+                    "type": "string"
+                },
+                "eabKid": {
+                    "type": "string"
+                },
+                "email": {
+                    "type": "string"
+                },
+                "keyType": {
+                    "type": "string",
+                    "enum": [
+                        "P256",
+                        "P384",
+                        "2048",
+                        "3072",
+                        "4096",
+                        "8192"
+                    ]
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "letsencrypt",
+                        "zerossl",
+                        "buypass",
+                        "google"
+                    ]
+                }
+            }
+        },
+        "request.WebsiteBatchDelReq": {
+            "type": "object",
+            "required": [
+                "ids"
+            ],
+            "properties": {
+                "ids": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
+        "request.WebsiteCACreate": {
+            "type": "object",
+            "required": [
+                "commonName",
+                "country",
+                "keyType",
+                "name",
+                "organization"
+            ],
+            "properties": {
+                "city": {
+                    "type": "string"
+                },
+                "commonName": {
+                    "type": "string"
+                },
+                "country": {
+                    "type": "string"
+                },
+                "keyType": {
+                    "type": "string",
+                    "enum": [
+                        "P256",
+                        "P384",
+                        "2048",
+                        "3072",
+                        "4096",
+                        "8192"
+                    ]
+                },
+                "name": {
+                    "type": "string"
+                },
+                "organization": {
+                    "type": "string"
+                },
+                "organizationUint": {
+                    "type": "string"
+                },
+                "province": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsiteCAObtain": {
+            "type": "object",
+            "required": [
+                "domains",
+                "id",
+                "keyType",
+                "time",
+                "unit"
+            ],
+            "properties": {
+                "autoRenew": {
+                    "type": "boolean"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "dir": {
+                    "type": "string"
+                },
+                "domains": {
+                    "type": "string"
+                },
+                "execShell": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string",
+                    "enum": [
+                        "P256",
+                        "P384",
+                        "2048",
+                        "3072",
+                        "4096",
+                        "8192"
+                    ]
+                },
+                "pushDir": {
+                    "type": "boolean"
+                },
+                "renew": {
+                    "type": "boolean"
+                },
+                "shell": {
+                    "type": "string"
+                },
+                "sslID": {
+                    "type": "integer"
+                },
+                "time": {
+                    "type": "integer"
+                },
+                "unit": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsiteCASearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteCommonReq": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteCreate": {
+            "type": "object",
+            "required": [
+                "alias",
+                "primaryDomain",
+                "type",
+                "webSiteGroupID"
+            ],
+            "properties": {
+                "IPV6": {
+                    "type": "boolean"
+                },
+                "alias": {
+                    "type": "string"
+                },
+                "appID": {
+                    "type": "integer"
+                },
+                "appInstall": {
+                    "$ref": "#/definitions/request.NewAppInstall"
+                },
+                "appInstallID": {
+                    "type": "integer"
+                },
+                "appType": {
+                    "type": "string",
+                    "enum": [
+                        "new",
+                        "installed"
+                    ]
+                },
+                "ftpPassword": {
+                    "type": "string"
+                },
+                "ftpUser": {
+                    "type": "string"
+                },
+                "otherDomains": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "proxy": {
+                    "type": "string"
+                },
+                "proxyType": {
+                    "type": "string"
+                },
+                "remark": {
+                    "type": "string"
+                },
+                "runtimeID": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "webSiteGroupID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteDNSReq": {
+            "type": "object",
+            "required": [
+                "acmeAccountId",
+                "domains"
+            ],
+            "properties": {
+                "acmeAccountId": {
+                    "type": "integer"
+                },
+                "domains": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "request.WebsiteDefaultUpdate": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteDelete": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "deleteApp": {
+                    "type": "boolean"
+                },
+                "deleteBackup": {
+                    "type": "boolean"
+                },
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteDnsAccountCreate": {
+            "type": "object",
+            "required": [
+                "authorization",
+                "name",
+                "type"
+            ],
+            "properties": {
+                "authorization": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsiteDnsAccountUpdate": {
+            "type": "object",
+            "required": [
+                "authorization",
+                "id",
+                "name",
+                "type"
+            ],
+            "properties": {
+                "authorization": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsiteDomainCreate": {
+            "type": "object",
+            "required": [
+                "domains",
+                "websiteID"
+            ],
+            "properties": {
+                "domains": {
+                    "type": "string"
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteDomainDelete": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteHTTPSOp": {
+            "type": "object",
+            "required": [
+                "websiteId"
+            ],
+            "properties": {
+                "SSLProtocol": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "algorithm": {
+                    "type": "string"
+                },
+                "certificate": {
+                    "type": "string"
+                },
+                "certificatePath": {
+                    "type": "string"
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "hsts": {
+                    "type": "boolean"
+                },
+                "httpConfig": {
+                    "type": "string",
+                    "enum": [
+                        "HTTPSOnly",
+                        "HTTPAlso",
+                        "HTTPToHTTPS"
+                    ]
+                },
+                "importType": {
+                    "type": "string"
+                },
+                "privateKey": {
+                    "type": "string"
+                },
+                "privateKeyPath": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "existed",
+                        "auto",
+                        "manual"
+                    ]
+                },
+                "websiteId": {
+                    "type": "integer"
+                },
+                "websiteSSLId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteHtmlUpdate": {
+            "type": "object",
+            "required": [
+                "content",
+                "type"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsiteInstallCheckReq": {
+            "type": "object",
+            "properties": {
+                "InstallIds": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
+        "request.WebsiteLogReq": {
+            "type": "object",
+            "required": [
+                "id",
+                "logType",
+                "operate"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "logType": {
+                    "type": "string"
+                },
+                "operate": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteNginxUpdate": {
+            "type": "object",
+            "required": [
+                "content",
+                "id"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteOp": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "operate": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsitePHPConfigUpdate": {
+            "type": "object",
+            "required": [
+                "id",
+                "scope"
+            ],
+            "properties": {
+                "disableFunctions": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
+                "scope": {
+                    "type": "string"
+                },
+                "uploadMaxSize": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsitePHPFileUpdate": {
+            "type": "object",
+            "required": [
+                "content",
+                "id",
+                "type"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsitePHPVersionReq": {
+            "type": "object",
+            "required": [
+                "runtimeID",
+                "websiteID"
+            ],
+            "properties": {
+                "retainConfig": {
+                    "type": "boolean"
+                },
+                "runtimeID": {
+                    "type": "integer"
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteProxyConfig": {
+            "type": "object",
+            "required": [
+                "id",
+                "match",
+                "name",
+                "operate",
+                "proxyHost",
+                "proxyPass"
+            ],
+            "properties": {
+                "cache": {
+                    "type": "boolean"
+                },
+                "cacheTime": {
+                    "type": "integer"
+                },
+                "cacheUnit": {
+                    "type": "string"
+                },
+                "content": {
+                    "type": "string"
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "filePath": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "match": {
+                    "type": "string"
+                },
+                "modifier": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "operate": {
+                    "type": "string"
+                },
+                "proxyHost": {
+                    "type": "string"
+                },
+                "proxyPass": {
+                    "type": "string"
+                },
+                "replaces": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
+                "sni": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.WebsiteProxyReq": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteResourceReq": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteSSLApply": {
+            "type": "object",
+            "required": [
+                "ID"
+            ],
+            "properties": {
+                "ID": {
+                    "type": "integer"
+                },
+                "nameservers": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "skipDNSCheck": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.WebsiteSSLCreate": {
+            "type": "object",
+            "required": [
+                "acmeAccountId",
+                "primaryDomain",
+                "provider"
+            ],
+            "properties": {
+                "acmeAccountId": {
+                    "type": "integer"
+                },
+                "apply": {
+                    "type": "boolean"
+                },
+                "autoRenew": {
+                    "type": "boolean"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "dir": {
+                    "type": "string"
+                },
+                "disableCNAME": {
+                    "type": "boolean"
+                },
+                "dnsAccountId": {
+                    "type": "integer"
+                },
+                "execShell": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string"
+                },
+                "nameserver1": {
+                    "type": "string"
+                },
+                "nameserver2": {
+                    "type": "string"
+                },
+                "otherDomains": {
+                    "type": "string"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "provider": {
+                    "type": "string"
+                },
+                "pushDir": {
+                    "type": "boolean"
+                },
+                "shell": {
+                    "type": "string"
+                },
+                "skipDNS": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.WebsiteSSLSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "acmeAccountID": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteSSLUpdate": {
+            "type": "object",
+            "required": [
+                "id",
+                "primaryDomain",
+                "provider"
+            ],
+            "properties": {
+                "acmeAccountId": {
+                    "type": "integer"
+                },
+                "apply": {
+                    "type": "boolean"
+                },
+                "autoRenew": {
+                    "type": "boolean"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "dir": {
+                    "type": "string"
+                },
+                "disableCNAME": {
+                    "type": "boolean"
+                },
+                "dnsAccountId": {
+                    "type": "integer"
+                },
+                "execShell": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string"
+                },
+                "nameserver1": {
+                    "type": "string"
+                },
+                "nameserver2": {
+                    "type": "string"
+                },
+                "otherDomains": {
+                    "type": "string"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "provider": {
+                    "type": "string"
+                },
+                "pushDir": {
+                    "type": "boolean"
+                },
+                "shell": {
+                    "type": "string"
+                },
+                "skipDNS": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.WebsiteSSLUpload": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "certificate": {
+                    "type": "string"
+                },
+                "certificatePath": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "privateKey": {
+                    "type": "string"
+                },
+                "privateKeyPath": {
+                    "type": "string"
+                },
+                "sslID": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "paste",
+                        "local"
+                    ]
+                }
+            }
+        },
+        "request.WebsiteSearch": {
+            "type": "object",
+            "required": [
+                "order",
+                "orderBy",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "order": {
+                    "type": "string",
+                    "enum": [
+                        "null",
+                        "ascending",
+                        "descending"
+                    ]
+                },
+                "orderBy": {
+                    "type": "string",
+                    "enum": [
+                        "primary_domain",
+                        "type",
+                        "status",
+                        "created_at",
+                        "expire_date"
+                    ]
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "websiteGroupId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteUpdate": {
+            "type": "object",
+            "required": [
+                "id",
+                "primaryDomain"
+            ],
+            "properties": {
+                "IPV6": {
+                    "type": "boolean"
+                },
+                "expireDate": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "remark": {
+                    "type": "string"
+                },
+                "webSiteGroupID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteUpdateDir": {
+            "type": "object",
+            "required": [
+                "id",
+                "siteDir"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "siteDir": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsiteUpdateDirPermission": {
+            "type": "object",
+            "required": [
+                "group",
+                "id",
+                "user"
+            ],
+            "properties": {
+                "group": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.AppDTO": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "crossVersionUpdate": {
+                    "type": "boolean"
+                },
+                "document": {
+                    "type": "string"
+                },
+                "github": {
+                    "type": "string"
+                },
+                "icon": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "installed": {
+                    "type": "boolean"
+                },
+                "key": {
+                    "type": "string"
+                },
+                "lastModified": {
+                    "type": "integer"
+                },
+                "limit": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "readMe": {
+                    "type": "string"
+                },
+                "recommend": {
+                    "type": "integer"
+                },
+                "required": {
+                    "type": "string"
+                },
+                "resource": {
+                    "type": "string"
+                },
+                "shortDescEn": {
+                    "type": "string"
+                },
+                "shortDescZh": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Tag"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "versions": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "website": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.AppDetailDTO": {
+            "type": "object",
+            "properties": {
+                "appId": {
+                    "type": "integer"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "downloadCallBackUrl": {
+                    "type": "string"
+                },
+                "downloadUrl": {
+                    "type": "string"
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "hostMode": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "ignoreUpgrade": {
+                    "type": "boolean"
+                },
+                "image": {
+                    "type": "string"
+                },
+                "lastModified": {
+                    "type": "integer"
+                },
+                "lastVersion": {
+                    "type": "string"
+                },
+                "params": {},
+                "status": {
+                    "type": "string"
+                },
+                "update": {
+                    "type": "boolean"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.AppInstalledCheck": {
+            "type": "object",
+            "properties": {
+                "app": {
+                    "type": "string"
+                },
+                "appInstallId": {
+                    "type": "integer"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "httpPort": {
+                    "type": "integer"
+                },
+                "httpsPort": {
+                    "type": "integer"
+                },
+                "installPath": {
+                    "type": "string"
+                },
+                "isExist": {
+                    "type": "boolean"
+                },
+                "lastBackupAt": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.AppParam": {
+            "type": "object",
+            "properties": {
+                "edit": {
+                    "type": "boolean"
+                },
+                "key": {
+                    "type": "string"
+                },
+                "labelEn": {
+                    "type": "string"
+                },
+                "labelZh": {
+                    "type": "string"
+                },
+                "multiple": {
+                    "type": "boolean"
+                },
+                "required": {
+                    "type": "boolean"
+                },
+                "rule": {
+                    "type": "string"
+                },
+                "showValue": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "value": {},
+                "values": {}
+            }
+        },
+        "response.AppService": {
+            "type": "object",
+            "properties": {
+                "config": {},
+                "from": {
+                    "type": "string"
+                },
+                "label": {
+                    "type": "string"
+                },
+                "value": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.FileInfo": {
+            "type": "object",
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "extension": {
+                    "type": "string"
+                },
+                "favoriteID": {
+                    "type": "integer"
+                },
+                "gid": {
+                    "type": "string"
+                },
+                "group": {
+                    "type": "string"
+                },
+                "isDetail": {
+                    "type": "boolean"
+                },
+                "isDir": {
+                    "type": "boolean"
+                },
+                "isHidden": {
+                    "type": "boolean"
+                },
+                "isSymlink": {
+                    "type": "boolean"
+                },
+                "itemTotal": {
+                    "type": "integer"
+                },
+                "items": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/files.FileInfo"
+                    }
+                },
+                "linkPath": {
+                    "type": "string"
+                },
+                "mimeType": {
+                    "type": "string"
+                },
+                "modTime": {
+                    "type": "string"
+                },
+                "mode": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "size": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "uid": {
+                    "type": "string"
+                },
+                "updateTime": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.FileTree": {
+            "type": "object",
+            "properties": {
+                "children": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/response.FileTree"
+                    }
+                },
+                "extension": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "string"
+                },
+                "isDir": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.IgnoredApp": {
+            "type": "object",
+            "properties": {
+                "detailID": {
+                    "type": "integer"
+                },
+                "icon": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.NginxParam": {
+            "type": "object",
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "params": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "response.NginxStatus": {
+            "type": "object",
+            "properties": {
+                "accepts": {
+                    "type": "string"
+                },
+                "active": {
+                    "type": "string"
+                },
+                "handled": {
+                    "type": "string"
+                },
+                "reading": {
+                    "type": "string"
+                },
+                "requests": {
+                    "type": "string"
+                },
+                "waiting": {
+                    "type": "string"
+                },
+                "writing": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.PHPConfig": {
+            "type": "object",
+            "properties": {
+                "disableFunctions": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
+                "uploadMaxSize": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.PHPExtensionsDTO": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "extensions": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.WebsiteAcmeAccountDTO": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "eabHmacKey": {
+                    "type": "string"
+                },
+                "eabKid": {
+                    "type": "string"
+                },
+                "email": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.WebsiteCADTO": {
+            "type": "object",
+            "properties": {
+                "city": {
+                    "type": "string"
+                },
+                "commonName": {
+                    "type": "string"
+                },
+                "country": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "csr": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "organization": {
+                    "type": "string"
+                },
+                "organizationUint": {
+                    "type": "string"
+                },
+                "privateKey": {
+                    "type": "string"
+                },
+                "province": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.WebsiteDNSRes": {
+            "type": "object",
+            "properties": {
+                "domain": {
+                    "type": "string"
+                },
+                "err": {
+                    "type": "string"
+                },
+                "resolve": {
+                    "type": "string"
+                },
+                "value": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.WebsiteDTO": {
+            "type": "object",
+            "properties": {
+                "IPV6": {
+                    "type": "boolean"
+                },
+                "accessLog": {
+                    "type": "boolean"
+                },
+                "accessLogPath": {
+                    "type": "string"
+                },
+                "alias": {
+                    "type": "string"
+                },
+                "appInstallId": {
+                    "type": "integer"
+                },
+                "appName": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "defaultServer": {
+                    "type": "boolean"
+                },
+                "domains": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.WebsiteDomain"
+                    }
+                },
+                "errorLog": {
+                    "type": "boolean"
+                },
+                "errorLogPath": {
+                    "type": "string"
+                },
+                "expireDate": {
+                    "type": "string"
+                },
+                "ftpId": {
+                    "type": "integer"
+                },
+                "group": {
+                    "type": "string"
+                },
+                "httpConfig": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "protocol": {
+                    "type": "string"
+                },
+                "proxy": {
+                    "type": "string"
+                },
+                "proxyType": {
+                    "type": "string"
+                },
+                "remark": {
+                    "type": "string"
+                },
+                "rewrite": {
+                    "type": "string"
+                },
+                "runtimeID": {
+                    "type": "integer"
+                },
+                "runtimeName": {
+                    "type": "string"
+                },
+                "siteDir": {
+                    "type": "string"
+                },
+                "sitePath": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                },
+                "webSiteGroupId": {
+                    "type": "integer"
+                },
+                "webSiteSSL": {
+                    "$ref": "#/definitions/model.WebsiteSSL"
+                },
+                "webSiteSSLId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "response.WebsiteHTTPS": {
+            "type": "object",
+            "properties": {
+                "SSL": {
+                    "$ref": "#/definitions/model.WebsiteSSL"
+                },
+                "SSLProtocol": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "algorithm": {
+                    "type": "string"
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "hsts": {
+                    "type": "boolean"
+                },
+                "httpConfig": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.WebsiteLog": {
+            "type": "object",
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "end": {
+                    "type": "boolean"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.WebsiteNginxConfig": {
+            "type": "object",
+            "properties": {
+                "enable": {
+                    "type": "boolean"
+                },
+                "params": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/response.NginxParam"
+                    }
+                }
+            }
+        },
+        "response.WebsitePreInstallCheck": {
+            "type": "object",
+            "properties": {
+                "appName": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        }
+    }
+}`
+
+// SwaggerInfo holds exported Swagger Info so clients can modify it
+var SwaggerInfo = &swag.Spec{
+	Version:          "1.0",
+	Host:             "localhost",
+	BasePath:         "/api/v1",
+	Schemes:          []string{},
+	Title:            "1Panel",
+	Description:      "开源Linux面板",
+	InfoInstanceName: "swagger",
+	SwaggerTemplate:  docTemplate,
+}
+
+func init() {
+	swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
+}
diff --git a/core/cmd/server/docs/swagger.go b/core/cmd/server/docs/swagger.go
new file mode 100644
index 000000000..b0022e43c
--- /dev/null
+++ b/core/cmd/server/docs/swagger.go
@@ -0,0 +1,6 @@
+package docs
+
+import _ "embed"
+
+//go:embed swagger.json
+var SwaggerJson []byte
diff --git a/core/cmd/server/docs/swagger.json b/core/cmd/server/docs/swagger.json
new file mode 100644
index 000000000..de2b02277
--- /dev/null
+++ b/core/cmd/server/docs/swagger.json
@@ -0,0 +1,23441 @@
+{
+    "swagger": "2.0",
+    "info": {
+        "description": "开源Linux面板",
+        "title": "1Panel",
+        "termsOfService": "http://swagger.io/terms/",
+        "contact": {},
+        "license": {
+            "name": "Apache 2.0",
+            "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
+        },
+        "version": "1.0"
+    },
+    "host": "localhost",
+    "basePath": "/api/v1",
+    "paths": {
+        "/apps/:key": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 key 获取应用信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search app by key",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "app key",
+                        "name": "key",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.AppDTO"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/checkupdate": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取应用更新版本",
+                "tags": [
+                    "App"
+                ],
+                "summary": "Get app list update",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/apps/detail/:appId/:version/:type": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 appid 获取应用详情",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search app detail by appid",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "app id",
+                        "name": "appId",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "app 版本",
+                        "name": "version",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "app 类型",
+                        "name": "version",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.AppDetailDTO"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/details/:id": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 id 获取应用详情",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Get app detail by id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "id",
+                        "name": "appId",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.AppDetailDTO"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/ignored": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取忽略的应用版本",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Get Ignore App",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.IgnoredApp"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/install": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "安装应用",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Install app",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppInstallCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/model.AppInstall"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "app_installs",
+                            "input_column": "name",
+                            "input_value": "name",
+                            "isList": false,
+                            "output_column": "app_id",
+                            "output_value": "appId"
+                        },
+                        {
+                            "db": "apps",
+                            "info": "appId",
+                            "isList": false,
+                            "output_column": "key",
+                            "output_value": "appKey"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Install app [appKey]-[name]",
+                    "formatZH": "安装应用 [appKey]-[name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/apps/installed/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "检查应用安装情况",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Check app installed",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppInstalledInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.AppInstalledCheck"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/conf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 key 获取应用默认配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search default config by key",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/conninfo/:key": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取应用连接信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search app password by key",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/delete/check/:appInstallId": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除前检查",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Check before delete",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "App install id",
+                        "name": "appInstallId",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.AppResource"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/ignore": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "忽略应用升级版本",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "ignore App Update",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppInstalledIgnoreUpgrade"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "installId"
+                    ],
+                    "formatEN": "Application param update [installId]",
+                    "formatZH": "忽略应用 [installId] 版本升级",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/apps/installed/list": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取已安装应用列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "List app installed",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.AppInstallInfo"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/loadport": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取应用端口",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search app port by key",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "integer"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/op": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作已安装应用",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Operate installed app",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppInstalledOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "app_installs",
+                            "input_column": "id",
+                            "input_value": "installId",
+                            "isList": false,
+                            "output_column": "app_id",
+                            "output_value": "appId"
+                        },
+                        {
+                            "db": "app_installs",
+                            "input_column": "id",
+                            "input_value": "installId",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "appName"
+                        },
+                        {
+                            "db": "apps",
+                            "input_column": "id",
+                            "input_value": "appId",
+                            "isList": false,
+                            "output_column": "key",
+                            "output_value": "appKey"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "installId",
+                        "operate"
+                    ],
+                    "formatEN": "[operate] App [appKey][appName]",
+                    "formatZH": "[operate] 应用 [appKey][appName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/apps/installed/params/:appInstallId": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 install id 获取应用参数",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search params by appInstallId",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "appInstallId",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.AppParam"
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/installed/params/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改应用参数",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Change app params",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppInstalledUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "installId"
+                    ],
+                    "formatEN": "Application param update [installId]",
+                    "formatZH": "应用参数修改 [installId]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/apps/installed/port/change": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改应用端口",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Change app port",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.PortUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "name",
+                        "port"
+                    ],
+                    "formatEN": "Application port update [key]-[name] =\u003e [port]",
+                    "formatZH": "应用端口修改 [key]-[name] =\u003e [port]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/apps/installed/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "分页获取已安装应用列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Page app installed",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppInstalledSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/apps/installed/sync": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "同步已安装应用列表",
+                "tags": [
+                    "App"
+                ],
+                "summary": "Sync app installed",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Sync the list of installed apps",
+                    "formatZH": "同步已安装应用列表",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/apps/installed/update/versions": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 install id 获取应用更新版本",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search app update version by install id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "appInstallId",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.AppVersion"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取应用列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "List apps",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.AppSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/apps/services/:key": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 key 获取应用 service",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "App"
+                ],
+                "summary": "Search app service by key",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "key",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.AppService"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/apps/sync": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "同步应用列表",
+                "tags": [
+                    "App"
+                ],
+                "summary": "Sync app list",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "App store synchronization",
+                    "formatZH": "应用商店同步",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/auth/captcha": {
+            "get": {
+                "description": "加载验证码",
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "Load captcha",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.CaptchaResponse"
+                        }
+                    }
+                }
+            }
+        },
+        "/auth/demo": {
+            "get": {
+                "description": "判断是否为demo环境",
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "Check System isDemo",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/auth/issafety": {
+            "get": {
+                "description": "获取系统安全登录状态",
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "Load safety status",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/auth/language": {
+            "get": {
+                "description": "获取系统语言设置",
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "Load System Language",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/auth/login": {
+            "post": {
+                "description": "用户登录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "User login",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "安全入口 base64 加密串",
+                        "name": "EntranceCode",
+                        "in": "header",
+                        "required": true
+                    },
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Login"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.UserLoginInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/auth/logout": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "用户登出",
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "User logout",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/auth/mfalogin": {
+            "post": {
+                "description": "用户 mfa 登录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Auth"
+                ],
+                "summary": "User login with mfa",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MFALogin"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.UserLoginInfo"
+                        },
+                        "headers": {
+                            "EntranceCode": {
+                                "type": "string",
+                                "description": "安全入口"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/containers": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建容器",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Create container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "image"
+                    ],
+                    "formatEN": "create container [name][image]",
+                    "formatZH": "创建容器 [name][image]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/clean/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清理容器日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Clean container log",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithName"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "clean container [name] logs",
+                    "formatZH": "清理容器 [name] 日志",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/commit": {
+            "post": {
+                "description": "容器提交生成新镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Commit Container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerCommit"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/containers/compose": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建容器编排",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose"
+                ],
+                "summary": "Create compose",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ComposeCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create compose [name]",
+                    "formatZH": "创建 compose [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/compose/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器编排操作",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose"
+                ],
+                "summary": "Operate compose",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ComposeOperation"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "operation"
+                    ],
+                    "formatEN": "compose [operation] [name]",
+                    "formatZH": "compose [operation] [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/compose/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取编排列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose"
+                ],
+                "summary": "Page composes",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/compose/search/log": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "docker-compose 日志",
+                "tags": [
+                    "Container Compose"
+                ],
+                "summary": "Container Compose logs",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "compose 文件地址",
+                        "name": "compose",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "时间筛选",
+                        "name": "since",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "是否追踪",
+                        "name": "follow",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "显示行号",
+                        "name": "tail",
+                        "in": "query"
+                    }
+                ],
+                "responses": {}
+            }
+        },
+        "/containers/compose/test": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "测试 compose 是否可用",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose"
+                ],
+                "summary": "Test compose",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ComposeCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "check compose [name]",
+                    "formatZH": "检测 compose [name] 格式",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/compose/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新容器编排",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose"
+                ],
+                "summary": "Update compose",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ComposeUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "update compose information [name]",
+                    "formatZH": "更新 compose [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/daemonjson": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 docker 配置信息",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Load docker daemon.json",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.DaemonJsonConf"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/daemonjson/file": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 docker 配置信息(表单)",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Load docker daemon.json",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/daemonjson/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 docker 配置信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Update docker daemon.json",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "value"
+                    ],
+                    "formatEN": "Updated configuration [key]",
+                    "formatZH": "更新配置 [key]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/daemonjson/update/byfile": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "上传替换 docker 配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Update docker daemon.json by upload file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DaemonJsonUpdateByFile"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Updated configuration file",
+                    "formatZH": "更新配置文件",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/docker/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Docker 操作",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Operate docker",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DockerOperation"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operation"
+                    ],
+                    "formatEN": "[operation] docker service",
+                    "formatZH": "docker 服务 [operation]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/docker/status": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 docker 服务状态",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Load docker status",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/download/log": {
+            "post": {
+                "description": "下载容器日志",
+                "responses": {}
+            }
+        },
+        "/containers/image": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取镜像名称列表",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "load images options",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.Options"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/image/all": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取所有镜像列表",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "List all images",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.ImageInfo"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/image/build": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "构建镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Build image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageBuild"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "build image [name]",
+                    "formatZH": "构建镜像 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/image/load": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "导入镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Load image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageLoad"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "load image from [path]",
+                    "formatZH": "从 [path] 加载镜像",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/image/pull": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "拉取镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Pull image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImagePull"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "image_repos",
+                            "input_column": "id",
+                            "input_value": "repoID",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "reponame"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "repoID",
+                        "imageName"
+                    ],
+                    "formatEN": "image pull [reponame][imageName]",
+                    "formatZH": "镜像拉取 [reponame][imageName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/image/push": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "推送镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Push image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImagePush"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "image_repos",
+                            "input_column": "id",
+                            "input_value": "repoID",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "reponame"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "repoID",
+                        "tagName",
+                        "name"
+                    ],
+                    "formatEN": "push [tagName] to [reponame][name]",
+                    "formatZH": "[tagName] 推送到 [reponame][name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/image/remove": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Delete image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "names"
+                    ],
+                    "formatEN": "remove image [names]",
+                    "formatZH": "移除镜像 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/image/save": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "导出镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Save image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageSave"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "tagName",
+                        "path",
+                        "name"
+                    ],
+                    "formatEN": "save [tagName] as [path]/[name]",
+                    "formatZH": "保留 [tagName] 为 [path]/[name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/image/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取镜像列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Page images",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/image/tag": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Tag 镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image"
+                ],
+                "summary": "Tag image",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageTag"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "image_repos",
+                            "input_column": "id",
+                            "input_value": "repoID",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "reponame"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "repoID",
+                        "targetName"
+                    ],
+                    "formatEN": "tag image [reponame][targetName]",
+                    "formatZH": "tag 镜像 [reponame][targetName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/info": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器表单信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Load container info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithName"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerOperate"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/inspect": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器详情",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Container inspect",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.InspectReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/ipv6option/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 docker ipv6 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Update docker daemon.json ipv6 option",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.LogOption"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Updated the ipv6 option",
+                    "formatZH": "更新 ipv6 配置",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/limit": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器限制",
+                "summary": "Load container limits",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.ResourceLimit"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/list": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器名称",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "List containers",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/containers/list/stats": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器列表资源占用",
+                "summary": "Load container stats",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.ContainerListStats"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/load/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器操作日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Load container log",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/containers/logoption/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 docker 日志配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Docker"
+                ],
+                "summary": "Update docker daemon.json log option",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.LogOption"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Updated the log option",
+                    "formatZH": "更新日志配置",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/network": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器网络列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Network"
+                ],
+                "summary": "List networks",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.Options"
+                            }
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建容器网络",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Network"
+                ],
+                "summary": "Create network",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.NetworkCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create container network [name]",
+                    "formatZH": "创建容器网络 name",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/network/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除容器网络",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Network"
+                ],
+                "summary": "Delete network",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "names"
+                    ],
+                    "formatEN": "delete container network [names]",
+                    "formatZH": "删除容器网络 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/network/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器网络列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Network"
+                ],
+                "summary": "Page networks",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器操作",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Operate Container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerOperation"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "names",
+                        "operation"
+                    ],
+                    "formatEN": "container [operation] [names]",
+                    "formatZH": "容器 [names] 执行 [operation]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/prune": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器清理",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Clean container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerPrune"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerPruneReport"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "pruneType"
+                    ],
+                    "formatEN": "clean container [pruneType]",
+                    "formatZH": "清理容器 [pruneType]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/rename": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器重命名",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Rename Container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerRename"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "newName"
+                    ],
+                    "formatEN": "rename container [name] =\u003e [newName]",
+                    "formatZH": "容器重命名 [name] =\u003e [newName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/repo": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取镜像仓库列表",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image-repo"
+                ],
+                "summary": "List image repos",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.ImageRepoOption"
+                            }
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建镜像仓库",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image-repo"
+                ],
+                "summary": "Create image repo",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageRepoDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create image repo [name]",
+                    "formatZH": "创建镜像仓库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/repo/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除镜像仓库",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image-repo"
+                ],
+                "summary": "Delete image repo",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageRepoDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "image_repos",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete image repo [names]",
+                    "formatZH": "删除镜像仓库 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/repo/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取镜像仓库列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image-repo"
+                ],
+                "summary": "Page image repos",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/repo/status": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 docker 仓库状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image-repo"
+                ],
+                "summary": "Load repo status",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/containers/repo/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新镜像仓库",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Image-repo"
+                ],
+                "summary": "Update image repo",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ImageRepoUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "image_repos",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "update image repo information [name]",
+                    "formatZH": "更新镜像仓库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Page containers",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageContainer"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/search/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器日志",
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Container logs",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "容器名称",
+                        "name": "container",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "时间筛选",
+                        "name": "since",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "是否追踪",
+                        "name": "follow",
+                        "in": "query"
+                    },
+                    {
+                        "type": "string",
+                        "description": "显示行号",
+                        "name": "tail",
+                        "in": "query"
+                    }
+                ],
+                "responses": {}
+            }
+        },
+        "/containers/stats/:id": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "容器监控信息",
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Container stats",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "容器id",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerStats"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/template": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器编排模版列表",
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose-template"
+                ],
+                "summary": "List compose templates",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.ComposeTemplateInfo"
+                            }
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建容器编排模版",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose-template"
+                ],
+                "summary": "Create compose template",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ComposeTemplateCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create compose template [name]",
+                    "formatZH": "创建 compose 模版 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/template/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除容器编排模版",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose-template"
+                ],
+                "summary": "Delete compose template",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "compose_templates",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete compose template [names]",
+                    "formatZH": "删除 compose 模版 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/template/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器编排模版列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose-template"
+                ],
+                "summary": "Page compose templates",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/containers/template/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新容器编排模版",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Compose-template"
+                ],
+                "summary": "Update compose template",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ComposeTemplateUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "compose_templates",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "update compose template information [name]",
+                    "formatZH": "更新 compose 模版 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新容器",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Update container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "image"
+                    ],
+                    "formatEN": "update container [name][image]",
+                    "formatZH": "更新容器 [name][image]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/upgrade": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新容器镜像",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container"
+                ],
+                "summary": "Upgrade container",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ContainerUpgrade"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "image"
+                    ],
+                    "formatEN": "upgrade container image [name][image]",
+                    "formatZH": "更新容器镜像 [name][image]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/volume": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器存储卷列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Volume"
+                ],
+                "summary": "List volumes",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.Options"
+                            }
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建容器存储卷",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Volume"
+                ],
+                "summary": "Create volume",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.VolumeCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create container volume [name]",
+                    "formatZH": "创建容器存储卷 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/volume/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除容器存储卷",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Volume"
+                ],
+                "summary": "Delete volume",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "names"
+                    ],
+                    "formatEN": "delete container volume [names]",
+                    "formatZH": "删除容器存储卷 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/containers/volume/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取容器存储卷分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Container Volume"
+                ],
+                "summary": "Page volumes",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/cronjobs": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建计划任务",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Create cronjob",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CronjobCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type",
+                        "name"
+                    ],
+                    "formatEN": "create cronjob [type][name]",
+                    "formatZH": "创建计划任务 [type][name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/cronjobs/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除计划任务",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Delete cronjob",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CronjobBatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "cronjobs",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete cronjob [names]",
+                    "formatZH": "删除计划任务 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/cronjobs/download": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载计划任务记录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Download cronjob records",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CronjobDownload"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "job_records",
+                            "input_column": "id",
+                            "input_value": "recordID",
+                            "isList": false,
+                            "output_column": "file",
+                            "output_value": "file"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "recordID"
+                    ],
+                    "formatEN": "download the cronjob record [file]",
+                    "formatZH": "下载计划任务记录 [file]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/cronjobs/handle": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "手动执行计划任务",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Handle cronjob once",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "cronjobs",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "manually execute the cronjob [name]",
+                    "formatZH": "手动执行计划任务 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/cronjobs/records/clean": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清空计划任务记录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Clean job records",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CronjobClean"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "cronjobs",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "clean cronjob [name] records",
+                    "formatZH": "清空计划任务记录 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/cronjobs/records/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取计划任务记录日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Load Cronjob record log",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/cronjobs/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取计划任务分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Page cronjobs",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageCronjob"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/cronjobs/search/records": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取计划任务记录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Page job records",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchRecord"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/cronjobs/status": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新计划任务状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Update cronjob status",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CronjobUpdateStatus"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "cronjobs",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "status"
+                    ],
+                    "formatEN": "change the status of cronjob [name] to [status].",
+                    "formatZH": "修改计划任务 [name] 状态为 [status]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/cronjobs/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新计划任务",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Cronjob"
+                ],
+                "summary": "Update cronjob",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CronjobUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "cronjobs",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "update cronjob [name]",
+                    "formatZH": "更新计划任务 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/dashboard/base/:ioOption/:netOption": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取首页基础数据",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Dashboard"
+                ],
+                "summary": "Load dashboard base info",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "ioOption",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "netOption",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.DashboardBase"
+                        }
+                    }
+                }
+            }
+        },
+        "/dashboard/base/os": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取服务器基础数据",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Dashboard"
+                ],
+                "summary": "Load os info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.OsInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/dashboard/current/:ioOption/:netOption": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取首页实时数据",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Dashboard"
+                ],
+                "summary": "Load dashboard current info",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "ioOption",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "netOption",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.DashboardCurrent"
+                        }
+                    }
+                }
+            }
+        },
+        "/dashboard/system/restart/:operation": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "重启服务器/面板",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Dashboard"
+                ],
+                "summary": "System restart",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "operation",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/databases": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建 mysql 数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Create mysql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlDBCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create mysql database [name]",
+                    "formatZH": "创建 mysql 数据库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/bind": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "绑定 mysql 数据库用户",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Bind user of mysql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BindUser"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "database",
+                        "username"
+                    ],
+                    "formatEN": "bind mysql database [database] [username]",
+                    "formatZH": "绑定 mysql 数据库名 [database] [username]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/change/access": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 mysql 访问权限",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Change mysql access",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangeDBInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_mysqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update database [name] access",
+                    "formatZH": "更新数据库 [name] 访问权限",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/change/password": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 mysql 密码",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Change mysql password",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangeDBInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_mysqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update database [name] password",
+                    "formatZH": "更新数据库 [name] 密码",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/common/info": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取数据库基础信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Common"
+                ],
+                "summary": "Load base info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.DBBaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/common/load/file": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取数据库配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Common"
+                ],
+                "summary": "Load Database conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/databases/common/update/conf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "上传替换配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Common"
+                ],
+                "summary": "Update conf by upload file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DBConfUpdateByFile"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type",
+                        "database"
+                    ],
+                    "formatEN": "update the [type] [database] database configuration information",
+                    "formatZH": "更新 [type] 数据库 [database] 配置信息",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/db": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建远程数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Create database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DatabaseCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "type"
+                    ],
+                    "formatEN": "create database [name][type]",
+                    "formatZH": "创建远程数据库 [name][type]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/db/:name": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取远程数据库",
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Get databases",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.DatabaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/db/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "检测远程数据库连接性",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Check database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DatabaseCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "type"
+                    ],
+                    "formatEN": "check if database [name][type] is connectable",
+                    "formatZH": "检测远程数据库 [name][type] 连接性",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/db/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除远程数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Delete database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DatabaseDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "databases",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete database [names]",
+                    "formatZH": "删除远程数据库 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/db/item/:type": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取数据库列表",
+                "tags": [
+                    "Database"
+                ],
+                "summary": "List databases",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.DatabaseItem"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/db/list/:type": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取远程数据库列表",
+                "tags": [
+                    "Database"
+                ],
+                "summary": "List databases",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.DatabaseOption"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/db/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取远程数据库列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Page databases",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DatabaseSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/db/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新远程数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Update database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DatabaseUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "update database [name]",
+                    "formatZH": "更新远程数据库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除 mysql 数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Delete mysql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlDBDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_mysqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "delete mysql database [name]",
+                    "formatZH": "删除 mysql 数据库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/del/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Mysql 数据库删除前检查",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Check before delete mysql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlDBDeleteCheck"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/description/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 mysql 数据库库描述信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Update mysql database description",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateDescription"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_mysqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "description"
+                    ],
+                    "formatEN": "The description of the mysql database [name] is modified =\u003e [description]",
+                    "formatZH": "mysql 数据库 [name] 描述信息修改 [description]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/load": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "从服务器获取",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Load mysql database from remote",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlLoadDB"
+                        }
+                    }
+                ],
+                "responses": {}
+            }
+        },
+        "/databases/options": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 mysql 数据库列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "List mysql database names",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.MysqlOption"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/pg": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建 postgresql 数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Create postgresql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PostgresqlDBCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "create postgresql database [name]",
+                    "formatZH": "创建 postgresql 数据库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/pg/:database/load": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "从服务器获取",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Load postgresql database from remote",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PostgresqlLoadDB"
+                        }
+                    }
+                ],
+                "responses": {}
+            }
+        },
+        "/databases/pg/bind": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "绑定 postgresql 数据库用户",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Bind postgresql user",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PostgresqlBindUser"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "username"
+                    ],
+                    "formatEN": "bind postgresql database [name] user [username]",
+                    "formatZH": "绑定 postgresql 数据库 [name] 用户 [username]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/pg/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除 postgresql 数据库",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Delete postgresql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PostgresqlDBDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_postgresqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "delete postgresql database [name]",
+                    "formatZH": "删除 postgresql 数据库 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/pg/del/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Postgresql 数据库删除前检查",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Check before delete postgresql database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PostgresqlDBDeleteCheck"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/pg/description": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 postgresql 数据库库描述信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Update postgresql database description",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateDescription"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_postgresqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "description"
+                    ],
+                    "formatEN": "The description of the postgresql database [name] is modified =\u003e [description]",
+                    "formatZH": "postgresql 数据库 [name] 描述信息修改 [description]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/pg/password": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 postgresql 密码",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Change postgresql password",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangeDBInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "database_postgresqls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update database [name] password",
+                    "formatZH": "更新数据库 [name] 密码",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/pg/privileges": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 postgresql 用户权限",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Change postgresql privileges",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangeDBInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "database",
+                        "username"
+                    ],
+                    "formatEN": "Update [user] privileges of database [database]",
+                    "formatZH": "更新数据库 [database] 用户 [username] 权限",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/pg/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 postgresql 数据库列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Postgresql"
+                ],
+                "summary": "Page postgresql databases",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PostgresqlDBSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/redis/conf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 redis 配置信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Load redis conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithName"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.RedisConf"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/redis/conf/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 redis 配置信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Update redis conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.RedisConfUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "update the redis database configuration information",
+                    "formatZH": "更新 redis 数据库配置信息",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/redis/install/cli": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "安装 redis cli",
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Install redis-cli",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/databases/redis/password": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 redis 密码",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Change redis password",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangeRedisPass"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "change the password of the redis database",
+                    "formatZH": "修改 redis 数据库密码",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/redis/persistence/conf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 redis 持久化配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Load redis persistence conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithName"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.RedisPersistence"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/redis/persistence/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 redis 持久化配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Update redis persistence conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.RedisConfPersistenceUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "redis database persistence configuration update",
+                    "formatZH": "redis 数据库持久化配置更新",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/databases/redis/status": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 redis 状态信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Redis"
+                ],
+                "summary": "Load redis status info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithName"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.RedisStatus"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/remote": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 mysql 远程访问权限",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Load mysql remote access",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "boolean"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 mysql 数据库列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Page mysql databases",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlDBSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/status": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 mysql 状态信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Load mysql status info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlStatus"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/variables": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 mysql 性能参数信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Load mysql variables info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithNameAndType"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlVariables"
+                        }
+                    }
+                }
+            }
+        },
+        "/databases/variables/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "mysql 性能调优",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database Mysql"
+                ],
+                "summary": "Update mysql variables",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MysqlVariablesUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "adjust mysql database performance parameters",
+                    "formatZH": "调整 mysql 数据库性能参数",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/db/remote/del/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Mysql 远程数据库删除前检查",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Database"
+                ],
+                "summary": "Check before delete remote database",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/files": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建文件/文件夹",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Create file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Create dir or file [path]",
+                    "formatZH": "创建文件/文件夹 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/batch/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "批量删除文件/文件夹",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Batch delete file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileBatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "paths"
+                    ],
+                    "formatEN": "Batch delete dir or file [paths]",
+                    "formatZH": "批量删除文件/文件夹 [paths]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/batch/role": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "批量修改文件权限和用户/组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Batch change file mode and owner",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileRoleReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "paths",
+                        "mode",
+                        "user",
+                        "group"
+                    ],
+                    "formatEN": "Batch change file mode and owner [paths] =\u003e [mode]/[user]/[group]",
+                    "formatZH": "批量修改文件权限和用户/组 [paths] =\u003e [mode]/[user]/[group]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "检测文件是否存在",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Check file exist",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FilePathCheck"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/chunkdownload": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "分片下载下载文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Chunk Download file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileDownload"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Download file [name]",
+                    "formatZH": "下载文件 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/chunkupload": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "分片上传文件",
+                "tags": [
+                    "File"
+                ],
+                "summary": "ChunkUpload file",
+                "parameters": [
+                    {
+                        "type": "file",
+                        "description": "request",
+                        "name": "file",
+                        "in": "formData",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/compress": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "压缩文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Compress file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileCompress"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Compress file [name]",
+                    "formatZH": "压缩文件 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/content": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取文件内容",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Load file content",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileContentReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.FileInfo"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Load file content [path]",
+                    "formatZH": "获取文件内容 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/decompress": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "解压文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Decompress file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileDeCompress"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Decompress file [path]",
+                    "formatZH": "解压 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除文件/文件夹",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Delete file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Delete dir or file [path]",
+                    "formatZH": "删除文件/文件夹 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/download": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Download file",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/favorite": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建收藏",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Create favorite",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FavoriteCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "收藏文件/文件夹 [path]",
+                    "formatZH": "收藏文件/文件夹 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/favorite/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除收藏",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Delete favorite",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FavoriteDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "favorites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "path",
+                            "output_value": "path"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "delete avorite [path]",
+                    "formatZH": "删除收藏 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/favorite/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取收藏列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "List favorites",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/mode": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改文件权限",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Change file mode",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path",
+                        "mode"
+                    ],
+                    "formatEN": "Change mode [paths] =\u003e [mode]",
+                    "formatZH": "修改权限 [paths] =\u003e [mode]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/move": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "移动文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Move file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileMove"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "oldPaths",
+                        "newPath"
+                    ],
+                    "formatEN": "Move [oldPaths] =\u003e [newPath]",
+                    "formatZH": "移动文件 [oldPaths] =\u003e [newPath]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/owner": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改文件用户/组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Change file owner",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileRoleUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path",
+                        "user",
+                        "group"
+                    ],
+                    "formatEN": "Change owner [paths] =\u003e [user]/[group]",
+                    "formatZH": "修改用户/组 [paths] =\u003e [user]/[group]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/read": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "按行读取日志文件",
+                "tags": [
+                    "File"
+                ],
+                "summary": "Read file by Line",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileReadByLineReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/recycle/clear": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清空回收站文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Clear RecycleBin files",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "清空回收站",
+                    "formatZH": "清空回收站",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/recycle/reduce": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "还原回收站文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Reduce RecycleBin files",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.RecycleBinReduce"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Reduce RecycleBin file [name]",
+                    "formatZH": "还原回收站文件 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/recycle/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取回收站文件列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "List RecycleBin files",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/recycle/status": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取回收站状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Get RecycleBin status",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/files/rename": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改文件名称",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Change file name",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileRename"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "oldName",
+                        "newName"
+                    ],
+                    "formatEN": "Rename [oldName] =\u003e [newName]",
+                    "formatZH": "重命名 [oldName] =\u003e [newName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/save": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新文件内容",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Update file content",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileEdit"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Update file content [path]",
+                    "formatZH": "更新文件内容 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取文件列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "List files",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileOption"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.FileInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/files/size": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取文件夹大小",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Load file size",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.DirSizeReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Load file size [path]",
+                    "formatZH": "获取文件夹大小 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/tree": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "加载文件树",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Load files tree",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileOption"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.FileTree"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/files/upload": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "上传文件",
+                "tags": [
+                    "File"
+                ],
+                "summary": "Upload file",
+                "parameters": [
+                    {
+                        "type": "file",
+                        "description": "request",
+                        "name": "file",
+                        "in": "formData",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "path"
+                    ],
+                    "formatEN": "Upload file [path]",
+                    "formatZH": "上传文件 [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/files/upload/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "分页获取上传文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Page file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.SearchUploadWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.FileInfo"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/files/wget": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载远端文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "File"
+                ],
+                "summary": "Wget file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FileWget"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "url",
+                        "path",
+                        "name"
+                    ],
+                    "formatEN": "Download url =\u003e [path]/[name]",
+                    "formatZH": "下载 url =\u003e [path]/[name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/groups": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建系统组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Group"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.GroupCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "type"
+                    ],
+                    "formatEN": "create group [name][type]",
+                    "formatZH": "创建组 [name][type]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/groups/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除系统组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Group"
+                ],
+                "summary": "Delete group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "groups",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        },
+                        {
+                            "db": "groups",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "type",
+                            "output_value": "type"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "delete group [type][name]",
+                    "formatZH": "删除组 [type][name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/groups/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "查询系统组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Group"
+                ],
+                "summary": "List groups",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.GroupSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.GroupInfo"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/groups/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新系统组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Group"
+                ],
+                "summary": "Update group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.GroupUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "type"
+                    ],
+                    "formatEN": "update group [name][type]",
+                    "formatZH": "更新组 [name][type]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/conffile/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "上传文件更新 SSH 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Update host SSH setting by file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SSHConf"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "update SSH conf",
+                    "formatZH": "修改 SSH 配置文件",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/ssh/conf": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 SSH 配置文件",
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Load host SSH conf",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/host/ssh/generate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "生成 SSH 密钥",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Generate host SSH secret",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.GenerateSSH"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "generate SSH secret",
+                    "formatZH": "生成 SSH 密钥 ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/ssh/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 SSH 登录日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Load host SSH logs",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchSSHLog"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.SSHLog"
+                        }
+                    }
+                }
+            }
+        },
+        "/host/ssh/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 SSH 服务状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Operate SSH",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Operate"
+                        }
+                    }
+                ],
+                "responses": {},
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operation"
+                    ],
+                    "formatEN": "[operation] SSH",
+                    "formatZH": "[operation] SSH ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/ssh/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "加载 SSH 配置信息",
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Load host SSH setting info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.SSHInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/host/ssh/secret": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 SSH 密钥",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Load host SSH secret",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.GenerateLoad"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/host/ssh/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 SSH 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "SSH"
+                ],
+                "summary": "Update host SSH setting",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SSHUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "value"
+                    ],
+                    "formatEN": "update SSH setting [key] =\u003e [value]",
+                    "formatZH": "修改 SSH 配置 [key] =\u003e [value]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/tool": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取主机工具状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Get tool",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.HostToolReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/host/tool/config": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作主机工具配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Get tool config",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.HostToolConfig"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operate"
+                    ],
+                    "formatEN": "[operate] tool config",
+                    "formatZH": "[operate] 主机工具配置文件 ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/tool/create": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建主机工具配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Create Host tool Config",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.HostToolCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type"
+                    ],
+                    "formatEN": "create [type] config",
+                    "formatZH": "创建 [type] 配置",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/tool/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取主机工具日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Get tool",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.HostToolLogReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/host/tool/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作主机工具",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Operate tool",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.HostToolReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operate",
+                        "type"
+                    ],
+                    "formatEN": "[operate] [type]",
+                    "formatZH": "[operate] [type] ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/tool/supervisor/process": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 Supervisor 进程配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Get Supervisor process config",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作守护进程",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Create Supervisor process",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.SupervisorProcessConfig"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operate"
+                    ],
+                    "formatEN": "[operate] process",
+                    "formatZH": "[operate] 守护进程 ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/host/tool/supervisor/process/file": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作 Supervisor 进程文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host tool"
+                ],
+                "summary": "Get Supervisor process config",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.SupervisorProcessFileReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operate"
+                    ],
+                    "formatEN": "[operate] Supervisor Process Config file",
+                    "formatZH": "[operate] Supervisor 进程文件 ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建主机",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Create host",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.HostOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "addr"
+                    ],
+                    "formatEN": "create host [name][addr]",
+                    "formatZH": "创建主机 [name][addr]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/command": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取快速命令列表",
+                "tags": [
+                    "Command"
+                ],
+                "summary": "List commands",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.CommandInfo"
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建快速命令",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Command"
+                ],
+                "summary": "Create command",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CommandOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "command"
+                    ],
+                    "formatEN": "create quick command [name][command]",
+                    "formatZH": "创建快捷命令 [name][command]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/command/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除快速命令",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Command"
+                ],
+                "summary": "Delete command",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDeleteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "commands",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete quick command [names]",
+                    "formatZH": "删除快捷命令 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/command/redis": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 redis 快速命令列表",
+                "tags": [
+                    "Redis Command"
+                ],
+                "summary": "List redis commands",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "Array"
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "保存 Redis 快速命令",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Redis Command"
+                ],
+                "summary": "Save redis command",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.RedisCommand"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "command"
+                    ],
+                    "formatEN": "save quick command for redis [name][command]",
+                    "formatZH": "保存 redis 快捷命令 [name][command]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/command/redis/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除 redis 快速命令",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Redis Command"
+                ],
+                "summary": "Delete redis command",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDeleteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "redis_commands",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete quick command of redis [names]",
+                    "formatZH": "删除 redis 快捷命令 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/command/redis/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 redis 快速命令列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Redis Command"
+                ],
+                "summary": "Page redis commands",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/command/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取快速命令列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Command"
+                ],
+                "summary": "Page commands",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/command/tree": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取快速命令树",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Command"
+                ],
+                "summary": "Tree commands",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "Array"
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/command/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新快速命令",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Command"
+                ],
+                "summary": "Update command",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CommandOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "update quick command [name]",
+                    "formatZH": "更新快捷命令 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除主机",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Delete host",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDeleteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "hosts",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "addr",
+                            "output_value": "addrs"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete host [addrs]",
+                    "formatZH": "删除主机 [addrs]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/firewall/base": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取防火墙基础信息",
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Load firewall base info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.FirewallBaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/firewall/batch": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "批量删除防火墙规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchRuleOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/hosts/firewall/forward": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新防火墙端口转发规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ForwardRuleOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "source_port"
+                    ],
+                    "formatEN": "update port forward rules [source_port]",
+                    "formatZH": "更新端口转发规则 [source_port]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/firewall/ip": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建防火墙 IP 规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.AddrRuleOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "strategy",
+                        "address"
+                    ],
+                    "formatEN": "create address rules [strategy][address]",
+                    "formatZH": "添加 ip 规则 [strategy] [address]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/firewall/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改防火墙状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Page firewall status",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.FirewallOperation"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operation"
+                    ],
+                    "formatEN": "[operation] firewall",
+                    "formatZH": "[operation] 防火墙",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/firewall/port": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建防火墙端口规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PortRuleOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "port",
+                        "strategy"
+                    ],
+                    "formatEN": "create port rules [strategy][port]",
+                    "formatZH": "添加端口规则 [strategy] [port]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/firewall/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取防火墙规则列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Page firewall rules",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.RuleSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/firewall/update/addr": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 ip 防火墙规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.AddrRuleUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/hosts/firewall/update/description": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新防火墙描述",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Update rule description",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateFirewallDescription"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/hosts/firewall/update/port": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新端口防火墙规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Firewall"
+                ],
+                "summary": "Create group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PortRuleUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/hosts/monitor/clean": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清空监控数据",
+                "tags": [
+                    "Monitor"
+                ],
+                "summary": "Clean monitor datas",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "clean monitor datas",
+                    "formatZH": "清空监控数据",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/monitor/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取监控数据",
+                "tags": [
+                    "Monitor"
+                ],
+                "summary": "Load monitor datas",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MonitorSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/hosts/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取主机列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Page host",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchHostWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.HostTree"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/test/byid/:id": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "测试主机连接",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Test host conn by host id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "boolean"
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/test/byinfo": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "测试主机连接",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Test host conn by info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.HostConnTest"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/hosts/tree": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "加载主机树",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Load host tree",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchForTree"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.HostTree"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/hosts/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新主机",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Update host",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.HostOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "addr"
+                    ],
+                    "formatEN": "update host [name][addr]",
+                    "formatZH": "更新主机信息 [name][addr]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/hosts/update/group": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "切换分组",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Host"
+                ],
+                "summary": "Update host group",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangeHostGroup"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "hosts",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "addr",
+                            "output_value": "addr"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "group"
+                    ],
+                    "formatEN": "change host [addr] group =\u003e [group]",
+                    "formatZH": "切换主机[addr]分组 =\u003e [group]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/logs/clean": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清空操作日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Logs"
+                ],
+                "summary": "Clean operation logs",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CleanLog"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "logType"
+                    ],
+                    "formatEN": "Clean the [logType] log information",
+                    "formatZH": "清空 [logType] 日志信息",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/logs/login": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统登录日志列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Logs"
+                ],
+                "summary": "Page login logs",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchLgLogWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/logs/operation": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统操作日志列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Logs"
+                ],
+                "summary": "Page operation logs",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchOpLogWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/logs/system": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统日志",
+                "tags": [
+                    "Logs"
+                ],
+                "summary": "Load system logs",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/logs/system/files": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统日志文件列表",
+                "tags": [
+                    "Logs"
+                ],
+                "summary": "Load system log files",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/openresty": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 OpenResty 配置信息",
+                "tags": [
+                    "OpenResty"
+                ],
+                "summary": "Load OpenResty conf",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.FileInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/openresty/clear": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清理 OpenResty 代理缓存",
+                "tags": [
+                    "OpenResty"
+                ],
+                "summary": "Clear OpenResty proxy cache",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Clear nginx proxy cache",
+                    "formatZH": "清理 Openresty 代理缓存",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/openresty/file": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "上传更新 OpenResty 配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "OpenResty"
+                ],
+                "summary": "Update OpenResty conf by upload file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxConfigFileUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Update nginx conf",
+                    "formatZH": "更新 nginx 配置",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/openresty/scope": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取部分 OpenResty 配置信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "OpenResty"
+                ],
+                "summary": "Load partial OpenResty conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxScopeReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.NginxParam"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/openresty/status": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 OpenResty 状态信息",
+                "tags": [
+                    "OpenResty"
+                ],
+                "summary": "Load OpenResty status info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.NginxStatus"
+                        }
+                    }
+                }
+            }
+        },
+        "/openresty/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 OpenResty 配置信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "OpenResty"
+                ],
+                "summary": "Update OpenResty conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxConfigUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteId",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteId"
+                    ],
+                    "formatEN": "Update nginx conf [domain]",
+                    "formatZH": "更新 nginx 配置 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/process/stop": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "停止进程",
+                "tags": [
+                    "Process"
+                ],
+                "summary": "Stop Process",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.ProcessReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "PID"
+                    ],
+                    "formatEN": "结束进程 [PID]",
+                    "formatZH": "结束进程 [PID]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/runtimes": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建运行环境",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Create runtime",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.RuntimeCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Create runtime [name]",
+                    "formatZH": "创建运行环境 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/runtimes/:id": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取运行环境",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Get runtime",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除运行环境",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Delete runtime",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.RuntimeDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Delete website [name]",
+                    "formatZH": "删除网站 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/runtimes/node/modules": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 Node 项目的 modules",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Get Node modules",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NodeModuleReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/node/modules/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作 Node 项目 modules",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Operate Node modules",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NodeModuleReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/node/package": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 Node 项目的 scripts",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Get Node package scripts",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NodePackageReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作运行环境",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Operate runtime",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.RuntimeOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Operate runtime [name]",
+                    "formatZH": "操作运行环境 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/runtimes/php/extensions": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Create Extensions",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "PHP Extensions"
+                ],
+                "summary": "Create Extensions",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.PHPExtensionsCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/php/extensions/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Delete Extensions",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "PHP Extensions"
+                ],
+                "summary": "Delete Extensions",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.PHPExtensionsDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/php/extensions/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Page Extensions",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "PHP Extensions"
+                ],
+                "summary": "Page Extensions",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.PHPExtensionsSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.PHPExtensionsDTO"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/runtimes/php/extensions/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Update Extensions",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "PHP Extensions"
+                ],
+                "summary": "Update Extensions",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.PHPExtensionsUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取运行环境列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "List runtimes",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.RuntimeSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/sync": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "同步运行环境状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Sync runtime status",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/runtimes/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新运行环境",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Runtime"
+                ],
+                "summary": "Update runtime",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.RuntimeUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Update runtime [name]",
+                    "formatZH": "更新运行环境 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建备份账号",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Create backup account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BackupOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type"
+                    ],
+                    "formatEN": "create backup account [type]",
+                    "formatZH": "创建备份账号 [type]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/backup": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "备份系统数据",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Backup system data",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CommonBackup"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type",
+                        "name",
+                        "detailName"
+                    ],
+                    "formatEN": "backup [type] data [name][detailName]",
+                    "formatZH": "备份 [type] 数据 [name][detailName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除备份账号",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Delete backup account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "backup_accounts",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "type",
+                            "output_value": "types"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "delete backup account [types]",
+                    "formatZH": "删除备份账号 [types]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/onedrive": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 OneDrive 信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Load OneDrive info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.OneDriveInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/backup/record/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除备份记录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Delete backup record",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDeleteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "backup_records",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "file_name",
+                            "output_value": "files"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete backup records [files]",
+                    "formatZH": "删除备份记录 [files]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/record/download": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载备份记录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Download backup record",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.DownloadRecord"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "source",
+                        "fileName"
+                    ],
+                    "formatEN": "download backup records [source][fileName]",
+                    "formatZH": "下载备份记录 [source][fileName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/record/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取备份记录列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Page backup records",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.RecordSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/backup/record/search/bycronjob": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过计划任务获取备份记录列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Page backup records by cronjob",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.RecordSearchByCronjob"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/backup/recover": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "恢复系统数据",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Recover system data",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CommonRecover"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type",
+                        "name",
+                        "detailName",
+                        "file"
+                    ],
+                    "formatEN": "recover [type] data [name][detailName] from [file]",
+                    "formatZH": "从 [file] 恢复 [type] 数据 [name][detailName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/recover/byupload": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "从上传恢复系统数据",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Recover system data by upload",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.CommonRecover"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type",
+                        "name",
+                        "detailName",
+                        "file"
+                    ],
+                    "formatEN": "recover [type] data [name][detailName] from [file]",
+                    "formatZH": "从 [file] 恢复 [type] 数据 [name][detailName]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/backup/refresh/onedrive": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "刷新 OneDrive token",
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Refresh OneDrive token",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/backup/search": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取备份账号列表",
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "List backup accounts",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.BackupInfo"
+                            }
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 bucket 列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "List buckets",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ForBuckets"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/backup/search/files": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取备份账号内文件列表",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "List files from backup accounts",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BackupSearchFile"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/backup/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新备份账号信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Backup Account"
+                ],
+                "summary": "Update backup account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BackupOperate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type"
+                    ],
+                    "formatEN": "update backup account [types]",
+                    "formatZH": "更新备份账号 [types]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/basedir": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取安装根目录",
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load local backup dir",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/bind/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新系统监听信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update system bind info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BindInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "ipv6",
+                        "bindAddress"
+                    ],
+                    "formatEN": "update system bind info =\u003e ipv6: [ipv6], 监听 IP: [bindAddress]",
+                    "formatZH": "修改系统监听信息 =\u003e ipv6: [ipv6], 监听 IP: [bindAddress]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/expired/handle": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "重置过期系统登录密码",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Reset system password expired",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PasswordUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "reset an expired Password",
+                    "formatZH": "重置过期密码",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/interface": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统地址信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load system address",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/menu/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "隐藏高级功能菜单",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update system setting",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Hide advanced feature menu.",
+                    "formatZH": "隐藏高级功能菜单",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/mfa": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 mfa 信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load mfa info",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MfaCredential"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/mfa.Otp"
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/mfa/bind": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "Mfa 绑定",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Bind mfa",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.MfaCredential"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "bind mfa",
+                    "formatZH": "mfa 绑定",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/password/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新系统登录密码",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update system password",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PasswordUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "update system password",
+                    "formatZH": "修改系统密码",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/port/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新系统端口",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update system port",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PortUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "serverPort"
+                    ],
+                    "formatEN": "update system port =\u003e [serverPort]",
+                    "formatZH": "修改系统端口 =\u003e [serverPort]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/proxy/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "服务器代理配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update proxy setting",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ProxyUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "proxyUrl",
+                        "proxyPort"
+                    ],
+                    "formatEN": "set proxy [proxyPort]:[proxyPort].",
+                    "formatZH": "服务器代理配置 [proxyPort]:[proxyPort]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "加载系统配置信息",
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load system setting info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/search/available": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统可用状态",
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load system available status",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/snapshot": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建系统快照",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Create system snapshot",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SnapshotCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "from",
+                        "description"
+                    ],
+                    "formatEN": "Create system backup [description] to [from]",
+                    "formatZH": "创建系统快照 [description] 到 [from]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/snapshot/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除系统快照",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Delete system backup",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SnapshotBatchDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "snapshots",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "Delete system backup [name]",
+                    "formatZH": "删除系统快照 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/snapshot/description/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新快照描述信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update snapshot description",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateDescription"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "snapshots",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "description"
+                    ],
+                    "formatEN": "The description of the snapshot [name] is modified =\u003e [description]",
+                    "formatZH": "快照 [name] 描述信息修改 [description]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/snapshot/import": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "导入已有快照",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Import system snapshot",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SnapshotImport"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "from",
+                        "names"
+                    ],
+                    "formatEN": "Sync system snapshots [names] from [from]",
+                    "formatZH": "从 [from] 同步系统快照 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/snapshot/recover": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "从系统快照恢复",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Recover system backup",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SnapshotRecover"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "snapshots",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Recover from system backup [name]",
+                    "formatZH": "从系统快照 [name] 恢复",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/snapshot/rollback": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "从系统快照回滚",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Rollback system backup",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SnapshotRecover"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "snapshots",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Rollback from system backup [name]",
+                    "formatZH": "从系统快照 [name] 回滚",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/snapshot/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统快照列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Page system snapshot",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/snapshot/status": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取快照状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load Snapshot status",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/ssl/download": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载证书",
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Download system cert",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/settings/ssl/info": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取证书信息",
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load system cert info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/settings/ssl/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改系统 ssl 登录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update system ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SSLUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "ssl"
+                    ],
+                    "formatEN": "update system ssl =\u003e [ssl]",
+                    "formatZH": "修改系统 ssl =\u003e [ssl]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新系统配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Update system setting",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "value"
+                    ],
+                    "formatEN": "update system setting [key] =\u003e [value]",
+                    "formatZH": "修改系统配置 [key] =\u003e [value]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/settings/upgrade": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取版本 release notes",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Load release notes by version",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Upgrade"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "系统更新",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "System Setting"
+                ],
+                "summary": "Upgrade",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Upgrade"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "version"
+                    ],
+                    "formatEN": "upgrade system =\u003e [version]",
+                    "formatZH": "更新系统 =\u003e [version]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建扫描规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Create clam",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "path"
+                    ],
+                    "formatEN": "create clam [name][path]",
+                    "formatZH": "创建扫描规则 [name][path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam/base": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 Clam 基础信息",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Load clam base info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamBaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/clam/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除扫描规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Delete clam",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "clams",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "names"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete clam [names]",
+                    "formatZH": "删除扫描规则 [names]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam/file/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取扫描文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Load clam file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamFileReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/clam/file/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新病毒扫描配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Update clam file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateByNameAndFile"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/clam/handle": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "执行病毒扫描",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Handle clam scan",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "clams",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "handle clam scan [name]",
+                    "formatZH": "执行病毒扫描 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 Clam 状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Operate Clam",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Operate"
+                        }
+                    }
+                ],
+                "responses": {},
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operation"
+                    ],
+                    "formatEN": "[operation] FTP",
+                    "formatZH": "[operation] Clam",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam/record/clean": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清空扫描报告",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Clean clam record",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperateByID"
+                        }
+                    }
+                ],
+                "responses": {},
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "clams",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": true,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "clean clam record [name]",
+                    "formatZH": "清空扫描报告 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam/record/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取扫描结果详情",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Load clam record detail",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamLogReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/clam/record/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取扫描结果列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Page clam record",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamLogSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/clam/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取扫描规则列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Page clam",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/clam/status/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改扫描规则状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Update clam status",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamUpdateStatus"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "clams",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "status"
+                    ],
+                    "formatEN": "change the status of clam [name] to [status].",
+                    "formatZH": "修改扫描规则 [name] 状态为 [status]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clam/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改扫描规则",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Clam"
+                ],
+                "summary": "Update clam",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ClamUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name",
+                        "path"
+                    ],
+                    "formatEN": "update clam [name][path]",
+                    "formatZH": "修改扫描规则 [name][path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/clean": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "清理系统垃圾文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Clean system",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/dto.Clean"
+                            }
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "Clean system junk files",
+                    "formatZH": "清理系统垃圾文件",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/device/base": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取设备基础信息",
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Load device base info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.DeviceBaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/device/check/dns": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "检查系统 DNS 配置可用性",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Check device DNS conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/device/conf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "load conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.OperationWithName"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/device/update/byconf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过文件修改配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Update device conf by file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateByNameAndFile"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/device/update/conf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改系统参数",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Update device",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SettingUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "value"
+                    ],
+                    "formatEN": "update device conf [key] =\u003e [value]",
+                    "formatZH": "修改主机参数 [key] =\u003e [value]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/device/update/host": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改系统 hosts",
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Update device hosts",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "value"
+                    ],
+                    "formatEN": "update device host [key] =\u003e [value]",
+                    "formatZH": "修改主机 Host [key] =\u003e [value]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/device/update/passwd": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改系统密码",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Update device passwd",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.ChangePasswd"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/device/update/swap": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改系统 Swap",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Update device swap",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SwapHelper"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operate",
+                        "path"
+                    ],
+                    "formatEN": "[operate] device swap [path]",
+                    "formatZH": "[operate] 主机 swap [path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/device/zone/options": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取系统可用时区选项",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Device"
+                ],
+                "summary": "list time zone options",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "Array"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/fail2ban/base": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 Fail2ban 基础信息",
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Load fail2ban base info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.Fail2BanBaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/fail2ban/load/conf": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 fail2ban 配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Load fail2ban conf",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/fail2ban/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 Fail2ban 状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Operate fail2ban",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Operate"
+                        }
+                    }
+                ],
+                "responses": {},
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operation"
+                    ],
+                    "formatEN": "[operation] Fail2ban",
+                    "formatZH": "[operation] Fail2ban",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/fail2ban/operate/sshd": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "配置 sshd",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Operate sshd of fail2ban",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Operate"
+                        }
+                    }
+                ],
+                "responses": {}
+            }
+        },
+        "/toolbox/fail2ban/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 Fail2ban ip",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Page fail2ban ip list",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Fail2BanSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "Array"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/fail2ban/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 Fail2ban 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Update fail2ban conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Fail2BanUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "key",
+                        "value"
+                    ],
+                    "formatEN": "update fail2ban conf [key] =\u003e [value]",
+                    "formatZH": "修改 Fail2ban 配置 [key] =\u003e [value]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/fail2ban/update/byconf": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过文件修改 fail2ban 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Fail2ban"
+                ],
+                "summary": "Update fail2ban conf by file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.UpdateByFile"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/toolbox/ftp": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建 FTP 账户",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Create FTP user",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.FtpCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "user",
+                        "path"
+                    ],
+                    "formatEN": "create FTP [user][path]",
+                    "formatZH": "创建 FTP 账户 [user][path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/ftp/base": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 FTP 基础信息",
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Load FTP base info",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.FtpBaseInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/ftp/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除 FTP 账户",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Delete FTP user",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDeleteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "ftps",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "user",
+                            "output_value": "users"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "delete FTP users [users]",
+                    "formatZH": "删除 FTP 账户 [users]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/ftp/log/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 FTP 操作日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Load FTP operation log",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.FtpLogSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/ftp/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 FTP 状态",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Operate FTP",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.Operate"
+                        }
+                    }
+                ],
+                "responses": {},
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "operation"
+                    ],
+                    "formatEN": "[operation] FTP",
+                    "formatZH": "[operation] FTP",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/ftp/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 FTP 账户列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Page FTP user",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.SearchWithPage"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/toolbox/ftp/sync": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "同步 FTP 账户",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Sync FTP user",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.BatchDeleteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "sync FTP users",
+                    "formatZH": "同步 FTP 账户",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/ftp/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改 FTP 账户",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "FTP"
+                ],
+                "summary": "Update FTP user",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.FtpUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "user",
+                        "path"
+                    ],
+                    "formatEN": "update FTP [user][path]",
+                    "formatZH": "修改 FTP 账户 [user][path]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/toolbox/scan": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "扫描系统垃圾文件",
+                "tags": [
+                    "Device"
+                ],
+                "summary": "Scan system",
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [],
+                    "formatEN": "scan System Junk Files",
+                    "formatZH": "扫描系统垃圾文件",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建网站",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Create website",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "primaryDomain"
+                    ],
+                    "formatEN": "Create website [primaryDomain]",
+                    "formatZH": "创建网站 [primaryDomain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/:id": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 id 查询网站",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Search website by id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteDTO"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/:id/config/:type": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 id 查询网站 nginx",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Nginx"
+                ],
+                "summary": "Search website nginx by id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.FileInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/:id/https": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 https 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website HTTPS"
+                ],
+                "summary": "Load https conf",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteHTTPS"
+                        }
+                    }
+                }
+            },
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 https 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website HTTPS"
+                ],
+                "summary": "Update https conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteHTTPSOp"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteHTTPS"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteId",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteId"
+                    ],
+                    "formatEN": "Update website https [domain] conf",
+                    "formatZH": "更新网站 [domain] https 配置",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/acme": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建网站 acme",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Acme"
+                ],
+                "summary": "Create website acme account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteAcmeAccountCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteAcmeAccountDTO"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "email"
+                    ],
+                    "formatEN": "Create website acme [email]",
+                    "formatZH": "创建网站 acme [email]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/acme/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除网站 acme",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Acme"
+                ],
+                "summary": "Delete website acme account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteResourceReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_acme_accounts",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "email",
+                            "output_value": "email"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Delete website acme [email]",
+                    "formatZH": "删除网站 acme [email]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/acme/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站 acme 列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Acme"
+                ],
+                "summary": "Page website acme accounts",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/auths": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取密码访问配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get AuthBasic conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxAuthReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/auths/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新密码访问配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get AuthBasic conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxAuthUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/ca": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建网站 ca",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Create website ca",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCACreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCACreate"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Create website ca [name]",
+                    "formatZH": "创建网站 ca [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ca/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除网站 ca",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Delete website ca",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCommonReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_cas",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Delete website ca [name]",
+                    "formatZH": "删除网站 ca [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ca/download": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载 CA 证书文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Download CA file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteResourceReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_cas",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "download ca file [name]",
+                    "formatZH": "下载 CA 证书文件 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ca/obtain": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "自签 SSL 证书",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Obtain SSL",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCAObtain"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_cas",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Obtain SSL [name]",
+                    "formatZH": "自签 SSL 证书 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ca/renew": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "续签 SSL 证书",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Obtain SSL",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCAObtain"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_cas",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Obtain SSL [name]",
+                    "formatZH": "自签 SSL 证书 [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ca/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站 ca 列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Page website ca",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCASearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/ca/{id}": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站 ca",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website CA"
+                ],
+                "summary": "Get website ca",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "id",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteCADTO"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/check": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "网站创建前检查",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Check before create website",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteInstallCheckReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.WebsitePreInstallCheck"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/config": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取 nginx 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Nginx"
+                ],
+                "summary": "Load nginx conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxScopeReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteNginxConfig"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/config/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 nginx 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Nginx"
+                ],
+                "summary": "Update nginx conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxConfigUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteId",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteId"
+                    ],
+                    "formatEN": "Nginx conf update [domain]",
+                    "formatZH": "nginx 配置修改 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/default/html/:type": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取默认 html",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get default html",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.FileInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/default/html/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新默认 html",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update default html",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteHtmlUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type"
+                    ],
+                    "formatEN": "Update default html",
+                    "formatZH": "更新默认 html",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/default/server": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作网站日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Change default server",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDefaultUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "operate"
+                    ],
+                    "formatEN": "Change default server =\u003e [domain]",
+                    "formatZH": "修改默认 server =\u003e [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除网站",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Delete website",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Delete website [domain]",
+                    "formatZH": "删除网站 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/dir": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站目录配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get website dir",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteCommonReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/dir/permission": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新网站目录权限",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update Site Dir permission",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteUpdateDirPermission"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update  domain [domain] dir permission",
+                    "formatZH": "更新网站 [domain] 目录权限",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/dir/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新网站目录",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update Site Dir",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteUpdateDir"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update  domain [domain] dir",
+                    "formatZH": "更新网站 [domain] 目录",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/dns": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建网站 dns",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website DNS"
+                ],
+                "summary": "Create website dns account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDnsAccountCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Create website dns [name]",
+                    "formatZH": "创建网站 dns [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/dns/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除网站 dns",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website DNS"
+                ],
+                "summary": "Delete website dns account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteResourceReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_dns_accounts",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "name",
+                            "output_value": "name"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Delete website dns [name]",
+                    "formatZH": "删除网站 dns [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/dns/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站 dns 列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website DNS"
+                ],
+                "summary": "Page website dns accounts",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageInfo"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/dns/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新网站 dns",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website DNS"
+                ],
+                "summary": "Update website dns account",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDnsAccountUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "name"
+                    ],
+                    "formatEN": "Update website dns [name]",
+                    "formatZH": "更新网站 dns [name]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/domains": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建网站域名",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Domain"
+                ],
+                "summary": "Create website domain",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDomainCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/model.WebsiteDomain"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "domain"
+                    ],
+                    "formatEN": "Create domain [domain]",
+                    "formatZH": "创建域名 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/domains/:websiteId": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过网站 id 查询域名",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Domain"
+                ],
+                "summary": "Search website domains by websiteId",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "websiteId",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/model.WebsiteDomain"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/domains/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除网站域名",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Domain"
+                ],
+                "summary": "Delete website domain",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDomainDelete"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_domains",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Delete domain [domain]",
+                    "formatZH": "删除域名 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/leech": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取防盗链配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get AntiLeech conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxCommonReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/leech/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新防盗链配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update AntiLeech",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxAntiLeechUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/list": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站列表",
+                "tags": [
+                    "Website"
+                ],
+                "summary": "List websites",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.WebsiteDTO"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/log": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作网站日志",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Operate website log",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteLogReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.WebsiteLog"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "operate"
+                    ],
+                    "formatEN": "[domain][operate] logs",
+                    "formatZH": "[domain][operate] 日志",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/nginx/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 网站 nginx 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website Nginx"
+                ],
+                "summary": "Update website nginx conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteNginxUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "[domain] Nginx conf update",
+                    "formatZH": "[domain] Nginx 配置修改",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/operate": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "操作网站",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Operate website",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteOp"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id",
+                        "operate"
+                    ],
+                    "formatEN": "[operate] website [domain]",
+                    "formatZH": "[operate] 网站 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/options": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站列表",
+                "tags": [
+                    "Website"
+                ],
+                "summary": "List website names",
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/php/config": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 网站 PHP 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website PHP"
+                ],
+                "summary": "Update website php conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsitePHPConfigUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "[domain] PHP conf update",
+                    "formatZH": "[domain] PHP 配置修改",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/php/config/:id": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站 php 配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Load website php conf",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.PHPConfig"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/php/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 php 配置文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website PHP"
+                ],
+                "summary": "Update php conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsitePHPFileUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteId",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteId"
+                    ],
+                    "formatEN": "Nginx conf update [domain]",
+                    "formatZH": "php 配置修改 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/php/version": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "变更 php 版本",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website PHP"
+                ],
+                "summary": "Update php version",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsitePHPVersionReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteId",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteId"
+                    ],
+                    "formatEN": "php version update [domain]",
+                    "formatZH": "php 版本变更 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/proxies": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取反向代理配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get proxy conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteProxyReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/proxies/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改反向代理配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update proxy conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteProxyConfig"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update domain [domain] proxy config",
+                    "formatZH": "修改网站 [domain] 反向代理配置 ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/proxy/file": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新反向代理文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update proxy file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxProxyUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteID",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteID"
+                    ],
+                    "formatEN": "Nginx conf proxy file update [domain]",
+                    "formatZH": "更新反向代理文件 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/redirect": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取重定向配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get redirect conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteProxyReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/redirect/file": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新重定向文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update redirect file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxRedirectUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteID",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteID"
+                    ],
+                    "formatEN": "Nginx conf redirect file update [domain]",
+                    "formatZH": "更新重定向文件 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/redirect/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "修改重定向配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update redirect conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxRedirectReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteID",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteID"
+                    ],
+                    "formatEN": "Update domain [domain] redirect config",
+                    "formatZH": "修改网站 [domain] 重定向理配置 ",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/rewrite": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取伪静态配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Get rewrite conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxRewriteReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/rewrite/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新伪静态配置",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update rewrite conf",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.NginxRewriteUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "websites",
+                            "input_column": "id",
+                            "input_value": "websiteID",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "websiteID"
+                    ],
+                    "formatEN": "Nginx conf rewrite update [domain]",
+                    "formatZH": "伪静态配置修改 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Page websites",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/dto.PageResult"
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/ssl": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "创建网站 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Create website ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSSLCreate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSSLCreate"
+                        }
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "primaryDomain"
+                    ],
+                    "formatEN": "Create website ssl [primaryDomain]",
+                    "formatZH": "创建网站 ssl [primaryDomain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ssl/:id": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过 id 查询 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Search website ssl by id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "id",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/ssl/del": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "删除网站 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Delete website ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteBatchDelReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_ssls",
+                            "input_column": "id",
+                            "input_value": "ids",
+                            "isList": true,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ids"
+                    ],
+                    "formatEN": "Delete ssl [domain]",
+                    "formatZH": "删除 ssl [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ssl/download": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "下载证书文件",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Download SSL  file",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteResourceReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_ssls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "download ssl file [domain]",
+                    "formatZH": "下载证书文件 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ssl/obtain": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "申请证书",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Apply  ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSSLApply"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_ssls",
+                            "input_column": "id",
+                            "input_value": "ID",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "ID"
+                    ],
+                    "formatEN": "apply ssl [domain]",
+                    "formatZH": "申请证书  [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ssl/resolve": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "解析网站 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Resolve website ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteDNSReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/response.WebsiteDNSRes"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/websites/ssl/search": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "获取网站 ssl 列表分页",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Page website ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSSLSearch"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/ssl/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Update ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSSLUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [
+                        {
+                            "db": "website_ssls",
+                            "input_column": "id",
+                            "input_value": "id",
+                            "isList": false,
+                            "output_column": "primary_domain",
+                            "output_value": "domain"
+                        }
+                    ],
+                    "bodyKeys": [
+                        "id"
+                    ],
+                    "formatEN": "Update ssl config [domain]",
+                    "formatZH": "更新证书设置 [domain]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ssl/upload": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "上传 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Upload ssl",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteSSLUpload"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "type"
+                    ],
+                    "formatEN": "Upload ssl [type]",
+                    "formatZH": "上传 ssl [type]",
+                    "paramKeys": []
+                }
+            }
+        },
+        "/websites/ssl/website/:websiteId": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "通过网站 id 查询 ssl",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website SSL"
+                ],
+                "summary": "Search website ssl by website id",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "request",
+                        "name": "websiteId",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                }
+            }
+        },
+        "/websites/update": {
+            "post": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "description": "更新网站",
+                "consumes": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Website"
+                ],
+                "summary": "Update website",
+                "parameters": [
+                    {
+                        "description": "request",
+                        "name": "request",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.WebsiteUpdate"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK"
+                    }
+                },
+                "x-panel-log": {
+                    "BeforeFunctions": [],
+                    "bodyKeys": [
+                        "primaryDomain"
+                    ],
+                    "formatEN": "Update website [primaryDomain]",
+                    "formatZH": "更新网站 [primaryDomain]",
+                    "paramKeys": []
+                }
+            }
+        }
+    },
+    "definitions": {
+        "dto.AddrRuleOperate": {
+            "type": "object",
+            "required": [
+                "address",
+                "operation",
+                "strategy"
+            ],
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "operation": {
+                    "type": "string",
+                    "enum": [
+                        "add",
+                        "remove"
+                    ]
+                },
+                "strategy": {
+                    "type": "string",
+                    "enum": [
+                        "accept",
+                        "drop"
+                    ]
+                }
+            }
+        },
+        "dto.AddrRuleUpdate": {
+            "type": "object",
+            "properties": {
+                "newRule": {
+                    "$ref": "#/definitions/dto.AddrRuleOperate"
+                },
+                "oldRule": {
+                    "$ref": "#/definitions/dto.AddrRuleOperate"
+                }
+            }
+        },
+        "dto.AppInstallInfo": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "key": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.AppResource": {
+            "type": "object",
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.AppVersion": {
+            "type": "object",
+            "properties": {
+                "detailId": {
+                    "type": "integer"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.BackupInfo": {
+            "type": "object",
+            "properties": {
+                "backupPath": {
+                    "type": "string"
+                },
+                "bucket": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "vars": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.BackupOperate": {
+            "type": "object",
+            "required": [
+                "type",
+                "vars"
+            ],
+            "properties": {
+                "accessKey": {
+                    "type": "string"
+                },
+                "backupPath": {
+                    "type": "string"
+                },
+                "bucket": {
+                    "type": "string"
+                },
+                "credential": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "vars": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.BackupSearchFile": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.BatchDelete": {
+            "type": "object",
+            "required": [
+                "names"
+            ],
+            "properties": {
+                "force": {
+                    "type": "boolean"
+                },
+                "names": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "dto.BatchDeleteReq": {
+            "type": "object",
+            "required": [
+                "ids"
+            ],
+            "properties": {
+                "ids": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
+        "dto.BatchRuleOperate": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "rules": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.PortRuleOperate"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.BindInfo": {
+            "type": "object",
+            "required": [
+                "bindAddress",
+                "ipv6"
+            ],
+            "properties": {
+                "bindAddress": {
+                    "type": "string"
+                },
+                "ipv6": {
+                    "type": "string",
+                    "enum": [
+                        "enable",
+                        "disable"
+                    ]
+                }
+            }
+        },
+        "dto.BindUser": {
+            "type": "object",
+            "required": [
+                "database",
+                "db",
+                "password",
+                "permission",
+                "username"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "db": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "permission": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CaptchaResponse": {
+            "type": "object",
+            "properties": {
+                "captchaID": {
+                    "type": "string"
+                },
+                "imagePath": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ChangeDBInfo": {
+            "type": "object",
+            "required": [
+                "database",
+                "from",
+                "type",
+                "value"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "local",
+                        "remote"
+                    ]
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "mysql",
+                        "mariadb",
+                        "postgresql"
+                    ]
+                },
+                "value": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ChangeHostGroup": {
+            "type": "object",
+            "required": [
+                "groupID",
+                "id"
+            ],
+            "properties": {
+                "groupID": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.ChangePasswd": {
+            "type": "object",
+            "properties": {
+                "passwd": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ChangeRedisPass": {
+            "type": "object",
+            "required": [
+                "database"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "value": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamBaseInfo": {
+            "type": "object",
+            "properties": {
+                "freshIsActive": {
+                    "type": "boolean"
+                },
+                "freshIsExist": {
+                    "type": "boolean"
+                },
+                "freshVersion": {
+                    "type": "string"
+                },
+                "isActive": {
+                    "type": "boolean"
+                },
+                "isExist": {
+                    "type": "boolean"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamCreate": {
+            "type": "object",
+            "properties": {
+                "description": {
+                    "type": "string"
+                },
+                "infectedDir": {
+                    "type": "string"
+                },
+                "infectedStrategy": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "spec": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamDelete": {
+            "type": "object",
+            "required": [
+                "ids"
+            ],
+            "properties": {
+                "ids": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                },
+                "removeInfected": {
+                    "type": "boolean"
+                },
+                "removeRecord": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "dto.ClamFileReq": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "tail": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamLogReq": {
+            "type": "object",
+            "properties": {
+                "clamName": {
+                    "type": "string"
+                },
+                "recordName": {
+                    "type": "string"
+                },
+                "tail": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamLogSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "clamID": {
+                    "type": "integer"
+                },
+                "endTime": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "startTime": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamUpdate": {
+            "type": "object",
+            "properties": {
+                "description": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "infectedDir": {
+                    "type": "string"
+                },
+                "infectedStrategy": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "spec": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ClamUpdateStatus": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.Clean": {
+            "type": "object",
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "size": {
+                    "type": "integer"
+                },
+                "treeType": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CleanLog": {
+            "type": "object",
+            "required": [
+                "logType"
+            ],
+            "properties": {
+                "logType": {
+                    "type": "string",
+                    "enum": [
+                        "login",
+                        "operation"
+                    ]
+                }
+            }
+        },
+        "dto.CommandInfo": {
+            "type": "object",
+            "properties": {
+                "command": {
+                    "type": "string"
+                },
+                "groupBelong": {
+                    "type": "string"
+                },
+                "groupID": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CommandOperate": {
+            "type": "object",
+            "required": [
+                "command",
+                "name"
+            ],
+            "properties": {
+                "command": {
+                    "type": "string"
+                },
+                "groupBelong": {
+                    "type": "string"
+                },
+                "groupID": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CommonBackup": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "detailName": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "app",
+                        "mysql",
+                        "mariadb",
+                        "redis",
+                        "website",
+                        "postgresql"
+                    ]
+                }
+            }
+        },
+        "dto.CommonRecover": {
+            "type": "object",
+            "required": [
+                "source",
+                "type"
+            ],
+            "properties": {
+                "detailName": {
+                    "type": "string"
+                },
+                "file": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                },
+                "source": {
+                    "type": "string",
+                    "enum": [
+                        "OSS",
+                        "S3",
+                        "SFTP",
+                        "MINIO",
+                        "LOCAL",
+                        "COS",
+                        "KODO",
+                        "OneDrive",
+                        "WebDAV"
+                    ]
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "app",
+                        "mysql",
+                        "mariadb",
+                        "redis",
+                        "website",
+                        "postgresql"
+                    ]
+                }
+            }
+        },
+        "dto.ComposeCreate": {
+            "type": "object",
+            "required": [
+                "from"
+            ],
+            "properties": {
+                "file": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "edit",
+                        "path",
+                        "template"
+                    ]
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "template": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.ComposeOperation": {
+            "type": "object",
+            "required": [
+                "name",
+                "operation",
+                "path"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "operation": {
+                    "type": "string",
+                    "enum": [
+                        "start",
+                        "stop",
+                        "down"
+                    ]
+                },
+                "path": {
+                    "type": "string"
+                },
+                "withFile": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "dto.ComposeTemplateCreate": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ComposeTemplateInfo": {
+            "type": "object",
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ComposeTemplateUpdate": {
+            "type": "object",
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.ComposeUpdate": {
+            "type": "object",
+            "required": [
+                "content",
+                "name",
+                "path"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ContainerCommit": {
+            "type": "object",
+            "required": [
+                "containerID"
+            ],
+            "properties": {
+                "author": {
+                    "type": "string"
+                },
+                "comment": {
+                    "type": "string"
+                },
+                "containerID": {
+                    "type": "string"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "newImageName": {
+                    "type": "string"
+                },
+                "pause": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "dto.ContainerListStats": {
+            "type": "object",
+            "properties": {
+                "containerID": {
+                    "type": "string"
+                },
+                "cpuPercent": {
+                    "type": "number"
+                },
+                "cpuTotalUsage": {
+                    "type": "integer"
+                },
+                "memoryCache": {
+                    "type": "integer"
+                },
+                "memoryLimit": {
+                    "type": "integer"
+                },
+                "memoryPercent": {
+                    "type": "number"
+                },
+                "memoryUsage": {
+                    "type": "integer"
+                },
+                "percpuUsage": {
+                    "type": "integer"
+                },
+                "systemUsage": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.ContainerOperate": {
+            "type": "object",
+            "required": [
+                "image",
+                "name"
+            ],
+            "properties": {
+                "autoRemove": {
+                    "type": "boolean"
+                },
+                "cmd": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "containerID": {
+                    "type": "string"
+                },
+                "cpuShares": {
+                    "type": "integer"
+                },
+                "entrypoint": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "env": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "exposedPorts": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.PortHelper"
+                    }
+                },
+                "forcePull": {
+                    "type": "boolean"
+                },
+                "image": {
+                    "type": "string"
+                },
+                "ipv4": {
+                    "type": "string"
+                },
+                "ipv6": {
+                    "type": "string"
+                },
+                "labels": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "memory": {
+                    "type": "number"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "nanoCPUs": {
+                    "type": "number"
+                },
+                "network": {
+                    "type": "string"
+                },
+                "openStdin": {
+                    "type": "boolean"
+                },
+                "privileged": {
+                    "type": "boolean"
+                },
+                "publishAllPorts": {
+                    "type": "boolean"
+                },
+                "restartPolicy": {
+                    "type": "string"
+                },
+                "tty": {
+                    "type": "boolean"
+                },
+                "volumes": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.VolumeHelper"
+                    }
+                }
+            }
+        },
+        "dto.ContainerOperation": {
+            "type": "object",
+            "required": [
+                "names",
+                "operation"
+            ],
+            "properties": {
+                "names": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "operation": {
+                    "type": "string",
+                    "enum": [
+                        "start",
+                        "stop",
+                        "restart",
+                        "kill",
+                        "pause",
+                        "unpause",
+                        "remove"
+                    ]
+                }
+            }
+        },
+        "dto.ContainerPrune": {
+            "type": "object",
+            "required": [
+                "pruneType"
+            ],
+            "properties": {
+                "pruneType": {
+                    "type": "string",
+                    "enum": [
+                        "container",
+                        "image",
+                        "volume",
+                        "network",
+                        "buildcache"
+                    ]
+                },
+                "withTagAll": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "dto.ContainerPruneReport": {
+            "type": "object",
+            "properties": {
+                "deletedNumber": {
+                    "type": "integer"
+                },
+                "spaceReclaimed": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.ContainerRename": {
+            "type": "object",
+            "required": [
+                "name",
+                "newName"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "newName": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ContainerStats": {
+            "type": "object",
+            "properties": {
+                "cache": {
+                    "type": "number"
+                },
+                "cpuPercent": {
+                    "type": "number"
+                },
+                "ioRead": {
+                    "type": "number"
+                },
+                "ioWrite": {
+                    "type": "number"
+                },
+                "memory": {
+                    "type": "number"
+                },
+                "networkRX": {
+                    "type": "number"
+                },
+                "networkTX": {
+                    "type": "number"
+                },
+                "shotTime": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ContainerUpgrade": {
+            "type": "object",
+            "required": [
+                "image",
+                "name"
+            ],
+            "properties": {
+                "forcePull": {
+                    "type": "boolean"
+                },
+                "image": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CronjobBatchDelete": {
+            "type": "object",
+            "required": [
+                "ids"
+            ],
+            "properties": {
+                "cleanData": {
+                    "type": "boolean"
+                },
+                "ids": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
+        "dto.CronjobClean": {
+            "type": "object",
+            "required": [
+                "cronjobID"
+            ],
+            "properties": {
+                "cleanData": {
+                    "type": "boolean"
+                },
+                "cronjobID": {
+                    "type": "integer"
+                },
+                "isDelete": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "dto.CronjobCreate": {
+            "type": "object",
+            "required": [
+                "name",
+                "spec",
+                "type"
+            ],
+            "properties": {
+                "appID": {
+                    "type": "string"
+                },
+                "backupAccounts": {
+                    "type": "string"
+                },
+                "command": {
+                    "type": "string"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "dbName": {
+                    "type": "string"
+                },
+                "dbType": {
+                    "type": "string"
+                },
+                "defaultDownload": {
+                    "type": "string"
+                },
+                "exclusionRules": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "retainCopies": {
+                    "type": "integer",
+                    "minimum": 1
+                },
+                "script": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                },
+                "sourceDir": {
+                    "type": "string"
+                },
+                "spec": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                },
+                "website": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CronjobDownload": {
+            "type": "object",
+            "required": [
+                "backupAccountID",
+                "recordID"
+            ],
+            "properties": {
+                "backupAccountID": {
+                    "type": "integer"
+                },
+                "recordID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.CronjobUpdate": {
+            "type": "object",
+            "required": [
+                "id",
+                "name",
+                "spec"
+            ],
+            "properties": {
+                "appID": {
+                    "type": "string"
+                },
+                "backupAccounts": {
+                    "type": "string"
+                },
+                "command": {
+                    "type": "string"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "dbName": {
+                    "type": "string"
+                },
+                "dbType": {
+                    "type": "string"
+                },
+                "defaultDownload": {
+                    "type": "string"
+                },
+                "exclusionRules": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "retainCopies": {
+                    "type": "integer",
+                    "minimum": 1
+                },
+                "script": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                },
+                "sourceDir": {
+                    "type": "string"
+                },
+                "spec": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                },
+                "website": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.CronjobUpdateStatus": {
+            "type": "object",
+            "required": [
+                "id",
+                "status"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DBBaseInfo": {
+            "type": "object",
+            "properties": {
+                "containerName": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.DBConfUpdateByFile": {
+            "type": "object",
+            "required": [
+                "database",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "file": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "mysql",
+                        "mariadb",
+                        "postgresql",
+                        "redis"
+                    ]
+                }
+            }
+        },
+        "dto.DaemonJsonConf": {
+            "type": "object",
+            "properties": {
+                "cgroupDriver": {
+                    "type": "string"
+                },
+                "experimental": {
+                    "type": "boolean"
+                },
+                "fixedCidrV6": {
+                    "type": "string"
+                },
+                "insecureRegistries": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "ip6Tables": {
+                    "type": "boolean"
+                },
+                "iptables": {
+                    "type": "boolean"
+                },
+                "ipv6": {
+                    "type": "boolean"
+                },
+                "isSwarm": {
+                    "type": "boolean"
+                },
+                "liveRestore": {
+                    "type": "boolean"
+                },
+                "logMaxFile": {
+                    "type": "string"
+                },
+                "logMaxSize": {
+                    "type": "string"
+                },
+                "registryMirrors": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "status": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DaemonJsonUpdateByFile": {
+            "type": "object",
+            "properties": {
+                "file": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DashboardBase": {
+            "type": "object",
+            "properties": {
+                "appInstalledNumber": {
+                    "type": "integer"
+                },
+                "cpuCores": {
+                    "type": "integer"
+                },
+                "cpuLogicalCores": {
+                    "type": "integer"
+                },
+                "cpuModelName": {
+                    "type": "string"
+                },
+                "cronjobNumber": {
+                    "type": "integer"
+                },
+                "currentInfo": {
+                    "$ref": "#/definitions/dto.DashboardCurrent"
+                },
+                "databaseNumber": {
+                    "type": "integer"
+                },
+                "hostname": {
+                    "type": "string"
+                },
+                "kernelArch": {
+                    "type": "string"
+                },
+                "kernelVersion": {
+                    "type": "string"
+                },
+                "os": {
+                    "type": "string"
+                },
+                "platform": {
+                    "type": "string"
+                },
+                "platformFamily": {
+                    "type": "string"
+                },
+                "platformVersion": {
+                    "type": "string"
+                },
+                "virtualizationSystem": {
+                    "type": "string"
+                },
+                "websiteNumber": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.DashboardCurrent": {
+            "type": "object",
+            "properties": {
+                "cpuPercent": {
+                    "type": "array",
+                    "items": {
+                        "type": "number"
+                    }
+                },
+                "cpuTotal": {
+                    "type": "integer"
+                },
+                "cpuUsed": {
+                    "type": "number"
+                },
+                "cpuUsedPercent": {
+                    "type": "number"
+                },
+                "diskData": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.DiskInfo"
+                    }
+                },
+                "gpuData": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.GPUInfo"
+                    }
+                },
+                "ioCount": {
+                    "type": "integer"
+                },
+                "ioReadBytes": {
+                    "type": "integer"
+                },
+                "ioReadTime": {
+                    "type": "integer"
+                },
+                "ioWriteBytes": {
+                    "type": "integer"
+                },
+                "ioWriteTime": {
+                    "type": "integer"
+                },
+                "load1": {
+                    "type": "number"
+                },
+                "load15": {
+                    "type": "number"
+                },
+                "load5": {
+                    "type": "number"
+                },
+                "loadUsagePercent": {
+                    "type": "number"
+                },
+                "memoryAvailable": {
+                    "type": "integer"
+                },
+                "memoryTotal": {
+                    "type": "integer"
+                },
+                "memoryUsed": {
+                    "type": "integer"
+                },
+                "memoryUsedPercent": {
+                    "type": "number"
+                },
+                "netBytesRecv": {
+                    "type": "integer"
+                },
+                "netBytesSent": {
+                    "type": "integer"
+                },
+                "procs": {
+                    "type": "integer"
+                },
+                "shotTime": {
+                    "type": "string"
+                },
+                "swapMemoryAvailable": {
+                    "type": "integer"
+                },
+                "swapMemoryTotal": {
+                    "type": "integer"
+                },
+                "swapMemoryUsed": {
+                    "type": "integer"
+                },
+                "swapMemoryUsedPercent": {
+                    "type": "number"
+                },
+                "timeSinceUptime": {
+                    "type": "string"
+                },
+                "uptime": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.DatabaseCreate": {
+            "type": "object",
+            "required": [
+                "from",
+                "name",
+                "type",
+                "username",
+                "version"
+            ],
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "clientCert": {
+                    "type": "string"
+                },
+                "clientKey": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "local",
+                        "remote"
+                    ]
+                },
+                "name": {
+                    "type": "string",
+                    "maxLength": 256
+                },
+                "password": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "rootCert": {
+                    "type": "string"
+                },
+                "skipVerify": {
+                    "type": "boolean"
+                },
+                "ssl": {
+                    "type": "boolean"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DatabaseDelete": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "deleteBackup": {
+                    "type": "boolean"
+                },
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.DatabaseInfo": {
+            "type": "object",
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "clientCert": {
+                    "type": "string"
+                },
+                "clientKey": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string",
+                    "maxLength": 256
+                },
+                "password": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "rootCert": {
+                    "type": "string"
+                },
+                "skipVerify": {
+                    "type": "boolean"
+                },
+                "ssl": {
+                    "type": "boolean"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DatabaseItem": {
+            "type": "object",
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DatabaseOption": {
+            "type": "object",
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "database": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DatabaseSearch": {
+            "type": "object",
+            "required": [
+                "order",
+                "orderBy",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "info": {
+                    "type": "string"
+                },
+                "order": {
+                    "type": "string",
+                    "enum": [
+                        "null",
+                        "ascending",
+                        "descending"
+                    ]
+                },
+                "orderBy": {
+                    "type": "string",
+                    "enum": [
+                        "name",
+                        "created_at"
+                    ]
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DatabaseUpdate": {
+            "type": "object",
+            "required": [
+                "type",
+                "username",
+                "version"
+            ],
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "clientCert": {
+                    "type": "string"
+                },
+                "clientKey": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "rootCert": {
+                    "type": "string"
+                },
+                "skipVerify": {
+                    "type": "boolean"
+                },
+                "ssl": {
+                    "type": "boolean"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DeviceBaseInfo": {
+            "type": "object",
+            "properties": {
+                "dns": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "hostname": {
+                    "type": "string"
+                },
+                "hosts": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.HostHelper"
+                    }
+                },
+                "localTime": {
+                    "type": "string"
+                },
+                "maxSize": {
+                    "type": "integer"
+                },
+                "ntp": {
+                    "type": "string"
+                },
+                "swapDetails": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.SwapHelper"
+                    }
+                },
+                "swapMemoryAvailable": {
+                    "type": "integer"
+                },
+                "swapMemoryTotal": {
+                    "type": "integer"
+                },
+                "swapMemoryUsed": {
+                    "type": "integer"
+                },
+                "timeZone": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.DiskInfo": {
+            "type": "object",
+            "properties": {
+                "device": {
+                    "type": "string"
+                },
+                "free": {
+                    "type": "integer"
+                },
+                "inodesFree": {
+                    "type": "integer"
+                },
+                "inodesTotal": {
+                    "type": "integer"
+                },
+                "inodesUsed": {
+                    "type": "integer"
+                },
+                "inodesUsedPercent": {
+                    "type": "number"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "total": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "used": {
+                    "type": "integer"
+                },
+                "usedPercent": {
+                    "type": "number"
+                }
+            }
+        },
+        "dto.DockerOperation": {
+            "type": "object",
+            "required": [
+                "operation"
+            ],
+            "properties": {
+                "operation": {
+                    "type": "string",
+                    "enum": [
+                        "start",
+                        "restart",
+                        "stop"
+                    ]
+                }
+            }
+        },
+        "dto.DownloadRecord": {
+            "type": "object",
+            "required": [
+                "fileDir",
+                "fileName",
+                "source"
+            ],
+            "properties": {
+                "fileDir": {
+                    "type": "string"
+                },
+                "fileName": {
+                    "type": "string"
+                },
+                "source": {
+                    "type": "string",
+                    "enum": [
+                        "OSS",
+                        "S3",
+                        "SFTP",
+                        "MINIO",
+                        "LOCAL",
+                        "COS",
+                        "KODO",
+                        "OneDrive",
+                        "WebDAV"
+                    ]
+                }
+            }
+        },
+        "dto.Fail2BanBaseInfo": {
+            "type": "object",
+            "properties": {
+                "banAction": {
+                    "type": "string"
+                },
+                "banTime": {
+                    "type": "string"
+                },
+                "findTime": {
+                    "type": "string"
+                },
+                "isActive": {
+                    "type": "boolean"
+                },
+                "isEnable": {
+                    "type": "boolean"
+                },
+                "isExist": {
+                    "type": "boolean"
+                },
+                "logPath": {
+                    "type": "string"
+                },
+                "maxRetry": {
+                    "type": "integer"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.Fail2BanSearch": {
+            "type": "object",
+            "required": [
+                "status"
+            ],
+            "properties": {
+                "status": {
+                    "type": "string",
+                    "enum": [
+                        "banned",
+                        "ignore"
+                    ]
+                }
+            }
+        },
+        "dto.Fail2BanUpdate": {
+            "type": "object",
+            "required": [
+                "key"
+            ],
+            "properties": {
+                "key": {
+                    "type": "string",
+                    "enum": [
+                        "port",
+                        "bantime",
+                        "findtime",
+                        "maxretry",
+                        "banaction",
+                        "logpath",
+                        "port"
+                    ]
+                },
+                "value": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.FirewallBaseInfo": {
+            "type": "object",
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "pingStatus": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.FirewallOperation": {
+            "type": "object",
+            "required": [
+                "operation"
+            ],
+            "properties": {
+                "operation": {
+                    "type": "string",
+                    "enum": [
+                        "start",
+                        "stop",
+                        "restart",
+                        "disablePing",
+                        "enablePing"
+                    ]
+                }
+            }
+        },
+        "dto.ForBuckets": {
+            "type": "object",
+            "required": [
+                "credential",
+                "type",
+                "vars"
+            ],
+            "properties": {
+                "accessKey": {
+                    "type": "string"
+                },
+                "credential": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "vars": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ForwardRuleOperate": {
+            "type": "object",
+            "properties": {
+                "rules": {
+                    "type": "array",
+                    "items": {
+                        "type": "object",
+                        "required": [
+                            "operation",
+                            "port",
+                            "protocol",
+                            "targetPort"
+                        ],
+                        "properties": {
+                            "num": {
+                                "type": "string"
+                            },
+                            "operation": {
+                                "type": "string",
+                                "enum": [
+                                    "add",
+                                    "remove"
+                                ]
+                            },
+                            "port": {
+                                "type": "string"
+                            },
+                            "protocol": {
+                                "type": "string",
+                                "enum": [
+                                    "tcp",
+                                    "udp",
+                                    "tcp/udp"
+                                ]
+                            },
+                            "targetIP": {
+                                "type": "string"
+                            },
+                            "targetPort": {
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "dto.FtpBaseInfo": {
+            "type": "object",
+            "properties": {
+                "isActive": {
+                    "type": "boolean"
+                },
+                "isExist": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "dto.FtpCreate": {
+            "type": "object",
+            "required": [
+                "password",
+                "path",
+                "user"
+            ],
+            "properties": {
+                "description": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.FtpLogSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "operation": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.FtpUpdate": {
+            "type": "object",
+            "required": [
+                "password",
+                "path"
+            ],
+            "properties": {
+                "description": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.GPUInfo": {
+            "type": "object",
+            "properties": {
+                "fanSpeed": {
+                    "type": "string"
+                },
+                "gpuUtil": {
+                    "type": "string"
+                },
+                "index": {
+                    "type": "integer"
+                },
+                "maxPowerLimit": {
+                    "type": "string"
+                },
+                "memTotal": {
+                    "type": "string"
+                },
+                "memUsed": {
+                    "type": "string"
+                },
+                "memoryUsage": {
+                    "type": "string"
+                },
+                "performanceState": {
+                    "type": "string"
+                },
+                "powerDraw": {
+                    "type": "string"
+                },
+                "powerUsage": {
+                    "type": "string"
+                },
+                "productName": {
+                    "type": "string"
+                },
+                "temperature": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.GenerateLoad": {
+            "type": "object",
+            "required": [
+                "encryptionMode"
+            ],
+            "properties": {
+                "encryptionMode": {
+                    "type": "string",
+                    "enum": [
+                        "rsa",
+                        "ed25519",
+                        "ecdsa",
+                        "dsa"
+                    ]
+                }
+            }
+        },
+        "dto.GenerateSSH": {
+            "type": "object",
+            "required": [
+                "encryptionMode"
+            ],
+            "properties": {
+                "encryptionMode": {
+                    "type": "string",
+                    "enum": [
+                        "rsa",
+                        "ed25519",
+                        "ecdsa",
+                        "dsa"
+                    ]
+                },
+                "password": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.GroupCreate": {
+            "type": "object",
+            "required": [
+                "name",
+                "type"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.GroupInfo": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "isDefault": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.GroupSearch": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.GroupUpdate": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "isDefault": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.HostConnTest": {
+            "type": "object",
+            "required": [
+                "addr",
+                "port",
+                "user"
+            ],
+            "properties": {
+                "addr": {
+                    "type": "string"
+                },
+                "authMode": {
+                    "type": "string",
+                    "enum": [
+                        "password",
+                        "key"
+                    ]
+                },
+                "passPhrase": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer",
+                    "maximum": 65535,
+                    "minimum": 1
+                },
+                "privateKey": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.HostHelper": {
+            "type": "object",
+            "properties": {
+                "host": {
+                    "type": "string"
+                },
+                "ip": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.HostOperate": {
+            "type": "object",
+            "required": [
+                "addr",
+                "port",
+                "user"
+            ],
+            "properties": {
+                "addr": {
+                    "type": "string"
+                },
+                "authMode": {
+                    "type": "string",
+                    "enum": [
+                        "password",
+                        "key"
+                    ]
+                },
+                "description": {
+                    "type": "string"
+                },
+                "groupID": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "passPhrase": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer",
+                    "maximum": 65535,
+                    "minimum": 1
+                },
+                "privateKey": {
+                    "type": "string"
+                },
+                "rememberPassword": {
+                    "type": "boolean"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.HostTree": {
+            "type": "object",
+            "properties": {
+                "children": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.TreeChild"
+                    }
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "label": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ImageBuild": {
+            "type": "object",
+            "required": [
+                "dockerfile",
+                "from",
+                "name"
+            ],
+            "properties": {
+                "dockerfile": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "dto.ImageInfo": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "string"
+                },
+                "isUsed": {
+                    "type": "boolean"
+                },
+                "size": {
+                    "type": "string"
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "dto.ImageLoad": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ImagePull": {
+            "type": "object",
+            "required": [
+                "imageName"
+            ],
+            "properties": {
+                "imageName": {
+                    "type": "string"
+                },
+                "repoID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.ImagePush": {
+            "type": "object",
+            "required": [
+                "name",
+                "repoID",
+                "tagName"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "repoID": {
+                    "type": "integer"
+                },
+                "tagName": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ImageRepoDelete": {
+            "type": "object",
+            "required": [
+                "ids"
+            ],
+            "properties": {
+                "ids": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
+        "dto.ImageRepoOption": {
+            "type": "object",
+            "properties": {
+                "downloadUrl": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ImageRepoUpdate": {
+            "type": "object",
+            "properties": {
+                "auth": {
+                    "type": "boolean"
+                },
+                "downloadUrl": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "password": {
+                    "type": "string",
+                    "maxLength": 256
+                },
+                "protocol": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string",
+                    "maxLength": 256
+                }
+            }
+        },
+        "dto.ImageSave": {
+            "type": "object",
+            "required": [
+                "name",
+                "path",
+                "tagName"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "tagName": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ImageTag": {
+            "type": "object",
+            "required": [
+                "sourceID",
+                "targetName"
+            ],
+            "properties": {
+                "sourceID": {
+                    "type": "string"
+                },
+                "targetName": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.InspectReq": {
+            "type": "object",
+            "required": [
+                "id",
+                "type"
+            ],
+            "properties": {
+                "id": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.LogOption": {
+            "type": "object",
+            "properties": {
+                "logMaxFile": {
+                    "type": "string"
+                },
+                "logMaxSize": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.Login": {
+            "type": "object",
+            "required": [
+                "authMethod",
+                "language",
+                "name",
+                "password"
+            ],
+            "properties": {
+                "authMethod": {
+                    "type": "string",
+                    "enum": [
+                        "jwt",
+                        "session"
+                    ]
+                },
+                "captcha": {
+                    "type": "string"
+                },
+                "captchaID": {
+                    "type": "string"
+                },
+                "ignoreCaptcha": {
+                    "type": "boolean"
+                },
+                "language": {
+                    "type": "string",
+                    "enum": [
+                        "zh",
+                        "en",
+                        "tw"
+                    ]
+                },
+                "name": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MFALogin": {
+            "type": "object",
+            "required": [
+                "code",
+                "name",
+                "password"
+            ],
+            "properties": {
+                "authMethod": {
+                    "type": "string"
+                },
+                "code": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MfaCredential": {
+            "type": "object",
+            "required": [
+                "code",
+                "interval",
+                "secret"
+            ],
+            "properties": {
+                "code": {
+                    "type": "string"
+                },
+                "interval": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MonitorSearch": {
+            "type": "object",
+            "required": [
+                "param"
+            ],
+            "properties": {
+                "endTime": {
+                    "type": "string"
+                },
+                "info": {
+                    "type": "string"
+                },
+                "param": {
+                    "type": "string",
+                    "enum": [
+                        "all",
+                        "cpu",
+                        "memory",
+                        "load",
+                        "io",
+                        "network"
+                    ]
+                },
+                "startTime": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MysqlDBCreate": {
+            "type": "object",
+            "required": [
+                "database",
+                "format",
+                "from",
+                "name",
+                "password",
+                "permission",
+                "username"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "format": {
+                    "type": "string",
+                    "enum": [
+                        "utf8mb4",
+                        "utf8",
+                        "gbk",
+                        "big5"
+                    ]
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "local",
+                        "remote"
+                    ]
+                },
+                "name": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "permission": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MysqlDBDelete": {
+            "type": "object",
+            "required": [
+                "database",
+                "id",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "deleteBackup": {
+                    "type": "boolean"
+                },
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "mysql",
+                        "mariadb"
+                    ]
+                }
+            }
+        },
+        "dto.MysqlDBDeleteCheck": {
+            "type": "object",
+            "required": [
+                "database",
+                "id",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "mysql",
+                        "mariadb"
+                    ]
+                }
+            }
+        },
+        "dto.MysqlDBSearch": {
+            "type": "object",
+            "required": [
+                "database",
+                "order",
+                "orderBy",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "info": {
+                    "type": "string"
+                },
+                "order": {
+                    "type": "string",
+                    "enum": [
+                        "null",
+                        "ascending",
+                        "descending"
+                    ]
+                },
+                "orderBy": {
+                    "type": "string",
+                    "enum": [
+                        "name",
+                        "created_at"
+                    ]
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.MysqlLoadDB": {
+            "type": "object",
+            "required": [
+                "database",
+                "from",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "local",
+                        "remote"
+                    ]
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "mysql",
+                        "mariadb"
+                    ]
+                }
+            }
+        },
+        "dto.MysqlOption": {
+            "type": "object",
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MysqlStatus": {
+            "type": "object",
+            "properties": {
+                "Aborted_clients": {
+                    "type": "string"
+                },
+                "Aborted_connects": {
+                    "type": "string"
+                },
+                "Bytes_received": {
+                    "type": "string"
+                },
+                "Bytes_sent": {
+                    "type": "string"
+                },
+                "Com_commit": {
+                    "type": "string"
+                },
+                "Com_rollback": {
+                    "type": "string"
+                },
+                "Connections": {
+                    "type": "string"
+                },
+                "Created_tmp_disk_tables": {
+                    "type": "string"
+                },
+                "Created_tmp_tables": {
+                    "type": "string"
+                },
+                "File": {
+                    "type": "string"
+                },
+                "Innodb_buffer_pool_pages_dirty": {
+                    "type": "string"
+                },
+                "Innodb_buffer_pool_read_requests": {
+                    "type": "string"
+                },
+                "Innodb_buffer_pool_reads": {
+                    "type": "string"
+                },
+                "Key_read_requests": {
+                    "type": "string"
+                },
+                "Key_reads": {
+                    "type": "string"
+                },
+                "Key_write_requests": {
+                    "type": "string"
+                },
+                "Key_writes": {
+                    "type": "string"
+                },
+                "Max_used_connections": {
+                    "type": "string"
+                },
+                "Open_tables": {
+                    "type": "string"
+                },
+                "Opened_files": {
+                    "type": "string"
+                },
+                "Opened_tables": {
+                    "type": "string"
+                },
+                "Position": {
+                    "type": "string"
+                },
+                "Qcache_hits": {
+                    "type": "string"
+                },
+                "Qcache_inserts": {
+                    "type": "string"
+                },
+                "Questions": {
+                    "type": "string"
+                },
+                "Run": {
+                    "type": "string"
+                },
+                "Select_full_join": {
+                    "type": "string"
+                },
+                "Select_range_check": {
+                    "type": "string"
+                },
+                "Sort_merge_passes": {
+                    "type": "string"
+                },
+                "Table_locks_waited": {
+                    "type": "string"
+                },
+                "Threads_cached": {
+                    "type": "string"
+                },
+                "Threads_connected": {
+                    "type": "string"
+                },
+                "Threads_created": {
+                    "type": "string"
+                },
+                "Threads_running": {
+                    "type": "string"
+                },
+                "Uptime": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MysqlVariables": {
+            "type": "object",
+            "properties": {
+                "binlog_cache_size": {
+                    "type": "string"
+                },
+                "innodb_buffer_pool_size": {
+                    "type": "string"
+                },
+                "innodb_log_buffer_size": {
+                    "type": "string"
+                },
+                "join_buffer_size": {
+                    "type": "string"
+                },
+                "key_buffer_size": {
+                    "type": "string"
+                },
+                "long_query_time": {
+                    "type": "string"
+                },
+                "max_connections": {
+                    "type": "string"
+                },
+                "max_heap_table_size": {
+                    "type": "string"
+                },
+                "query_cache_size": {
+                    "type": "string"
+                },
+                "query_cache_type": {
+                    "type": "string"
+                },
+                "read_buffer_size": {
+                    "type": "string"
+                },
+                "read_rnd_buffer_size": {
+                    "type": "string"
+                },
+                "slow_query_log": {
+                    "type": "string"
+                },
+                "sort_buffer_size": {
+                    "type": "string"
+                },
+                "table_open_cache": {
+                    "type": "string"
+                },
+                "thread_cache_size": {
+                    "type": "string"
+                },
+                "thread_stack": {
+                    "type": "string"
+                },
+                "tmp_table_size": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.MysqlVariablesUpdate": {
+            "type": "object",
+            "required": [
+                "database",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "mysql",
+                        "mariadb"
+                    ]
+                },
+                "variables": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.MysqlVariablesUpdateHelper"
+                    }
+                }
+            }
+        },
+        "dto.MysqlVariablesUpdateHelper": {
+            "type": "object",
+            "properties": {
+                "param": {
+                    "type": "string"
+                },
+                "value": {}
+            }
+        },
+        "dto.NetworkCreate": {
+            "type": "object",
+            "required": [
+                "driver",
+                "name"
+            ],
+            "properties": {
+                "auxAddress": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.SettingUpdate"
+                    }
+                },
+                "auxAddressV6": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.SettingUpdate"
+                    }
+                },
+                "driver": {
+                    "type": "string"
+                },
+                "gateway": {
+                    "type": "string"
+                },
+                "gatewayV6": {
+                    "type": "string"
+                },
+                "ipRange": {
+                    "type": "string"
+                },
+                "ipRangeV6": {
+                    "type": "string"
+                },
+                "ipv4": {
+                    "type": "boolean"
+                },
+                "ipv6": {
+                    "type": "boolean"
+                },
+                "labels": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "name": {
+                    "type": "string"
+                },
+                "options": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "subnet": {
+                    "type": "string"
+                },
+                "subnetV6": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.NginxKey": {
+            "type": "string",
+            "enum": [
+                "index",
+                "limit-conn",
+                "ssl",
+                "cache",
+                "http-per",
+                "proxy-cache"
+            ],
+            "x-enum-varnames": [
+                "Index",
+                "LimitConn",
+                "SSL",
+                "CACHE",
+                "HttpPer",
+                "ProxyCache"
+            ]
+        },
+        "dto.OneDriveInfo": {
+            "type": "object",
+            "properties": {
+                "client_id": {
+                    "type": "string"
+                },
+                "client_secret": {
+                    "type": "string"
+                },
+                "redirect_uri": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.Operate": {
+            "type": "object",
+            "required": [
+                "operation"
+            ],
+            "properties": {
+                "operation": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.OperateByID": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.OperationWithName": {
+            "type": "object",
+            "required": [
+                "name"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.OperationWithNameAndType": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.Options": {
+            "type": "object",
+            "properties": {
+                "option": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.OsInfo": {
+            "type": "object",
+            "properties": {
+                "diskSize": {
+                    "type": "integer"
+                },
+                "kernelArch": {
+                    "type": "string"
+                },
+                "kernelVersion": {
+                    "type": "string"
+                },
+                "os": {
+                    "type": "string"
+                },
+                "platform": {
+                    "type": "string"
+                },
+                "platformFamily": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.PageContainer": {
+            "type": "object",
+            "required": [
+                "order",
+                "orderBy",
+                "page",
+                "pageSize",
+                "state"
+            ],
+            "properties": {
+                "excludeAppStore": {
+                    "type": "boolean"
+                },
+                "filters": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "order": {
+                    "type": "string",
+                    "enum": [
+                        "null",
+                        "ascending",
+                        "descending"
+                    ]
+                },
+                "orderBy": {
+                    "type": "string",
+                    "enum": [
+                        "name",
+                        "state",
+                        "created_at"
+                    ]
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "state": {
+                    "type": "string",
+                    "enum": [
+                        "all",
+                        "created",
+                        "running",
+                        "paused",
+                        "restarting",
+                        "removing",
+                        "exited",
+                        "dead"
+                    ]
+                }
+            }
+        },
+        "dto.PageCronjob": {
+            "type": "object",
+            "required": [
+                "order",
+                "orderBy",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "info": {
+                    "type": "string"
+                },
+                "order": {
+                    "type": "string",
+                    "enum": [
+                        "null",
+                        "ascending",
+                        "descending"
+                    ]
+                },
+                "orderBy": {
+                    "type": "string",
+                    "enum": [
+                        "name",
+                        "status",
+                        "created_at"
+                    ]
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.PageInfo": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.PageResult": {
+            "type": "object",
+            "properties": {
+                "items": {},
+                "total": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.PasswordUpdate": {
+            "type": "object",
+            "required": [
+                "newPassword",
+                "oldPassword"
+            ],
+            "properties": {
+                "newPassword": {
+                    "type": "string"
+                },
+                "oldPassword": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.PortHelper": {
+            "type": "object",
+            "properties": {
+                "containerPort": {
+                    "type": "string"
+                },
+                "hostIP": {
+                    "type": "string"
+                },
+                "hostPort": {
+                    "type": "string"
+                },
+                "protocol": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.PortRuleOperate": {
+            "type": "object",
+            "required": [
+                "operation",
+                "port",
+                "protocol",
+                "strategy"
+            ],
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "operation": {
+                    "type": "string",
+                    "enum": [
+                        "add",
+                        "remove"
+                    ]
+                },
+                "port": {
+                    "type": "string"
+                },
+                "protocol": {
+                    "type": "string",
+                    "enum": [
+                        "tcp",
+                        "udp",
+                        "tcp/udp"
+                    ]
+                },
+                "strategy": {
+                    "type": "string",
+                    "enum": [
+                        "accept",
+                        "drop"
+                    ]
+                }
+            }
+        },
+        "dto.PortRuleUpdate": {
+            "type": "object",
+            "properties": {
+                "newRule": {
+                    "$ref": "#/definitions/dto.PortRuleOperate"
+                },
+                "oldRule": {
+                    "$ref": "#/definitions/dto.PortRuleOperate"
+                }
+            }
+        },
+        "dto.PortUpdate": {
+            "type": "object",
+            "required": [
+                "serverPort"
+            ],
+            "properties": {
+                "serverPort": {
+                    "type": "integer",
+                    "maximum": 65535,
+                    "minimum": 1
+                }
+            }
+        },
+        "dto.PostgresqlBindUser": {
+            "type": "object",
+            "required": [
+                "database",
+                "name",
+                "password",
+                "username"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "superUser": {
+                    "type": "boolean"
+                },
+                "username": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.PostgresqlDBCreate": {
+            "type": "object",
+            "required": [
+                "database",
+                "from",
+                "name",
+                "password",
+                "username"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "format": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "local",
+                        "remote"
+                    ]
+                },
+                "name": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "superUser": {
+                    "type": "boolean"
+                },
+                "username": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.PostgresqlDBDelete": {
+            "type": "object",
+            "required": [
+                "database",
+                "id",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "deleteBackup": {
+                    "type": "boolean"
+                },
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "postgresql"
+                    ]
+                }
+            }
+        },
+        "dto.PostgresqlDBDeleteCheck": {
+            "type": "object",
+            "required": [
+                "database",
+                "id",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "postgresql"
+                    ]
+                }
+            }
+        },
+        "dto.PostgresqlDBSearch": {
+            "type": "object",
+            "required": [
+                "database",
+                "order",
+                "orderBy",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "info": {
+                    "type": "string"
+                },
+                "order": {
+                    "type": "string",
+                    "enum": [
+                        "null",
+                        "ascending",
+                        "descending"
+                    ]
+                },
+                "orderBy": {
+                    "type": "string",
+                    "enum": [
+                        "name",
+                        "created_at"
+                    ]
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.PostgresqlLoadDB": {
+            "type": "object",
+            "required": [
+                "database",
+                "from",
+                "type"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "from": {
+                    "type": "string",
+                    "enum": [
+                        "local",
+                        "remote"
+                    ]
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "postgresql"
+                    ]
+                }
+            }
+        },
+        "dto.ProxyUpdate": {
+            "type": "object",
+            "properties": {
+                "proxyPasswd": {
+                    "type": "string"
+                },
+                "proxyPasswdKeep": {
+                    "type": "string"
+                },
+                "proxyPort": {
+                    "type": "string"
+                },
+                "proxyType": {
+                    "type": "string"
+                },
+                "proxyUrl": {
+                    "type": "string"
+                },
+                "proxyUser": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.RecordSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize",
+                "type"
+            ],
+            "properties": {
+                "detailName": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.RecordSearchByCronjob": {
+            "type": "object",
+            "required": [
+                "cronjobID",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "cronjobID": {
+                    "type": "integer"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.RedisCommand": {
+            "type": "object",
+            "properties": {
+                "command": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.RedisConf": {
+            "type": "object",
+            "required": [
+                "database"
+            ],
+            "properties": {
+                "containerName": {
+                    "type": "string"
+                },
+                "database": {
+                    "type": "string"
+                },
+                "maxclients": {
+                    "type": "string"
+                },
+                "maxmemory": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "requirepass": {
+                    "type": "string"
+                },
+                "timeout": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.RedisConfPersistenceUpdate": {
+            "type": "object",
+            "required": [
+                "database",
+                "type"
+            ],
+            "properties": {
+                "appendfsync": {
+                    "type": "string"
+                },
+                "appendonly": {
+                    "type": "string"
+                },
+                "database": {
+                    "type": "string"
+                },
+                "save": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "aof",
+                        "rbd"
+                    ]
+                }
+            }
+        },
+        "dto.RedisConfUpdate": {
+            "type": "object",
+            "required": [
+                "database"
+            ],
+            "properties": {
+                "database": {
+                    "type": "string"
+                },
+                "maxclients": {
+                    "type": "string"
+                },
+                "maxmemory": {
+                    "type": "string"
+                },
+                "timeout": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.RedisPersistence": {
+            "type": "object",
+            "required": [
+                "database"
+            ],
+            "properties": {
+                "appendfsync": {
+                    "type": "string"
+                },
+                "appendonly": {
+                    "type": "string"
+                },
+                "database": {
+                    "type": "string"
+                },
+                "save": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.RedisStatus": {
+            "type": "object",
+            "required": [
+                "database"
+            ],
+            "properties": {
+                "connected_clients": {
+                    "type": "string"
+                },
+                "database": {
+                    "type": "string"
+                },
+                "instantaneous_ops_per_sec": {
+                    "type": "string"
+                },
+                "keyspace_hits": {
+                    "type": "string"
+                },
+                "keyspace_misses": {
+                    "type": "string"
+                },
+                "latest_fork_usec": {
+                    "type": "string"
+                },
+                "mem_fragmentation_ratio": {
+                    "type": "string"
+                },
+                "tcp_port": {
+                    "type": "string"
+                },
+                "total_commands_processed": {
+                    "type": "string"
+                },
+                "total_connections_received": {
+                    "type": "string"
+                },
+                "uptime_in_days": {
+                    "type": "string"
+                },
+                "used_memory": {
+                    "type": "string"
+                },
+                "used_memory_peak": {
+                    "type": "string"
+                },
+                "used_memory_rss": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.ResourceLimit": {
+            "type": "object",
+            "properties": {
+                "cpu": {
+                    "type": "integer"
+                },
+                "memory": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.RuleSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize",
+                "type"
+            ],
+            "properties": {
+                "info": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "strategy": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SSHConf": {
+            "type": "object",
+            "properties": {
+                "file": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SSHHistory": {
+            "type": "object",
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "area": {
+                    "type": "string"
+                },
+                "authMode": {
+                    "type": "string"
+                },
+                "date": {
+                    "type": "string"
+                },
+                "dateStr": {
+                    "type": "string"
+                },
+                "message": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SSHInfo": {
+            "type": "object",
+            "properties": {
+                "autoStart": {
+                    "type": "boolean"
+                },
+                "listenAddress": {
+                    "type": "string"
+                },
+                "message": {
+                    "type": "string"
+                },
+                "passwordAuthentication": {
+                    "type": "string"
+                },
+                "permitRootLogin": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "string"
+                },
+                "pubkeyAuthentication": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "useDNS": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SSHLog": {
+            "type": "object",
+            "properties": {
+                "failedCount": {
+                    "type": "integer"
+                },
+                "logs": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/dto.SSHHistory"
+                    }
+                },
+                "successfulCount": {
+                    "type": "integer"
+                },
+                "totalCount": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.SSHUpdate": {
+            "type": "object",
+            "required": [
+                "key"
+            ],
+            "properties": {
+                "key": {
+                    "type": "string"
+                },
+                "newValue": {
+                    "type": "string"
+                },
+                "oldValue": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SSLUpdate": {
+            "type": "object",
+            "required": [
+                "ssl",
+                "sslType"
+            ],
+            "properties": {
+                "cert": {
+                    "type": "string"
+                },
+                "domain": {
+                    "type": "string"
+                },
+                "key": {
+                    "type": "string"
+                },
+                "ssl": {
+                    "type": "string",
+                    "enum": [
+                        "enable",
+                        "disable"
+                    ]
+                },
+                "sslID": {
+                    "type": "integer"
+                },
+                "sslType": {
+                    "type": "string",
+                    "enum": [
+                        "self",
+                        "select",
+                        "import",
+                        "import-paste",
+                        "import-local"
+                    ]
+                }
+            }
+        },
+        "dto.SearchForTree": {
+            "type": "object",
+            "properties": {
+                "info": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SearchHostWithPage": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "groupID": {
+                    "type": "integer"
+                },
+                "info": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.SearchLgLogWithPage": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "ip": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SearchOpLogWithPage": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "operation": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "source": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SearchRecord": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "cronjobID": {
+                    "type": "integer"
+                },
+                "endTime": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "startTime": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SearchSSHLog": {
+            "type": "object",
+            "required": [
+                "Status",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "Status": {
+                    "type": "string",
+                    "enum": [
+                        "Success",
+                        "Failed",
+                        "All"
+                    ]
+                },
+                "info": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.SearchWithPage": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "info": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.SettingInfo": {
+            "type": "object",
+            "properties": {
+                "allowIPs": {
+                    "type": "string"
+                },
+                "appStoreLastModified": {
+                    "type": "string"
+                },
+                "appStoreSyncStatus": {
+                    "type": "string"
+                },
+                "appStoreVersion": {
+                    "type": "string"
+                },
+                "bindAddress": {
+                    "type": "string"
+                },
+                "bindDomain": {
+                    "type": "string"
+                },
+                "complexityVerification": {
+                    "type": "string"
+                },
+                "defaultNetwork": {
+                    "type": "string"
+                },
+                "developerMode": {
+                    "type": "string"
+                },
+                "dingVars": {
+                    "type": "string"
+                },
+                "dockerSockPath": {
+                    "type": "string"
+                },
+                "email": {
+                    "type": "string"
+                },
+                "emailVars": {
+                    "type": "string"
+                },
+                "expirationDays": {
+                    "type": "string"
+                },
+                "expirationTime": {
+                    "type": "string"
+                },
+                "fileRecycleBin": {
+                    "type": "string"
+                },
+                "ipv6": {
+                    "type": "string"
+                },
+                "language": {
+                    "type": "string"
+                },
+                "lastCleanData": {
+                    "type": "string"
+                },
+                "lastCleanSize": {
+                    "type": "string"
+                },
+                "lastCleanTime": {
+                    "type": "string"
+                },
+                "localTime": {
+                    "type": "string"
+                },
+                "menuTabs": {
+                    "type": "string"
+                },
+                "messageType": {
+                    "type": "string"
+                },
+                "mfaInterval": {
+                    "type": "string"
+                },
+                "mfaSecret": {
+                    "type": "string"
+                },
+                "mfaStatus": {
+                    "type": "string"
+                },
+                "monitorInterval": {
+                    "type": "string"
+                },
+                "monitorStatus": {
+                    "type": "string"
+                },
+                "monitorStoreDays": {
+                    "type": "string"
+                },
+                "noAuthSetting": {
+                    "type": "string"
+                },
+                "ntpSite": {
+                    "type": "string"
+                },
+                "panelName": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "string"
+                },
+                "proxyPasswd": {
+                    "type": "string"
+                },
+                "proxyPasswdKeep": {
+                    "type": "string"
+                },
+                "proxyPort": {
+                    "type": "string"
+                },
+                "proxyType": {
+                    "type": "string"
+                },
+                "proxyUrl": {
+                    "type": "string"
+                },
+                "proxyUser": {
+                    "type": "string"
+                },
+                "securityEntrance": {
+                    "type": "string"
+                },
+                "serverPort": {
+                    "type": "string"
+                },
+                "sessionTimeout": {
+                    "type": "string"
+                },
+                "snapshotIgnore": {
+                    "type": "string"
+                },
+                "ssl": {
+                    "type": "string"
+                },
+                "sslType": {
+                    "type": "string"
+                },
+                "systemIP": {
+                    "type": "string"
+                },
+                "systemVersion": {
+                    "type": "string"
+                },
+                "theme": {
+                    "type": "string"
+                },
+                "timeZone": {
+                    "type": "string"
+                },
+                "userName": {
+                    "type": "string"
+                },
+                "weChatVars": {
+                    "type": "string"
+                },
+                "xpackHideMenu": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SettingUpdate": {
+            "type": "object",
+            "required": [
+                "key"
+            ],
+            "properties": {
+                "key": {
+                    "type": "string"
+                },
+                "value": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SnapshotBatchDelete": {
+            "type": "object",
+            "required": [
+                "ids"
+            ],
+            "properties": {
+                "deleteWithFile": {
+                    "type": "boolean"
+                },
+                "ids": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
+        "dto.SnapshotCreate": {
+            "type": "object",
+            "required": [
+                "defaultDownload",
+                "from"
+            ],
+            "properties": {
+                "defaultDownload": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string",
+                    "maxLength": 256
+                },
+                "from": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "secret": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SnapshotImport": {
+            "type": "object",
+            "properties": {
+                "description": {
+                    "type": "string",
+                    "maxLength": 256
+                },
+                "from": {
+                    "type": "string"
+                },
+                "names": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "dto.SnapshotRecover": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "isNew": {
+                    "type": "boolean"
+                },
+                "reDownload": {
+                    "type": "boolean"
+                },
+                "secret": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.SwapHelper": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "isNew": {
+                    "type": "boolean"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "size": {
+                    "type": "integer"
+                },
+                "used": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.TreeChild": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "label": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.UpdateByFile": {
+            "type": "object",
+            "properties": {
+                "file": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.UpdateByNameAndFile": {
+            "type": "object",
+            "properties": {
+                "file": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.UpdateDescription": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "description": {
+                    "type": "string",
+                    "maxLength": 256
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "dto.UpdateFirewallDescription": {
+            "type": "object",
+            "required": [
+                "strategy"
+            ],
+            "properties": {
+                "address": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "string"
+                },
+                "protocol": {
+                    "type": "string"
+                },
+                "strategy": {
+                    "type": "string",
+                    "enum": [
+                        "accept",
+                        "drop"
+                    ]
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.Upgrade": {
+            "type": "object",
+            "required": [
+                "version"
+            ],
+            "properties": {
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.UpgradeInfo": {
+            "type": "object",
+            "properties": {
+                "latestVersion": {
+                    "type": "string"
+                },
+                "newVersion": {
+                    "type": "string"
+                },
+                "releaseNote": {
+                    "type": "string"
+                },
+                "testVersion": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.UserLoginInfo": {
+            "type": "object",
+            "properties": {
+                "mfaStatus": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "token": {
+                    "type": "string"
+                }
+            }
+        },
+        "dto.VolumeCreate": {
+            "type": "object",
+            "required": [
+                "driver",
+                "name"
+            ],
+            "properties": {
+                "driver": {
+                    "type": "string"
+                },
+                "labels": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "name": {
+                    "type": "string"
+                },
+                "options": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "dto.VolumeHelper": {
+            "type": "object",
+            "properties": {
+                "containerDir": {
+                    "type": "string"
+                },
+                "mode": {
+                    "type": "string"
+                },
+                "sourceDir": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "files.FileInfo": {
+            "type": "object",
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "extension": {
+                    "type": "string"
+                },
+                "favoriteID": {
+                    "type": "integer"
+                },
+                "gid": {
+                    "type": "string"
+                },
+                "group": {
+                    "type": "string"
+                },
+                "isDetail": {
+                    "type": "boolean"
+                },
+                "isDir": {
+                    "type": "boolean"
+                },
+                "isHidden": {
+                    "type": "boolean"
+                },
+                "isSymlink": {
+                    "type": "boolean"
+                },
+                "itemTotal": {
+                    "type": "integer"
+                },
+                "items": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/files.FileInfo"
+                    }
+                },
+                "linkPath": {
+                    "type": "string"
+                },
+                "mimeType": {
+                    "type": "string"
+                },
+                "modTime": {
+                    "type": "string"
+                },
+                "mode": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "size": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "uid": {
+                    "type": "string"
+                },
+                "updateTime": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "mfa.Otp": {
+            "type": "object",
+            "properties": {
+                "qrImage": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.App": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "crossVersionUpdate": {
+                    "type": "boolean"
+                },
+                "document": {
+                    "type": "string"
+                },
+                "github": {
+                    "type": "string"
+                },
+                "icon": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "key": {
+                    "type": "string"
+                },
+                "lastModified": {
+                    "type": "integer"
+                },
+                "limit": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "readMe": {
+                    "type": "string"
+                },
+                "recommend": {
+                    "type": "integer"
+                },
+                "required": {
+                    "type": "string"
+                },
+                "resource": {
+                    "type": "string"
+                },
+                "shortDescEn": {
+                    "type": "string"
+                },
+                "shortDescZh": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "website": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.AppInstall": {
+            "type": "object",
+            "properties": {
+                "app": {
+                    "$ref": "#/definitions/model.App"
+                },
+                "appDetailId": {
+                    "type": "integer"
+                },
+                "appId": {
+                    "type": "integer"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "env": {
+                    "type": "string"
+                },
+                "httpPort": {
+                    "type": "integer"
+                },
+                "httpsPort": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "message": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "param": {
+                    "type": "string"
+                },
+                "serviceName": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.Tag": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "key": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "sort": {
+                    "type": "integer"
+                },
+                "updatedAt": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.Website": {
+            "type": "object",
+            "properties": {
+                "IPV6": {
+                    "type": "boolean"
+                },
+                "accessLog": {
+                    "type": "boolean"
+                },
+                "alias": {
+                    "type": "string"
+                },
+                "appInstallId": {
+                    "type": "integer"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "defaultServer": {
+                    "type": "boolean"
+                },
+                "domains": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.WebsiteDomain"
+                    }
+                },
+                "errorLog": {
+                    "type": "boolean"
+                },
+                "expireDate": {
+                    "type": "string"
+                },
+                "ftpId": {
+                    "type": "integer"
+                },
+                "group": {
+                    "type": "string"
+                },
+                "httpConfig": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "protocol": {
+                    "type": "string"
+                },
+                "proxy": {
+                    "type": "string"
+                },
+                "proxyType": {
+                    "type": "string"
+                },
+                "remark": {
+                    "type": "string"
+                },
+                "rewrite": {
+                    "type": "string"
+                },
+                "runtimeID": {
+                    "type": "integer"
+                },
+                "siteDir": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                },
+                "webSiteGroupId": {
+                    "type": "integer"
+                },
+                "webSiteSSL": {
+                    "$ref": "#/definitions/model.WebsiteSSL"
+                },
+                "webSiteSSLId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "model.WebsiteAcmeAccount": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "eabHmacKey": {
+                    "type": "string"
+                },
+                "eabKid": {
+                    "type": "string"
+                },
+                "email": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.WebsiteDnsAccount": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                }
+            }
+        },
+        "model.WebsiteDomain": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "domain": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "websiteId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "model.WebsiteSSL": {
+            "type": "object",
+            "properties": {
+                "acmeAccount": {
+                    "$ref": "#/definitions/model.WebsiteAcmeAccount"
+                },
+                "acmeAccountId": {
+                    "type": "integer"
+                },
+                "autoRenew": {
+                    "type": "boolean"
+                },
+                "caId": {
+                    "type": "integer"
+                },
+                "certURL": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "dir": {
+                    "type": "string"
+                },
+                "disableCNAME": {
+                    "type": "boolean"
+                },
+                "dnsAccount": {
+                    "$ref": "#/definitions/model.WebsiteDnsAccount"
+                },
+                "dnsAccountId": {
+                    "type": "integer"
+                },
+                "domains": {
+                    "type": "string"
+                },
+                "execShell": {
+                    "type": "boolean"
+                },
+                "expireDate": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string"
+                },
+                "message": {
+                    "type": "string"
+                },
+                "nameserver1": {
+                    "type": "string"
+                },
+                "nameserver2": {
+                    "type": "string"
+                },
+                "organization": {
+                    "type": "string"
+                },
+                "pem": {
+                    "type": "string"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "privateKey": {
+                    "type": "string"
+                },
+                "provider": {
+                    "type": "string"
+                },
+                "pushDir": {
+                    "type": "boolean"
+                },
+                "shell": {
+                    "type": "string"
+                },
+                "skipDNS": {
+                    "type": "boolean"
+                },
+                "startDate": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "websites": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Website"
+                    }
+                }
+            }
+        },
+        "request.AppInstallCreate": {
+            "type": "object",
+            "required": [
+                "appDetailId",
+                "name"
+            ],
+            "properties": {
+                "advanced": {
+                    "type": "boolean"
+                },
+                "allowPort": {
+                    "type": "boolean"
+                },
+                "appDetailId": {
+                    "type": "integer"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "cpuQuota": {
+                    "type": "number"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "editCompose": {
+                    "type": "boolean"
+                },
+                "hostMode": {
+                    "type": "boolean"
+                },
+                "memoryLimit": {
+                    "type": "number"
+                },
+                "memoryUnit": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": true
+                },
+                "pullImage": {
+                    "type": "boolean"
+                },
+                "services": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "request.AppInstalledIgnoreUpgrade": {
+            "type": "object",
+            "required": [
+                "detailID",
+                "operate"
+            ],
+            "properties": {
+                "detailID": {
+                    "type": "integer"
+                },
+                "operate": {
+                    "type": "string",
+                    "enum": [
+                        "cancel",
+                        "ignore"
+                    ]
+                }
+            }
+        },
+        "request.AppInstalledInfo": {
+            "type": "object",
+            "required": [
+                "key"
+            ],
+            "properties": {
+                "key": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.AppInstalledOperate": {
+            "type": "object",
+            "required": [
+                "installId",
+                "operate"
+            ],
+            "properties": {
+                "backup": {
+                    "type": "boolean"
+                },
+                "backupId": {
+                    "type": "integer"
+                },
+                "deleteBackup": {
+                    "type": "boolean"
+                },
+                "deleteDB": {
+                    "type": "boolean"
+                },
+                "detailId": {
+                    "type": "integer"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "installId": {
+                    "type": "integer"
+                },
+                "operate": {
+                    "type": "string"
+                },
+                "pullImage": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.AppInstalledSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "all": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "sync": {
+                    "type": "boolean"
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                },
+                "unused": {
+                    "type": "boolean"
+                },
+                "update": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.AppInstalledUpdate": {
+            "type": "object",
+            "required": [
+                "installId",
+                "params"
+            ],
+            "properties": {
+                "advanced": {
+                    "type": "boolean"
+                },
+                "allowPort": {
+                    "type": "boolean"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "cpuQuota": {
+                    "type": "number"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "editCompose": {
+                    "type": "boolean"
+                },
+                "hostMode": {
+                    "type": "boolean"
+                },
+                "installId": {
+                    "type": "integer"
+                },
+                "memoryLimit": {
+                    "type": "number"
+                },
+                "memoryUnit": {
+                    "type": "string"
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": true
+                },
+                "pullImage": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.AppSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "recommend": {
+                    "type": "boolean"
+                },
+                "resource": {
+                    "type": "string"
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.DirSizeReq": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.ExposedPort": {
+            "type": "object",
+            "properties": {
+                "containerPort": {
+                    "type": "integer"
+                },
+                "hostPort": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.FavoriteCreate": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FavoriteDelete": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.FileBatchDelete": {
+            "type": "object",
+            "required": [
+                "paths"
+            ],
+            "properties": {
+                "isDir": {
+                    "type": "boolean"
+                },
+                "paths": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "request.FileCompress": {
+            "type": "object",
+            "required": [
+                "dst",
+                "files",
+                "name",
+                "type"
+            ],
+            "properties": {
+                "dst": {
+                    "type": "string"
+                },
+                "files": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "name": {
+                    "type": "string"
+                },
+                "replace": {
+                    "type": "boolean"
+                },
+                "secret": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileContentReq": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "isDetail": {
+                    "type": "boolean"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileCreate": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "isDir": {
+                    "type": "boolean"
+                },
+                "isLink": {
+                    "type": "boolean"
+                },
+                "isSymlink": {
+                    "type": "boolean"
+                },
+                "linkPath": {
+                    "type": "string"
+                },
+                "mode": {
+                    "type": "integer"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "sub": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.FileDeCompress": {
+            "type": "object",
+            "required": [
+                "dst",
+                "path",
+                "type"
+            ],
+            "properties": {
+                "dst": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "secret": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileDelete": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "isDir": {
+                    "type": "boolean"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileDownload": {
+            "type": "object",
+            "required": [
+                "name",
+                "paths",
+                "type"
+            ],
+            "properties": {
+                "compress": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "paths": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileEdit": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileMove": {
+            "type": "object",
+            "required": [
+                "newPath",
+                "oldPaths",
+                "type"
+            ],
+            "properties": {
+                "cover": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "newPath": {
+                    "type": "string"
+                },
+                "oldPaths": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileOption": {
+            "type": "object",
+            "properties": {
+                "containSub": {
+                    "type": "boolean"
+                },
+                "dir": {
+                    "type": "boolean"
+                },
+                "expand": {
+                    "type": "boolean"
+                },
+                "isDetail": {
+                    "type": "boolean"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "search": {
+                    "type": "string"
+                },
+                "showHidden": {
+                    "type": "boolean"
+                },
+                "sortBy": {
+                    "type": "string"
+                },
+                "sortOrder": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FilePathCheck": {
+            "type": "object",
+            "required": [
+                "path"
+            ],
+            "properties": {
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileReadByLineReq": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize",
+                "type"
+            ],
+            "properties": {
+                "ID": {
+                    "type": "integer"
+                },
+                "latest": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileRename": {
+            "type": "object",
+            "required": [
+                "newName",
+                "oldName"
+            ],
+            "properties": {
+                "newName": {
+                    "type": "string"
+                },
+                "oldName": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileRoleReq": {
+            "type": "object",
+            "required": [
+                "group",
+                "mode",
+                "paths",
+                "user"
+            ],
+            "properties": {
+                "group": {
+                    "type": "string"
+                },
+                "mode": {
+                    "type": "integer"
+                },
+                "paths": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "sub": {
+                    "type": "boolean"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileRoleUpdate": {
+            "type": "object",
+            "required": [
+                "group",
+                "path",
+                "user"
+            ],
+            "properties": {
+                "group": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "sub": {
+                    "type": "boolean"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.FileWget": {
+            "type": "object",
+            "required": [
+                "name",
+                "path",
+                "url"
+            ],
+            "properties": {
+                "ignoreCertificate": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.HostToolConfig": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "operate": {
+                    "type": "string",
+                    "enum": [
+                        "get",
+                        "set"
+                    ]
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "supervisord"
+                    ]
+                }
+            }
+        },
+        "request.HostToolCreate": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "configPath": {
+                    "type": "string"
+                },
+                "serviceName": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.HostToolLogReq": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "supervisord"
+                    ]
+                }
+            }
+        },
+        "request.HostToolReq": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "operate": {
+                    "type": "string",
+                    "enum": [
+                        "status",
+                        "restart",
+                        "start",
+                        "stop"
+                    ]
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "supervisord"
+                    ]
+                }
+            }
+        },
+        "request.NewAppInstall": {
+            "type": "object",
+            "properties": {
+                "advanced": {
+                    "type": "boolean"
+                },
+                "allowPort": {
+                    "type": "boolean"
+                },
+                "appDetailID": {
+                    "type": "integer"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "cpuQuota": {
+                    "type": "number"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "editCompose": {
+                    "type": "boolean"
+                },
+                "hostMode": {
+                    "type": "boolean"
+                },
+                "memoryLimit": {
+                    "type": "number"
+                },
+                "memoryUnit": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": true
+                },
+                "pullImage": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.NginxAntiLeechUpdate": {
+            "type": "object",
+            "required": [
+                "extends",
+                "return",
+                "websiteID"
+            ],
+            "properties": {
+                "blocked": {
+                    "type": "boolean"
+                },
+                "cache": {
+                    "type": "boolean"
+                },
+                "cacheTime": {
+                    "type": "integer"
+                },
+                "cacheUint": {
+                    "type": "string"
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "extends": {
+                    "type": "string"
+                },
+                "logEnable": {
+                    "type": "boolean"
+                },
+                "noneRef": {
+                    "type": "boolean"
+                },
+                "return": {
+                    "type": "string"
+                },
+                "serverNames": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxAuthReq": {
+            "type": "object",
+            "required": [
+                "websiteID"
+            ],
+            "properties": {
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxAuthUpdate": {
+            "type": "object",
+            "required": [
+                "operate",
+                "websiteID"
+            ],
+            "properties": {
+                "operate": {
+                    "type": "string"
+                },
+                "password": {
+                    "type": "string"
+                },
+                "remark": {
+                    "type": "string"
+                },
+                "username": {
+                    "type": "string"
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxCommonReq": {
+            "type": "object",
+            "required": [
+                "websiteID"
+            ],
+            "properties": {
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxConfigFileUpdate": {
+            "type": "object",
+            "required": [
+                "content"
+            ],
+            "properties": {
+                "backup": {
+                    "type": "boolean"
+                },
+                "content": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.NginxConfigUpdate": {
+            "type": "object",
+            "required": [
+                "operate"
+            ],
+            "properties": {
+                "operate": {
+                    "type": "string",
+                    "enum": [
+                        "add",
+                        "update",
+                        "delete"
+                    ]
+                },
+                "params": {},
+                "scope": {
+                    "$ref": "#/definitions/dto.NginxKey"
+                },
+                "websiteId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxProxyUpdate": {
+            "type": "object",
+            "required": [
+                "content",
+                "name",
+                "websiteID"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxRedirectReq": {
+            "type": "object",
+            "required": [
+                "name",
+                "operate",
+                "redirect",
+                "target",
+                "type",
+                "websiteID"
+            ],
+            "properties": {
+                "domains": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "keepPath": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "operate": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "redirect": {
+                    "type": "string"
+                },
+                "redirectRoot": {
+                    "type": "boolean"
+                },
+                "target": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxRedirectUpdate": {
+            "type": "object",
+            "required": [
+                "content",
+                "name",
+                "websiteID"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxRewriteReq": {
+            "type": "object",
+            "required": [
+                "name",
+                "websiteId"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "websiteId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxRewriteUpdate": {
+            "type": "object",
+            "required": [
+                "name",
+                "websiteId"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "websiteId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NginxScopeReq": {
+            "type": "object",
+            "required": [
+                "scope"
+            ],
+            "properties": {
+                "scope": {
+                    "$ref": "#/definitions/dto.NginxKey"
+                },
+                "websiteId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NodeModuleReq": {
+            "type": "object",
+            "required": [
+                "ID"
+            ],
+            "properties": {
+                "ID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.NodePackageReq": {
+            "type": "object",
+            "properties": {
+                "codeDir": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.PHPExtensionsCreate": {
+            "type": "object",
+            "required": [
+                "extensions",
+                "name"
+            ],
+            "properties": {
+                "extensions": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.PHPExtensionsDelete": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.PHPExtensionsSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "all": {
+                    "type": "boolean"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.PHPExtensionsUpdate": {
+            "type": "object",
+            "required": [
+                "extensions",
+                "id"
+            ],
+            "properties": {
+                "extensions": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.PortUpdate": {
+            "type": "object",
+            "properties": {
+                "key": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.ProcessReq": {
+            "type": "object",
+            "required": [
+                "PID"
+            ],
+            "properties": {
+                "PID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.RecycleBinReduce": {
+            "type": "object",
+            "required": [
+                "from",
+                "rName"
+            ],
+            "properties": {
+                "from": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "rName": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.RuntimeCreate": {
+            "type": "object",
+            "properties": {
+                "appDetailId": {
+                    "type": "integer"
+                },
+                "clean": {
+                    "type": "boolean"
+                },
+                "codeDir": {
+                    "type": "string"
+                },
+                "exposedPorts": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/request.ExposedPort"
+                    }
+                },
+                "image": {
+                    "type": "string"
+                },
+                "install": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": true
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "resource": {
+                    "type": "string"
+                },
+                "source": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.RuntimeDelete": {
+            "type": "object",
+            "properties": {
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.RuntimeOperate": {
+            "type": "object",
+            "properties": {
+                "ID": {
+                    "type": "integer"
+                },
+                "operate": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.RuntimeSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.RuntimeUpdate": {
+            "type": "object",
+            "properties": {
+                "clean": {
+                    "type": "boolean"
+                },
+                "codeDir": {
+                    "type": "string"
+                },
+                "exposedPorts": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/request.ExposedPort"
+                    }
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "image": {
+                    "type": "string"
+                },
+                "install": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": true
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "rebuild": {
+                    "type": "boolean"
+                },
+                "source": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.SearchUploadWithPage": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize",
+                "path"
+            ],
+            "properties": {
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.SupervisorProcessConfig": {
+            "type": "object",
+            "properties": {
+                "command": {
+                    "type": "string"
+                },
+                "dir": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "numprocs": {
+                    "type": "string"
+                },
+                "operate": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.SupervisorProcessFileReq": {
+            "type": "object",
+            "required": [
+                "file",
+                "name",
+                "operate"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "file": {
+                    "type": "string",
+                    "enum": [
+                        "out.log",
+                        "err.log",
+                        "config"
+                    ]
+                },
+                "name": {
+                    "type": "string"
+                },
+                "operate": {
+                    "type": "string",
+                    "enum": [
+                        "get",
+                        "clear",
+                        "update"
+                    ]
+                }
+            }
+        },
+        "request.WebsiteAcmeAccountCreate": {
+            "type": "object",
+            "required": [
+                "email",
+                "keyType",
+                "type"
+            ],
+            "properties": {
+                "eabHmacKey": {
+                    "type": "string"
+                },
+                "eabKid": {
+                    "type": "string"
+                },
+                "email": {
+                    "type": "string"
+                },
+                "keyType": {
+                    "type": "string",
+                    "enum": [
+                        "P256",
+                        "P384",
+                        "2048",
+                        "3072",
+                        "4096",
+                        "8192"
+                    ]
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "letsencrypt",
+                        "zerossl",
+                        "buypass",
+                        "google"
+                    ]
+                }
+            }
+        },
+        "request.WebsiteBatchDelReq": {
+            "type": "object",
+            "required": [
+                "ids"
+            ],
+            "properties": {
+                "ids": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
+        "request.WebsiteCACreate": {
+            "type": "object",
+            "required": [
+                "commonName",
+                "country",
+                "keyType",
+                "name",
+                "organization"
+            ],
+            "properties": {
+                "city": {
+                    "type": "string"
+                },
+                "commonName": {
+                    "type": "string"
+                },
+                "country": {
+                    "type": "string"
+                },
+                "keyType": {
+                    "type": "string",
+                    "enum": [
+                        "P256",
+                        "P384",
+                        "2048",
+                        "3072",
+                        "4096",
+                        "8192"
+                    ]
+                },
+                "name": {
+                    "type": "string"
+                },
+                "organization": {
+                    "type": "string"
+                },
+                "organizationUint": {
+                    "type": "string"
+                },
+                "province": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsiteCAObtain": {
+            "type": "object",
+            "required": [
+                "domains",
+                "id",
+                "keyType",
+                "time",
+                "unit"
+            ],
+            "properties": {
+                "autoRenew": {
+                    "type": "boolean"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "dir": {
+                    "type": "string"
+                },
+                "domains": {
+                    "type": "string"
+                },
+                "execShell": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string",
+                    "enum": [
+                        "P256",
+                        "P384",
+                        "2048",
+                        "3072",
+                        "4096",
+                        "8192"
+                    ]
+                },
+                "pushDir": {
+                    "type": "boolean"
+                },
+                "renew": {
+                    "type": "boolean"
+                },
+                "shell": {
+                    "type": "string"
+                },
+                "sslID": {
+                    "type": "integer"
+                },
+                "time": {
+                    "type": "integer"
+                },
+                "unit": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsiteCASearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteCommonReq": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteCreate": {
+            "type": "object",
+            "required": [
+                "alias",
+                "primaryDomain",
+                "type",
+                "webSiteGroupID"
+            ],
+            "properties": {
+                "IPV6": {
+                    "type": "boolean"
+                },
+                "alias": {
+                    "type": "string"
+                },
+                "appID": {
+                    "type": "integer"
+                },
+                "appInstall": {
+                    "$ref": "#/definitions/request.NewAppInstall"
+                },
+                "appInstallID": {
+                    "type": "integer"
+                },
+                "appType": {
+                    "type": "string",
+                    "enum": [
+                        "new",
+                        "installed"
+                    ]
+                },
+                "ftpPassword": {
+                    "type": "string"
+                },
+                "ftpUser": {
+                    "type": "string"
+                },
+                "otherDomains": {
+                    "type": "string"
+                },
+                "port": {
+                    "type": "integer"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "proxy": {
+                    "type": "string"
+                },
+                "proxyType": {
+                    "type": "string"
+                },
+                "remark": {
+                    "type": "string"
+                },
+                "runtimeID": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "webSiteGroupID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteDNSReq": {
+            "type": "object",
+            "required": [
+                "acmeAccountId",
+                "domains"
+            ],
+            "properties": {
+                "acmeAccountId": {
+                    "type": "integer"
+                },
+                "domains": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "request.WebsiteDefaultUpdate": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteDelete": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "deleteApp": {
+                    "type": "boolean"
+                },
+                "deleteBackup": {
+                    "type": "boolean"
+                },
+                "forceDelete": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteDnsAccountCreate": {
+            "type": "object",
+            "required": [
+                "authorization",
+                "name",
+                "type"
+            ],
+            "properties": {
+                "authorization": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsiteDnsAccountUpdate": {
+            "type": "object",
+            "required": [
+                "authorization",
+                "id",
+                "name",
+                "type"
+            ],
+            "properties": {
+                "authorization": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsiteDomainCreate": {
+            "type": "object",
+            "required": [
+                "domains",
+                "websiteID"
+            ],
+            "properties": {
+                "domains": {
+                    "type": "string"
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteDomainDelete": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteHTTPSOp": {
+            "type": "object",
+            "required": [
+                "websiteId"
+            ],
+            "properties": {
+                "SSLProtocol": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "algorithm": {
+                    "type": "string"
+                },
+                "certificate": {
+                    "type": "string"
+                },
+                "certificatePath": {
+                    "type": "string"
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "hsts": {
+                    "type": "boolean"
+                },
+                "httpConfig": {
+                    "type": "string",
+                    "enum": [
+                        "HTTPSOnly",
+                        "HTTPAlso",
+                        "HTTPToHTTPS"
+                    ]
+                },
+                "importType": {
+                    "type": "string"
+                },
+                "privateKey": {
+                    "type": "string"
+                },
+                "privateKeyPath": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "existed",
+                        "auto",
+                        "manual"
+                    ]
+                },
+                "websiteId": {
+                    "type": "integer"
+                },
+                "websiteSSLId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteHtmlUpdate": {
+            "type": "object",
+            "required": [
+                "content",
+                "type"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsiteInstallCheckReq": {
+            "type": "object",
+            "properties": {
+                "InstallIds": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                }
+            }
+        },
+        "request.WebsiteLogReq": {
+            "type": "object",
+            "required": [
+                "id",
+                "logType",
+                "operate"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "logType": {
+                    "type": "string"
+                },
+                "operate": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteNginxUpdate": {
+            "type": "object",
+            "required": [
+                "content",
+                "id"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteOp": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "operate": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsitePHPConfigUpdate": {
+            "type": "object",
+            "required": [
+                "id",
+                "scope"
+            ],
+            "properties": {
+                "disableFunctions": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
+                "scope": {
+                    "type": "string"
+                },
+                "uploadMaxSize": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsitePHPFileUpdate": {
+            "type": "object",
+            "required": [
+                "content",
+                "id",
+                "type"
+            ],
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsitePHPVersionReq": {
+            "type": "object",
+            "required": [
+                "runtimeID",
+                "websiteID"
+            ],
+            "properties": {
+                "retainConfig": {
+                    "type": "boolean"
+                },
+                "runtimeID": {
+                    "type": "integer"
+                },
+                "websiteID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteProxyConfig": {
+            "type": "object",
+            "required": [
+                "id",
+                "match",
+                "name",
+                "operate",
+                "proxyHost",
+                "proxyPass"
+            ],
+            "properties": {
+                "cache": {
+                    "type": "boolean"
+                },
+                "cacheTime": {
+                    "type": "integer"
+                },
+                "cacheUnit": {
+                    "type": "string"
+                },
+                "content": {
+                    "type": "string"
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "filePath": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "match": {
+                    "type": "string"
+                },
+                "modifier": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "operate": {
+                    "type": "string"
+                },
+                "proxyHost": {
+                    "type": "string"
+                },
+                "proxyPass": {
+                    "type": "string"
+                },
+                "replaces": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
+                "sni": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.WebsiteProxyReq": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteResourceReq": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteSSLApply": {
+            "type": "object",
+            "required": [
+                "ID"
+            ],
+            "properties": {
+                "ID": {
+                    "type": "integer"
+                },
+                "nameservers": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "skipDNSCheck": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.WebsiteSSLCreate": {
+            "type": "object",
+            "required": [
+                "acmeAccountId",
+                "primaryDomain",
+                "provider"
+            ],
+            "properties": {
+                "acmeAccountId": {
+                    "type": "integer"
+                },
+                "apply": {
+                    "type": "boolean"
+                },
+                "autoRenew": {
+                    "type": "boolean"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "dir": {
+                    "type": "string"
+                },
+                "disableCNAME": {
+                    "type": "boolean"
+                },
+                "dnsAccountId": {
+                    "type": "integer"
+                },
+                "execShell": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string"
+                },
+                "nameserver1": {
+                    "type": "string"
+                },
+                "nameserver2": {
+                    "type": "string"
+                },
+                "otherDomains": {
+                    "type": "string"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "provider": {
+                    "type": "string"
+                },
+                "pushDir": {
+                    "type": "boolean"
+                },
+                "shell": {
+                    "type": "string"
+                },
+                "skipDNS": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.WebsiteSSLSearch": {
+            "type": "object",
+            "required": [
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "acmeAccountID": {
+                    "type": "string"
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteSSLUpdate": {
+            "type": "object",
+            "required": [
+                "id",
+                "primaryDomain",
+                "provider"
+            ],
+            "properties": {
+                "acmeAccountId": {
+                    "type": "integer"
+                },
+                "apply": {
+                    "type": "boolean"
+                },
+                "autoRenew": {
+                    "type": "boolean"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "dir": {
+                    "type": "string"
+                },
+                "disableCNAME": {
+                    "type": "boolean"
+                },
+                "dnsAccountId": {
+                    "type": "integer"
+                },
+                "execShell": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string"
+                },
+                "nameserver1": {
+                    "type": "string"
+                },
+                "nameserver2": {
+                    "type": "string"
+                },
+                "otherDomains": {
+                    "type": "string"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "provider": {
+                    "type": "string"
+                },
+                "pushDir": {
+                    "type": "boolean"
+                },
+                "shell": {
+                    "type": "string"
+                },
+                "skipDNS": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "request.WebsiteSSLUpload": {
+            "type": "object",
+            "required": [
+                "type"
+            ],
+            "properties": {
+                "certificate": {
+                    "type": "string"
+                },
+                "certificatePath": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "privateKey": {
+                    "type": "string"
+                },
+                "privateKeyPath": {
+                    "type": "string"
+                },
+                "sslID": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string",
+                    "enum": [
+                        "paste",
+                        "local"
+                    ]
+                }
+            }
+        },
+        "request.WebsiteSearch": {
+            "type": "object",
+            "required": [
+                "order",
+                "orderBy",
+                "page",
+                "pageSize"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "order": {
+                    "type": "string",
+                    "enum": [
+                        "null",
+                        "ascending",
+                        "descending"
+                    ]
+                },
+                "orderBy": {
+                    "type": "string",
+                    "enum": [
+                        "primary_domain",
+                        "type",
+                        "status",
+                        "created_at",
+                        "expire_date"
+                    ]
+                },
+                "page": {
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "type": "integer"
+                },
+                "websiteGroupId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteUpdate": {
+            "type": "object",
+            "required": [
+                "id",
+                "primaryDomain"
+            ],
+            "properties": {
+                "IPV6": {
+                    "type": "boolean"
+                },
+                "expireDate": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "remark": {
+                    "type": "string"
+                },
+                "webSiteGroupID": {
+                    "type": "integer"
+                }
+            }
+        },
+        "request.WebsiteUpdateDir": {
+            "type": "object",
+            "required": [
+                "id",
+                "siteDir"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "siteDir": {
+                    "type": "string"
+                }
+            }
+        },
+        "request.WebsiteUpdateDirPermission": {
+            "type": "object",
+            "required": [
+                "group",
+                "id",
+                "user"
+            ],
+            "properties": {
+                "group": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.AppDTO": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "crossVersionUpdate": {
+                    "type": "boolean"
+                },
+                "document": {
+                    "type": "string"
+                },
+                "github": {
+                    "type": "string"
+                },
+                "icon": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "installed": {
+                    "type": "boolean"
+                },
+                "key": {
+                    "type": "string"
+                },
+                "lastModified": {
+                    "type": "integer"
+                },
+                "limit": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "readMe": {
+                    "type": "string"
+                },
+                "recommend": {
+                    "type": "integer"
+                },
+                "required": {
+                    "type": "string"
+                },
+                "resource": {
+                    "type": "string"
+                },
+                "shortDescEn": {
+                    "type": "string"
+                },
+                "shortDescZh": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "tags": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.Tag"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "versions": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "website": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.AppDetailDTO": {
+            "type": "object",
+            "properties": {
+                "appId": {
+                    "type": "integer"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "dockerCompose": {
+                    "type": "string"
+                },
+                "downloadCallBackUrl": {
+                    "type": "string"
+                },
+                "downloadUrl": {
+                    "type": "string"
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "hostMode": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "ignoreUpgrade": {
+                    "type": "boolean"
+                },
+                "image": {
+                    "type": "string"
+                },
+                "lastModified": {
+                    "type": "integer"
+                },
+                "lastVersion": {
+                    "type": "string"
+                },
+                "params": {},
+                "status": {
+                    "type": "string"
+                },
+                "update": {
+                    "type": "boolean"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.AppInstalledCheck": {
+            "type": "object",
+            "properties": {
+                "app": {
+                    "type": "string"
+                },
+                "appInstallId": {
+                    "type": "integer"
+                },
+                "containerName": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "httpPort": {
+                    "type": "integer"
+                },
+                "httpsPort": {
+                    "type": "integer"
+                },
+                "installPath": {
+                    "type": "string"
+                },
+                "isExist": {
+                    "type": "boolean"
+                },
+                "lastBackupAt": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.AppParam": {
+            "type": "object",
+            "properties": {
+                "edit": {
+                    "type": "boolean"
+                },
+                "key": {
+                    "type": "string"
+                },
+                "labelEn": {
+                    "type": "string"
+                },
+                "labelZh": {
+                    "type": "string"
+                },
+                "multiple": {
+                    "type": "boolean"
+                },
+                "required": {
+                    "type": "boolean"
+                },
+                "rule": {
+                    "type": "string"
+                },
+                "showValue": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "value": {},
+                "values": {}
+            }
+        },
+        "response.AppService": {
+            "type": "object",
+            "properties": {
+                "config": {},
+                "from": {
+                    "type": "string"
+                },
+                "label": {
+                    "type": "string"
+                },
+                "value": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.FileInfo": {
+            "type": "object",
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "extension": {
+                    "type": "string"
+                },
+                "favoriteID": {
+                    "type": "integer"
+                },
+                "gid": {
+                    "type": "string"
+                },
+                "group": {
+                    "type": "string"
+                },
+                "isDetail": {
+                    "type": "boolean"
+                },
+                "isDir": {
+                    "type": "boolean"
+                },
+                "isHidden": {
+                    "type": "boolean"
+                },
+                "isSymlink": {
+                    "type": "boolean"
+                },
+                "itemTotal": {
+                    "type": "integer"
+                },
+                "items": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/files.FileInfo"
+                    }
+                },
+                "linkPath": {
+                    "type": "string"
+                },
+                "mimeType": {
+                    "type": "string"
+                },
+                "modTime": {
+                    "type": "string"
+                },
+                "mode": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                },
+                "size": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "uid": {
+                    "type": "string"
+                },
+                "updateTime": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.FileTree": {
+            "type": "object",
+            "properties": {
+                "children": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/response.FileTree"
+                    }
+                },
+                "extension": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "string"
+                },
+                "isDir": {
+                    "type": "boolean"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.IgnoredApp": {
+            "type": "object",
+            "properties": {
+                "detailID": {
+                    "type": "integer"
+                },
+                "icon": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.NginxParam": {
+            "type": "object",
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "params": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                }
+            }
+        },
+        "response.NginxStatus": {
+            "type": "object",
+            "properties": {
+                "accepts": {
+                    "type": "string"
+                },
+                "active": {
+                    "type": "string"
+                },
+                "handled": {
+                    "type": "string"
+                },
+                "reading": {
+                    "type": "string"
+                },
+                "requests": {
+                    "type": "string"
+                },
+                "waiting": {
+                    "type": "string"
+                },
+                "writing": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.PHPConfig": {
+            "type": "object",
+            "properties": {
+                "disableFunctions": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "params": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "type": "string"
+                    }
+                },
+                "uploadMaxSize": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.PHPExtensionsDTO": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "extensions": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.WebsiteAcmeAccountDTO": {
+            "type": "object",
+            "properties": {
+                "createdAt": {
+                    "type": "string"
+                },
+                "eabHmacKey": {
+                    "type": "string"
+                },
+                "eabKid": {
+                    "type": "string"
+                },
+                "email": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.WebsiteCADTO": {
+            "type": "object",
+            "properties": {
+                "city": {
+                    "type": "string"
+                },
+                "commonName": {
+                    "type": "string"
+                },
+                "country": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "csr": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "keyType": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "organization": {
+                    "type": "string"
+                },
+                "organizationUint": {
+                    "type": "string"
+                },
+                "privateKey": {
+                    "type": "string"
+                },
+                "province": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.WebsiteDNSRes": {
+            "type": "object",
+            "properties": {
+                "domain": {
+                    "type": "string"
+                },
+                "err": {
+                    "type": "string"
+                },
+                "resolve": {
+                    "type": "string"
+                },
+                "value": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.WebsiteDTO": {
+            "type": "object",
+            "properties": {
+                "IPV6": {
+                    "type": "boolean"
+                },
+                "accessLog": {
+                    "type": "boolean"
+                },
+                "accessLogPath": {
+                    "type": "string"
+                },
+                "alias": {
+                    "type": "string"
+                },
+                "appInstallId": {
+                    "type": "integer"
+                },
+                "appName": {
+                    "type": "string"
+                },
+                "createdAt": {
+                    "type": "string"
+                },
+                "defaultServer": {
+                    "type": "boolean"
+                },
+                "domains": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/model.WebsiteDomain"
+                    }
+                },
+                "errorLog": {
+                    "type": "boolean"
+                },
+                "errorLogPath": {
+                    "type": "string"
+                },
+                "expireDate": {
+                    "type": "string"
+                },
+                "ftpId": {
+                    "type": "integer"
+                },
+                "group": {
+                    "type": "string"
+                },
+                "httpConfig": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "primaryDomain": {
+                    "type": "string"
+                },
+                "protocol": {
+                    "type": "string"
+                },
+                "proxy": {
+                    "type": "string"
+                },
+                "proxyType": {
+                    "type": "string"
+                },
+                "remark": {
+                    "type": "string"
+                },
+                "rewrite": {
+                    "type": "string"
+                },
+                "runtimeID": {
+                    "type": "integer"
+                },
+                "runtimeName": {
+                    "type": "string"
+                },
+                "siteDir": {
+                    "type": "string"
+                },
+                "sitePath": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "updatedAt": {
+                    "type": "string"
+                },
+                "user": {
+                    "type": "string"
+                },
+                "webSiteGroupId": {
+                    "type": "integer"
+                },
+                "webSiteSSL": {
+                    "$ref": "#/definitions/model.WebsiteSSL"
+                },
+                "webSiteSSLId": {
+                    "type": "integer"
+                }
+            }
+        },
+        "response.WebsiteHTTPS": {
+            "type": "object",
+            "properties": {
+                "SSL": {
+                    "$ref": "#/definitions/model.WebsiteSSL"
+                },
+                "SSLProtocol": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "algorithm": {
+                    "type": "string"
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "hsts": {
+                    "type": "boolean"
+                },
+                "httpConfig": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.WebsiteLog": {
+            "type": "object",
+            "properties": {
+                "content": {
+                    "type": "string"
+                },
+                "enable": {
+                    "type": "boolean"
+                },
+                "end": {
+                    "type": "boolean"
+                },
+                "path": {
+                    "type": "string"
+                }
+            }
+        },
+        "response.WebsiteNginxConfig": {
+            "type": "object",
+            "properties": {
+                "enable": {
+                    "type": "boolean"
+                },
+                "params": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/response.NginxParam"
+                    }
+                }
+            }
+        },
+        "response.WebsitePreInstallCheck": {
+            "type": "object",
+            "properties": {
+                "appName": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "version": {
+                    "type": "string"
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/core/cmd/server/docs/swagger.yaml b/core/cmd/server/docs/swagger.yaml
new file mode 100644
index 000000000..9dabd1965
--- /dev/null
+++ b/core/cmd/server/docs/swagger.yaml
@@ -0,0 +1,15166 @@
+basePath: /api/v1
+definitions:
+  dto.AddrRuleOperate:
+    properties:
+      address:
+        type: string
+      description:
+        type: string
+      operation:
+        enum:
+        - add
+        - remove
+        type: string
+      strategy:
+        enum:
+        - accept
+        - drop
+        type: string
+    required:
+    - address
+    - operation
+    - strategy
+    type: object
+  dto.AddrRuleUpdate:
+    properties:
+      newRule:
+        $ref: '#/definitions/dto.AddrRuleOperate'
+      oldRule:
+        $ref: '#/definitions/dto.AddrRuleOperate'
+    type: object
+  dto.AppInstallInfo:
+    properties:
+      id:
+        type: integer
+      key:
+        type: string
+      name:
+        type: string
+    type: object
+  dto.AppResource:
+    properties:
+      name:
+        type: string
+      type:
+        type: string
+    type: object
+  dto.AppVersion:
+    properties:
+      detailId:
+        type: integer
+      dockerCompose:
+        type: string
+      version:
+        type: string
+    type: object
+  dto.BackupInfo:
+    properties:
+      backupPath:
+        type: string
+      bucket:
+        type: string
+      createdAt:
+        type: string
+      id:
+        type: integer
+      type:
+        type: string
+      vars:
+        type: string
+    type: object
+  dto.BackupOperate:
+    properties:
+      accessKey:
+        type: string
+      backupPath:
+        type: string
+      bucket:
+        type: string
+      credential:
+        type: string
+      id:
+        type: integer
+      type:
+        type: string
+      vars:
+        type: string
+    required:
+    - type
+    - vars
+    type: object
+  dto.BackupSearchFile:
+    properties:
+      type:
+        type: string
+    required:
+    - type
+    type: object
+  dto.BatchDelete:
+    properties:
+      force:
+        type: boolean
+      names:
+        items:
+          type: string
+        type: array
+    required:
+    - names
+    type: object
+  dto.BatchDeleteReq:
+    properties:
+      ids:
+        items:
+          type: integer
+        type: array
+    required:
+    - ids
+    type: object
+  dto.BatchRuleOperate:
+    properties:
+      rules:
+        items:
+          $ref: '#/definitions/dto.PortRuleOperate'
+        type: array
+      type:
+        type: string
+    required:
+    - type
+    type: object
+  dto.BindInfo:
+    properties:
+      bindAddress:
+        type: string
+      ipv6:
+        enum:
+        - enable
+        - disable
+        type: string
+    required:
+    - bindAddress
+    - ipv6
+    type: object
+  dto.BindUser:
+    properties:
+      database:
+        type: string
+      db:
+        type: string
+      password:
+        type: string
+      permission:
+        type: string
+      username:
+        type: string
+    required:
+    - database
+    - db
+    - password
+    - permission
+    - username
+    type: object
+  dto.CaptchaResponse:
+    properties:
+      captchaID:
+        type: string
+      imagePath:
+        type: string
+    type: object
+  dto.ChangeDBInfo:
+    properties:
+      database:
+        type: string
+      from:
+        enum:
+        - local
+        - remote
+        type: string
+      id:
+        type: integer
+      type:
+        enum:
+        - mysql
+        - mariadb
+        - postgresql
+        type: string
+      value:
+        type: string
+    required:
+    - database
+    - from
+    - type
+    - value
+    type: object
+  dto.ChangeHostGroup:
+    properties:
+      groupID:
+        type: integer
+      id:
+        type: integer
+    required:
+    - groupID
+    - id
+    type: object
+  dto.ChangePasswd:
+    properties:
+      passwd:
+        type: string
+      user:
+        type: string
+    type: object
+  dto.ChangeRedisPass:
+    properties:
+      database:
+        type: string
+      value:
+        type: string
+    required:
+    - database
+    type: object
+  dto.ClamBaseInfo:
+    properties:
+      freshIsActive:
+        type: boolean
+      freshIsExist:
+        type: boolean
+      freshVersion:
+        type: string
+      isActive:
+        type: boolean
+      isExist:
+        type: boolean
+      version:
+        type: string
+    type: object
+  dto.ClamCreate:
+    properties:
+      description:
+        type: string
+      infectedDir:
+        type: string
+      infectedStrategy:
+        type: string
+      name:
+        type: string
+      path:
+        type: string
+      spec:
+        type: string
+      status:
+        type: string
+    type: object
+  dto.ClamDelete:
+    properties:
+      ids:
+        items:
+          type: integer
+        type: array
+      removeInfected:
+        type: boolean
+      removeRecord:
+        type: boolean
+    required:
+    - ids
+    type: object
+  dto.ClamFileReq:
+    properties:
+      name:
+        type: string
+      tail:
+        type: string
+    required:
+    - name
+    type: object
+  dto.ClamLogReq:
+    properties:
+      clamName:
+        type: string
+      recordName:
+        type: string
+      tail:
+        type: string
+    type: object
+  dto.ClamLogSearch:
+    properties:
+      clamID:
+        type: integer
+      endTime:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      startTime:
+        type: string
+    required:
+    - page
+    - pageSize
+    type: object
+  dto.ClamUpdate:
+    properties:
+      description:
+        type: string
+      id:
+        type: integer
+      infectedDir:
+        type: string
+      infectedStrategy:
+        type: string
+      name:
+        type: string
+      path:
+        type: string
+      spec:
+        type: string
+    type: object
+  dto.ClamUpdateStatus:
+    properties:
+      id:
+        type: integer
+      status:
+        type: string
+    type: object
+  dto.Clean:
+    properties:
+      name:
+        type: string
+      size:
+        type: integer
+      treeType:
+        type: string
+    type: object
+  dto.CleanLog:
+    properties:
+      logType:
+        enum:
+        - login
+        - operation
+        type: string
+    required:
+    - logType
+    type: object
+  dto.CommandInfo:
+    properties:
+      command:
+        type: string
+      groupBelong:
+        type: string
+      groupID:
+        type: integer
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
+  dto.CommandOperate:
+    properties:
+      command:
+        type: string
+      groupBelong:
+        type: string
+      groupID:
+        type: integer
+      id:
+        type: integer
+      name:
+        type: string
+    required:
+    - command
+    - name
+    type: object
+  dto.CommonBackup:
+    properties:
+      detailName:
+        type: string
+      name:
+        type: string
+      secret:
+        type: string
+      type:
+        enum:
+        - app
+        - mysql
+        - mariadb
+        - redis
+        - website
+        - postgresql
+        type: string
+    required:
+    - type
+    type: object
+  dto.CommonRecover:
+    properties:
+      detailName:
+        type: string
+      file:
+        type: string
+      name:
+        type: string
+      secret:
+        type: string
+      source:
+        enum:
+        - OSS
+        - S3
+        - SFTP
+        - MINIO
+        - LOCAL
+        - COS
+        - KODO
+        - OneDrive
+        - WebDAV
+        type: string
+      type:
+        enum:
+        - app
+        - mysql
+        - mariadb
+        - redis
+        - website
+        - postgresql
+        type: string
+    required:
+    - source
+    - type
+    type: object
+  dto.ComposeCreate:
+    properties:
+      file:
+        type: string
+      from:
+        enum:
+        - edit
+        - path
+        - template
+        type: string
+      name:
+        type: string
+      path:
+        type: string
+      template:
+        type: integer
+    required:
+    - from
+    type: object
+  dto.ComposeOperation:
+    properties:
+      name:
+        type: string
+      operation:
+        enum:
+        - start
+        - stop
+        - down
+        type: string
+      path:
+        type: string
+      withFile:
+        type: boolean
+    required:
+    - name
+    - operation
+    - path
+    type: object
+  dto.ComposeTemplateCreate:
+    properties:
+      content:
+        type: string
+      description:
+        type: string
+      name:
+        type: string
+    required:
+    - name
+    type: object
+  dto.ComposeTemplateInfo:
+    properties:
+      content:
+        type: string
+      createdAt:
+        type: string
+      description:
+        type: string
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
+  dto.ComposeTemplateUpdate:
+    properties:
+      content:
+        type: string
+      description:
+        type: string
+      id:
+        type: integer
+    type: object
+  dto.ComposeUpdate:
+    properties:
+      content:
+        type: string
+      name:
+        type: string
+      path:
+        type: string
+    required:
+    - content
+    - name
+    - path
+    type: object
+  dto.ContainerCommit:
+    properties:
+      author:
+        type: string
+      comment:
+        type: string
+      containerID:
+        type: string
+      containerName:
+        type: string
+      newImageName:
+        type: string
+      pause:
+        type: boolean
+    required:
+    - containerID
+    type: object
+  dto.ContainerListStats:
+    properties:
+      containerID:
+        type: string
+      cpuPercent:
+        type: number
+      cpuTotalUsage:
+        type: integer
+      memoryCache:
+        type: integer
+      memoryLimit:
+        type: integer
+      memoryPercent:
+        type: number
+      memoryUsage:
+        type: integer
+      percpuUsage:
+        type: integer
+      systemUsage:
+        type: integer
+    type: object
+  dto.ContainerOperate:
+    properties:
+      autoRemove:
+        type: boolean
+      cmd:
+        items:
+          type: string
+        type: array
+      containerID:
+        type: string
+      cpuShares:
+        type: integer
+      entrypoint:
+        items:
+          type: string
+        type: array
+      env:
+        items:
+          type: string
+        type: array
+      exposedPorts:
+        items:
+          $ref: '#/definitions/dto.PortHelper'
+        type: array
+      forcePull:
+        type: boolean
+      image:
+        type: string
+      ipv4:
+        type: string
+      ipv6:
+        type: string
+      labels:
+        items:
+          type: string
+        type: array
+      memory:
+        type: number
+      name:
+        type: string
+      nanoCPUs:
+        type: number
+      network:
+        type: string
+      openStdin:
+        type: boolean
+      privileged:
+        type: boolean
+      publishAllPorts:
+        type: boolean
+      restartPolicy:
+        type: string
+      tty:
+        type: boolean
+      volumes:
+        items:
+          $ref: '#/definitions/dto.VolumeHelper'
+        type: array
+    required:
+    - image
+    - name
+    type: object
+  dto.ContainerOperation:
+    properties:
+      names:
+        items:
+          type: string
+        type: array
+      operation:
+        enum:
+        - start
+        - stop
+        - restart
+        - kill
+        - pause
+        - unpause
+        - remove
+        type: string
+    required:
+    - names
+    - operation
+    type: object
+  dto.ContainerPrune:
+    properties:
+      pruneType:
+        enum:
+        - container
+        - image
+        - volume
+        - network
+        - buildcache
+        type: string
+      withTagAll:
+        type: boolean
+    required:
+    - pruneType
+    type: object
+  dto.ContainerPruneReport:
+    properties:
+      deletedNumber:
+        type: integer
+      spaceReclaimed:
+        type: integer
+    type: object
+  dto.ContainerRename:
+    properties:
+      name:
+        type: string
+      newName:
+        type: string
+    required:
+    - name
+    - newName
+    type: object
+  dto.ContainerStats:
+    properties:
+      cache:
+        type: number
+      cpuPercent:
+        type: number
+      ioRead:
+        type: number
+      ioWrite:
+        type: number
+      memory:
+        type: number
+      networkRX:
+        type: number
+      networkTX:
+        type: number
+      shotTime:
+        type: string
+    type: object
+  dto.ContainerUpgrade:
+    properties:
+      forcePull:
+        type: boolean
+      image:
+        type: string
+      name:
+        type: string
+    required:
+    - image
+    - name
+    type: object
+  dto.CronjobBatchDelete:
+    properties:
+      cleanData:
+        type: boolean
+      ids:
+        items:
+          type: integer
+        type: array
+    required:
+    - ids
+    type: object
+  dto.CronjobClean:
+    properties:
+      cleanData:
+        type: boolean
+      cronjobID:
+        type: integer
+      isDelete:
+        type: boolean
+    required:
+    - cronjobID
+    type: object
+  dto.CronjobCreate:
+    properties:
+      appID:
+        type: string
+      backupAccounts:
+        type: string
+      command:
+        type: string
+      containerName:
+        type: string
+      dbName:
+        type: string
+      dbType:
+        type: string
+      defaultDownload:
+        type: string
+      exclusionRules:
+        type: string
+      name:
+        type: string
+      retainCopies:
+        minimum: 1
+        type: integer
+      script:
+        type: string
+      secret:
+        type: string
+      sourceDir:
+        type: string
+      spec:
+        type: string
+      type:
+        type: string
+      url:
+        type: string
+      website:
+        type: string
+    required:
+    - name
+    - spec
+    - type
+    type: object
+  dto.CronjobDownload:
+    properties:
+      backupAccountID:
+        type: integer
+      recordID:
+        type: integer
+    required:
+    - backupAccountID
+    - recordID
+    type: object
+  dto.CronjobUpdate:
+    properties:
+      appID:
+        type: string
+      backupAccounts:
+        type: string
+      command:
+        type: string
+      containerName:
+        type: string
+      dbName:
+        type: string
+      dbType:
+        type: string
+      defaultDownload:
+        type: string
+      exclusionRules:
+        type: string
+      id:
+        type: integer
+      name:
+        type: string
+      retainCopies:
+        minimum: 1
+        type: integer
+      script:
+        type: string
+      secret:
+        type: string
+      sourceDir:
+        type: string
+      spec:
+        type: string
+      url:
+        type: string
+      website:
+        type: string
+    required:
+    - id
+    - name
+    - spec
+    type: object
+  dto.CronjobUpdateStatus:
+    properties:
+      id:
+        type: integer
+      status:
+        type: string
+    required:
+    - id
+    - status
+    type: object
+  dto.DBBaseInfo:
+    properties:
+      containerName:
+        type: string
+      name:
+        type: string
+      port:
+        type: integer
+    type: object
+  dto.DBConfUpdateByFile:
+    properties:
+      database:
+        type: string
+      file:
+        type: string
+      type:
+        enum:
+        - mysql
+        - mariadb
+        - postgresql
+        - redis
+        type: string
+    required:
+    - database
+    - type
+    type: object
+  dto.DaemonJsonConf:
+    properties:
+      cgroupDriver:
+        type: string
+      experimental:
+        type: boolean
+      fixedCidrV6:
+        type: string
+      insecureRegistries:
+        items:
+          type: string
+        type: array
+      ip6Tables:
+        type: boolean
+      iptables:
+        type: boolean
+      ipv6:
+        type: boolean
+      isSwarm:
+        type: boolean
+      liveRestore:
+        type: boolean
+      logMaxFile:
+        type: string
+      logMaxSize:
+        type: string
+      registryMirrors:
+        items:
+          type: string
+        type: array
+      status:
+        type: string
+      version:
+        type: string
+    type: object
+  dto.DaemonJsonUpdateByFile:
+    properties:
+      file:
+        type: string
+    type: object
+  dto.DashboardBase:
+    properties:
+      appInstalledNumber:
+        type: integer
+      cpuCores:
+        type: integer
+      cpuLogicalCores:
+        type: integer
+      cpuModelName:
+        type: string
+      cronjobNumber:
+        type: integer
+      currentInfo:
+        $ref: '#/definitions/dto.DashboardCurrent'
+      databaseNumber:
+        type: integer
+      hostname:
+        type: string
+      kernelArch:
+        type: string
+      kernelVersion:
+        type: string
+      os:
+        type: string
+      platform:
+        type: string
+      platformFamily:
+        type: string
+      platformVersion:
+        type: string
+      virtualizationSystem:
+        type: string
+      websiteNumber:
+        type: integer
+    type: object
+  dto.DashboardCurrent:
+    properties:
+      cpuPercent:
+        items:
+          type: number
+        type: array
+      cpuTotal:
+        type: integer
+      cpuUsed:
+        type: number
+      cpuUsedPercent:
+        type: number
+      diskData:
+        items:
+          $ref: '#/definitions/dto.DiskInfo'
+        type: array
+      gpuData:
+        items:
+          $ref: '#/definitions/dto.GPUInfo'
+        type: array
+      ioCount:
+        type: integer
+      ioReadBytes:
+        type: integer
+      ioReadTime:
+        type: integer
+      ioWriteBytes:
+        type: integer
+      ioWriteTime:
+        type: integer
+      load1:
+        type: number
+      load5:
+        type: number
+      load15:
+        type: number
+      loadUsagePercent:
+        type: number
+      memoryAvailable:
+        type: integer
+      memoryTotal:
+        type: integer
+      memoryUsed:
+        type: integer
+      memoryUsedPercent:
+        type: number
+      netBytesRecv:
+        type: integer
+      netBytesSent:
+        type: integer
+      procs:
+        type: integer
+      shotTime:
+        type: string
+      swapMemoryAvailable:
+        type: integer
+      swapMemoryTotal:
+        type: integer
+      swapMemoryUsed:
+        type: integer
+      swapMemoryUsedPercent:
+        type: number
+      timeSinceUptime:
+        type: string
+      uptime:
+        type: integer
+    type: object
+  dto.DatabaseCreate:
+    properties:
+      address:
+        type: string
+      clientCert:
+        type: string
+      clientKey:
+        type: string
+      description:
+        type: string
+      from:
+        enum:
+        - local
+        - remote
+        type: string
+      name:
+        maxLength: 256
+        type: string
+      password:
+        type: string
+      port:
+        type: integer
+      rootCert:
+        type: string
+      skipVerify:
+        type: boolean
+      ssl:
+        type: boolean
+      type:
+        type: string
+      username:
+        type: string
+      version:
+        type: string
+    required:
+    - from
+    - name
+    - type
+    - username
+    - version
+    type: object
+  dto.DatabaseDelete:
+    properties:
+      deleteBackup:
+        type: boolean
+      forceDelete:
+        type: boolean
+      id:
+        type: integer
+    required:
+    - id
+    type: object
+  dto.DatabaseInfo:
+    properties:
+      address:
+        type: string
+      clientCert:
+        type: string
+      clientKey:
+        type: string
+      createdAt:
+        type: string
+      description:
+        type: string
+      from:
+        type: string
+      id:
+        type: integer
+      name:
+        maxLength: 256
+        type: string
+      password:
+        type: string
+      port:
+        type: integer
+      rootCert:
+        type: string
+      skipVerify:
+        type: boolean
+      ssl:
+        type: boolean
+      type:
+        type: string
+      username:
+        type: string
+      version:
+        type: string
+    type: object
+  dto.DatabaseItem:
+    properties:
+      database:
+        type: string
+      from:
+        type: string
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
+  dto.DatabaseOption:
+    properties:
+      address:
+        type: string
+      database:
+        type: string
+      from:
+        type: string
+      id:
+        type: integer
+      type:
+        type: string
+      version:
+        type: string
+    type: object
+  dto.DatabaseSearch:
+    properties:
+      info:
+        type: string
+      order:
+        enum:
+        - "null"
+        - ascending
+        - descending
+        type: string
+      orderBy:
+        enum:
+        - name
+        - created_at
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      type:
+        type: string
+    required:
+    - order
+    - orderBy
+    - page
+    - pageSize
+    type: object
+  dto.DatabaseUpdate:
+    properties:
+      address:
+        type: string
+      clientCert:
+        type: string
+      clientKey:
+        type: string
+      description:
+        type: string
+      id:
+        type: integer
+      password:
+        type: string
+      port:
+        type: integer
+      rootCert:
+        type: string
+      skipVerify:
+        type: boolean
+      ssl:
+        type: boolean
+      type:
+        type: string
+      username:
+        type: string
+      version:
+        type: string
+    required:
+    - type
+    - username
+    - version
+    type: object
+  dto.DeviceBaseInfo:
+    properties:
+      dns:
+        items:
+          type: string
+        type: array
+      hostname:
+        type: string
+      hosts:
+        items:
+          $ref: '#/definitions/dto.HostHelper'
+        type: array
+      localTime:
+        type: string
+      maxSize:
+        type: integer
+      ntp:
+        type: string
+      swapDetails:
+        items:
+          $ref: '#/definitions/dto.SwapHelper'
+        type: array
+      swapMemoryAvailable:
+        type: integer
+      swapMemoryTotal:
+        type: integer
+      swapMemoryUsed:
+        type: integer
+      timeZone:
+        type: string
+      user:
+        type: string
+    type: object
+  dto.DiskInfo:
+    properties:
+      device:
+        type: string
+      free:
+        type: integer
+      inodesFree:
+        type: integer
+      inodesTotal:
+        type: integer
+      inodesUsed:
+        type: integer
+      inodesUsedPercent:
+        type: number
+      path:
+        type: string
+      total:
+        type: integer
+      type:
+        type: string
+      used:
+        type: integer
+      usedPercent:
+        type: number
+    type: object
+  dto.DockerOperation:
+    properties:
+      operation:
+        enum:
+        - start
+        - restart
+        - stop
+        type: string
+    required:
+    - operation
+    type: object
+  dto.DownloadRecord:
+    properties:
+      fileDir:
+        type: string
+      fileName:
+        type: string
+      source:
+        enum:
+        - OSS
+        - S3
+        - SFTP
+        - MINIO
+        - LOCAL
+        - COS
+        - KODO
+        - OneDrive
+        - WebDAV
+        type: string
+    required:
+    - fileDir
+    - fileName
+    - source
+    type: object
+  dto.Fail2BanBaseInfo:
+    properties:
+      banAction:
+        type: string
+      banTime:
+        type: string
+      findTime:
+        type: string
+      isActive:
+        type: boolean
+      isEnable:
+        type: boolean
+      isExist:
+        type: boolean
+      logPath:
+        type: string
+      maxRetry:
+        type: integer
+      port:
+        type: integer
+      version:
+        type: string
+    type: object
+  dto.Fail2BanSearch:
+    properties:
+      status:
+        enum:
+        - banned
+        - ignore
+        type: string
+    required:
+    - status
+    type: object
+  dto.Fail2BanUpdate:
+    properties:
+      key:
+        enum:
+        - port
+        - bantime
+        - findtime
+        - maxretry
+        - banaction
+        - logpath
+        - port
+        type: string
+      value:
+        type: string
+    required:
+    - key
+    type: object
+  dto.FirewallBaseInfo:
+    properties:
+      name:
+        type: string
+      pingStatus:
+        type: string
+      status:
+        type: string
+      version:
+        type: string
+    type: object
+  dto.FirewallOperation:
+    properties:
+      operation:
+        enum:
+        - start
+        - stop
+        - restart
+        - disablePing
+        - enablePing
+        type: string
+    required:
+    - operation
+    type: object
+  dto.ForBuckets:
+    properties:
+      accessKey:
+        type: string
+      credential:
+        type: string
+      type:
+        type: string
+      vars:
+        type: string
+    required:
+    - credential
+    - type
+    - vars
+    type: object
+  dto.ForwardRuleOperate:
+    properties:
+      rules:
+        items:
+          properties:
+            num:
+              type: string
+            operation:
+              enum:
+              - add
+              - remove
+              type: string
+            port:
+              type: string
+            protocol:
+              enum:
+              - tcp
+              - udp
+              - tcp/udp
+              type: string
+            targetIP:
+              type: string
+            targetPort:
+              type: string
+          required:
+          - operation
+          - port
+          - protocol
+          - targetPort
+          type: object
+        type: array
+    type: object
+  dto.FtpBaseInfo:
+    properties:
+      isActive:
+        type: boolean
+      isExist:
+        type: boolean
+    type: object
+  dto.FtpCreate:
+    properties:
+      description:
+        type: string
+      password:
+        type: string
+      path:
+        type: string
+      user:
+        type: string
+    required:
+    - password
+    - path
+    - user
+    type: object
+  dto.FtpLogSearch:
+    properties:
+      operation:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      user:
+        type: string
+    required:
+    - page
+    - pageSize
+    type: object
+  dto.FtpUpdate:
+    properties:
+      description:
+        type: string
+      id:
+        type: integer
+      password:
+        type: string
+      path:
+        type: string
+      status:
+        type: string
+    required:
+    - password
+    - path
+    type: object
+  dto.GPUInfo:
+    properties:
+      fanSpeed:
+        type: string
+      gpuUtil:
+        type: string
+      index:
+        type: integer
+      maxPowerLimit:
+        type: string
+      memTotal:
+        type: string
+      memUsed:
+        type: string
+      memoryUsage:
+        type: string
+      performanceState:
+        type: string
+      powerDraw:
+        type: string
+      powerUsage:
+        type: string
+      productName:
+        type: string
+      temperature:
+        type: string
+    type: object
+  dto.GenerateLoad:
+    properties:
+      encryptionMode:
+        enum:
+        - rsa
+        - ed25519
+        - ecdsa
+        - dsa
+        type: string
+    required:
+    - encryptionMode
+    type: object
+  dto.GenerateSSH:
+    properties:
+      encryptionMode:
+        enum:
+        - rsa
+        - ed25519
+        - ecdsa
+        - dsa
+        type: string
+      password:
+        type: string
+    required:
+    - encryptionMode
+    type: object
+  dto.GroupCreate:
+    properties:
+      id:
+        type: integer
+      name:
+        type: string
+      type:
+        type: string
+    required:
+    - name
+    - type
+    type: object
+  dto.GroupInfo:
+    properties:
+      id:
+        type: integer
+      isDefault:
+        type: boolean
+      name:
+        type: string
+      type:
+        type: string
+    type: object
+  dto.GroupSearch:
+    properties:
+      type:
+        type: string
+    required:
+    - type
+    type: object
+  dto.GroupUpdate:
+    properties:
+      id:
+        type: integer
+      isDefault:
+        type: boolean
+      name:
+        type: string
+      type:
+        type: string
+    required:
+    - type
+    type: object
+  dto.HostConnTest:
+    properties:
+      addr:
+        type: string
+      authMode:
+        enum:
+        - password
+        - key
+        type: string
+      passPhrase:
+        type: string
+      password:
+        type: string
+      port:
+        maximum: 65535
+        minimum: 1
+        type: integer
+      privateKey:
+        type: string
+      user:
+        type: string
+    required:
+    - addr
+    - port
+    - user
+    type: object
+  dto.HostHelper:
+    properties:
+      host:
+        type: string
+      ip:
+        type: string
+    type: object
+  dto.HostOperate:
+    properties:
+      addr:
+        type: string
+      authMode:
+        enum:
+        - password
+        - key
+        type: string
+      description:
+        type: string
+      groupID:
+        type: integer
+      id:
+        type: integer
+      name:
+        type: string
+      passPhrase:
+        type: string
+      password:
+        type: string
+      port:
+        maximum: 65535
+        minimum: 1
+        type: integer
+      privateKey:
+        type: string
+      rememberPassword:
+        type: boolean
+      user:
+        type: string
+    required:
+    - addr
+    - port
+    - user
+    type: object
+  dto.HostTree:
+    properties:
+      children:
+        items:
+          $ref: '#/definitions/dto.TreeChild'
+        type: array
+      id:
+        type: integer
+      label:
+        type: string
+    type: object
+  dto.ImageBuild:
+    properties:
+      dockerfile:
+        type: string
+      from:
+        type: string
+      name:
+        type: string
+      tags:
+        items:
+          type: string
+        type: array
+    required:
+    - dockerfile
+    - from
+    - name
+    type: object
+  dto.ImageInfo:
+    properties:
+      createdAt:
+        type: string
+      id:
+        type: string
+      isUsed:
+        type: boolean
+      size:
+        type: string
+      tags:
+        items:
+          type: string
+        type: array
+    type: object
+  dto.ImageLoad:
+    properties:
+      path:
+        type: string
+    required:
+    - path
+    type: object
+  dto.ImagePull:
+    properties:
+      imageName:
+        type: string
+      repoID:
+        type: integer
+    required:
+    - imageName
+    type: object
+  dto.ImagePush:
+    properties:
+      name:
+        type: string
+      repoID:
+        type: integer
+      tagName:
+        type: string
+    required:
+    - name
+    - repoID
+    - tagName
+    type: object
+  dto.ImageRepoDelete:
+    properties:
+      ids:
+        items:
+          type: integer
+        type: array
+    required:
+    - ids
+    type: object
+  dto.ImageRepoOption:
+    properties:
+      downloadUrl:
+        type: string
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
+  dto.ImageRepoUpdate:
+    properties:
+      auth:
+        type: boolean
+      downloadUrl:
+        type: string
+      id:
+        type: integer
+      password:
+        maxLength: 256
+        type: string
+      protocol:
+        type: string
+      username:
+        maxLength: 256
+        type: string
+    type: object
+  dto.ImageSave:
+    properties:
+      name:
+        type: string
+      path:
+        type: string
+      tagName:
+        type: string
+    required:
+    - name
+    - path
+    - tagName
+    type: object
+  dto.ImageTag:
+    properties:
+      sourceID:
+        type: string
+      targetName:
+        type: string
+    required:
+    - sourceID
+    - targetName
+    type: object
+  dto.InspectReq:
+    properties:
+      id:
+        type: string
+      type:
+        type: string
+    required:
+    - id
+    - type
+    type: object
+  dto.LogOption:
+    properties:
+      logMaxFile:
+        type: string
+      logMaxSize:
+        type: string
+    type: object
+  dto.Login:
+    properties:
+      authMethod:
+        enum:
+        - jwt
+        - session
+        type: string
+      captcha:
+        type: string
+      captchaID:
+        type: string
+      ignoreCaptcha:
+        type: boolean
+      language:
+        enum:
+        - zh
+        - en
+        - tw
+        type: string
+      name:
+        type: string
+      password:
+        type: string
+    required:
+    - authMethod
+    - language
+    - name
+    - password
+    type: object
+  dto.MFALogin:
+    properties:
+      authMethod:
+        type: string
+      code:
+        type: string
+      name:
+        type: string
+      password:
+        type: string
+    required:
+    - code
+    - name
+    - password
+    type: object
+  dto.MfaCredential:
+    properties:
+      code:
+        type: string
+      interval:
+        type: string
+      secret:
+        type: string
+    required:
+    - code
+    - interval
+    - secret
+    type: object
+  dto.MonitorSearch:
+    properties:
+      endTime:
+        type: string
+      info:
+        type: string
+      param:
+        enum:
+        - all
+        - cpu
+        - memory
+        - load
+        - io
+        - network
+        type: string
+      startTime:
+        type: string
+    required:
+    - param
+    type: object
+  dto.MysqlDBCreate:
+    properties:
+      database:
+        type: string
+      description:
+        type: string
+      format:
+        enum:
+        - utf8mb4
+        - utf8
+        - gbk
+        - big5
+        type: string
+      from:
+        enum:
+        - local
+        - remote
+        type: string
+      name:
+        type: string
+      password:
+        type: string
+      permission:
+        type: string
+      username:
+        type: string
+    required:
+    - database
+    - format
+    - from
+    - name
+    - password
+    - permission
+    - username
+    type: object
+  dto.MysqlDBDelete:
+    properties:
+      database:
+        type: string
+      deleteBackup:
+        type: boolean
+      forceDelete:
+        type: boolean
+      id:
+        type: integer
+      type:
+        enum:
+        - mysql
+        - mariadb
+        type: string
+    required:
+    - database
+    - id
+    - type
+    type: object
+  dto.MysqlDBDeleteCheck:
+    properties:
+      database:
+        type: string
+      id:
+        type: integer
+      type:
+        enum:
+        - mysql
+        - mariadb
+        type: string
+    required:
+    - database
+    - id
+    - type
+    type: object
+  dto.MysqlDBSearch:
+    properties:
+      database:
+        type: string
+      info:
+        type: string
+      order:
+        enum:
+        - "null"
+        - ascending
+        - descending
+        type: string
+      orderBy:
+        enum:
+        - name
+        - created_at
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+    required:
+    - database
+    - order
+    - orderBy
+    - page
+    - pageSize
+    type: object
+  dto.MysqlLoadDB:
+    properties:
+      database:
+        type: string
+      from:
+        enum:
+        - local
+        - remote
+        type: string
+      type:
+        enum:
+        - mysql
+        - mariadb
+        type: string
+    required:
+    - database
+    - from
+    - type
+    type: object
+  dto.MysqlOption:
+    properties:
+      database:
+        type: string
+      from:
+        type: string
+      id:
+        type: integer
+      name:
+        type: string
+      type:
+        type: string
+    type: object
+  dto.MysqlStatus:
+    properties:
+      Aborted_clients:
+        type: string
+      Aborted_connects:
+        type: string
+      Bytes_received:
+        type: string
+      Bytes_sent:
+        type: string
+      Com_commit:
+        type: string
+      Com_rollback:
+        type: string
+      Connections:
+        type: string
+      Created_tmp_disk_tables:
+        type: string
+      Created_tmp_tables:
+        type: string
+      File:
+        type: string
+      Innodb_buffer_pool_pages_dirty:
+        type: string
+      Innodb_buffer_pool_read_requests:
+        type: string
+      Innodb_buffer_pool_reads:
+        type: string
+      Key_read_requests:
+        type: string
+      Key_reads:
+        type: string
+      Key_write_requests:
+        type: string
+      Key_writes:
+        type: string
+      Max_used_connections:
+        type: string
+      Open_tables:
+        type: string
+      Opened_files:
+        type: string
+      Opened_tables:
+        type: string
+      Position:
+        type: string
+      Qcache_hits:
+        type: string
+      Qcache_inserts:
+        type: string
+      Questions:
+        type: string
+      Run:
+        type: string
+      Select_full_join:
+        type: string
+      Select_range_check:
+        type: string
+      Sort_merge_passes:
+        type: string
+      Table_locks_waited:
+        type: string
+      Threads_cached:
+        type: string
+      Threads_connected:
+        type: string
+      Threads_created:
+        type: string
+      Threads_running:
+        type: string
+      Uptime:
+        type: string
+    type: object
+  dto.MysqlVariables:
+    properties:
+      binlog_cache_size:
+        type: string
+      innodb_buffer_pool_size:
+        type: string
+      innodb_log_buffer_size:
+        type: string
+      join_buffer_size:
+        type: string
+      key_buffer_size:
+        type: string
+      long_query_time:
+        type: string
+      max_connections:
+        type: string
+      max_heap_table_size:
+        type: string
+      query_cache_size:
+        type: string
+      query_cache_type:
+        type: string
+      read_buffer_size:
+        type: string
+      read_rnd_buffer_size:
+        type: string
+      slow_query_log:
+        type: string
+      sort_buffer_size:
+        type: string
+      table_open_cache:
+        type: string
+      thread_cache_size:
+        type: string
+      thread_stack:
+        type: string
+      tmp_table_size:
+        type: string
+    type: object
+  dto.MysqlVariablesUpdate:
+    properties:
+      database:
+        type: string
+      type:
+        enum:
+        - mysql
+        - mariadb
+        type: string
+      variables:
+        items:
+          $ref: '#/definitions/dto.MysqlVariablesUpdateHelper'
+        type: array
+    required:
+    - database
+    - type
+    type: object
+  dto.MysqlVariablesUpdateHelper:
+    properties:
+      param:
+        type: string
+      value: {}
+    type: object
+  dto.NetworkCreate:
+    properties:
+      auxAddress:
+        items:
+          $ref: '#/definitions/dto.SettingUpdate'
+        type: array
+      auxAddressV6:
+        items:
+          $ref: '#/definitions/dto.SettingUpdate'
+        type: array
+      driver:
+        type: string
+      gateway:
+        type: string
+      gatewayV6:
+        type: string
+      ipRange:
+        type: string
+      ipRangeV6:
+        type: string
+      ipv4:
+        type: boolean
+      ipv6:
+        type: boolean
+      labels:
+        items:
+          type: string
+        type: array
+      name:
+        type: string
+      options:
+        items:
+          type: string
+        type: array
+      subnet:
+        type: string
+      subnetV6:
+        type: string
+    required:
+    - driver
+    - name
+    type: object
+  dto.NginxKey:
+    enum:
+    - index
+    - limit-conn
+    - ssl
+    - cache
+    - http-per
+    - proxy-cache
+    type: string
+    x-enum-varnames:
+    - Index
+    - LimitConn
+    - SSL
+    - CACHE
+    - HttpPer
+    - ProxyCache
+  dto.OneDriveInfo:
+    properties:
+      client_id:
+        type: string
+      client_secret:
+        type: string
+      redirect_uri:
+        type: string
+    type: object
+  dto.Operate:
+    properties:
+      operation:
+        type: string
+    required:
+    - operation
+    type: object
+  dto.OperateByID:
+    properties:
+      id:
+        type: integer
+    required:
+    - id
+    type: object
+  dto.OperationWithName:
+    properties:
+      name:
+        type: string
+    required:
+    - name
+    type: object
+  dto.OperationWithNameAndType:
+    properties:
+      name:
+        type: string
+      type:
+        type: string
+    required:
+    - type
+    type: object
+  dto.Options:
+    properties:
+      option:
+        type: string
+    type: object
+  dto.OsInfo:
+    properties:
+      diskSize:
+        type: integer
+      kernelArch:
+        type: string
+      kernelVersion:
+        type: string
+      os:
+        type: string
+      platform:
+        type: string
+      platformFamily:
+        type: string
+    type: object
+  dto.PageContainer:
+    properties:
+      excludeAppStore:
+        type: boolean
+      filters:
+        type: string
+      name:
+        type: string
+      order:
+        enum:
+        - "null"
+        - ascending
+        - descending
+        type: string
+      orderBy:
+        enum:
+        - name
+        - state
+        - created_at
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      state:
+        enum:
+        - all
+        - created
+        - running
+        - paused
+        - restarting
+        - removing
+        - exited
+        - dead
+        type: string
+    required:
+    - order
+    - orderBy
+    - page
+    - pageSize
+    - state
+    type: object
+  dto.PageCronjob:
+    properties:
+      info:
+        type: string
+      order:
+        enum:
+        - "null"
+        - ascending
+        - descending
+        type: string
+      orderBy:
+        enum:
+        - name
+        - status
+        - created_at
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+    required:
+    - order
+    - orderBy
+    - page
+    - pageSize
+    type: object
+  dto.PageInfo:
+    properties:
+      page:
+        type: integer
+      pageSize:
+        type: integer
+    required:
+    - page
+    - pageSize
+    type: object
+  dto.PageResult:
+    properties:
+      items: {}
+      total:
+        type: integer
+    type: object
+  dto.PasswordUpdate:
+    properties:
+      newPassword:
+        type: string
+      oldPassword:
+        type: string
+    required:
+    - newPassword
+    - oldPassword
+    type: object
+  dto.PortHelper:
+    properties:
+      containerPort:
+        type: string
+      hostIP:
+        type: string
+      hostPort:
+        type: string
+      protocol:
+        type: string
+    type: object
+  dto.PortRuleOperate:
+    properties:
+      address:
+        type: string
+      description:
+        type: string
+      operation:
+        enum:
+        - add
+        - remove
+        type: string
+      port:
+        type: string
+      protocol:
+        enum:
+        - tcp
+        - udp
+        - tcp/udp
+        type: string
+      strategy:
+        enum:
+        - accept
+        - drop
+        type: string
+    required:
+    - operation
+    - port
+    - protocol
+    - strategy
+    type: object
+  dto.PortRuleUpdate:
+    properties:
+      newRule:
+        $ref: '#/definitions/dto.PortRuleOperate'
+      oldRule:
+        $ref: '#/definitions/dto.PortRuleOperate'
+    type: object
+  dto.PortUpdate:
+    properties:
+      serverPort:
+        maximum: 65535
+        minimum: 1
+        type: integer
+    required:
+    - serverPort
+    type: object
+  dto.PostgresqlBindUser:
+    properties:
+      database:
+        type: string
+      name:
+        type: string
+      password:
+        type: string
+      superUser:
+        type: boolean
+      username:
+        type: string
+    required:
+    - database
+    - name
+    - password
+    - username
+    type: object
+  dto.PostgresqlDBCreate:
+    properties:
+      database:
+        type: string
+      description:
+        type: string
+      format:
+        type: string
+      from:
+        enum:
+        - local
+        - remote
+        type: string
+      name:
+        type: string
+      password:
+        type: string
+      superUser:
+        type: boolean
+      username:
+        type: string
+    required:
+    - database
+    - from
+    - name
+    - password
+    - username
+    type: object
+  dto.PostgresqlDBDelete:
+    properties:
+      database:
+        type: string
+      deleteBackup:
+        type: boolean
+      forceDelete:
+        type: boolean
+      id:
+        type: integer
+      type:
+        enum:
+        - postgresql
+        type: string
+    required:
+    - database
+    - id
+    - type
+    type: object
+  dto.PostgresqlDBDeleteCheck:
+    properties:
+      database:
+        type: string
+      id:
+        type: integer
+      type:
+        enum:
+        - postgresql
+        type: string
+    required:
+    - database
+    - id
+    - type
+    type: object
+  dto.PostgresqlDBSearch:
+    properties:
+      database:
+        type: string
+      info:
+        type: string
+      order:
+        enum:
+        - "null"
+        - ascending
+        - descending
+        type: string
+      orderBy:
+        enum:
+        - name
+        - created_at
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+    required:
+    - database
+    - order
+    - orderBy
+    - page
+    - pageSize
+    type: object
+  dto.PostgresqlLoadDB:
+    properties:
+      database:
+        type: string
+      from:
+        enum:
+        - local
+        - remote
+        type: string
+      type:
+        enum:
+        - postgresql
+        type: string
+    required:
+    - database
+    - from
+    - type
+    type: object
+  dto.ProxyUpdate:
+    properties:
+      proxyPasswd:
+        type: string
+      proxyPasswdKeep:
+        type: string
+      proxyPort:
+        type: string
+      proxyType:
+        type: string
+      proxyUrl:
+        type: string
+      proxyUser:
+        type: string
+    type: object
+  dto.RecordSearch:
+    properties:
+      detailName:
+        type: string
+      name:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      type:
+        type: string
+    required:
+    - page
+    - pageSize
+    - type
+    type: object
+  dto.RecordSearchByCronjob:
+    properties:
+      cronjobID:
+        type: integer
+      page:
+        type: integer
+      pageSize:
+        type: integer
+    required:
+    - cronjobID
+    - page
+    - pageSize
+    type: object
+  dto.RedisCommand:
+    properties:
+      command:
+        type: string
+      id:
+        type: integer
+      name:
+        type: string
+    type: object
+  dto.RedisConf:
+    properties:
+      containerName:
+        type: string
+      database:
+        type: string
+      maxclients:
+        type: string
+      maxmemory:
+        type: string
+      name:
+        type: string
+      port:
+        type: integer
+      requirepass:
+        type: string
+      timeout:
+        type: string
+    required:
+    - database
+    type: object
+  dto.RedisConfPersistenceUpdate:
+    properties:
+      appendfsync:
+        type: string
+      appendonly:
+        type: string
+      database:
+        type: string
+      save:
+        type: string
+      type:
+        enum:
+        - aof
+        - rbd
+        type: string
+    required:
+    - database
+    - type
+    type: object
+  dto.RedisConfUpdate:
+    properties:
+      database:
+        type: string
+      maxclients:
+        type: string
+      maxmemory:
+        type: string
+      timeout:
+        type: string
+    required:
+    - database
+    type: object
+  dto.RedisPersistence:
+    properties:
+      appendfsync:
+        type: string
+      appendonly:
+        type: string
+      database:
+        type: string
+      save:
+        type: string
+    required:
+    - database
+    type: object
+  dto.RedisStatus:
+    properties:
+      connected_clients:
+        type: string
+      database:
+        type: string
+      instantaneous_ops_per_sec:
+        type: string
+      keyspace_hits:
+        type: string
+      keyspace_misses:
+        type: string
+      latest_fork_usec:
+        type: string
+      mem_fragmentation_ratio:
+        type: string
+      tcp_port:
+        type: string
+      total_commands_processed:
+        type: string
+      total_connections_received:
+        type: string
+      uptime_in_days:
+        type: string
+      used_memory:
+        type: string
+      used_memory_peak:
+        type: string
+      used_memory_rss:
+        type: string
+    required:
+    - database
+    type: object
+  dto.ResourceLimit:
+    properties:
+      cpu:
+        type: integer
+      memory:
+        type: integer
+    type: object
+  dto.RuleSearch:
+    properties:
+      info:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      status:
+        type: string
+      strategy:
+        type: string
+      type:
+        type: string
+    required:
+    - page
+    - pageSize
+    - type
+    type: object
+  dto.SSHConf:
+    properties:
+      file:
+        type: string
+    type: object
+  dto.SSHHistory:
+    properties:
+      address:
+        type: string
+      area:
+        type: string
+      authMode:
+        type: string
+      date:
+        type: string
+      dateStr:
+        type: string
+      message:
+        type: string
+      port:
+        type: string
+      status:
+        type: string
+      user:
+        type: string
+    type: object
+  dto.SSHInfo:
+    properties:
+      autoStart:
+        type: boolean
+      listenAddress:
+        type: string
+      message:
+        type: string
+      passwordAuthentication:
+        type: string
+      permitRootLogin:
+        type: string
+      port:
+        type: string
+      pubkeyAuthentication:
+        type: string
+      status:
+        type: string
+      useDNS:
+        type: string
+    type: object
+  dto.SSHLog:
+    properties:
+      failedCount:
+        type: integer
+      logs:
+        items:
+          $ref: '#/definitions/dto.SSHHistory'
+        type: array
+      successfulCount:
+        type: integer
+      totalCount:
+        type: integer
+    type: object
+  dto.SSHUpdate:
+    properties:
+      key:
+        type: string
+      newValue:
+        type: string
+      oldValue:
+        type: string
+    required:
+    - key
+    type: object
+  dto.SSLUpdate:
+    properties:
+      cert:
+        type: string
+      domain:
+        type: string
+      key:
+        type: string
+      ssl:
+        enum:
+        - enable
+        - disable
+        type: string
+      sslID:
+        type: integer
+      sslType:
+        enum:
+        - self
+        - select
+        - import
+        - import-paste
+        - import-local
+        type: string
+    required:
+    - ssl
+    - sslType
+    type: object
+  dto.SearchForTree:
+    properties:
+      info:
+        type: string
+    type: object
+  dto.SearchHostWithPage:
+    properties:
+      groupID:
+        type: integer
+      info:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+    required:
+    - page
+    - pageSize
+    type: object
+  dto.SearchLgLogWithPage:
+    properties:
+      ip:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      status:
+        type: string
+    required:
+    - page
+    - pageSize
+    type: object
+  dto.SearchOpLogWithPage:
+    properties:
+      operation:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      source:
+        type: string
+      status:
+        type: string
+    required:
+    - page
+    - pageSize
+    type: object
+  dto.SearchRecord:
+    properties:
+      cronjobID:
+        type: integer
+      endTime:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      startTime:
+        type: string
+      status:
+        type: string
+    required:
+    - page
+    - pageSize
+    type: object
+  dto.SearchSSHLog:
+    properties:
+      Status:
+        enum:
+        - Success
+        - Failed
+        - All
+        type: string
+      info:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+    required:
+    - Status
+    - page
+    - pageSize
+    type: object
+  dto.SearchWithPage:
+    properties:
+      info:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+    required:
+    - page
+    - pageSize
+    type: object
+  dto.SettingInfo:
+    properties:
+      allowIPs:
+        type: string
+      appStoreLastModified:
+        type: string
+      appStoreSyncStatus:
+        type: string
+      appStoreVersion:
+        type: string
+      bindAddress:
+        type: string
+      bindDomain:
+        type: string
+      complexityVerification:
+        type: string
+      defaultNetwork:
+        type: string
+      developerMode:
+        type: string
+      dingVars:
+        type: string
+      dockerSockPath:
+        type: string
+      email:
+        type: string
+      emailVars:
+        type: string
+      expirationDays:
+        type: string
+      expirationTime:
+        type: string
+      fileRecycleBin:
+        type: string
+      ipv6:
+        type: string
+      language:
+        type: string
+      lastCleanData:
+        type: string
+      lastCleanSize:
+        type: string
+      lastCleanTime:
+        type: string
+      localTime:
+        type: string
+      menuTabs:
+        type: string
+      messageType:
+        type: string
+      mfaInterval:
+        type: string
+      mfaSecret:
+        type: string
+      mfaStatus:
+        type: string
+      monitorInterval:
+        type: string
+      monitorStatus:
+        type: string
+      monitorStoreDays:
+        type: string
+      noAuthSetting:
+        type: string
+      ntpSite:
+        type: string
+      panelName:
+        type: string
+      port:
+        type: string
+      proxyPasswd:
+        type: string
+      proxyPasswdKeep:
+        type: string
+      proxyPort:
+        type: string
+      proxyType:
+        type: string
+      proxyUrl:
+        type: string
+      proxyUser:
+        type: string
+      securityEntrance:
+        type: string
+      serverPort:
+        type: string
+      sessionTimeout:
+        type: string
+      snapshotIgnore:
+        type: string
+      ssl:
+        type: string
+      sslType:
+        type: string
+      systemIP:
+        type: string
+      systemVersion:
+        type: string
+      theme:
+        type: string
+      timeZone:
+        type: string
+      userName:
+        type: string
+      weChatVars:
+        type: string
+      xpackHideMenu:
+        type: string
+    type: object
+  dto.SettingUpdate:
+    properties:
+      key:
+        type: string
+      value:
+        type: string
+    required:
+    - key
+    type: object
+  dto.SnapshotBatchDelete:
+    properties:
+      deleteWithFile:
+        type: boolean
+      ids:
+        items:
+          type: integer
+        type: array
+    required:
+    - ids
+    type: object
+  dto.SnapshotCreate:
+    properties:
+      defaultDownload:
+        type: string
+      description:
+        maxLength: 256
+        type: string
+      from:
+        type: string
+      id:
+        type: integer
+      secret:
+        type: string
+    required:
+    - defaultDownload
+    - from
+    type: object
+  dto.SnapshotImport:
+    properties:
+      description:
+        maxLength: 256
+        type: string
+      from:
+        type: string
+      names:
+        items:
+          type: string
+        type: array
+    type: object
+  dto.SnapshotRecover:
+    properties:
+      id:
+        type: integer
+      isNew:
+        type: boolean
+      reDownload:
+        type: boolean
+      secret:
+        type: string
+    required:
+    - id
+    type: object
+  dto.SwapHelper:
+    properties:
+      isNew:
+        type: boolean
+      path:
+        type: string
+      size:
+        type: integer
+      used:
+        type: string
+    required:
+    - path
+    type: object
+  dto.TreeChild:
+    properties:
+      id:
+        type: integer
+      label:
+        type: string
+    type: object
+  dto.UpdateByFile:
+    properties:
+      file:
+        type: string
+    type: object
+  dto.UpdateByNameAndFile:
+    properties:
+      file:
+        type: string
+      name:
+        type: string
+    type: object
+  dto.UpdateDescription:
+    properties:
+      description:
+        maxLength: 256
+        type: string
+      id:
+        type: integer
+    required:
+    - id
+    type: object
+  dto.UpdateFirewallDescription:
+    properties:
+      address:
+        type: string
+      description:
+        type: string
+      port:
+        type: string
+      protocol:
+        type: string
+      strategy:
+        enum:
+        - accept
+        - drop
+        type: string
+      type:
+        type: string
+    required:
+    - strategy
+    type: object
+  dto.Upgrade:
+    properties:
+      version:
+        type: string
+    required:
+    - version
+    type: object
+  dto.UpgradeInfo:
+    properties:
+      latestVersion:
+        type: string
+      newVersion:
+        type: string
+      releaseNote:
+        type: string
+      testVersion:
+        type: string
+    type: object
+  dto.UserLoginInfo:
+    properties:
+      mfaStatus:
+        type: string
+      name:
+        type: string
+      token:
+        type: string
+    type: object
+  dto.VolumeCreate:
+    properties:
+      driver:
+        type: string
+      labels:
+        items:
+          type: string
+        type: array
+      name:
+        type: string
+      options:
+        items:
+          type: string
+        type: array
+    required:
+    - driver
+    - name
+    type: object
+  dto.VolumeHelper:
+    properties:
+      containerDir:
+        type: string
+      mode:
+        type: string
+      sourceDir:
+        type: string
+      type:
+        type: string
+    type: object
+  files.FileInfo:
+    properties:
+      content:
+        type: string
+      extension:
+        type: string
+      favoriteID:
+        type: integer
+      gid:
+        type: string
+      group:
+        type: string
+      isDetail:
+        type: boolean
+      isDir:
+        type: boolean
+      isHidden:
+        type: boolean
+      isSymlink:
+        type: boolean
+      itemTotal:
+        type: integer
+      items:
+        items:
+          $ref: '#/definitions/files.FileInfo'
+        type: array
+      linkPath:
+        type: string
+      mimeType:
+        type: string
+      modTime:
+        type: string
+      mode:
+        type: string
+      name:
+        type: string
+      path:
+        type: string
+      size:
+        type: integer
+      type:
+        type: string
+      uid:
+        type: string
+      updateTime:
+        type: string
+      user:
+        type: string
+    type: object
+  mfa.Otp:
+    properties:
+      qrImage:
+        type: string
+      secret:
+        type: string
+    type: object
+  model.App:
+    properties:
+      createdAt:
+        type: string
+      crossVersionUpdate:
+        type: boolean
+      document:
+        type: string
+      github:
+        type: string
+      icon:
+        type: string
+      id:
+        type: integer
+      key:
+        type: string
+      lastModified:
+        type: integer
+      limit:
+        type: integer
+      name:
+        type: string
+      readMe:
+        type: string
+      recommend:
+        type: integer
+      required:
+        type: string
+      resource:
+        type: string
+      shortDescEn:
+        type: string
+      shortDescZh:
+        type: string
+      status:
+        type: string
+      tags:
+        items:
+          type: string
+        type: array
+      type:
+        type: string
+      updatedAt:
+        type: string
+      website:
+        type: string
+    type: object
+  model.AppInstall:
+    properties:
+      app:
+        $ref: '#/definitions/model.App'
+      appDetailId:
+        type: integer
+      appId:
+        type: integer
+      containerName:
+        type: string
+      createdAt:
+        type: string
+      description:
+        type: string
+      dockerCompose:
+        type: string
+      env:
+        type: string
+      httpPort:
+        type: integer
+      httpsPort:
+        type: integer
+      id:
+        type: integer
+      message:
+        type: string
+      name:
+        type: string
+      param:
+        type: string
+      serviceName:
+        type: string
+      status:
+        type: string
+      updatedAt:
+        type: string
+      version:
+        type: string
+    type: object
+  model.Tag:
+    properties:
+      createdAt:
+        type: string
+      id:
+        type: integer
+      key:
+        type: string
+      name:
+        type: string
+      sort:
+        type: integer
+      updatedAt:
+        type: string
+    type: object
+  model.Website:
+    properties:
+      IPV6:
+        type: boolean
+      accessLog:
+        type: boolean
+      alias:
+        type: string
+      appInstallId:
+        type: integer
+      createdAt:
+        type: string
+      defaultServer:
+        type: boolean
+      domains:
+        items:
+          $ref: '#/definitions/model.WebsiteDomain'
+        type: array
+      errorLog:
+        type: boolean
+      expireDate:
+        type: string
+      ftpId:
+        type: integer
+      group:
+        type: string
+      httpConfig:
+        type: string
+      id:
+        type: integer
+      primaryDomain:
+        type: string
+      protocol:
+        type: string
+      proxy:
+        type: string
+      proxyType:
+        type: string
+      remark:
+        type: string
+      rewrite:
+        type: string
+      runtimeID:
+        type: integer
+      siteDir:
+        type: string
+      status:
+        type: string
+      type:
+        type: string
+      updatedAt:
+        type: string
+      user:
+        type: string
+      webSiteGroupId:
+        type: integer
+      webSiteSSL:
+        $ref: '#/definitions/model.WebsiteSSL'
+      webSiteSSLId:
+        type: integer
+    type: object
+  model.WebsiteAcmeAccount:
+    properties:
+      createdAt:
+        type: string
+      eabHmacKey:
+        type: string
+      eabKid:
+        type: string
+      email:
+        type: string
+      id:
+        type: integer
+      keyType:
+        type: string
+      type:
+        type: string
+      updatedAt:
+        type: string
+      url:
+        type: string
+    type: object
+  model.WebsiteDnsAccount:
+    properties:
+      createdAt:
+        type: string
+      id:
+        type: integer
+      name:
+        type: string
+      type:
+        type: string
+      updatedAt:
+        type: string
+    type: object
+  model.WebsiteDomain:
+    properties:
+      createdAt:
+        type: string
+      domain:
+        type: string
+      id:
+        type: integer
+      port:
+        type: integer
+      updatedAt:
+        type: string
+      websiteId:
+        type: integer
+    type: object
+  model.WebsiteSSL:
+    properties:
+      acmeAccount:
+        $ref: '#/definitions/model.WebsiteAcmeAccount'
+      acmeAccountId:
+        type: integer
+      autoRenew:
+        type: boolean
+      caId:
+        type: integer
+      certURL:
+        type: string
+      createdAt:
+        type: string
+      description:
+        type: string
+      dir:
+        type: string
+      disableCNAME:
+        type: boolean
+      dnsAccount:
+        $ref: '#/definitions/model.WebsiteDnsAccount'
+      dnsAccountId:
+        type: integer
+      domains:
+        type: string
+      execShell:
+        type: boolean
+      expireDate:
+        type: string
+      id:
+        type: integer
+      keyType:
+        type: string
+      message:
+        type: string
+      nameserver1:
+        type: string
+      nameserver2:
+        type: string
+      organization:
+        type: string
+      pem:
+        type: string
+      primaryDomain:
+        type: string
+      privateKey:
+        type: string
+      provider:
+        type: string
+      pushDir:
+        type: boolean
+      shell:
+        type: string
+      skipDNS:
+        type: boolean
+      startDate:
+        type: string
+      status:
+        type: string
+      type:
+        type: string
+      updatedAt:
+        type: string
+      websites:
+        items:
+          $ref: '#/definitions/model.Website'
+        type: array
+    type: object
+  request.AppInstallCreate:
+    properties:
+      advanced:
+        type: boolean
+      allowPort:
+        type: boolean
+      appDetailId:
+        type: integer
+      containerName:
+        type: string
+      cpuQuota:
+        type: number
+      dockerCompose:
+        type: string
+      editCompose:
+        type: boolean
+      hostMode:
+        type: boolean
+      memoryLimit:
+        type: number
+      memoryUnit:
+        type: string
+      name:
+        type: string
+      params:
+        additionalProperties: true
+        type: object
+      pullImage:
+        type: boolean
+      services:
+        additionalProperties:
+          type: string
+        type: object
+    required:
+    - appDetailId
+    - name
+    type: object
+  request.AppInstalledIgnoreUpgrade:
+    properties:
+      detailID:
+        type: integer
+      operate:
+        enum:
+        - cancel
+        - ignore
+        type: string
+    required:
+    - detailID
+    - operate
+    type: object
+  request.AppInstalledInfo:
+    properties:
+      key:
+        type: string
+      name:
+        type: string
+    required:
+    - key
+    type: object
+  request.AppInstalledOperate:
+    properties:
+      backup:
+        type: boolean
+      backupId:
+        type: integer
+      deleteBackup:
+        type: boolean
+      deleteDB:
+        type: boolean
+      detailId:
+        type: integer
+      dockerCompose:
+        type: string
+      forceDelete:
+        type: boolean
+      installId:
+        type: integer
+      operate:
+        type: string
+      pullImage:
+        type: boolean
+    required:
+    - installId
+    - operate
+    type: object
+  request.AppInstalledSearch:
+    properties:
+      all:
+        type: boolean
+      name:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      sync:
+        type: boolean
+      tags:
+        items:
+          type: string
+        type: array
+      type:
+        type: string
+      unused:
+        type: boolean
+      update:
+        type: boolean
+    required:
+    - page
+    - pageSize
+    type: object
+  request.AppInstalledUpdate:
+    properties:
+      advanced:
+        type: boolean
+      allowPort:
+        type: boolean
+      containerName:
+        type: string
+      cpuQuota:
+        type: number
+      dockerCompose:
+        type: string
+      editCompose:
+        type: boolean
+      hostMode:
+        type: boolean
+      installId:
+        type: integer
+      memoryLimit:
+        type: number
+      memoryUnit:
+        type: string
+      params:
+        additionalProperties: true
+        type: object
+      pullImage:
+        type: boolean
+    required:
+    - installId
+    - params
+    type: object
+  request.AppSearch:
+    properties:
+      name:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      recommend:
+        type: boolean
+      resource:
+        type: string
+      tags:
+        items:
+          type: string
+        type: array
+      type:
+        type: string
+    required:
+    - page
+    - pageSize
+    type: object
+  request.DirSizeReq:
+    properties:
+      path:
+        type: string
+    required:
+    - path
+    type: object
+  request.ExposedPort:
+    properties:
+      containerPort:
+        type: integer
+      hostPort:
+        type: integer
+    type: object
+  request.FavoriteCreate:
+    properties:
+      path:
+        type: string
+    required:
+    - path
+    type: object
+  request.FavoriteDelete:
+    properties:
+      id:
+        type: integer
+    required:
+    - id
+    type: object
+  request.FileBatchDelete:
+    properties:
+      isDir:
+        type: boolean
+      paths:
+        items:
+          type: string
+        type: array
+    required:
+    - paths
+    type: object
+  request.FileCompress:
+    properties:
+      dst:
+        type: string
+      files:
+        items:
+          type: string
+        type: array
+      name:
+        type: string
+      replace:
+        type: boolean
+      secret:
+        type: string
+      type:
+        type: string
+    required:
+    - dst
+    - files
+    - name
+    - type
+    type: object
+  request.FileContentReq:
+    properties:
+      isDetail:
+        type: boolean
+      path:
+        type: string
+    required:
+    - path
+    type: object
+  request.FileCreate:
+    properties:
+      content:
+        type: string
+      isDir:
+        type: boolean
+      isLink:
+        type: boolean
+      isSymlink:
+        type: boolean
+      linkPath:
+        type: string
+      mode:
+        type: integer
+      path:
+        type: string
+      sub:
+        type: boolean
+    required:
+    - path
+    type: object
+  request.FileDeCompress:
+    properties:
+      dst:
+        type: string
+      path:
+        type: string
+      secret:
+        type: string
+      type:
+        type: string
+    required:
+    - dst
+    - path
+    - type
+    type: object
+  request.FileDelete:
+    properties:
+      forceDelete:
+        type: boolean
+      isDir:
+        type: boolean
+      path:
+        type: string
+    required:
+    - path
+    type: object
+  request.FileDownload:
+    properties:
+      compress:
+        type: boolean
+      name:
+        type: string
+      paths:
+        items:
+          type: string
+        type: array
+      type:
+        type: string
+    required:
+    - name
+    - paths
+    - type
+    type: object
+  request.FileEdit:
+    properties:
+      content:
+        type: string
+      path:
+        type: string
+    required:
+    - path
+    type: object
+  request.FileMove:
+    properties:
+      cover:
+        type: boolean
+      name:
+        type: string
+      newPath:
+        type: string
+      oldPaths:
+        items:
+          type: string
+        type: array
+      type:
+        type: string
+    required:
+    - newPath
+    - oldPaths
+    - type
+    type: object
+  request.FileOption:
+    properties:
+      containSub:
+        type: boolean
+      dir:
+        type: boolean
+      expand:
+        type: boolean
+      isDetail:
+        type: boolean
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      path:
+        type: string
+      search:
+        type: string
+      showHidden:
+        type: boolean
+      sortBy:
+        type: string
+      sortOrder:
+        type: string
+    type: object
+  request.FilePathCheck:
+    properties:
+      path:
+        type: string
+    required:
+    - path
+    type: object
+  request.FileReadByLineReq:
+    properties:
+      ID:
+        type: integer
+      latest:
+        type: boolean
+      name:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      type:
+        type: string
+    required:
+    - page
+    - pageSize
+    - type
+    type: object
+  request.FileRename:
+    properties:
+      newName:
+        type: string
+      oldName:
+        type: string
+    required:
+    - newName
+    - oldName
+    type: object
+  request.FileRoleReq:
+    properties:
+      group:
+        type: string
+      mode:
+        type: integer
+      paths:
+        items:
+          type: string
+        type: array
+      sub:
+        type: boolean
+      user:
+        type: string
+    required:
+    - group
+    - mode
+    - paths
+    - user
+    type: object
+  request.FileRoleUpdate:
+    properties:
+      group:
+        type: string
+      path:
+        type: string
+      sub:
+        type: boolean
+      user:
+        type: string
+    required:
+    - group
+    - path
+    - user
+    type: object
+  request.FileWget:
+    properties:
+      ignoreCertificate:
+        type: boolean
+      name:
+        type: string
+      path:
+        type: string
+      url:
+        type: string
+    required:
+    - name
+    - path
+    - url
+    type: object
+  request.HostToolConfig:
+    properties:
+      content:
+        type: string
+      operate:
+        enum:
+        - get
+        - set
+        type: string
+      type:
+        enum:
+        - supervisord
+        type: string
+    required:
+    - type
+    type: object
+  request.HostToolCreate:
+    properties:
+      configPath:
+        type: string
+      serviceName:
+        type: string
+      type:
+        type: string
+    required:
+    - type
+    type: object
+  request.HostToolLogReq:
+    properties:
+      type:
+        enum:
+        - supervisord
+        type: string
+    required:
+    - type
+    type: object
+  request.HostToolReq:
+    properties:
+      operate:
+        enum:
+        - status
+        - restart
+        - start
+        - stop
+        type: string
+      type:
+        enum:
+        - supervisord
+        type: string
+    required:
+    - type
+    type: object
+  request.NewAppInstall:
+    properties:
+      advanced:
+        type: boolean
+      allowPort:
+        type: boolean
+      appDetailID:
+        type: integer
+      containerName:
+        type: string
+      cpuQuota:
+        type: number
+      dockerCompose:
+        type: string
+      editCompose:
+        type: boolean
+      hostMode:
+        type: boolean
+      memoryLimit:
+        type: number
+      memoryUnit:
+        type: string
+      name:
+        type: string
+      params:
+        additionalProperties: true
+        type: object
+      pullImage:
+        type: boolean
+    type: object
+  request.NginxAntiLeechUpdate:
+    properties:
+      blocked:
+        type: boolean
+      cache:
+        type: boolean
+      cacheTime:
+        type: integer
+      cacheUint:
+        type: string
+      enable:
+        type: boolean
+      extends:
+        type: string
+      logEnable:
+        type: boolean
+      noneRef:
+        type: boolean
+      return:
+        type: string
+      serverNames:
+        items:
+          type: string
+        type: array
+      websiteID:
+        type: integer
+    required:
+    - extends
+    - return
+    - websiteID
+    type: object
+  request.NginxAuthReq:
+    properties:
+      websiteID:
+        type: integer
+    required:
+    - websiteID
+    type: object
+  request.NginxAuthUpdate:
+    properties:
+      operate:
+        type: string
+      password:
+        type: string
+      remark:
+        type: string
+      username:
+        type: string
+      websiteID:
+        type: integer
+    required:
+    - operate
+    - websiteID
+    type: object
+  request.NginxCommonReq:
+    properties:
+      websiteID:
+        type: integer
+    required:
+    - websiteID
+    type: object
+  request.NginxConfigFileUpdate:
+    properties:
+      backup:
+        type: boolean
+      content:
+        type: string
+    required:
+    - content
+    type: object
+  request.NginxConfigUpdate:
+    properties:
+      operate:
+        enum:
+        - add
+        - update
+        - delete
+        type: string
+      params: {}
+      scope:
+        $ref: '#/definitions/dto.NginxKey'
+      websiteId:
+        type: integer
+    required:
+    - operate
+    type: object
+  request.NginxProxyUpdate:
+    properties:
+      content:
+        type: string
+      name:
+        type: string
+      websiteID:
+        type: integer
+    required:
+    - content
+    - name
+    - websiteID
+    type: object
+  request.NginxRedirectReq:
+    properties:
+      domains:
+        items:
+          type: string
+        type: array
+      enable:
+        type: boolean
+      keepPath:
+        type: boolean
+      name:
+        type: string
+      operate:
+        type: string
+      path:
+        type: string
+      redirect:
+        type: string
+      redirectRoot:
+        type: boolean
+      target:
+        type: string
+      type:
+        type: string
+      websiteID:
+        type: integer
+    required:
+    - name
+    - operate
+    - redirect
+    - target
+    - type
+    - websiteID
+    type: object
+  request.NginxRedirectUpdate:
+    properties:
+      content:
+        type: string
+      name:
+        type: string
+      websiteID:
+        type: integer
+    required:
+    - content
+    - name
+    - websiteID
+    type: object
+  request.NginxRewriteReq:
+    properties:
+      name:
+        type: string
+      websiteId:
+        type: integer
+    required:
+    - name
+    - websiteId
+    type: object
+  request.NginxRewriteUpdate:
+    properties:
+      content:
+        type: string
+      name:
+        type: string
+      websiteId:
+        type: integer
+    required:
+    - name
+    - websiteId
+    type: object
+  request.NginxScopeReq:
+    properties:
+      scope:
+        $ref: '#/definitions/dto.NginxKey'
+      websiteId:
+        type: integer
+    required:
+    - scope
+    type: object
+  request.NodeModuleReq:
+    properties:
+      ID:
+        type: integer
+    required:
+    - ID
+    type: object
+  request.NodePackageReq:
+    properties:
+      codeDir:
+        type: string
+    type: object
+  request.PHPExtensionsCreate:
+    properties:
+      extensions:
+        type: string
+      name:
+        type: string
+    required:
+    - extensions
+    - name
+    type: object
+  request.PHPExtensionsDelete:
+    properties:
+      id:
+        type: integer
+    required:
+    - id
+    type: object
+  request.PHPExtensionsSearch:
+    properties:
+      all:
+        type: boolean
+      page:
+        type: integer
+      pageSize:
+        type: integer
+    required:
+    - page
+    - pageSize
+    type: object
+  request.PHPExtensionsUpdate:
+    properties:
+      extensions:
+        type: string
+      id:
+        type: integer
+    required:
+    - extensions
+    - id
+    type: object
+  request.PortUpdate:
+    properties:
+      key:
+        type: string
+      name:
+        type: string
+      port:
+        type: integer
+    type: object
+  request.ProcessReq:
+    properties:
+      PID:
+        type: integer
+    required:
+    - PID
+    type: object
+  request.RecycleBinReduce:
+    properties:
+      from:
+        type: string
+      name:
+        type: string
+      rName:
+        type: string
+    required:
+    - from
+    - rName
+    type: object
+  request.RuntimeCreate:
+    properties:
+      appDetailId:
+        type: integer
+      clean:
+        type: boolean
+      codeDir:
+        type: string
+      exposedPorts:
+        items:
+          $ref: '#/definitions/request.ExposedPort'
+        type: array
+      image:
+        type: string
+      install:
+        type: boolean
+      name:
+        type: string
+      params:
+        additionalProperties: true
+        type: object
+      port:
+        type: integer
+      resource:
+        type: string
+      source:
+        type: string
+      type:
+        type: string
+      version:
+        type: string
+    type: object
+  request.RuntimeDelete:
+    properties:
+      forceDelete:
+        type: boolean
+      id:
+        type: integer
+    type: object
+  request.RuntimeOperate:
+    properties:
+      ID:
+        type: integer
+      operate:
+        type: string
+    type: object
+  request.RuntimeSearch:
+    properties:
+      name:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      status:
+        type: string
+      type:
+        type: string
+    required:
+    - page
+    - pageSize
+    type: object
+  request.RuntimeUpdate:
+    properties:
+      clean:
+        type: boolean
+      codeDir:
+        type: string
+      exposedPorts:
+        items:
+          $ref: '#/definitions/request.ExposedPort'
+        type: array
+      id:
+        type: integer
+      image:
+        type: string
+      install:
+        type: boolean
+      name:
+        type: string
+      params:
+        additionalProperties: true
+        type: object
+      port:
+        type: integer
+      rebuild:
+        type: boolean
+      source:
+        type: string
+      version:
+        type: string
+    type: object
+  request.SearchUploadWithPage:
+    properties:
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      path:
+        type: string
+    required:
+    - page
+    - pageSize
+    - path
+    type: object
+  request.SupervisorProcessConfig:
+    properties:
+      command:
+        type: string
+      dir:
+        type: string
+      name:
+        type: string
+      numprocs:
+        type: string
+      operate:
+        type: string
+      user:
+        type: string
+    type: object
+  request.SupervisorProcessFileReq:
+    properties:
+      content:
+        type: string
+      file:
+        enum:
+        - out.log
+        - err.log
+        - config
+        type: string
+      name:
+        type: string
+      operate:
+        enum:
+        - get
+        - clear
+        - update
+        type: string
+    required:
+    - file
+    - name
+    - operate
+    type: object
+  request.WebsiteAcmeAccountCreate:
+    properties:
+      eabHmacKey:
+        type: string
+      eabKid:
+        type: string
+      email:
+        type: string
+      keyType:
+        enum:
+        - P256
+        - P384
+        - "2048"
+        - "3072"
+        - "4096"
+        - "8192"
+        type: string
+      type:
+        enum:
+        - letsencrypt
+        - zerossl
+        - buypass
+        - google
+        type: string
+    required:
+    - email
+    - keyType
+    - type
+    type: object
+  request.WebsiteBatchDelReq:
+    properties:
+      ids:
+        items:
+          type: integer
+        type: array
+    required:
+    - ids
+    type: object
+  request.WebsiteCACreate:
+    properties:
+      city:
+        type: string
+      commonName:
+        type: string
+      country:
+        type: string
+      keyType:
+        enum:
+        - P256
+        - P384
+        - "2048"
+        - "3072"
+        - "4096"
+        - "8192"
+        type: string
+      name:
+        type: string
+      organization:
+        type: string
+      organizationUint:
+        type: string
+      province:
+        type: string
+    required:
+    - commonName
+    - country
+    - keyType
+    - name
+    - organization
+    type: object
+  request.WebsiteCAObtain:
+    properties:
+      autoRenew:
+        type: boolean
+      description:
+        type: string
+      dir:
+        type: string
+      domains:
+        type: string
+      execShell:
+        type: boolean
+      id:
+        type: integer
+      keyType:
+        enum:
+        - P256
+        - P384
+        - "2048"
+        - "3072"
+        - "4096"
+        - "8192"
+        type: string
+      pushDir:
+        type: boolean
+      renew:
+        type: boolean
+      shell:
+        type: string
+      sslID:
+        type: integer
+      time:
+        type: integer
+      unit:
+        type: string
+    required:
+    - domains
+    - id
+    - keyType
+    - time
+    - unit
+    type: object
+  request.WebsiteCASearch:
+    properties:
+      page:
+        type: integer
+      pageSize:
+        type: integer
+    required:
+    - page
+    - pageSize
+    type: object
+  request.WebsiteCommonReq:
+    properties:
+      id:
+        type: integer
+    required:
+    - id
+    type: object
+  request.WebsiteCreate:
+    properties:
+      IPV6:
+        type: boolean
+      alias:
+        type: string
+      appID:
+        type: integer
+      appInstall:
+        $ref: '#/definitions/request.NewAppInstall'
+      appInstallID:
+        type: integer
+      appType:
+        enum:
+        - new
+        - installed
+        type: string
+      ftpPassword:
+        type: string
+      ftpUser:
+        type: string
+      otherDomains:
+        type: string
+      port:
+        type: integer
+      primaryDomain:
+        type: string
+      proxy:
+        type: string
+      proxyType:
+        type: string
+      remark:
+        type: string
+      runtimeID:
+        type: integer
+      type:
+        type: string
+      webSiteGroupID:
+        type: integer
+    required:
+    - alias
+    - primaryDomain
+    - type
+    - webSiteGroupID
+    type: object
+  request.WebsiteDNSReq:
+    properties:
+      acmeAccountId:
+        type: integer
+      domains:
+        items:
+          type: string
+        type: array
+    required:
+    - acmeAccountId
+    - domains
+    type: object
+  request.WebsiteDefaultUpdate:
+    properties:
+      id:
+        type: integer
+    type: object
+  request.WebsiteDelete:
+    properties:
+      deleteApp:
+        type: boolean
+      deleteBackup:
+        type: boolean
+      forceDelete:
+        type: boolean
+      id:
+        type: integer
+    required:
+    - id
+    type: object
+  request.WebsiteDnsAccountCreate:
+    properties:
+      authorization:
+        additionalProperties:
+          type: string
+        type: object
+      name:
+        type: string
+      type:
+        type: string
+    required:
+    - authorization
+    - name
+    - type
+    type: object
+  request.WebsiteDnsAccountUpdate:
+    properties:
+      authorization:
+        additionalProperties:
+          type: string
+        type: object
+      id:
+        type: integer
+      name:
+        type: string
+      type:
+        type: string
+    required:
+    - authorization
+    - id
+    - name
+    - type
+    type: object
+  request.WebsiteDomainCreate:
+    properties:
+      domains:
+        type: string
+      websiteID:
+        type: integer
+    required:
+    - domains
+    - websiteID
+    type: object
+  request.WebsiteDomainDelete:
+    properties:
+      id:
+        type: integer
+    required:
+    - id
+    type: object
+  request.WebsiteHTTPSOp:
+    properties:
+      SSLProtocol:
+        items:
+          type: string
+        type: array
+      algorithm:
+        type: string
+      certificate:
+        type: string
+      certificatePath:
+        type: string
+      enable:
+        type: boolean
+      hsts:
+        type: boolean
+      httpConfig:
+        enum:
+        - HTTPSOnly
+        - HTTPAlso
+        - HTTPToHTTPS
+        type: string
+      importType:
+        type: string
+      privateKey:
+        type: string
+      privateKeyPath:
+        type: string
+      type:
+        enum:
+        - existed
+        - auto
+        - manual
+        type: string
+      websiteId:
+        type: integer
+      websiteSSLId:
+        type: integer
+    required:
+    - websiteId
+    type: object
+  request.WebsiteHtmlUpdate:
+    properties:
+      content:
+        type: string
+      type:
+        type: string
+    required:
+    - content
+    - type
+    type: object
+  request.WebsiteInstallCheckReq:
+    properties:
+      InstallIds:
+        items:
+          type: integer
+        type: array
+    type: object
+  request.WebsiteLogReq:
+    properties:
+      id:
+        type: integer
+      logType:
+        type: string
+      operate:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+    required:
+    - id
+    - logType
+    - operate
+    type: object
+  request.WebsiteNginxUpdate:
+    properties:
+      content:
+        type: string
+      id:
+        type: integer
+    required:
+    - content
+    - id
+    type: object
+  request.WebsiteOp:
+    properties:
+      id:
+        type: integer
+      operate:
+        type: string
+    required:
+    - id
+    type: object
+  request.WebsitePHPConfigUpdate:
+    properties:
+      disableFunctions:
+        items:
+          type: string
+        type: array
+      id:
+        type: integer
+      params:
+        additionalProperties:
+          type: string
+        type: object
+      scope:
+        type: string
+      uploadMaxSize:
+        type: string
+    required:
+    - id
+    - scope
+    type: object
+  request.WebsitePHPFileUpdate:
+    properties:
+      content:
+        type: string
+      id:
+        type: integer
+      type:
+        type: string
+    required:
+    - content
+    - id
+    - type
+    type: object
+  request.WebsitePHPVersionReq:
+    properties:
+      retainConfig:
+        type: boolean
+      runtimeID:
+        type: integer
+      websiteID:
+        type: integer
+    required:
+    - runtimeID
+    - websiteID
+    type: object
+  request.WebsiteProxyConfig:
+    properties:
+      cache:
+        type: boolean
+      cacheTime:
+        type: integer
+      cacheUnit:
+        type: string
+      content:
+        type: string
+      enable:
+        type: boolean
+      filePath:
+        type: string
+      id:
+        type: integer
+      match:
+        type: string
+      modifier:
+        type: string
+      name:
+        type: string
+      operate:
+        type: string
+      proxyHost:
+        type: string
+      proxyPass:
+        type: string
+      replaces:
+        additionalProperties:
+          type: string
+        type: object
+      sni:
+        type: boolean
+    required:
+    - id
+    - match
+    - name
+    - operate
+    - proxyHost
+    - proxyPass
+    type: object
+  request.WebsiteProxyReq:
+    properties:
+      id:
+        type: integer
+    required:
+    - id
+    type: object
+  request.WebsiteResourceReq:
+    properties:
+      id:
+        type: integer
+    required:
+    - id
+    type: object
+  request.WebsiteSSLApply:
+    properties:
+      ID:
+        type: integer
+      nameservers:
+        items:
+          type: string
+        type: array
+      skipDNSCheck:
+        type: boolean
+    required:
+    - ID
+    type: object
+  request.WebsiteSSLCreate:
+    properties:
+      acmeAccountId:
+        type: integer
+      apply:
+        type: boolean
+      autoRenew:
+        type: boolean
+      description:
+        type: string
+      dir:
+        type: string
+      disableCNAME:
+        type: boolean
+      dnsAccountId:
+        type: integer
+      execShell:
+        type: boolean
+      id:
+        type: integer
+      keyType:
+        type: string
+      nameserver1:
+        type: string
+      nameserver2:
+        type: string
+      otherDomains:
+        type: string
+      primaryDomain:
+        type: string
+      provider:
+        type: string
+      pushDir:
+        type: boolean
+      shell:
+        type: string
+      skipDNS:
+        type: boolean
+    required:
+    - acmeAccountId
+    - primaryDomain
+    - provider
+    type: object
+  request.WebsiteSSLSearch:
+    properties:
+      acmeAccountID:
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+    required:
+    - page
+    - pageSize
+    type: object
+  request.WebsiteSSLUpdate:
+    properties:
+      acmeAccountId:
+        type: integer
+      apply:
+        type: boolean
+      autoRenew:
+        type: boolean
+      description:
+        type: string
+      dir:
+        type: string
+      disableCNAME:
+        type: boolean
+      dnsAccountId:
+        type: integer
+      execShell:
+        type: boolean
+      id:
+        type: integer
+      keyType:
+        type: string
+      nameserver1:
+        type: string
+      nameserver2:
+        type: string
+      otherDomains:
+        type: string
+      primaryDomain:
+        type: string
+      provider:
+        type: string
+      pushDir:
+        type: boolean
+      shell:
+        type: string
+      skipDNS:
+        type: boolean
+    required:
+    - id
+    - primaryDomain
+    - provider
+    type: object
+  request.WebsiteSSLUpload:
+    properties:
+      certificate:
+        type: string
+      certificatePath:
+        type: string
+      description:
+        type: string
+      privateKey:
+        type: string
+      privateKeyPath:
+        type: string
+      sslID:
+        type: integer
+      type:
+        enum:
+        - paste
+        - local
+        type: string
+    required:
+    - type
+    type: object
+  request.WebsiteSearch:
+    properties:
+      name:
+        type: string
+      order:
+        enum:
+        - "null"
+        - ascending
+        - descending
+        type: string
+      orderBy:
+        enum:
+        - primary_domain
+        - type
+        - status
+        - created_at
+        - expire_date
+        type: string
+      page:
+        type: integer
+      pageSize:
+        type: integer
+      websiteGroupId:
+        type: integer
+    required:
+    - order
+    - orderBy
+    - page
+    - pageSize
+    type: object
+  request.WebsiteUpdate:
+    properties:
+      IPV6:
+        type: boolean
+      expireDate:
+        type: string
+      id:
+        type: integer
+      primaryDomain:
+        type: string
+      remark:
+        type: string
+      webSiteGroupID:
+        type: integer
+    required:
+    - id
+    - primaryDomain
+    type: object
+  request.WebsiteUpdateDir:
+    properties:
+      id:
+        type: integer
+      siteDir:
+        type: string
+    required:
+    - id
+    - siteDir
+    type: object
+  request.WebsiteUpdateDirPermission:
+    properties:
+      group:
+        type: string
+      id:
+        type: integer
+      user:
+        type: string
+    required:
+    - group
+    - id
+    - user
+    type: object
+  response.AppDTO:
+    properties:
+      createdAt:
+        type: string
+      crossVersionUpdate:
+        type: boolean
+      document:
+        type: string
+      github:
+        type: string
+      icon:
+        type: string
+      id:
+        type: integer
+      installed:
+        type: boolean
+      key:
+        type: string
+      lastModified:
+        type: integer
+      limit:
+        type: integer
+      name:
+        type: string
+      readMe:
+        type: string
+      recommend:
+        type: integer
+      required:
+        type: string
+      resource:
+        type: string
+      shortDescEn:
+        type: string
+      shortDescZh:
+        type: string
+      status:
+        type: string
+      tags:
+        items:
+          $ref: '#/definitions/model.Tag'
+        type: array
+      type:
+        type: string
+      updatedAt:
+        type: string
+      versions:
+        items:
+          type: string
+        type: array
+      website:
+        type: string
+    type: object
+  response.AppDetailDTO:
+    properties:
+      appId:
+        type: integer
+      createdAt:
+        type: string
+      dockerCompose:
+        type: string
+      downloadCallBackUrl:
+        type: string
+      downloadUrl:
+        type: string
+      enable:
+        type: boolean
+      hostMode:
+        type: boolean
+      id:
+        type: integer
+      ignoreUpgrade:
+        type: boolean
+      image:
+        type: string
+      lastModified:
+        type: integer
+      lastVersion:
+        type: string
+      params: {}
+      status:
+        type: string
+      update:
+        type: boolean
+      updatedAt:
+        type: string
+      version:
+        type: string
+    type: object
+  response.AppInstalledCheck:
+    properties:
+      app:
+        type: string
+      appInstallId:
+        type: integer
+      containerName:
+        type: string
+      createdAt:
+        type: string
+      httpPort:
+        type: integer
+      httpsPort:
+        type: integer
+      installPath:
+        type: string
+      isExist:
+        type: boolean
+      lastBackupAt:
+        type: string
+      name:
+        type: string
+      status:
+        type: string
+      version:
+        type: string
+    type: object
+  response.AppParam:
+    properties:
+      edit:
+        type: boolean
+      key:
+        type: string
+      labelEn:
+        type: string
+      labelZh:
+        type: string
+      multiple:
+        type: boolean
+      required:
+        type: boolean
+      rule:
+        type: string
+      showValue:
+        type: string
+      type:
+        type: string
+      value: {}
+      values: {}
+    type: object
+  response.AppService:
+    properties:
+      config: {}
+      from:
+        type: string
+      label:
+        type: string
+      value:
+        type: string
+    type: object
+  response.FileInfo:
+    properties:
+      content:
+        type: string
+      extension:
+        type: string
+      favoriteID:
+        type: integer
+      gid:
+        type: string
+      group:
+        type: string
+      isDetail:
+        type: boolean
+      isDir:
+        type: boolean
+      isHidden:
+        type: boolean
+      isSymlink:
+        type: boolean
+      itemTotal:
+        type: integer
+      items:
+        items:
+          $ref: '#/definitions/files.FileInfo'
+        type: array
+      linkPath:
+        type: string
+      mimeType:
+        type: string
+      modTime:
+        type: string
+      mode:
+        type: string
+      name:
+        type: string
+      path:
+        type: string
+      size:
+        type: integer
+      type:
+        type: string
+      uid:
+        type: string
+      updateTime:
+        type: string
+      user:
+        type: string
+    type: object
+  response.FileTree:
+    properties:
+      children:
+        items:
+          $ref: '#/definitions/response.FileTree'
+        type: array
+      extension:
+        type: string
+      id:
+        type: string
+      isDir:
+        type: boolean
+      name:
+        type: string
+      path:
+        type: string
+    type: object
+  response.IgnoredApp:
+    properties:
+      detailID:
+        type: integer
+      icon:
+        type: string
+      name:
+        type: string
+      version:
+        type: string
+    type: object
+  response.NginxParam:
+    properties:
+      name:
+        type: string
+      params:
+        items:
+          type: string
+        type: array
+    type: object
+  response.NginxStatus:
+    properties:
+      accepts:
+        type: string
+      active:
+        type: string
+      handled:
+        type: string
+      reading:
+        type: string
+      requests:
+        type: string
+      waiting:
+        type: string
+      writing:
+        type: string
+    type: object
+  response.PHPConfig:
+    properties:
+      disableFunctions:
+        items:
+          type: string
+        type: array
+      params:
+        additionalProperties:
+          type: string
+        type: object
+      uploadMaxSize:
+        type: string
+    type: object
+  response.PHPExtensionsDTO:
+    properties:
+      createdAt:
+        type: string
+      extensions:
+        type: string
+      id:
+        type: integer
+      name:
+        type: string
+      updatedAt:
+        type: string
+    type: object
+  response.WebsiteAcmeAccountDTO:
+    properties:
+      createdAt:
+        type: string
+      eabHmacKey:
+        type: string
+      eabKid:
+        type: string
+      email:
+        type: string
+      id:
+        type: integer
+      keyType:
+        type: string
+      type:
+        type: string
+      updatedAt:
+        type: string
+      url:
+        type: string
+    type: object
+  response.WebsiteCADTO:
+    properties:
+      city:
+        type: string
+      commonName:
+        type: string
+      country:
+        type: string
+      createdAt:
+        type: string
+      csr:
+        type: string
+      id:
+        type: integer
+      keyType:
+        type: string
+      name:
+        type: string
+      organization:
+        type: string
+      organizationUint:
+        type: string
+      privateKey:
+        type: string
+      province:
+        type: string
+      updatedAt:
+        type: string
+    type: object
+  response.WebsiteDNSRes:
+    properties:
+      domain:
+        type: string
+      err:
+        type: string
+      resolve:
+        type: string
+      value:
+        type: string
+    type: object
+  response.WebsiteDTO:
+    properties:
+      IPV6:
+        type: boolean
+      accessLog:
+        type: boolean
+      accessLogPath:
+        type: string
+      alias:
+        type: string
+      appInstallId:
+        type: integer
+      appName:
+        type: string
+      createdAt:
+        type: string
+      defaultServer:
+        type: boolean
+      domains:
+        items:
+          $ref: '#/definitions/model.WebsiteDomain'
+        type: array
+      errorLog:
+        type: boolean
+      errorLogPath:
+        type: string
+      expireDate:
+        type: string
+      ftpId:
+        type: integer
+      group:
+        type: string
+      httpConfig:
+        type: string
+      id:
+        type: integer
+      primaryDomain:
+        type: string
+      protocol:
+        type: string
+      proxy:
+        type: string
+      proxyType:
+        type: string
+      remark:
+        type: string
+      rewrite:
+        type: string
+      runtimeID:
+        type: integer
+      runtimeName:
+        type: string
+      siteDir:
+        type: string
+      sitePath:
+        type: string
+      status:
+        type: string
+      type:
+        type: string
+      updatedAt:
+        type: string
+      user:
+        type: string
+      webSiteGroupId:
+        type: integer
+      webSiteSSL:
+        $ref: '#/definitions/model.WebsiteSSL'
+      webSiteSSLId:
+        type: integer
+    type: object
+  response.WebsiteHTTPS:
+    properties:
+      SSL:
+        $ref: '#/definitions/model.WebsiteSSL'
+      SSLProtocol:
+        items:
+          type: string
+        type: array
+      algorithm:
+        type: string
+      enable:
+        type: boolean
+      hsts:
+        type: boolean
+      httpConfig:
+        type: string
+    type: object
+  response.WebsiteLog:
+    properties:
+      content:
+        type: string
+      enable:
+        type: boolean
+      end:
+        type: boolean
+      path:
+        type: string
+    type: object
+  response.WebsiteNginxConfig:
+    properties:
+      enable:
+        type: boolean
+      params:
+        items:
+          $ref: '#/definitions/response.NginxParam'
+        type: array
+    type: object
+  response.WebsitePreInstallCheck:
+    properties:
+      appName:
+        type: string
+      name:
+        type: string
+      status:
+        type: string
+      version:
+        type: string
+    type: object
+host: localhost
+info:
+  contact: {}
+  description: 开源Linux面板
+  license:
+    name: Apache 2.0
+    url: http://www.apache.org/licenses/LICENSE-2.0.html
+  termsOfService: http://swagger.io/terms/
+  title: 1Panel
+  version: "1.0"
+paths:
+  /apps/:key:
+    get:
+      consumes:
+      - application/json
+      description: 通过 key 获取应用信息
+      parameters:
+      - description: app key
+        in: path
+        name: key
+        required: true
+        type: string
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.AppDTO'
+      security:
+      - ApiKeyAuth: []
+      summary: Search app by key
+      tags:
+      - App
+  /apps/checkupdate:
+    get:
+      description: 获取应用更新版本
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get app list update
+      tags:
+      - App
+  /apps/detail/:appId/:version/:type:
+    get:
+      consumes:
+      - application/json
+      description: 通过 appid 获取应用详情
+      parameters:
+      - description: app id
+        in: path
+        name: appId
+        required: true
+        type: integer
+      - description: app 版本
+        in: path
+        name: version
+        required: true
+        type: string
+      - description: app 类型
+        in: path
+        name: version
+        required: true
+        type: string
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.AppDetailDTO'
+      security:
+      - ApiKeyAuth: []
+      summary: Search app detail by appid
+      tags:
+      - App
+  /apps/details/:id:
+    get:
+      consumes:
+      - application/json
+      description: 通过 id 获取应用详情
+      parameters:
+      - description: id
+        in: path
+        name: appId
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.AppDetailDTO'
+      security:
+      - ApiKeyAuth: []
+      summary: Get app detail by id
+      tags:
+      - App
+  /apps/ignored:
+    get:
+      consumes:
+      - application/json
+      description: 获取忽略的应用版本
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.IgnoredApp'
+      security:
+      - ApiKeyAuth: []
+      summary: Get Ignore App
+      tags:
+      - App
+  /apps/install:
+    post:
+      consumes:
+      - application/json
+      description: 安装应用
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.AppInstallCreate'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/model.AppInstall'
+      security:
+      - ApiKeyAuth: []
+      summary: Install app
+      tags:
+      - App
+      x-panel-log:
+        BeforeFunctions:
+        - db: app_installs
+          input_column: name
+          input_value: name
+          isList: false
+          output_column: app_id
+          output_value: appId
+        - db: apps
+          info: appId
+          isList: false
+          output_column: key
+          output_value: appKey
+        bodyKeys:
+        - name
+        formatEN: Install app [appKey]-[name]
+        formatZH: 安装应用 [appKey]-[name]
+        paramKeys: []
+  /apps/installed/check:
+    post:
+      consumes:
+      - application/json
+      description: 检查应用安装情况
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.AppInstalledInfo'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.AppInstalledCheck'
+      security:
+      - ApiKeyAuth: []
+      summary: Check app installed
+      tags:
+      - App
+  /apps/installed/conf:
+    post:
+      consumes:
+      - application/json
+      description: 通过 key 获取应用默认配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithNameAndType'
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: string
+      security:
+      - ApiKeyAuth: []
+      summary: Search default config by key
+      tags:
+      - App
+  /apps/installed/conninfo/:key:
+    get:
+      consumes:
+      - application/json
+      description: 获取应用连接信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithNameAndType'
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: string
+      security:
+      - ApiKeyAuth: []
+      summary: Search app password by key
+      tags:
+      - App
+  /apps/installed/delete/check/:appInstallId:
+    get:
+      consumes:
+      - application/json
+      description: 删除前检查
+      parameters:
+      - description: App install id
+        in: path
+        name: appInstallId
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.AppResource'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Check before delete
+      tags:
+      - App
+  /apps/installed/ignore:
+    post:
+      consumes:
+      - application/json
+      description: 忽略应用升级版本
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.AppInstalledIgnoreUpgrade'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: ignore App Update
+      tags:
+      - App
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - installId
+        formatEN: Application param update [installId]
+        formatZH: 忽略应用 [installId] 版本升级
+        paramKeys: []
+  /apps/installed/list:
+    get:
+      consumes:
+      - application/json
+      description: 获取已安装应用列表
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.AppInstallInfo'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List app installed
+      tags:
+      - App
+  /apps/installed/loadport:
+    post:
+      consumes:
+      - application/json
+      description: 获取应用端口
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithNameAndType'
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: integer
+      security:
+      - ApiKeyAuth: []
+      summary: Search app port by key
+      tags:
+      - App
+  /apps/installed/op:
+    post:
+      consumes:
+      - application/json
+      description: 操作已安装应用
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.AppInstalledOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Operate installed app
+      tags:
+      - App
+      x-panel-log:
+        BeforeFunctions:
+        - db: app_installs
+          input_column: id
+          input_value: installId
+          isList: false
+          output_column: app_id
+          output_value: appId
+        - db: app_installs
+          input_column: id
+          input_value: installId
+          isList: false
+          output_column: name
+          output_value: appName
+        - db: apps
+          input_column: id
+          input_value: appId
+          isList: false
+          output_column: key
+          output_value: appKey
+        bodyKeys:
+        - installId
+        - operate
+        formatEN: '[operate] App [appKey][appName]'
+        formatZH: '[operate] 应用 [appKey][appName]'
+        paramKeys: []
+  /apps/installed/params/:appInstallId:
+    get:
+      consumes:
+      - application/json
+      description: 通过 install id 获取应用参数
+      parameters:
+      - description: request
+        in: path
+        name: appInstallId
+        required: true
+        type: string
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.AppParam'
+      security:
+      - ApiKeyAuth: []
+      summary: Search params by appInstallId
+      tags:
+      - App
+  /apps/installed/params/update:
+    post:
+      consumes:
+      - application/json
+      description: 修改应用参数
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.AppInstalledUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Change app params
+      tags:
+      - App
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - installId
+        formatEN: Application param update [installId]
+        formatZH: 应用参数修改 [installId]
+        paramKeys: []
+  /apps/installed/port/change:
+    post:
+      consumes:
+      - application/json
+      description: 修改应用端口
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.PortUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Change app port
+      tags:
+      - App
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - key
+        - name
+        - port
+        formatEN: Application port update [key]-[name] => [port]
+        formatZH: 应用端口修改 [key]-[name] => [port]
+        paramKeys: []
+  /apps/installed/search:
+    post:
+      consumes:
+      - application/json
+      description: 分页获取已安装应用列表
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.AppInstalledSearch'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Page app installed
+      tags:
+      - App
+  /apps/installed/sync:
+    post:
+      description: 同步已安装应用列表
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Sync app installed
+      tags:
+      - App
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: Sync the list of installed apps
+        formatZH: 同步已安装应用列表
+        paramKeys: []
+  /apps/installed/update/versions:
+    post:
+      consumes:
+      - application/json
+      description: 通过 install id 获取应用更新版本
+      parameters:
+      - description: request
+        in: path
+        name: appInstallId
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.AppVersion'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Search app update version by install id
+      tags:
+      - App
+  /apps/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取应用列表
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.AppSearch'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: List apps
+      tags:
+      - App
+  /apps/services/:key:
+    get:
+      consumes:
+      - application/json
+      description: 通过 key 获取应用 service
+      parameters:
+      - description: request
+        in: path
+        name: key
+        required: true
+        type: string
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/response.AppService'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Search app service by key
+      tags:
+      - App
+  /apps/sync:
+    post:
+      description: 同步应用列表
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Sync app list
+      tags:
+      - App
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: App store synchronization
+        formatZH: 应用商店同步
+        paramKeys: []
+  /auth/captcha:
+    get:
+      description: 加载验证码
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.CaptchaResponse'
+      summary: Load captcha
+      tags:
+      - Auth
+  /auth/demo:
+    get:
+      description: 判断是否为demo环境
+      responses:
+        "200":
+          description: OK
+      summary: Check System isDemo
+      tags:
+      - Auth
+  /auth/issafety:
+    get:
+      description: 获取系统安全登录状态
+      responses:
+        "200":
+          description: OK
+      summary: Load safety status
+      tags:
+      - Auth
+  /auth/language:
+    get:
+      description: 获取系统语言设置
+      responses:
+        "200":
+          description: OK
+      summary: Load System Language
+      tags:
+      - Auth
+  /auth/login:
+    post:
+      consumes:
+      - application/json
+      description: 用户登录
+      parameters:
+      - description: 安全入口 base64 加密串
+        in: header
+        name: EntranceCode
+        required: true
+        type: string
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.Login'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.UserLoginInfo'
+      summary: User login
+      tags:
+      - Auth
+  /auth/logout:
+    post:
+      description: 用户登出
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: User logout
+      tags:
+      - Auth
+  /auth/mfalogin:
+    post:
+      consumes:
+      - application/json
+      description: 用户 mfa 登录
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.MFALogin'
+      responses:
+        "200":
+          description: OK
+          headers:
+            EntranceCode:
+              description: 安全入口
+              type: string
+          schema:
+            $ref: '#/definitions/dto.UserLoginInfo'
+      summary: User login with mfa
+      tags:
+      - Auth
+  /containers:
+    post:
+      consumes:
+      - application/json
+      description: 创建容器
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ContainerOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create container
+      tags:
+      - Container
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - image
+        formatEN: create container [name][image]
+        formatZH: 创建容器 [name][image]
+        paramKeys: []
+  /containers/clean/log:
+    post:
+      consumes:
+      - application/json
+      description: 清理容器日志
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithName'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Clean container log
+      tags:
+      - Container
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: clean container [name] logs
+        formatZH: 清理容器 [name] 日志
+        paramKeys: []
+  /containers/commit:
+    post:
+      consumes:
+      - application/json
+      description: 容器提交生成新镜像
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ContainerCommit'
+      responses:
+        "200":
+          description: OK
+      summary: Commit Container
+      tags:
+      - Container
+  /containers/compose:
+    post:
+      consumes:
+      - application/json
+      description: 创建容器编排
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ComposeCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create compose
+      tags:
+      - Container Compose
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: create compose [name]
+        formatZH: 创建 compose [name]
+        paramKeys: []
+  /containers/compose/operate:
+    post:
+      consumes:
+      - application/json
+      description: 容器编排操作
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ComposeOperation'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Operate compose
+      tags:
+      - Container Compose
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - operation
+        formatEN: compose [operation] [name]
+        formatZH: compose [operation] [name]
+        paramKeys: []
+  /containers/compose/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取编排列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchWithPage'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page composes
+      tags:
+      - Container Compose
+  /containers/compose/search/log:
+    get:
+      description: docker-compose 日志
+      parameters:
+      - description: compose 文件地址
+        in: query
+        name: compose
+        type: string
+      - description: 时间筛选
+        in: query
+        name: since
+        type: string
+      - description: 是否追踪
+        in: query
+        name: follow
+        type: string
+      - description: 显示行号
+        in: query
+        name: tail
+        type: string
+      responses: {}
+      security:
+      - ApiKeyAuth: []
+      summary: Container Compose logs
+      tags:
+      - Container Compose
+  /containers/compose/test:
+    post:
+      consumes:
+      - application/json
+      description: 测试 compose 是否可用
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ComposeCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Test compose
+      tags:
+      - Container Compose
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: check compose [name]
+        formatZH: 检测 compose [name] 格式
+        paramKeys: []
+  /containers/compose/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新容器编排
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ComposeUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update compose
+      tags:
+      - Container Compose
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: update compose information [name]
+        formatZH: 更新 compose [name]
+        paramKeys: []
+  /containers/daemonjson:
+    get:
+      description: 获取 docker 配置信息
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.DaemonJsonConf'
+      security:
+      - ApiKeyAuth: []
+      summary: Load docker daemon.json
+      tags:
+      - Container Docker
+  /containers/daemonjson/file:
+    get:
+      description: 获取 docker 配置信息(表单)
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: string
+      security:
+      - ApiKeyAuth: []
+      summary: Load docker daemon.json
+      tags:
+      - Container Docker
+  /containers/daemonjson/update:
+    post:
+      consumes:
+      - application/json
+      description: 修改 docker 配置信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SettingUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update docker daemon.json
+      tags:
+      - Container Docker
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - key
+        - value
+        formatEN: Updated configuration [key]
+        formatZH: 更新配置 [key]
+        paramKeys: []
+  /containers/daemonjson/update/byfile:
+    post:
+      consumes:
+      - application/json
+      description: 上传替换 docker 配置文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.DaemonJsonUpdateByFile'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update docker daemon.json by upload file
+      tags:
+      - Container Docker
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: Updated configuration file
+        formatZH: 更新配置文件
+        paramKeys: []
+  /containers/docker/operate:
+    post:
+      consumes:
+      - application/json
+      description: Docker 操作
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.DockerOperation'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Operate docker
+      tags:
+      - Container Docker
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - operation
+        formatEN: '[operation] docker service'
+        formatZH: docker 服务 [operation]
+        paramKeys: []
+  /containers/docker/status:
+    get:
+      description: 获取 docker 服务状态
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: string
+      security:
+      - ApiKeyAuth: []
+      summary: Load docker status
+      tags:
+      - Container Docker
+  /containers/download/log:
+    post:
+      description: 下载容器日志
+      responses: {}
+  /containers/image:
+    get:
+      description: 获取镜像名称列表
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.Options'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: load images options
+      tags:
+      - Container Image
+  /containers/image/all:
+    get:
+      description: 获取所有镜像列表
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.ImageInfo'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List all images
+      tags:
+      - Container Image
+  /containers/image/build:
+    post:
+      consumes:
+      - application/json
+      description: 构建镜像
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ImageBuild'
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: string
+      security:
+      - ApiKeyAuth: []
+      summary: Build image
+      tags:
+      - Container Image
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: build image [name]
+        formatZH: 构建镜像 [name]
+        paramKeys: []
+  /containers/image/load:
+    post:
+      consumes:
+      - application/json
+      description: 导入镜像
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ImageLoad'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load image
+      tags:
+      - Container Image
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - path
+        formatEN: load image from [path]
+        formatZH: 从 [path] 加载镜像
+        paramKeys: []
+  /containers/image/pull:
+    post:
+      consumes:
+      - application/json
+      description: 拉取镜像
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ImagePull'
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: string
+      security:
+      - ApiKeyAuth: []
+      summary: Pull image
+      tags:
+      - Container Image
+      x-panel-log:
+        BeforeFunctions:
+        - db: image_repos
+          input_column: id
+          input_value: repoID
+          isList: false
+          output_column: name
+          output_value: reponame
+        bodyKeys:
+        - repoID
+        - imageName
+        formatEN: image pull [reponame][imageName]
+        formatZH: 镜像拉取 [reponame][imageName]
+        paramKeys: []
+  /containers/image/push:
+    post:
+      consumes:
+      - application/json
+      description: 推送镜像
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ImagePush'
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: string
+      security:
+      - ApiKeyAuth: []
+      summary: Push image
+      tags:
+      - Container Image
+      x-panel-log:
+        BeforeFunctions:
+        - db: image_repos
+          input_column: id
+          input_value: repoID
+          isList: false
+          output_column: name
+          output_value: reponame
+        bodyKeys:
+        - repoID
+        - tagName
+        - name
+        formatEN: push [tagName] to [reponame][name]
+        formatZH: '[tagName] 推送到 [reponame][name]'
+        paramKeys: []
+  /containers/image/remove:
+    post:
+      consumes:
+      - application/json
+      description: 删除镜像
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BatchDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete image
+      tags:
+      - Container Image
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - names
+        formatEN: remove image [names]
+        formatZH: 移除镜像 [names]
+        paramKeys: []
+  /containers/image/save:
+    post:
+      consumes:
+      - application/json
+      description: 导出镜像
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ImageSave'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Save image
+      tags:
+      - Container Image
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - tagName
+        - path
+        - name
+        formatEN: save [tagName] as [path]/[name]
+        formatZH: 保留 [tagName] 为 [path]/[name]
+        paramKeys: []
+  /containers/image/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取镜像列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchWithPage'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page images
+      tags:
+      - Container Image
+  /containers/image/tag:
+    post:
+      consumes:
+      - application/json
+      description: Tag 镜像
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ImageTag'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Tag image
+      tags:
+      - Container Image
+      x-panel-log:
+        BeforeFunctions:
+        - db: image_repos
+          input_column: id
+          input_value: repoID
+          isList: false
+          output_column: name
+          output_value: reponame
+        bodyKeys:
+        - repoID
+        - targetName
+        formatEN: tag image [reponame][targetName]
+        formatZH: tag 镜像 [reponame][targetName]
+        paramKeys: []
+  /containers/info:
+    post:
+      consumes:
+      - application/json
+      description: 获取容器表单信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithName'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.ContainerOperate'
+      security:
+      - ApiKeyAuth: []
+      summary: Load container info
+      tags:
+      - Container
+  /containers/inspect:
+    post:
+      consumes:
+      - application/json
+      description: 容器详情
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.InspectReq'
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: string
+      security:
+      - ApiKeyAuth: []
+      summary: Container inspect
+      tags:
+      - Container
+  /containers/ipv6option/update:
+    post:
+      consumes:
+      - application/json
+      description: 修改 docker ipv6 配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.LogOption'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update docker daemon.json ipv6 option
+      tags:
+      - Container Docker
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: Updated the ipv6 option
+        formatZH: 更新 ipv6 配置
+        paramKeys: []
+  /containers/limit:
+    get:
+      description: 获取容器限制
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.ResourceLimit'
+      security:
+      - ApiKeyAuth: []
+      summary: Load container limits
+  /containers/list:
+    post:
+      consumes:
+      - application/json
+      description: 获取容器名称
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: List containers
+      tags:
+      - Container
+  /containers/list/stats:
+    get:
+      description: 获取容器列表资源占用
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.ContainerListStats'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Load container stats
+  /containers/load/log:
+    post:
+      consumes:
+      - application/json
+      description: 获取容器操作日志
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithNameAndType'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load container log
+      tags:
+      - Container
+  /containers/logoption/update:
+    post:
+      consumes:
+      - application/json
+      description: 修改 docker 日志配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.LogOption'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update docker daemon.json log option
+      tags:
+      - Container Docker
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: Updated the log option
+        formatZH: 更新日志配置
+        paramKeys: []
+  /containers/network:
+    get:
+      consumes:
+      - application/json
+      description: 获取容器网络列表
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.Options'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List networks
+      tags:
+      - Container Network
+    post:
+      consumes:
+      - application/json
+      description: 创建容器网络
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.NetworkCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create network
+      tags:
+      - Container Network
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: create container network [name]
+        formatZH: 创建容器网络 name
+        paramKeys: []
+  /containers/network/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除容器网络
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BatchDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete network
+      tags:
+      - Container Network
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - names
+        formatEN: delete container network [names]
+        formatZH: 删除容器网络 [names]
+        paramKeys: []
+  /containers/network/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取容器网络列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchWithPage'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page networks
+      tags:
+      - Container Network
+  /containers/operate:
+    post:
+      consumes:
+      - application/json
+      description: 容器操作
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ContainerOperation'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Operate Container
+      tags:
+      - Container
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - names
+        - operation
+        formatEN: container [operation] [names]
+        formatZH: 容器 [names] 执行 [operation]
+        paramKeys: []
+  /containers/prune:
+    post:
+      consumes:
+      - application/json
+      description: 容器清理
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ContainerPrune'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.ContainerPruneReport'
+      security:
+      - ApiKeyAuth: []
+      summary: Clean container
+      tags:
+      - Container
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - pruneType
+        formatEN: clean container [pruneType]
+        formatZH: 清理容器 [pruneType]
+        paramKeys: []
+  /containers/rename:
+    post:
+      consumes:
+      - application/json
+      description: 容器重命名
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ContainerRename'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Rename Container
+      tags:
+      - Container
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - newName
+        formatEN: rename container [name] => [newName]
+        formatZH: 容器重命名 [name] => [newName]
+        paramKeys: []
+  /containers/repo:
+    get:
+      description: 获取镜像仓库列表
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.ImageRepoOption'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List image repos
+      tags:
+      - Container Image-repo
+    post:
+      consumes:
+      - application/json
+      description: 创建镜像仓库
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ImageRepoDelete'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create image repo
+      tags:
+      - Container Image-repo
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: create image repo [name]
+        formatZH: 创建镜像仓库 [name]
+        paramKeys: []
+  /containers/repo/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除镜像仓库
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ImageRepoDelete'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete image repo
+      tags:
+      - Container Image-repo
+      x-panel-log:
+        BeforeFunctions:
+        - db: image_repos
+          input_column: id
+          input_value: ids
+          isList: true
+          output_column: name
+          output_value: names
+        bodyKeys:
+        - ids
+        formatEN: delete image repo [names]
+        formatZH: 删除镜像仓库 [names]
+        paramKeys: []
+  /containers/repo/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取镜像仓库列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchWithPage'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page image repos
+      tags:
+      - Container Image-repo
+  /containers/repo/status:
+    get:
+      consumes:
+      - application/json
+      description: 获取 docker 仓库状态
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperateByID'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load repo status
+      tags:
+      - Container Image-repo
+  /containers/repo/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新镜像仓库
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ImageRepoUpdate'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update image repo
+      tags:
+      - Container Image-repo
+      x-panel-log:
+        BeforeFunctions:
+        - db: image_repos
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: update image repo information [name]
+        formatZH: 更新镜像仓库 [name]
+        paramKeys: []
+  /containers/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取容器列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PageContainer'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page containers
+      tags:
+      - Container
+  /containers/search/log:
+    post:
+      description: 容器日志
+      parameters:
+      - description: 容器名称
+        in: query
+        name: container
+        type: string
+      - description: 时间筛选
+        in: query
+        name: since
+        type: string
+      - description: 是否追踪
+        in: query
+        name: follow
+        type: string
+      - description: 显示行号
+        in: query
+        name: tail
+        type: string
+      responses: {}
+      security:
+      - ApiKeyAuth: []
+      summary: Container logs
+      tags:
+      - Container
+  /containers/stats/:id:
+    get:
+      description: 容器监控信息
+      parameters:
+      - description: 容器id
+        in: path
+        name: id
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.ContainerStats'
+      security:
+      - ApiKeyAuth: []
+      summary: Container stats
+      tags:
+      - Container
+  /containers/template:
+    get:
+      description: 获取容器编排模版列表
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.ComposeTemplateInfo'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List compose templates
+      tags:
+      - Container Compose-template
+    post:
+      consumes:
+      - application/json
+      description: 创建容器编排模版
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ComposeTemplateCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create compose template
+      tags:
+      - Container Compose-template
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: create compose template [name]
+        formatZH: 创建 compose 模版 [name]
+        paramKeys: []
+  /containers/template/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除容器编排模版
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BatchDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete compose template
+      tags:
+      - Container Compose-template
+      x-panel-log:
+        BeforeFunctions:
+        - db: compose_templates
+          input_column: id
+          input_value: ids
+          isList: true
+          output_column: name
+          output_value: names
+        bodyKeys:
+        - ids
+        formatEN: delete compose template [names]
+        formatZH: 删除 compose 模版 [names]
+        paramKeys: []
+  /containers/template/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取容器编排模版列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchWithPage'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page compose templates
+      tags:
+      - Container Compose-template
+  /containers/template/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新容器编排模版
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ComposeTemplateUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update compose template
+      tags:
+      - Container Compose-template
+      x-panel-log:
+        BeforeFunctions:
+        - db: compose_templates
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: update compose template information [name]
+        formatZH: 更新 compose 模版 [name]
+        paramKeys: []
+  /containers/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新容器
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ContainerOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update container
+      tags:
+      - Container
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - image
+        formatEN: update container [name][image]
+        formatZH: 更新容器 [name][image]
+        paramKeys: []
+  /containers/upgrade:
+    post:
+      consumes:
+      - application/json
+      description: 更新容器镜像
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ContainerUpgrade'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Upgrade container
+      tags:
+      - Container
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - image
+        formatEN: upgrade container image [name][image]
+        formatZH: 更新容器镜像 [name][image]
+        paramKeys: []
+  /containers/volume:
+    get:
+      consumes:
+      - application/json
+      description: 获取容器存储卷列表
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.Options'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List volumes
+      tags:
+      - Container Volume
+    post:
+      consumes:
+      - application/json
+      description: 创建容器存储卷
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.VolumeCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create volume
+      tags:
+      - Container Volume
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: create container volume [name]
+        formatZH: 创建容器存储卷 [name]
+        paramKeys: []
+  /containers/volume/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除容器存储卷
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BatchDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete volume
+      tags:
+      - Container Volume
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - names
+        formatEN: delete container volume [names]
+        formatZH: 删除容器存储卷 [names]
+        paramKeys: []
+  /containers/volume/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取容器存储卷分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchWithPage'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page volumes
+      tags:
+      - Container Volume
+  /cronjobs:
+    post:
+      consumes:
+      - application/json
+      description: 创建计划任务
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.CronjobCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create cronjob
+      tags:
+      - Cronjob
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - type
+        - name
+        formatEN: create cronjob [type][name]
+        formatZH: 创建计划任务 [type][name]
+        paramKeys: []
+  /cronjobs/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除计划任务
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.CronjobBatchDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete cronjob
+      tags:
+      - Cronjob
+      x-panel-log:
+        BeforeFunctions:
+        - db: cronjobs
+          input_column: id
+          input_value: ids
+          isList: true
+          output_column: name
+          output_value: names
+        bodyKeys:
+        - ids
+        formatEN: delete cronjob [names]
+        formatZH: 删除计划任务 [names]
+        paramKeys: []
+  /cronjobs/download:
+    post:
+      consumes:
+      - application/json
+      description: 下载计划任务记录
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.CronjobDownload'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Download cronjob records
+      tags:
+      - Cronjob
+      x-panel-log:
+        BeforeFunctions:
+        - db: job_records
+          input_column: id
+          input_value: recordID
+          isList: false
+          output_column: file
+          output_value: file
+        bodyKeys:
+        - recordID
+        formatEN: download the cronjob record [file]
+        formatZH: 下载计划任务记录 [file]
+        paramKeys: []
+  /cronjobs/handle:
+    post:
+      consumes:
+      - application/json
+      description: 手动执行计划任务
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperateByID'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Handle cronjob once
+      tags:
+      - Cronjob
+      x-panel-log:
+        BeforeFunctions:
+        - db: cronjobs
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: manually execute the cronjob [name]
+        formatZH: 手动执行计划任务 [name]
+        paramKeys: []
+  /cronjobs/records/clean:
+    post:
+      consumes:
+      - application/json
+      description: 清空计划任务记录
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.CronjobClean'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Clean job records
+      tags:
+      - Cronjob
+      x-panel-log:
+        BeforeFunctions:
+        - db: cronjobs
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: clean cronjob [name] records
+        formatZH: 清空计划任务记录 [name]
+        paramKeys: []
+  /cronjobs/records/log:
+    post:
+      consumes:
+      - application/json
+      description: 获取计划任务记录日志
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperateByID'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load Cronjob record log
+      tags:
+      - Cronjob
+  /cronjobs/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取计划任务分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PageCronjob'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page cronjobs
+      tags:
+      - Cronjob
+  /cronjobs/search/records:
+    post:
+      consumes:
+      - application/json
+      description: 获取计划任务记录
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchRecord'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page job records
+      tags:
+      - Cronjob
+  /cronjobs/status:
+    post:
+      consumes:
+      - application/json
+      description: 更新计划任务状态
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.CronjobUpdateStatus'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update cronjob status
+      tags:
+      - Cronjob
+      x-panel-log:
+        BeforeFunctions:
+        - db: cronjobs
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        - status
+        formatEN: change the status of cronjob [name] to [status].
+        formatZH: 修改计划任务 [name] 状态为 [status]
+        paramKeys: []
+  /cronjobs/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新计划任务
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.CronjobUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update cronjob
+      tags:
+      - Cronjob
+      x-panel-log:
+        BeforeFunctions:
+        - db: cronjobs
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: update cronjob [name]
+        formatZH: 更新计划任务 [name]
+        paramKeys: []
+  /dashboard/base/:ioOption/:netOption:
+    get:
+      consumes:
+      - application/json
+      description: 获取首页基础数据
+      parameters:
+      - description: request
+        in: path
+        name: ioOption
+        required: true
+        type: string
+      - description: request
+        in: path
+        name: netOption
+        required: true
+        type: string
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.DashboardBase'
+      security:
+      - ApiKeyAuth: []
+      summary: Load dashboard base info
+      tags:
+      - Dashboard
+  /dashboard/base/os:
+    get:
+      consumes:
+      - application/json
+      description: 获取服务器基础数据
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.OsInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load os info
+      tags:
+      - Dashboard
+  /dashboard/current/:ioOption/:netOption:
+    get:
+      consumes:
+      - application/json
+      description: 获取首页实时数据
+      parameters:
+      - description: request
+        in: path
+        name: ioOption
+        required: true
+        type: string
+      - description: request
+        in: path
+        name: netOption
+        required: true
+        type: string
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.DashboardCurrent'
+      security:
+      - ApiKeyAuth: []
+      summary: Load dashboard current info
+      tags:
+      - Dashboard
+  /dashboard/system/restart/:operation:
+    post:
+      consumes:
+      - application/json
+      description: 重启服务器/面板
+      parameters:
+      - description: request
+        in: path
+        name: operation
+        required: true
+        type: string
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: System restart
+      tags:
+      - Dashboard
+  /databases:
+    post:
+      consumes:
+      - application/json
+      description: 创建 mysql 数据库
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.MysqlDBCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create mysql database
+      tags:
+      - Database Mysql
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: create mysql database [name]
+        formatZH: 创建 mysql 数据库 [name]
+        paramKeys: []
+  /databases/bind:
+    post:
+      consumes:
+      - application/json
+      description: 绑定 mysql 数据库用户
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BindUser'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Bind user of mysql database
+      tags:
+      - Database Mysql
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - database
+        - username
+        formatEN: bind mysql database [database] [username]
+        formatZH: 绑定 mysql 数据库名 [database] [username]
+        paramKeys: []
+  /databases/change/access:
+    post:
+      consumes:
+      - application/json
+      description: 修改 mysql 访问权限
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ChangeDBInfo'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Change mysql access
+      tags:
+      - Database Mysql
+      x-panel-log:
+        BeforeFunctions:
+        - db: database_mysqls
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: Update database [name] access
+        formatZH: 更新数据库 [name] 访问权限
+        paramKeys: []
+  /databases/change/password:
+    post:
+      consumes:
+      - application/json
+      description: 修改 mysql 密码
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ChangeDBInfo'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Change mysql password
+      tags:
+      - Database Mysql
+      x-panel-log:
+        BeforeFunctions:
+        - db: database_mysqls
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: Update database [name] password
+        formatZH: 更新数据库 [name] 密码
+        paramKeys: []
+  /databases/common/info:
+    post:
+      consumes:
+      - application/json
+      description: 获取数据库基础信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithNameAndType'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.DBBaseInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load base info
+      tags:
+      - Database Common
+  /databases/common/load/file:
+    post:
+      consumes:
+      - application/json
+      description: 获取数据库配置文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithNameAndType'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load Database conf
+      tags:
+      - Database Common
+  /databases/common/update/conf:
+    post:
+      consumes:
+      - application/json
+      description: 上传替换配置文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.DBConfUpdateByFile'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update conf by upload file
+      tags:
+      - Database Common
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - type
+        - database
+        formatEN: update the [type] [database] database configuration information
+        formatZH: 更新 [type] 数据库 [database] 配置信息
+        paramKeys: []
+  /databases/db:
+    post:
+      consumes:
+      - application/json
+      description: 创建远程数据库
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.DatabaseCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create database
+      tags:
+      - Database
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - type
+        formatEN: create database [name][type]
+        formatZH: 创建远程数据库 [name][type]
+        paramKeys: []
+  /databases/db/:name:
+    get:
+      description: 获取远程数据库
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.DatabaseInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Get databases
+      tags:
+      - Database
+  /databases/db/check:
+    post:
+      consumes:
+      - application/json
+      description: 检测远程数据库连接性
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.DatabaseCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Check database
+      tags:
+      - Database
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - type
+        formatEN: check if database [name][type] is connectable
+        formatZH: 检测远程数据库 [name][type] 连接性
+        paramKeys: []
+  /databases/db/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除远程数据库
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.DatabaseDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete database
+      tags:
+      - Database
+      x-panel-log:
+        BeforeFunctions:
+        - db: databases
+          input_column: id
+          input_value: ids
+          isList: true
+          output_column: name
+          output_value: names
+        bodyKeys:
+        - ids
+        formatEN: delete database [names]
+        formatZH: 删除远程数据库 [names]
+        paramKeys: []
+  /databases/db/item/:type:
+    get:
+      description: 获取数据库列表
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.DatabaseItem'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List databases
+      tags:
+      - Database
+  /databases/db/list/:type:
+    get:
+      description: 获取远程数据库列表
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.DatabaseOption'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List databases
+      tags:
+      - Database
+  /databases/db/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取远程数据库列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.DatabaseSearch'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page databases
+      tags:
+      - Database
+  /databases/db/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新远程数据库
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.DatabaseUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update database
+      tags:
+      - Database
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: update database [name]
+        formatZH: 更新远程数据库 [name]
+        paramKeys: []
+  /databases/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除 mysql 数据库
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.MysqlDBDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete mysql database
+      tags:
+      - Database Mysql
+      x-panel-log:
+        BeforeFunctions:
+        - db: database_mysqls
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: delete mysql database [name]
+        formatZH: 删除 mysql 数据库 [name]
+        paramKeys: []
+  /databases/del/check:
+    post:
+      consumes:
+      - application/json
+      description: Mysql 数据库删除前检查
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.MysqlDBDeleteCheck'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              type: string
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Check before delete mysql database
+      tags:
+      - Database Mysql
+  /databases/description/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新 mysql 数据库库描述信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.UpdateDescription'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update mysql database description
+      tags:
+      - Database Mysql
+      x-panel-log:
+        BeforeFunctions:
+        - db: database_mysqls
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        - description
+        formatEN: The description of the mysql database [name] is modified => [description]
+        formatZH: mysql 数据库 [name] 描述信息修改 [description]
+        paramKeys: []
+  /databases/load:
+    post:
+      consumes:
+      - application/json
+      description: 从服务器获取
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.MysqlLoadDB'
+      responses: {}
+      security:
+      - ApiKeyAuth: []
+      summary: Load mysql database from remote
+      tags:
+      - Database Mysql
+  /databases/options:
+    get:
+      consumes:
+      - application/json
+      description: 获取 mysql 数据库列表
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PageInfo'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.MysqlOption'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List mysql database names
+      tags:
+      - Database Mysql
+  /databases/pg:
+    post:
+      consumes:
+      - application/json
+      description: 创建 postgresql 数据库
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PostgresqlDBCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create postgresql database
+      tags:
+      - Database Postgresql
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: create postgresql database [name]
+        formatZH: 创建 postgresql 数据库 [name]
+        paramKeys: []
+  /databases/pg/:database/load:
+    post:
+      consumes:
+      - application/json
+      description: 从服务器获取
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PostgresqlLoadDB'
+      responses: {}
+      security:
+      - ApiKeyAuth: []
+      summary: Load postgresql database from remote
+      tags:
+      - Database Postgresql
+  /databases/pg/bind:
+    post:
+      consumes:
+      - application/json
+      description: 绑定 postgresql 数据库用户
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PostgresqlBindUser'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Bind postgresql user
+      tags:
+      - Database Postgresql
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - username
+        formatEN: bind postgresql database [name] user [username]
+        formatZH: 绑定 postgresql 数据库 [name] 用户 [username]
+        paramKeys: []
+  /databases/pg/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除 postgresql 数据库
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PostgresqlDBDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete postgresql database
+      tags:
+      - Database Postgresql
+      x-panel-log:
+        BeforeFunctions:
+        - db: database_postgresqls
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: delete postgresql database [name]
+        formatZH: 删除 postgresql 数据库 [name]
+        paramKeys: []
+  /databases/pg/del/check:
+    post:
+      consumes:
+      - application/json
+      description: Postgresql 数据库删除前检查
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PostgresqlDBDeleteCheck'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              type: string
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Check before delete postgresql database
+      tags:
+      - Database Postgresql
+  /databases/pg/description:
+    post:
+      consumes:
+      - application/json
+      description: 更新 postgresql 数据库库描述信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.UpdateDescription'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update postgresql database description
+      tags:
+      - Database Postgresql
+      x-panel-log:
+        BeforeFunctions:
+        - db: database_postgresqls
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        - description
+        formatEN: The description of the postgresql database [name] is modified =>
+          [description]
+        formatZH: postgresql 数据库 [name] 描述信息修改 [description]
+        paramKeys: []
+  /databases/pg/password:
+    post:
+      consumes:
+      - application/json
+      description: 修改 postgresql 密码
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ChangeDBInfo'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Change postgresql password
+      tags:
+      - Database Postgresql
+      x-panel-log:
+        BeforeFunctions:
+        - db: database_postgresqls
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: Update database [name] password
+        formatZH: 更新数据库 [name] 密码
+        paramKeys: []
+  /databases/pg/privileges:
+    post:
+      consumes:
+      - application/json
+      description: 修改 postgresql 用户权限
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ChangeDBInfo'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Change postgresql privileges
+      tags:
+      - Database Postgresql
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - database
+        - username
+        formatEN: Update [user] privileges of database [database]
+        formatZH: 更新数据库 [database] 用户 [username] 权限
+        paramKeys: []
+  /databases/pg/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取 postgresql 数据库列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PostgresqlDBSearch'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page postgresql databases
+      tags:
+      - Database Postgresql
+  /databases/redis/conf:
+    post:
+      consumes:
+      - application/json
+      description: 获取 redis 配置信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithName'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.RedisConf'
+      security:
+      - ApiKeyAuth: []
+      summary: Load redis conf
+      tags:
+      - Database Redis
+  /databases/redis/conf/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新 redis 配置信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.RedisConfUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update redis conf
+      tags:
+      - Database Redis
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: update the redis database configuration information
+        formatZH: 更新 redis 数据库配置信息
+        paramKeys: []
+  /databases/redis/install/cli:
+    post:
+      description: 安装 redis cli
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Install redis-cli
+      tags:
+      - Database Redis
+  /databases/redis/password:
+    post:
+      consumes:
+      - application/json
+      description: 更新 redis 密码
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ChangeRedisPass'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Change redis password
+      tags:
+      - Database Redis
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: change the password of the redis database
+        formatZH: 修改 redis 数据库密码
+        paramKeys: []
+  /databases/redis/persistence/conf:
+    post:
+      consumes:
+      - application/json
+      description: 获取 redis 持久化配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithName'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.RedisPersistence'
+      security:
+      - ApiKeyAuth: []
+      summary: Load redis persistence conf
+      tags:
+      - Database Redis
+  /databases/redis/persistence/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新 redis 持久化配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.RedisConfPersistenceUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update redis persistence conf
+      tags:
+      - Database Redis
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: redis database persistence configuration update
+        formatZH: redis 数据库持久化配置更新
+        paramKeys: []
+  /databases/redis/status:
+    post:
+      consumes:
+      - application/json
+      description: 获取 redis 状态信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithName'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.RedisStatus'
+      security:
+      - ApiKeyAuth: []
+      summary: Load redis status info
+      tags:
+      - Database Redis
+  /databases/remote:
+    post:
+      consumes:
+      - application/json
+      description: 获取 mysql 远程访问权限
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithNameAndType'
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: boolean
+      security:
+      - ApiKeyAuth: []
+      summary: Load mysql remote access
+      tags:
+      - Database Mysql
+  /databases/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取 mysql 数据库列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.MysqlDBSearch'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page mysql databases
+      tags:
+      - Database Mysql
+  /databases/status:
+    post:
+      consumes:
+      - application/json
+      description: 获取 mysql 状态信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithNameAndType'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.MysqlStatus'
+      security:
+      - ApiKeyAuth: []
+      summary: Load mysql status info
+      tags:
+      - Database Mysql
+  /databases/variables:
+    post:
+      consumes:
+      - application/json
+      description: 获取 mysql 性能参数信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithNameAndType'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.MysqlVariables'
+      security:
+      - ApiKeyAuth: []
+      summary: Load mysql variables info
+      tags:
+      - Database Mysql
+  /databases/variables/update:
+    post:
+      consumes:
+      - application/json
+      description: mysql 性能调优
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.MysqlVariablesUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update mysql variables
+      tags:
+      - Database Mysql
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: adjust mysql database performance parameters
+        formatZH: 调整 mysql 数据库性能参数
+        paramKeys: []
+  /db/remote/del/check:
+    post:
+      consumes:
+      - application/json
+      description: Mysql 远程数据库删除前检查
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperateByID'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              type: string
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Check before delete remote database
+      tags:
+      - Database
+  /files:
+    post:
+      consumes:
+      - application/json
+      description: 创建文件/文件夹
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create file
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - path
+        formatEN: Create dir or file [path]
+        formatZH: 创建文件/文件夹 [path]
+        paramKeys: []
+  /files/batch/del:
+    post:
+      consumes:
+      - application/json
+      description: 批量删除文件/文件夹
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileBatchDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Batch delete file
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - paths
+        formatEN: Batch delete dir or file [paths]
+        formatZH: 批量删除文件/文件夹 [paths]
+        paramKeys: []
+  /files/batch/role:
+    post:
+      consumes:
+      - application/json
+      description: 批量修改文件权限和用户/组
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileRoleReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Batch change file mode and owner
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - paths
+        - mode
+        - user
+        - group
+        formatEN: Batch change file mode and owner [paths] => [mode]/[user]/[group]
+        formatZH: 批量修改文件权限和用户/组 [paths] => [mode]/[user]/[group]
+        paramKeys: []
+  /files/check:
+    post:
+      consumes:
+      - application/json
+      description: 检测文件是否存在
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FilePathCheck'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Check file exist
+      tags:
+      - File
+  /files/chunkdownload:
+    post:
+      consumes:
+      - application/json
+      description: 分片下载下载文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileDownload'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Chunk Download file
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: Download file [name]
+        formatZH: 下载文件 [name]
+        paramKeys: []
+  /files/chunkupload:
+    post:
+      description: 分片上传文件
+      parameters:
+      - description: request
+        in: formData
+        name: file
+        required: true
+        type: file
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: ChunkUpload file
+      tags:
+      - File
+  /files/compress:
+    post:
+      consumes:
+      - application/json
+      description: 压缩文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileCompress'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Compress file
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: Compress file [name]
+        formatZH: 压缩文件 [name]
+        paramKeys: []
+  /files/content:
+    post:
+      consumes:
+      - application/json
+      description: 获取文件内容
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileContentReq'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.FileInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load file content
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - path
+        formatEN: Load file content [path]
+        formatZH: 获取文件内容 [path]
+        paramKeys: []
+  /files/decompress:
+    post:
+      consumes:
+      - application/json
+      description: 解压文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileDeCompress'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Decompress file
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - path
+        formatEN: Decompress file [path]
+        formatZH: 解压 [path]
+        paramKeys: []
+  /files/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除文件/文件夹
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete file
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - path
+        formatEN: Delete dir or file [path]
+        formatZH: 删除文件/文件夹 [path]
+        paramKeys: []
+  /files/download:
+    get:
+      consumes:
+      - application/json
+      description: 下载文件
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Download file
+      tags:
+      - File
+  /files/favorite:
+    post:
+      consumes:
+      - application/json
+      description: 创建收藏
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FavoriteCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create favorite
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - path
+        formatEN: 收藏文件/文件夹 [path]
+        formatZH: 收藏文件/文件夹 [path]
+        paramKeys: []
+  /files/favorite/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除收藏
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FavoriteDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete favorite
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions:
+        - db: favorites
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: path
+          output_value: path
+        bodyKeys:
+        - id
+        formatEN: delete avorite [path]
+        formatZH: 删除收藏 [path]
+        paramKeys: []
+  /files/favorite/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取收藏列表
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PageInfo'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: List favorites
+      tags:
+      - File
+  /files/mode:
+    post:
+      consumes:
+      - application/json
+      description: 修改文件权限
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Change file mode
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - path
+        - mode
+        formatEN: Change mode [paths] => [mode]
+        formatZH: 修改权限 [paths] => [mode]
+        paramKeys: []
+  /files/move:
+    post:
+      consumes:
+      - application/json
+      description: 移动文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileMove'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Move file
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - oldPaths
+        - newPath
+        formatEN: Move [oldPaths] => [newPath]
+        formatZH: 移动文件 [oldPaths] => [newPath]
+        paramKeys: []
+  /files/owner:
+    post:
+      consumes:
+      - application/json
+      description: 修改文件用户/组
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileRoleUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Change file owner
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - path
+        - user
+        - group
+        formatEN: Change owner [paths] => [user]/[group]
+        formatZH: 修改用户/组 [paths] => [user]/[group]
+        paramKeys: []
+  /files/read:
+    post:
+      description: 按行读取日志文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileReadByLineReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Read file by Line
+      tags:
+      - File
+  /files/recycle/clear:
+    post:
+      consumes:
+      - application/json
+      description: 清空回收站文件
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Clear RecycleBin files
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: 清空回收站
+        formatZH: 清空回收站
+        paramKeys: []
+  /files/recycle/reduce:
+    post:
+      consumes:
+      - application/json
+      description: 还原回收站文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.RecycleBinReduce'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Reduce RecycleBin files
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: Reduce RecycleBin file [name]
+        formatZH: 还原回收站文件 [name]
+        paramKeys: []
+  /files/recycle/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取回收站文件列表
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PageInfo'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: List RecycleBin files
+      tags:
+      - File
+  /files/recycle/status:
+    get:
+      consumes:
+      - application/json
+      description: 获取回收站状态
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get RecycleBin status
+      tags:
+      - File
+  /files/rename:
+    post:
+      consumes:
+      - application/json
+      description: 修改文件名称
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileRename'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Change file name
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - oldName
+        - newName
+        formatEN: Rename [oldName] => [newName]
+        formatZH: 重命名 [oldName] => [newName]
+        paramKeys: []
+  /files/save:
+    post:
+      consumes:
+      - application/json
+      description: 更新文件内容
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileEdit'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update file content
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - path
+        formatEN: Update file content [path]
+        formatZH: 更新文件内容 [path]
+        paramKeys: []
+  /files/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取文件列表
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileOption'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.FileInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: List files
+      tags:
+      - File
+  /files/size:
+    post:
+      consumes:
+      - application/json
+      description: 获取文件夹大小
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.DirSizeReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load file size
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - path
+        formatEN: Load file size [path]
+        formatZH: 获取文件夹大小 [path]
+        paramKeys: []
+  /files/tree:
+    post:
+      consumes:
+      - application/json
+      description: 加载文件树
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileOption'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/response.FileTree'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Load files tree
+      tags:
+      - File
+  /files/upload:
+    post:
+      description: 上传文件
+      parameters:
+      - description: request
+        in: formData
+        name: file
+        required: true
+        type: file
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Upload file
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - path
+        formatEN: Upload file [path]
+        formatZH: 上传文件 [path]
+        paramKeys: []
+  /files/upload/search:
+    post:
+      consumes:
+      - application/json
+      description: 分页获取上传文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.SearchUploadWithPage'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/response.FileInfo'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Page file
+      tags:
+      - File
+  /files/wget:
+    post:
+      consumes:
+      - application/json
+      description: 下载远端文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.FileWget'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Wget file
+      tags:
+      - File
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - url
+        - path
+        - name
+        formatEN: Download url => [path]/[name]
+        formatZH: 下载 url => [path]/[name]
+        paramKeys: []
+  /groups:
+    post:
+      consumes:
+      - application/json
+      description: 创建系统组
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.GroupCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create group
+      tags:
+      - System Group
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - type
+        formatEN: create group [name][type]
+        formatZH: 创建组 [name][type]
+        paramKeys: []
+  /groups/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除系统组
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperateByID'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete group
+      tags:
+      - System Group
+      x-panel-log:
+        BeforeFunctions:
+        - db: groups
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        - db: groups
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: type
+          output_value: type
+        bodyKeys:
+        - id
+        formatEN: delete group [type][name]
+        formatZH: 删除组 [type][name]
+        paramKeys: []
+  /groups/search:
+    post:
+      consumes:
+      - application/json
+      description: 查询系统组
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.GroupSearch'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.GroupInfo'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List groups
+      tags:
+      - System Group
+  /groups/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新系统组
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.GroupUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update group
+      tags:
+      - System Group
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - type
+        formatEN: update group [name][type]
+        formatZH: 更新组 [name][type]
+        paramKeys: []
+  /host/conffile/update:
+    post:
+      consumes:
+      - application/json
+      description: 上传文件更新 SSH 配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SSHConf'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update host SSH setting by file
+      tags:
+      - SSH
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: update SSH conf
+        formatZH: 修改 SSH 配置文件
+        paramKeys: []
+  /host/ssh/conf:
+    get:
+      description: 获取 SSH 配置文件
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load host SSH conf
+      tags:
+      - SSH
+  /host/ssh/generate:
+    post:
+      consumes:
+      - application/json
+      description: 生成 SSH 密钥
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.GenerateSSH'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Generate host SSH secret
+      tags:
+      - SSH
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: generate SSH secret
+        formatZH: '生成 SSH 密钥 '
+        paramKeys: []
+  /host/ssh/log:
+    post:
+      consumes:
+      - application/json
+      description: 获取 SSH 登录日志
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchSSHLog'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.SSHLog'
+      security:
+      - ApiKeyAuth: []
+      summary: Load host SSH logs
+      tags:
+      - SSH
+  /host/ssh/operate:
+    post:
+      consumes:
+      - application/json
+      description: 修改 SSH 服务状态
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.Operate'
+      responses: {}
+      security:
+      - ApiKeyAuth: []
+      summary: Operate SSH
+      tags:
+      - SSH
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - operation
+        formatEN: '[operation] SSH'
+        formatZH: '[operation] SSH '
+        paramKeys: []
+  /host/ssh/search:
+    post:
+      description: 加载 SSH 配置信息
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.SSHInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load host SSH setting info
+      tags:
+      - SSH
+  /host/ssh/secret:
+    post:
+      consumes:
+      - application/json
+      description: 获取 SSH 密钥
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.GenerateLoad'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load host SSH secret
+      tags:
+      - SSH
+  /host/ssh/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新 SSH 配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SSHUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update host SSH setting
+      tags:
+      - SSH
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - key
+        - value
+        formatEN: update SSH setting [key] => [value]
+        formatZH: 修改 SSH 配置 [key] => [value]
+        paramKeys: []
+  /host/tool:
+    post:
+      consumes:
+      - application/json
+      description: 获取主机工具状态
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.HostToolReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get tool
+      tags:
+      - Host tool
+  /host/tool/config:
+    post:
+      consumes:
+      - application/json
+      description: 操作主机工具配置文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.HostToolConfig'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get tool config
+      tags:
+      - Host tool
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - operate
+        formatEN: '[operate] tool config'
+        formatZH: '[operate] 主机工具配置文件 '
+        paramKeys: []
+  /host/tool/create:
+    post:
+      consumes:
+      - application/json
+      description: 创建主机工具配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.HostToolCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create Host tool Config
+      tags:
+      - Host tool
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - type
+        formatEN: create [type] config
+        formatZH: 创建 [type] 配置
+        paramKeys: []
+  /host/tool/log:
+    post:
+      consumes:
+      - application/json
+      description: 获取主机工具日志
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.HostToolLogReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get tool
+      tags:
+      - Host tool
+  /host/tool/operate:
+    post:
+      consumes:
+      - application/json
+      description: 操作主机工具
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.HostToolReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Operate tool
+      tags:
+      - Host tool
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - operate
+        - type
+        formatEN: '[operate] [type]'
+        formatZH: '[operate] [type] '
+        paramKeys: []
+  /host/tool/supervisor/process:
+    get:
+      consumes:
+      - application/json
+      description: 获取 Supervisor 进程配置
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get Supervisor process config
+      tags:
+      - Host tool
+    post:
+      consumes:
+      - application/json
+      description: 操作守护进程
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.SupervisorProcessConfig'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create Supervisor process
+      tags:
+      - Host tool
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - operate
+        formatEN: '[operate] process'
+        formatZH: '[operate] 守护进程 '
+        paramKeys: []
+  /host/tool/supervisor/process/file:
+    post:
+      consumes:
+      - application/json
+      description: 操作 Supervisor 进程文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.SupervisorProcessFileReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get Supervisor process config
+      tags:
+      - Host tool
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - operate
+        formatEN: '[operate] Supervisor Process Config file'
+        formatZH: '[operate] Supervisor 进程文件 '
+        paramKeys: []
+  /hosts:
+    post:
+      consumes:
+      - application/json
+      description: 创建主机
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.HostOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create host
+      tags:
+      - Host
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - addr
+        formatEN: create host [name][addr]
+        formatZH: 创建主机 [name][addr]
+        paramKeys: []
+  /hosts/command:
+    get:
+      description: 获取快速命令列表
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.CommandInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: List commands
+      tags:
+      - Command
+    post:
+      consumes:
+      - application/json
+      description: 创建快速命令
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.CommandOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create command
+      tags:
+      - Command
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - command
+        formatEN: create quick command [name][command]
+        formatZH: 创建快捷命令 [name][command]
+        paramKeys: []
+  /hosts/command/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除快速命令
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BatchDeleteReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete command
+      tags:
+      - Command
+      x-panel-log:
+        BeforeFunctions:
+        - db: commands
+          input_column: id
+          input_value: ids
+          isList: true
+          output_column: name
+          output_value: names
+        bodyKeys:
+        - ids
+        formatEN: delete quick command [names]
+        formatZH: 删除快捷命令 [names]
+        paramKeys: []
+  /hosts/command/redis:
+    get:
+      description: 获取 redis 快速命令列表
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: Array
+      security:
+      - ApiKeyAuth: []
+      summary: List redis commands
+      tags:
+      - Redis Command
+    post:
+      consumes:
+      - application/json
+      description: 保存 Redis 快速命令
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.RedisCommand'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Save redis command
+      tags:
+      - Redis Command
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - command
+        formatEN: save quick command for redis [name][command]
+        formatZH: 保存 redis 快捷命令 [name][command]
+        paramKeys: []
+  /hosts/command/redis/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除 redis 快速命令
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BatchDeleteReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete redis command
+      tags:
+      - Redis Command
+      x-panel-log:
+        BeforeFunctions:
+        - db: redis_commands
+          input_column: id
+          input_value: ids
+          isList: true
+          output_column: name
+          output_value: names
+        bodyKeys:
+        - ids
+        formatEN: delete quick command of redis [names]
+        formatZH: 删除 redis 快捷命令 [names]
+        paramKeys: []
+  /hosts/command/redis/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取 redis 快速命令列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchWithPage'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page redis commands
+      tags:
+      - Redis Command
+  /hosts/command/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取快速命令列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchWithPage'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page commands
+      tags:
+      - Command
+  /hosts/command/tree:
+    get:
+      consumes:
+      - application/json
+      description: 获取快速命令树
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: Array
+      security:
+      - ApiKeyAuth: []
+      summary: Tree commands
+      tags:
+      - Command
+  /hosts/command/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新快速命令
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.CommandOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update command
+      tags:
+      - Command
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: update quick command [name]
+        formatZH: 更新快捷命令 [name]
+        paramKeys: []
+  /hosts/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除主机
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BatchDeleteReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete host
+      tags:
+      - Host
+      x-panel-log:
+        BeforeFunctions:
+        - db: hosts
+          input_column: id
+          input_value: ids
+          isList: true
+          output_column: addr
+          output_value: addrs
+        bodyKeys:
+        - ids
+        formatEN: delete host [addrs]
+        formatZH: 删除主机 [addrs]
+        paramKeys: []
+  /hosts/firewall/base:
+    get:
+      description: 获取防火墙基础信息
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.FirewallBaseInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load firewall base info
+      tags:
+      - Firewall
+  /hosts/firewall/batch:
+    post:
+      consumes:
+      - application/json
+      description: 批量删除防火墙规则
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BatchRuleOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create group
+      tags:
+      - Firewall
+  /hosts/firewall/forward:
+    post:
+      consumes:
+      - application/json
+      description: 更新防火墙端口转发规则
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ForwardRuleOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create group
+      tags:
+      - Firewall
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - source_port
+        formatEN: update port forward rules [source_port]
+        formatZH: 更新端口转发规则 [source_port]
+        paramKeys: []
+  /hosts/firewall/ip:
+    post:
+      consumes:
+      - application/json
+      description: 创建防火墙 IP 规则
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.AddrRuleOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create group
+      tags:
+      - Firewall
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - strategy
+        - address
+        formatEN: create address rules [strategy][address]
+        formatZH: 添加 ip 规则 [strategy] [address]
+        paramKeys: []
+  /hosts/firewall/operate:
+    post:
+      consumes:
+      - application/json
+      description: 修改防火墙状态
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.FirewallOperation'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page firewall status
+      tags:
+      - Firewall
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - operation
+        formatEN: '[operation] firewall'
+        formatZH: '[operation] 防火墙'
+        paramKeys: []
+  /hosts/firewall/port:
+    post:
+      consumes:
+      - application/json
+      description: 创建防火墙端口规则
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PortRuleOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create group
+      tags:
+      - Firewall
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - port
+        - strategy
+        formatEN: create port rules [strategy][port]
+        formatZH: 添加端口规则 [strategy] [port]
+        paramKeys: []
+  /hosts/firewall/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取防火墙规则列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.RuleSearch'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page firewall rules
+      tags:
+      - Firewall
+  /hosts/firewall/update/addr:
+    post:
+      consumes:
+      - application/json
+      description: 更新 ip 防火墙规则
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.AddrRuleUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create group
+      tags:
+      - Firewall
+  /hosts/firewall/update/description:
+    post:
+      consumes:
+      - application/json
+      description: 更新防火墙描述
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.UpdateFirewallDescription'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update rule description
+      tags:
+      - Firewall
+  /hosts/firewall/update/port:
+    post:
+      consumes:
+      - application/json
+      description: 更新端口防火墙规则
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PortRuleUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create group
+      tags:
+      - Firewall
+  /hosts/monitor/clean:
+    post:
+      description: 清空监控数据
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Clean monitor datas
+      tags:
+      - Monitor
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: clean monitor datas
+        formatZH: 清空监控数据
+        paramKeys: []
+  /hosts/monitor/search:
+    post:
+      description: 获取监控数据
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.MonitorSearch'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load monitor datas
+      tags:
+      - Monitor
+  /hosts/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取主机列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchHostWithPage'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.HostTree'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Page host
+      tags:
+      - Host
+  /hosts/test/byid/:id:
+    post:
+      consumes:
+      - application/json
+      description: 测试主机连接
+      parameters:
+      - description: request
+        in: path
+        name: id
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: boolean
+      security:
+      - ApiKeyAuth: []
+      summary: Test host conn by host id
+      tags:
+      - Host
+  /hosts/test/byinfo:
+    post:
+      consumes:
+      - application/json
+      description: 测试主机连接
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.HostConnTest'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Test host conn by info
+      tags:
+      - Host
+  /hosts/tree:
+    post:
+      consumes:
+      - application/json
+      description: 加载主机树
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchForTree'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.HostTree'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Load host tree
+      tags:
+      - Host
+  /hosts/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新主机
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.HostOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update host
+      tags:
+      - Host
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - addr
+        formatEN: update host [name][addr]
+        formatZH: 更新主机信息 [name][addr]
+        paramKeys: []
+  /hosts/update/group:
+    post:
+      consumes:
+      - application/json
+      description: 切换分组
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ChangeHostGroup'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update host group
+      tags:
+      - Host
+      x-panel-log:
+        BeforeFunctions:
+        - db: hosts
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: addr
+          output_value: addr
+        bodyKeys:
+        - id
+        - group
+        formatEN: change host [addr] group => [group]
+        formatZH: 切换主机[addr]分组 => [group]
+        paramKeys: []
+  /logs/clean:
+    post:
+      consumes:
+      - application/json
+      description: 清空操作日志
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.CleanLog'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Clean operation logs
+      tags:
+      - Logs
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - logType
+        formatEN: Clean the [logType] log information
+        formatZH: 清空 [logType] 日志信息
+        paramKeys: []
+  /logs/login:
+    post:
+      consumes:
+      - application/json
+      description: 获取系统登录日志列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchLgLogWithPage'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page login logs
+      tags:
+      - Logs
+  /logs/operation:
+    post:
+      consumes:
+      - application/json
+      description: 获取系统操作日志列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchOpLogWithPage'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page operation logs
+      tags:
+      - Logs
+  /logs/system:
+    post:
+      description: 获取系统日志
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load system logs
+      tags:
+      - Logs
+  /logs/system/files:
+    get:
+      description: 获取系统日志文件列表
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load system log files
+      tags:
+      - Logs
+  /openresty:
+    get:
+      description: 获取 OpenResty 配置信息
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.FileInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load OpenResty conf
+      tags:
+      - OpenResty
+  /openresty/clear:
+    post:
+      description: 清理 OpenResty 代理缓存
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Clear OpenResty proxy cache
+      tags:
+      - OpenResty
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: Clear nginx proxy cache
+        formatZH: 清理 Openresty 代理缓存
+        paramKeys: []
+  /openresty/file:
+    post:
+      consumes:
+      - application/json
+      description: 上传更新 OpenResty 配置文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxConfigFileUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update OpenResty conf by upload file
+      tags:
+      - OpenResty
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: Update nginx conf
+        formatZH: 更新 nginx 配置
+        paramKeys: []
+  /openresty/scope:
+    post:
+      consumes:
+      - application/json
+      description: 获取部分 OpenResty 配置信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxScopeReq'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/response.NginxParam'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Load partial OpenResty conf
+      tags:
+      - OpenResty
+  /openresty/status:
+    get:
+      description: 获取 OpenResty 状态信息
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.NginxStatus'
+      security:
+      - ApiKeyAuth: []
+      summary: Load OpenResty status info
+      tags:
+      - OpenResty
+  /openresty/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新 OpenResty 配置信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxConfigUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update OpenResty conf
+      tags:
+      - OpenResty
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: websiteId
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - websiteId
+        formatEN: Update nginx conf [domain]
+        formatZH: 更新 nginx 配置 [domain]
+        paramKeys: []
+  /process/stop:
+    post:
+      description: 停止进程
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.ProcessReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Stop Process
+      tags:
+      - Process
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - PID
+        formatEN: 结束进程 [PID]
+        formatZH: 结束进程 [PID]
+        paramKeys: []
+  /runtimes:
+    post:
+      consumes:
+      - application/json
+      description: 创建运行环境
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.RuntimeCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create runtime
+      tags:
+      - Runtime
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: Create runtime [name]
+        formatZH: 创建运行环境 [name]
+        paramKeys: []
+  /runtimes/:id:
+    get:
+      consumes:
+      - application/json
+      description: 获取运行环境
+      parameters:
+      - description: request
+        in: path
+        name: id
+        required: true
+        type: string
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get runtime
+      tags:
+      - Runtime
+  /runtimes/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除运行环境
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.RuntimeDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete runtime
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - id
+        formatEN: Delete website [name]
+        formatZH: 删除网站 [name]
+        paramKeys: []
+  /runtimes/node/modules:
+    post:
+      consumes:
+      - application/json
+      description: 获取 Node 项目的 modules
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NodeModuleReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get Node modules
+      tags:
+      - Runtime
+  /runtimes/node/modules/operate:
+    post:
+      consumes:
+      - application/json
+      description: 操作 Node 项目 modules
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NodeModuleReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Operate Node modules
+      tags:
+      - Runtime
+  /runtimes/node/package:
+    post:
+      consumes:
+      - application/json
+      description: 获取 Node 项目的 scripts
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NodePackageReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get Node package scripts
+      tags:
+      - Runtime
+  /runtimes/operate:
+    post:
+      consumes:
+      - application/json
+      description: 操作运行环境
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.RuntimeOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Operate runtime
+      tags:
+      - Runtime
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - id
+        formatEN: Operate runtime [name]
+        formatZH: 操作运行环境 [name]
+        paramKeys: []
+  /runtimes/php/extensions:
+    post:
+      consumes:
+      - application/json
+      description: Create Extensions
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.PHPExtensionsCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create Extensions
+      tags:
+      - PHP Extensions
+  /runtimes/php/extensions/del:
+    post:
+      consumes:
+      - application/json
+      description: Delete Extensions
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.PHPExtensionsDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete Extensions
+      tags:
+      - PHP Extensions
+  /runtimes/php/extensions/search:
+    post:
+      consumes:
+      - application/json
+      description: Page Extensions
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.PHPExtensionsSearch'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/response.PHPExtensionsDTO'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Page Extensions
+      tags:
+      - PHP Extensions
+  /runtimes/php/extensions/update:
+    post:
+      consumes:
+      - application/json
+      description: Update Extensions
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.PHPExtensionsUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update Extensions
+      tags:
+      - PHP Extensions
+  /runtimes/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取运行环境列表
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.RuntimeSearch'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: List runtimes
+      tags:
+      - Runtime
+  /runtimes/sync:
+    post:
+      consumes:
+      - application/json
+      description: 同步运行环境状态
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Sync runtime status
+      tags:
+      - Runtime
+  /runtimes/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新运行环境
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.RuntimeUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update runtime
+      tags:
+      - Runtime
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: Update runtime [name]
+        formatZH: 更新运行环境 [name]
+        paramKeys: []
+  /settings/backup:
+    post:
+      consumes:
+      - application/json
+      description: 创建备份账号
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BackupOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create backup account
+      tags:
+      - Backup Account
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - type
+        formatEN: create backup account [type]
+        formatZH: 创建备份账号 [type]
+        paramKeys: []
+  /settings/backup/backup:
+    post:
+      consumes:
+      - application/json
+      description: 备份系统数据
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.CommonBackup'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Backup system data
+      tags:
+      - Backup Account
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - type
+        - name
+        - detailName
+        formatEN: backup [type] data [name][detailName]
+        formatZH: 备份 [type] 数据 [name][detailName]
+        paramKeys: []
+  /settings/backup/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除备份账号
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperateByID'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete backup account
+      tags:
+      - Backup Account
+      x-panel-log:
+        BeforeFunctions:
+        - db: backup_accounts
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: type
+          output_value: types
+        bodyKeys:
+        - id
+        formatEN: delete backup account [types]
+        formatZH: 删除备份账号 [types]
+        paramKeys: []
+  /settings/backup/onedrive:
+    get:
+      consumes:
+      - application/json
+      description: 获取 OneDrive 信息
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.OneDriveInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load OneDrive info
+      tags:
+      - Backup Account
+  /settings/backup/record/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除备份记录
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BatchDeleteReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete backup record
+      tags:
+      - Backup Account
+      x-panel-log:
+        BeforeFunctions:
+        - db: backup_records
+          input_column: id
+          input_value: ids
+          isList: true
+          output_column: file_name
+          output_value: files
+        bodyKeys:
+        - ids
+        formatEN: delete backup records [files]
+        formatZH: 删除备份记录 [files]
+        paramKeys: []
+  /settings/backup/record/download:
+    post:
+      consumes:
+      - application/json
+      description: 下载备份记录
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.DownloadRecord'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Download backup record
+      tags:
+      - Backup Account
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - source
+        - fileName
+        formatEN: download backup records [source][fileName]
+        formatZH: 下载备份记录 [source][fileName]
+        paramKeys: []
+  /settings/backup/record/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取备份记录列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.RecordSearch'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Page backup records
+      tags:
+      - Backup Account
+  /settings/backup/record/search/bycronjob:
+    post:
+      consumes:
+      - application/json
+      description: 通过计划任务获取备份记录列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.RecordSearchByCronjob'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Page backup records by cronjob
+      tags:
+      - Backup Account
+  /settings/backup/recover:
+    post:
+      consumes:
+      - application/json
+      description: 恢复系统数据
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.CommonRecover'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Recover system data
+      tags:
+      - Backup Account
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - type
+        - name
+        - detailName
+        - file
+        formatEN: recover [type] data [name][detailName] from [file]
+        formatZH: 从 [file] 恢复 [type] 数据 [name][detailName]
+        paramKeys: []
+  /settings/backup/recover/byupload:
+    post:
+      consumes:
+      - application/json
+      description: 从上传恢复系统数据
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.CommonRecover'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Recover system data by upload
+      tags:
+      - Backup Account
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - type
+        - name
+        - detailName
+        - file
+        formatEN: recover [type] data [name][detailName] from [file]
+        formatZH: 从 [file] 恢复 [type] 数据 [name][detailName]
+        paramKeys: []
+  /settings/backup/refresh/onedrive:
+    post:
+      description: 刷新 OneDrive token
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Refresh OneDrive token
+      tags:
+      - Backup Account
+  /settings/backup/search:
+    get:
+      description: 获取备份账号列表
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/dto.BackupInfo'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List backup accounts
+      tags:
+      - Backup Account
+    post:
+      consumes:
+      - application/json
+      description: 获取 bucket 列表
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ForBuckets'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              type: string
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List buckets
+      tags:
+      - Backup Account
+  /settings/backup/search/files:
+    post:
+      consumes:
+      - application/json
+      description: 获取备份账号内文件列表
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BackupSearchFile'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              type: string
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List files from backup accounts
+      tags:
+      - Backup Account
+  /settings/backup/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新备份账号信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BackupOperate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update backup account
+      tags:
+      - Backup Account
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - type
+        formatEN: update backup account [types]
+        formatZH: 更新备份账号 [types]
+        paramKeys: []
+  /settings/basedir:
+    get:
+      description: 获取安装根目录
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: string
+      security:
+      - ApiKeyAuth: []
+      summary: Load local backup dir
+      tags:
+      - System Setting
+  /settings/bind/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新系统监听信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BindInfo'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update system bind info
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - ipv6
+        - bindAddress
+        formatEN: 'update system bind info => ipv6: [ipv6], 监听 IP: [bindAddress]'
+        formatZH: '修改系统监听信息 => ipv6: [ipv6], 监听 IP: [bindAddress]'
+        paramKeys: []
+  /settings/expired/handle:
+    post:
+      consumes:
+      - application/json
+      description: 重置过期系统登录密码
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PasswordUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Reset system password expired
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: reset an expired Password
+        formatZH: 重置过期密码
+        paramKeys: []
+  /settings/interface:
+    get:
+      consumes:
+      - application/json
+      description: 获取系统地址信息
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load system address
+      tags:
+      - System Setting
+  /settings/menu/update:
+    post:
+      consumes:
+      - application/json
+      description: 隐藏高级功能菜单
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SettingUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update system setting
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: Hide advanced feature menu.
+        formatZH: 隐藏高级功能菜单
+        paramKeys: []
+  /settings/mfa:
+    post:
+      consumes:
+      - application/json
+      description: 获取 mfa 信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.MfaCredential'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/mfa.Otp'
+      security:
+      - ApiKeyAuth: []
+      summary: Load mfa info
+      tags:
+      - System Setting
+  /settings/mfa/bind:
+    post:
+      consumes:
+      - application/json
+      description: Mfa 绑定
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.MfaCredential'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Bind mfa
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: bind mfa
+        formatZH: mfa 绑定
+        paramKeys: []
+  /settings/password/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新系统登录密码
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PasswordUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update system password
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: update system password
+        formatZH: 修改系统密码
+        paramKeys: []
+  /settings/port/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新系统端口
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PortUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update system port
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - serverPort
+        formatEN: update system port => [serverPort]
+        formatZH: 修改系统端口 => [serverPort]
+        paramKeys: []
+  /settings/proxy/update:
+    post:
+      consumes:
+      - application/json
+      description: 服务器代理配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ProxyUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update proxy setting
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - proxyUrl
+        - proxyPort
+        formatEN: set proxy [proxyPort]:[proxyPort].
+        formatZH: 服务器代理配置 [proxyPort]:[proxyPort]
+        paramKeys: []
+  /settings/search:
+    post:
+      description: 加载系统配置信息
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.SettingInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load system setting info
+      tags:
+      - System Setting
+  /settings/search/available:
+    get:
+      description: 获取系统可用状态
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load system available status
+      tags:
+      - System Setting
+  /settings/snapshot:
+    post:
+      consumes:
+      - application/json
+      description: 创建系统快照
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SnapshotCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create system snapshot
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - from
+        - description
+        formatEN: Create system backup [description] to [from]
+        formatZH: 创建系统快照 [description] 到 [from]
+        paramKeys: []
+  /settings/snapshot/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除系统快照
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SnapshotBatchDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete system backup
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions:
+        - db: snapshots
+          input_column: id
+          input_value: ids
+          isList: true
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - ids
+        formatEN: Delete system backup [name]
+        formatZH: 删除系统快照 [name]
+        paramKeys: []
+  /settings/snapshot/description/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新快照描述信息
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.UpdateDescription'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update snapshot description
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions:
+        - db: snapshots
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        - description
+        formatEN: The description of the snapshot [name] is modified => [description]
+        formatZH: 快照 [name] 描述信息修改 [description]
+        paramKeys: []
+  /settings/snapshot/import:
+    post:
+      consumes:
+      - application/json
+      description: 导入已有快照
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SnapshotImport'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Import system snapshot
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - from
+        - names
+        formatEN: Sync system snapshots [names] from [from]
+        formatZH: 从 [from] 同步系统快照 [names]
+        paramKeys: []
+  /settings/snapshot/recover:
+    post:
+      consumes:
+      - application/json
+      description: 从系统快照恢复
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SnapshotRecover'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Recover system backup
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions:
+        - db: snapshots
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: Recover from system backup [name]
+        formatZH: 从系统快照 [name] 恢复
+        paramKeys: []
+  /settings/snapshot/rollback:
+    post:
+      consumes:
+      - application/json
+      description: 从系统快照回滚
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SnapshotRecover'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Rollback system backup
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions:
+        - db: snapshots
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: Rollback from system backup [name]
+        formatZH: 从系统快照 [name] 回滚
+        paramKeys: []
+  /settings/snapshot/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取系统快照列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchWithPage'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page system snapshot
+      tags:
+      - System Setting
+  /settings/snapshot/status:
+    post:
+      consumes:
+      - application/json
+      description: 获取快照状态
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperateByID'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load Snapshot status
+      tags:
+      - System Setting
+  /settings/ssl/download:
+    post:
+      description: 下载证书
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Download system cert
+      tags:
+      - System Setting
+  /settings/ssl/info:
+    get:
+      description: 获取证书信息
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.SettingInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load system cert info
+      tags:
+      - System Setting
+  /settings/ssl/update:
+    post:
+      consumes:
+      - application/json
+      description: 修改系统 ssl 登录
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SSLUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update system ssl
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - ssl
+        formatEN: update system ssl => [ssl]
+        formatZH: 修改系统 ssl => [ssl]
+        paramKeys: []
+  /settings/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新系统配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SettingUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update system setting
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - key
+        - value
+        formatEN: update system setting [key] => [value]
+        formatZH: 修改系统配置 [key] => [value]
+        paramKeys: []
+  /settings/upgrade:
+    get:
+      consumes:
+      - application/json
+      description: 获取版本 release notes
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.Upgrade'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load release notes by version
+      tags:
+      - System Setting
+    post:
+      consumes:
+      - application/json
+      description: 系统更新
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.Upgrade'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Upgrade
+      tags:
+      - System Setting
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - version
+        formatEN: upgrade system => [version]
+        formatZH: 更新系统 => [version]
+        paramKeys: []
+  /toolbox/clam:
+    post:
+      consumes:
+      - application/json
+      description: 创建扫描规则
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ClamCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create clam
+      tags:
+      - Clam
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - path
+        formatEN: create clam [name][path]
+        formatZH: 创建扫描规则 [name][path]
+        paramKeys: []
+  /toolbox/clam/base:
+    get:
+      consumes:
+      - application/json
+      description: 获取 Clam 基础信息
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.ClamBaseInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load clam base info
+      tags:
+      - Clam
+  /toolbox/clam/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除扫描规则
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ClamDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete clam
+      tags:
+      - Clam
+      x-panel-log:
+        BeforeFunctions:
+        - db: clams
+          input_column: id
+          input_value: ids
+          isList: true
+          output_column: name
+          output_value: names
+        bodyKeys:
+        - ids
+        formatEN: delete clam [names]
+        formatZH: 删除扫描规则 [names]
+        paramKeys: []
+  /toolbox/clam/file/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取扫描文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ClamFileReq'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Load clam file
+      tags:
+      - Clam
+  /toolbox/clam/file/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新病毒扫描配置文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.UpdateByNameAndFile'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update clam file
+      tags:
+      - Clam
+  /toolbox/clam/handle:
+    post:
+      consumes:
+      - application/json
+      description: 执行病毒扫描
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperateByID'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Handle clam scan
+      tags:
+      - Clam
+      x-panel-log:
+        BeforeFunctions:
+        - db: clams
+          input_column: id
+          input_value: id
+          isList: true
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: handle clam scan [name]
+        formatZH: 执行病毒扫描 [name]
+        paramKeys: []
+  /toolbox/clam/operate:
+    post:
+      consumes:
+      - application/json
+      description: 修改 Clam 状态
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.Operate'
+      responses: {}
+      security:
+      - ApiKeyAuth: []
+      summary: Operate Clam
+      tags:
+      - Clam
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - operation
+        formatEN: '[operation] FTP'
+        formatZH: '[operation] Clam'
+        paramKeys: []
+  /toolbox/clam/record/clean:
+    post:
+      consumes:
+      - application/json
+      description: 清空扫描报告
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperateByID'
+      responses: {}
+      security:
+      - ApiKeyAuth: []
+      summary: Clean clam record
+      tags:
+      - Clam
+      x-panel-log:
+        BeforeFunctions:
+        - db: clams
+          input_column: id
+          input_value: id
+          isList: true
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: clean clam record [name]
+        formatZH: 清空扫描报告 [name]
+        paramKeys: []
+  /toolbox/clam/record/log:
+    post:
+      consumes:
+      - application/json
+      description: 获取扫描结果详情
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ClamLogReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load clam record detail
+      tags:
+      - Clam
+  /toolbox/clam/record/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取扫描结果列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ClamLogSearch'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page clam record
+      tags:
+      - Clam
+  /toolbox/clam/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取扫描规则列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchWithPage'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page clam
+      tags:
+      - Clam
+  /toolbox/clam/status/update:
+    post:
+      consumes:
+      - application/json
+      description: 修改扫描规则状态
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ClamUpdateStatus'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update clam status
+      tags:
+      - Clam
+      x-panel-log:
+        BeforeFunctions:
+        - db: clams
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        - status
+        formatEN: change the status of clam [name] to [status].
+        formatZH: 修改扫描规则 [name] 状态为 [status]
+        paramKeys: []
+  /toolbox/clam/update:
+    post:
+      consumes:
+      - application/json
+      description: 修改扫描规则
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ClamUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update clam
+      tags:
+      - Clam
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        - path
+        formatEN: update clam [name][path]
+        formatZH: 修改扫描规则 [name][path]
+        paramKeys: []
+  /toolbox/clean:
+    post:
+      consumes:
+      - application/json
+      description: 清理系统垃圾文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          items:
+            $ref: '#/definitions/dto.Clean'
+          type: array
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Clean system
+      tags:
+      - Device
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: Clean system junk files
+        formatZH: 清理系统垃圾文件
+        paramKeys: []
+  /toolbox/device/base:
+    post:
+      description: 获取设备基础信息
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.DeviceBaseInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load device base info
+      tags:
+      - Device
+  /toolbox/device/check/dns:
+    post:
+      consumes:
+      - application/json
+      description: 检查系统 DNS 配置可用性
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SettingUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Check device DNS conf
+      tags:
+      - Device
+  /toolbox/device/conf:
+    post:
+      consumes:
+      - application/json
+      description: 获取系统配置文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.OperationWithName'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: load conf
+      tags:
+      - Device
+  /toolbox/device/update/byconf:
+    post:
+      consumes:
+      - application/json
+      description: 通过文件修改配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.UpdateByNameAndFile'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update device conf by file
+      tags:
+      - Device
+  /toolbox/device/update/conf:
+    post:
+      consumes:
+      - application/json
+      description: 修改系统参数
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SettingUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update device
+      tags:
+      - Device
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - key
+        - value
+        formatEN: update device conf [key] => [value]
+        formatZH: 修改主机参数 [key] => [value]
+        paramKeys: []
+  /toolbox/device/update/host:
+    post:
+      description: 修改系统 hosts
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update device hosts
+      tags:
+      - Device
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - key
+        - value
+        formatEN: update device host [key] => [value]
+        formatZH: 修改主机 Host [key] => [value]
+        paramKeys: []
+  /toolbox/device/update/passwd:
+    post:
+      consumes:
+      - application/json
+      description: 修改系统密码
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.ChangePasswd'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update device passwd
+      tags:
+      - Device
+  /toolbox/device/update/swap:
+    post:
+      consumes:
+      - application/json
+      description: 修改系统 Swap
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SwapHelper'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update device swap
+      tags:
+      - Device
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - operate
+        - path
+        formatEN: '[operate] device swap [path]'
+        formatZH: '[operate] 主机 swap [path]'
+        paramKeys: []
+  /toolbox/device/zone/options:
+    get:
+      consumes:
+      - application/json
+      description: 获取系统可用时区选项
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: Array
+      security:
+      - ApiKeyAuth: []
+      summary: list time zone options
+      tags:
+      - Device
+  /toolbox/fail2ban/base:
+    get:
+      description: 获取 Fail2ban 基础信息
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.Fail2BanBaseInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load fail2ban base info
+      tags:
+      - Fail2ban
+  /toolbox/fail2ban/load/conf:
+    get:
+      consumes:
+      - application/json
+      description: 获取 fail2ban 配置文件
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Load fail2ban conf
+      tags:
+      - Fail2ban
+  /toolbox/fail2ban/operate:
+    post:
+      consumes:
+      - application/json
+      description: 修改 Fail2ban 状态
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.Operate'
+      responses: {}
+      security:
+      - ApiKeyAuth: []
+      summary: Operate fail2ban
+      tags:
+      - Fail2ban
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - operation
+        formatEN: '[operation] Fail2ban'
+        formatZH: '[operation] Fail2ban'
+        paramKeys: []
+  /toolbox/fail2ban/operate/sshd:
+    post:
+      consumes:
+      - application/json
+      description: 配置 sshd
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.Operate'
+      responses: {}
+      security:
+      - ApiKeyAuth: []
+      summary: Operate sshd of fail2ban
+      tags:
+      - Fail2ban
+  /toolbox/fail2ban/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取 Fail2ban ip
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.Fail2BanSearch'
+      responses:
+        "200":
+          description: OK
+          schema:
+            type: Array
+      security:
+      - ApiKeyAuth: []
+      summary: Page fail2ban ip list
+      tags:
+      - Fail2ban
+  /toolbox/fail2ban/update:
+    post:
+      consumes:
+      - application/json
+      description: 修改 Fail2ban 配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.Fail2BanUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update fail2ban conf
+      tags:
+      - Fail2ban
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - key
+        - value
+        formatEN: update fail2ban conf [key] => [value]
+        formatZH: 修改 Fail2ban 配置 [key] => [value]
+        paramKeys: []
+  /toolbox/fail2ban/update/byconf:
+    post:
+      consumes:
+      - application/json
+      description: 通过文件修改 fail2ban 配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.UpdateByFile'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update fail2ban conf by file
+      tags:
+      - Fail2ban
+  /toolbox/ftp:
+    post:
+      consumes:
+      - application/json
+      description: 创建 FTP 账户
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.FtpCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create FTP user
+      tags:
+      - FTP
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - user
+        - path
+        formatEN: create FTP [user][path]
+        formatZH: 创建 FTP 账户 [user][path]
+        paramKeys: []
+  /toolbox/ftp/base:
+    get:
+      description: 获取 FTP 基础信息
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.FtpBaseInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Load FTP base info
+      tags:
+      - FTP
+  /toolbox/ftp/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除 FTP 账户
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BatchDeleteReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete FTP user
+      tags:
+      - FTP
+      x-panel-log:
+        BeforeFunctions:
+        - db: ftps
+          input_column: id
+          input_value: ids
+          isList: true
+          output_column: user
+          output_value: users
+        bodyKeys:
+        - ids
+        formatEN: delete FTP users [users]
+        formatZH: 删除 FTP 账户 [users]
+        paramKeys: []
+  /toolbox/ftp/log/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取 FTP 操作日志
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.FtpLogSearch'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Load FTP operation log
+      tags:
+      - FTP
+  /toolbox/ftp/operate:
+    post:
+      consumes:
+      - application/json
+      description: 修改 FTP 状态
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.Operate'
+      responses: {}
+      security:
+      - ApiKeyAuth: []
+      summary: Operate FTP
+      tags:
+      - FTP
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - operation
+        formatEN: '[operation] FTP'
+        formatZH: '[operation] FTP'
+        paramKeys: []
+  /toolbox/ftp/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取 FTP 账户列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.SearchWithPage'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page FTP user
+      tags:
+      - FTP
+  /toolbox/ftp/sync:
+    post:
+      consumes:
+      - application/json
+      description: 同步 FTP 账户
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.BatchDeleteReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Sync FTP user
+      tags:
+      - FTP
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: sync FTP users
+        formatZH: 同步 FTP 账户
+        paramKeys: []
+  /toolbox/ftp/update:
+    post:
+      consumes:
+      - application/json
+      description: 修改 FTP 账户
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.FtpUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update FTP user
+      tags:
+      - FTP
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - user
+        - path
+        formatEN: update FTP [user][path]
+        formatZH: 修改 FTP 账户 [user][path]
+        paramKeys: []
+  /toolbox/scan:
+    post:
+      description: 扫描系统垃圾文件
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Scan system
+      tags:
+      - Device
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys: []
+        formatEN: scan System Junk Files
+        formatZH: 扫描系统垃圾文件
+        paramKeys: []
+  /websites:
+    post:
+      consumes:
+      - application/json
+      description: 创建网站
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create website
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - primaryDomain
+        formatEN: Create website [primaryDomain]
+        formatZH: 创建网站 [primaryDomain]
+        paramKeys: []
+  /websites/:id:
+    get:
+      consumes:
+      - application/json
+      description: 通过 id 查询网站
+      parameters:
+      - description: request
+        in: path
+        name: id
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.WebsiteDTO'
+      security:
+      - ApiKeyAuth: []
+      summary: Search website by id
+      tags:
+      - Website
+  /websites/:id/config/:type:
+    get:
+      consumes:
+      - application/json
+      description: 通过 id 查询网站 nginx
+      parameters:
+      - description: request
+        in: path
+        name: id
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.FileInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Search website nginx by id
+      tags:
+      - Website Nginx
+  /websites/:id/https:
+    get:
+      consumes:
+      - application/json
+      description: 获取 https 配置
+      parameters:
+      - description: request
+        in: path
+        name: id
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.WebsiteHTTPS'
+      security:
+      - ApiKeyAuth: []
+      summary: Load https conf
+      tags:
+      - Website HTTPS
+    post:
+      consumes:
+      - application/json
+      description: 更新 https 配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteHTTPSOp'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.WebsiteHTTPS'
+      security:
+      - ApiKeyAuth: []
+      summary: Update https conf
+      tags:
+      - Website HTTPS
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: websiteId
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - websiteId
+        formatEN: Update website https [domain] conf
+        formatZH: 更新网站 [domain] https 配置
+        paramKeys: []
+  /websites/acme:
+    post:
+      consumes:
+      - application/json
+      description: 创建网站 acme
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteAcmeAccountCreate'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.WebsiteAcmeAccountDTO'
+      security:
+      - ApiKeyAuth: []
+      summary: Create website acme account
+      tags:
+      - Website Acme
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - email
+        formatEN: Create website acme [email]
+        formatZH: 创建网站 acme [email]
+        paramKeys: []
+  /websites/acme/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除网站 acme
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteResourceReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete website acme account
+      tags:
+      - Website Acme
+      x-panel-log:
+        BeforeFunctions:
+        - db: website_acme_accounts
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: email
+          output_value: email
+        bodyKeys:
+        - id
+        formatEN: Delete website acme [email]
+        formatZH: 删除网站 acme [email]
+        paramKeys: []
+  /websites/acme/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取网站 acme 列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PageInfo'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page website acme accounts
+      tags:
+      - Website Acme
+  /websites/auths:
+    post:
+      consumes:
+      - application/json
+      description: 获取密码访问配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxAuthReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get AuthBasic conf
+      tags:
+      - Website
+  /websites/auths/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新密码访问配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxAuthUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get AuthBasic conf
+      tags:
+      - Website
+  /websites/ca:
+    post:
+      consumes:
+      - application/json
+      description: 创建网站 ca
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteCACreate'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/request.WebsiteCACreate'
+      security:
+      - ApiKeyAuth: []
+      summary: Create website ca
+      tags:
+      - Website CA
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: Create website ca [name]
+        formatZH: 创建网站 ca [name]
+        paramKeys: []
+  /websites/ca/{id}:
+    get:
+      consumes:
+      - application/json
+      description: 获取网站 ca
+      parameters:
+      - description: id
+        in: path
+        name: id
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.WebsiteCADTO'
+      security:
+      - ApiKeyAuth: []
+      summary: Get website ca
+      tags:
+      - Website CA
+  /websites/ca/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除网站 ca
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteCommonReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete website ca
+      tags:
+      - Website CA
+      x-panel-log:
+        BeforeFunctions:
+        - db: website_cas
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: Delete website ca [name]
+        formatZH: 删除网站 ca [name]
+        paramKeys: []
+  /websites/ca/download:
+    post:
+      consumes:
+      - application/json
+      description: 下载 CA 证书文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteResourceReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Download CA file
+      tags:
+      - Website CA
+      x-panel-log:
+        BeforeFunctions:
+        - db: website_cas
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: download ca file [name]
+        formatZH: 下载 CA 证书文件 [name]
+        paramKeys: []
+  /websites/ca/obtain:
+    post:
+      consumes:
+      - application/json
+      description: 自签 SSL 证书
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteCAObtain'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Obtain SSL
+      tags:
+      - Website CA
+      x-panel-log:
+        BeforeFunctions:
+        - db: website_cas
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: Obtain SSL [name]
+        formatZH: 自签 SSL 证书 [name]
+        paramKeys: []
+  /websites/ca/renew:
+    post:
+      consumes:
+      - application/json
+      description: 续签 SSL 证书
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteCAObtain'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Obtain SSL
+      tags:
+      - Website CA
+      x-panel-log:
+        BeforeFunctions:
+        - db: website_cas
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: Obtain SSL [name]
+        formatZH: 自签 SSL 证书 [name]
+        paramKeys: []
+  /websites/ca/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取网站 ca 列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteCASearch'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page website ca
+      tags:
+      - Website CA
+  /websites/check:
+    post:
+      consumes:
+      - application/json
+      description: 网站创建前检查
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteInstallCheckReq'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/response.WebsitePreInstallCheck'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Check before create website
+      tags:
+      - Website
+  /websites/config:
+    post:
+      consumes:
+      - application/json
+      description: 获取 nginx 配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxScopeReq'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.WebsiteNginxConfig'
+      security:
+      - ApiKeyAuth: []
+      summary: Load nginx conf
+      tags:
+      - Website Nginx
+  /websites/config/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新 nginx 配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxConfigUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update nginx conf
+      tags:
+      - Website Nginx
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: websiteId
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - websiteId
+        formatEN: Nginx conf update [domain]
+        formatZH: nginx 配置修改 [domain]
+        paramKeys: []
+  /websites/default/html/:type:
+    get:
+      consumes:
+      - application/json
+      description: 获取默认 html
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.FileInfo'
+      security:
+      - ApiKeyAuth: []
+      summary: Get default html
+      tags:
+      - Website
+  /websites/default/html/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新默认 html
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteHtmlUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update default html
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - type
+        formatEN: Update default html
+        formatZH: 更新默认 html
+        paramKeys: []
+  /websites/default/server:
+    post:
+      consumes:
+      - application/json
+      description: 操作网站日志
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteDefaultUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Change default server
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - id
+        - operate
+        formatEN: Change default server => [domain]
+        formatZH: 修改默认 server => [domain]
+        paramKeys: []
+  /websites/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除网站
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete website
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - id
+        formatEN: Delete website [domain]
+        formatZH: 删除网站 [domain]
+        paramKeys: []
+  /websites/dir:
+    post:
+      consumes:
+      - application/json
+      description: 获取网站目录配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteCommonReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get website dir
+      tags:
+      - Website
+  /websites/dir/permission:
+    post:
+      consumes:
+      - application/json
+      description: 更新网站目录权限
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteUpdateDirPermission'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update Site Dir permission
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - id
+        formatEN: Update  domain [domain] dir permission
+        formatZH: 更新网站 [domain] 目录权限
+        paramKeys: []
+  /websites/dir/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新网站目录
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteUpdateDir'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update Site Dir
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - id
+        formatEN: Update  domain [domain] dir
+        formatZH: 更新网站 [domain] 目录
+        paramKeys: []
+  /websites/dns:
+    post:
+      consumes:
+      - application/json
+      description: 创建网站 dns
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteDnsAccountCreate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Create website dns account
+      tags:
+      - Website DNS
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: Create website dns [name]
+        formatZH: 创建网站 dns [name]
+        paramKeys: []
+  /websites/dns/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除网站 dns
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteResourceReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete website dns account
+      tags:
+      - Website DNS
+      x-panel-log:
+        BeforeFunctions:
+        - db: website_dns_accounts
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: name
+          output_value: name
+        bodyKeys:
+        - id
+        formatEN: Delete website dns [name]
+        formatZH: 删除网站 dns [name]
+        paramKeys: []
+  /websites/dns/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取网站 dns 列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/dto.PageInfo'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page website dns accounts
+      tags:
+      - Website DNS
+  /websites/dns/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新网站 dns
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteDnsAccountUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update website dns account
+      tags:
+      - Website DNS
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - name
+        formatEN: Update website dns [name]
+        formatZH: 更新网站 dns [name]
+        paramKeys: []
+  /websites/domains:
+    post:
+      consumes:
+      - application/json
+      description: 创建网站域名
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteDomainCreate'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/model.WebsiteDomain'
+      security:
+      - ApiKeyAuth: []
+      summary: Create website domain
+      tags:
+      - Website Domain
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - domain
+        formatEN: Create domain [domain]
+        formatZH: 创建域名 [domain]
+        paramKeys: []
+  /websites/domains/:websiteId:
+    get:
+      consumes:
+      - application/json
+      description: 通过网站 id 查询域名
+      parameters:
+      - description: request
+        in: path
+        name: websiteId
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/model.WebsiteDomain'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Search website domains by websiteId
+      tags:
+      - Website Domain
+  /websites/domains/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除网站域名
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteDomainDelete'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete website domain
+      tags:
+      - Website Domain
+      x-panel-log:
+        BeforeFunctions:
+        - db: website_domains
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: domain
+          output_value: domain
+        bodyKeys:
+        - id
+        formatEN: Delete domain [domain]
+        formatZH: 删除域名 [domain]
+        paramKeys: []
+  /websites/leech:
+    post:
+      consumes:
+      - application/json
+      description: 获取防盗链配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxCommonReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get AntiLeech conf
+      tags:
+      - Website
+  /websites/leech/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新防盗链配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxAntiLeechUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update AntiLeech
+      tags:
+      - Website
+  /websites/list:
+    get:
+      description: 获取网站列表
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/response.WebsiteDTO'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List websites
+      tags:
+      - Website
+  /websites/log:
+    post:
+      consumes:
+      - application/json
+      description: 操作网站日志
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteLogReq'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.WebsiteLog'
+      security:
+      - ApiKeyAuth: []
+      summary: Operate website log
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - id
+        - operate
+        formatEN: '[domain][operate] logs'
+        formatZH: '[domain][operate] 日志'
+        paramKeys: []
+  /websites/nginx/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新 网站 nginx 配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteNginxUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update website nginx conf
+      tags:
+      - Website Nginx
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - id
+        formatEN: '[domain] Nginx conf update'
+        formatZH: '[domain] Nginx 配置修改'
+        paramKeys: []
+  /websites/operate:
+    post:
+      consumes:
+      - application/json
+      description: 操作网站
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteOp'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Operate website
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - id
+        - operate
+        formatEN: '[operate] website [domain]'
+        formatZH: '[operate] 网站 [domain]'
+        paramKeys: []
+  /websites/options:
+    get:
+      description: 获取网站列表
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              type: string
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: List website names
+      tags:
+      - Website
+  /websites/php/config:
+    post:
+      consumes:
+      - application/json
+      description: 更新 网站 PHP 配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsitePHPConfigUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update website php conf
+      tags:
+      - Website PHP
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - id
+        formatEN: '[domain] PHP conf update'
+        formatZH: '[domain] PHP 配置修改'
+        paramKeys: []
+  /websites/php/config/:id:
+    get:
+      consumes:
+      - application/json
+      description: 获取网站 php 配置
+      parameters:
+      - description: request
+        in: path
+        name: id
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.PHPConfig'
+      security:
+      - ApiKeyAuth: []
+      summary: Load website php conf
+      tags:
+      - Website
+  /websites/php/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新 php 配置文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsitePHPFileUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update php conf
+      tags:
+      - Website PHP
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: websiteId
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - websiteId
+        formatEN: Nginx conf update [domain]
+        formatZH: php 配置修改 [domain]
+        paramKeys: []
+  /websites/php/version:
+    post:
+      consumes:
+      - application/json
+      description: 变更 php 版本
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsitePHPVersionReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update php version
+      tags:
+      - Website PHP
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: websiteId
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - websiteId
+        formatEN: php version update [domain]
+        formatZH: php 版本变更 [domain]
+        paramKeys: []
+  /websites/proxies:
+    post:
+      consumes:
+      - application/json
+      description: 获取反向代理配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteProxyReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get proxy conf
+      tags:
+      - Website
+  /websites/proxies/update:
+    post:
+      consumes:
+      - application/json
+      description: 修改反向代理配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteProxyConfig'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update proxy conf
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - id
+        formatEN: Update domain [domain] proxy config
+        formatZH: '修改网站 [domain] 反向代理配置 '
+        paramKeys: []
+  /websites/proxy/file:
+    post:
+      consumes:
+      - application/json
+      description: 更新反向代理文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxProxyUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update proxy file
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: websiteID
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - websiteID
+        formatEN: Nginx conf proxy file update [domain]
+        formatZH: 更新反向代理文件 [domain]
+        paramKeys: []
+  /websites/redirect:
+    post:
+      consumes:
+      - application/json
+      description: 获取重定向配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteProxyReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get redirect conf
+      tags:
+      - Website
+  /websites/redirect/file:
+    post:
+      consumes:
+      - application/json
+      description: 更新重定向文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxRedirectUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update redirect file
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: websiteID
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - websiteID
+        formatEN: Nginx conf redirect file update [domain]
+        formatZH: 更新重定向文件 [domain]
+        paramKeys: []
+  /websites/redirect/update:
+    post:
+      consumes:
+      - application/json
+      description: 修改重定向配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxRedirectReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update redirect conf
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: websiteID
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - websiteID
+        formatEN: Update domain [domain] redirect config
+        formatZH: '修改网站 [domain] 重定向理配置 '
+        paramKeys: []
+  /websites/rewrite:
+    post:
+      consumes:
+      - application/json
+      description: 获取伪静态配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxRewriteReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Get rewrite conf
+      tags:
+      - Website
+  /websites/rewrite/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新伪静态配置
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.NginxRewriteUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update rewrite conf
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions:
+        - db: websites
+          input_column: id
+          input_value: websiteID
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - websiteID
+        formatEN: Nginx conf rewrite update [domain]
+        formatZH: 伪静态配置修改 [domain]
+        paramKeys: []
+  /websites/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取网站列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteSearch'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/dto.PageResult'
+      security:
+      - ApiKeyAuth: []
+      summary: Page websites
+      tags:
+      - Website
+  /websites/ssl:
+    post:
+      consumes:
+      - application/json
+      description: 创建网站 ssl
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteSSLCreate'
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/request.WebsiteSSLCreate'
+      security:
+      - ApiKeyAuth: []
+      summary: Create website ssl
+      tags:
+      - Website SSL
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - primaryDomain
+        formatEN: Create website ssl [primaryDomain]
+        formatZH: 创建网站 ssl [primaryDomain]
+        paramKeys: []
+  /websites/ssl/:id:
+    get:
+      consumes:
+      - application/json
+      description: 通过 id 查询 ssl
+      parameters:
+      - description: request
+        in: path
+        name: id
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Search website ssl by id
+      tags:
+      - Website SSL
+  /websites/ssl/del:
+    post:
+      consumes:
+      - application/json
+      description: 删除网站 ssl
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteBatchDelReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Delete website ssl
+      tags:
+      - Website SSL
+      x-panel-log:
+        BeforeFunctions:
+        - db: website_ssls
+          input_column: id
+          input_value: ids
+          isList: true
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - ids
+        formatEN: Delete ssl [domain]
+        formatZH: 删除 ssl [domain]
+        paramKeys: []
+  /websites/ssl/download:
+    post:
+      consumes:
+      - application/json
+      description: 下载证书文件
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteResourceReq'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Download SSL  file
+      tags:
+      - Website SSL
+      x-panel-log:
+        BeforeFunctions:
+        - db: website_ssls
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - id
+        formatEN: download ssl file [domain]
+        formatZH: 下载证书文件 [domain]
+        paramKeys: []
+  /websites/ssl/obtain:
+    post:
+      consumes:
+      - application/json
+      description: 申请证书
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteSSLApply'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Apply  ssl
+      tags:
+      - Website SSL
+      x-panel-log:
+        BeforeFunctions:
+        - db: website_ssls
+          input_column: id
+          input_value: ID
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - ID
+        formatEN: apply ssl [domain]
+        formatZH: 申请证书  [domain]
+        paramKeys: []
+  /websites/ssl/resolve:
+    post:
+      consumes:
+      - application/json
+      description: 解析网站 ssl
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteDNSReq'
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/response.WebsiteDNSRes'
+            type: array
+      security:
+      - ApiKeyAuth: []
+      summary: Resolve website ssl
+      tags:
+      - Website SSL
+  /websites/ssl/search:
+    post:
+      consumes:
+      - application/json
+      description: 获取网站 ssl 列表分页
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteSSLSearch'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Page website ssl
+      tags:
+      - Website SSL
+  /websites/ssl/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新 ssl
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteSSLUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update ssl
+      tags:
+      - Website SSL
+      x-panel-log:
+        BeforeFunctions:
+        - db: website_ssls
+          input_column: id
+          input_value: id
+          isList: false
+          output_column: primary_domain
+          output_value: domain
+        bodyKeys:
+        - id
+        formatEN: Update ssl config [domain]
+        formatZH: 更新证书设置 [domain]
+        paramKeys: []
+  /websites/ssl/upload:
+    post:
+      consumes:
+      - application/json
+      description: 上传 ssl
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteSSLUpload'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Upload ssl
+      tags:
+      - Website SSL
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - type
+        formatEN: Upload ssl [type]
+        formatZH: 上传 ssl [type]
+        paramKeys: []
+  /websites/ssl/website/:websiteId:
+    get:
+      consumes:
+      - application/json
+      description: 通过网站 id 查询 ssl
+      parameters:
+      - description: request
+        in: path
+        name: websiteId
+        required: true
+        type: integer
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Search website ssl by website id
+      tags:
+      - Website SSL
+  /websites/update:
+    post:
+      consumes:
+      - application/json
+      description: 更新网站
+      parameters:
+      - description: request
+        in: body
+        name: request
+        required: true
+        schema:
+          $ref: '#/definitions/request.WebsiteUpdate'
+      responses:
+        "200":
+          description: OK
+      security:
+      - ApiKeyAuth: []
+      summary: Update website
+      tags:
+      - Website
+      x-panel-log:
+        BeforeFunctions: []
+        bodyKeys:
+        - primaryDomain
+        formatEN: Update website [primaryDomain]
+        formatZH: 更新网站 [primaryDomain]
+        paramKeys: []
+swagger: "2.0"
diff --git a/core/cmd/server/web/favicon.png b/core/cmd/server/web/favicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f82a12d56b666914ee686321551411e970d4db5
GIT binary patch
literal 9330
zcmeHtc{mi_+c#qfLm0BljIX`M7Ky?%24i1RBwKc)vP|+-7$a-M*fm175Q$Kxg{YLZ
zFp`=g%Sc&5)?s>&e%Je6*Zc2#J@50^^T%A*%$alUb8qLq@AJ7&ik*!aKd&S&8yg$H
zIS%W<#>QR&J`8RyFmi&v4F=eFLU3mZY;0medmr{5#Z@CVHUyhF_N3##w->&AxpdCy
zYS*%f<->lFQ&Qaa0*a`~EenD2+hR8eoa@rx?|f%3I+RRsN30ycQsW9tQbpgNynQIS
zQYv}4$xGu1{L?KP-hs3cFFE2{zs8FEo^-jaYwC+F>&*JKKQaS|qb8@K-mWbhKJWIK
zWMljONrA=5#wIC<V`DqOEzcIq3x%_x6Hc=vVrPCQPW>F9qGstVAMKBfIcR4{&wgi2
z@Ub?f^OvnzIUKX}FWmvZl4lPDB%&b@F#Fs9b>9G0*MDcU<oN8OwdwWfVvjoqAv^(h
zbfw305LX{Fh~eXUj}0XFi+`QqSQWyd`5)R&=g%7Q{@b>H=JOCoaggUx2#@pL^tJIY
zRVKEyEz8r3$kWP3g7zVpSi|J6m$vjIx2_A$tFw=rAlPT$8fF^l>DF!0=eM)N2dIUx
z{rZkF79Shiq1+H2!QAMwYdZO}Y9}V6JM4d%5W7T~mVnf4a&*~!uJKEc7;bU7A)ha8
zqI#Fq4HzEKN;$G!^Vg7PY900);u}hE)0Vt32x})3D%|_8@_tghTqTQZSSo$#?YPr5
zVxX4fh2<Yub8dN&DqZPd9lFxW$=?k(XH_Pa{P=`!oJ5q0yR=ot7f((V91Al;Ag{4c
z#bnWiv#!~kYg~W87Q`*@Q|ka*KG|Oq>h$$jwpwOObf-YW4KyaN?h7YxLGBxIIiDmn
z<_w;Oxm|^qe0*4aJJ{%P5KD>XijacBACf;yMZS<Wz^i#4BteJ6JbvI?f8+W&t^Of<
zo_XoQ-4y)c%zl5iUOBR-P0gFimV+MqK4B0Yd}=wx_<uvLQ(y%r5htHN!Xv|mXSn4N
zTo9gnoM}vzA4AGIVsCj!(A?^a0g1CPJp}m<Z^>r<OI-_RQ^ZOBb?m2(VyQYg@_Rj-
zo3A@+u+GMa(j)X*b3oDgBm$|YC~&zvr(3ik6^(Itrg9~f0t+xjAbIXO{lxThYRi!Y
zPxAyv<r+|;gRZ%LV3w1`AUyUt4cgjMBA-j2oevJ*d@tGbp&|8z5H6r-UijinlwMO;
zkqTj>;@E|_dN63s^Cnfw1`{HxWF8_d>xLvZG{e<Ax%zG#SKs)hLv`eF<CZ_Hun}s+
z-n7Q(4v&0zBh!W(aDd|}DVDnQTlf5>E7HcnnGjOEsYSIO_c30Xd-0W)U4o^+^ICF#
z@#uLTX-6>@*K<O$;B!JaXXTCKs_YSWy)<+cQz)?Jo9Ip}1sX>C_WgW}nppg7DFY%V
zNB(7?KsV+oxSvlM5whqzgw=rX`149`4EsEC&$rn8(2b3_jU<Q2ZRlpk?(Vm?_?TbL
zfIuDQES&uU|CO_9g4?J$5bQM|HFgOjm<q!#nRAN~Pp#BWdqqMW&RZP2_j#pN_I@=L
zeTBOs&JLETfL9~)Lu%M)7?IL=O)Mi%b&!vg(}?NXJ$w$9DFr-2l$2A0!6PY$nK|*m
z(pZFVq6@cUjsu}Xyv#}vck7NQgpd>BQ$k7Q6U24phIn;<Y?bY=rpDr-S?6gOMC?qX
zZMerinya`8LIR6|y8Oz07I;p|IA`s0=8zCBQAB&ujDW(b^(|8E2$|}T?$|i6Th23N
z8uh7P6Bv?(nCsz@@3RgsEkLDzlrk`y5ObBi0XapfocCd_5QzD$*veYCUjfo8v}wGW
z+He!?5a+_(T)jE>k=;p7+_-{`RKeCF7{If8@_+)L*Z@C?hV0tCqj1=u|73rH4AfyC
zZ%snLlkPMPS5_Uc%r1AutLg-_<*_zt<%tNgCN@P7mlA)QRVoS*vm=bwwNrHsk_lS3
zm;wI(%%*;%xyqvvCTBW#xx04d%l+uKM8Z<p^<zrCNoL2TzzLflzmC3f9WaFJuUcg>
z+>1CMO8LzhSB{3sFf98`<e?5w8s?4yeqG%svcCJ|ZH}{Dy<6e^hVH%G6`}{U7n59)
zTOFezOTmjMLehoN?<}~Em<)pKVrPfKX1834w<qko+fE&wF8D3?56|7(8>Tf>XE>=D
z3Unl=6Vbn2c&%}fEYtJVVW7$k`~@M2C~sKX;gMPPgi)*Y6bCx;IC=PAz3~T!Vv0Sv
zAvLA&^pvB|2Gcd}EmGEWH=eW_KRVQrvkHad)g%#Qe3>W&<*=$aGEN`X2nvz!$oZLO
z+9f!GMWE2Yx)pvBX6q^1Uy#Rhj0N;;8><*z?2y28c%r7(q7n~aM|CQu`784H7TSNl
z;FyjW3Q1P`yN;pUkj88bOS<3`r!uP$j8_{#l2w5fQfYLZ>}a{#2oRqupScQfY9?04
zq2W}ggQsAbX_Tja4{dW^$~-jI`|TOZC!{0BFCvRWR{4r=T!&R}Rh%1B>RH%7<^;E*
zx%%Auh~8s<$Ps4WDWg@ZBW4{VmRd(uRwM82Q#XQ{p1#l`w@OJZ>k>S007q>XuTH>q
zg`u#Qs;O^rLL^5!)T=En+h)tpttGx7+8Otoa6Q~Fzo%#G7C}0)5VfI+Rhy-x9_CP)
zIMnz$)QE<uu*ZP)7S&XZQEfM~D<oRTT+ei6bK+`~;N4d)$#gryd8?zOy>n6aqyDT}
ziy&2{lF_*%F1Px3u;RXG+;N`;)$@Fra}?MxDTnzzV$aKJL?@p_X)*Snm8Q8W`)Tb7
zU`hL;bHq*{6NXn4(K>(wE@g5rV?g!r``+Bwl++6wz1C2NiEd#$GDPT9M1LzGr!TtP
zJNco$eVrjW%&72PYl)9lhR3&NH#p7pveiX|J&cs+b1Jqgy27XKgRA!0$<vXaoZa?@
zMSb-;OH%l|)26ZR152oT>kcDO2Oi;&ngrb4<g6yllZ+>({U#VyNX;D=a3)^)uCrci
z6>Jwlb;NisOYU)|zzD8ZPj#>Gv5+vPbsxnkk#c&u=qG3x`Rvzx4<3npl>VGc4^q?D
zQ_j;ShaE5bH#7D#joW*%{;b7rzd_rrH)j1Ny;+=aaH!4m3^X(yy9AdhX|*|&)bFxv
z<@@%=Q@Wq}Nopi2OQd=yJKpq86~&qGL44@8s*FWSAhyy(i{=_{m@fWT%U)OM8D}20
zzltZfR#UmRn4kIfj0z`2^w*U#<Rnsc#ENo@AHi`7v;_y?bRaP0X(lS)dN(t{p(D1+
z8t{dv{HjR2;WzL^d?VXR2zYoIScX?)?7EfyX9K|bKs6QD8P;#|W#i?Y@t<8Jk%r5@
z;dFt*woqT-$sp8bjpbe!(0d@Rqxz~&2G=N?%(bTvU*JCC#yNaCV#7ue_J{+Hu)%3Z
zo=%O$HwdsqxsB0@;@#smOD^cIN5U)9kWYSvd`=*V{0dJCHEP8z1E&IF+>#4Y^W${*
zlD%Iv2<a?ld)*~Dty?qn$LY!5=M1k1ElIjQGnj)T#f7`iYq4IU)1Hut9ncZ8+|zPF
zf=e<6h`gsv(P$y={qlc&>W(b#o3(?HghBlCZedLJ!dMR`(AxvVYKa!X?t-U5iJL&;
zF2{b8B3Ek8I`Z{Q`@!`@??0)(q&k&ViKFw+y8}X!G&&<=%;y69UlQeFJlanFv!B>^
z)uYS67g>nT;%|=bD#Ff;yM8T6<N7J>@<L9lcHwSRmYH;n$IcXs@zs0F4^P=buQ0LC
zzkMtj`BPvFv)|IqEtGaa3&-gFrRu!XI3JDJ-+p4-1cc?%`I%eI_%#wxIA4n(>25aq
zOnM3Z>^0WYYk4+iE!IaTg6#=HMMR@#U&iT2oCx0z#~5ctm!Za#<kBYfK&^KUL|d&Z
zKbPn1zdMZ*Hh+KO8uM6r*O4@@ZZeZGVU%~x%ddb}eoJ9|w$0d)Wj*;4$e0~n#_-`8
zGYT$o|Am@(^vqnu$O7=@eQrJ9l=q-b{m##&VIa&uhnSX%kU6@#9uvEq=2McKUY586
z4+}oFZfWmv_}I5Ok9JuQj@Jnv<J}YI)wcw0Ej6@@j67Z8-zBXFf4|33)1j`HH#N@p
z^;Q~J1eN~D%9m#=^kt)C@WZr-9sxmvPh-En?ZD2eno1iljK3e@a+pxpqb#@Yw3DOd
z^lwOJr7S<R71`-8@;&kGkeCl~&X8$2=-6I5KDa(X<IMV_u*Cm{Y01j+HvH2Y<FTId
zT^av2<7B47^g9=QRF{@}0-unZKT$>X&y!uN_52SlCzN$aBH!|*#iY8eIwy@XbrpIE
z0zQgPX$n4h%kf5vYD~+e#&(fhq6|@mX*v2dMne@6xF#F3mLWv!4#hjAhZ3rkV-F*j
zlw2@vC`;1oZ12g(;>IFh?79TQw=bHTAnqIdS@<#Izpq|5QuEBOkT3#bD&|sX+EYEf
zZ)30FTD>C&ay79VBPXhNHb-5n#<OUL$K0-N`A5ur&%fR>+kQOk(u!k;aZg9|*<x?H
zt#MfAYUb@<K0IgH^%UC_yps*pcembVJ{dfD=#A}mzB{YrxcgJh80yvNI}^yWSQHi^
zvC;IJ?Ec(`Z%_uWwo<<GF(P<n2r%_!qGwRuZE56G-tv!fQ7;~=w8xeIsh7UDi64*r
zR)1o5ZQ?R<PC>nO?Cw-dbpp5Dn39**vy*^bP$&6&U4B2u8X~%$i(XzkHLGaGdoW9}
zL}O7YZC=>Gr{t|6*v#`@jMv(0+4_2Eqfm9VKi_{k9WrVyoj``CxFn;8UAPl}Gm<E<
z&wXpit=-DrcdXT}T1%%dslCBb2Gq-y&7S&Xgjb+itX0~$U!Yp>kU{t<Q>`yk<Da>j
zZZ_t-8-zO*vwn1aYWlN%m%Ll~qgA%Ey40dcLwE`%_vTd%RiiU1VXLS2PxQiNVqnyF
z`m_|MfJ$N@3OW@dssGsa)$#<yo^U>CjCXbQjK|KqmfR^Ls#rd;V3;*jPgn9vvog+&
zmdgtY=^S-^%NlZ{26eHrv>5Hk(_7w?F~qs)g3VfgkDrk~H|=4K@k<|)giSZqB#fJF
z`V$P#at_fz)M{^^ej{k@zH9!b{N7B1)?SU2C`wD>@K^OtuBO__7b-kWeJftZ>Kz#s
z$Qb4NWTe9MxPeL!)t%i)@!?6-GSdcvENyRd0$)<^4aS{j6||0ftavA@J>O~S0%pJ*
zCi$IjF4am*rljuomBpQ^Vp{IwFwqf9qG968&x&i>5eDyjK?3nEgu!L;GG<s>Az&du
z)bs+#o=QIrDkATCC&Ncw?O;N<^w8iY?Ig#65m%6pNRw^I(+YLeV|PU5Tq{N6G%#Tg
z+b?HRQa5kxuc%1|VSX=XLP1$gu_Fk{k{p*W_P_2HFZ12V2abY`KDL)z>b*9|3_Tg+
z-%0N&Fgy}sFT4Mcs*YHMPjI$?4QfJah;NvZ+G|U6i{P^dIp#b~aP3>e_W=K?(s^}I
zKXF2bAUb%pdo6-#%)n{~ScjodUm2rJ=J43abdZ{w!EV!WKzo})cs@G)dNw1}NORd(
zS#Bz3$KlPwPzh|hV@dsVm*7_H)qLV7Kkf=HAZk?q>)PB=7Hg}$Z8zBO;4?Ta>7R(9
zGuJHRQfhhm1##><n#;LUFUJe7O~{lRN++CGry?OdgIm#ZiYgq=@o0=T4Z{`?cj`(q
zCOz~NjQtL{Lp9RRKj20S@4*P15FWNW5E7Klj)aD=RihE?Y>o&r8=LC?jW+z(PTRvS
z1Yi1Sw;uSJvcUg_^^O%sJcdw@GX8Jl;J;R$|DpE()m{Ey)tm6tdyT}AT&pYXVdQ=-
zx~PgO0a2mv+wFh83(5jitr1)7`dZ@DwE^nxREyN(5|7AXYc;nmlr6!aR`g(nSFrwU
z+xOtb1^wB@g9{ht^I7q1l|O*HzMSKT^f<PRpHZhb<(9NHhV4uTENl@sZWp@FaB4}7
zlRquj6Bc#BJ_}%<HR%`x+Zur03ZH-5%={DL!e4$bzjl=QZadh`z+FmurFp;<(ejhy
z&*|sw)Clz|S>6{LThV0z;#x3D>q#1-Dn36D@oe2`w0MoU=<arPVdF&QxEZ2li9%TX
zTdS?-$DROUJY~JCisHWLGjxvd?!nicZ`~}1;DlhS15k$(!M&`Zmw=UiS0e6?d`wBT
zuC&pWfoN4(!|O%!>T7@2KP`W{Sv9bh{x4Dpr$W!$twgQovlaT3d@r3Be*T3a5c+I=
zd&GbD@wU3tgA7Yzq#$lCYWntS@4pe2TO{_MJ|zK`>nWGsY=`c!hEjWtBsX^}yDJZQ
z<ZpK($wMnjA%+XViv|EBd~dy;a<Dh4TOQ17sx^APJlW$xJT=LJlV~?1e2H`HOv_lc
zhqk|Q>nUm{x@120=C((HRM;&mtnN=tLI3z*m$&@LA_mUJ?-RL5nioc$=ql=*(_DVM
z{oqWD-7BqwB$@%yVfG&h<5yA7uI_|>=70%^9DQpz*cOFzd<_7^_7z>-Vvk+(b*3dW
z>tIaa#E~%%FXbue>_JbWmgHvTfIty}K80@h8WIHn!=+xsL5DZ3-q*tCet^PZMpkC#
zNjnxXH<i!Zmb0snp7Kspf`11UDQoplivU~|7$JO2X}hjAy38(yZ*aBNsBlp|I(zs~
z8hR)QB+b`~<sI4G0TZ^y&!=vG9%21Ec)zE$M7?ERIAQY&-{3p<-asJa&_(^d+{g(g
zPl3rL<sJ>~@u^lpNPry$gli?fT~aSfL%JLxHs+xpo_8TECwot>0w6aDWV@1Gh1TGV
zP$pvAnQ3TWJ*<f}lHJ@@n7wLyktG7n(pl0<tS;W;!1{huyJNjRxWMSuQk|o}Oas;V
z44Z+gns}Msw01Eu{i`>zMtZhux8REsZ#W>m)pZk)bFxNF3E{4|W$zVKhczVl4|cPL
znDgp0_rd+`0=Vo|c_+tcH8>JZBF4Z~(mH!^f^>N5i|%r){kcN0TjSn8GgIrA`GlC3
zO?&mm?N#qt`mBqr(vOt0u*|~XAhr74Ge0v-5i>KAI$~>}jFB1h*zW1{?s^Qs<_zx-
zm}y2cWAdhMb2?Ivyn+RrJZx_s5SKeXFoJ0~AvSS=FY_S<22lwfp}_K%8P#dXZS2DJ
z!?zOwC~&)$`aOy-GY@_B)m&9I$gb7Y0^{}k#cme-&8yt^&fvOOL)~0?ovX|GIFoT#
zj+}nw=)u!AMvWKX`*g%~fUKx7kICx}N!p_rpI7Z&<HR*vUDo1e32}SLjpdBbn+FSu
zr57%QJT(N>BtC0b0n|Y+98mG+lU6>t=N}R(I`uf|a&uE7vAHQUf7o`=I!Nu&m<Po+
zJ*BFis=QKo)|Z|^b>a3lg=5df)VTB-J6)^pP@j@nxKP)-aMiG=Yn5F`EOoEU*`i%-
zZnCE-%vzwZnNu<F71@>X)d#-q+V>YaYK(j%nwyr<hDBjd4G#iFZnzRcS87h@)u(29
zqvA2F>jO;Ijq4saK5QebrJ42f>Y+~!>vbiJ9Wx$K1C|l#f4bI+J?^breyE8_tk1QB
zmBtfqex*IM)wT`Rx)rtbXOaKS_#fG#&$+gVMcKB?0?yv)1MTF;yZhq$hy#_I(E_vd
z4|Um|hu#oRIA3EiQ{8I~-!68mqBW<tKKXTGF0-zuQ!1(YRIe4Ux_R|4(^sM|(_CqS
z&U;+8RA}fs!A^?5CV+OrW9>!Ze($ReF9!#>9{-#wXO!I~=!i8LDsL&w$}$zcXSGEF
z&x<GaM}L2y8t_$#@@D5d0@&zEbX2fYmtbSNc2eC)iBa-u?!539m5`ETm*h>u%;>U<
zy+-lfpqTXG?KsM`w3q22^s$B@G3`Dxn;8-5e`Zj_!6MeEPfo@`J4wH;v3^&rS2f$z
z`-tIAX+2&zSkhCr5;StI@?wwo(RN$;_K2Ou*Wrkhzu)(8Tw>b2d?GtLIAEN*XVf+~
z4+_4Y(>s~h426X&iB<WQymb&Cd2()aT52fgUU_`@TfZGq-52Fj-I{)R%e+HU>7%|p
z`Qr~-O;_%}?OV!^O1bqo0shP<qIev8N@ri7kY3xf*DMFeq=%2OBPI-=$V-LMW#6yN
zJpa(wP34kxz;h18^y@AdN0#+n_}GK6|Ij*hoE&WFmv_Lf<Z#EY<07M^XYG`+@>~Ix
zbNpTCo74Np=ZHrCkST3}vTwDDZ$b0Rd+DMXOFk)&E6NA-Y8#=~XNrovbRM0Eu<fkA
z<QJuWL7lIn$K(BPYbN3BRP&?uX4J+7!FNhwav8e{*QcLPurslPx2_4SMf6Lig%wIY
zB5=&nJw8rbGuv7&=kHct%tMsv=h&(Kuu1o2x76UCQnwjD^2nC9Etcm(a*SlN{@N@s
zqpsV;ItxPcGjmsuZdO+JvSMXGEA+Ys<Ezr4bNb=qN<m2%%h6%yOA7iF+UM09PY8|A
z!mZ}jRp1SBaT*L8)i*4Mp<`rKfx5ZEbzE^&5Yv+8`pT?70Ro^O??pBLdlw5Q(E3ac
z7yA1liyzO=K1r^9dkMi0$@3KKq6bdL-io(OSQsK*Uf-u<wBnE7pA9ylN{!b`M|l!e
zNQr=N@5MGhCnur{OkV5?;d5WbCzV@cT?ILtrh9ytAPz~T4c~Y-*;=9~e9?vf^BIo0
zd4Y?DpL^&=Agq~#OO6%*iZwURpL@x?k^?w-S@`9LVa{`fQ%BwdbSF*|Ygr}=5V96Q
z{Fz5(Ttj0XLl+ivM>MffKhlDo;=22)Z1@2t7T+yEV_)jGe|gj#LEUc?beTj+^{J*-
zlU$O0`rHC}^kj<UE@X3p<sYMt<WgX+@sw1FJ@C~F75{@--VL}?zZ5ey3S2be_@q8L
za8g>hN>nZvjz{YAd>(*wn-r&1aO#M4i?|U6LwLBp_3@`)DhCs6I0A2gR!epD-Zd$!
z(FJz?Ugb#>gta{ZfSX2%;F$S<ZE&X%);c>k0$Uhyy4jl#>!{#v#sf&-(IVe2wQltV
zT?i{t9Wh`NV-(hm#x*3OBNmX^{l95u_UlNlk+dt<<eUnDQYO*+4XQnElmflrkvST|
zxKp1@-I}e}^IK`+B|j*siNg6pUG#mU^?0O%rWh_A@D~JPZKzW(0mMixfX+RXJ#$fu
ze7BnVB8zsr6UYGwi5!u^onkMMu1iOH$y*)Y?@P6L9TXdCWNrsLj}|3O^E#gkr@1zp
z^vmx9k{&x0*%w96sA(utC`41r7?2~?x5B~E)-s`CoME3MAHphXVlCs(1gVJ|YnM<0
zC;rM7Z$HL0<fx`w;9tt{Qal}Pp2jrq{Lxxcr!=IU8I91xt65aswa)`eJNyCTvwL0-
zD@4*Z={H%wqL8d_<O?tnEgHtBq8d%%-K60g8D$j;aynD7K*J!b@g0!Boywz#7>n2u
zLa+4Tx>ux=tR{~{WN3KyzM$vkJQ9)F(?u@`D7crJm+;7;1{aupgkmYR;o`YvlJ<dr
z=Z8Ltmq{P}*m9Hk4PhPydRB30{i=BOM1TpWmg8x(ti6^1fZfMD`Z7|`6cPn?nkMqo
z9t7Tg^O0Na{uO8h==hk-(i}7Xg8*{=L&kF#82E*QWNXW!bnR-qKgy3sq7gco%oGXW
zP&7==8+!PS7unRiK}ZKASrS~nCGp4}2MbhuO~ZmD=%q}&eK0~v{kRcSouDkxBG|ea
zsYuQ{)#-W<rz5s6%(Ha$lqpbS7f|EmUlJ~uev^xPbnz(c2Yz-*AsniV;e`Z5jZx4a
zMjKEEro|>@JcMtsUfTKnUtD1m!27F24v0!I{3u3@<{D6&;7PZQV%X&7g`m56Au1$D
zkQ&%NW5y-<!h;adM^$hbMV9NZu|dW6-U4*`>Pr}3c8UY;9tIHGD=ateie_<LxGVr_
z!S6FdIGOVZZ|2{q;)TMlU(X_-5#ec>YYYE52!aPd1Fh2i+h0R+W6cmMo!eKU_o8Cc
zp$CohH@gkCwV=l)s1(Zp&YI$YM_MIZT;!Iogs6r25zXRUlI4K}{@n62kaUegsj-LL
zpnu({zlYj@7NTj+G5=KHQ*|FOBD*J1X3#9nN-H_gM}yNa=mU`MJMg2yXYZz_yKq+<
zBP7m%-tTjh`%U_bRo!7aQ!#0BWG%bSF17x8%O)3CN5XQPAWnkk*fxcELdy=uZp>ZL
zm!pBz^7Oh|1DsY{W&<2yQ|=0@TsuOC$=EH6O>#$T37-(|)}iw+<jdm+z?xz13P?_a
zqHF_uF=&^NIUzL&h1)Kw4e4?l<vYOZ;?b&hJUU{WBI~&hu=A=H8l@pMp6t5g_Yca}
zANT8mfHf#cO^8At7fk$BO)hXq>%}h3#i|e}+$KlEK+h9;Q&i!^D5GlFI}!?SE05QO
z8)v_&NkH3k%eyLXaM{ebS%M}B4hr`JsEqI#TW!B<$GGMMan7LNmbYkKH9<ic;C;b4
z9x=(|;>MtPq!E1)^s`krGSyS?YF27)oI9US!APID<)Pppt59vv_|pY|UYvP##BKrs
z`>s6)(~Vz_g(@@`oUw<o(;~ls0ho^1xc8c;*@x4c??KP~XEpVhJs>_6^Ij1^H6ozi
zci~3-Zowgtk75gV&b(pF`x_djgc>D-mj>`Y{b7X-0iK2w(5$z*z9`xv_&yDdQTm9s
zO%;GN#G)}(VGpR^U0yh-0D2M-o}xpgj4~M2<BVwxw|sR+0p$u{tQLHIiFl_$+CxQS
zC82Oy&vQnZ^$Dl9>?G)j_==wFxMHR-gh#PKeZ_75G13eQw^G@icAiMV;*p*JA0mKG
zTPt_OBl2+wk6*4<bZm{NGA9YT8dmg9)DG6sDq8^h_fk}=20tx*3ljwL(1-Cpp!ja^
zf}-06rrILNMvCtXG!jH~P+zyo0<MwGGPl&$zUylUkm9`pK;^kT<L)U6;dwoWpSO82
zZi#~4z#vMUYq+wt5Te!Kk;O9Po)ms*1_(nlL$C|kJO%322Hy_!esFbu`Ue_-L9mN)
z>+#Iqemd45>XqtEfAN@G-ZL>)6C1u~8USs<pfuOM&Q@8^{ScmN70<79krqKTKNSAn
z?)n}w$p+vwG~1ZRCrW5C30MR?Lpl5{&iiW`lN|yc!oYlpfhEy$2<bhv>>K<KA9z0W
lf1cy)VHEETX6b)8Zr+l2uiqDX6FeefGdHop)?+;5{udWKdbj`p

literal 0
HcmV?d00001

diff --git a/core/cmd/server/web/web.go b/core/cmd/server/web/web.go
new file mode 100644
index 000000000..dc7a3d3b0
--- /dev/null
+++ b/core/cmd/server/web/web.go
@@ -0,0 +1,15 @@
+package web
+
+import "embed"
+
+//go:embed index.html
+var IndexHtml embed.FS
+
+//go:embed assets/*
+var Assets embed.FS
+
+//go:embed index.html
+var IndexByte []byte
+
+//go:embed favicon.png
+var Favicon embed.FS
diff --git a/core/configs/config.go b/core/configs/config.go
new file mode 100644
index 000000000..7d8116b68
--- /dev/null
+++ b/core/configs/config.go
@@ -0,0 +1,6 @@
+package configs
+
+type ServerConfig struct {
+	System    System    `mapstructure:"system"`
+	LogConfig LogConfig `mapstructure:"log"`
+}
diff --git a/core/configs/log.go b/core/configs/log.go
new file mode 100644
index 000000000..8fe60a91d
--- /dev/null
+++ b/core/configs/log.go
@@ -0,0 +1,9 @@
+package configs
+
+type LogConfig struct {
+	Level     string `mapstructure:"level"`
+	TimeZone  string `mapstructure:"timeZone"`
+	LogName   string `mapstructure:"log_name"`
+	LogSuffix string `mapstructure:"log_suffix"`
+	MaxBackup int    `mapstructure:"max_backup"`
+}
diff --git a/core/configs/system.go b/core/configs/system.go
new file mode 100644
index 000000000..57a24be67
--- /dev/null
+++ b/core/configs/system.go
@@ -0,0 +1,25 @@
+package configs
+
+type System struct {
+	Port           string `mapstructure:"port"`
+	Ipv6           string `mapstructure:"ipv6"`
+	BindAddress    string `mapstructure:"bindAddress"`
+	SSL            string `mapstructure:"ssl"`
+	DbFile         string `mapstructure:"db_file"`
+	DbPath         string `mapstructure:"db_path"`
+	LogPath        string `mapstructure:"log_path"`
+	DataDir        string `mapstructure:"data_dir"`
+	TmpDir         string `mapstructure:"tmp_dir"`
+	Cache          string `mapstructure:"cache"`
+	Backup         string `mapstructure:"backup"`
+	EncryptKey     string `mapstructure:"encrypt_key"`
+	BaseDir        string `mapstructure:"base_dir"`
+	Mode           string `mapstructure:"mode"`
+	RepoUrl        string `mapstructure:"repo_url"`
+	Version        string `mapstructure:"version"`
+	Username       string `mapstructure:"username"`
+	Password       string `mapstructure:"password"`
+	Entrance       string `mapstructure:"entrance"`
+	IsDemo         bool   `mapstructure:"is_demo"`
+	ChangeUserInfo string `mapstructure:"change_user_info"`
+}
diff --git a/core/constant/common.go b/core/constant/common.go
new file mode 100644
index 000000000..eca15f1d0
--- /dev/null
+++ b/core/constant/common.go
@@ -0,0 +1,20 @@
+package constant
+
+type DBContext string
+
+const (
+	TimeOut5s  = 5
+	TimeOut20s = 20
+	TimeOut5m  = 300
+
+	DateLayout         = "2006-01-02" // or use time.DateOnly while go version >= 1.20
+	DefaultDate        = "1970-01-01"
+	DateTimeLayout     = "2006-01-02 15:04:05" // or use time.DateTime while go version >= 1.20
+	DateTimeSlimLayout = "20060102150405"
+
+	OrderDesc = "descending"
+	OrderAsc  = "ascending"
+
+	StatusEnable  = "Enable"
+	StatusDisable = "Disable"
+)
diff --git a/core/constant/dir.go b/core/constant/dir.go
new file mode 100644
index 000000000..931b21c22
--- /dev/null
+++ b/core/constant/dir.go
@@ -0,0 +1,20 @@
+package constant
+
+import (
+	"path"
+
+	"github.com/1Panel-dev/1Panel/core/global"
+)
+
+var (
+	DataDir              = global.CONF.System.DataDir
+	ResourceDir          = path.Join(DataDir, "resource")
+	AppResourceDir       = path.Join(ResourceDir, "apps")
+	AppInstallDir        = path.Join(DataDir, "apps")
+	LocalAppResourceDir  = path.Join(AppResourceDir, "local")
+	LocalAppInstallDir   = path.Join(AppInstallDir, "local")
+	RemoteAppResourceDir = path.Join(AppResourceDir, "remote")
+	RuntimeDir           = path.Join(DataDir, "runtime")
+	RecycleBinDir        = "/.1panel_clash"
+	SSLLogDir            = path.Join(global.CONF.System.DataDir, "log", "ssl")
+)
diff --git a/core/constant/errs.go b/core/constant/errs.go
new file mode 100644
index 000000000..411387d3d
--- /dev/null
+++ b/core/constant/errs.go
@@ -0,0 +1,164 @@
+package constant
+
+import (
+	"errors"
+)
+
+const (
+	CodeSuccess           = 200
+	CodeErrBadRequest     = 400
+	CodeErrUnauthorized   = 401
+	CodeErrNotFound       = 404
+	CodeAuth              = 406
+	CodeGlobalLoading     = 407
+	CodeErrInternalServer = 500
+
+	CodeErrIP           = 310
+	CodeErrDomain       = 311
+	CodeErrEntrance     = 312
+	CodePasswordExpired = 313
+
+	CodeErrXpack = 410
+)
+
+// internal
+var (
+	ErrCaptchaCode     = errors.New("ErrCaptchaCode")
+	ErrAuth            = errors.New("ErrAuth")
+	ErrRecordExist     = errors.New("ErrRecordExist")
+	ErrRecordNotFound  = errors.New("ErrRecordNotFound")
+	ErrStructTransform = errors.New("ErrStructTransform")
+	ErrInitialPassword = errors.New("ErrInitialPassword")
+	ErrNotSupportType  = errors.New("ErrNotSupportType")
+	ErrInvalidParams   = errors.New("ErrInvalidParams")
+
+	ErrTokenParse = errors.New("ErrTokenParse")
+)
+
+// api
+var (
+	ErrTypeInternalServer  = "ErrInternalServer"
+	ErrTypeInvalidParams   = "ErrInvalidParams"
+	ErrTypeNotLogin        = "ErrNotLogin"
+	ErrTypePasswordExpired = "ErrPasswordExpired"
+	ErrNameIsExist         = "ErrNameIsExist"
+	ErrDemoEnvironment     = "ErrDemoEnvironment"
+	ErrCmdIllegal          = "ErrCmdIllegal"
+	ErrXpackNotFound       = "ErrXpackNotFound"
+	ErrXpackNotActive      = "ErrXpackNotActive"
+	ErrXpackOutOfDate      = "ErrXpackOutOfDate"
+)
+
+// app
+var (
+	ErrPortInUsed          = "ErrPortInUsed"
+	ErrAppLimit            = "ErrAppLimit"
+	ErrFileCanNotRead      = "ErrFileCanNotRead"
+	ErrNotInstall          = "ErrNotInstall"
+	ErrPortInOtherApp      = "ErrPortInOtherApp"
+	ErrDbUserNotValid      = "ErrDbUserNotValid"
+	ErrUpdateBuWebsite     = "ErrUpdateBuWebsite"
+	Err1PanelNetworkFailed = "Err1PanelNetworkFailed"
+	ErrCmdTimeout          = "ErrCmdTimeout"
+	ErrFileParse           = "ErrFileParse"
+	ErrInstallDirNotFound  = "ErrInstallDirNotFound"
+	ErrContainerName       = "ErrContainerName"
+	ErrAppNameExist        = "ErrAppNameExist"
+	ErrFileNotFound        = "ErrFileNotFound"
+	ErrFileParseApp        = "ErrFileParseApp"
+	ErrAppParamKey         = "ErrAppParamKey"
+)
+
+// website
+var (
+	ErrDomainIsExist      = "ErrDomainIsExist"
+	ErrAliasIsExist       = "ErrAliasIsExist"
+	ErrGroupIsUsed        = "ErrGroupIsUsed"
+	ErrUsernameIsExist    = "ErrUsernameIsExist"
+	ErrUsernameIsNotExist = "ErrUsernameIsNotExist"
+	ErrBackupMatch        = "ErrBackupMatch"
+	ErrBackupExist        = "ErrBackupExist"
+	ErrDomainIsUsed       = "ErrDomainIsUsed"
+)
+
+// ssl
+var (
+	ErrSSLCannotDelete               = "ErrSSLCannotDelete"
+	ErrAccountCannotDelete           = "ErrAccountCannotDelete"
+	ErrSSLApply                      = "ErrSSLApply"
+	ErrEmailIsExist                  = "ErrEmailIsExist"
+	ErrEabKidOrEabHmacKeyCannotBlank = "ErrEabKidOrEabHmacKeyCannotBlank"
+)
+
+// file
+var (
+	ErrPathNotFound     = "ErrPathNotFound"
+	ErrMovePathFailed   = "ErrMovePathFailed"
+	ErrLinkPathNotFound = "ErrLinkPathNotFound"
+	ErrFileIsExist       = "ErrFileIsExist"
+	ErrFileUpload       = "ErrFileUpload"
+	ErrFileDownloadDir  = "ErrFileDownloadDir"
+	ErrCmdNotFound      = "ErrCmdNotFound"
+	ErrFavoriteExist    = "ErrFavoriteExist"
+)
+
+// mysql
+var (
+	ErrUserIsExist     = "ErrUserIsExist"
+	ErrDatabaseIsExist = "ErrDatabaseIsExist"
+	ErrExecTimeOut     = "ErrExecTimeOut"
+	ErrRemoteExist     = "ErrRemoteExist"
+	ErrLocalExist      = "ErrLocalExist"
+)
+
+// redis
+var (
+	ErrTypeOfRedis = "ErrTypeOfRedis"
+)
+
+// container
+var (
+	ErrInUsed       = "ErrInUsed"
+	ErrObjectInUsed = "ErrObjectInUsed"
+	ErrPortRules    = "ErrPortRules"
+	ErrPgImagePull  = "ErrPgImagePull"
+)
+
+// runtime
+var (
+	ErrDirNotFound         = "ErrDirNotFound"
+	ErrFileNotExist        = "ErrFileNotExist"
+	ErrImageBuildErr       = "ErrImageBuildErr"
+	ErrImageExist          = "ErrImageExist"
+	ErrDelWithWebsite      = "ErrDelWithWebsite"
+	ErrRuntimeStart        = "ErrRuntimeStart"
+	ErrPackageJsonNotFound = "ErrPackageJsonNotFound"
+	ErrScriptsNotFound     = "ErrScriptsNotFound"
+)
+
+var (
+	ErrBackupInUsed = "ErrBackupInUsed"
+	ErrOSSConn      = "ErrOSSConn"
+	ErrEntrance     = "ErrEntrance"
+)
+
+var (
+	ErrFirewall = "ErrFirewall"
+)
+
+// cronjob
+var (
+	ErrBashExecute = "ErrBashExecute"
+)
+
+var (
+	ErrNotExistUser = "ErrNotExistUser"
+)
+
+// license
+var (
+	ErrLicense      = "ErrLicense"
+	ErrLicenseCheck = "ErrLicenseCheck"
+	ErrLicenseSave  = "ErrLicenseSave"
+	ErrLicenseSync  = "ErrLicenseSync"
+)
diff --git a/core/constant/session.go b/core/constant/session.go
new file mode 100644
index 000000000..94fdf462d
--- /dev/null
+++ b/core/constant/session.go
@@ -0,0 +1,13 @@
+package constant
+
+const (
+	AuthMethodSession = "session"
+	SessionName       = "psession"
+
+	AuthMethodJWT = "jwt"
+	JWTHeaderName = "PanelAuthorization"
+	JWTBufferTime = 3600
+	JWTIssuer     = "1Panel"
+
+	PasswordExpiredName = "expired"
+)
diff --git a/core/constant/status.go b/core/constant/status.go
new file mode 100644
index 000000000..e3b8fc05b
--- /dev/null
+++ b/core/constant/status.go
@@ -0,0 +1,6 @@
+package constant
+
+const (
+	StatusSuccess = "Success"
+	StatusFailed  = "Failed"
+)
diff --git a/core/global/global.go b/core/global/global.go
new file mode 100644
index 000000000..5d66ba05f
--- /dev/null
+++ b/core/global/global.go
@@ -0,0 +1,26 @@
+package global
+
+import (
+	"github.com/1Panel-dev/1Panel/core/configs"
+	"github.com/1Panel-dev/1Panel/core/init/cache/badger_db"
+	"github.com/1Panel-dev/1Panel/core/init/session/psession"
+	"github.com/dgraph-io/badger/v4"
+	"github.com/go-playground/validator/v10"
+	"github.com/nicksnyder/go-i18n/v2/i18n"
+	"github.com/sirupsen/logrus"
+	"github.com/spf13/viper"
+	"gorm.io/gorm"
+)
+
+var (
+	DB      *gorm.DB
+	LOG     *logrus.Logger
+	CONF    configs.ServerConfig
+	VALID   *validator.Validate
+	SESSION *psession.PSession
+	CACHE   *badger_db.Cache
+	CacheDb *badger.DB
+	Viper   *viper.Viper
+
+	I18n *i18n.Localizer
+)
diff --git a/core/go.mod b/core/go.mod
new file mode 100644
index 000000000..3ef520d39
--- /dev/null
+++ b/core/go.mod
@@ -0,0 +1,105 @@
+module github.com/1Panel-dev/1Panel/core
+
+go 1.22.4
+
+require (
+	github.com/dgraph-io/badger/v4 v4.2.0
+	github.com/fsnotify/fsnotify v1.7.0
+	github.com/gin-contrib/gzip v1.0.1
+	github.com/gin-gonic/gin v1.10.0
+	github.com/glebarez/sqlite v1.11.0
+	github.com/go-gormigrate/gormigrate/v2 v2.1.2
+	github.com/go-playground/validator/v10 v10.22.0
+	github.com/golang-jwt/jwt/v4 v4.5.0
+	github.com/google/uuid v1.6.0
+	github.com/jinzhu/copier v0.4.0
+	github.com/mojocn/base64Captcha v1.3.6
+	github.com/nicksnyder/go-i18n/v2 v2.4.0
+	github.com/pkg/errors v0.9.1
+	github.com/robfig/cron/v3 v3.0.1
+	github.com/sirupsen/logrus v1.9.3
+	github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
+	github.com/spf13/cobra v1.8.1
+	github.com/spf13/viper v1.19.0
+	github.com/swaggo/files v1.0.1
+	github.com/swaggo/gin-swagger v1.6.0
+	github.com/swaggo/swag v1.16.3
+	github.com/xlzd/gotp v0.1.0
+	golang.org/x/sys v0.22.0
+	golang.org/x/term v0.22.0
+	golang.org/x/text v0.16.0
+	gopkg.in/yaml.v3 v3.0.1
+	gorm.io/gorm v1.25.11
+)
+
+require (
+	github.com/KyleBanks/depth v1.2.1 // indirect
+	github.com/PuerkitoBio/purell v1.1.1 // indirect
+	github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
+	github.com/bytedance/sonic v1.11.6 // indirect
+	github.com/bytedance/sonic/loader v0.1.1 // indirect
+	github.com/cespare/xxhash/v2 v2.2.0 // indirect
+	github.com/cloudwego/base64x v0.1.4 // indirect
+	github.com/cloudwego/iasm v0.2.0 // indirect
+	github.com/dgraph-io/ristretto v0.1.1 // indirect
+	github.com/dustin/go-humanize v1.0.1 // indirect
+	github.com/gabriel-vasile/mimetype v1.4.3 // indirect
+	github.com/gin-contrib/sse v0.1.0 // indirect
+	github.com/glebarez/go-sqlite v1.21.2 // indirect
+	github.com/go-openapi/jsonpointer v0.19.5 // indirect
+	github.com/go-openapi/jsonreference v0.19.6 // indirect
+	github.com/go-openapi/spec v0.20.4 // indirect
+	github.com/go-openapi/swag v0.19.15 // indirect
+	github.com/go-playground/locales v0.14.1 // indirect
+	github.com/go-playground/universal-translator v0.18.1 // indirect
+	github.com/goccy/go-json v0.10.2 // indirect
+	github.com/gogo/protobuf v1.3.2 // indirect
+	github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
+	github.com/golang/glog v1.0.0 // indirect
+	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
+	github.com/golang/protobuf v1.5.3 // indirect
+	github.com/golang/snappy v0.0.3 // indirect
+	github.com/google/flatbuffers v1.12.1 // indirect
+	github.com/hashicorp/hcl v1.0.0 // indirect
+	github.com/inconshreveable/mousetrap v1.1.0 // indirect
+	github.com/jinzhu/inflection v1.0.0 // indirect
+	github.com/jinzhu/now v1.1.5 // indirect
+	github.com/josharian/intern v1.0.0 // indirect
+	github.com/json-iterator/go v1.1.12 // indirect
+	github.com/klauspost/compress v1.17.2 // indirect
+	github.com/klauspost/cpuid/v2 v2.2.7 // indirect
+	github.com/leodido/go-urn v1.4.0 // indirect
+	github.com/magiconair/properties v1.8.7 // indirect
+	github.com/mailru/easyjson v0.7.6 // indirect
+	github.com/mattn/go-isatty v0.0.20 // indirect
+	github.com/mitchellh/mapstructure v1.5.0 // indirect
+	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+	github.com/modern-go/reflect2 v1.0.2 // indirect
+	github.com/pelletier/go-toml/v2 v2.2.2 // indirect
+	github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
+	github.com/sagikazarmark/locafero v0.4.0 // indirect
+	github.com/sagikazarmark/slog-shim v0.1.0 // indirect
+	github.com/sourcegraph/conc v0.3.0 // indirect
+	github.com/spf13/afero v1.11.0 // indirect
+	github.com/spf13/cast v1.6.0 // indirect
+	github.com/spf13/pflag v1.0.5 // indirect
+	github.com/subosito/gotenv v1.6.0 // indirect
+	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
+	github.com/ugorji/go/codec v1.2.12 // indirect
+	go.opencensus.io v0.24.0 // indirect
+	go.uber.org/atomic v1.9.0 // indirect
+	go.uber.org/multierr v1.9.0 // indirect
+	golang.org/x/arch v0.8.0 // indirect
+	golang.org/x/crypto v0.23.0 // indirect
+	golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
+	golang.org/x/image v0.13.0 // indirect
+	golang.org/x/net v0.25.0 // indirect
+	golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
+	google.golang.org/protobuf v1.34.1 // indirect
+	gopkg.in/ini.v1 v1.67.0 // indirect
+	gopkg.in/yaml.v2 v2.4.0 // indirect
+	modernc.org/libc v1.22.5 // indirect
+	modernc.org/mathutil v1.5.0 // indirect
+	modernc.org/memory v1.5.0 // indirect
+	modernc.org/sqlite v1.23.1 // indirect
+)
diff --git a/core/go.sum b/core/go.sum
new file mode 100644
index 000000000..81555b5bc
--- /dev/null
+++ b/core/go.sum
@@ -0,0 +1,393 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
+github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
+github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
+github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
+github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
+github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
+github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=
+github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=
+github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=
+github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
+github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
+github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
+github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs=
+github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak=
+github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8=
+github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=
+github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA=
+github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
+github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
+github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
+github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
+github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
+github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
+github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
+github.com/gin-contrib/gzip v1.0.1 h1:HQ8ENHODeLY7a4g1Au/46Z92bdGFl74OhxcZble9WJE=
+github.com/gin-contrib/gzip v1.0.1/go.mod h1:njt428fdUNRvjuJf16tZMYZ2Yl+WQB53X5wmhDwXvC4=
+github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
+github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
+github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
+github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
+github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo=
+github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k=
+github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw=
+github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ=
+github.com/go-gormigrate/gormigrate/v2 v2.1.2 h1:F/d1hpHbRAvKezziV2CC5KUE82cVe9zTgHSBoOOZ4CY=
+github.com/go-gormigrate/gormigrate/v2 v2.1.2/go.mod h1:9nHVX6z3FCMCQPA7PThGcA55t22yKQfK/Dnsf5i7hUo=
+github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
+github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
+github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
+github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs=
+github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns=
+github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M=
+github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I=
+github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM=
+github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
+github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
+github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
+github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
+github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
+github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
+github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
+github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao=
+github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
+github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
+github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
+github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
+github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
+github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=
+github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
+github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA=
+github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw=
+github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
+github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
+github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8=
+github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
+github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
+github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
+github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
+github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
+github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
+github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
+github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
+github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
+github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
+github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
+github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
+github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
+github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/mojocn/base64Captcha v1.3.6 h1:gZEKu1nsKpttuIAQgWHO+4Mhhls8cAKyiV2Ew03H+Tw=
+github.com/mojocn/base64Captcha v1.3.6/go.mod h1:i5CtHvm+oMbj1UzEPXaA8IH/xHFZ3DGY3Wh3dBpZ28E=
+github.com/nicksnyder/go-i18n/v2 v2.4.0 h1:3IcvPOAvnCKwNm0TB0dLDTuawWEj+ax/RERNC+diLMM=
+github.com/nicksnyder/go-i18n/v2 v2.4.0/go.mod h1:nxYSZE9M0bf3Y70gPQjN9ha7XNHX7gMc814+6wVyEI4=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
+github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
+github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
+github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
+github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
+github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
+github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
+github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
+github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
+github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
+github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
+github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
+github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
+github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
+github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
+github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
+github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
+github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
+github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
+github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
+github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
+github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
+github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
+github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
+github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
+github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE=
+github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg=
+github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M=
+github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo=
+github.com/swaggo/swag v1.16.3 h1:PnCYjPCah8FK4I26l2F/KQ4yz3sILcVUN3cTlBFA9Pg=
+github.com/swaggo/swag v1.16.3/go.mod h1:DImHIuOFXKpMFAQjcC7FG4m3Dg4+QuUgUzJmKjI/gRk=
+github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
+github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
+github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
+github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
+github.com/xlzd/gotp v0.1.0 h1:37blvlKCh38s+fkem+fFh7sMnceltoIEBYTVXyoa5Po=
+github.com/xlzd/gotp v0.1.0/go.mod h1:ndLJ3JKzi3xLmUProq4LLxCuECL93dG9WASNLpHz8qg=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
+go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
+go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
+go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
+go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
+golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
+golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
+golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
+golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
+golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
+golang.org/x/image v0.13.0 h1:3cge/F/QTkNLauhf2QoE9zp+7sr+ZcL4HnoZmdwg9sg=
+golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
+golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
+golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
+golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
+golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
+golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
+golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
+golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
+google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gorm.io/gorm v1.25.11 h1:/Wfyg1B/je1hnDx3sMkX+gAlxrlZpn6X0BXRlwXlvHg=
+gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE=
+modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY=
+modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
+modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
+modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds=
+modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
+modernc.org/sqlite v1.23.1 h1:nrSBg4aRQQwq59JpvGEQ15tNxoO5pX/kUjcRNwSAGQM=
+modernc.org/sqlite v1.23.1/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk=
+nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
+rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
diff --git a/core/i18n/i18n.go b/core/i18n/i18n.go
new file mode 100644
index 000000000..db6867285
--- /dev/null
+++ b/core/i18n/i18n.go
@@ -0,0 +1,98 @@
+package i18n
+
+import (
+	"embed"
+	"strings"
+
+	"github.com/1Panel-dev/1Panel/core/global"
+
+	"github.com/gin-gonic/gin"
+	"github.com/nicksnyder/go-i18n/v2/i18n"
+	"golang.org/x/text/language"
+	"gopkg.in/yaml.v3"
+)
+
+func GetMsgWithMap(key string, maps map[string]interface{}) string {
+	var content string
+	if maps == nil {
+		content, _ = global.I18n.Localize(&i18n.LocalizeConfig{
+			MessageID: key,
+		})
+	} else {
+		content, _ = global.I18n.Localize(&i18n.LocalizeConfig{
+			MessageID:    key,
+			TemplateData: maps,
+		})
+	}
+	content = strings.ReplaceAll(content, ": <no value>", "")
+	if content == "" {
+		return key
+	} else {
+		return content
+	}
+}
+
+func GetMsgWithName(key string, name string, err error) string {
+	var (
+		content string
+		dataMap = make(map[string]interface{})
+	)
+	dataMap["name"] = name
+	if err != nil {
+		dataMap["err"] = err.Error()
+	}
+	content, _ = global.I18n.Localize(&i18n.LocalizeConfig{
+		MessageID:    key,
+		TemplateData: dataMap,
+	})
+	content = strings.ReplaceAll(content, "<no value>", "")
+	if content == "" {
+		return key
+	} else {
+		return content
+	}
+}
+
+func GetErrMsg(key string, maps map[string]interface{}) string {
+	var content string
+	if maps == nil {
+		content, _ = global.I18n.Localize(&i18n.LocalizeConfig{
+			MessageID: key,
+		})
+	} else {
+		content, _ = global.I18n.Localize(&i18n.LocalizeConfig{
+			MessageID:    key,
+			TemplateData: maps,
+		})
+	}
+	return content
+}
+
+func GetMsgByKey(key string) string {
+	content, _ := global.I18n.Localize(&i18n.LocalizeConfig{
+		MessageID: key,
+	})
+	return content
+}
+
+//go:embed lang/*
+var fs embed.FS
+var bundle *i18n.Bundle
+
+func UseI18n() gin.HandlerFunc {
+	return func(context *gin.Context) {
+		lang := context.GetHeader("Accept-Language")
+		if lang == "" {
+			lang = "zh"
+		}
+		global.I18n = i18n.NewLocalizer(bundle, lang)
+	}
+}
+
+func Init() {
+	bundle = i18n.NewBundle(language.Chinese)
+	bundle.RegisterUnmarshalFunc("yaml", yaml.Unmarshal)
+	_, _ = bundle.LoadMessageFileFS(fs, "lang/zh.yaml")
+	_, _ = bundle.LoadMessageFileFS(fs, "lang/en.yaml")
+	_, _ = bundle.LoadMessageFileFS(fs, "lang/zh-Hant.yaml")
+}
diff --git a/core/i18n/lang/en.yaml b/core/i18n/lang/en.yaml
new file mode 100644
index 000000000..a3582c69f
--- /dev/null
+++ b/core/i18n/lang/en.yaml
@@ -0,0 +1,198 @@
+ErrInvalidParams: "Request parameter error: {{ .detail }}"
+ErrTokenParse: "Token generation error: {{ .detail }}"
+ErrInitialPassword: "Initial password error"
+ErrInternalServer: "Service internal error: {{ .detail }}"
+ErrRecordExist: "Record already exists"
+ErrRecordNotFound: "Records not found"
+ErrStructTransform: "Type conversion failure: {{ .detail }}"
+ErrNotLogin: "User is not Login: {{ .detail }}"
+ErrPasswordExpired: "The current password has expired: {{ .detail }}"
+ErrNotSupportType: "The system does not support the current type: {{ .detail }}"
+
+#common
+ErrNameIsExist: "Name is already exist"
+ErrDemoEnvironment: "Demo server, prohibit this operation!"
+ErrCmdTimeout: "Command execution timed out!"
+ErrCmdIllegal: "The command contains illegal characters. Please modify and try again!"
+ErrPortExist: '{{ .port }} port is already occupied by {{ .type }} [{{ .name }}]'
+TYPE_APP: "Application"
+TYPE_RUNTIME: "Runtime environment"
+TYPE_DOMAIN: "Domain name"
+ErrTypePort: 'Port {{ .name }} format error'
+ErrTypePortRange: 'Port range needs to be between 1-65535'
+Success: "Success"
+Failed: "Failed"
+SystemRestart: "System restart causes task interruption"
+
+#app
+ErrPortInUsed: "{{ .detail }} port already in use"
+ErrAppLimit: "App exceeds install limit"
+ErrAppRequired: "{{ .detail }} app is required"
+ErrNotInstall: "App not installed"
+ErrPortInOtherApp: "{{ .port }} port  already in use by app  {{ .apps }}"
+ErrDbUserNotValid: "Stock database, username and password do not match!"
+ErrDockerComposeNotValid: "docker-compose file format error!"
+ErrUpdateBuWebsite: 'The application was updated successfully, but the modification of the website configuration file failed, please check the configuration!'
+Err1PanelNetworkFailed: 'Default container network creation failed! {{ .detail }}'
+ErrFileParse: 'Application docker-compose file parsing failed!'
+ErrInstallDirNotFound: 'installation directory does not exist'
+AppStoreIsUpToDate: 'The app store is already up to date!'
+LocalAppVersionNull: 'The {{.name}} app is not synced to version! Could not add to application list'
+LocalAppVersionErr: '{{.name}} failed to sync version {{.version}}! {{.err}}'
+ErrFileNotFound: '{{.name}} file does not exist'
+ErrFileParseApp: 'Failed to parse {{.name}} file {{.err}}'
+ErrAppDirNull: 'version folder does not exist'
+LocalAppErr: "App {{.name}} sync failed! {{.err}}"
+ErrContainerName: "ContainerName is already exist"
+ErrAppSystemRestart: "1Panel restart causes the task to terminate"
+ErrCreateHttpClient: "Failed to create HTTP request {{.err}}"
+ErrHttpReqTimeOut: "Request timed out {{.err}}"
+ErrHttpReqFailed: "Request failed {{.err}}"
+ErrHttpReqNotFound: "The file does not exist"
+ErrNoSuchHost: "Network connection failed"
+ErrImagePullTimeOut: 'Image pull timeout'
+ErrContainerNotFound: '{{ .name }} container does not exist'
+ErrContainerMsg: '{{ .name }} container is abnormal, please check the log on the container page for details'
+ErrAppBackup: '{{ .name }} application backup failed err {{.err}}'
+ErrImagePull: '{{ .name }} image pull failed err {{.err}}'
+ErrVersionTooLow: 'The current 1Panel version is too low to update the app store, please upgrade the version'
+ErrAppNameExist: 'App name is already exist'
+AppStoreIsSyncing: 'The App Store is syncing, please try again later'
+ErrGetCompose: "Failed to obtain docker-compose.yml file! {{ .detail }}"
+ErrAppWarn: "Abnormal status, please check the log"
+ErrAppParamKey: "Parameter {{ .name }} field exception"
+ErrAppUpgrade: "Failed to upgrade application {{ .name }} {{ .err }}"
+AppRecover: "App {{ .name }} rolled back "
+PullImageStart: "Start pulling image {{ .name }}"
+PullImageSuccess: "Image pulled successfully"
+UpgradeAppStart: "Start upgrading application {{ .name }}"
+UpgradeAppSuccess: "App {{ .name }} upgraded successfully"
+
+#file
+ErrFileCanNotRead: "File can not read"
+ErrFileToLarge: "file is too large"
+ErrPathNotFound: "Path is not found"
+ErrMovePathFailed: "The target path cannot contain the original path!"
+ErrLinkPathNotFound: "Target path does not exist!"
+ErrFileIsExist: "File or directory already exists!"
+ErrFileUpload: "Failed to upload file {{.name}}  {{.detail}}"
+ErrFileDownloadDir: "Download folder not supported"
+ErrCmdNotFound: "{{ .name}} command does not exist, please install this command on the host first"
+ErrSourcePathNotFound:  "Source directory does not exist"
+ErrFavoriteExist: "This path has been collected"
+ErrInvalidChar: "Illegal characters are prohibited"
+
+#website
+ErrDomainIsExist: "Domain is already exist"
+ErrAliasIsExist: "Alias is already exist"
+ErrAppDelete: 'Other Website use this App'
+ErrGroupIsUsed: 'The group is in use and cannot be deleted'
+ErrBackupMatch: 'the backup file does not match the current partial data of the website: {{ .detail}}'
+ErrBackupExist: 'the backup file corresponds to a portion of the original data that does not exist: {{ .detail}}'
+ErrPHPResource: 'The local runtime does not support switching!'
+ErrPathPermission: 'A folder with non-1000:1000 permissions was detected in the index directory, which may cause an Access denied error when accessing the website. Please click the save button above'
+ErrDomainIsUsed: "Domain is already used by website {{ .name }}"
+ErrDomainFormat: "{{ .name }} domain format error"
+ErrDefaultAlias: "default is a reserved code name, please use another code name"
+
+#ssl
+ErrSSLCannotDelete: "The certificate {{ .name }} is being used by the website and cannot be removed"
+ErrAccountCannotDelete: "The certificate associated with the account cannot be deleted"
+ErrSSLApply: "The certificate continues to be signed successfully, but openresty reload fails, please check the configuration!"
+ErrEmailIsExist: 'Email is already exist'
+ErrSSLKeyNotFound: 'The private key file does not exist'
+ErrSSLCertificateNotFound: 'The certificate file does not exist'
+ErrSSLKeyFormat: 'Private key file verification error'
+ErrSSLCertificateFormat: 'Certificate file format error, please use pem format'
+ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid or EabHmacKey cannot be empty'
+ErrOpenrestyNotFound: 'Http mode requires Openresty to be installed first'
+ApplySSLStart: 'Start applying for certificate, domain name [{{ .domain }}] application method [{{ .type }}] '
+dnsAccount: "DNS Automatic"
+dnsManual: "DNS Manual"
+http: "HTTP"
+ApplySSLFailed: 'Application for [{{ .domain }}] certificate failed, {{.detail}} '
+ApplySSLSuccess: 'Application for [{{ .domain }}] certificate successful! ! '
+DNSAccountName: 'DNS account [{{ .name }}] manufacturer [{{.type}}]'
+PushDirLog: 'Certificate pushed to directory [{{ .path }}] {{ .status }}'
+ErrDeleteCAWithSSL: "There is an issued certificate under the current organization and cannot be deleted"
+ErrDeleteWithPanelSSL: "Panel SSL configuration uses this certificate and cannot be deleted"
+ErrDefaultCA: "The default organization cannot be deleted"
+ApplyWebSiteSSLLog: "Start updating {{ .name }} website certificate"
+ErrUpdateWebsiteSSL: "{{ .name }} website failed to update certificate: {{ .err }}"
+ApplyWebSiteSSLSuccess: "Update website certificate successfully"
+
+#mysql
+ErrUserIsExist: "The current user already exists. Please enter a new user"
+ErrDatabaseIsExist: "The current database already exists. Please enter a new database"
+ErrExecTimeOut: "SQL execution timed out, please check the database"
+ErrRemoteExist: "The remote database already exists with that name, please modify it and try again"
+ErrLocalExist: "The local database already exists with that name, please modify it and try again"
+
+#redis
+ErrTypeOfRedis: "The recovery file type does not match the current persistence mode. Modify the file type and try again"
+
+#container
+ErrInUsed: "{{ .detail }} is in use and cannot be deleted"
+ErrObjectInUsed: "This object is in use and cannot be deleted"
+ErrPortRules: "The number of ports does not match, please re-enter!"
+ErrPgImagePull: "Image pull timeout. Please configure image acceleration or manually pull the postgres:16.0-alpine image and try again"
+
+#runtime
+ErrDirNotFound: "The build folder does not exist! Please check file integrity!"
+ErrFileNotExist: "{{ .detail }} file does not exist! Please check source file integrity!"
+ErrImageBuildErr: "Image build failed"
+ErrImageExist: "Image is already exist!"
+ErrDelWithWebsite: "The operating environment has been associated with a website and cannot be deleted"
+ErrRuntimeStart: "Failed to start"
+ErrPackageJsonNotFound: "package.json file does not exist"
+ErrScriptsNotFound: "No scripts configuration item was found in package.json"
+ErrContainerNameNotFound: "Unable to get container name, please check .env file"
+ErrNodeModulesNotFound: "The node_modules folder does not exist! Please edit the running environment or wait for the running environment to start successfully"
+
+#setting
+ErrBackupInUsed: "The backup account is already being used in a cronjob and cannot be deleted."
+ErrBackupCheck: "Backup account test connection failed {{ .err}}"
+ErrOSSConn: "Unable to retrieve the latest version, please check if the server can connect to the external network."
+ErrEntrance: "Security entrance information error. Please check and try again!"
+
+#tool
+ErrConfigNotFound: "Configuration file does not exist"
+ErrConfigParse: "Configuration file format error"
+ErrConfigIsNull: "The configuration file is not allowed to be empty"
+ErrConfigDirNotFound: "The running directory does not exist"
+ErrConfigAlreadyExist: "A configuration file with the same name already exists"
+ErrUserFindErr: "Failed to find user {{ .name }} {{ .err }}"
+
+#ssh
+ErrFirewall: "No firewalld or ufw service is detected. Please check and try again!"
+
+#cronjob
+ErrBashExecute: "Script execution error, please check the specific information in the task output text area."
+ErrCutWebsiteLog: "{{ .name }} website log cutting failed, error {{ .err }}"
+CutWebsiteLogSuccess: "{{ .name }} website log cut successfully, backup path {{ .path }}"
+
+#toolbox
+ErrNotExistUser: "The current user does not exist. Please modify and retry!"
+ErrBanAction: "Setting failed, the current {{ .name }} service is unavailable, please check and try again!"
+ErrClamdscanNotFound: "The clamdscan command was not detected, please refer to the documentation to install it!"
+
+#waf
+ErrScope: "Modification of this configuration is not supported"
+ErrStateChange: "State modification failed"
+ErrRuleExist: "Rule is Exist"
+ErrRuleNotExist: "Rule is not Exist"
+ErrParseIP: "IP format error"
+ErrDefaultIP: "default is a reserved name, please change it to another name"
+ErrGroupInUse: "The IP group is used by the black/white list and cannot be deleted"
+ErrGroupExist: "IP group name already exists"
+ErrIPRange: "Wrong IP range"
+ErrIPExist: "IP is exit"
+
+#license
+ErrLicense: "License format error, please check and try again!"
+ErrLicenseCheck: "License verification failed, please check and try again!"
+ErrLicenseSave: "Failed to save license information, error {{ .err }}, please try again!"
+ErrLicenseSync: "Failed to sync license information, no license information detected in the database!"
+ErrXpackNotFound: "This section is a professional edition feature, please import the license first in Panel Settings-License interface"
+ErrXpackNotActive: "This section is a professional edition feature, please synchronize the license status first in Panel Settings-License interface"
+ErrXpackOutOfDate: "The current license has expired, please re-import the license in Panel Settings-License interface"
diff --git a/core/i18n/lang/zh-Hant.yaml b/core/i18n/lang/zh-Hant.yaml
new file mode 100644
index 000000000..56a8e2227
--- /dev/null
+++ b/core/i18n/lang/zh-Hant.yaml
@@ -0,0 +1,200 @@
+ErrInvalidParams: "請求參數錯誤: {{ .detail }}"
+ErrTokenParse: "Token 產生錯誤: {{ .detail }}"
+ErrInitialPassword: "原密碼錯誤"
+ErrInternalServer: "伺服器內部錯誤: {{ .detail }}"
+ErrRecordExist: "記錄已存在"
+ErrRecordNotFound: "記錄未找到"
+ErrStructTransform: "類型轉換失敗: {{ .detail }}"
+ErrNotLogin: "用戶未登入: {{ .detail }}"
+ErrPasswordExpired: "當前密碼已過期: {{ .detail }}"
+ErrNotSupportType: "系統暫不支持當前類型: {{ .detail }}"
+
+#common
+ErrNameIsExist: "名稱已存在"
+ErrDemoEnvironment: "演示伺服器,禁止此操作!"
+ErrCmdTimeout: "指令執行超時!"
+ErrCmdIllegal: "執行命令中存在不合法字符,請修改後重試!"
+ErrPortExist: '{{ .port }} 埠已被 {{ .type }} [{{ .name }}] 佔用'
+TYPE_APP: "應用"
+TYPE_RUNTIME: "運作環境"
+TYPE_DOMAIN: "網域名稱"
+ErrTypePort: '埠 {{ .name }} 格式錯誤'
+ErrTypePortRange: '連接埠範圍需要在 1-65535 之間'
+Success: "成功"
+Failed: "失敗"
+SystemRestart: "系統重啟導致任務中斷"
+ErrInvalidChar: "禁止使用非法字元"
+
+#app
+ErrPortInUsed: "{{ .detail }} 端口已被佔用!"
+ErrAppLimit: "應用超出安裝數量限制"
+ErrAppRequired: "請先安裝 {{ .detail }} 應用"
+ErrNotInstall: "應用未安裝"
+ErrPortInOtherApp: "{{ .port }} 端口已被應用 {{ .apps }} 佔用!"
+ErrDbUserNotValid: "儲存資料庫,用戶名密碼不匹配!"
+ErrDockerComposeNotValid: "docker-compose 文件格式錯誤"
+ErrUpdateBuWebsite: '應用更新成功,但是網站配置文件修改失敗,請檢查配置!'
+Err1PanelNetworkFailed: '默認容器網絡創建失敗!{{ .detail }}'
+ErrFileParse: '應用 docker-compose 文件解析失敗!'
+ErrInstallDirNotFound: '安裝目錄不存在'
+AppStoreIsUpToDate: '應用商店已經是最新版本'
+LocalAppVersionNull: '{{.name}} 應用未同步到版本!無法添加到應用列表'
+LocalAppVersionErr: '{{.name}} 同步版本 {{.version}} 失敗!{{.err}}'
+ErrFileNotFound: '{{.name}} 文件不存在'
+ErrFileParseApp: '{{.name}} 文件解析失敗 {{.err}}'
+ErrAppDirNull: '版本資料夾不存在'
+LocalAppErr: "應用 {{.name}} 同步失敗!{{.err}}"
+ErrContainerName: "容器名稱已存在"
+ErrAppSystemRestart: "1Panel 重啟導致任務中斷"
+ErrCreateHttpClient: "創建HTTP請求失敗 {{.err}}"
+ErrHttpReqTimeOut: "請求超時 {{.err}}"
+ErrHttpReqFailed: "請求失敗 {{.err}}"
+ErrHttpReqNotFound: "文件不存在"
+ErrNoSuchHost: "網路連接失敗"
+ErrImagePullTimeOut: "鏡像拉取超時"
+ErrContainerNotFound: '{{ .name }} 容器不存在'
+ErrContainerMsg: '{{ .name }} 容器異常,具體請在容器頁面查看日誌'
+ErrAppBackup: '{{ .name }} 應用備份失敗 err {{.err}}'
+ErrImagePull: '{{ .name }} 鏡像拉取失敗 err {{.err}}'
+ErrVersionTooLow: '當前 1Panel 版本過低,無法更新應用商店,請升級版本之後操作'
+ErrAppNameExist: '應用名稱已存在'
+AppStoreIsSyncing: '應用程式商店正在同步中,請稍後再試'
+ErrGetCompose: "docker-compose.yml 檔案取得失敗!{{ .detail }}"
+ErrAppWarn: "狀態異常,請查看日誌"
+ErrAppParamKey: "參數 {{ .name }} 欄位異常"
+ErrAppUpgrade: "應用程式 {{ .name }} 升級失敗 {{ .err }}"
+AppRecover: "應用程式 {{ .name }} 回滾 "
+PullImageStart: "開始拉取鏡像 {{ .name }}"
+PullImageSuccess: "鏡像拉取成功"
+UpgradeAppStart: "開始升級應用程式 {{ .name }}"
+UpgradeAppSuccess: "應用程式 {{ .name }} 升級成功"
+
+#file
+ErrFileCanNotRead: "此文件不支持預覽"
+ErrFileToLarge: "文件超過10M,無法打開"
+ErrPathNotFound: "目錄不存在"
+ErrMovePathFailed: "目標路徑不能包含原路徑!"
+ErrLinkPathNotFound: "目標路徑不存在!"
+ErrFileIsExist: "文件或文件夾已存在!"
+ErrFileUpload: "{{ .name }} 上傳文件失敗 {{ .detail}}"
+ErrFileDownloadDir: "不支持下載文件夾"
+ErrCmdNotFound: "{{ .name}} 命令不存在,請先在宿主機安裝此命令"
+ErrSourcePathNotFound:  "源目錄不存在"
+ErrFavoriteExist: "已收藏此路徑"
+
+#website
+ErrDomainIsExist: "域名已存在"
+ErrAliasIsExist: "代號已存在"
+ErrAppDelete: '其他網站使用此應用,無法刪除'
+ErrGroupIsUsed: '分組正在使用中,無法刪除'
+ErrBackupMatch: '該備份文件與當前網站部分數據不匹配: {{ .detail}}'
+ErrBackupExist: '該備份文件對應部分原數據不存在: {{ .detail}}'
+ErrPHPResource: '本地運行環境不支持切換!'
+ErrPathPermission: 'index 目錄下偵測到非 1000:1000 權限資料夾,可能導致網站存取 Access denied 錯誤,請點擊上方儲存按鈕'
+ErrDomainIsUsed: "域名已被網站【{{ .name }}】使用"
+ErrDomainFormat: "{{ .name }} 域名格式不正確"
+ErrDefaultAlias: "default 為保留代號,請使用其他代號"
+
+#ssl
+ErrSSLCannotDelete: "{{ .name }} 證書正在被網站使用,無法刪除"
+ErrAccountCannotDelete: "帳號關聯證書,無法刪除"
+ErrSSLApply: "證書續簽成功,openresty reload失敗,請檢查配置!"
+ErrEmailIsExist: '郵箱已存在'
+ErrSSLKeyNotFound: '私鑰文件不存在'
+ErrSSLCertificateNotFound: '證書文件不存在'
+ErrSSLKeyFormat: '私鑰文件校驗錯誤'
+ErrSSLCertificateFormat: '證書文件格式錯誤,請使用 pem 格式'
+ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid 或 EabHmacKey 不能為空'
+ErrOpenrestyNotFound: 'Http 模式需要先安裝 Openresty'
+ApplySSLStart: '開始申請憑證,網域 [{{ .domain }}] 申請方式 [{{ .type }}] '
+dnsAccount: "DNS 自動"
+dnsManual: "DNS 手排"
+http: "HTTP"
+ApplySSLFailed: '申請 [{{ .domain }}] 憑證失敗, {{.detail}} '
+ApplySSLSuccess: '申請 [{{ .domain }}] 憑證成功! ! '
+DNSAccountName: 'DNS 帳號 [{{ .name }}] 廠商 [{{.type}}]'
+PushDirLog: '憑證推送到目錄 [{{ .path }}] {{ .status }}'
+ErrDeleteCAWithSSL: "目前機構下存在已簽發證書,無法刪除"
+ErrDeleteWithPanelSSL: "面板 SSL 配置使用此證書,無法刪除"
+ErrDefaultCA: "默認機構不能刪除"
+ApplyWebSiteSSLLog: "開始更新 {{ .name }} 網站憑證"
+ErrUpdateWebsiteSSL: "{{ .name }} 網站更新憑證失敗: {{ .err }}"
+ApplyWebSiteSSLSuccess: "更新網站憑證成功"
+
+
+#mysql
+ErrUserIsExist: "當前用戶已存在,請重新輸入"
+ErrDatabaseIsExist: "當前資料庫已存在,請重新輸入"
+ErrExecTimeOut: "SQL 執行超時,請檢查數據庫"
+ErrRemoteExist: "遠程數據庫已存在該名稱,請修改後重試"
+ErrLocalExist: "本地數據庫已存在該名稱,請修改後重試"
+
+#redis
+ErrTypeOfRedis: "恢復文件類型與當前持久化方式不符,請修改後重試"
+
+#container
+ErrInUsed: "{{ .detail }} 正被使用,無法刪除"
+ErrObjectInUsed: "該對象正被使用,無法刪除"
+ErrPortRules: "端口數目不匹配,請重新輸入!"
+ErrPgImagePull: "鏡像拉取超時,請配置鏡像加速或手動拉取 postgres:16.0-alpine 鏡像後重試"
+
+#runtime
+ErrDirNotFound: "build 文件夾不存在!請檢查文件完整性!"
+ErrFileNotExist: "{{ .detail }} 文件不存在!請檢查源文件完整性!"
+ErrImageBuildErr: "鏡像 build 失敗"
+ErrImageExist: "鏡像已存在!"
+ErrDelWithWebsite: "運行環境已經關聯網站,無法刪除"
+ErrRuntimeStart: "啟動失敗"
+ErrPackageJsonNotFound: "package.json 文件不存在"
+ErrScriptsNotFound: "沒有在 package.json 中找到 scripts 配置項"
+ErrContainerNameNotFound: "無法取得容器名稱,請檢查 .env 文件"
+ErrNodeModulesNotFound: "node_modules 文件夾不存在!請編輯運行環境或者等待運行環境啟動成功"
+
+#setting
+ErrBackupInUsed: "該備份帳號已在計劃任務中使用,無法刪除"
+ErrBackupCheck: "備份帳號測試連接失敗 {{ .err}}"
+ErrOSSConn: "無法獲取最新版本,請確認伺服器是否能夠連接外部網路。"
+ErrEntrance: "安全入口信息錯誤,請檢查後重試!"
+
+#tool
+ErrConfigNotFound: "配置文件不存在"
+ErrConfigParse: "配置文件格式有誤"
+ErrConfigIsNull: "配置文件不允許為空"
+ErrConfigDirNotFound: "運行目錄不存在"
+ErrConfigAlreadyExist: "已存在同名配置文件"
+ErrUserFindErr: "用戶 {{ .name }} 查找失敗 {{ .err }}"
+
+#ssh
+ErrFirewall: "當前未檢測到系統 firewalld 或 ufw 服務,請檢查後重試!"
+
+#cronjob
+ErrBashExecute: "腳本執行錯誤,請在任務輸出文本域中查看具體信息。"
+ErrCutWebsiteLog: "{{ .name }} 網站日誌切割失敗,錯誤 {{ .err }}"
+CutWebsiteLogSuccess: "{{ .name }} 網站日誌切割成功,備份路徑 {{ .path }}"
+
+#toolbox
+ErrNotExistUser: "當前使用者不存在,請修改後重試!"
+ErrBanAction: "設置失敗,當前 {{ .name }} 服務不可用,請檢查後重試!"
+ErrClamdscanNotFound: "未偵測到 clamdscan 指令,請參考文件安裝!"
+
+#waf
+ErrScope: "不支援修改此配置"
+ErrStateChange: "狀態修改失敗"
+ErrRuleExist: "規則已存在"
+ErrRuleNotExist: "規則不存在"
+ErrParseIP: "IP 格式錯誤"
+ErrDefaultIP: "default 為保留名稱,請更換其他名稱"
+ErrGroupInUse: "IP 群組被黑/白名單使用,無法刪除"
+ErrGroupExist: "IP 群組名稱已存在"
+ErrIPRange: "IP 範圍錯誤"
+ErrIPExist: "IP 已存在"
+
+
+#license
+ErrLicense: "許可證格式錯誤,請檢查後重試!"
+ErrLicenseCheck: "許可證校驗失敗,請檢查後重試!"
+ErrLicenseSave: "許可證信息保存失敗,錯誤 {{ .err }}, 請重試!"
+ErrLicenseSync: "許可證信息同步失敗,資料庫中未檢測到許可證信息!"
+ErrXpackNotFound: "該部分為專業版功能,請先在 面板設置-許可證 界面導入許可證"
+ErrXpackNotActive: "該部分為專業版功能,請先在 面板設置-許可證 界面同步許可證狀態"
+ErrXpackOutOfDate: "當前許可證已過期,請重新在 面板設置-許可證 界面導入許可證"
diff --git a/core/i18n/lang/zh.yaml b/core/i18n/lang/zh.yaml
new file mode 100644
index 000000000..eca156380
--- /dev/null
+++ b/core/i18n/lang/zh.yaml
@@ -0,0 +1,202 @@
+ErrInvalidParams: "请求参数错误: {{ .detail }}"
+ErrTokenParse: "Token 生成错误: {{ .detail }}"
+ErrInitialPassword: "原密码错误"
+ErrInternalServer: "服务内部错误: {{ .detail }}"
+ErrRecordExist: "记录已存在"
+ErrRecordNotFound: "记录未能找到"
+ErrStructTransform: "类型转换失败: {{ .detail }}"
+ErrNotLogin: "用户未登录: {{ .detail }}"
+ErrPasswordExpired: "当前密码已过期: {{ .detail }}"
+ErrNotSupportType: "系统暂不支持当前类型: {{ .detail }}"
+
+#common
+ErrNameIsExist: "名称已存在"
+ErrDemoEnvironment: "演示服务器,禁止此操作!"
+ErrCmdTimeout: "命令执行超时!"
+ErrCmdIllegal: "执行命令中存在不合法字符,请修改后重试!"
+ErrPortExist: '{{ .port }} 端口已被 {{ .type }} [{{ .name }}] 占用'
+TYPE_APP: "应用"
+TYPE_RUNTIME: "运行环境"
+TYPE_DOMAIN: "域名"
+ErrTypePort: '端口 {{ .name }} 格式错误'
+ErrTypePortRange: '端口范围需要在 1-65535 之间'
+Success: "成功"
+Failed: "失败"
+SystemRestart: "系统重启导致任务中断"
+
+#app
+ErrPortInUsed: "{{ .detail }} 端口已被占用!"
+ErrAppLimit: "应用超出安装数量限制"
+ErrAppRequired: "请先安装 {{ .detail }} 应用"
+ErrNotInstall: "应用未安装"
+ErrPortInOtherApp: "{{ .port }} 端口已被应用 {{ .apps }} 占用!"
+ErrDbUserNotValid: "存量数据库,用户名密码不匹配!"
+ErrDockerComposeNotValid: "docker-compose 文件格式错误"
+ErrUpdateBuWebsite: '应用更新成功,但是网站配置文件修改失败,请检查配置!'
+Err1PanelNetworkFailed: '默认容器网络创建失败!{{ .detail }}'
+ErrFileParse: '应用 docker-compose 文件解析失败!'
+ErrInstallDirNotFound: '安装目录不存在'
+AppStoreIsUpToDate: '应用商店已经是最新版本'
+LocalAppVersionNull: '{{.name}} 应用未同步到版本!无法添加到应用列表'
+LocalAppVersionErr: '{{.name}} 同步版本 {{.version}} 失败!{{.err}}'
+ErrFileNotFound: '{{.name}} 文件不存在'
+ErrFileParseApp: '{{.name}} 文件解析失败 {{.err}}'
+ErrAppDirNull: '版本文件夹不存在'
+LocalAppErr: "应用 {{.name}} 同步失败!{{.err}}"
+ErrContainerName: "容器名称已存在"
+ErrAppSystemRestart: "1Panel 重启导致任务终止"
+ErrCreateHttpClient: "创建HTTP请求失败 {{.err}}"
+ErrHttpReqTimeOut: "请求超时 {{.err}}"
+ErrHttpReqFailed: "请求失败 {{.err}}"
+ErrHttpReqNotFound: "文件不存在"
+ErrNoSuchHost: "网络连接失败"
+ErrImagePullTimeOut: '镜像拉取超时'
+ErrContainerNotFound: '{{ .name }} 容器不存在'
+ErrContainerMsg: '{{ .name }} 容器异常,具体请在容器页面查看日志'
+ErrAppBackup: '{{ .name }} 应用备份失败 err {{.err}}'
+ErrImagePull: '镜像拉取失败 {{.err}}'
+ErrVersionTooLow: '当前 1Panel 版本过低,无法更新应用商店,请升级版本之后操作'
+ErrAppNameExist: '应用名称已存在'
+AppStoreIsSyncing: '应用商店正在同步中,请稍后再试'
+ErrGetCompose: "docker-compose.yml 文件获取失败!{{ .detail }}"
+ErrAppWarn: "状态异常,请查看日志"
+ErrAppParamKey: "参数 {{ .name }} 字段异常"
+ErrAppUpgrade: "应用 {{ .name }} 升级失败 {{ .err }}"
+AppRecover: "应用  {{ .name }} 回滚 "
+PullImageStart: "开始拉取镜像 {{ .name }}"
+PullImageSuccess: "镜像拉取成功"
+UpgradeAppStart: "开始升级应用 {{ .name }}"
+UpgradeAppSuccess: "应用  {{ .name }} 升级成功"
+
+#file
+ErrFileCanNotRead: "此文件不支持预览"
+ErrFileToLarge: "文件超过10M,无法打开"
+ErrPathNotFound: "目录不存在"
+ErrMovePathFailed: "目标路径不能包含原路径!"
+ErrLinkPathNotFound: "目标路径不存在!"
+ErrFileIsExist: "文件或文件夹已存在!"
+ErrFileUpload: "{{ .name }} 上传文件失败 {{ .detail}}"
+ErrFileDownloadDir: "不支持下载文件夹"
+ErrCmdNotFound: "{{ .name}} 命令不存在,请先在宿主机安装此命令"
+ErrSourcePathNotFound:  "源目录不存在"
+ErrFavoriteExist: "已收藏此路径"
+ErrInvalidChar: "禁止使用非法字符"
+
+#website
+ErrDomainIsExist: "域名已存在"
+ErrAliasIsExist: "代号已存在"
+ErrAppDelete: '其他网站使用此应用,无法删除'
+ErrGroupIsUsed: '分组正在使用中,无法删除'
+ErrBackupMatch: '该备份文件与当前网站部分数据不匹配 {{ .detail}}'
+ErrBackupExist: '该备份文件对应部分源数据不存在 {{ .detail}}'
+ErrPHPResource: '本地运行环境不支持切换!'
+ErrPathPermission: 'index 目录下检测到非 1000:1000 权限文件夹,可能导致网站访问 Access denied 错误,请点击上方保存按钮'
+ErrDomainIsUsed: "域名已被网站【{{ .name }}】使用"
+ErrDomainFormat: "{{ .name }} 域名格式不正确"
+ErrDefaultAlias: "default 为保留代号,请使用其他代号"
+
+#ssl
+ErrSSLCannotDelete: "{{ .name }} 证书正在被网站使用,无法删除"
+ErrAccountCannotDelete: "账号关联证书,无法删除"
+ErrSSLApply: "证书续签成功,openresty reload失败,请检查配置!"
+ErrEmailIsExist: '邮箱已存在'
+ErrSSLKeyNotFound: '私钥文件不存在'
+ErrSSLCertificateNotFound: '证书文件不存在'
+ErrSSLKeyFormat: '私钥文件校验失败'
+ErrSSLCertificateFormat: '证书文件格式错误,请使用 pem 格式'
+ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid 或 EabHmacKey 不能为空'
+ErrOpenrestyNotFound: 'Http 模式需要首先安装 Openresty'
+ApplySSLStart: '开始申请证书,域名 [{{ .domain }}] 申请方式 [{{ .type }}] '
+dnsAccount: "DNS 自动"
+dnsManual: "DNS 手动"
+http: "HTTP"
+ApplySSLFailed: '申请  [{{ .domain }}] 证书失败, {{.detail}} '
+ApplySSLSuccess: '申请 [{{ .domain }}] 证书成功!!'
+DNSAccountName: 'DNS 账号 [{{ .name }}] 厂商 [{{.type}}]'
+PushDirLog: '证书推送到目录 [{{ .path }}] {{ .status }}'
+ErrDeleteCAWithSSL: "当前机构下存在已签发证书,无法删除"
+ErrDeleteWithPanelSSL: "面板 SSL 配置使用此证书,无法删除"
+ErrDefaultCA: "默认机构不能删除"
+ApplyWebSiteSSLLog: "开始更新 {{ .name }} 网站证书"
+ErrUpdateWebsiteSSL: "{{ .name }} 网站更新证书失败: {{ .err }}"
+ApplyWebSiteSSLSuccess: "更新网站证书成功"
+ErrExecShell: "执行脚本失败 {{ .err }}"
+ExecShellStart: "开始执行脚本"
+ExecShellSuccess: "脚本执行成功"
+
+#mysql
+ErrUserIsExist: "当前用户已存在,请重新输入"
+ErrDatabaseIsExist: "当前数据库已存在,请重新输入"
+ErrExecTimeOut: "SQL 执行超时,请检查数据库"
+ErrRemoteExist: "远程数据库已存在该名称,请修改后重试"
+ErrLocalExist: "本地数据库已存在该名称,请修改后重试"
+
+#redis
+ErrTypeOfRedis: "恢复文件类型与当前持久化方式不符,请修改后重试"
+
+#container
+ErrInUsed: "{{ .detail }} 正被使用,无法删除"
+ErrObjectInUsed: "该对象正被使用,无法删除"
+ErrPortRules: "端口数目不匹配,请重新输入!"
+ErrPgImagePull: "镜像拉取超时,请配置镜像加速或手动拉取 postgres:16.0-alpine 镜像后重试"
+
+#runtime
+ErrDirNotFound: "build 文件夹不存在!请检查文件完整性!"
+ErrFileNotExist: "{{ .detail }} 文件不存在!请检查源文件完整性!"
+ErrImageBuildErr: "镜像 build 失败"
+ErrImageExist: "镜像已存在!"
+ErrDelWithWebsite: "运行环境已经关联网站,无法删除"
+ErrRuntimeStart: "启动失败"
+ErrPackageJsonNotFound: "package.json 文件不存在"
+ErrScriptsNotFound: "没有在 package.json 中找到 scripts 配置项"
+ErrContainerNameNotFound: "无法获取容器名称,请检查 .env 文件"
+ErrNodeModulesNotFound: "node_modules 文件夹不存在!请编辑运行环境或者等待运行环境启动成功"
+
+#setting
+ErrBackupInUsed: "该备份账号已在计划任务中使用,无法删除"
+ErrBackupCheck: "备份账号测试连接失败 {{ .err}}"
+ErrOSSConn: "无法获取最新版本,请确认服务器是否能够连接外部网络。"
+ErrEntrance: "安全入口信息错误,请检查后重试!"
+
+#tool
+ErrConfigNotFound: "配置文件不存在"
+ErrConfigParse: "配置文件格式有误"
+ErrConfigIsNull: "配置文件不允许为空"
+ErrConfigDirNotFound: "运行目录不存在"
+ErrConfigAlreadyExist: "已存在同名配置文件"
+ErrUserFindErr: "用户 {{ .name }} 查找失败 {{ .err }}"
+
+#ssh
+ErrFirewall: "当前未检测到系统 firewalld 或 ufw 服务,请检查后重试!"
+
+#cronjob
+ErrBashExecute: "脚本执行错误,请在任务输出文本域中查看具体信息。"
+ErrCutWebsiteLog: "{{ .name }} 网站日志切割失败,错误 {{ .err }}"
+CutWebsiteLogSuccess: "{{ .name }} 网站日志切割成功,备份路径 {{ .path }}"
+
+#toolbox
+ErrNotExistUser: "当前用户不存在,请修改后重试!"
+ErrBanAction: "设置失败,当前 {{ .name }} 服务不可用,请检查后重试!"
+ErrClamdscanNotFound: "未检测到 clamdscan 命令,请参考文档安装!"
+
+#waf
+ErrScope: "不支持修改此配置"
+ErrStateChange: "状态修改失败"
+ErrRuleExist: "规则已存在"
+ErrRuleNotExist: "规则不存在"
+ErrParseIP: "IP 格式错误"
+ErrDefaultIP: "default 为保留名称,请更换其他名称"
+ErrGroupInUse: "IP 组被黑/白名单使用,无法删除"
+ErrGroupExist: "IP 组名称已存在"
+ErrIPRange: "IP 范围错误"
+ErrIPExist: "IP 已存在"
+
+#license
+ErrLicense: "许可证格式错误,请检查后重试!"
+ErrLicenseCheck: "许可证校验失败,请检查后重试!"
+ErrLicenseSave: "许可证信息保存失败,错误 {{ .err }},请重试!"
+ErrLicenseSync: "许可证信息同步失败,数据库中未检测到许可证信息!"
+ErrXpackNotFound: "该部分为专业版功能,请先在 面板设置-许可证 界面导入许可证"
+ErrXpackNotActive: "该部分为专业版功能,请先在 面板设置-许可证 界面同步许可证状态"
+ErrXpackOutOfDate: "当前许可证已过期,请重新在 面板设置-许可证 界面导入许可证"
+
diff --git a/core/init/cache/badger_db/badger_db.go b/core/init/cache/badger_db/badger_db.go
new file mode 100644
index 000000000..a1508503a
--- /dev/null
+++ b/core/init/cache/badger_db/badger_db.go
@@ -0,0 +1,79 @@
+package badger_db
+
+import (
+	"fmt"
+	"time"
+
+	"github.com/dgraph-io/badger/v4"
+)
+
+type Cache struct {
+	db *badger.DB
+}
+
+func NewCacheDB(db *badger.DB) *Cache {
+	return &Cache{
+		db: db,
+	}
+}
+
+func (c *Cache) Set(key string, value interface{}) error {
+	err := c.db.Update(func(txn *badger.Txn) error {
+		v := []byte(fmt.Sprintf("%v", value))
+		return txn.Set([]byte(key), v)
+	})
+	return err
+}
+
+func (c *Cache) Del(key string) error {
+	err := c.db.Update(func(txn *badger.Txn) error {
+		return txn.Delete([]byte(key))
+	})
+	return err
+}
+
+func (c *Cache) Clean() error {
+	return c.db.DropAll()
+}
+
+func (c *Cache) Get(key string) ([]byte, error) {
+	var result []byte
+	err := c.db.View(func(txn *badger.Txn) error {
+		item, err := txn.Get([]byte(key))
+		if err != nil {
+			return err
+		}
+		err = item.Value(func(val []byte) error {
+			result = append([]byte{}, val...)
+			return nil
+		})
+		return err
+	})
+	return result, err
+}
+
+func (c *Cache) SetWithTTL(key string, value interface{}, duration time.Duration) error {
+	err := c.db.Update(func(txn *badger.Txn) error {
+		v := []byte(fmt.Sprintf("%v", value))
+		e := badger.NewEntry([]byte(key), v).WithTTL(duration)
+		return txn.SetEntry(e)
+	})
+	return err
+}
+
+func (c *Cache) PrefixScanKey(prefixStr string) ([]string, error) {
+	var res []string
+	err := c.db.View(func(txn *badger.Txn) error {
+		it := txn.NewIterator(badger.DefaultIteratorOptions)
+		defer it.Close()
+		prefix := []byte(prefixStr)
+		for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() {
+			item := it.Item()
+			k := item.Key()
+			res = append(res, string(k))
+			return nil
+		}
+		return nil
+	})
+	return res, err
+}
diff --git a/core/init/cache/cache.go b/core/init/cache/cache.go
new file mode 100644
index 000000000..2d9f1ade2
--- /dev/null
+++ b/core/init/cache/cache.go
@@ -0,0 +1,56 @@
+package cache
+
+import (
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/init/cache/badger_db"
+	"github.com/dgraph-io/badger/v4"
+)
+
+func Init() {
+	c := global.CONF.System.Cache
+
+	options := badger.Options{
+		Dir:                c,
+		ValueDir:           c,
+		ValueLogFileSize:   64 << 20,
+		ValueLogMaxEntries: 10 << 20,
+		VLogPercentile:     0.1,
+
+		MemTableSize:                  32 << 20,
+		BaseTableSize:                 2 << 20,
+		BaseLevelSize:                 10 << 20,
+		TableSizeMultiplier:           2,
+		LevelSizeMultiplier:           10,
+		MaxLevels:                     7,
+		NumGoroutines:                 4,
+		MetricsEnabled:                true,
+		NumCompactors:                 2,
+		NumLevelZeroTables:            5,
+		NumLevelZeroTablesStall:       15,
+		NumMemtables:                  1,
+		BloomFalsePositive:            0.01,
+		BlockSize:                     2 * 1024,
+		SyncWrites:                    false,
+		NumVersionsToKeep:             1,
+		CompactL0OnClose:              false,
+		VerifyValueChecksum:           false,
+		BlockCacheSize:                32 << 20,
+		IndexCacheSize:                0,
+		ZSTDCompressionLevel:          1,
+		EncryptionKey:                 []byte{},
+		EncryptionKeyRotationDuration: 10 * 24 * time.Hour, // Default 10 days.
+		DetectConflicts:               true,
+		NamespaceOffset:               -1,
+	}
+
+	cache, err := badger.Open(options)
+	if err != nil {
+		panic(err)
+	}
+	_ = cache.DropAll()
+	global.CacheDb = cache
+	global.CACHE = badger_db.NewCacheDB(cache)
+	global.LOG.Info("init cache successfully")
+}
diff --git a/core/init/db/db.go b/core/init/db/db.go
new file mode 100644
index 000000000..c8aaf9f0e
--- /dev/null
+++ b/core/init/db/db.go
@@ -0,0 +1,58 @@
+package db
+
+import (
+	"fmt"
+	"log"
+	"os"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/glebarez/sqlite"
+	"gorm.io/gorm"
+	"gorm.io/gorm/logger"
+)
+
+func Init() {
+	if _, err := os.Stat(global.CONF.System.DbPath); err != nil {
+		if err := os.MkdirAll(global.CONF.System.DbPath, os.ModePerm); err != nil {
+			panic(fmt.Errorf("init db dir failed, err: %v", err))
+		}
+	}
+	fullPath := global.CONF.System.DbPath + "/" + global.CONF.System.DbFile
+	if _, err := os.Stat(fullPath); err != nil {
+		f, err := os.Create(fullPath)
+		if err != nil {
+			panic(fmt.Errorf("init db file failed, err: %v", err))
+		}
+		_ = f.Close()
+	}
+
+	newLogger := logger.New(
+		log.New(os.Stdout, "\r\n", log.LstdFlags),
+		logger.Config{
+			SlowThreshold:             time.Second,
+			LogLevel:                  logger.Silent,
+			IgnoreRecordNotFoundError: true,
+			Colorful:                  false,
+		},
+	)
+
+	db, err := gorm.Open(sqlite.Open(fullPath), &gorm.Config{
+		DisableForeignKeyConstraintWhenMigrating: true,
+		Logger:                                   newLogger,
+	})
+	if err != nil {
+		panic(err)
+	}
+	_ = db.Exec("PRAGMA journal_mode = WAL;")
+	sqlDB, dbError := db.DB()
+	if dbError != nil {
+		panic(dbError)
+	}
+	sqlDB.SetConnMaxIdleTime(10)
+	sqlDB.SetMaxOpenConns(100)
+	sqlDB.SetConnMaxLifetime(time.Hour)
+
+	global.DB = db
+	global.LOG.Info("init db successfully")
+}
diff --git a/core/init/hook/hook.go b/core/init/hook/hook.go
new file mode 100644
index 000000000..23c778782
--- /dev/null
+++ b/core/init/hook/hook.go
@@ -0,0 +1,82 @@
+package hook
+
+import (
+	"strings"
+
+	"github.com/1Panel-dev/1Panel/core/app/repo"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/utils/cmd"
+	"github.com/1Panel-dev/1Panel/core/utils/common"
+	"github.com/1Panel-dev/1Panel/core/utils/encrypt"
+)
+
+func Init() {
+	settingRepo := repo.NewISettingRepo()
+	portSetting, err := settingRepo.Get(settingRepo.WithByKey("ServerPort"))
+	if err != nil {
+		global.LOG.Errorf("load service port from setting failed, err: %v", err)
+	}
+	global.CONF.System.Port = portSetting.Value
+	ipv6Setting, err := settingRepo.Get(settingRepo.WithByKey("Ipv6"))
+	if err != nil {
+		global.LOG.Errorf("load ipv6 status from setting failed, err: %v", err)
+	}
+	global.CONF.System.Ipv6 = ipv6Setting.Value
+	bindAddressSetting, err := settingRepo.Get(settingRepo.WithByKey("BindAddress"))
+	if err != nil {
+		global.LOG.Errorf("load bind address from setting failed, err: %v", err)
+	}
+	global.CONF.System.BindAddress = bindAddressSetting.Value
+	sslSetting, err := settingRepo.Get(settingRepo.WithByKey("SSL"))
+	if err != nil {
+		global.LOG.Errorf("load service ssl from setting failed, err: %v", err)
+	}
+	global.CONF.System.SSL = sslSetting.Value
+
+	if _, err := settingRepo.Get(settingRepo.WithByKey("SystemStatus")); err != nil {
+		_ = settingRepo.Create("SystemStatus", "Free")
+	}
+	if err := settingRepo.Update("SystemStatus", "Free"); err != nil {
+		global.LOG.Fatalf("init service before start failed, err: %v", err)
+	}
+
+	handleUserInfo(global.CONF.System.ChangeUserInfo, settingRepo)
+}
+
+func handleUserInfo(tags string, settingRepo repo.ISettingRepo) {
+	if len(tags) == 0 {
+		return
+	}
+	if tags == "all" {
+		if err := settingRepo.Update("UserName", common.RandStrAndNum(10)); err != nil {
+			global.LOG.Fatalf("init username before start failed, err: %v", err)
+		}
+		pass, _ := encrypt.StringEncrypt(common.RandStrAndNum(10))
+		if err := settingRepo.Update("Password", pass); err != nil {
+			global.LOG.Fatalf("init password before start failed, err: %v", err)
+		}
+		if err := settingRepo.Update("SecurityEntrance", common.RandStrAndNum(10)); err != nil {
+			global.LOG.Fatalf("init entrance before start failed, err: %v", err)
+		}
+		return
+	}
+	if strings.Contains(global.CONF.System.ChangeUserInfo, "username") {
+		if err := settingRepo.Update("UserName", common.RandStrAndNum(10)); err != nil {
+			global.LOG.Fatalf("init username before start failed, err: %v", err)
+		}
+	}
+	if strings.Contains(global.CONF.System.ChangeUserInfo, "password") {
+		pass, _ := encrypt.StringEncrypt(common.RandStrAndNum(10))
+		if err := settingRepo.Update("Password", pass); err != nil {
+			global.LOG.Fatalf("init password before start failed, err: %v", err)
+		}
+	}
+	if strings.Contains(global.CONF.System.ChangeUserInfo, "entrance") {
+		if err := settingRepo.Update("SecurityEntrance", common.RandStrAndNum(10)); err != nil {
+			global.LOG.Fatalf("init entrance before start failed, err: %v", err)
+		}
+	}
+
+	sudo := cmd.SudoHandleCmd()
+	_, _ = cmd.Execf("%s sed -i '/CHANGE_USER_INFO=%v/d' /usr/local/bin/1pctl", sudo, global.CONF.System.ChangeUserInfo)
+}
diff --git a/core/init/log/log.go b/core/init/log/log.go
new file mode 100644
index 000000000..52dc8cdd6
--- /dev/null
+++ b/core/init/log/log.go
@@ -0,0 +1,67 @@
+package log
+
+import (
+	"fmt"
+	"io"
+	"os"
+	"strings"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/configs"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/log"
+
+	"github.com/sirupsen/logrus"
+)
+
+const (
+	TimeFormat         = "2006-01-02 15:04:05"
+	FileTImeFormat     = "2006-01-02"
+	RollingTimePattern = "0 0  * * *"
+)
+
+func Init() {
+	l := logrus.New()
+	setOutput(l, global.CONF.LogConfig)
+	global.LOG = l
+	global.LOG.Info("init logger successfully")
+}
+
+func setOutput(logger *logrus.Logger, config configs.LogConfig) {
+	writer, err := log.NewWriterFromConfig(&log.Config{
+		LogPath:            global.CONF.System.LogPath,
+		FileName:           config.LogName,
+		TimeTagFormat:      FileTImeFormat,
+		MaxRemain:          config.MaxBackup,
+		RollingTimePattern: RollingTimePattern,
+		LogSuffix:          config.LogSuffix,
+	})
+	if err != nil {
+		panic(err)
+	}
+	level, err := logrus.ParseLevel(config.Level)
+	if err != nil {
+		panic(err)
+	}
+	fileAndStdoutWriter := io.MultiWriter(writer, os.Stdout)
+
+	logger.SetOutput(fileAndStdoutWriter)
+	logger.SetLevel(level)
+	logger.SetFormatter(new(MineFormatter))
+}
+
+type MineFormatter struct{}
+
+func (s *MineFormatter) Format(entry *logrus.Entry) ([]byte, error) {
+	detailInfo := ""
+	if entry.Caller != nil {
+		function := strings.ReplaceAll(entry.Caller.Function, "github.com/1Panel-dev/1Panel/core/", "")
+		detailInfo = fmt.Sprintf("(%s: %d)", function, entry.Caller.Line)
+	}
+	if len(entry.Data) == 0 {
+		msg := fmt.Sprintf("[%s] [%s] %s %s \n", time.Now().Format(TimeFormat), strings.ToUpper(entry.Level.String()), entry.Message, detailInfo)
+		return []byte(msg), nil
+	}
+	msg := fmt.Sprintf("[%s] [%s] %s %s {%v} \n", time.Now().Format(TimeFormat), strings.ToUpper(entry.Level.String()), entry.Message, detailInfo, entry.Data)
+	return []byte(msg), nil
+}
diff --git a/core/init/migration/migrate.go b/core/init/migration/migrate.go
new file mode 100644
index 000000000..ae28e8f44
--- /dev/null
+++ b/core/init/migration/migrate.go
@@ -0,0 +1,20 @@
+package migration
+
+import (
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/init/migration/migrations"
+
+	"github.com/go-gormigrate/gormigrate/v2"
+)
+
+func Init() {
+	m := gormigrate.New(global.DB, gormigrate.DefaultOptions, []*gormigrate.Migration{
+		migrations.Init,
+		migrations.InitSetting,
+	})
+	if err := m.Migrate(); err != nil {
+		global.LOG.Error(err)
+		panic(err)
+	}
+	global.LOG.Info("Migration run successfully")
+}
diff --git a/core/init/migration/migrations/init.go b/core/init/migration/migrations/init.go
new file mode 100644
index 000000000..fd1944a7d
--- /dev/null
+++ b/core/init/migration/migrations/init.go
@@ -0,0 +1,123 @@
+package migrations
+
+import (
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/app/model"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/utils/common"
+	"github.com/1Panel-dev/1Panel/core/utils/encrypt"
+	"github.com/go-gormigrate/gormigrate/v2"
+	"gorm.io/gorm"
+)
+
+var Init = &gormigrate.Migration{
+	ID: "20200809-add-table-operation-log",
+	Migrate: func(tx *gorm.DB) error {
+		return tx.AutoMigrate(
+			&model.OperationLog{},
+			&model.LoginLog{},
+			&model.Setting{},
+		)
+	},
+}
+
+var InitSetting = &gormigrate.Migration{
+	ID: "20200908-add-table-setting",
+	Migrate: func(tx *gorm.DB) error {
+		encryptKey := common.RandStr(16)
+		if err := tx.Create(&model.Setting{Key: "UserName", Value: global.CONF.System.Username}).Error; err != nil {
+			return err
+		}
+		global.CONF.System.EncryptKey = encryptKey
+		pass, _ := encrypt.StringEncrypt(global.CONF.System.Password)
+		if err := tx.Create(&model.Setting{Key: "Password", Value: pass}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "Theme", Value: "light"}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "MenuTabs", Value: "disable"}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "PanelName", Value: "1Panel"}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "Language", Value: "zh"}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "SessionTimeout", Value: "86400"}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "LocalTime", Value: ""}).Error; err != nil {
+			return err
+		}
+
+		if err := tx.Create(&model.Setting{Key: "DeveloperMode", Value: "disable"}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "ProxyType", Value: ""}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "ProxyUrl", Value: ""}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "ProxyPort", Value: ""}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "ProxyUser", Value: ""}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "ProxyPasswd", Value: ""}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "PrsoxyPasswdKeep", Value: ""}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "XpackHideMenu", Value: "{\"id\":\"1\",\"label\":\"/xpack\",\"isCheck\":true,\"title\":\"xpack.menu\",\"children\":[{\"id\":\"2\",\"title\":\"xpack.waf.name\",\"path\":\"/xpack/waf/dashboard\",\"label\":\"Dashboard\",\"isCheck\":true},{\"id\":\"3\",\"title\":\"xpack.tamper.tamper\",\"path\":\"/xpack/tamper\",\"label\":\"Tamper\",\"isCheck\":true},{\"id\":\"4\",\"title\":\"xpack.gpu.gpu\",\"path\":\"/xpack/gpu\",\"label\":\"GPU\",\"isCheck\":true},{\"id\":\"5\",\"title\":\"xpack.setting.setting\",\"path\":\"/xpack/setting\",\"label\":\"XSetting\",\"isCheck\":true}]}"}).Error; err != nil {
+			return err
+		}
+
+		if err := tx.Create(&model.Setting{Key: "ServerPort", Value: global.CONF.System.Port}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "SecurityEntrance", Value: global.CONF.System.Entrance}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "JWTSigningKey", Value: common.RandStr(16)}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "EncryptKey", Value: encryptKey}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "ExpirationTime", Value: time.Now().AddDate(0, 0, 10).Format(constant.DateTimeLayout)}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "ExpirationDays", Value: "0"}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "ComplexityVerification", Value: "enable"}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "MFAStatus", Value: "disable"}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "MFASecret", Value: ""}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "SystemVersion", Value: global.CONF.System.Version}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "BindAddress", Value: "0.0.0.0"}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "Ipv6", Value: "disable"}).Error; err != nil {
+			return err
+		}
+		if err := tx.Create(&model.Setting{Key: "NoAuthSetting", Value: "200"}).Error; err != nil {
+			return err
+		}
+		return nil
+	},
+}
diff --git a/core/init/router/router.go b/core/init/router/router.go
new file mode 100644
index 000000000..ba39d1274
--- /dev/null
+++ b/core/init/router/router.go
@@ -0,0 +1,76 @@
+package router
+
+import (
+	"fmt"
+	"net/http"
+
+	"github.com/1Panel-dev/1Panel/core/cmd/server/docs"
+	"github.com/1Panel-dev/1Panel/core/cmd/server/web"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/i18n"
+	"github.com/1Panel-dev/1Panel/core/middleware"
+	rou "github.com/1Panel-dev/1Panel/core/router"
+	"github.com/gin-contrib/gzip"
+	"github.com/gin-gonic/gin"
+	swaggerfiles "github.com/swaggo/files"
+	ginSwagger "github.com/swaggo/gin-swagger"
+)
+
+var (
+	Router *gin.Engine
+)
+
+func setWebStatic(rootRouter *gin.RouterGroup) {
+	rootRouter.StaticFS("/public", http.FS(web.Favicon))
+	rootRouter.Static("/api/v1/images", "./uploads")
+	rootRouter.Use(func(c *gin.Context) {
+		c.Next()
+	})
+	rootRouter.GET("/assets/*filepath", func(c *gin.Context) {
+		c.Writer.Header().Set("Cache-Control", fmt.Sprintf("private, max-age=%d", 3600))
+		staticServer := http.FileServer(http.FS(web.Assets))
+		staticServer.ServeHTTP(c.Writer, c.Request)
+	})
+	rootRouter.GET("/", func(c *gin.Context) {
+		staticServer := http.FileServer(http.FS(web.IndexHtml))
+		staticServer.ServeHTTP(c.Writer, c.Request)
+	})
+}
+
+func Routers() *gin.Engine {
+	Router = gin.Default()
+	Router.Use(middleware.OperationLog())
+	if global.CONF.System.IsDemo {
+		Router.Use(middleware.DemoHandle())
+	}
+
+	Router.NoRoute(func(c *gin.Context) {
+		c.Writer.WriteHeader(http.StatusOK)
+		_, _ = c.Writer.Write(web.IndexByte)
+		c.Writer.Header().Add("Accept", "text/html")
+		c.Writer.Flush()
+	})
+
+	Router.Use(i18n.UseI18n())
+
+	swaggerRouter := Router.Group("1panel")
+	docs.SwaggerInfo.BasePath = "/api/v1"
+	swaggerRouter.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
+	PublicGroup := Router.Group("")
+	{
+		PublicGroup.GET("/health", func(c *gin.Context) {
+			c.JSON(200, "ok")
+		})
+		PublicGroup.Use(gzip.Gzip(gzip.DefaultCompression))
+		setWebStatic(PublicGroup)
+	}
+	PrivateGroup := Router.Group("/api/v1")
+	PrivateGroup.Use(middleware.WhiteAllow())
+	PrivateGroup.Use(middleware.BindDomain())
+	PrivateGroup.Use(middleware.GlobalLoading())
+	for _, router := range rou.RouterGroupApp {
+		router.InitRouter(PrivateGroup)
+	}
+
+	return Router
+}
diff --git a/core/init/session/psession/psession.go b/core/init/session/psession/psession.go
new file mode 100644
index 000000000..55d7ffed2
--- /dev/null
+++ b/core/init/session/psession/psession.go
@@ -0,0 +1,47 @@
+package psession
+
+import (
+	"encoding/json"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/init/cache/badger_db"
+)
+
+type SessionUser struct {
+	ID   uint   `json:"id"`
+	Name string `json:"name"`
+}
+
+type PSession struct {
+	ExpireTime int64 `json:"expire_time"`
+	store      *badger_db.Cache
+}
+
+func NewPSession(db *badger_db.Cache) *PSession {
+	return &PSession{
+		store: db,
+	}
+}
+
+func (p *PSession) Get(sessionID string) (SessionUser, error) {
+	var result SessionUser
+	item, err := p.store.Get(sessionID)
+	if err != nil {
+		return result, err
+	}
+	_ = json.Unmarshal(item, &result)
+	return result, nil
+}
+
+func (p *PSession) Set(sessionID string, user SessionUser, ttlSeconds int) error {
+	p.ExpireTime = time.Now().Unix() + int64(ttlSeconds)
+	return p.store.SetWithTTL(sessionID, user, time.Second*time.Duration(ttlSeconds))
+}
+
+func (p *PSession) Delete(sessionID string) error {
+	return p.store.Del(sessionID)
+}
+
+func (p *PSession) Clean() error {
+	return p.store.Clean()
+}
diff --git a/core/init/session/session.go b/core/init/session/session.go
new file mode 100644
index 000000000..3a0fd5927
--- /dev/null
+++ b/core/init/session/session.go
@@ -0,0 +1,11 @@
+package session
+
+import (
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/init/session/psession"
+)
+
+func Init() {
+	global.SESSION = psession.NewPSession(global.CACHE)
+	global.LOG.Info("init session successfully")
+}
diff --git a/core/init/validator/validator.go b/core/init/validator/validator.go
new file mode 100644
index 000000000..06cb69432
--- /dev/null
+++ b/core/init/validator/validator.go
@@ -0,0 +1,65 @@
+package validator
+
+import (
+	"regexp"
+	"unicode"
+
+	"github.com/1Panel-dev/1Panel/core/global"
+
+	"github.com/go-playground/validator/v10"
+)
+
+func Init() {
+	validator := validator.New()
+	if err := validator.RegisterValidation("name", checkNamePattern); err != nil {
+		panic(err)
+	}
+	if err := validator.RegisterValidation("ip", checkIpPattern); err != nil {
+		panic(err)
+	}
+	if err := validator.RegisterValidation("password", checkPasswordPattern); err != nil {
+		panic(err)
+	}
+	global.VALID = validator
+}
+
+func checkNamePattern(fl validator.FieldLevel) bool {
+	value := fl.Field().String()
+	result, err := regexp.MatchString("^[a-zA-Z\u4e00-\u9fa5]{1}[a-zA-Z0-9_\u4e00-\u9fa5]{0,30}$", value)
+	if err != nil {
+		global.LOG.Errorf("regexp matchString failed, %v", err)
+	}
+	return result
+}
+
+func checkIpPattern(fl validator.FieldLevel) bool {
+	value := fl.Field().String()
+	result, err := regexp.MatchString(`^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$`, value)
+	if err != nil {
+		global.LOG.Errorf("regexp check ip matchString failed, %v", err)
+	}
+	return result
+}
+
+func checkPasswordPattern(fl validator.FieldLevel) bool {
+	value := fl.Field().String()
+	if len(value) < 8 || len(value) > 30 {
+		return false
+	}
+
+	hasNum := false
+	hasLetter := false
+	for _, r := range value {
+		if unicode.IsLetter(r) && !hasLetter {
+			hasLetter = true
+		}
+		if unicode.IsNumber(r) && !hasNum {
+			hasNum = true
+		}
+		if hasLetter && hasNum {
+			return true
+		}
+	}
+
+	return false
+}
diff --git a/core/init/viper/viper.go b/core/init/viper/viper.go
new file mode 100644
index 000000000..8e38c1ce4
--- /dev/null
+++ b/core/init/viper/viper.go
@@ -0,0 +1,122 @@
+package viper
+
+import (
+	"bytes"
+	"fmt"
+	"os"
+	"path"
+	"strings"
+
+	"github.com/1Panel-dev/1Panel/core/cmd/server/conf"
+	"github.com/1Panel-dev/1Panel/core/configs"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/utils/cmd"
+	"github.com/fsnotify/fsnotify"
+	"github.com/spf13/viper"
+	"gopkg.in/yaml.v3"
+)
+
+func Init() {
+	baseDir := "/opt"
+	port := "9999"
+	mode := ""
+	version := "v1.0.0"
+	username, password, entrance := "", "", ""
+	v := viper.NewWithOptions()
+	v.SetConfigType("yaml")
+
+	config := configs.ServerConfig{}
+	if err := yaml.Unmarshal(conf.AppYaml, &config); err != nil {
+		panic(err)
+	}
+	if config.System.Mode != "" {
+		mode = config.System.Mode
+	}
+	_, err := os.Stat("/opt/1panel/conf/app.yaml")
+	if mode == "dev" && err == nil {
+		v.SetConfigName("app")
+		v.AddConfigPath(path.Join("/opt/1panel/conf"))
+		if err := v.ReadInConfig(); err != nil {
+			panic(fmt.Errorf("Fatal error config file: %s \n", err))
+		}
+	} else {
+		baseDir = loadParams("BASE_DIR")
+		port = loadParams("ORIGINAL_PORT")
+		version = loadParams("ORIGINAL_VERSION")
+		username = loadParams("ORIGINAL_USERNAME")
+		password = loadParams("ORIGINAL_PASSWORD")
+		entrance = loadParams("ORIGINAL_ENTRANCE")
+
+		reader := bytes.NewReader(conf.AppYaml)
+		if err := v.ReadConfig(reader); err != nil {
+			panic(fmt.Errorf("Fatal error config file: %s \n", err))
+		}
+	}
+	v.OnConfigChange(func(e fsnotify.Event) {
+		if err := v.Unmarshal(&global.CONF); err != nil {
+			panic(err)
+		}
+	})
+	serverConfig := configs.ServerConfig{}
+	if err := v.Unmarshal(&serverConfig); err != nil {
+		panic(err)
+	}
+	_, err = os.Stat("/opt/1panel/conf/app.yaml")
+	if mode == "dev" && err == nil {
+		if serverConfig.System.BaseDir != "" {
+			baseDir = serverConfig.System.BaseDir
+		}
+		if serverConfig.System.Port != "" {
+			port = serverConfig.System.Port
+		}
+		if serverConfig.System.Version != "" {
+			version = serverConfig.System.Version
+		}
+		if serverConfig.System.Username != "" {
+			username = serverConfig.System.Username
+		}
+		if serverConfig.System.Password != "" {
+			password = serverConfig.System.Password
+		}
+		if serverConfig.System.Entrance != "" {
+			entrance = serverConfig.System.Entrance
+		}
+	}
+
+	global.CONF = serverConfig
+	global.CONF.System.BaseDir = baseDir
+	global.CONF.System.IsDemo = v.GetBool("system.is_demo")
+	global.CONF.System.DataDir = path.Join(global.CONF.System.BaseDir, "1panel")
+	global.CONF.System.Cache = path.Join(global.CONF.System.DataDir, "cache")
+	global.CONF.System.Backup = path.Join(global.CONF.System.DataDir, "backup")
+	global.CONF.System.DbPath = path.Join(global.CONF.System.DataDir, "db")
+	global.CONF.System.LogPath = path.Join(global.CONF.System.DataDir, "log")
+	global.CONF.System.TmpDir = path.Join(global.CONF.System.DataDir, "tmp")
+	global.CONF.System.Port = port
+	global.CONF.System.Version = version
+	global.CONF.System.Username = username
+	global.CONF.System.Password = password
+	global.CONF.System.Entrance = entrance
+	global.CONF.System.ChangeUserInfo = loadChangeInfo()
+	global.Viper = v
+}
+
+func loadParams(param string) string {
+	stdout, err := cmd.Execf("grep '^%s=' /usr/local/bin/1pctl | cut -d'=' -f2", param)
+	if err != nil {
+		panic(err)
+	}
+	info := strings.ReplaceAll(stdout, "\n", "")
+	if len(info) == 0 || info == `""` {
+		panic(fmt.Sprintf("error `%s` find in /usr/local/bin/1pctl", param))
+	}
+	return info
+}
+
+func loadChangeInfo() string {
+	stdout, err := cmd.Exec("grep '^CHANGE_USER_INFO=' /usr/local/bin/1pctl | cut -d'=' -f2")
+	if err != nil {
+		return ""
+	}
+	return strings.ReplaceAll(stdout, "\n", "")
+}
diff --git a/core/log/config.go b/core/log/config.go
new file mode 100644
index 000000000..08c1d6173
--- /dev/null
+++ b/core/log/config.go
@@ -0,0 +1,41 @@
+package log
+
+import (
+	"errors"
+	"io"
+	"os"
+	"path"
+)
+
+var (
+	BufferSize         = 0x100000
+	DefaultFileMode    = os.FileMode(0644)
+	DefaultFileFlag    = os.O_RDWR | os.O_CREATE | os.O_APPEND
+	ErrInvalidArgument = errors.New("error argument invalid")
+	QueueSize          = 1024
+	ErrClosed          = errors.New("error write on close")
+)
+
+type Config struct {
+	TimeTagFormat      string
+	LogPath            string
+	FileName           string
+	LogSuffix          string
+	MaxRemain          int
+	RollingTimePattern string
+}
+
+type Manager interface {
+	Fire() chan string
+	Close()
+}
+
+type RollingWriter interface {
+	io.Writer
+	Close() error
+}
+
+func FilePath(c *Config) (filepath string) {
+	filepath = path.Join(c.LogPath, c.FileName) + c.LogSuffix
+	return
+}
diff --git a/core/log/dup_write_darwin.go b/core/log/dup_write_darwin.go
new file mode 100644
index 000000000..822d24e82
--- /dev/null
+++ b/core/log/dup_write_darwin.go
@@ -0,0 +1,20 @@
+package log
+
+import (
+	"golang.org/x/sys/unix"
+	"os"
+	"runtime"
+)
+
+var stdErrFileHandler *os.File
+
+func dupWrite(file *os.File) error {
+	stdErrFileHandler = file
+	if err := unix.Dup2(int(file.Fd()), int(os.Stderr.Fd())); err != nil {
+		return err
+	}
+	runtime.SetFinalizer(stdErrFileHandler, func(fd *os.File) {
+		fd.Close()
+	})
+	return nil
+}
diff --git a/core/log/dup_write_linux.go b/core/log/dup_write_linux.go
new file mode 100644
index 000000000..822d24e82
--- /dev/null
+++ b/core/log/dup_write_linux.go
@@ -0,0 +1,20 @@
+package log
+
+import (
+	"golang.org/x/sys/unix"
+	"os"
+	"runtime"
+)
+
+var stdErrFileHandler *os.File
+
+func dupWrite(file *os.File) error {
+	stdErrFileHandler = file
+	if err := unix.Dup2(int(file.Fd()), int(os.Stderr.Fd())); err != nil {
+		return err
+	}
+	runtime.SetFinalizer(stdErrFileHandler, func(fd *os.File) {
+		fd.Close()
+	})
+	return nil
+}
diff --git a/core/log/dup_write_windows.go b/core/log/dup_write_windows.go
new file mode 100644
index 000000000..4996cc12d
--- /dev/null
+++ b/core/log/dup_write_windows.go
@@ -0,0 +1,9 @@
+package log
+
+import (
+	"os"
+)
+
+func dupWrite(file *os.File) error {
+	return nil
+}
diff --git a/core/log/manager.go b/core/log/manager.go
new file mode 100644
index 000000000..1f4f94546
--- /dev/null
+++ b/core/log/manager.go
@@ -0,0 +1,53 @@
+package log
+
+import (
+	"github.com/robfig/cron/v3"
+	"path"
+	"sync"
+	"time"
+)
+
+type manager struct {
+	startAt time.Time
+	fire    chan string
+	cr      *cron.Cron
+	context chan int
+	wg      sync.WaitGroup
+	lock    sync.Mutex
+}
+
+func (m *manager) Fire() chan string {
+	return m.fire
+}
+
+func (m *manager) Close() {
+	close(m.context)
+	m.cr.Stop()
+}
+
+func NewManager(c *Config) (Manager, error) {
+	m := &manager{
+		startAt: time.Now(),
+		cr:      cron.New(),
+		fire:    make(chan string),
+		context: make(chan int),
+		wg:      sync.WaitGroup{},
+	}
+
+	if _, err := m.cr.AddFunc(c.RollingTimePattern, func() {
+		m.fire <- m.GenLogFileName(c)
+	}); err != nil {
+		return nil, err
+	}
+	m.cr.Start()
+
+	return m, nil
+}
+
+func (m *manager) GenLogFileName(c *Config) (filename string) {
+	m.lock.Lock()
+	filename = path.Join(c.LogPath, c.FileName+"-"+m.startAt.Format(c.TimeTagFormat)) + c.LogSuffix
+	m.startAt = time.Now()
+	m.lock.Unlock()
+	return
+}
diff --git a/core/log/writer.go b/core/log/writer.go
new file mode 100644
index 000000000..391a2f3ac
--- /dev/null
+++ b/core/log/writer.go
@@ -0,0 +1,250 @@
+package log
+
+import (
+	"log"
+	"os"
+	"path"
+	"sort"
+	"strings"
+	"sync"
+	"sync/atomic"
+	"time"
+	"unsafe"
+
+	"github.com/1Panel-dev/1Panel/core/global"
+)
+
+type Writer struct {
+	m             Manager
+	file          *os.File
+	absPath       string
+	fire          chan string
+	cf            *Config
+	rollingfilech chan string
+}
+
+type AsynchronousWriter struct {
+	Writer
+	ctx     chan int
+	queue   chan []byte
+	errChan chan error
+	closed  int32
+	wg      sync.WaitGroup
+}
+
+func (w *AsynchronousWriter) Close() error {
+	if atomic.CompareAndSwapInt32(&w.closed, 0, 1) {
+		close(w.ctx)
+		w.onClose()
+
+		func() {
+			defer func() {
+				if r := recover(); r != nil {
+					global.LOG.Error(r)
+				}
+			}()
+			w.m.Close()
+		}()
+		return w.file.Close()
+	}
+	return ErrClosed
+}
+
+func (w *AsynchronousWriter) onClose() {
+	var err error
+	for {
+		select {
+		case b := <-w.queue:
+			if _, err = w.file.Write(b); err != nil {
+				select {
+				case w.errChan <- err:
+				default:
+					_asyncBufferPool.Put(&b)
+					return
+				}
+			}
+			_asyncBufferPool.Put(&b)
+		default:
+			return
+		}
+	}
+}
+
+var _asyncBufferPool = sync.Pool{
+	New: func() interface{} {
+		return make([]byte, BufferSize)
+	},
+}
+
+func NewWriterFromConfig(c *Config) (RollingWriter, error) {
+	if c.LogPath == "" || c.FileName == "" {
+		return nil, ErrInvalidArgument
+	}
+	if err := os.MkdirAll(c.LogPath, 0700); err != nil {
+		return nil, err
+	}
+	filepath := FilePath(c)
+	file, err := os.OpenFile(filepath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
+	if err != nil {
+		return nil, err
+	}
+	if err := dupWrite(file); err != nil {
+		return nil, err
+	}
+	mng, err := NewManager(c)
+	if err != nil {
+		return nil, err
+	}
+
+	var rollingWriter RollingWriter
+	writer := Writer{
+		m:       mng,
+		file:    file,
+		absPath: filepath,
+		fire:    mng.Fire(),
+		cf:      c,
+	}
+	if c.MaxRemain > 0 {
+		writer.rollingfilech = make(chan string, c.MaxRemain)
+		dir, err := os.ReadDir(c.LogPath)
+		if err != nil {
+			mng.Close()
+			return nil, err
+		}
+
+		files := make([]string, 0, 10)
+		for _, fi := range dir {
+			if fi.IsDir() {
+				continue
+			}
+
+			fileName := c.FileName
+			if strings.Contains(fi.Name(), fileName) && strings.Contains(fi.Name(), c.LogSuffix) {
+				start := strings.Index(fi.Name(), "-")
+				end := strings.Index(fi.Name(), c.LogSuffix)
+				name := fi.Name()
+				if start > 0 && end > 0 {
+					_, err := time.Parse(c.TimeTagFormat, name[start+1:end])
+					if err == nil {
+						files = append(files, fi.Name())
+					}
+				}
+			}
+		}
+		sort.Slice(files, func(i, j int) bool {
+			t1Start := strings.Index(files[i], "-")
+			t1End := strings.Index(files[i], c.LogSuffix)
+			t2Start := strings.Index(files[i], "-")
+			t2End := strings.Index(files[i], c.LogSuffix)
+			t1, _ := time.Parse(c.TimeTagFormat, files[i][t1Start+1:t1End])
+			t2, _ := time.Parse(c.TimeTagFormat, files[j][t2Start+1:t2End])
+			return t1.Before(t2)
+		})
+
+		for _, file := range files {
+		retry:
+			select {
+			case writer.rollingfilech <- path.Join(c.LogPath, file):
+			default:
+				writer.DoRemove()
+				goto retry
+			}
+		}
+	}
+
+	wr := &AsynchronousWriter{
+		ctx:     make(chan int),
+		queue:   make(chan []byte, QueueSize),
+		errChan: make(chan error, QueueSize),
+		wg:      sync.WaitGroup{},
+		closed:  0,
+		Writer:  writer,
+	}
+
+	wr.wg.Add(1)
+	go wr.writer()
+	wr.wg.Wait()
+	rollingWriter = wr
+
+	return rollingWriter, nil
+}
+
+func (w *AsynchronousWriter) writer() {
+	var err error
+	w.wg.Done()
+	for {
+		select {
+		case filename := <-w.fire:
+			if err = w.Reopen(filename); err != nil && len(w.errChan) < cap(w.errChan) {
+				w.errChan <- err
+			}
+		case b := <-w.queue:
+			if _, err = w.file.Write(b); err != nil && len(w.errChan) < cap(w.errChan) {
+				w.errChan <- err
+			}
+			_asyncBufferPool.Put(&b)
+		case <-w.ctx:
+			return
+		}
+	}
+}
+
+func (w *Writer) DoRemove() {
+	file := <-w.rollingfilech
+	if err := os.Remove(file); err != nil {
+		log.Println("error in remove log file", file, err)
+	}
+}
+
+func (w *Writer) Write(b []byte) (int, error) {
+	var ok = false
+	for !ok {
+		select {
+		case filename := <-w.fire:
+			if err := w.Reopen(filename); err != nil {
+				return 0, err
+			}
+		default:
+			ok = true
+		}
+	}
+
+	fp := atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&w.file)))
+	file := (*os.File)(fp)
+	return file.Write(b)
+}
+
+func (w *Writer) Reopen(file string) error {
+	fileInfo, err := w.file.Stat()
+	if err != nil {
+		return err
+	}
+
+	if fileInfo.Size() == 0 {
+		return nil
+	}
+
+	w.file.Close()
+	if err := os.Rename(w.absPath, file); err != nil {
+		return err
+	}
+	newFile, err := os.OpenFile(w.absPath, DefaultFileFlag, DefaultFileMode)
+	if err != nil {
+		return err
+	}
+
+	w.file = newFile
+
+	go func() {
+		if w.cf.MaxRemain > 0 {
+		retry:
+			select {
+			case w.rollingfilech <- file:
+			default:
+				w.DoRemove()
+				goto retry
+			}
+		}
+	}()
+	return nil
+}
diff --git a/core/main.go b/core/main.go
new file mode 100644
index 000000000..fbfa86301
--- /dev/null
+++ b/core/main.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+	"fmt"
+	"os"
+
+	_ "net/http/pprof"
+
+	"github.com/1Panel-dev/1Panel/core/cmd/server/cmd"
+	_ "github.com/1Panel-dev/1Panel/core/cmd/server/docs"
+)
+
+// @title 1Panel
+// @version 1.0
+// @description  开源Linux面板
+// @termsOfService http://swagger.io/terms/
+// @license.name Apache 2.0
+// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
+// @host localhost
+// @BasePath /api/v1
+
+//go:generate swag init -o ./docs -g main.go -d ../../backend -g ../cmd/server/main.go
+func main() {
+	if err := cmd.RootCmd.Execute(); err != nil {
+		fmt.Fprintln(os.Stderr, err)
+		os.Exit(1)
+	}
+}
diff --git a/core/middleware/bind_domain.go b/core/middleware/bind_domain.go
new file mode 100644
index 000000000..09c33a540
--- /dev/null
+++ b/core/middleware/bind_domain.go
@@ -0,0 +1,41 @@
+package middleware
+
+import (
+	"errors"
+	"strings"
+
+	"github.com/1Panel-dev/1Panel/core/app/api/v1/helper"
+	"github.com/1Panel-dev/1Panel/core/app/repo"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/gin-gonic/gin"
+)
+
+func BindDomain() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		settingRepo := repo.NewISettingRepo()
+		status, err := settingRepo.Get(settingRepo.WithByKey("BindDomain"))
+		if err != nil {
+			helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+			return
+		}
+		if len(status.Value) == 0 {
+			c.Next()
+			return
+		}
+		domains := c.Request.Host
+		parts := strings.Split(c.Request.Host, ":")
+		if len(parts) > 0 {
+			domains = parts[0]
+		}
+
+		if domains != status.Value {
+			if LoadErrCode("err-domain") != 200 {
+				helper.ErrResponse(c, LoadErrCode("err-domain"))
+				return
+			}
+			helper.ErrorWithDetail(c, constant.CodeErrDomain, constant.ErrTypeInternalServer, errors.New("domain not allowed"))
+			return
+		}
+		c.Next()
+	}
+}
diff --git a/core/middleware/demo_handle.go b/core/middleware/demo_handle.go
new file mode 100644
index 000000000..943f23491
--- /dev/null
+++ b/core/middleware/demo_handle.go
@@ -0,0 +1,57 @@
+package middleware
+
+import (
+	"net/http"
+	"strings"
+
+	"github.com/1Panel-dev/1Panel/core/app/dto"
+	"github.com/1Panel-dev/1Panel/core/buserr"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/gin-gonic/gin"
+)
+
+var whiteUrlList = map[string]struct{}{
+	"/api/v1/auth/login":          {},
+	"/api/v1/websites/config":     {},
+	"/api/v1/websites/waf/config": {},
+	"/api/v1/files/loadfile":      {},
+	"/api/v1/files/size":          {},
+	"/api/v1/logs/operation":      {},
+	"/api/v1/logs/login":          {},
+	"/api/v1/auth/logout":         {},
+
+	"/api/v1/apps/installed/loadport": {},
+	"/api/v1/apps/installed/check":    {},
+	"/api/v1/apps/installed/conninfo": {},
+	"/api/v1/databases/load/file":     {},
+	"/api/v1/databases/variables":     {},
+	"/api/v1/databases/status":        {},
+	"/api/v1/databases/baseinfo":      {},
+
+	"/api/v1/waf/attack/stat":    {},
+	"/api/v1/waf/config/website": {},
+
+	"/api/v1/monitor/stat":         {},
+	"/api/v1/monitor/visitors":     {},
+	"/api/v1/monitor/visitors/loc": {},
+	"/api/v1/monitor/qps":          {},
+}
+
+func DemoHandle() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		if strings.Contains(c.Request.URL.Path, "search") || c.Request.Method == http.MethodGet {
+			c.Next()
+			return
+		}
+		if _, ok := whiteUrlList[c.Request.URL.Path]; ok {
+			c.Next()
+			return
+		}
+
+		c.JSON(http.StatusInternalServerError, dto.Response{
+			Code:    http.StatusInternalServerError,
+			Message: buserr.New(constant.ErrDemoEnvironment).Error(),
+		})
+		c.Abort()
+	}
+}
diff --git a/core/middleware/helper.go b/core/middleware/helper.go
new file mode 100644
index 000000000..124b69588
--- /dev/null
+++ b/core/middleware/helper.go
@@ -0,0 +1,32 @@
+package middleware
+
+import (
+	"net/http"
+
+	"github.com/1Panel-dev/1Panel/core/app/repo"
+)
+
+func LoadErrCode(errInfo string) int {
+	settingRepo := repo.NewISettingRepo()
+	codeVal, err := settingRepo.Get(settingRepo.WithByKey("NoAuthSetting"))
+	if err != nil {
+		return 500
+	}
+
+	switch codeVal.Value {
+	case "400":
+		return http.StatusBadRequest
+	case "401":
+		return http.StatusUnauthorized
+	case "403":
+		return http.StatusForbidden
+	case "404":
+		return http.StatusNotFound
+	case "408":
+		return http.StatusRequestTimeout
+	case "416":
+		return http.StatusRequestedRangeNotSatisfiable
+	default:
+		return http.StatusOK
+	}
+}
diff --git a/core/middleware/ip_limit.go b/core/middleware/ip_limit.go
new file mode 100644
index 000000000..86243ff38
--- /dev/null
+++ b/core/middleware/ip_limit.go
@@ -0,0 +1,67 @@
+package middleware
+
+import (
+	"errors"
+	"net"
+	"strings"
+
+	"github.com/1Panel-dev/1Panel/core/app/api/v1/helper"
+	"github.com/1Panel-dev/1Panel/core/app/repo"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/gin-gonic/gin"
+)
+
+func WhiteAllow() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		settingRepo := repo.NewISettingRepo()
+		status, err := settingRepo.Get(settingRepo.WithByKey("AllowIPs"))
+		if err != nil {
+			helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+			return
+		}
+
+		if len(status.Value) == 0 {
+			c.Next()
+			return
+		}
+		clientIP := c.ClientIP()
+		for _, ip := range strings.Split(status.Value, ",") {
+			if len(ip) == 0 {
+				continue
+			}
+			if ip == clientIP || (strings.Contains(ip, "/") && checkIpInCidr(ip, clientIP)) {
+				c.Next()
+				return
+			}
+		}
+		if LoadErrCode("err-ip") != 200 {
+			helper.ErrResponse(c, LoadErrCode("err-ip"))
+			return
+		}
+		helper.ErrorWithDetail(c, constant.CodeErrIP, constant.ErrTypeInternalServer, errors.New("IP address not allowed"))
+	}
+}
+
+func checkIpInCidr(cidr, checkIP string) bool {
+	ip, ipNet, err := net.ParseCIDR(cidr)
+	if err != nil {
+		global.LOG.Errorf("parse CIDR %s failed, err: %v", cidr, err)
+		return false
+	}
+	for ip := ip.Mask(ipNet.Mask); ipNet.Contains(ip); incIP(ip) {
+		if ip.String() == checkIP {
+			return true
+		}
+	}
+	return false
+}
+
+func incIP(ip net.IP) {
+	for j := len(ip) - 1; j >= 0; j-- {
+		ip[j]++
+		if ip[j] > 0 {
+			break
+		}
+	}
+}
diff --git a/core/middleware/jwt.go b/core/middleware/jwt.go
new file mode 100644
index 000000000..010aa13d0
--- /dev/null
+++ b/core/middleware/jwt.go
@@ -0,0 +1,28 @@
+package middleware
+
+import (
+	"github.com/1Panel-dev/1Panel/core/app/api/v1/helper"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	jwtUtils "github.com/1Panel-dev/1Panel/core/utils/jwt"
+
+	"github.com/gin-gonic/gin"
+)
+
+func JwtAuth() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		token := c.Request.Header.Get(constant.JWTHeaderName)
+		if token == "" {
+			c.Next()
+			return
+		}
+		j := jwtUtils.NewJWT()
+		claims, err := j.ParseToken(token)
+		if err != nil {
+			helper.ErrorWithDetail(c, constant.CodeErrUnauthorized, constant.ErrTypeInternalServer, err)
+			return
+		}
+		c.Set("claims", claims)
+		c.Set("authMethod", constant.AuthMethodJWT)
+		c.Next()
+	}
+}
diff --git a/core/middleware/loading.go b/core/middleware/loading.go
new file mode 100644
index 000000000..0727b7238
--- /dev/null
+++ b/core/middleware/loading.go
@@ -0,0 +1,24 @@
+package middleware
+
+import (
+	"github.com/1Panel-dev/1Panel/core/app/api/v1/helper"
+	"github.com/1Panel-dev/1Panel/core/app/repo"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/gin-gonic/gin"
+)
+
+func GlobalLoading() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		settingRepo := repo.NewISettingRepo()
+		status, err := settingRepo.Get(settingRepo.WithByKey("SystemStatus"))
+		if err != nil {
+			helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
+			return
+		}
+		if status.Value != "Free" {
+			helper.ErrorWithDetail(c, constant.CodeGlobalLoading, status.Value, err)
+			return
+		}
+		c.Next()
+	}
+}
diff --git a/core/middleware/operation.go b/core/middleware/operation.go
new file mode 100644
index 000000000..a357649b1
--- /dev/null
+++ b/core/middleware/operation.go
@@ -0,0 +1,216 @@
+package middleware
+
+import (
+	"bytes"
+	"compress/gzip"
+	"encoding/json"
+	"fmt"
+	"io"
+	"net/http"
+	"strings"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/app/model"
+	"github.com/1Panel-dev/1Panel/core/app/service"
+	"github.com/1Panel-dev/1Panel/core/cmd/server/docs"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/utils/copier"
+	"github.com/gin-gonic/gin"
+)
+
+func OperationLog() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		if strings.Contains(c.Request.URL.Path, "search") || c.Request.Method == http.MethodGet {
+			c.Next()
+			return
+		}
+
+		source := loadLogInfo(c.Request.URL.Path)
+		record := model.OperationLog{
+			Source:    source,
+			IP:        c.ClientIP(),
+			Method:    strings.ToLower(c.Request.Method),
+			Path:      strings.ReplaceAll(c.Request.URL.Path, "/api/v1", ""),
+			UserAgent: c.Request.UserAgent(),
+		}
+		var (
+			swagger      swaggerJson
+			operationDic operationJson
+		)
+		if err := json.Unmarshal(docs.SwaggerJson, &swagger); err != nil {
+			c.Next()
+			return
+		}
+		path, hasPath := swagger.Paths[record.Path]
+		if !hasPath {
+			c.Next()
+			return
+		}
+		methodMap, isMethodMap := path.(map[string]interface{})
+		if !isMethodMap {
+			c.Next()
+			return
+		}
+		dataMap, hasPost := methodMap["post"]
+		if !hasPost {
+			c.Next()
+			return
+		}
+		data, isDataMap := dataMap.(map[string]interface{})
+		if !isDataMap {
+			c.Next()
+			return
+		}
+		xlog, hasXlog := data["x-panel-log"]
+		if !hasXlog {
+			c.Next()
+			return
+		}
+		if err := copier.Copy(&operationDic, xlog); err != nil {
+			c.Next()
+			return
+		}
+		if len(operationDic.FormatZH) == 0 {
+			c.Next()
+			return
+		}
+
+		formatMap := make(map[string]interface{})
+		if len(operationDic.BodyKeys) != 0 {
+			body, err := io.ReadAll(c.Request.Body)
+			if err == nil {
+				c.Request.Body = io.NopCloser(bytes.NewBuffer(body))
+			}
+			bodyMap := make(map[string]interface{})
+			_ = json.Unmarshal(body, &bodyMap)
+			for _, key := range operationDic.BodyKeys {
+				if _, ok := bodyMap[key]; ok {
+					formatMap[key] = bodyMap[key]
+				}
+			}
+		}
+		if len(operationDic.BeforeFunctions) != 0 {
+			for _, funcs := range operationDic.BeforeFunctions {
+				for key, value := range formatMap {
+					if funcs.InputValue == key {
+						var names []string
+						if funcs.IsList {
+							sql := fmt.Sprintf("SELECT %s FROM %s where %s in (?);", funcs.OutputColumn, funcs.DB, funcs.InputColumn)
+							_ = global.DB.Raw(sql, value).Scan(&names)
+						} else {
+							_ = global.DB.Raw(fmt.Sprintf("select %s from %s where %s = ?;", funcs.OutputColumn, funcs.DB, funcs.InputColumn), value).Scan(&names)
+						}
+						formatMap[funcs.OutputValue] = strings.Join(names, ",")
+						break
+					}
+				}
+			}
+		}
+		for key, value := range formatMap {
+			if strings.Contains(operationDic.FormatEN, "["+key+"]") {
+				if arrays, ok := value.([]string); ok {
+					operationDic.FormatZH = strings.ReplaceAll(operationDic.FormatZH, "["+key+"]", fmt.Sprintf("[%v]", strings.Join(arrays, ",")))
+					operationDic.FormatEN = strings.ReplaceAll(operationDic.FormatEN, "["+key+"]", fmt.Sprintf("[%v]", strings.Join(arrays, ",")))
+				} else {
+					operationDic.FormatZH = strings.ReplaceAll(operationDic.FormatZH, "["+key+"]", fmt.Sprintf("[%v]", value))
+					operationDic.FormatEN = strings.ReplaceAll(operationDic.FormatEN, "["+key+"]", fmt.Sprintf("[%v]", value))
+				}
+			}
+		}
+		record.DetailEN = strings.ReplaceAll(operationDic.FormatEN, "[]", "")
+		record.DetailZH = strings.ReplaceAll(operationDic.FormatZH, "[]", "")
+
+		writer := responseBodyWriter{
+			ResponseWriter: c.Writer,
+			body:           &bytes.Buffer{},
+		}
+		c.Writer = writer
+		now := time.Now()
+
+		c.Next()
+
+		datas := writer.body.Bytes()
+		if c.Request.Header.Get("Content-Encoding") == "gzip" {
+			buf := bytes.NewReader(writer.body.Bytes())
+			reader, err := gzip.NewReader(buf)
+			if err != nil {
+				record.Status = constant.StatusFailed
+				record.Message = fmt.Sprintf("gzip new reader failed, err: %v", err)
+				latency := time.Since(now)
+				record.Latency = latency
+
+				if err := service.NewILogService().CreateOperationLog(record); err != nil {
+					global.LOG.Errorf("create operation record failed, err: %v", err)
+				}
+				return
+			}
+			defer reader.Close()
+			datas, _ = io.ReadAll(reader)
+		}
+		var res response
+		_ = json.Unmarshal(datas, &res)
+		if res.Code == 200 {
+			record.Status = constant.StatusSuccess
+		} else {
+			record.Status = constant.StatusFailed
+			record.Message = res.Message
+		}
+
+		latency := time.Since(now)
+		record.Latency = latency
+
+		if err := service.NewILogService().CreateOperationLog(record); err != nil {
+			global.LOG.Errorf("create operation record failed, err: %v", err)
+		}
+	}
+}
+
+type swaggerJson struct {
+	Paths map[string]interface{} `json:"paths"`
+}
+
+type operationJson struct {
+	API             string         `json:"api"`
+	Method          string         `json:"method"`
+	BodyKeys        []string       `json:"bodyKeys"`
+	ParamKeys       []string       `json:"paramKeys"`
+	BeforeFunctions []functionInfo `json:"beforeFunctions"`
+	FormatZH        string         `json:"formatZH"`
+	FormatEN        string         `json:"formatEN"`
+}
+type functionInfo struct {
+	InputColumn  string `json:"input_column"`
+	InputValue   string `json:"input_value"`
+	IsList       bool   `json:"isList"`
+	DB           string `json:"db"`
+	OutputColumn string `json:"output_column"`
+	OutputValue  string `json:"output_value"`
+}
+
+type response struct {
+	Code    int    `json:"code"`
+	Message string `json:"message"`
+}
+
+type responseBodyWriter struct {
+	gin.ResponseWriter
+	body *bytes.Buffer
+}
+
+func (r responseBodyWriter) Write(b []byte) (int, error) {
+	r.body.Write(b)
+	return r.ResponseWriter.Write(b)
+}
+
+func loadLogInfo(path string) string {
+	path = strings.ReplaceAll(path, "/api/v1", "")
+	if !strings.Contains(path, "/") {
+		return ""
+	}
+	pathArrays := strings.Split(path, "/")
+	if len(pathArrays) < 2 {
+		return ""
+	}
+	return pathArrays[1]
+}
diff --git a/core/middleware/password_expired.go b/core/middleware/password_expired.go
new file mode 100644
index 000000000..a69c10884
--- /dev/null
+++ b/core/middleware/password_expired.go
@@ -0,0 +1,45 @@
+package middleware
+
+import (
+	"strconv"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/app/api/v1/helper"
+	"github.com/1Panel-dev/1Panel/core/app/repo"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/utils/common"
+	"github.com/gin-gonic/gin"
+)
+
+func PasswordExpired() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		settingRepo := repo.NewISettingRepo()
+		setting, err := settingRepo.Get(settingRepo.WithByKey("ExpirationDays"))
+		if err != nil {
+			helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypePasswordExpired, err)
+			return
+		}
+		expiredDays, _ := strconv.Atoi(setting.Value)
+		if expiredDays == 0 {
+			c.Next()
+			return
+		}
+
+		extime, err := settingRepo.Get(settingRepo.WithByKey("ExpirationTime"))
+		if err != nil {
+			helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypePasswordExpired, err)
+			return
+		}
+		loc, _ := time.LoadLocation(common.LoadTimeZone())
+		expiredTime, err := time.ParseInLocation(constant.DateTimeLayout, extime.Value, loc)
+		if err != nil {
+			helper.ErrorWithDetail(c, constant.CodePasswordExpired, constant.ErrTypePasswordExpired, err)
+			return
+		}
+		if time.Now().After(expiredTime) {
+			helper.ErrorWithDetail(c, constant.CodePasswordExpired, constant.ErrTypePasswordExpired, err)
+			return
+		}
+		c.Next()
+	}
+}
diff --git a/core/middleware/session.go b/core/middleware/session.go
new file mode 100644
index 000000000..469b6d5f3
--- /dev/null
+++ b/core/middleware/session.go
@@ -0,0 +1,38 @@
+package middleware
+
+import (
+	"strconv"
+
+	"github.com/1Panel-dev/1Panel/core/app/api/v1/helper"
+	"github.com/1Panel-dev/1Panel/core/app/repo"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/gin-gonic/gin"
+)
+
+func SessionAuth() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		if method, exist := c.Get("authMethod"); exist && method == constant.AuthMethodJWT {
+			c.Next()
+			return
+		}
+		sId, err := c.Cookie(constant.SessionName)
+		if err != nil {
+			helper.ErrorWithDetail(c, constant.CodeErrUnauthorized, constant.ErrTypeNotLogin, nil)
+			return
+		}
+		psession, err := global.SESSION.Get(sId)
+		if err != nil {
+			helper.ErrorWithDetail(c, constant.CodeErrUnauthorized, constant.ErrTypeNotLogin, nil)
+			return
+		}
+		settingRepo := repo.NewISettingRepo()
+		setting, err := settingRepo.Get(settingRepo.WithByKey("SessionTimeout"))
+		if err != nil {
+			global.LOG.Errorf("create operation record failed, err: %v", err)
+		}
+		lifeTime, _ := strconv.Atoi(setting.Value)
+		_ = global.SESSION.Set(sId, psession, lifeTime)
+		c.Next()
+	}
+}
diff --git a/core/router/common.go b/core/router/common.go
new file mode 100644
index 000000000..fada5160c
--- /dev/null
+++ b/core/router/common.go
@@ -0,0 +1,9 @@
+package router
+
+func commonGroups() []CommonRouter {
+	return []CommonRouter{
+		&BaseRouter{},
+		&LogRouter{},
+		&SettingRouter{},
+	}
+}
diff --git a/core/router/entry.go b/core/router/entry.go
new file mode 100644
index 000000000..49ed25fd1
--- /dev/null
+++ b/core/router/entry.go
@@ -0,0 +1,9 @@
+//go:build !xpack
+
+package router
+
+func RouterGroups() []CommonRouter {
+	return commonGroups()
+}
+
+var RouterGroupApp = RouterGroups()
diff --git a/core/router/ro_base.go b/core/router/ro_base.go
new file mode 100644
index 000000000..f11cbf4d3
--- /dev/null
+++ b/core/router/ro_base.go
@@ -0,0 +1,22 @@
+package router
+
+import (
+	v1 "github.com/1Panel-dev/1Panel/core/app/api/v1"
+	"github.com/gin-gonic/gin"
+)
+
+type BaseRouter struct{}
+
+func (s *BaseRouter) InitRouter(Router *gin.RouterGroup) {
+	baseRouter := Router.Group("auth")
+	baseApi := v1.ApiGroupApp.BaseApi
+	{
+		baseRouter.GET("/captcha", baseApi.Captcha)
+		baseRouter.POST("/mfalogin", baseApi.MFALogin)
+		baseRouter.POST("/login", baseApi.Login)
+		baseRouter.GET("/issafety", baseApi.CheckIsSafety)
+		baseRouter.POST("/logout", baseApi.LogOut)
+		baseRouter.GET("/demo", baseApi.CheckIsDemo)
+		baseRouter.GET("/language", baseApi.GetLanguage)
+	}
+}
diff --git a/core/router/ro_log.go b/core/router/ro_log.go
new file mode 100644
index 000000000..f1c7c10fc
--- /dev/null
+++ b/core/router/ro_log.go
@@ -0,0 +1,21 @@
+package router
+
+import (
+	v1 "github.com/1Panel-dev/1Panel/core/app/api/v1"
+	"github.com/1Panel-dev/1Panel/core/middleware"
+
+	"github.com/gin-gonic/gin"
+)
+
+type LogRouter struct{}
+
+func (s *LogRouter) InitRouter(Router *gin.RouterGroup) {
+	operationRouter := Router.Group("logs")
+	operationRouter.Use(middleware.JwtAuth()).Use(middleware.SessionAuth()).Use(middleware.PasswordExpired())
+	baseApi := v1.ApiGroupApp.BaseApi
+	{
+		operationRouter.POST("/login", baseApi.GetLoginLogs)
+		operationRouter.POST("/operation", baseApi.GetOperationLogs)
+		operationRouter.POST("/clean", baseApi.CleanLogs)
+	}
+}
diff --git a/core/router/ro_router.go b/core/router/ro_router.go
new file mode 100644
index 000000000..58a52dce0
--- /dev/null
+++ b/core/router/ro_router.go
@@ -0,0 +1,7 @@
+package router
+
+import "github.com/gin-gonic/gin"
+
+type CommonRouter interface {
+	InitRouter(Router *gin.RouterGroup)
+}
diff --git a/core/router/ro_setting.go b/core/router/ro_setting.go
new file mode 100644
index 000000000..05a0efd4a
--- /dev/null
+++ b/core/router/ro_setting.go
@@ -0,0 +1,42 @@
+package router
+
+import (
+	v1 "github.com/1Panel-dev/1Panel/core/app/api/v1"
+	"github.com/1Panel-dev/1Panel/core/middleware"
+	"github.com/gin-gonic/gin"
+)
+
+type SettingRouter struct{}
+
+func (s *SettingRouter) InitRouter(Router *gin.RouterGroup) {
+	router := Router.Group("settings").
+		Use(middleware.JwtAuth()).
+		Use(middleware.SessionAuth())
+	settingRouter := Router.Group("settings").
+		Use(middleware.JwtAuth()).
+		Use(middleware.SessionAuth()).
+		Use(middleware.PasswordExpired())
+	baseApi := v1.ApiGroupApp.BaseApi
+	{
+		router.POST("/search", baseApi.GetSettingInfo)
+		router.POST("/expired/handle", baseApi.HandlePasswordExpired)
+		settingRouter.GET("/search/available", baseApi.GetSystemAvailable)
+		settingRouter.POST("/update", baseApi.UpdateSetting)
+		settingRouter.GET("/interface", baseApi.LoadInterfaceAddr)
+		settingRouter.POST("/menu/update", baseApi.UpdateMenu)
+		settingRouter.POST("/proxy/update", baseApi.UpdateProxy)
+		settingRouter.POST("/bind/update", baseApi.UpdateBindInfo)
+		settingRouter.POST("/port/update", baseApi.UpdatePort)
+		settingRouter.POST("/ssl/update", baseApi.UpdateSSL)
+		settingRouter.GET("/ssl/info", baseApi.LoadFromCert)
+		settingRouter.POST("/ssl/download", baseApi.DownloadSSL)
+		settingRouter.POST("/password/update", baseApi.UpdatePassword)
+		settingRouter.POST("/mfa", baseApi.LoadMFA)
+		settingRouter.POST("/mfa/bind", baseApi.MFABind)
+
+		settingRouter.POST("/upgrade", baseApi.Upgrade)
+		settingRouter.POST("/upgrade/notes", baseApi.GetNotesByVersion)
+		settingRouter.GET("/upgrade", baseApi.GetUpgradeInfo)
+		settingRouter.GET("/basedir", baseApi.LoadBaseDir)
+	}
+}
diff --git a/core/server/init.go b/core/server/init.go
new file mode 100644
index 000000000..b8ed30b47
--- /dev/null
+++ b/core/server/init.go
@@ -0,0 +1,6 @@
+//go:build !xpack
+
+package server
+
+func InitOthers() {
+}
diff --git a/core/server/server.go b/core/server/server.go
new file mode 100644
index 000000000..c8a3166ce
--- /dev/null
+++ b/core/server/server.go
@@ -0,0 +1,88 @@
+package server
+
+import (
+	"crypto/tls"
+	"encoding/gob"
+	"fmt"
+	"net"
+	"net/http"
+	"os"
+	"path"
+
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/i18n"
+	"github.com/1Panel-dev/1Panel/core/init/cache"
+	"github.com/1Panel-dev/1Panel/core/init/db"
+	"github.com/1Panel-dev/1Panel/core/init/hook"
+	"github.com/1Panel-dev/1Panel/core/init/log"
+	"github.com/1Panel-dev/1Panel/core/init/migration"
+	"github.com/1Panel-dev/1Panel/core/init/router"
+	"github.com/1Panel-dev/1Panel/core/init/session"
+	"github.com/1Panel-dev/1Panel/core/init/session/psession"
+	"github.com/1Panel-dev/1Panel/core/init/validator"
+	"github.com/1Panel-dev/1Panel/core/init/viper"
+
+	"github.com/gin-gonic/gin"
+)
+
+func Start() {
+	viper.Init()
+	i18n.Init()
+	log.Init()
+	db.Init()
+	migration.Init()
+	validator.Init()
+	gob.Register(psession.SessionUser{})
+	cache.Init()
+	session.Init()
+	gin.SetMode("debug")
+	hook.Init()
+
+	rootRouter := router.Routers()
+
+	tcpItem := "tcp4"
+	if global.CONF.System.Ipv6 == "enable" {
+		tcpItem = "tcp"
+		global.CONF.System.BindAddress = fmt.Sprintf("[%s]", global.CONF.System.BindAddress)
+	}
+	server := &http.Server{
+		Addr:    global.CONF.System.BindAddress + ":" + global.CONF.System.Port,
+		Handler: rootRouter,
+	}
+	ln, err := net.Listen(tcpItem, server.Addr)
+	if err != nil {
+		panic(err)
+	}
+	type tcpKeepAliveListener struct {
+		*net.TCPListener
+	}
+	if global.CONF.System.SSL == "enable" {
+		certPath := path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt")
+		keyPath := path.Join(global.CONF.System.BaseDir, "1panel/secret/server.key")
+		certificate, err := os.ReadFile(certPath)
+		if err != nil {
+			panic(err)
+		}
+		key, err := os.ReadFile(keyPath)
+		if err != nil {
+			panic(err)
+		}
+		cert, err := tls.X509KeyPair(certificate, key)
+		if err != nil {
+			panic(err)
+		}
+		server.TLSConfig = &tls.Config{
+			Certificates: []tls.Certificate{cert},
+		}
+		global.LOG.Infof("listen at https://%s:%s [%s]", global.CONF.System.BindAddress, global.CONF.System.Port, tcpItem)
+
+		if err := server.ServeTLS(tcpKeepAliveListener{ln.(*net.TCPListener)}, certPath, keyPath); err != nil {
+			panic(err)
+		}
+	} else {
+		global.LOG.Infof("listen at http://%s:%s [%s]", global.CONF.System.BindAddress, global.CONF.System.Port, tcpItem)
+		if err := server.Serve(tcpKeepAliveListener{ln.(*net.TCPListener)}); err != nil {
+			panic(err)
+		}
+	}
+}
diff --git a/core/utils/captcha/captcha.go b/core/utils/captcha/captcha.go
new file mode 100644
index 000000000..c0a60bc01
--- /dev/null
+++ b/core/utils/captcha/captcha.go
@@ -0,0 +1,45 @@
+package captcha
+
+import (
+	"strings"
+
+	"github.com/1Panel-dev/1Panel/core/app/dto"
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/mojocn/base64Captcha"
+)
+
+var store = base64Captcha.DefaultMemStore
+
+func VerifyCode(codeID string, code string) error {
+	if codeID == "" {
+		return constant.ErrCaptchaCode
+	}
+	vv := store.Get(codeID, true)
+	vv = strings.TrimSpace(vv)
+	code = strings.TrimSpace(code)
+
+	if strings.EqualFold(vv, code) {
+		return nil
+	}
+	return constant.ErrCaptchaCode
+}
+
+func CreateCaptcha() (*dto.CaptchaResponse, error) {
+	var driverString base64Captcha.DriverString
+	driverString.Source = "1234567890QWERTYUPLKJHGFDSAZXCVBNMqwertyupkjhgfdsazxcvbnm"
+	driverString.Width = 120
+	driverString.Height = 50
+	driverString.NoiseCount = 0
+	driverString.Length = 4
+	driverString.Fonts = []string{"RitaSmith.ttf", "actionj.ttf", "chromohv.ttf"}
+	driver := driverString.ConvertFonts()
+	c := base64Captcha.NewCaptcha(driver, store)
+	id, b64s, _, err := c.Generate()
+	if err != nil {
+		return nil, err
+	}
+	return &dto.CaptchaResponse{
+		CaptchaID: id,
+		ImagePath: b64s,
+	}, nil
+}
diff --git a/core/utils/cmd/cmd.go b/core/utils/cmd/cmd.go
new file mode 100644
index 000000000..264326bad
--- /dev/null
+++ b/core/utils/cmd/cmd.go
@@ -0,0 +1,76 @@
+package cmd
+
+import (
+	"bytes"
+	"fmt"
+	"os/exec"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/buserr"
+	"github.com/1Panel-dev/1Panel/core/constant"
+)
+
+func Exec(cmdStr string) (string, error) {
+	return ExecWithTimeOut(cmdStr, 20*time.Second)
+}
+
+func SudoHandleCmd() string {
+	cmd := exec.Command("sudo", "-n", "ls")
+	if err := cmd.Run(); err == nil {
+		return "sudo "
+	}
+	return ""
+}
+
+func Execf(cmdStr string, a ...interface{}) (string, error) {
+	cmd := exec.Command("bash", "-c", fmt.Sprintf(cmdStr, a...))
+	var stdout, stderr bytes.Buffer
+	cmd.Stdout = &stdout
+	cmd.Stderr = &stderr
+	err := cmd.Run()
+	if err != nil {
+		return handleErr(stdout, stderr, err)
+	}
+	return stdout.String(), nil
+}
+
+func ExecWithTimeOut(cmdStr string, timeout time.Duration) (string, error) {
+	cmd := exec.Command("bash", "-c", cmdStr)
+	var stdout, stderr bytes.Buffer
+	cmd.Stdout = &stdout
+	cmd.Stderr = &stderr
+	if err := cmd.Start(); err != nil {
+		return "", err
+	}
+	done := make(chan error, 1)
+	go func() {
+		done <- cmd.Wait()
+	}()
+	after := time.After(timeout)
+	select {
+	case <-after:
+		_ = cmd.Process.Kill()
+		return "", buserr.New(constant.ErrCmdTimeout)
+	case err := <-done:
+		if err != nil {
+			return handleErr(stdout, stderr, err)
+		}
+	}
+
+	return stdout.String(), nil
+}
+
+func handleErr(stdout, stderr bytes.Buffer, err error) (string, error) {
+	errMsg := ""
+	if len(stderr.String()) != 0 {
+		errMsg = fmt.Sprintf("stderr: %s", stderr.String())
+	}
+	if len(stdout.String()) != 0 {
+		if len(errMsg) != 0 {
+			errMsg = fmt.Sprintf("%s; stdout: %s", errMsg, stdout.String())
+		} else {
+			errMsg = fmt.Sprintf("stdout: %s", stdout.String())
+		}
+	}
+	return errMsg, err
+}
diff --git a/core/utils/common/common.go b/core/utils/common/common.go
new file mode 100644
index 000000000..99889d54b
--- /dev/null
+++ b/core/utils/common/common.go
@@ -0,0 +1,96 @@
+package common
+
+import (
+	mathRand "math/rand"
+	"net"
+	"strconv"
+	"strings"
+	"time"
+)
+
+var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")
+
+func RandStr(n int) string {
+	b := make([]rune, n)
+	for i := range b {
+		b[i] = letters[mathRand.Intn(len(letters))]
+	}
+	return string(b)
+}
+func RandStrAndNum(n int) string {
+	source := mathRand.NewSource(time.Now().UnixNano())
+	randGen := mathRand.New(source)
+	const charset = "abcdefghijklmnopqrstuvwxyz0123456789"
+	b := make([]byte, n)
+	for i := range b {
+		b[i] = charset[randGen.Intn(len(charset)-1)]
+	}
+	return (string(b))
+}
+
+func LoadTimeZone() string {
+	loc := time.Now().Location()
+	if _, err := time.LoadLocation(loc.String()); err != nil {
+		return "Asia/Shanghai"
+	}
+	return loc.String()
+}
+
+func ScanPort(port int) bool {
+	ln, err := net.Listen("tcp", ":"+strconv.Itoa(port))
+	if err != nil {
+		return true
+	}
+	defer ln.Close()
+	return false
+}
+
+func ComparePanelVersion(version1, version2 string) bool {
+	if version1 == version2 {
+		return false
+	}
+	version1s := SplitStr(version1, ".", "-")
+	version2s := SplitStr(version2, ".", "-")
+
+	if len(version2s) > len(version1s) {
+		for i := 0; i < len(version2s)-len(version1s); i++ {
+			version1s = append(version1s, "0")
+		}
+	}
+	if len(version1s) > len(version2s) {
+		for i := 0; i < len(version1s)-len(version2s); i++ {
+			version2s = append(version2s, "0")
+		}
+	}
+
+	n := min(len(version1s), len(version2s))
+	for i := 0; i < n; i++ {
+		if version1s[i] == version2s[i] {
+			continue
+		} else {
+			v1, err1 := strconv.Atoi(version1s[i])
+			if err1 != nil {
+				return version1s[i] > version2s[i]
+			}
+			v2, err2 := strconv.Atoi(version2s[i])
+			if err2 != nil {
+				return version1s[i] > version2s[i]
+			}
+			return v1 > v2
+		}
+	}
+	return true
+}
+
+func SplitStr(str string, spi ...string) []string {
+	lists := []string{str}
+	var results []string
+	for _, s := range spi {
+		results = []string{}
+		for _, list := range lists {
+			results = append(results, strings.Split(list, s)...)
+		}
+		lists = results
+	}
+	return results
+}
diff --git a/core/utils/copier/copier.go b/core/utils/copier/copier.go
new file mode 100644
index 000000000..bfc684ce9
--- /dev/null
+++ b/core/utils/copier/copier.go
@@ -0,0 +1,18 @@
+package copier
+
+import (
+	"encoding/json"
+
+	"github.com/pkg/errors"
+)
+
+func Copy(to, from interface{}) error {
+	b, err := json.Marshal(from)
+	if err != nil {
+		return errors.Wrap(err, "marshal from data err")
+	}
+	if err = json.Unmarshal(b, to); err != nil {
+		return errors.Wrap(err, "unmarshal to data err")
+	}
+	return nil
+}
diff --git a/core/utils/encrypt/encrypt.go b/core/utils/encrypt/encrypt.go
new file mode 100644
index 000000000..d772eaabf
--- /dev/null
+++ b/core/utils/encrypt/encrypt.go
@@ -0,0 +1,104 @@
+package encrypt
+
+import (
+	"bytes"
+	"crypto/aes"
+	"crypto/cipher"
+	"crypto/rand"
+	"encoding/base64"
+	"fmt"
+	"io"
+
+	"github.com/1Panel-dev/1Panel/core/app/model"
+	"github.com/1Panel-dev/1Panel/core/global"
+)
+
+func StringEncrypt(text string) (string, error) {
+	if len(text) == 0 {
+		return "", nil
+	}
+	if len(global.CONF.System.EncryptKey) == 0 {
+		var encryptSetting model.Setting
+		if err := global.DB.Where("key = ?", "EncryptKey").First(&encryptSetting).Error; err != nil {
+			return "", err
+		}
+		global.CONF.System.EncryptKey = encryptSetting.Value
+	}
+	key := global.CONF.System.EncryptKey
+	pass := []byte(text)
+	xpass, err := aesEncryptWithSalt([]byte(key), pass)
+	if err == nil {
+		pass64 := base64.StdEncoding.EncodeToString(xpass)
+		return pass64, err
+	}
+	return "", err
+}
+
+func StringDecrypt(text string) (string, error) {
+	if len(text) == 0 {
+		return "", nil
+	}
+	if len(global.CONF.System.EncryptKey) == 0 {
+		var encryptSetting model.Setting
+		if err := global.DB.Where("key = ?", "EncryptKey").First(&encryptSetting).Error; err != nil {
+			return "", err
+		}
+		global.CONF.System.EncryptKey = encryptSetting.Value
+	}
+	key := global.CONF.System.EncryptKey
+	bytesPass, err := base64.StdEncoding.DecodeString(text)
+	if err != nil {
+		return "", err
+	}
+	var tpass []byte
+	tpass, err = aesDecryptWithSalt([]byte(key), bytesPass)
+	if err == nil {
+		result := string(tpass[:])
+		return result, err
+	}
+	return "", err
+}
+
+func padding(plaintext []byte, blockSize int) []byte {
+	padding := blockSize - len(plaintext)%blockSize
+	padtext := bytes.Repeat([]byte{byte(padding)}, padding)
+	return append(plaintext, padtext...)
+}
+
+func unPadding(origData []byte) []byte {
+	length := len(origData)
+	unpadding := int(origData[length-1])
+	return origData[:(length - unpadding)]
+}
+
+func aesEncryptWithSalt(key, plaintext []byte) ([]byte, error) {
+	plaintext = padding(plaintext, aes.BlockSize)
+	block, err := aes.NewCipher(key)
+	if err != nil {
+		return nil, err
+	}
+	ciphertext := make([]byte, aes.BlockSize+len(plaintext))
+	iv := ciphertext[0:aes.BlockSize]
+	if _, err := io.ReadFull(rand.Reader, iv); err != nil {
+		return nil, err
+	}
+	cbc := cipher.NewCBCEncrypter(block, iv)
+	cbc.CryptBlocks(ciphertext[aes.BlockSize:], plaintext)
+	return ciphertext, nil
+}
+func aesDecryptWithSalt(key, ciphertext []byte) ([]byte, error) {
+	var block cipher.Block
+	block, err := aes.NewCipher(key)
+	if err != nil {
+		return nil, err
+	}
+	if len(ciphertext) < aes.BlockSize {
+		return nil, fmt.Errorf("iciphertext too short")
+	}
+	iv := ciphertext[:aes.BlockSize]
+	ciphertext = ciphertext[aes.BlockSize:]
+	cbc := cipher.NewCBCDecrypter(block, iv)
+	cbc.CryptBlocks(ciphertext, ciphertext)
+	ciphertext = unPadding(ciphertext)
+	return ciphertext, nil
+}
diff --git a/core/utils/files/files.go b/core/utils/files/files.go
new file mode 100644
index 000000000..79e03a843
--- /dev/null
+++ b/core/utils/files/files.go
@@ -0,0 +1,139 @@
+package files
+
+import (
+	"bytes"
+	"errors"
+	"fmt"
+	"io"
+	"net/http"
+	"os"
+	"path"
+	"strings"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/constant"
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/1Panel-dev/1Panel/core/utils/cmd"
+	httpUtil "github.com/1Panel-dev/1Panel/core/utils/http"
+)
+
+func CopyFile(src, dst string) error {
+	source, err := os.Open(src)
+	if err != nil {
+		return err
+	}
+	defer source.Close()
+
+	if path.Base(src) != path.Base(dst) {
+		dst = path.Join(dst, path.Base(src))
+	}
+	if _, err := os.Stat(path.Dir(dst)); err != nil {
+		if os.IsNotExist(err) {
+			_ = os.MkdirAll(path.Dir(dst), os.ModePerm)
+		}
+	}
+	target, err := os.OpenFile(dst+"_temp", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755)
+	if err != nil {
+		return err
+	}
+	defer target.Close()
+
+	if _, err = io.Copy(target, source); err != nil {
+		return err
+	}
+	if err = os.Rename(dst+"_temp", dst); err != nil {
+		return err
+	}
+	return nil
+}
+
+func HandleTar(sourceDir, targetDir, name, exclusionRules string, secret string) error {
+	if _, err := os.Stat(targetDir); err != nil && os.IsNotExist(err) {
+		if err = os.MkdirAll(targetDir, os.ModePerm); err != nil {
+			return err
+		}
+	}
+
+	excludes := strings.Split(exclusionRules, ",")
+	excludeRules := ""
+	excludes = append(excludes, "*.sock")
+	for _, exclude := range excludes {
+		if len(exclude) == 0 {
+			continue
+		}
+		excludeRules += " --exclude " + exclude
+	}
+	path := ""
+	if strings.Contains(sourceDir, "/") {
+		itemDir := strings.ReplaceAll(sourceDir[strings.LastIndex(sourceDir, "/"):], "/", "")
+		aheadDir := sourceDir[:strings.LastIndex(sourceDir, "/")]
+		if len(aheadDir) == 0 {
+			aheadDir = "/"
+		}
+		path += fmt.Sprintf("-C %s %s", aheadDir, itemDir)
+	} else {
+		path = sourceDir
+	}
+
+	commands := ""
+
+	if len(secret) != 0 {
+		extraCmd := "| openssl enc -aes-256-cbc -salt -k '" + secret + "' -out"
+		commands = fmt.Sprintf("tar --warning=no-file-changed --ignore-failed-read -zcf %s %s %s %s", " -"+excludeRules, path, extraCmd, targetDir+"/"+name)
+		global.LOG.Debug(strings.ReplaceAll(commands, fmt.Sprintf(" %s ", secret), "******"))
+	} else {
+		commands = fmt.Sprintf("tar --warning=no-file-changed --ignore-failed-read -zcf %s %s %s", targetDir+"/"+name, excludeRules, path)
+		global.LOG.Debug(commands)
+	}
+	stdout, err := cmd.ExecWithTimeOut(commands, 24*time.Hour)
+	if err != nil {
+		if len(stdout) != 0 {
+			global.LOG.Errorf("do handle tar failed, stdout: %s, err: %v", stdout, err)
+			return fmt.Errorf("do handle tar failed, stdout: %s, err: %v", stdout, err)
+		}
+	}
+	return nil
+}
+
+func HandleUnTar(sourceFile, targetDir string, secret string) error {
+	if _, err := os.Stat(targetDir); err != nil && os.IsNotExist(err) {
+		if err = os.MkdirAll(targetDir, os.ModePerm); err != nil {
+			return err
+		}
+	}
+	commands := ""
+	if len(secret) != 0 {
+		extraCmd := "openssl enc -d -aes-256-cbc -k '" + secret + "' -in " + sourceFile + " | "
+		commands = fmt.Sprintf("%s tar -zxvf - -C %s", extraCmd, targetDir+" > /dev/null 2>&1")
+		global.LOG.Debug(strings.ReplaceAll(commands, fmt.Sprintf(" %s ", secret), "******"))
+	} else {
+		commands = fmt.Sprintf("tar zxvfC %s %s", sourceFile, targetDir)
+		global.LOG.Debug(commands)
+	}
+
+	stdout, err := cmd.ExecWithTimeOut(commands, 24*time.Hour)
+	if err != nil {
+		global.LOG.Errorf("do handle untar failed, stdout: %s, err: %v", stdout, err)
+		return errors.New(stdout)
+	}
+	return nil
+}
+
+func DownloadFileWithProxy(url, dst string) error {
+	_, resp, err := httpUtil.HandleGet(url, http.MethodGet, constant.TimeOut5m)
+	if err != nil {
+		return err
+	}
+
+	out, err := os.Create(dst)
+	if err != nil {
+		return fmt.Errorf("create download file [%s] error, err %s", dst, err.Error())
+	}
+	defer out.Close()
+
+	reader := bytes.NewReader(resp)
+	if _, err = io.Copy(out, reader); err != nil {
+		return fmt.Errorf("save download file [%s] error, err %s", dst, err.Error())
+	}
+	return nil
+}
diff --git a/core/utils/http/http.go b/core/utils/http/http.go
new file mode 100644
index 000000000..5ceded012
--- /dev/null
+++ b/core/utils/http/http.go
@@ -0,0 +1,97 @@
+package http
+
+import (
+	"context"
+	"crypto/tls"
+	"errors"
+	"io"
+	"net"
+	"net/http"
+	"strings"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/buserr"
+	"github.com/1Panel-dev/1Panel/core/global"
+)
+
+func HandleGet(url, method string, timeout int) (int, []byte, error) {
+	transport := &http.Transport{
+		TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
+		DialContext: (&net.Dialer{
+			Timeout:   60 * time.Second,
+			KeepAlive: 60 * time.Second,
+		}).DialContext,
+		TLSHandshakeTimeout:   5 * time.Second,
+		ResponseHeaderTimeout: 10 * time.Second,
+		IdleConnTimeout:       15 * time.Second,
+	}
+	return HandleGetWithTransport(url, method, transport, timeout)
+}
+
+func HandleGetWithTransport(url, method string, transport *http.Transport, timeout int) (int, []byte, error) {
+	defer func() {
+		if r := recover(); r != nil {
+			global.LOG.Errorf("handle request failed, error message: %v", r)
+			return
+		}
+	}()
+
+	client := http.Client{Timeout: time.Duration(timeout) * time.Second, Transport: transport}
+	ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeout)*time.Second)
+	defer cancel()
+	request, err := http.NewRequestWithContext(ctx, method, url, nil)
+	if err != nil {
+		return 0, nil, err
+	}
+	request.Header.Set("Content-Type", "application/json")
+	resp, err := client.Do(request)
+	if err != nil {
+		return 0, nil, err
+	}
+	body, err := io.ReadAll(resp.Body)
+	if err != nil {
+		return 0, nil, err
+	}
+	defer resp.Body.Close()
+
+	return resp.StatusCode, body, nil
+}
+
+func GetHttpRes(url string) (*http.Response, error) {
+	client := &http.Client{
+		Timeout: time.Second * 300,
+	}
+	transport := &http.Transport{
+		TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
+		DialContext: (&net.Dialer{
+			Timeout:   60 * time.Second,
+			KeepAlive: 60 * time.Second,
+		}).DialContext,
+		TLSHandshakeTimeout:   5 * time.Second,
+		ResponseHeaderTimeout: 10 * time.Second,
+		IdleConnTimeout:       15 * time.Second,
+	}
+	client.Transport = transport
+
+	req, err := http.NewRequestWithContext(context.Background(), "GET", url, nil)
+	if err != nil {
+		return nil, buserr.WithMap("ErrCreateHttpClient", map[string]interface{}{"err": err.Error()}, err)
+	}
+
+	resp, err := client.Do(req)
+	if err != nil {
+		if errors.Is(err, context.DeadlineExceeded) {
+			return nil, buserr.WithMap("ErrHttpReqTimeOut", map[string]interface{}{"err": err.Error()}, err)
+		} else {
+			if strings.Contains(err.Error(), "no such host") {
+				return nil, buserr.New("ErrNoSuchHost")
+			}
+			return nil, buserr.WithMap("ErrHttpReqFailed", map[string]interface{}{"err": err.Error()}, err)
+		}
+	}
+	if resp.StatusCode == 404 {
+		return nil, buserr.New("ErrHttpReqNotFound")
+	}
+
+	return resp, nil
+}
diff --git a/core/utils/jwt/jwt.go b/core/utils/jwt/jwt.go
new file mode 100644
index 000000000..629d5e6bb
--- /dev/null
+++ b/core/utils/jwt/jwt.go
@@ -0,0 +1,69 @@
+package jwt
+
+import (
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/app/repo"
+	"github.com/1Panel-dev/1Panel/core/constant"
+
+	"github.com/golang-jwt/jwt/v4"
+)
+
+type JWT struct {
+	SigningKey []byte
+}
+
+type JwtRequest struct {
+	BaseClaims
+	BufferTime int64
+	jwt.RegisteredClaims
+}
+
+type CustomClaims struct {
+	BaseClaims
+	BufferTime int64
+	jwt.RegisteredClaims
+}
+
+type BaseClaims struct {
+	ID   uint
+	Name string
+}
+
+func NewJWT() *JWT {
+	settingRepo := repo.NewISettingRepo()
+	jwtSign, _ := settingRepo.Get(settingRepo.WithByKey("JWTSigningKey"))
+	return &JWT{
+		[]byte(jwtSign.Value),
+	}
+}
+
+func (j *JWT) CreateClaims(baseClaims BaseClaims) CustomClaims {
+	claims := CustomClaims{
+		BaseClaims: baseClaims,
+		BufferTime: constant.JWTBufferTime,
+		RegisteredClaims: jwt.RegisteredClaims{
+			ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Second * time.Duration(constant.JWTBufferTime))),
+			Issuer:    constant.JWTIssuer,
+		},
+	}
+	return claims
+}
+
+func (j *JWT) CreateToken(request CustomClaims) (string, error) {
+	token := jwt.NewWithClaims(jwt.SigningMethodHS256, &request)
+	return token.SignedString(j.SigningKey)
+}
+
+func (j *JWT) ParseToken(tokenStr string) (*JwtRequest, error) {
+	token, err := jwt.ParseWithClaims(tokenStr, &JwtRequest{}, func(token *jwt.Token) (interface{}, error) {
+		return j.SigningKey, nil
+	})
+	if err != nil || token == nil {
+		return nil, constant.ErrTokenParse
+	}
+	if claims, ok := token.Claims.(*JwtRequest); ok && token.Valid {
+		return claims, nil
+	}
+	return nil, constant.ErrTokenParse
+}
diff --git a/core/utils/mfa/mfa.go b/core/utils/mfa/mfa.go
new file mode 100644
index 000000000..458911c31
--- /dev/null
+++ b/core/utils/mfa/mfa.go
@@ -0,0 +1,46 @@
+package mfa
+
+import (
+	"bytes"
+	"encoding/base64"
+	"strconv"
+	"time"
+
+	"github.com/1Panel-dev/1Panel/core/global"
+	"github.com/skip2/go-qrcode"
+	"github.com/xlzd/gotp"
+)
+
+const secretLength = 16
+
+type Otp struct {
+	Secret  string `json:"secret"`
+	QrImage string `json:"qrImage"`
+}
+
+func GetOtp(username, title string, interval int) (otp Otp, err error) {
+	secret := gotp.RandomSecret(secretLength)
+	otp.Secret = secret
+	totp := gotp.NewTOTP(secret, 6, interval, nil)
+	uri := totp.ProvisioningUri(username, title)
+	subImg, err := qrcode.Encode(uri, qrcode.Medium, 256)
+	dist := make([]byte, 3000)
+	base64.StdEncoding.Encode(dist, subImg)
+	index := bytes.IndexByte(dist, 0)
+	baseImage := dist[0:index]
+	otp.QrImage = "data:image/png;base64," + string(baseImage)
+	return
+}
+
+func ValidCode(code, intervalStr, secret string) bool {
+	interval, err := strconv.Atoi(intervalStr)
+	if err != nil {
+		global.LOG.Errorf("type conversion failed, err: %v", err)
+		return false
+	}
+	totp := gotp.NewTOTP(secret, 6, interval, nil)
+	now := time.Now().Unix()
+	strInt64 := strconv.FormatInt(now, 10)
+	id16, _ := strconv.Atoi(strInt64)
+	return totp.Verify(code, int64(id16))
+}