From 3b937ee0f48ab2d34953ad1fe6c6ad6ab3affad6 Mon Sep 17 00:00:00 2001 From: Jacky Date: Sat, 20 Jul 2024 10:37:19 +0800 Subject: [PATCH 1/5] feat: add ip whitelist --- api/user/auth.go | 53 +- api/user/casdoor.go | 6 +- app/.eslintrc.cjs | 1 - app/package.json | 32 +- app/pnpm-lock.yaml | 1165 ++++++++++++++++++++-------------------- app/src/version.json | 2 +- app/version.json | 2 +- go.mod | 162 +++--- go.sum | 338 ++++++------ internal/user/login.go | 32 ++ internal/user/user.go | 57 ++ model/auth.go | 60 +-- router/ip.go | 25 + router/middleware.go | 4 +- router/routers.go | 3 +- settings/auth.go | 9 + settings/settings.go | 2 + 17 files changed, 1026 insertions(+), 927 deletions(-) create mode 100644 internal/user/login.go create mode 100644 internal/user/user.go create mode 100644 router/ip.go create mode 100644 settings/auth.go diff --git a/api/user/auth.go b/api/user/auth.go index 2d728b02e..007bf73f6 100644 --- a/api/user/auth.go +++ b/api/user/auth.go @@ -2,12 +2,12 @@ package user import ( "github.com/0xJacky/Nginx-UI/api" - "github.com/0xJacky/Nginx-UI/model" + "github.com/0xJacky/Nginx-UI/internal/logger" + "github.com/0xJacky/Nginx-UI/internal/user" + "github.com/gin-gonic/gin" + "github.com/pkg/errors" "net/http" "time" - - "github.com/gin-gonic/gin" - "golang.org/x/crypto/bcrypt" ) type LoginUser struct { @@ -15,32 +15,51 @@ type LoginUser struct { Password string `json:"password" binding:"required,max=255"` } +const ( + ErrPasswordIncorrect = 4031 + ErrMaxAttempts = 4291 + ErrUserBanned = 4033 +) + type LoginResponse struct { Message string `json:"message"` - Token string `json:"token"` + Error string `json:"error,omitempty"` + Code int `json:"code"` + Token string `json:"token,omitempty"` } func Login(c *gin.Context) { - var user LoginUser - ok := api.BindAndValid(c, &user) + var json LoginUser + ok := api.BindAndValid(c, &json) if !ok { return } - u, _ := model.GetUser(user.Name) - - if err := bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(user.Password)); err != nil { + u, err := user.Login(json.Name, json.Password) + if err != nil { time.Sleep(5 * time.Second) - c.JSON(http.StatusForbidden, gin.H{ - "message": "The username or password is incorrect", - }) + switch { + case errors.Is(err, user.ErrPasswordIncorrect): + c.JSON(http.StatusForbidden, LoginResponse{ + Message: "Password incorrect", + Code: ErrPasswordIncorrect, + }) + case errors.Is(err, user.ErrUserBanned): + c.JSON(http.StatusForbidden, LoginResponse{ + Message: "The user is banned", + Code: ErrUserBanned, + }) + default: + api.ErrHandler(c, err) + } return } - token, err := model.GenerateJWT(u.Name) + logger.Info("[User Login]", u.Name) + token, err := user.GenerateJWT(u.Name) if err != nil { - c.JSON(http.StatusInternalServerError, gin.H{ - "message": err.Error(), + c.JSON(http.StatusInternalServerError, LoginResponse{ + Message: err.Error(), }) return } @@ -54,7 +73,7 @@ func Login(c *gin.Context) { func Logout(c *gin.Context) { token := c.GetHeader("Authorization") if token != "" { - err := model.DeleteToken(token) + err := user.DeleteToken(token) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "message": err.Error(), diff --git a/api/user/casdoor.go b/api/user/casdoor.go index 26e49d07d..3fb105063 100644 --- a/api/user/casdoor.go +++ b/api/user/casdoor.go @@ -3,7 +3,7 @@ package user import ( "fmt" "github.com/0xJacky/Nginx-UI/api" - "github.com/0xJacky/Nginx-UI/model" + "github.com/0xJacky/Nginx-UI/internal/user" "github.com/0xJacky/Nginx-UI/settings" "github.com/casdoor/casdoor-go-sdk/casdoorsdk" "github.com/gin-gonic/gin" @@ -53,7 +53,7 @@ func CasdoorCallback(c *gin.Context) { return } - u, err := model.GetUser(claims.Name) + u, err := user.GetUser(claims.Name) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { c.JSON(http.StatusForbidden, gin.H{ @@ -65,7 +65,7 @@ func CasdoorCallback(c *gin.Context) { return } - userToken, err := model.GenerateJWT(u.Name) + userToken, err := user.GenerateJWT(u.Name) if err != nil { api.ErrHandler(c, err) return diff --git a/app/.eslintrc.cjs b/app/.eslintrc.cjs index 7c53c9696..bcc53524e 100644 --- a/app/.eslintrc.cjs +++ b/app/.eslintrc.cjs @@ -8,7 +8,6 @@ module.exports = { 'plugin:vue/vue3-recommended', 'plugin:import/recommended', 'plugin:import/typescript', - 'plugin:promise/recommended', 'plugin:sonarjs/recommended', 'plugin:@typescript-eslint/recommended', diff --git a/app/package.json b/app/package.json index 2057f9539..620bed04f 100644 --- a/app/package.json +++ b/app/package.json @@ -3,7 +3,7 @@ "version": "2.0.0-beta.25", "type": "module", "scripts": { - "dev": "vite", + "dev": "vite --host", "typecheck": "vue-tsc --noEmit", "lint": "eslint . -c .eslintrc.cjs --fix --ext .ts,.vue,.tsx,.d.ts", "build": "vite build", @@ -13,17 +13,17 @@ "dependencies": { "@ant-design/icons-vue": "^7.0.1", "@formkit/auto-animate": "^0.8.2", - "@vue/reactivity": "^3.4.29", - "@vue/shared": "^3.4.29", + "@vue/reactivity": "^3.4.33", + "@vue/shared": "^3.4.33", "@vueuse/core": "^10.11.0", "@xterm/addon-attach": "^0.11.0", "@xterm/addon-fit": "^0.10.0", "@xterm/xterm": "^5.5.0", "ant-design-vue": "^4.2.3", - "apexcharts": "^3.49.1", + "apexcharts": "^3.50.0", "axios": "^1.7.2", - "dayjs": "^1.11.11", - "highlight.js": "^11.9.0", + "dayjs": "^1.11.12", + "highlight.js": "^11.10.0", "lodash": "^4.17.21", "marked": "^10.0.0", "nprogress": "^0.2.0", @@ -32,9 +32,9 @@ "reconnecting-websocket": "^4.4.0", "sortablejs": "^1.15.2", "vite-plugin-build-id": "^0.2.9", - "vue": "^3.4.29", + "vue": "^3.4.33", "vue-github-button": "github:0xJacky/vue-github-button", - "vue-router": "^4.3.3", + "vue-router": "^4.4.0", "vue3-ace-editor": "2.2.4", "vue3-apexcharts": "1.4.4", "vue3-gettext": "3.0.0-beta.4", @@ -42,16 +42,16 @@ }, "devDependencies": { "@antfu/eslint-config-vue": "^0.43.1", - "@types/lodash": "^4.17.5", + "@types/lodash": "^4.17.7", "@types/nprogress": "^0.2.3", "@types/sortablejs": "^1.15.8", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "@vitejs/plugin-vue": "^5.0.5", "@vitejs/plugin-vue-jsx": "^3.1.0", - "@vue/compiler-sfc": "^3.4.29", + "@vue/compiler-sfc": "^3.4.33", "@vue/tsconfig": "^0.5.1", - "ace-builds": "^1.35.0", + "ace-builds": "^1.35.3", "autoprefixer": "^10.4.19", "eslint": "^8.57.0", "eslint-import-resolver-alias": "^1.1.2", @@ -59,15 +59,15 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-regex": "^1.10.0", "eslint-plugin-sonarjs": "^0.23.0", - "eslint-plugin-vue": "^9.26.0", + "eslint-plugin-vue": "^9.27.0", "less": "^4.2.0", - "postcss": "^8.4.38", - "tailwindcss": "^3.4.4", + "postcss": "^8.4.39", + "tailwindcss": "^3.4.6", "typescript": "5.3.3", - "unplugin-auto-import": "^0.17.6", + "unplugin-auto-import": "^0.17.8", "unplugin-vue-components": "^0.26.0", "unplugin-vue-define-options": "^1.4.5", - "vite": "^5.3.1", + "vite": "^5.3.4", "vite-svg-loader": "^5.1.0", "vue-tsc": "^1.8.27" }, diff --git a/app/pnpm-lock.yaml b/app/pnpm-lock.yaml index fdae1b9bb..4113a41a1 100644 --- a/app/pnpm-lock.yaml +++ b/app/pnpm-lock.yaml @@ -10,19 +10,19 @@ importers: dependencies: '@ant-design/icons-vue': specifier: ^7.0.1 - version: 7.0.1(vue@3.4.29(typescript@5.3.3)) + version: 7.0.1(vue@3.4.33(typescript@5.3.3)) '@formkit/auto-animate': specifier: ^0.8.2 version: 0.8.2 '@vue/reactivity': - specifier: ^3.4.29 - version: 3.4.29 + specifier: ^3.4.33 + version: 3.4.33 '@vue/shared': - specifier: ^3.4.29 - version: 3.4.29 + specifier: ^3.4.33 + version: 3.4.33 '@vueuse/core': specifier: ^10.11.0 - version: 10.11.0(vue@3.4.29(typescript@5.3.3)) + version: 10.11.0(vue@3.4.33(typescript@5.3.3)) '@xterm/addon-attach': specifier: ^0.11.0 version: 0.11.0(@xterm/xterm@5.5.0) @@ -34,19 +34,19 @@ importers: version: 5.5.0 ant-design-vue: specifier: ^4.2.3 - version: 4.2.3(vue@3.4.29(typescript@5.3.3)) + version: 4.2.3(vue@3.4.33(typescript@5.3.3)) apexcharts: - specifier: ^3.49.1 - version: 3.49.1 + specifier: ^3.50.0 + version: 3.50.0 axios: specifier: ^1.7.2 version: 1.7.2 dayjs: - specifier: ^1.11.11 - version: 1.11.11 + specifier: ^1.11.12 + version: 1.11.12 highlight.js: - specifier: ^11.9.0 - version: 11.9.0 + specifier: ^11.10.0 + version: 11.10.0 lodash: specifier: ^4.17.21 version: 4.17.21 @@ -58,10 +58,10 @@ importers: version: 0.2.0 pinia: specifier: ^2.1.7 - version: 2.1.7(typescript@5.3.3)(vue@3.4.29(typescript@5.3.3)) + version: 2.1.7(typescript@5.3.3)(vue@3.4.33(typescript@5.3.3)) pinia-plugin-persistedstate: specifier: ^3.2.1 - version: 3.2.1(pinia@2.1.7(typescript@5.3.3)(vue@3.4.29(typescript@5.3.3))) + version: 3.2.1(pinia@2.1.7(typescript@5.3.3)(vue@3.4.33(typescript@5.3.3))) reconnecting-websocket: specifier: ^4.4.0 version: 4.4.0 @@ -72,33 +72,33 @@ importers: specifier: ^0.2.9 version: 0.2.9(less@4.2.0) vue: - specifier: ^3.4.29 - version: 3.4.29(typescript@5.3.3) + specifier: ^3.4.33 + version: 3.4.33(typescript@5.3.3) vue-github-button: specifier: github:0xJacky/vue-github-button version: https://codeload.github.com/0xJacky/vue-github-button/tar.gz/fc3c93355a790d3249de6610de3ebe35949ee314 vue-router: - specifier: ^4.3.3 - version: 4.3.3(vue@3.4.29(typescript@5.3.3)) + specifier: ^4.4.0 + version: 4.4.0(vue@3.4.33(typescript@5.3.3)) vue3-ace-editor: specifier: 2.2.4 - version: 2.2.4(ace-builds@1.35.0)(vue@3.4.29(typescript@5.3.3)) + version: 2.2.4(ace-builds@1.35.3)(vue@3.4.33(typescript@5.3.3)) vue3-apexcharts: specifier: 1.4.4 - version: 1.4.4(apexcharts@3.49.1)(vue@3.4.29(typescript@5.3.3)) + version: 1.4.4(apexcharts@3.50.0)(vue@3.4.33(typescript@5.3.3)) vue3-gettext: specifier: 3.0.0-beta.4 - version: 3.0.0-beta.4(@vue/compiler-sfc@3.4.29)(typescript@5.3.3)(vue@3.4.29(typescript@5.3.3)) + version: 3.0.0-beta.4(@vue/compiler-sfc@3.4.33)(typescript@5.3.3)(vue@3.4.33(typescript@5.3.3)) vuedraggable: specifier: ^4.1.0 - version: 4.1.0(vue@3.4.29(typescript@5.3.3)) + version: 4.1.0(vue@3.4.33(typescript@5.3.3)) devDependencies: '@antfu/eslint-config-vue': specifier: ^0.43.1 version: 0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.3.3) '@types/lodash': - specifier: ^4.17.5 - version: 4.17.5 + specifier: ^4.17.7 + version: 4.17.7 '@types/nprogress': specifier: ^0.2.3 version: 0.2.3 @@ -113,22 +113,22 @@ importers: version: 6.21.0(eslint@8.57.0)(typescript@5.3.3) '@vitejs/plugin-vue': specifier: ^5.0.5 - version: 5.0.5(vite@5.3.1(@types/node@20.14.2)(less@4.2.0))(vue@3.4.29(typescript@5.3.3)) + version: 5.0.5(vite@5.3.4(@types/node@20.14.11)(less@4.2.0))(vue@3.4.33(typescript@5.3.3)) '@vitejs/plugin-vue-jsx': specifier: ^3.1.0 - version: 3.1.0(vite@5.3.1(@types/node@20.14.2)(less@4.2.0))(vue@3.4.29(typescript@5.3.3)) + version: 3.1.0(vite@5.3.4(@types/node@20.14.11)(less@4.2.0))(vue@3.4.33(typescript@5.3.3)) '@vue/compiler-sfc': - specifier: ^3.4.29 - version: 3.4.29 + specifier: ^3.4.33 + version: 3.4.33 '@vue/tsconfig': specifier: ^0.5.1 version: 0.5.1 ace-builds: - specifier: ^1.35.0 - version: 1.35.0 + specifier: ^1.35.3 + version: 1.35.3 autoprefixer: specifier: ^10.4.19 - version: 10.4.19(postcss@8.4.38) + version: 10.4.19(postcss@8.4.39) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -148,35 +148,35 @@ importers: specifier: ^0.23.0 version: 0.23.0(eslint@8.57.0) eslint-plugin-vue: - specifier: ^9.26.0 - version: 9.26.0(eslint@8.57.0) + specifier: ^9.27.0 + version: 9.27.0(eslint@8.57.0) less: specifier: ^4.2.0 version: 4.2.0 postcss: - specifier: ^8.4.38 - version: 8.4.38 + specifier: ^8.4.39 + version: 8.4.39 tailwindcss: - specifier: ^3.4.4 - version: 3.4.4 + specifier: ^3.4.6 + version: 3.4.6 typescript: specifier: 5.3.3 version: 5.3.3 unplugin-auto-import: - specifier: ^0.17.6 - version: 0.17.6(@vueuse/core@10.11.0(vue@3.4.29(typescript@5.3.3)))(rollup@4.18.0) + specifier: ^0.17.8 + version: 0.17.8(@vueuse/core@10.11.0(vue@3.4.33(typescript@5.3.3)))(rollup@4.18.1) unplugin-vue-components: specifier: ^0.26.0 - version: 0.26.0(@babel/parser@7.24.7)(rollup@4.18.0)(vue@3.4.29(typescript@5.3.3)) + version: 0.26.0(@babel/parser@7.24.8)(rollup@4.18.1)(vue@3.4.33(typescript@5.3.3)) unplugin-vue-define-options: specifier: ^1.4.5 - version: 1.4.5(rollup@4.18.0)(vue@3.4.29(typescript@5.3.3)) + version: 1.4.5(rollup@4.18.1)(vue@3.4.33(typescript@5.3.3)) vite: - specifier: ^5.3.1 - version: 5.3.1(@types/node@20.14.2)(less@4.2.0) + specifier: ^5.3.4 + version: 5.3.4(@types/node@20.14.11)(less@4.2.0) vite-svg-loader: specifier: ^5.1.0 - version: 5.1.0(vue@3.4.29(typescript@5.3.3)) + version: 5.1.0(vue@3.4.33(typescript@5.3.3)) vue-tsc: specifier: ^1.8.27 version: 1.8.27(typescript@5.3.3) @@ -218,35 +218,35 @@ packages: peerDependencies: eslint: '>=7.4.0' - '@antfu/utils@0.7.8': - resolution: {integrity: sha512-rWQkqXRESdjXtc+7NRfK9lASQjpXJu1ayp7qi1d23zZorY+wBHVLHHoVcMsEnkqEBWTFqbztO7/QdJFzyEcLTg==} + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.7': - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + '@babel/compat-data@7.24.9': + resolution: {integrity: sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.7': - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + '@babel/core@7.24.9': + resolution: {integrity: sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + '@babel/generator@7.24.10': + resolution: {integrity: sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.24.7': resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.7': - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + '@babel/helper-compilation-targets@7.24.8': + resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.24.7': - resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==} + '@babel/helper-create-class-features-plugin@7.24.8': + resolution: {integrity: sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -263,8 +263,8 @@ packages: resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.24.7': - resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==} + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.22.15': @@ -275,8 +275,8 @@ packages: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.24.7': - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + '@babel/helper-module-transforms@7.24.9': + resolution: {integrity: sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -285,8 +285,8 @@ packages: resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.7': - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} '@babel/helper-replace-supers@7.24.7': @@ -307,28 +307,28 @@ packages: resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.7': - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + '@babel/helpers@7.24.8': + resolution: {integrity: sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==} engines: {node: '>=6.9.0'} '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + '@babel/parser@7.24.8': + resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} engines: {node: '>=6.0.0'} hasBin: true @@ -344,34 +344,34 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.24.7': - resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==} + '@babel/plugin-transform-typescript@7.24.8': + resolution: {integrity: sha512-CgFgtN61BbdOGCP4fLaAMOPkzWUh6yQZNMr5YSt8uz2cZSSiQONCQFWqsE4NeVfOIhqDOlS9CR3WD91FzMeB2Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.24.7': - resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} + '@babel/runtime@7.24.8': + resolution: {integrity: sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==} engines: {node: '>=6.9.0'} '@babel/template@7.24.7': resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + '@babel/traverse@7.24.8': + resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + '@babel/types@7.24.9': + resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} engines: {node: '>=6.9.0'} '@ctrl/tinycolor@3.6.1': resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} engines: {node: '>=10'} - '@emotion/hash@0.9.1': - resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} '@emotion/unitless@0.8.1': resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} @@ -524,8 +524,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.1': - resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/eslintrc@2.1.4': @@ -568,8 +568,8 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -599,83 +599,83 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.18.0': - resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + '@rollup/rollup-android-arm-eabi@4.18.1': + resolution: {integrity: sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.18.0': - resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + '@rollup/rollup-android-arm64@4.18.1': + resolution: {integrity: sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.18.0': - resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + '@rollup/rollup-darwin-arm64@4.18.1': + resolution: {integrity: sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.18.0': - resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + '@rollup/rollup-darwin-x64@4.18.1': + resolution: {integrity: sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': - resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + '@rollup/rollup-linux-arm-gnueabihf@4.18.1': + resolution: {integrity: sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.18.0': - resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + '@rollup/rollup-linux-arm-musleabihf@4.18.1': + resolution: {integrity: sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.18.0': - resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + '@rollup/rollup-linux-arm64-gnu@4.18.1': + resolution: {integrity: sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.18.0': - resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + '@rollup/rollup-linux-arm64-musl@4.18.1': + resolution: {integrity: sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': - resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': + resolution: {integrity: sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.18.0': - resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + '@rollup/rollup-linux-riscv64-gnu@4.18.1': + resolution: {integrity: sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.18.0': - resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + '@rollup/rollup-linux-s390x-gnu@4.18.1': + resolution: {integrity: sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.18.0': - resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + '@rollup/rollup-linux-x64-gnu@4.18.1': + resolution: {integrity: sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.18.0': - resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + '@rollup/rollup-linux-x64-musl@4.18.1': + resolution: {integrity: sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.18.0': - resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + '@rollup/rollup-win32-arm64-msvc@4.18.1': + resolution: {integrity: sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.18.0': - resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + '@rollup/rollup-win32-ia32-msvc@4.18.1': + resolution: {integrity: sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.18.0': - resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + '@rollup/rollup-win32-x64-msvc@4.18.1': + resolution: {integrity: sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==} cpu: [x64] os: [win32] @@ -707,8 +707,8 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/lodash@4.17.5': - resolution: {integrity: sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==} + '@types/lodash@4.17.7': + resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -716,8 +716,8 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/node@20.14.2': - resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} + '@types/node@20.14.11': + resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -876,17 +876,17 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@vue/compiler-core@3.4.29': - resolution: {integrity: sha512-TFKiRkKKsRCKvg/jTSSKK7mYLJEQdUiUfykbG49rubC9SfDyvT2JrzTReopWlz2MxqeLyxh9UZhvxEIBgAhtrg==} + '@vue/compiler-core@3.4.33': + resolution: {integrity: sha512-MoIREbkdPQlnGfSKDMgzTqzqx5nmEjIc0ydLVYlTACGBsfvOJ4tHSbZXKVF536n6fB+0eZaGEOqsGThPpdvF5A==} - '@vue/compiler-dom@3.4.29': - resolution: {integrity: sha512-A6+iZ2fKIEGnfPJejdB7b1FlJzgiD+Y/sxxKwJWg1EbJu6ZPgzaPQQ51ESGNv0CP6jm6Z7/pO6Ia8Ze6IKrX7w==} + '@vue/compiler-dom@3.4.33': + resolution: {integrity: sha512-GzB8fxEHKw0gGet5BKlpfXEqoBnzSVWwMnT+dc25wE7pFEfrU/QsvjZMP9rD4iVXHBBoemTct8mN0GJEI6ZX5A==} - '@vue/compiler-sfc@3.4.29': - resolution: {integrity: sha512-zygDcEtn8ZimDlrEQyLUovoWgKQic6aEQqRXce2WXBvSeHbEbcAsXyCk9oG33ZkyWH4sl9D3tkYc1idoOkdqZQ==} + '@vue/compiler-sfc@3.4.33': + resolution: {integrity: sha512-7rk7Vbkn21xMwIUpHQR4hCVejwE6nvhBOiDgoBcR03qvGqRKA7dCBSsHZhwhYUsmjlbJ7OtD5UFIyhP6BY+c8A==} - '@vue/compiler-ssr@3.4.29': - resolution: {integrity: sha512-rFbwCmxJ16tDp3N8XCx5xSQzjhidYjXllvEcqX/lopkoznlNPz3jyy0WGJCyhAaVQK677WWFt3YO/WUEkMMUFQ==} + '@vue/compiler-ssr@3.4.33': + resolution: {integrity: sha512-0WveC9Ai+eT/1b6LCV5IfsufBZ0HP7pSSTdDjcuW302tTEgoBw8rHVHKPbGUtzGReUFCRXbv6zQDDgucnV2WzQ==} '@vue/devtools-api@6.6.3': resolution: {integrity: sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==} @@ -899,22 +899,22 @@ packages: typescript: optional: true - '@vue/reactivity@3.4.29': - resolution: {integrity: sha512-w8+KV+mb1a8ornnGQitnMdLfE0kXmteaxLdccm2XwdFxXst4q/Z7SEboCV5SqJNpZbKFeaRBBJBhW24aJyGINg==} + '@vue/reactivity@3.4.33': + resolution: {integrity: sha512-B24QIelahDbyHipBgbUItQblbd4w5HpG3KccL+YkGyo3maXyS253FzcTR3pSz739OTphmzlxP7JxEMWBpewilA==} - '@vue/runtime-core@3.4.29': - resolution: {integrity: sha512-s8fmX3YVR/Rk5ig0ic0NuzTNjK2M7iLuVSZyMmCzN/+Mjuqqif1JasCtEtmtoJWF32pAtUjyuT2ljNKNLeOmnQ==} + '@vue/runtime-core@3.4.33': + resolution: {integrity: sha512-6wavthExzT4iAxpe8q37/rDmf44nyOJGISJPxCi9YsQO+8w9v0gLCFLfH5TzD1V1AYrTAdiF4Y1cgUmP68jP6w==} - '@vue/runtime-dom@3.4.29': - resolution: {integrity: sha512-gI10atCrtOLf/2MPPMM+dpz3NGulo9ZZR9d1dWo4fYvm+xkfvRrw1ZmJ7mkWtiJVXSsdmPbcK1p5dZzOCKDN0g==} + '@vue/runtime-dom@3.4.33': + resolution: {integrity: sha512-iHsMCUSFJ+4z432Bn9kZzHX+zOXa6+iw36DaVRmKYZpPt9jW9riF32SxNwB124i61kp9+AZtheQ/mKoJLerAaQ==} - '@vue/server-renderer@3.4.29': - resolution: {integrity: sha512-HMLCmPI2j/k8PVkSBysrA2RxcxC5DgBiCdj7n7H2QtR8bQQPqKAe8qoaxLcInzouBmzwJ+J0x20ygN/B5mYBng==} + '@vue/server-renderer@3.4.33': + resolution: {integrity: sha512-jTH0d6gQcaYideFP/k0WdEu8PpRS9MF8d0b6SfZzNi+ap972pZ0TNIeTaESwdOtdY0XPVj54XEJ6K0wXxir4fw==} peerDependencies: - vue: 3.4.29 + vue: 3.4.33 - '@vue/shared@3.4.29': - resolution: {integrity: sha512-hQ2gAQcBO/CDpC82DCrinJNgOHI2v+FA7BDW4lMSPeBpQ7sRe2OLHWe5cph1s7D8DUQAwRt18dBDfJJ220APEA==} + '@vue/shared@3.4.33': + resolution: {integrity: sha512-aoRY0jQk3A/cuvdkodTrM4NMfxco8n55eG4H7ML/CRy7OryHfiqvug4xrCBBMbbN+dvXAetDDwZW9DXWWjBntA==} '@vue/tsconfig@0.5.1': resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==} @@ -944,16 +944,16 @@ packages: '@yr/monotone-cubic-spline@1.0.3': resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} - ace-builds@1.35.0: - resolution: {integrity: sha512-bwDKqjqNccC/MSujqnYTeAS5dIR8UmGLP0R90mvsJY0FRC8NUWBSTfj34+EIzo2NWc/gV8IZTqv4fXaiZJpCtA==} + ace-builds@1.35.3: + resolution: {integrity: sha512-4cHLy+4L3FHOTis4IrDYsHZYhyYrIqtmA4HRiRXcxLTpmjQMbJ6Vutoc3c2uC9xS11g/rDwqcw+3zXHPSHD/qw==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.12.0: - resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true @@ -993,8 +993,8 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - apexcharts@3.49.1: - resolution: {integrity: sha512-MqGtlq/KQuO8j0BBsUJYlRG8VBctKwYdwuBtajHgHTmSgUU3Oai+8oYN/rKCXwXzrUlYA+GiMgotAIbXY2BCGw==} + apexcharts@3.50.0: + resolution: {integrity: sha512-LJT1PNAm+NoIU3aogL2P+ViC0y/Cjik54FdzzGV54UNnGQLBoLe5ok3fxsJDTgyez45BGYT8gqNpYKqhdfy5sg==} are-docs-informative@0.0.2: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} @@ -1089,8 +1089,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + browserslist@4.23.2: + resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1117,8 +1117,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001634: - resolution: {integrity: sha512-fbBYXQ9q3+yp1q1gBk86tOFs4pyn/yxFm5ZNP18OXJDfA3txImOY9PhfxVggZ4vRHDqoU8NrKU81eN0OtzOgRA==} + caniuse-lite@1.0.30001642: + resolution: {integrity: sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -1258,8 +1258,8 @@ packages: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} - dayjs@1.11.11: - resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} + dayjs@1.11.12: + resolution: {integrity: sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==} de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} @@ -1336,8 +1336,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.4.803: - resolution: {integrity: sha512-61H9mLzGOCLLVsnLiRzCbc63uldP0AniRYPV3hbGVtONA1pI7qSGILdbofR7A8TMbOypDocEAjH/e+9k1QIe3g==} + electron-to-chromium@1.4.831: + resolution: {integrity: sha512-6cKy9msoQGWhBF30n6y5ck80BdunKdwMRugM1lr74DMMXhjDRxSwMvrD1ncPP+n1PjF+KKmZZydvEF29skNZ1Q==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1458,8 +1458,8 @@ packages: eslint-plugin-antfu@0.43.1: resolution: {integrity: sha512-Nak+Qpy5qEK10dCXtVaabPTUmLBPLhsVKAFXAtxYGYRlY/SuuZUBhW2YIsLsixNROiICGuov8sN+eNOCC7Wb5g==} - eslint-plugin-es-x@7.7.0: - resolution: {integrity: sha512-aP3qj8BwiEDPttxQkZdI221DLKq9sI/qHolE2YSQL1/9+xk7dTV+tB1Fz8/IaCA+lnLA1bDEnvaS2LKs0k2Uig==} + eslint-plugin-es-x@7.8.0: + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' @@ -1530,8 +1530,8 @@ packages: resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} engines: {node: '>=5.0.0'} - eslint-plugin-promise@6.2.0: - resolution: {integrity: sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==} + eslint-plugin-promise@6.5.0: + resolution: {integrity: sha512-Sa4irPRhXB0mNjv88rWidu0WUhRLUMLAY3wj5MZyCKH/aMZKCRa3PzfIUaaLe4/U3RjAfRJvNP2rPvZ09lsmTg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -1564,8 +1564,8 @@ packages: '@typescript-eslint/eslint-plugin': optional: true - eslint-plugin-vue@9.26.0: - resolution: {integrity: sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ==} + eslint-plugin-vue@9.27.0: + resolution: {integrity: sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -1601,8 +1601,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -1723,8 +1723,8 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + get-tsconfig@4.7.6: + resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} gettext-extractor@3.8.0: resolution: {integrity: sha512-i/3mDQufQoJd2/EKm/B+VlaYrt3yGjVfLZu8DQpESKH29klNiW6z2S89FVCIEB85bDNgtGCeM/3A/yR1njr/Lw==} @@ -1741,9 +1741,8 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.4.1: - resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} - engines: {node: '>=16 || 14 >=14.18'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true glob@7.2.3: @@ -1809,8 +1808,8 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - highlight.js@11.9.0: - resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} + highlight.js@11.10.0: + resolution: {integrity: sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==} engines: {node: '>=12.0.0'} hosted-git-info@2.8.9: @@ -1891,8 +1890,9 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + engines: {node: '>= 0.4'} is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} @@ -1972,9 +1972,8 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jackspeak@3.4.0: - resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} - engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} jiti@1.21.6: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} @@ -2088,15 +2087,14 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} - engines: {node: 14 || >=16.14} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - magic-string-ast@0.6.1: - resolution: {integrity: sha512-eczKQUDaBpB/mcEqZZNGEUG1FQNsXCuk3uOrCpu6y7qTygIy6jnpqDa62j9MGKSoqlXhM1lCFQv1THuGDQtvUA==} + magic-string-ast@0.6.2: + resolution: {integrity: sha512-oN3Bcd7ZVt+0VGEs7402qR/tjgjbM7kPlH/z7ufJnzTLVBzXJITRHOJiwMmmYMgZfdoWQsfQcY+iKlxiBppnMA==} engines: {node: '>=16.14.0'} magic-string@0.30.10: @@ -2158,8 +2156,8 @@ packages: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -2200,8 +2198,8 @@ packages: engines: {node: '>= 4.4.x'} hasBin: true - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.17: + resolution: {integrity: sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==} normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -2228,8 +2226,9 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -2278,6 +2277,9 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -2364,8 +2366,8 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - pkg-types@1.1.1: - resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==} + pkg-types@1.1.3: + resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} @@ -2405,21 +2407,21 @@ packages: ts-node: optional: true - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 - postcss-selector-parser@6.1.0: - resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} + postcss-selector-parser@6.1.1: + resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} engines: {node: '>=4'} postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + postcss@8.4.39: + resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2495,13 +2497,13 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@5.0.7: - resolution: {integrity: sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==} - engines: {node: '>=14.18'} + rimraf@5.0.9: + resolution: {integrity: sha512-3i7b8OcswU6CpU8Ej89quJD4O98id7TtVM5U4Mybh84zQXdrFmDLouWBEEaD/QfO3gDDfH+AGFCGsR7kngzQnA==} + engines: {node: 14 >=14.20 || 16 >=16.20 || >=18} hasBin: true - rollup@4.18.0: - resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + rollup@4.18.1: + resolution: {integrity: sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2536,8 +2538,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -2706,8 +2708,8 @@ packages: resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} engines: {node: '>=12.20'} - tailwindcss@3.4.4: - resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} + tailwindcss@3.4.6: + resolution: {integrity: sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==} engines: {node: '>=14.0.0'} hasBin: true @@ -2725,8 +2727,8 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - throttle-debounce@5.0.0: - resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==} + throttle-debounce@5.0.2: + resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} engines: {node: '>=12.22'} to-fast-properties@2.0.0: @@ -2798,8 +2800,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + typescript@5.5.3: + resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} engines: {node: '>=14.17'} hasBin: true @@ -2807,8 +2809,8 @@ packages: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} engines: {node: '>=8'} - ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -2816,14 +2818,14 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - unimport@3.7.2: - resolution: {integrity: sha512-91mxcZTadgXyj3lFWmrGT8GyoRHWuE5fqPOjg5RVtF6vj+OfM5G6WCzXjuYtSgELE5ggB34RY4oiCSEP8I3AHw==} + unimport@3.9.0: + resolution: {integrity: sha512-H2ftTISja1BonUVdOKRos6HC6dqYDR40dQTZY3zIDJ/5/z4ihncuL0LqLvtxYqUDMib41eAtunQUhXIWTCZ8rA==} unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} - unplugin-auto-import@0.17.6: - resolution: {integrity: sha512-dmX0Pex5DzMzVuALkexboOZvh51fL/BD6aoPO7qHoTYGlQp0GRKsREv2KMF1lzYI9SXKQiRxAjwzbQnrFFNydQ==} + unplugin-auto-import@0.17.8: + resolution: {integrity: sha512-CHryj6HzJ+n4ASjzwHruD8arhbdl+UXvhuAIlHDs15Y/IMecG3wrf7FVg4pVH/DIysbq/n0phIjNHAjl7TG7Iw==} engines: {node: '>=14'} peerDependencies: '@nuxt/kit': ^3.2.2 @@ -2851,12 +2853,12 @@ packages: resolution: {integrity: sha512-7c5HvC6OgE4H7uWGJnHUQ0ShdIYSH/qZuIBflDi3zfOTYSFZQ6FElQ6f+uA9gSdZiNFjF095JJ/aRwbrTrB98g==} engines: {node: '>=16.14.0'} - unplugin@1.10.1: - resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} + unplugin@1.11.0: + resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} engines: {node: '>=14.0.0'} - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -2878,8 +2880,8 @@ packages: peerDependencies: vue: '>=3.2.13' - vite@5.3.1: - resolution: {integrity: sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==} + vite@5.3.4: + resolution: {integrity: sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2927,8 +2929,8 @@ packages: resolution: {tarball: https://codeload.github.com/0xJacky/vue-github-button/tar.gz/fc3c93355a790d3249de6610de3ebe35949ee314} version: 3.1.0 - vue-router@4.3.3: - resolution: {integrity: sha512-8Q+u+WP4N2SXY38FDcF2H1dUEbYVHVPtPCPZj/GTZx8RCbiB8AtJP9+YIxn4Vs0svMTNQcLIzka4GH7Utkx9xQ==} + vue-router@4.4.0: + resolution: {integrity: sha512-HB+t2p611aIZraV2aPSRNXf0Z/oLZFrlygJm+sZbdJaW6lcFqEDQwnzUBXn+DApw+/QzDU/I9TeWx9izEjTmsA==} peerDependencies: vue: ^3.2.0 @@ -2967,8 +2969,8 @@ packages: '@vue/compiler-sfc': '>=3.0.0' vue: '>=3.0.0' - vue@3.4.29: - resolution: {integrity: sha512-8QUYfRcYzNlYuzKPfge1UWC6nF9ym0lx7mpGVPJYNhddxEf3DD0+kU07NTL0sXuiT2HuJuKr/iEO8WvXvT0RSQ==} + vue@3.4.33: + resolution: {integrity: sha512-VdMCWQOummbhctl4QFMcW6eNtXHsFyDlX60O/tsSQuCcuDOnJ1qPOhhVla65Niece7xq/P2zyZReIO5mP+LGTQ==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -3052,11 +3054,11 @@ snapshots: '@ant-design/icons-svg@4.4.2': {} - '@ant-design/icons-vue@7.0.1(vue@3.4.29(typescript@5.3.3))': + '@ant-design/icons-vue@7.0.1(vue@3.4.33(typescript@5.3.3))': dependencies: '@ant-design/colors': 6.0.0 '@ant-design/icons-svg': 4.4.2 - vue: 3.4.29(typescript@5.3.3) + vue: 3.4.33(typescript@5.3.3) '@antfu/eslint-config-basic@0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.3.3)': dependencies: @@ -3071,7 +3073,7 @@ snapshots: eslint-plugin-markdown: 3.0.1(eslint@8.57.0) eslint-plugin-n: 16.6.2(eslint@8.57.0) eslint-plugin-no-only-tests: 3.1.0 - eslint-plugin-promise: 6.2.0(eslint@8.57.0) + eslint-plugin-promise: 6.5.0(eslint@8.57.0) eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0) eslint-plugin-yml: 1.14.0(eslint@8.57.0) @@ -3105,7 +3107,7 @@ snapshots: '@antfu/eslint-config-basic': 0.43.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.3.3) '@antfu/eslint-config-ts': 0.43.1(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)(typescript@5.3.3) eslint: 8.57.0 - eslint-plugin-vue: 9.26.0(eslint@8.57.0) + eslint-plugin-vue: 9.27.0(eslint@8.57.0) local-pkg: 0.4.3 transitivePeerDependencies: - '@typescript-eslint/eslint-plugin' @@ -3116,27 +3118,27 @@ snapshots: - supports-color - typescript - '@antfu/utils@0.7.8': {} + '@antfu/utils@0.7.10': {} '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/compat-data@7.24.7': {} + '@babel/compat-data@7.24.9': {} - '@babel/core@7.24.7': + '@babel/core@7.24.9': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 + '@babel/generator': 7.24.10 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) + '@babel/helpers': 7.24.8 + '@babel/parser': 7.24.8 '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 convert-source-map: 2.0.0 debug: 4.3.5 gensync: 1.0.0-beta.2 @@ -3145,34 +3147,34 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.24.7': + '@babel/generator@7.24.10': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.9 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.9 - '@babel/helper-compilation-targets@7.24.7': + '@babel/helper-compilation-targets@7.24.8': dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.1 + '@babel/compat-data': 7.24.9 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.24.7)': + '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.24.9 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 semver: 6.3.1 @@ -3181,38 +3183,38 @@ snapshots: '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.9 '@babel/helper-function-name@7.24.7': dependencies: '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.24.9 '@babel/helper-hoist-variables@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.9 - '@babel/helper-member-expression-to-functions@7.24.7': + '@babel/helper-member-expression-to-functions@7.24.8': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.22.15': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.9 '@babel/helper-module-imports@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': + '@babel/helper-module-transforms@7.24.9(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.24.9 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 @@ -3223,47 +3225,47 @@ snapshots: '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.9 - '@babel/helper-plugin-utils@7.24.7': {} + '@babel/helper-plugin-utils@7.24.8': {} - '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7)': + '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.24.9 '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 transitivePeerDependencies: - supports-color '@babel/helper-simple-access@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.9 - '@babel/helper-string-parser@7.24.7': {} + '@babel/helper-string-parser@7.24.8': {} '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-option@7.24.7': {} + '@babel/helper-validator-option@7.24.8': {} - '@babel/helpers@7.24.7': + '@babel/helpers@7.24.8': dependencies: '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.24.9 '@babel/highlight@7.24.7': dependencies: @@ -3272,71 +3274,71 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 - '@babel/parser@7.24.7': + '@babel/parser@7.24.8': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.24.9 - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-typescript@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-typescript@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.24.9 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.9) transitivePeerDependencies: - supports-color - '@babel/runtime@7.24.7': + '@babel/runtime@7.24.8': dependencies: regenerator-runtime: 0.14.1 '@babel/template@7.24.7': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.9 - '@babel/traverse@7.24.7': + '@babel/traverse@7.24.8': dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 + '@babel/generator': 7.24.10 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-function-name': 7.24.7 '@babel/helper-hoist-variables': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.9 debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.7': + '@babel/types@7.24.9': dependencies: - '@babel/helper-string-parser': 7.24.7 + '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 '@ctrl/tinycolor@3.6.1': {} - '@emotion/hash@0.9.1': {} + '@emotion/hash@0.9.2': {} '@emotion/unitless@0.8.1': {} '@es-joy/jsdoccomment@0.41.0': dependencies: comment-parser: 1.4.1 - esquery: 1.5.0 + esquery: 1.6.0 jsdoc-type-pratt-parser: 4.0.0 '@esbuild/aix-ppc64@0.21.5': @@ -3413,7 +3415,7 @@ snapshots: eslint: 8.57.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.1': {} + '@eslint-community/regexpp@4.11.0': {} '@eslint/eslintrc@2.1.4': dependencies: @@ -3457,19 +3459,19 @@ snapshots: '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@nodelib/fs.scandir@2.1.5': dependencies: @@ -3486,60 +3488,60 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@rollup/pluginutils@5.1.0(rollup@4.18.0)': + '@rollup/pluginutils@5.1.0(rollup@4.18.1)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.18.0 + rollup: 4.18.1 - '@rollup/rollup-android-arm-eabi@4.18.0': + '@rollup/rollup-android-arm-eabi@4.18.1': optional: true - '@rollup/rollup-android-arm64@4.18.0': + '@rollup/rollup-android-arm64@4.18.1': optional: true - '@rollup/rollup-darwin-arm64@4.18.0': + '@rollup/rollup-darwin-arm64@4.18.1': optional: true - '@rollup/rollup-darwin-x64@4.18.0': + '@rollup/rollup-darwin-x64@4.18.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + '@rollup/rollup-linux-arm-gnueabihf@4.18.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.18.0': + '@rollup/rollup-linux-arm-musleabihf@4.18.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.18.0': + '@rollup/rollup-linux-arm64-gnu@4.18.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.18.0': + '@rollup/rollup-linux-arm64-musl@4.18.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.18.0': + '@rollup/rollup-linux-riscv64-gnu@4.18.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.18.0': + '@rollup/rollup-linux-s390x-gnu@4.18.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.18.0': + '@rollup/rollup-linux-x64-gnu@4.18.1': optional: true - '@rollup/rollup-linux-x64-musl@4.18.0': + '@rollup/rollup-linux-x64-musl@4.18.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.18.0': + '@rollup/rollup-win32-arm64-msvc@4.18.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.18.0': + '@rollup/rollup-win32-ia32-msvc@4.18.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.18.0': + '@rollup/rollup-win32-x64-msvc@4.18.1': optional: true '@simonwep/pickr@1.8.2': @@ -3549,7 +3551,7 @@ snapshots: '@stylistic/eslint-plugin-js@0.0.4': dependencies: - acorn: 8.12.0 + acorn: 8.12.1 escape-string-regexp: 4.0.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -3575,13 +3577,13 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.14.2 + '@types/node': 20.14.11 '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} - '@types/lodash@4.17.5': {} + '@types/lodash@4.17.7': {} '@types/mdast@3.0.15': dependencies: @@ -3589,7 +3591,7 @@ snapshots: '@types/minimatch@5.1.2': {} - '@types/node@20.14.2': + '@types/node@20.14.11': dependencies: undici-types: 5.26.5 @@ -3609,7 +3611,7 @@ snapshots: '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)': dependencies: - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.3.3) '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3) @@ -3620,7 +3622,7 @@ snapshots: graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.2 + semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.3.3) optionalDependencies: typescript: 5.3.3 @@ -3673,7 +3675,7 @@ snapshots: debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.2 + semver: 7.6.3 tsutils: 3.21.0(typescript@5.3.3) optionalDependencies: typescript: 5.3.3 @@ -3688,7 +3690,7 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.2 + semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.3.3) optionalDependencies: typescript: 5.3.3 @@ -3705,7 +3707,7 @@ snapshots: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) eslint: 8.57.0 eslint-scope: 5.1.1 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -3719,7 +3721,7 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) eslint: 8.57.0 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -3736,20 +3738,20 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-vue-jsx@3.1.0(vite@5.3.1(@types/node@20.14.2)(less@4.2.0))(vue@3.4.29(typescript@5.3.3))': + '@vitejs/plugin-vue-jsx@3.1.0(vite@5.3.4(@types/node@20.14.11)(less@4.2.0))(vue@3.4.33(typescript@5.3.3))': dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) - '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.7) - vite: 5.3.1(@types/node@20.14.2)(less@4.2.0) - vue: 3.4.29(typescript@5.3.3) + '@babel/core': 7.24.9 + '@babel/plugin-transform-typescript': 7.24.8(@babel/core@7.24.9) + '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.9) + vite: 5.3.4(@types/node@20.14.11)(less@4.2.0) + vue: 3.4.33(typescript@5.3.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.0.5(vite@5.3.1(@types/node@20.14.2)(less@4.2.0))(vue@3.4.29(typescript@5.3.3))': + '@vitejs/plugin-vue@5.0.5(vite@5.3.4(@types/node@20.14.11)(less@4.2.0))(vue@3.4.33(typescript@5.3.3))': dependencies: - vite: 5.3.1(@types/node@20.14.2)(less@4.2.0) - vue: 3.4.29(typescript@5.3.3) + vite: 5.3.4(@types/node@20.14.11)(less@4.2.0) + vue: 3.4.33(typescript@5.3.3) '@volar/language-core@1.11.1': dependencies: @@ -3764,77 +3766,77 @@ snapshots: '@volar/language-core': 1.11.1 path-browserify: 1.0.1 - '@vue-macros/common@1.10.4(rollup@4.18.0)(vue@3.4.29(typescript@5.3.3))': + '@vue-macros/common@1.10.4(rollup@4.18.1)(vue@3.4.33(typescript@5.3.3))': dependencies: - '@babel/types': 7.24.7 - '@rollup/pluginutils': 5.1.0(rollup@4.18.0) - '@vue/compiler-sfc': 3.4.29 + '@babel/types': 7.24.9 + '@rollup/pluginutils': 5.1.0(rollup@4.18.1) + '@vue/compiler-sfc': 3.4.33 ast-kit: 0.12.2 local-pkg: 0.5.0 - magic-string-ast: 0.6.1 + magic-string-ast: 0.6.2 optionalDependencies: - vue: 3.4.29(typescript@5.3.3) + vue: 3.4.33(typescript@5.3.3) transitivePeerDependencies: - rollup '@vue/babel-helper-vue-transform-on@1.2.2': {} - '@vue/babel-plugin-jsx@1.2.2(@babel/core@7.24.7)': + '@vue/babel-plugin-jsx@1.2.2(@babel/core@7.24.9)': dependencies: '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.9) '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 '@vue/babel-helper-vue-transform-on': 1.2.2 - '@vue/babel-plugin-resolve-type': 1.2.2(@babel/core@7.24.7) + '@vue/babel-plugin-resolve-type': 1.2.2(@babel/core@7.24.9) camelcase: 6.3.0 html-tags: 3.3.1 svg-tags: 1.0.0 optionalDependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.24.9 transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@1.2.2(@babel/core@7.24.7)': + '@vue/babel-plugin-resolve-type@1.2.2(@babel/core@7.24.9)': dependencies: '@babel/code-frame': 7.24.7 - '@babel/core': 7.24.7 + '@babel/core': 7.24.9 '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/parser': 7.24.7 - '@vue/compiler-sfc': 3.4.29 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/parser': 7.24.8 + '@vue/compiler-sfc': 3.4.33 - '@vue/compiler-core@3.4.29': + '@vue/compiler-core@3.4.33': dependencies: - '@babel/parser': 7.24.7 - '@vue/shared': 3.4.29 + '@babel/parser': 7.24.8 + '@vue/shared': 3.4.33 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.0 - '@vue/compiler-dom@3.4.29': + '@vue/compiler-dom@3.4.33': dependencies: - '@vue/compiler-core': 3.4.29 - '@vue/shared': 3.4.29 + '@vue/compiler-core': 3.4.33 + '@vue/shared': 3.4.33 - '@vue/compiler-sfc@3.4.29': + '@vue/compiler-sfc@3.4.33': dependencies: - '@babel/parser': 7.24.7 - '@vue/compiler-core': 3.4.29 - '@vue/compiler-dom': 3.4.29 - '@vue/compiler-ssr': 3.4.29 - '@vue/shared': 3.4.29 + '@babel/parser': 7.24.8 + '@vue/compiler-core': 3.4.33 + '@vue/compiler-dom': 3.4.33 + '@vue/compiler-ssr': 3.4.33 + '@vue/shared': 3.4.33 estree-walker: 2.0.2 magic-string: 0.30.10 - postcss: 8.4.38 + postcss: 8.4.39 source-map-js: 1.2.0 - '@vue/compiler-ssr@3.4.29': + '@vue/compiler-ssr@3.4.33': dependencies: - '@vue/compiler-dom': 3.4.29 - '@vue/shared': 3.4.29 + '@vue/compiler-dom': 3.4.33 + '@vue/shared': 3.4.33 '@vue/devtools-api@6.6.3': {} @@ -3842,57 +3844,57 @@ snapshots: dependencies: '@volar/language-core': 1.11.1 '@volar/source-map': 1.11.1 - '@vue/compiler-dom': 3.4.29 - '@vue/shared': 3.4.29 + '@vue/compiler-dom': 3.4.33 + '@vue/shared': 3.4.33 computeds: 0.0.1 - minimatch: 9.0.4 + minimatch: 9.0.5 muggle-string: 0.3.1 path-browserify: 1.0.1 vue-template-compiler: 2.7.16 optionalDependencies: typescript: 5.3.3 - '@vue/reactivity@3.4.29': + '@vue/reactivity@3.4.33': dependencies: - '@vue/shared': 3.4.29 + '@vue/shared': 3.4.33 - '@vue/runtime-core@3.4.29': + '@vue/runtime-core@3.4.33': dependencies: - '@vue/reactivity': 3.4.29 - '@vue/shared': 3.4.29 + '@vue/reactivity': 3.4.33 + '@vue/shared': 3.4.33 - '@vue/runtime-dom@3.4.29': + '@vue/runtime-dom@3.4.33': dependencies: - '@vue/reactivity': 3.4.29 - '@vue/runtime-core': 3.4.29 - '@vue/shared': 3.4.29 + '@vue/reactivity': 3.4.33 + '@vue/runtime-core': 3.4.33 + '@vue/shared': 3.4.33 csstype: 3.1.3 - '@vue/server-renderer@3.4.29(vue@3.4.29(typescript@5.3.3))': + '@vue/server-renderer@3.4.33(vue@3.4.33(typescript@5.3.3))': dependencies: - '@vue/compiler-ssr': 3.4.29 - '@vue/shared': 3.4.29 - vue: 3.4.29(typescript@5.3.3) + '@vue/compiler-ssr': 3.4.33 + '@vue/shared': 3.4.33 + vue: 3.4.33(typescript@5.3.3) - '@vue/shared@3.4.29': {} + '@vue/shared@3.4.33': {} '@vue/tsconfig@0.5.1': {} - '@vueuse/core@10.11.0(vue@3.4.29(typescript@5.3.3))': + '@vueuse/core@10.11.0(vue@3.4.33(typescript@5.3.3))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.0 - '@vueuse/shared': 10.11.0(vue@3.4.29(typescript@5.3.3)) - vue-demi: 0.14.8(vue@3.4.29(typescript@5.3.3)) + '@vueuse/shared': 10.11.0(vue@3.4.33(typescript@5.3.3)) + vue-demi: 0.14.8(vue@3.4.33(typescript@5.3.3)) transitivePeerDependencies: - '@vue/composition-api' - vue '@vueuse/metadata@10.11.0': {} - '@vueuse/shared@10.11.0(vue@3.4.29(typescript@5.3.3))': + '@vueuse/shared@10.11.0(vue@3.4.33(typescript@5.3.3))': dependencies: - vue-demi: 0.14.8(vue@3.4.29(typescript@5.3.3)) + vue-demi: 0.14.8(vue@3.4.33(typescript@5.3.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -3909,13 +3911,13 @@ snapshots: '@yr/monotone-cubic-spline@1.0.3': {} - ace-builds@1.35.0: {} + ace-builds@1.35.3: {} - acorn-jsx@5.3.2(acorn@8.12.0): + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: - acorn: 8.12.0 + acorn: 8.12.1 - acorn@8.12.0: {} + acorn@8.12.1: {} ajv@6.12.6: dependencies: @@ -3938,19 +3940,19 @@ snapshots: ansi-styles@6.2.1: {} - ant-design-vue@4.2.3(vue@3.4.29(typescript@5.3.3)): + ant-design-vue@4.2.3(vue@3.4.33(typescript@5.3.3)): dependencies: '@ant-design/colors': 6.0.0 - '@ant-design/icons-vue': 7.0.1(vue@3.4.29(typescript@5.3.3)) - '@babel/runtime': 7.24.7 + '@ant-design/icons-vue': 7.0.1(vue@3.4.33(typescript@5.3.3)) + '@babel/runtime': 7.24.8 '@ctrl/tinycolor': 3.6.1 - '@emotion/hash': 0.9.1 + '@emotion/hash': 0.9.2 '@emotion/unitless': 0.8.1 '@simonwep/pickr': 1.8.2 array-tree-filter: 2.1.0 async-validator: 4.2.5 csstype: 3.1.3 - dayjs: 1.11.11 + dayjs: 1.11.12 dom-align: 1.12.4 dom-scroll-into-view: 2.0.1 lodash: 4.17.21 @@ -3959,9 +3961,9 @@ snapshots: scroll-into-view-if-needed: 2.2.31 shallow-equal: 1.2.1 stylis: 4.3.2 - throttle-debounce: 5.0.0 - vue: 3.4.29(typescript@5.3.3) - vue-types: 3.0.2(vue@3.4.29(typescript@5.3.3)) + throttle-debounce: 5.0.2 + vue: 3.4.33(typescript@5.3.3) + vue-types: 3.0.2(vue@3.4.33(typescript@5.3.3)) warning: 4.0.3 any-promise@1.3.0: {} @@ -3971,7 +3973,7 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - apexcharts@3.49.1: + apexcharts@3.50.0: dependencies: '@yr/monotone-cubic-spline': 1.0.3 svg.draggable.js: 2.2.2 @@ -4043,26 +4045,26 @@ snapshots: ast-kit@0.12.2: dependencies: - '@babel/parser': 7.24.7 + '@babel/parser': 7.24.8 pathe: 1.1.2 ast-walker-scope@0.6.1: dependencies: - '@babel/parser': 7.24.7 + '@babel/parser': 7.24.8 ast-kit: 0.12.2 async-validator@4.2.5: {} asynckit@0.4.0: {} - autoprefixer@10.4.19(postcss@8.4.38): + autoprefixer@10.4.19(postcss@8.4.39): dependencies: - browserslist: 4.23.1 - caniuse-lite: 1.0.30001634 + browserslist: 4.23.2 + caniuse-lite: 1.0.30001642 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.4.38 + postcss: 8.4.39 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -4096,18 +4098,18 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.23.1: + browserslist@4.23.2: dependencies: - caniuse-lite: 1.0.30001634 - electron-to-chromium: 1.4.803 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) + caniuse-lite: 1.0.30001642 + electron-to-chromium: 1.4.831 + node-releases: 2.0.17 + update-browserslist-db: 1.1.0(browserslist@4.23.2) builtin-modules@3.3.0: {} builtins@5.1.0: dependencies: - semver: 7.6.2 + semver: 7.6.3 call-bind@1.0.7: dependencies: @@ -4123,7 +4125,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001634: {} + caniuse-lite@1.0.30001642: {} chalk@2.4.2: dependencies: @@ -4268,7 +4270,7 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.1 - dayjs@1.11.11: {} + dayjs@1.11.12: {} de-indent@1.0.2: {} @@ -4336,7 +4338,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.4.803: {} + electron-to-chromium@1.4.831: {} emoji-regex@8.0.0: {} @@ -4393,7 +4395,7 @@ snapshots: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 @@ -4472,7 +4474,7 @@ snapshots: eslint-compat-utils@0.5.1(eslint@8.57.0): dependencies: eslint: 8.57.0 - semver: 7.6.2 + semver: 7.6.3 eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)): dependencies: @@ -4481,7 +4483,7 @@ snapshots: eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.13.1 + is-core-module: 2.15.0 resolve: 1.22.8 transitivePeerDependencies: - supports-color @@ -4494,8 +4496,8 @@ snapshots: eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.5 - is-core-module: 2.13.1 + get-tsconfig: 4.7.6 + is-core-module: 2.15.0 is-glob: 4.0.3 transitivePeerDependencies: - '@typescript-eslint/parser' @@ -4522,10 +4524,10 @@ snapshots: - supports-color - typescript - eslint-plugin-es-x@7.7.0(eslint@8.57.0): + eslint-plugin-es-x@7.8.0(eslint@8.57.0): dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 eslint: 8.57.0 eslint-compat-utils: 0.5.1(eslint@8.57.0) @@ -4546,11 +4548,11 @@ snapshots: eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - get-tsconfig: 4.7.5 + get-tsconfig: 4.7.6 is-glob: 4.0.3 minimatch: 3.1.2 resolve: 1.22.8 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-typescript @@ -4569,7 +4571,7 @@ snapshots: eslint-import-resolver-node: 0.3.9 eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 - is-core-module: 2.13.1 + is-core-module: 2.15.0 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 @@ -4602,9 +4604,9 @@ snapshots: debug: 4.3.5 escape-string-regexp: 4.0.0 eslint: 8.57.0 - esquery: 1.5.0 + esquery: 1.6.0 is-builtin-module: 3.2.1 - semver: 7.6.2 + semver: 7.6.3 spdx-expression-parse: 4.0.0 transitivePeerDependencies: - supports-color @@ -4632,19 +4634,19 @@ snapshots: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) builtins: 5.1.0 eslint: 8.57.0 - eslint-plugin-es-x: 7.7.0(eslint@8.57.0) - get-tsconfig: 4.7.5 + eslint-plugin-es-x: 7.8.0(eslint@8.57.0) + get-tsconfig: 4.7.6 globals: 13.24.0 ignore: 5.3.1 is-builtin-module: 3.2.1 - is-core-module: 2.13.1 + is-core-module: 2.15.0 minimatch: 3.1.2 resolve: 1.22.8 - semver: 7.6.2 + semver: 7.6.3 eslint-plugin-no-only-tests@3.1.0: {} - eslint-plugin-promise@6.2.0(eslint@8.57.0): + eslint-plugin-promise@6.5.0(eslint@8.57.0): dependencies: eslint: 8.57.0 @@ -4663,7 +4665,7 @@ snapshots: ci-info: 3.9.0 clean-regexp: 1.0.0 eslint: 8.57.0 - esquery: 1.5.0 + esquery: 1.6.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 jsesc: 3.0.2 @@ -4672,7 +4674,7 @@ snapshots: read-pkg-up: 7.0.1 regexp-tree: 0.1.27 regjsparser: 0.10.0 - semver: 7.6.2 + semver: 7.6.3 strip-indent: 3.0.0 eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0): @@ -4682,15 +4684,15 @@ snapshots: optionalDependencies: '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3) - eslint-plugin-vue@9.26.0(eslint@8.57.0): + eslint-plugin-vue@9.27.0(eslint@8.57.0): dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) eslint: 8.57.0 globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 - postcss-selector-parser: 6.1.0 - semver: 7.6.2 + postcss-selector-parser: 6.1.1 + semver: 7.6.3 vue-eslint-parser: 9.4.3(eslint@8.57.0) xml-name-validator: 4.0.0 transitivePeerDependencies: @@ -4724,7 +4726,7 @@ snapshots: eslint@8.57.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -4740,7 +4742,7 @@ snapshots: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -4766,11 +4768,11 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -4889,7 +4891,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.5: + get-tsconfig@4.7.6: dependencies: resolve-pkg-maps: 1.0.0 @@ -4913,12 +4915,13 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.1: + glob@10.4.5: dependencies: foreground-child: 3.2.1 - jackspeak: 3.4.0 - minimatch: 9.0.4 + jackspeak: 3.4.3 + minimatch: 9.0.5 minipass: 7.1.2 + package-json-from-dist: 1.0.0 path-scurry: 1.11.1 glob@7.2.3: @@ -4982,7 +4985,7 @@ snapshots: he@1.2.0: {} - highlight.js@11.9.0: {} + highlight.js@11.10.0: {} hosted-git-info@2.8.9: {} @@ -5060,7 +5063,7 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.13.1: + is-core-module@2.15.0: dependencies: hasown: 2.0.2 @@ -5127,7 +5130,7 @@ snapshots: isexe@2.0.0: {} - jackspeak@3.4.0: + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -5167,10 +5170,10 @@ snapshots: jsonc-eslint-parser@2.4.0: dependencies: - acorn: 8.12.0 + acorn: 8.12.1 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - semver: 7.6.2 + semver: 7.6.3 keyv@4.5.4: dependencies: @@ -5206,7 +5209,7 @@ snapshots: local-pkg@0.5.0: dependencies: mlly: 1.7.1 - pkg-types: 1.1.1 + pkg-types: 1.1.3 locate-path@5.0.0: dependencies: @@ -5228,19 +5231,19 @@ snapshots: dependencies: js-tokens: 4.0.0 - lru-cache@10.2.2: {} + lru-cache@10.4.3: {} lru-cache@5.1.1: dependencies: yallist: 3.1.1 - magic-string-ast@0.6.1: + magic-string-ast@0.6.2: dependencies: magic-string: 0.30.10 magic-string@0.30.10: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 make-dir@2.1.0: dependencies: @@ -5299,7 +5302,7 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.4: + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -5309,10 +5312,10 @@ snapshots: mlly@1.7.1: dependencies: - acorn: 8.12.0 + acorn: 8.12.1 pathe: 1.1.2 - pkg-types: 1.1.1 - ufo: 1.5.3 + pkg-types: 1.1.3 + ufo: 1.5.4 ms@2.1.2: {} @@ -5338,7 +5341,7 @@ snapshots: sax: 1.4.1 optional: true - node-releases@2.0.14: {} + node-releases@2.0.17: {} normalize-package-data@2.5.0: dependencies: @@ -5361,7 +5364,7 @@ snapshots: object-hash@3.0.0: {} - object-inspect@1.13.1: {} + object-inspect@1.13.2: {} object-keys@1.1.1: {} @@ -5422,6 +5425,8 @@ snapshots: p-try@2.2.0: {} + package-json-from-dist@1.0.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -5462,7 +5467,7 @@ snapshots: path-scurry@1.11.1: dependencies: - lru-cache: 10.2.2 + lru-cache: 10.4.3 minipass: 7.1.2 path-type@4.0.0: {} @@ -5478,21 +5483,21 @@ snapshots: pify@4.0.1: optional: true - pinia-plugin-persistedstate@3.2.1(pinia@2.1.7(typescript@5.3.3)(vue@3.4.29(typescript@5.3.3))): + pinia-plugin-persistedstate@3.2.1(pinia@2.1.7(typescript@5.3.3)(vue@3.4.33(typescript@5.3.3))): dependencies: - pinia: 2.1.7(typescript@5.3.3)(vue@3.4.29(typescript@5.3.3)) + pinia: 2.1.7(typescript@5.3.3)(vue@3.4.33(typescript@5.3.3)) - pinia@2.1.7(typescript@5.3.3)(vue@3.4.29(typescript@5.3.3)): + pinia@2.1.7(typescript@5.3.3)(vue@3.4.33(typescript@5.3.3)): dependencies: '@vue/devtools-api': 6.6.3 - vue: 3.4.29(typescript@5.3.3) - vue-demi: 0.14.8(vue@3.4.29(typescript@5.3.3)) + vue: 3.4.33(typescript@5.3.3) + vue-demi: 0.14.8(vue@3.4.33(typescript@5.3.3)) optionalDependencies: typescript: 5.3.3 pirates@4.0.6: {} - pkg-types@1.1.1: + pkg-types@1.1.3: dependencies: confbox: 0.1.7 mlly: 1.7.1 @@ -5506,38 +5511,38 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.4.38): + postcss-import@15.1.0(postcss@8.4.39): dependencies: - postcss: 8.4.38 + postcss: 8.4.39 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.38): + postcss-js@4.0.1(postcss@8.4.39): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.38 + postcss: 8.4.39 - postcss-load-config@4.0.2(postcss@8.4.38): + postcss-load-config@4.0.2(postcss@8.4.39): dependencies: lilconfig: 3.1.2 yaml: 2.4.5 optionalDependencies: - postcss: 8.4.38 + postcss: 8.4.39 - postcss-nested@6.0.1(postcss@8.4.38): + postcss-nested@6.2.0(postcss@8.4.39): dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 + postcss: 8.4.39 + postcss-selector-parser: 6.1.1 - postcss-selector-parser@6.1.0: + postcss-selector-parser@6.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 postcss-value-parser@4.2.0: {} - postcss@8.4.38: + postcss@8.4.39: dependencies: nanoid: 3.3.7 picocolors: 1.0.1 @@ -5600,7 +5605,7 @@ snapshots: resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -5610,30 +5615,30 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@5.0.7: + rimraf@5.0.9: dependencies: - glob: 10.4.1 + glob: 10.4.5 - rollup@4.18.0: + rollup@4.18.1: dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.0 - '@rollup/rollup-android-arm64': 4.18.0 - '@rollup/rollup-darwin-arm64': 4.18.0 - '@rollup/rollup-darwin-x64': 4.18.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 - '@rollup/rollup-linux-arm-musleabihf': 4.18.0 - '@rollup/rollup-linux-arm64-gnu': 4.18.0 - '@rollup/rollup-linux-arm64-musl': 4.18.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 - '@rollup/rollup-linux-riscv64-gnu': 4.18.0 - '@rollup/rollup-linux-s390x-gnu': 4.18.0 - '@rollup/rollup-linux-x64-gnu': 4.18.0 - '@rollup/rollup-linux-x64-musl': 4.18.0 - '@rollup/rollup-win32-arm64-msvc': 4.18.0 - '@rollup/rollup-win32-ia32-msvc': 4.18.0 - '@rollup/rollup-win32-x64-msvc': 4.18.0 + '@rollup/rollup-android-arm-eabi': 4.18.1 + '@rollup/rollup-android-arm64': 4.18.1 + '@rollup/rollup-darwin-arm64': 4.18.1 + '@rollup/rollup-darwin-x64': 4.18.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.1 + '@rollup/rollup-linux-arm-musleabihf': 4.18.1 + '@rollup/rollup-linux-arm64-gnu': 4.18.1 + '@rollup/rollup-linux-arm64-musl': 4.18.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.1 + '@rollup/rollup-linux-riscv64-gnu': 4.18.1 + '@rollup/rollup-linux-s390x-gnu': 4.18.1 + '@rollup/rollup-linux-x64-gnu': 4.18.1 + '@rollup/rollup-linux-x64-musl': 4.18.1 + '@rollup/rollup-win32-arm64-msvc': 4.18.1 + '@rollup/rollup-win32-ia32-msvc': 4.18.1 + '@rollup/rollup-win32-x64-msvc': 4.18.1 fsevents: 2.3.3 run-parallel@1.2.0: @@ -5669,7 +5674,7 @@ snapshots: semver@6.3.1: {} - semver@7.6.2: {} + semver@7.6.3: {} set-function-length@1.2.2: dependencies: @@ -5700,7 +5705,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 signal-exit@4.1.0: {} @@ -5791,7 +5796,7 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.4.1 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -5854,7 +5859,7 @@ snapshots: dependencies: tslib: 2.6.3 - tailwindcss@3.4.4: + tailwindcss@3.4.6: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -5870,12 +5875,12 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.1 - postcss: 8.4.38 - postcss-import: 15.1.0(postcss@8.4.38) - postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38) - postcss-nested: 6.0.1(postcss@8.4.38) - postcss-selector-parser: 6.1.0 + postcss: 8.4.39 + postcss-import: 15.1.0(postcss@8.4.39) + postcss-js: 4.0.1(postcss@8.4.39) + postcss-load-config: 4.0.2(postcss@8.4.39) + postcss-nested: 6.2.0(postcss@8.4.39) + postcss-selector-parser: 6.1.1 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: @@ -5893,7 +5898,7 @@ snapshots: dependencies: any-promise: 1.3.0 - throttle-debounce@5.0.0: {} + throttle-debounce@5.0.2: {} to-fast-properties@2.0.0: {} @@ -5967,11 +5972,11 @@ snapshots: typescript@5.3.3: {} - typescript@5.4.5: {} + typescript@5.5.3: {} typical@4.0.0: {} - ufo@1.5.3: {} + ufo@1.5.4: {} unbox-primitive@1.0.2: dependencies: @@ -5982,10 +5987,10 @@ snapshots: undici-types@5.26.5: {} - unimport@3.7.2(rollup@4.18.0): + unimport@3.9.0(rollup@4.18.1): dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.18.0) - acorn: 8.12.0 + '@rollup/pluginutils': 5.1.0(rollup@4.18.1) + acorn: 8.12.1 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 fast-glob: 3.3.2 @@ -5993,10 +5998,10 @@ snapshots: magic-string: 0.30.10 mlly: 1.7.1 pathe: 1.1.2 - pkg-types: 1.1.1 + pkg-types: 1.1.3 scule: 1.3.0 strip-literal: 2.1.0 - unplugin: 1.10.1 + unplugin: 1.11.0 transitivePeerDependencies: - rollup @@ -6004,59 +6009,59 @@ snapshots: dependencies: '@types/unist': 2.0.10 - unplugin-auto-import@0.17.6(@vueuse/core@10.11.0(vue@3.4.29(typescript@5.3.3)))(rollup@4.18.0): + unplugin-auto-import@0.17.8(@vueuse/core@10.11.0(vue@3.4.33(typescript@5.3.3)))(rollup@4.18.1): dependencies: - '@antfu/utils': 0.7.8 - '@rollup/pluginutils': 5.1.0(rollup@4.18.0) + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.0(rollup@4.18.1) fast-glob: 3.3.2 local-pkg: 0.5.0 magic-string: 0.30.10 - minimatch: 9.0.4 - unimport: 3.7.2(rollup@4.18.0) - unplugin: 1.10.1 + minimatch: 9.0.5 + unimport: 3.9.0(rollup@4.18.1) + unplugin: 1.11.0 optionalDependencies: - '@vueuse/core': 10.11.0(vue@3.4.29(typescript@5.3.3)) + '@vueuse/core': 10.11.0(vue@3.4.33(typescript@5.3.3)) transitivePeerDependencies: - rollup - unplugin-vue-components@0.26.0(@babel/parser@7.24.7)(rollup@4.18.0)(vue@3.4.29(typescript@5.3.3)): + unplugin-vue-components@0.26.0(@babel/parser@7.24.8)(rollup@4.18.1)(vue@3.4.33(typescript@5.3.3)): dependencies: - '@antfu/utils': 0.7.8 - '@rollup/pluginutils': 5.1.0(rollup@4.18.0) + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.0(rollup@4.18.1) chokidar: 3.6.0 debug: 4.3.5 fast-glob: 3.3.2 local-pkg: 0.4.3 magic-string: 0.30.10 - minimatch: 9.0.4 + minimatch: 9.0.5 resolve: 1.22.8 - unplugin: 1.10.1 - vue: 3.4.29(typescript@5.3.3) + unplugin: 1.11.0 + vue: 3.4.33(typescript@5.3.3) optionalDependencies: - '@babel/parser': 7.24.7 + '@babel/parser': 7.24.8 transitivePeerDependencies: - rollup - supports-color - unplugin-vue-define-options@1.4.5(rollup@4.18.0)(vue@3.4.29(typescript@5.3.3)): + unplugin-vue-define-options@1.4.5(rollup@4.18.1)(vue@3.4.33(typescript@5.3.3)): dependencies: - '@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.29(typescript@5.3.3)) + '@vue-macros/common': 1.10.4(rollup@4.18.1)(vue@3.4.33(typescript@5.3.3)) ast-walker-scope: 0.6.1 - unplugin: 1.10.1 + unplugin: 1.11.0 transitivePeerDependencies: - rollup - vue - unplugin@1.10.1: + unplugin@1.11.0: dependencies: - acorn: 8.12.0 + acorn: 8.12.1 chokidar: 3.6.0 webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.0.16(browserslist@4.23.1): + update-browserslist-db@1.1.0(browserslist@4.23.2): dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 escalade: 3.1.2 picocolors: 1.0.1 @@ -6073,10 +6078,10 @@ snapshots: vite-plugin-build-id@0.2.9(less@4.2.0): dependencies: - '@types/node': 20.14.2 - rimraf: 5.0.7 - typescript: 5.4.5 - vite: 5.3.1(@types/node@20.14.2)(less@4.2.0) + '@types/node': 20.14.11 + rimraf: 5.0.9 + typescript: 5.5.3 + vite: 5.3.4(@types/node@20.14.11)(less@4.2.0) transitivePeerDependencies: - less - lightningcss @@ -6085,24 +6090,24 @@ snapshots: - sugarss - terser - vite-svg-loader@5.1.0(vue@3.4.29(typescript@5.3.3)): + vite-svg-loader@5.1.0(vue@3.4.33(typescript@5.3.3)): dependencies: svgo: 3.3.2 - vue: 3.4.29(typescript@5.3.3) + vue: 3.4.33(typescript@5.3.3) - vite@5.3.1(@types/node@20.14.2)(less@4.2.0): + vite@5.3.4(@types/node@20.14.11)(less@4.2.0): dependencies: esbuild: 0.21.5 - postcss: 8.4.38 - rollup: 4.18.0 + postcss: 8.4.39 + rollup: 4.18.1 optionalDependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.11 fsevents: 2.3.3 less: 4.2.0 - vue-demi@0.14.8(vue@3.4.29(typescript@5.3.3)): + vue-demi@0.14.8(vue@3.4.33(typescript@5.3.3)): dependencies: - vue: 3.4.29(typescript@5.3.3) + vue: 3.4.33(typescript@5.3.3) vue-eslint-parser@9.4.3(eslint@8.57.0): dependencies: @@ -6111,9 +6116,9 @@ snapshots: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 lodash: 4.17.21 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -6121,10 +6126,10 @@ snapshots: dependencies: github-buttons: 2.28.0 - vue-router@4.3.3(vue@3.4.29(typescript@5.3.3)): + vue-router@4.4.0(vue@3.4.33(typescript@5.3.3)): dependencies: '@vue/devtools-api': 6.6.3 - vue: 3.4.29(typescript@5.3.3) + vue: 3.4.33(typescript@5.3.3) vue-template-compiler@2.7.16: dependencies: @@ -6135,28 +6140,28 @@ snapshots: dependencies: '@volar/typescript': 1.11.1 '@vue/language-core': 1.8.27(typescript@5.3.3) - semver: 7.6.2 + semver: 7.6.3 typescript: 5.3.3 - vue-types@3.0.2(vue@3.4.29(typescript@5.3.3)): + vue-types@3.0.2(vue@3.4.33(typescript@5.3.3)): dependencies: is-plain-object: 3.0.1 - vue: 3.4.29(typescript@5.3.3) + vue: 3.4.33(typescript@5.3.3) - vue3-ace-editor@2.2.4(ace-builds@1.35.0)(vue@3.4.29(typescript@5.3.3)): + vue3-ace-editor@2.2.4(ace-builds@1.35.3)(vue@3.4.33(typescript@5.3.3)): dependencies: - ace-builds: 1.35.0 + ace-builds: 1.35.3 resize-observer-polyfill: 1.5.1 - vue: 3.4.29(typescript@5.3.3) + vue: 3.4.33(typescript@5.3.3) - vue3-apexcharts@1.4.4(apexcharts@3.49.1)(vue@3.4.29(typescript@5.3.3)): + vue3-apexcharts@1.4.4(apexcharts@3.50.0)(vue@3.4.33(typescript@5.3.3)): dependencies: - apexcharts: 3.49.1 - vue: 3.4.29(typescript@5.3.3) + apexcharts: 3.50.0 + vue: 3.4.33(typescript@5.3.3) - vue3-gettext@3.0.0-beta.4(@vue/compiler-sfc@3.4.29)(typescript@5.3.3)(vue@3.4.29(typescript@5.3.3)): + vue3-gettext@3.0.0-beta.4(@vue/compiler-sfc@3.4.33)(typescript@5.3.3)(vue@3.4.33(typescript@5.3.3)): dependencies: - '@vue/compiler-sfc': 3.4.29 + '@vue/compiler-sfc': 3.4.33 chalk: 4.1.2 command-line-args: 5.2.1 cosmiconfig: 9.0.0(typescript@5.3.3) @@ -6166,24 +6171,24 @@ snapshots: parse5-htmlparser2-tree-adapter: 6.0.1 pofile: 1.1.4 tslib: 2.6.3 - vue: 3.4.29(typescript@5.3.3) + vue: 3.4.33(typescript@5.3.3) transitivePeerDependencies: - typescript - vue@3.4.29(typescript@5.3.3): + vue@3.4.33(typescript@5.3.3): dependencies: - '@vue/compiler-dom': 3.4.29 - '@vue/compiler-sfc': 3.4.29 - '@vue/runtime-dom': 3.4.29 - '@vue/server-renderer': 3.4.29(vue@3.4.29(typescript@5.3.3)) - '@vue/shared': 3.4.29 + '@vue/compiler-dom': 3.4.33 + '@vue/compiler-sfc': 3.4.33 + '@vue/runtime-dom': 3.4.33 + '@vue/server-renderer': 3.4.33(vue@3.4.33(typescript@5.3.3)) + '@vue/shared': 3.4.33 optionalDependencies: typescript: 5.3.3 - vuedraggable@4.1.0(vue@3.4.29(typescript@5.3.3)): + vuedraggable@4.1.0(vue@3.4.33(typescript@5.3.3)): dependencies: sortablejs: 1.14.0 - vue: 3.4.29(typescript@5.3.3) + vue: 3.4.33(typescript@5.3.3) warning@4.0.3: dependencies: diff --git a/app/src/version.json b/app/src/version.json index 22462ccb8..fec5068d3 100644 --- a/app/src/version.json +++ b/app/src/version.json @@ -1 +1 @@ -{"version":"2.0.0-beta.25","build_id":139,"total_build":343} \ No newline at end of file +{"version":"2.0.0-beta.25","build_id":140,"total_build":344} \ No newline at end of file diff --git a/app/version.json b/app/version.json index 22462ccb8..fec5068d3 100644 --- a/app/version.json +++ b/app/version.json @@ -1 +1 @@ -{"version":"2.0.0-beta.25","build_id":139,"total_build":343} \ No newline at end of file +{"version":"2.0.0-beta.25","build_id":140,"total_build":344} \ No newline at end of file diff --git a/go.mod b/go.mod index 7d2c16775..e5482bbcf 100644 --- a/go.mod +++ b/go.mod @@ -5,52 +5,52 @@ go 1.22.0 require ( github.com/0xJacky/pofile v0.2.1 github.com/BurntSushi/toml v1.4.0 - github.com/caarlos0/env/v11 v11.0.1 - github.com/casdoor/casdoor-go-sdk v0.46.0 + github.com/caarlos0/env/v11 v11.1.0 + github.com/casdoor/casdoor-go-sdk v0.47.0 github.com/creack/pty v1.1.21 + github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/dustin/go-humanize v1.0.1 github.com/fatih/color v1.17.0 github.com/gin-contrib/static v1.1.2 github.com/gin-gonic/gin v1.10.0 - github.com/go-acme/lego/v4 v4.17.3 + github.com/go-acme/lego/v4 v4.17.4 github.com/go-co-op/gocron v1.37.0 - github.com/go-playground/validator/v10 v10.21.0 - github.com/golang-jwt/jwt v3.2.2+incompatible + github.com/go-playground/validator/v10 v10.22.0 github.com/google/uuid v1.6.0 - github.com/gorilla/websocket v1.5.2 + github.com/gorilla/websocket v1.5.3 github.com/hpcloud/tail v1.0.0 github.com/jpillora/overseer v1.1.6 github.com/lib/pq v1.10.9 github.com/mitchellh/mapstructure v1.5.0 github.com/pkg/errors v0.9.1 github.com/pretty66/websocketproxy v0.0.0-20220507015215-930b3a686308 - github.com/samber/lo v1.39.0 - github.com/sashabaranov/go-openai v1.24.1 + github.com/samber/lo v1.46.0 + github.com/sashabaranov/go-openai v1.27.0 github.com/shirou/gopsutil/v3 v3.24.5 github.com/shopspring/decimal v1.4.0 github.com/spf13/cast v1.6.0 github.com/stretchr/testify v1.9.0 github.com/tufanbarisyildirim/gonginx v0.0.0-20240109151651-bb3e845a7a2a go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.24.0 + golang.org/x/crypto v0.25.0 gopkg.in/guregu/null.v4 v4.0.0 gopkg.in/ini.v1 v1.67.0 - gorm.io/driver/sqlite v1.5.5 + gorm.io/driver/sqlite v1.5.6 gorm.io/gen v0.3.26 - gorm.io/gorm v1.25.10 - gorm.io/plugin/dbresolver v1.5.1 + gorm.io/gorm v1.25.11 + gorm.io/plugin/dbresolver v1.5.2 ) require ( - cloud.google.com/go/auth v0.5.1 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect - cloud.google.com/go/compute/metadata v0.3.0 // indirect + cloud.google.com/go/auth v0.7.1 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.3 // indirect + cloud.google.com/go/compute/metadata v0.5.0 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/AdamSLevy/jsonrpc2/v14 v14.1.0 // indirect github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.12.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.9.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.2.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.9.0 // indirect @@ -71,40 +71,40 @@ require ( github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06 // indirect github.com/StackExchange/wmi v1.2.1 // indirect github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 // indirect - github.com/aliyun/alibaba-cloud-sdk-go v1.62.758 // indirect + github.com/aliyun/alibaba-cloud-sdk-go v1.62.793 // indirect github.com/andybalholm/brotli v1.1.0 // indirect github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect - github.com/aws/aws-sdk-go-v2 v1.27.2 // indirect - github.com/aws/aws-sdk-go-v2/config v1.27.18 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.18 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.5 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.9 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.9 // indirect + github.com/aws/aws-sdk-go-v2 v1.30.3 // indirect + github.com/aws/aws-sdk-go-v2/config v1.27.27 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.27 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.11 // indirect - github.com/aws/aws-sdk-go-v2/service/lightsail v1.38.3 // indirect - github.com/aws/aws-sdk-go-v2/service/route53 v1.40.10 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.20.11 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.24.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.28.12 // indirect - github.com/aws/smithy-go v1.20.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 // indirect + github.com/aws/aws-sdk-go-v2/service/lightsail v1.40.3 // indirect + github.com/aws/aws-sdk-go-v2/service/route53 v1.42.3 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 // indirect + github.com/aws/smithy-go v1.20.3 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/benbjohnson/clock v1.3.5 // indirect - github.com/boombuler/barcode v1.0.1 // indirect - github.com/bytedance/sonic v1.11.8 // indirect + github.com/boombuler/barcode v1.0.2 // indirect + github.com/bytedance/sonic v1.11.9 // indirect github.com/bytedance/sonic/loader v0.1.1 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect - github.com/civo/civogo v0.3.70 // indirect - github.com/cloudflare/cloudflare-go v0.97.0 // indirect + github.com/civo/civogo v0.3.73 // indirect + github.com/cloudflare/cloudflare-go v0.100.0 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect github.com/cpu/goacmedns v0.1.1 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/deepmap/oapi-codegen v1.16.3 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect github.com/dnsimple/dnsimple-go v1.7.0 // indirect - github.com/exoscale/egoscale v0.102.3 // indirect + github.com/exoscale/egoscale v0.102.4 // indirect github.com/fatih/structs v1.1.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/flosch/pongo2/v4 v4.0.2 // indirect @@ -113,7 +113,7 @@ require ( github.com/ghodss/yaml v1.0.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-errors/errors v1.5.1 // indirect - github.com/go-jose/go-jose/v4 v4.0.2 // indirect + github.com/go-jose/go-jose/v4 v4.0.3 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -123,7 +123,7 @@ require ( github.com/go-sql-driver/mysql v1.8.1 // indirect github.com/go-viper/mapstructure/v2 v2.0.0 // indirect github.com/goccy/go-json v0.10.3 // indirect - github.com/gofrs/flock v0.8.1 // indirect + github.com/gofrs/flock v0.12.0 // indirect github.com/gofrs/uuid v4.4.0+incompatible // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect @@ -131,13 +131,13 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/gomarkdown/markdown v0.0.0-20240419095408-642f0ee99ae2 // indirect + github.com/gomarkdown/markdown v0.0.0-20240626202925-2eda941fd024 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.4 // indirect - github.com/gophercloud/gophercloud v1.12.0 // indirect + github.com/googleapis/gax-go/v2 v2.12.5 // indirect + github.com/gophercloud/gophercloud v1.13.0 // indirect github.com/gophercloud/utils v0.0.0-20231010081019-80377eca5d56 // indirect github.com/gorilla/css v1.0.1 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect @@ -162,7 +162,7 @@ require ( github.com/kataras/pio v0.0.13 // indirect github.com/kataras/sitemap v0.0.6 // indirect github.com/kataras/tunnel v0.0.4 // indirect - github.com/klauspost/compress v1.17.8 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/cpuid/v2 v2.2.8 // indirect github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b // indirect github.com/kylelemons/godebug v1.1.0 // indirect @@ -171,7 +171,7 @@ require ( github.com/labstack/echo/v4 v4.12.0 // indirect github.com/labstack/gommon v0.4.2 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/linode/linodego v1.35.0 // indirect + github.com/linode/linodego v1.37.0 // indirect github.com/liquidweb/liquidweb-cli v0.7.0 // indirect github.com/liquidweb/liquidweb-go v1.6.4 // indirect github.com/lufia/plan9stats v0.0.0-20240513124658-fba389f38bae // indirect @@ -180,8 +180,8 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-sqlite3 v1.14.22 // indirect - github.com/microcosm-cc/bluemonday v1.0.26 // indirect - github.com/miekg/dns v1.1.59 // indirect + github.com/microcosm-cc/bluemonday v1.0.27 // indirect + github.com/miekg/dns v1.1.61 // indirect github.com/mimuret/golang-iij-dpf v0.9.1 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -196,15 +196,15 @@ require ( github.com/nrdcg/mailinabox v0.2.0 // indirect github.com/nrdcg/namesilo v0.2.1 // indirect github.com/nrdcg/nodion v0.1.0 // indirect - github.com/nrdcg/porkbun v0.3.0 // indirect + github.com/nrdcg/porkbun v0.4.0 // indirect github.com/nzdjb/go-metaname v1.0.0 // indirect github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b // indirect - github.com/oracle/oci-go-sdk/v65 v65.67.0 // indirect - github.com/ovh/go-ovh v1.5.1 // indirect + github.com/oracle/oci-go-sdk/v65 v65.69.2 // indirect + github.com/ovh/go-ovh v1.6.0 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/pquerna/otp v1.4.0 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect @@ -213,7 +213,7 @@ require ( github.com/sacloud/go-http v0.1.8 // indirect github.com/sacloud/iaas-api-go v1.12.0 // indirect github.com/sacloud/packages-go v0.0.10 // indirect - github.com/scaleway/scaleway-sdk-go v1.0.0-beta.27 // indirect + github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 // indirect github.com/schollz/closestmatch v2.1.0+incompatible // indirect github.com/selectel/domains-go v1.1.0 // indirect github.com/selectel/go-selvpcclient/v3 v3.1.1 // indirect @@ -224,13 +224,13 @@ require ( github.com/softlayer/xmlrpc v0.0.0-20200409220501-5f089df7cb7e // indirect github.com/sony/gobreaker v1.0.0 // indirect github.com/stretchr/objx v0.5.2 // indirect - github.com/tdewolff/minify/v2 v2.20.33 // indirect - github.com/tdewolff/parse/v2 v2.7.14 // indirect - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.939 // indirect - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.939 // indirect + github.com/tdewolff/minify/v2 v2.20.37 // indirect + github.com/tdewolff/parse/v2 v2.7.15 // indirect + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.967 // indirect + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.967 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect - github.com/transip/gotransip/v6 v6.24.0 // indirect + github.com/transip/gotransip/v6 v6.25.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect github.com/ultradns/ultradns-go-sdk v1.6.2-20240501171831-432d643 // indirect @@ -240,47 +240,47 @@ require ( github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/vultr/govultr/v2 v2.17.2 // indirect - github.com/yandex-cloud/go-genproto v0.0.0-20240529120826-df2b24336f42 // indirect - github.com/yandex-cloud/go-sdk v0.0.0-20240529122015-8b0dc5b8bcbf // indirect + github.com/yandex-cloud/go-genproto v0.0.0-20240715115219-0c1e192fbf5c // indirect + github.com/yandex-cloud/go-sdk v0.0.0-20240701143239-7326d2d09169 // indirect github.com/yosssi/ace v0.0.5 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 // indirect - go.opentelemetry.io/otel v1.27.0 // indirect - go.opentelemetry.io/otel/metric v1.27.0 // indirect - go.opentelemetry.io/otel/trace v1.27.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect + go.opentelemetry.io/otel v1.28.0 // indirect + go.opentelemetry.io/otel/metric v1.28.0 // indirect + go.opentelemetry.io/otel/trace v1.28.0 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/ratelimit v0.3.1 // indirect golang.org/x/arch v0.8.0 // indirect - golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 // indirect - golang.org/x/mod v0.18.0 // indirect - golang.org/x/net v0.26.0 // indirect + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + golang.org/x/mod v0.19.0 // indirect + golang.org/x/net v0.27.0 // indirect golang.org/x/oauth2 v0.21.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect + golang.org/x/sys v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.22.0 // indirect - google.golang.org/api v0.183.0 // indirect - google.golang.org/genproto v0.0.0-20240604185151-ef581f913117 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect - google.golang.org/grpc v1.64.1 // indirect - google.golang.org/protobuf v1.34.1 // indirect + golang.org/x/tools v0.23.0 // indirect + google.golang.org/api v0.188.0 // indirect + google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240711142825-46eb208f015d // indirect + google.golang.org/grpc v1.65.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/fsnotify.v1 v1.4.7 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ns1/ns1-go.v2 v2.11.0 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - gorm.io/datatypes v1.2.0 // indirect - gorm.io/driver/mysql v1.5.6 // indirect + gorm.io/datatypes v1.2.1 // indirect + gorm.io/driver/mysql v1.5.7 // indirect gorm.io/hints v1.1.2 // indirect - k8s.io/api v0.30.1 // indirect - k8s.io/apimachinery v0.30.1 // indirect - k8s.io/klog/v2 v2.120.1 // indirect - k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 // indirect + k8s.io/api v0.30.3 // indirect + k8s.io/apimachinery v0.30.3 // indirect + k8s.io/klog/v2 v2.130.1 // indirect + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect ) diff --git a/go.sum b/go.sum index 2049da792..a1706158c 100644 --- a/go.sum +++ b/go.sum @@ -97,10 +97,10 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.5.1 h1:0QNO7VThG54LUzKiQxv8C6x1YX7lUrzlAa1nVLF8CIw= -cloud.google.com/go/auth v0.5.1/go.mod h1:vbZT8GjzDf3AVqCcQmqeeM32U9HBFc32vVVAbwDsa6s= -cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= -cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= +cloud.google.com/go/auth v0.7.1 h1:Iv1bbpzJ2OIg16m94XI9/tlzZZl3cdeR3nGVGj78N7s= +cloud.google.com/go/auth v0.7.1/go.mod h1:VEc4p5NNxycWQTMQEDQF0bd6aTMb6VgYDXEwiJJQAbs= +cloud.google.com/go/auth/oauth2adapt v0.2.3 h1:MlxF+Pd3OmSudg/b1yZ5lJwoXCEaeedAguodky1PcKI= +cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= @@ -179,8 +179,8 @@ cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZ cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= -cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= +cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= @@ -611,12 +611,12 @@ github.com/AdamSLevy/jsonrpc2/v14 v14.1.0 h1:Dy3M9aegiI7d7PF1LUdjbVigJReo+QOceYs github.com/AdamSLevy/jsonrpc2/v14 v14.1.0/go.mod h1:ZakZtbCXxCz82NJvq7MoREtiQesnDfrtF6RFUGzQfLo= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.12.0 h1:1nGuui+4POelzDwI7RG56yfQJHCnKvwfMoU7VsEp+Zg= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.12.0/go.mod h1:99EvauvlcJ1U06amZiksfYz/3aFGyIhWGHVyiZXtBAI= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 h1:U2rTu3Ef+7w9FHKIAXM6ZyqF3UOWJZ12zIm8zECAFfg= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.9.0 h1:H+U3Gk9zY56G3u872L82bk4thcsy2Gghb9ExT4Zvm1o= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.9.0/go.mod h1:mgrmMSgaLp9hmax62XQTd0N4aAqSE5E0DulSpVYK7vc= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 h1:GJHeeA2N7xrG3q30L2UXDyuWRzDM900/65j70wcM4Ww= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0 h1:lpOxwrQ919lCZoNCd69rVt8u1eLZuMORrGXqy8sNf3c= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0/go.mod h1:fSvRkb8d26z9dbL40Uf/OO6Vo9iExtZK3D0ulRV+8M0= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do= @@ -690,8 +690,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/aliyun/alibaba-cloud-sdk-go v1.62.758 h1:jAq1MJDZkNZlqSAmzdyu5vauCB2O1Ki8BsJNkcFER00= -github.com/aliyun/alibaba-cloud-sdk-go v1.62.758/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ= +github.com/aliyun/alibaba-cloud-sdk-go v1.62.793 h1:7FmdfF5fZMxM8Y0YtwrnMLkwud+egvoB5X5xczqISNQ= +github.com/aliyun/alibaba-cloud-sdk-go v1.62.793/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= @@ -706,36 +706,36 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aws/aws-sdk-go-v2 v1.27.2 h1:pLsTXqX93rimAOZG2FIYraDQstZaaGVVN4tNw65v0h8= -github.com/aws/aws-sdk-go-v2 v1.27.2/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= -github.com/aws/aws-sdk-go-v2/config v1.27.18 h1:wFvAnwOKKe7QAyIxziwSKjmer9JBMH1vzIL6W+fYuKk= -github.com/aws/aws-sdk-go-v2/config v1.27.18/go.mod h1:0xz6cgdX55+kmppvPm2IaKzIXOheGJhAufacPJaXZ7c= -github.com/aws/aws-sdk-go-v2/credentials v1.17.18 h1:D/ALDWqK4JdY3OFgA2thcPO1c9aYTT5STS/CvnkqY1c= -github.com/aws/aws-sdk-go-v2/credentials v1.17.18/go.mod h1:JuitCWq+F5QGUrmMPsk945rop6bB57jdscu+Glozdnc= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.5 h1:dDgptDO9dxeFkXy+tEgVkzSClHZje/6JkPW5aZyEvrQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.5/go.mod h1:gjvE2KBUgUQhcv89jqxrIxH9GaKs1JbZzWejj/DaHGA= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.9 h1:cy8ahBJuhtM8GTTSyOkfy6WVPV1IE+SS5/wfXUYuulw= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.9/go.mod h1:CZBXGLaJnEZI6EVNcPd7a6B5IC5cA/GkRWtu9fp3S6Y= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.9 h1:A4SYk07ef04+vxZToz9LWvAXl9LW0NClpPpMsi31cz0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.9/go.mod h1:5jJcHuwDagxN+ErjQ3PU3ocf6Ylc/p9x+BLO/+X4iXw= +github.com/aws/aws-sdk-go-v2 v1.30.3 h1:jUeBtG0Ih+ZIFH0F4UkmL9w3cSpaMv9tYYDbzILP8dY= +github.com/aws/aws-sdk-go-v2 v1.30.3/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc= +github.com/aws/aws-sdk-go-v2/config v1.27.27 h1:HdqgGt1OAP0HkEDDShEl0oSYa9ZZBSOmKpdpsDMdO90= +github.com/aws/aws-sdk-go-v2/config v1.27.27/go.mod h1:MVYamCg76dFNINkZFu4n4RjDixhVr51HLj4ErWzrVwg= +github.com/aws/aws-sdk-go-v2/credentials v1.17.27 h1:2raNba6gr2IfA0eqqiP2XiQ0UVOpGPgDSi0I9iAP+UI= +github.com/aws/aws-sdk-go-v2/credentials v1.17.27/go.mod h1:gniiwbGahQByxan6YjQUMcW4Aov6bLC3m+evgcoN4r4= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 h1:KreluoV8FZDEtI6Co2xuNk/UqI9iwMrOx/87PBNIKqw= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11/go.mod h1:SeSUYBLsMYFoRvHE0Tjvn7kbxaUhl75CJi1sbfhMxkU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 h1:SoNJ4RlFEQEbtDcCEt+QG56MY4fm4W8rYirAmq+/DdU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15/go.mod h1:U9ke74k1n2bf+RIgoX1SXFed1HLs51OgUSs+Ph0KJP8= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 h1:C6WHdGnTDIYETAm5iErQUiVNsclNx9qbJVPIt03B6bI= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15/go.mod h1:ZQLZqhcu+JhSrA9/NXRm8SkDvsycE+JkV3WGY41e+IM= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.11 h1:o4T+fKxA3gTMcluBNZZXE9DNaMkJuUL1O3mffCUjoJo= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.11/go.mod h1:84oZdJ+VjuJKs9v1UTC9NaodRZRseOXCTgku+vQJWR8= -github.com/aws/aws-sdk-go-v2/service/lightsail v1.38.3 h1:YdA5QgoYa2wNblkWyZfPlLLYsAEKCwLfdMxpWu16wpM= -github.com/aws/aws-sdk-go-v2/service/lightsail v1.38.3/go.mod h1:T0LiPG5vKHZ7DmOq4Cmw0Kku3tMkaR9AknskS2hUXvI= -github.com/aws/aws-sdk-go-v2/service/route53 v1.40.10 h1:J9uHribwEgHmesH5r0enxsZYyiGBWd2AaExSW2SydqE= -github.com/aws/aws-sdk-go-v2/service/route53 v1.40.10/go.mod h1:tdzmlLwRjsHJjd4XXoSSnubCkVdRa39y4jCp4RACMkY= -github.com/aws/aws-sdk-go-v2/service/sso v1.20.11 h1:gEYM2GSpr4YNWc6hCd5nod4+d4kd9vWIAWrmGuLdlMw= -github.com/aws/aws-sdk-go-v2/service/sso v1.20.11/go.mod h1:gVvwPdPNYehHSP9Rs7q27U1EU+3Or2ZpXvzAYJNh63w= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.24.5 h1:iXjh3uaH3vsVcnyZX7MqCoCfcyxIrVE9iOQruRaWPrQ= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.24.5/go.mod h1:5ZXesEuy/QcO0WUnt+4sDkxhdXRHTu2yG0uCSH8B6os= -github.com/aws/aws-sdk-go-v2/service/sts v1.28.12 h1:M/1u4HBpwLuMtjlxuI2y6HoVLzF5e2mfxHCg7ZVMYmk= -github.com/aws/aws-sdk-go-v2/service/sts v1.28.12/go.mod h1:kcfd+eTdEi/40FIbLq4Hif3XMXnl5b/+t/KTfLt9xIk= -github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= -github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 h1:dT3MqvGhSoaIhRseqw2I0yH81l7wiR2vjs57O51EAm8= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3/go.mod h1:GlAeCkHwugxdHaueRr4nhPuY+WW+gR8UjlcqzPr1SPI= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 h1:HGErhhrxZlQ044RiM+WdoZxp0p+EGM62y3L6pwA4olE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17/go.mod h1:RkZEx4l0EHYDJpWppMJ3nD9wZJAa8/0lq9aVC+r2UII= +github.com/aws/aws-sdk-go-v2/service/lightsail v1.40.3 h1:dy4sbyGy7BS4c0KaPZwg1P5ZP+lW+auTVcPiwrmbn8M= +github.com/aws/aws-sdk-go-v2/service/lightsail v1.40.3/go.mod h1:EMgqMhof+RuaYvQavxKC0ZWvP7yB4B4NJhP+dbm13u0= +github.com/aws/aws-sdk-go-v2/service/route53 v1.42.3 h1:MmLCRqP4U4Cw9gJ4bNrCG0mWqEtBlmAVleyelcHARMU= +github.com/aws/aws-sdk-go-v2/service/route53 v1.42.3/go.mod h1:AMPjK2YnRh0YgOID3PqhJA1BRNfXDfGOnSsKHtAe8yA= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 h1:BXx0ZIxvrJdSgSvKTZ+yRBeSqqgPM89VPlulEcl37tM= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.4/go.mod h1:ooyCOXjvJEsUw7x+ZDHeISPMhtwI3ZCB7ggFMcFfWLU= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 h1:yiwVzJW2ZxZTurVbYWA7QOrAaCYQR72t0wrSBfoesUE= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4/go.mod h1:0oxfLkpz3rQ/CHlx5hB7H69YUpFiI1tql6Q6Ne+1bCw= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 h1:ZsDKRLXGWHk8WdtyYMoGNO7bTudrvuKpDKgMVRlepGE= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.3/go.mod h1:zwySh8fpFyXp9yOr/KVzxOl8SRqgf/IDw5aUt9UKFcQ= +github.com/aws/smithy-go v1.20.3 h1:ryHwveWzPV5BIof6fyDvor6V3iUL7nTfiTKXHiW05nE= +github.com/aws/smithy-go v1.20.3/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -749,19 +749,20 @@ github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJm github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/boombuler/barcode v1.0.1 h1:NDBbPmhS+EqABEs5Kg3n/5ZNjy73Pz7SIV+KCeqyXcs= github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/bytedance/sonic v1.11.8 h1:Zw/j1KfiS+OYTi9lyB3bb0CFxPJVkM17k1wyDG32LRA= -github.com/bytedance/sonic v1.11.8/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= +github.com/boombuler/barcode v1.0.2 h1:79yrbttoZrLGkL/oOI8hBrUKucwOL0oOjUgEguGMcJ4= +github.com/boombuler/barcode v1.0.2/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bytedance/sonic v1.11.9 h1:LFHENlIY/SLzDWverzdOvgMztTxcfcF+cqNsz9pK5zg= +github.com/bytedance/sonic v1.11.9/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/c-bata/go-prompt v0.2.5/go.mod h1:vFnjEGDIIA/Lib7giyE4E9c50Lvl8j0S+7FVlAwDAVw= github.com/c-bata/go-prompt v0.2.6/go.mod h1:/LMAke8wD2FsNu9EXNdHxNLbd9MedkPnCdfpU9wwHfY= github.com/c2h5oh/datasize v0.0.0-20200112174442-28bbd4740fee/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= -github.com/caarlos0/env/v11 v11.0.1 h1:A8dDt9Ub9ybqRSUF3fQc/TA/gTam2bKT4Pit+cwrsPs= -github.com/caarlos0/env/v11 v11.0.1/go.mod h1:2RC3HQu8BQqtEK3V4iHPxj0jOdWdbPpWJ6pOueeU1xM= -github.com/casdoor/casdoor-go-sdk v0.46.0 h1:4U/xas0k+7TmS34LAn105JJ/xsv3Lm9C4S3V68KqlKQ= -github.com/casdoor/casdoor-go-sdk v0.46.0/go.mod h1:cMnkCQJgMYpgAlgEx8reSt1AVaDIQLcJ1zk5pzBaz+4= +github.com/caarlos0/env/v11 v11.1.0 h1:a5qZqieE9ZfzdvbbdhTalRrHT5vu/4V1/ad1Ka6frhI= +github.com/caarlos0/env/v11 v11.1.0/go.mod h1:LwgkYk1kDvfGpHthrWWLof3Ny7PezzFwS4QrsJdHTMo= +github.com/casdoor/casdoor-go-sdk v0.47.0 h1:Fmyn5buhH9G2m41tr89Y/NwygingpXgoZwGVMTwUodU= +github.com/casdoor/casdoor-go-sdk v0.47.0/go.mod h1:cMnkCQJgMYpgAlgEx8reSt1AVaDIQLcJ1zk5pzBaz+4= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -775,11 +776,11 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/civo/civogo v0.3.70 h1:QPuFm5EmpkScbdFo5/6grcG2xcvd/lgdolOtENT04Ac= -github.com/civo/civogo v0.3.70/go.mod h1:7UCYX+qeeJbrG55E1huv+0ySxcHTqq/26FcHLVelQJM= +github.com/civo/civogo v0.3.73 h1:thkNnkziU+xh+MEOChIUwRZI1forN20+SSAPe/VFDME= +github.com/civo/civogo v0.3.73/go.mod h1:7UCYX+qeeJbrG55E1huv+0ySxcHTqq/26FcHLVelQJM= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.97.0 h1:feZRGiRF1EbljnNIYdt8014FnOLtC3CCvgkLXu915ks= -github.com/cloudflare/cloudflare-go v0.97.0/go.mod h1:JXRwuTfHpe5xFg8xytc2w0XC6LcrFsBVMS4WlVaiGg8= +github.com/cloudflare/cloudflare-go v0.100.0 h1:4iCUI2ZoIhRMyd7Z1TDsHhH1OhkgHC83eYbPlSgTRjo= +github.com/cloudflare/cloudflare-go v0.100.0/go.mod h1:VQ1t9Mvgdu4VFLx6uwQgFC10XxcCRIUuvkYGc9daMRU= 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= @@ -811,10 +812,12 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 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/deepmap/oapi-codegen v1.16.3 h1:GT9G86SbQtT1r8ZB+4Cybi9VGdu1P5ieNvNdEoCSbrA= github.com/deepmap/oapi-codegen v1.16.3/go.mod h1:JD6ErqeX0nYnhdciLc61Konj3NBASREMlkHOgHn8WAM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= @@ -840,8 +843,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/exoscale/egoscale v0.102.3 h1:DYqN2ipoLKpiFoprRGQkp2av/Ze7sUYYlGhi1N62tfY= -github.com/exoscale/egoscale v0.102.3/go.mod h1:RPf2Gah6up+6kAEayHTQwqapzXlm93f0VQas/UEGU5c= +github.com/exoscale/egoscale v0.102.4 h1:GBKsZMIOzwBfSu+4ZmWka3Ejf2JLiaBDHp4CQUgvp2E= +github.com/exoscale/egoscale v0.102.4/go.mod h1:ROSmPtle0wvf91iLZb09++N/9BH2Jo9XxIpAEumvocA= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= @@ -874,8 +877,8 @@ github.com/gin-contrib/static v1.1.2 h1:c3kT4bFkUJn2aoRU3s6XnMjJT8J6nNWJkR0Nglqm github.com/gin-contrib/static v1.1.2/go.mod h1:Fw90ozjHCmZBWbgrsqrDvO28YbhKEKzKp8GixhR4yLw= 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/go-acme/lego/v4 v4.17.3 h1:5our7Qdyik0abag40abdmQuytq97iweaNHFMT4pYDnQ= -github.com/go-acme/lego/v4 v4.17.3/go.mod h1:Ol6l04hnmavqVHKYS/ByhXXqE64x8yVYhomha82uAUk= +github.com/go-acme/lego/v4 v4.17.4 h1:h0nePd3ObP6o7kAkndtpTzCw8shOZuWckNYeUQwo36Q= +github.com/go-acme/lego/v4 v4.17.4/go.mod h1:dU94SvPNqimEeb7EVilGGSnS0nU1O5Exir0pQ4QFL4U= github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s= github.com/go-co-op/gocron v1.37.0 h1:ZYDJGtQ4OMhTLKOKMIch+/CY70Brbb1dGdooLEhh7b0= github.com/go-co-op/gocron v1.37.0/go.mod h1:3L/n6BkO7ABj+TrfSVXLRzsP26zmikL4ISkLQ0O8iNY= @@ -890,8 +893,8 @@ github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmn github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-jose/go-jose/v4 v4.0.2 h1:R3l3kkBds16bO7ZFAEEcofK0MkrAJt3jlJznWZG0nvk= -github.com/go-jose/go-jose/v4 v4.0.2/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY= +github.com/go-jose/go-jose/v4 v4.0.3 h1:o8aphO8Hv6RPmH+GfzVuyf7YXSBibp+8YyHdOoDESGo= +github.com/go-jose/go-jose/v4 v4.0.3/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= @@ -918,11 +921,10 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o 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.21.0 h1:4fZA11ovvtkdgaeev9RGWPgc1uj3H8W+rNYyH/ySBb0= -github.com/go-playground/validator/v10 v10.21.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +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/go-resty/resty/v2 v2.13.1 h1:x+LHXBI2nMB1vqndymf26quycC4aggYJ7DECYbiz03g= github.com/go-resty/resty/v2 v2.13.1/go.mod h1:GznXlLxkq6Nh4sU59rPmUw3VtgpO3aS96ORAI6Q7d+0= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= @@ -940,8 +942,9 @@ github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/flock v0.12.0 h1:xHW8t8GPAiGtqz7KxiSqfOEXwpOaqhpYZrTE2MQBgXY= +github.com/gofrs/flock v0.12.0/go.mod h1:FirDy1Ing0mI2+kB6wk+vyyAH+e6xiE+EYA0jnzV9jc= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -949,8 +952,6 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= -github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.1.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= @@ -1004,8 +1005,8 @@ github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6 github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomarkdown/markdown v0.0.0-20240419095408-642f0ee99ae2 h1:yEt5djSYb4iNtmV9iJGVday+i4e9u6Mrn5iP64HH5QM= -github.com/gomarkdown/markdown v0.0.0-20240419095408-642f0ee99ae2/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= +github.com/gomarkdown/markdown v0.0.0-20240626202925-2eda941fd024 h1:saBP362Qm7zDdDXqv61kI4rzhmLFq3Z1gx34xpl6cWE= +github.com/gomarkdown/markdown v0.0.0-20240626202925-2eda941fd024/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= @@ -1084,13 +1085,13 @@ github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMd github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= -github.com/googleapis/gax-go/v2 v2.12.4 h1:9gWcmF85Wvq4ryPFvGFaOgPIs1AQX0d0bcbGw4Z96qg= -github.com/googleapis/gax-go/v2 v2.12.4/go.mod h1:KYEYLorsnIGDi/rPC8b5TdlB9kbKoFubselGIoBMCwI= +github.com/googleapis/gax-go/v2 v2.12.5 h1:8gw9KZK8TiVKB6q3zHY3SBzLnrGp6HQjyfYBYGmXdxA= +github.com/googleapis/gax-go/v2 v2.12.5/go.mod h1:BUDKcWo+RaKq5SC9vVYL0wLADa3VcfswbOMMRmB9H3E= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gophercloud/gophercloud v1.3.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= -github.com/gophercloud/gophercloud v1.12.0 h1:Jrz16vPAL93l80q16fp8NplrTCp93y7rZh2P3Q4Yq7g= -github.com/gophercloud/gophercloud v1.12.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= +github.com/gophercloud/gophercloud v1.13.0 h1:8iY9d1DAbzMW6Vok1AxbbK5ZaUjzMp0tdyt4fX9IeJ0= +github.com/gophercloud/gophercloud v1.13.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= github.com/gophercloud/utils v0.0.0-20231010081019-80377eca5d56 h1:sH7xkTfYzxIEgzq1tDHIMKRh1vThOEOGNsettdEeLbE= github.com/gophercloud/utils v0.0.0-20231010081019-80377eca5d56/go.mod h1:VSalo4adEk+3sNkmVJLnhHoOyOYYS8sTWLG4mv5BKto= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -1098,8 +1099,8 @@ github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.2 h1:qoW6V1GT3aZxybsbC6oLnailWnB+qTMVwMreOso9XUw= -github.com/gorilla/websocket v1.5.2/go.mod h1:0n9H61RBAcf5/38py2MCYbxzPIY9rOkpvvMT24Rqs30= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= @@ -1177,16 +1178,17 @@ github.com/itchyny/timefmt-go v0.1.6 h1:ia3s54iciXDdzWzwaVKXZPbiXzxxnv1SPGFfM/my github.com/itchyny/timefmt-go v0.1.6/go.mod h1:RRDZYC5s9ErkjQvTvvU7keJjxUYzIISJGxm9/mAERQg= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.3.0 h1:/NQi8KHMpKWHInxXesC8yD4DhkXPrVhmnwYkjp9AmBA= -github.com/jackc/pgx/v5 v5.3.0/go.mod h1:t3JDKnCBlYIc0ewLF0Q7B8MXmoIaBOZj/ic7iHozM/8= +github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA= +github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw= +github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A= +github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= +github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jarcoal/httpmock v1.0.8/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= github.com/jarcoal/httpmock v1.3.1 h1:iUx3whfZWVf3jT01hQTO/Eo5sAYtB2/rqaUuOtpInww= github.com/jarcoal/httpmock v1.3.1/go.mod h1:3yb8rc4BI7TCBhFY8ng0gjuLKJNquuDNiPaZjnENuYg= 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.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= @@ -1236,8 +1238,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= @@ -1272,8 +1274,8 @@ 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/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/linode/linodego v1.35.0 h1:rIhUeCHBLEDlkoRnOTwzSGzljQ3ksXwLxacmXnrV+Do= -github.com/linode/linodego v1.35.0/go.mod h1:JxuhOEAMfSxun6RU5/MgTKH2GGTmFrhKRj3wL1NFin0= +github.com/linode/linodego v1.37.0 h1:B/2Spzv9jYXzKA+p+GD8fVCNJ7Wuw6P91ZDD9eCkkso= +github.com/linode/linodego v1.37.0/go.mod h1:L7GXKFD3PoN2xSEtFc04wIXP5WK65O10jYQx0PQISWQ= github.com/liquidweb/go-lwApi v0.0.0-20190605172801-52a4864d2738/go.mod h1:0sYF9rMXb0vlG+4SzdiGMXHheCZxjguMq+Zb4S2BfBs= github.com/liquidweb/go-lwApi v0.0.5/go.mod h1:0sYF9rMXb0vlG+4SzdiGMXHheCZxjguMq+Zb4S2BfBs= github.com/liquidweb/liquidweb-cli v0.6.9/go.mod h1:cE1uvQ+x24NGUL75D0QagOFCG8Wdvmwu8aL9TLmA/eQ= @@ -1322,16 +1324,16 @@ github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvr github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g= github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM= -github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58= -github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs= +github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= +github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= github.com/microsoft/go-mssqldb v0.17.0 h1:Fto83dMZPnYv1Zwx5vHHxpNraeEaUlQ/hhHLgZiaenE= github.com/microsoft/go-mssqldb v0.17.0/go.mod h1:OkoNGhGEs8EZqchVTtochlXruEhEOaO4S0d2sB5aeGQ= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.47/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= -github.com/miekg/dns v1.1.59 h1:C9EXc/UToRwKLhK5wKU/I4QVsBUc8kE6MkHBkeypWZs= -github.com/miekg/dns v1.1.59/go.mod h1:nZpewl5p6IvctfgrckopVx2OlSEHPRO/U4SYkRklrEk= +github.com/miekg/dns v1.1.61 h1:nLxbwF3XxhwVSm8g9Dghm9MHPaUZuqhPiGL+675ZmEs= +github.com/miekg/dns v1.1.61/go.mod h1:mnAarhS3nWaW+NVP2wTkYVIZyHNJ098SJZUki3eykwQ= github.com/mimuret/golang-iij-dpf v0.9.1 h1:Gj6EhHJkOhr+q2RnvRPJsPMcjuVnWPSccEHyoEehU34= github.com/mimuret/golang-iij-dpf v0.9.1/go.mod h1:sl9KyOkESib9+KRD3HaGpgi1xk7eoN2+d96LCLsME2M= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= @@ -1385,8 +1387,8 @@ github.com/nrdcg/namesilo v0.2.1 h1:kLjCjsufdW/IlC+iSfAqj0iQGgKjlbUUeDJio5Y6eMg= github.com/nrdcg/namesilo v0.2.1/go.mod h1:lwMvfQTyYq+BbjJd30ylEG4GPSS6PII0Tia4rRpRiyw= github.com/nrdcg/nodion v0.1.0 h1:zLKaqTn2X0aDuBHHfyA1zFgeZfiCpmu/O9DM73okavw= github.com/nrdcg/nodion v0.1.0/go.mod h1:inbuh3neCtIWlMPZHtEpe43TmRXxHV6+hk97iCZicms= -github.com/nrdcg/porkbun v0.3.0 h1:jnRV7j2zd3hmh+tSDOGetJyy3+WklaMxbs7HtTTmWMs= -github.com/nrdcg/porkbun v0.3.0/go.mod h1:jh1DKz96jGHW+NCdG3AmTbbnQeBlNUz1KeSgeN/cBVw= +github.com/nrdcg/porkbun v0.4.0 h1:rWweKlwo1PToQ3H+tEO9gPRW0wzzgmI/Ob3n2Guticw= +github.com/nrdcg/porkbun v0.4.0/go.mod h1:/QMskrHEIM0IhC/wY7iTCUgINsxdT2WcOphktJ9+Q54= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= @@ -1410,10 +1412,10 @@ github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo= github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0= github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A= github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b/go.mod h1:AC62GU6hc0BrNm+9RK9VSiwa/EUe1bkIeFORAMcHvJU= -github.com/oracle/oci-go-sdk/v65 v65.67.0 h1:bKcbNQyWUDiDgyE4crer3hZmiwpZ3rQnMi03jdKta/w= -github.com/oracle/oci-go-sdk/v65 v65.67.0/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0= -github.com/ovh/go-ovh v1.5.1 h1:P8O+7H+NQuFK9P/j4sFW5C0fvSS2DnHYGPwdVCp45wI= -github.com/ovh/go-ovh v1.5.1/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c= +github.com/oracle/oci-go-sdk/v65 v65.69.2 h1:lROMJ8/VakGOGObAWUxTVY2AX1wQCUIzVqfL4Fb2Ay8= +github.com/oracle/oci-go-sdk/v65 v65.69.2/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0= +github.com/ovh/go-ovh v1.6.0 h1:ixLOwxQdzYDx296sXcgS35TOPEahJkpjMGtzPadCjQI= +github.com/ovh/go-ovh v1.6.0/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= @@ -1438,8 +1440,9 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= github.com/pkg/term v1.2.0-beta.2/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= @@ -1502,14 +1505,14 @@ github.com/sacloud/iaas-api-go v1.12.0/go.mod h1:SZLXeWOdXk3WReIS557sbU1gkOgrE4r github.com/sacloud/packages-go v0.0.10 h1:UiQGjy8LretewkRhsuna1TBM9Vz/l9FoYpQx+D+AOck= github.com/sacloud/packages-go v0.0.10/go.mod h1:f8QITBh9z4IZc4yE9j21Q8b0sXEMwRlRmhhjWeDVTYs= github.com/sagikazarmark/crypt v0.10.0/go.mod h1:gwTNHQVoOS3xp9Xvz5LLR+1AauC5M6880z5NWzdhOyQ= -github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA= -github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= +github.com/samber/lo v1.46.0 h1:w8G+oaCPgz1PoCJztqymCFaKwXt+5cCXn51uPxExFfQ= +github.com/samber/lo v1.46.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo= github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= -github.com/sashabaranov/go-openai v1.24.1 h1:DWK95XViNb+agQtuzsn+FyHhn3HQJ7Va8z04DQDJ1MI= -github.com/sashabaranov/go-openai v1.24.1/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.27 h1:yGAraK1uUjlhSXgNMIy8o/J4LFNcy7yeipBqt9N9mVg= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.27/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/sashabaranov/go-openai v1.27.0 h1:L3hO6650YUbKrbGUC6yCjsUluhKZ9h1/jcgbTItI8Mo= +github.com/sashabaranov/go-openai v1.27.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 h1:BkTk4gynLjguayxrYxZoMZjBnAOh7ntQvUkOFmkMqPU= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk= github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= @@ -1596,24 +1599,24 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/tdewolff/minify/v2 v2.20.33 h1:lZFesDQagd+zGxyC3fEO/X2jZWB8CrahKi77lNrgAAQ= -github.com/tdewolff/minify/v2 v2.20.33/go.mod h1:1TJni7+mATKu24cBQQpgwakrYRD27uC1/rdJOgdv8ns= -github.com/tdewolff/parse/v2 v2.7.14 h1:100KJ+QAO3PpMb3uUjzEU/NpmCdbBYz6KPmCIAfWpR8= -github.com/tdewolff/parse/v2 v2.7.14/go.mod h1:3FbJWZp3XT9OWVN3Hmfp0p/a08v4h8J9W1aghka0soA= +github.com/tdewolff/minify/v2 v2.20.37 h1:Q97cx4STXCh1dlWDlNHZniE8BJ2EBL0+2b0n92BJQhw= +github.com/tdewolff/minify/v2 v2.20.37/go.mod h1:L1VYef/jwKw6Wwyk5A+T0mBjjn3mMPgmjjA688RNsxU= +github.com/tdewolff/parse/v2 v2.7.15 h1:hysDXtdGZIRF5UZXwpfn3ZWRbm+ru4l53/ajBRGpCTw= +github.com/tdewolff/parse/v2 v2.7.15/go.mod h1:3FbJWZp3XT9OWVN3Hmfp0p/a08v4h8J9W1aghka0soA= github.com/tdewolff/test v1.0.11-0.20231101010635-f1265d231d52/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739 h1:IkjBCtQOOjIn03u/dMQK9g+Iw9ewps4mCl1nB8Sscbo= github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.939 h1:rhoWKZbcj46KIfDTQnrGck8zA0LEgZURy6jhPuizOWE= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.939/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.939 h1:X32xf2dNYlkx+MXDL0NiugLgqeCtqEih8esM2wki6SQ= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.939/go.mod h1:HjiDxBO5QACtJ/vlD3sbyjmvdU7zbmU2dik5jVzeWOc= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.967 h1:ui73H/2pKk2aDCxaBCLAeMB3JlNgdCkn0nx1x0pqvf0= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.967/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.967 h1:4w33xHFgyrlFZYoGkPQ3uhld8tqoezpObfmCBrdlFBY= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.967/go.mod h1:T0RlPIT2imBeCxLkWfzoiEVP1r5WwzC6becSq7wvSgU= github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY= github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/transip/gotransip/v6 v6.24.0 h1:QaHgRT3ikpMCXr8Ntojiced/W4izd9ra9PNE/i+7qTE= -github.com/transip/gotransip/v6 v6.24.0/go.mod h1:x0/RWGRK/zob817O3tfO2xhFoP1vu8YOHORx6Jpk80s= +github.com/transip/gotransip/v6 v6.25.0 h1:/H+SjMq/9HNZ0/maE1OLhJpxLaCGHsxq0PWaMPJHxK4= +github.com/transip/gotransip/v6 v6.25.0/go.mod h1:x0/RWGRK/zob817O3tfO2xhFoP1vu8YOHORx6Jpk80s= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= 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= @@ -1646,10 +1649,11 @@ github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY= github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yandex-cloud/go-genproto v0.0.0-20240529120826-df2b24336f42 h1:l5Wu1kRcM34HqBR2FZI6tWc6QKyPziNj5fGZ4eXTCRI= -github.com/yandex-cloud/go-genproto v0.0.0-20240529120826-df2b24336f42/go.mod h1:HEUYX/p8966tMUHHT+TsS0hF/Ca/NYwqprC5WXSDMfE= -github.com/yandex-cloud/go-sdk v0.0.0-20240529122015-8b0dc5b8bcbf h1:R46d2p9AmCeotDrb8alxjeSukKOtU1gNLnBDZxsS7F0= -github.com/yandex-cloud/go-sdk v0.0.0-20240529122015-8b0dc5b8bcbf/go.mod h1:CuHkaRm2ZXv5SulglkbSFjdxh1R6VwpyfSM9EXMYz2U= +github.com/yandex-cloud/go-genproto v0.0.0-20240701142715-6a03f33f8ec8/go.mod h1:HEUYX/p8966tMUHHT+TsS0hF/Ca/NYwqprC5WXSDMfE= +github.com/yandex-cloud/go-genproto v0.0.0-20240715115219-0c1e192fbf5c h1:GzMfpQ/oAP93MOQb5/B+3daDzdcLRRqetZ8radtnJJ4= +github.com/yandex-cloud/go-genproto v0.0.0-20240715115219-0c1e192fbf5c/go.mod h1:HEUYX/p8966tMUHHT+TsS0hF/Ca/NYwqprC5WXSDMfE= +github.com/yandex-cloud/go-sdk v0.0.0-20240701143239-7326d2d09169 h1:5LGYQ/0h1uUo3HH8MsG6R40gvSVPj/7r4D1sKVMa370= +github.com/yandex-cloud/go-sdk v0.0.0-20240701143239-7326d2d09169/go.mod h1:kRqpmRyPs8rzXuYEJe57AH546a3VcSjEIzdFa1V66hY= github.com/yosssi/ace v0.0.5 h1:tUkIP/BLdKqrlrPwcmH0shwEEhTRHoGnc1wFIWmaBUA= github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= github.com/yudai/gojsondiff v1.0.0 h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA= @@ -1683,14 +1687,14 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 h1:9l89oX4ba9kHbBol3Xin3leYJ+252h0zszDtBwyKe2A= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0/go.mod h1:XLZfZboOJWHNKUv7eH0inh0E9VV6eWDFB/9yJyTLPp0= -go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= -go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= -go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= -go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= -go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= -go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= +go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= +go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= +go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= +go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= +go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= @@ -1740,8 +1744,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1757,8 +1761,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= -golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 h1:LoYXNGAShUG3m/ehNk4iFctuhGX/+R1ZpfJ4/ia80JM= -golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1801,8 +1805,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.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-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1878,8 +1882,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2044,8 +2048,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -2060,8 +2064,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +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.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2160,8 +2164,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= +golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= 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= @@ -2236,8 +2240,8 @@ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60c google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= -google.golang.org/api v0.183.0 h1:PNMeRDwo1pJdgNcFQ9GstuLe/noWKIc89pRWRLMvLwE= -google.golang.org/api v0.183.0/go.mod h1:q43adC5/pHoSZTx5h2mSmdF7NcyfW9JuDyIOJAgS9ZQ= +google.golang.org/api v0.188.0 h1:51y8fJ/b1AaaBRJr4yWm96fPcuxSo0JcegXE3DaHQHw= +google.golang.org/api v0.188.0/go.mod h1:VR0d+2SIiWOYG3r/jdm7adPW9hI2aRv9ETOSCQ9Beag= 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/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -2378,12 +2382,12 @@ google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOl google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/genproto v0.0.0-20240604185151-ef581f913117 h1:HCZ6DlkKtCDAtD8ForECsY3tKuaR+p4R3grlK80uCCc= -google.golang.org/genproto v0.0.0-20240604185151-ef581f913117/go.mod h1:lesfX/+9iA+3OdqeCpoDddJaNxVB1AB6tD7EfqMmprc= -google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 h1:+rdxYoE3E5htTEWIe15GlN6IfvbURM//Jt0mmkmm6ZU= -google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117/go.mod h1:OimBR/bc1wPO9iV4NC2bpyjy3VnAwZh5EBPQdtaE5oo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d h1:/hmn0Ku5kWij/kjGsrcJeC1T/MrJi2iNWwgAqrihFwc= +google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d/go.mod h1:FfBgJBJg9GcpPvKIuHSZ/aE1g2ecGL74upMzGZjiGEY= +google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d h1:kHjw/5UfflP/L5EbledDrcG4C2597RtymmGRZvHiCuY= +google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d/go.mod h1:mw8MG/Qz5wfgYr6VqVCiZcHe/GJEfI+oGGDCohaVgB0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240711142825-46eb208f015d h1:JU0iKnSg02Gmb5ZdV8nYsKEKsP6o/FGVWTrw4i1DA9A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240711142825-46eb208f015d/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -2426,8 +2430,8 @@ google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= -google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= -google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -2446,8 +2450,8 @@ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= 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= @@ -2490,31 +2494,29 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0/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/datatypes v1.2.0 h1:5YT+eokWdIxhJgWHdrb2zYUimyk0+TaFth+7a0ybzco= -gorm.io/datatypes v1.2.0/go.mod h1:o1dh0ZvjIjhH/bngTpypG6lVRJ5chTBxE09FH/71k04= -gorm.io/driver/mysql v1.4.3/go.mod h1:sSIebwZAVPiT+27jK9HIwvsqOGKx3YMPmrA3mBJR10c= -gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8= +gorm.io/datatypes v1.2.1 h1:r+g0bk4LPCW2v4+Ls7aeNgGme7JYdNDQ2VtvlNUfBh0= +gorm.io/datatypes v1.2.1/go.mod h1:hYK6OTb/1x+m96PgoZZq10UXJ6RvEBb9kRDQ2yyhzGs= gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM= +gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo= +gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM= gorm.io/driver/postgres v1.5.0 h1:u2FXTy14l45qc3UeCJ7QaAXZmZfDDv0YrthvmRq1l0U= gorm.io/driver/postgres v1.5.0/go.mod h1:FUZXzO+5Uqg5zzwzv4KK49R8lvGIyscBOqYrtI1Ce9A= gorm.io/driver/sqlite v1.5.0/go.mod h1:kDMDfntV9u/vuMmz8APHtHF0b4nyBB7sfCieC6G8k8I= -gorm.io/driver/sqlite v1.5.5 h1:7MDMtUZhV065SilG62E0MquljeArQZNfJnjd9i9gx3E= -gorm.io/driver/sqlite v1.5.5/go.mod h1:6NgQ7sQWAIFsPrJJl1lSNSu2TABh0ZZ/zm5fosATavE= +gorm.io/driver/sqlite v1.5.6 h1:fO/X46qn5NUEEOZtnjJRWRzZMe8nqJiQ9E+0hi+hKQE= +gorm.io/driver/sqlite v1.5.6/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4= gorm.io/driver/sqlserver v1.4.1 h1:t4r4r6Jam5E6ejqP7N82qAJIJAht27EGT41HyPfXRw0= gorm.io/driver/sqlserver v1.4.1/go.mod h1:DJ4P+MeZbc5rvY58PnmN1Lnyvb5gw5NPzGshHDnJLig= gorm.io/gen v0.3.26 h1:sFf1j7vNStimPRRAtH4zz5NiHM+1dr6eA9aaRdplyhY= gorm.io/gen v0.3.26/go.mod h1:a5lq5y3w4g5LMxBcw0wnO6tYUCdNutWODq5LrIt75LE= -gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= gorm.io/gorm v1.24.7-0.20230306060331-85eaf9eeda11/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= gorm.io/gorm v1.25.0/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= -gorm.io/gorm v1.25.2/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= -gorm.io/gorm v1.25.10 h1:dQpO+33KalOA+aFYGlK+EfxcI5MbO7EP2yYygwh9h+s= -gorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= +gorm.io/gorm v1.25.11 h1:/Wfyg1B/je1hnDx3sMkX+gAlxrlZpn6X0BXRlwXlvHg= +gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= gorm.io/hints v1.1.2 h1:b5j0kwk5p4+3BtDtYqqfY+ATSxjj+6ptPgVveuynn9o= gorm.io/hints v1.1.2/go.mod h1:/ARdpUHAtyEMCh5NNi3tI7FsGh+Cj/MIUlvNxCNCFWg= -gorm.io/plugin/dbresolver v1.5.1 h1:s9Dj9f7r+1rE3nx/Ywzc85nXptUEaeOO0pt27xdopM8= -gorm.io/plugin/dbresolver v1.5.1/go.mod h1:l4Cn87EHLEYuqUncpEeTC2tTJQkjngPSD+lo8hIvcT0= +gorm.io/plugin/dbresolver v1.5.2 h1:Iut7lW4TXNoVs++I+ra3zxjSxTRj4ocIeFEVp4lLhII= +gorm.io/plugin/dbresolver v1.5.2/go.mod h1:jPh59GOQbO7v7v28ZKZPd45tr+u3vyT+8tHdfdfOWcU= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -2525,14 +2527,14 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -k8s.io/api v0.30.1 h1:kCm/6mADMdbAxmIh0LBjS54nQBE+U4KmbCfIkF5CpJY= -k8s.io/api v0.30.1/go.mod h1:ddbN2C0+0DIiPntan/bye3SW3PdwLa11/0yqwvuRrJM= -k8s.io/apimachinery v0.30.1 h1:ZQStsEfo4n65yAdlGTfP/uSHMQSoYzU/oeEbkmF7P2U= -k8s.io/apimachinery v0.30.1/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= -k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= -k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak= -k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/api v0.30.3 h1:ImHwK9DCsPA9uoU3rVh4QHAHHK5dTSv1nxJUapx8hoQ= +k8s.io/api v0.30.3/go.mod h1:GPc8jlzoe5JG3pb0KJCSLX5oAFIW3/qNJITlDj8BH04= +k8s.io/apimachinery v0.30.3 h1:q1laaWCmrszyQuSQCfNB8cFgCuDAoPszKY4ucAjDwHc= +k8s.io/apimachinery v0.30.3/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= diff --git a/internal/user/login.go b/internal/user/login.go new file mode 100644 index 000000000..162b90988 --- /dev/null +++ b/internal/user/login.go @@ -0,0 +1,32 @@ +package user + +import ( + "errors" + "github.com/0xJacky/Nginx-UI/model" + "github.com/0xJacky/Nginx-UI/query" + "golang.org/x/crypto/bcrypt" +) + +var ( + ErrPasswordIncorrect = errors.New("password incorrect") + ErrUserBanned = errors.New("user banned") +) + +func Login(name string, password string) (user *model.Auth, err error) { + u := query.Auth + + user, err = u.Where(u.Name.Eq(name)).First() + if err != nil { + return nil, ErrPasswordIncorrect + } + + if err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password)); err != nil { + return nil, ErrPasswordIncorrect + } + + if !user.Status { + return nil, ErrUserBanned + } + + return +} diff --git a/internal/user/user.go b/internal/user/user.go new file mode 100644 index 000000000..325fe7da8 --- /dev/null +++ b/internal/user/user.go @@ -0,0 +1,57 @@ +package user + +import ( + "github.com/0xJacky/Nginx-UI/model" + "github.com/0xJacky/Nginx-UI/settings" + "github.com/dgrijalva/jwt-go" + "time" +) + +type JWTClaims struct { + Name string `json:"name"` + jwt.StandardClaims +} + +func GetUser(name string) (user model.Auth, err error) { + db := model.UseDB() + err = db.Where("name", name).First(&user).Error + if err != nil { + return + } + return +} + +func DeleteToken(token string) error { + db := model.UseDB() + return db.Where("token", token).Delete(&model.AuthToken{}).Error +} + +func CheckToken(token string) int64 { + db := model.UseDB() + return db.Where("token", token).Find(&model.AuthToken{}).RowsAffected +} + +func GenerateJWT(name string) (string, error) { + claims := JWTClaims{ + Name: name, + StandardClaims: jwt.StandardClaims{ + ExpiresAt: time.Now().Add(24 * time.Hour).Unix(), + }, + } + unsignedToken := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + signedToken, err := unsignedToken.SignedString([]byte(settings.ServerSettings.JwtSecret)) + if err != nil { + return "", err + } + + db := model.UseDB() + err = db.Create(&model.AuthToken{ + Token: signedToken, + }).Error + + if err != nil { + return "", err + } + + return signedToken, err +} diff --git a/model/auth.go b/model/auth.go index 377f376c8..45720b522 100644 --- a/model/auth.go +++ b/model/auth.go @@ -1,63 +1,13 @@ package model -import ( - "github.com/0xJacky/Nginx-UI/settings" - "github.com/golang-jwt/jwt" - "time" -) - type Auth struct { - Model + Model - Name string `json:"name"` - Password string `json:"-"` + Name string `json:"name"` + Password string `json:"-"` + Status bool `json:"status" gorm:"default:1"` } type AuthToken struct { - Token string `json:"token"` -} - -type JWTClaims struct { - Name string `json:"name"` - jwt.StandardClaims -} - -func GetUser(name string) (user Auth, err error) { - err = db.Where("name = ?", name).First(&user).Error - if err != nil { - return Auth{}, err - } - return user, err -} - -func DeleteToken(token string) error { - return db.Where("token = ?", token).Delete(&AuthToken{}).Error -} - -func CheckToken(token string) int64 { - return db.Where("token = ?", token).Find(&AuthToken{}).RowsAffected -} - -func GenerateJWT(name string) (string, error) { - claims := JWTClaims{ - Name: name, - StandardClaims: jwt.StandardClaims{ - ExpiresAt: time.Now().Add(24 * time.Hour).Unix(), - }, - } - unsignedToken := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - signedToken, err := unsignedToken.SignedString([]byte(settings.ServerSettings.JwtSecret)) - if err != nil { - return "", err - } - - err = db.Create(&AuthToken{ - Token: signedToken, - }).Error - - if err != nil { - return "", err - } - - return signedToken, err + Token string `json:"token"` } diff --git a/router/ip.go b/router/ip.go new file mode 100644 index 000000000..77eb8f5d3 --- /dev/null +++ b/router/ip.go @@ -0,0 +1,25 @@ +package router + +import ( + "github.com/0xJacky/Nginx-UI/settings" + "github.com/gin-gonic/gin" + "github.com/samber/lo" + "net/http" +) + +func ipWhiteList() gin.HandlerFunc { + return func(c *gin.Context) { + clientIP := c.ClientIP() + if len(settings.AuthSettings.IPWhiteList) == 0 || clientIP == "127.0.0.1" { + c.Next() + return + } + + if !lo.Contains(settings.AuthSettings.IPWhiteList, clientIP) { + c.AbortWithStatus(http.StatusForbidden) + return + } + + c.Next() + } +} diff --git a/router/middleware.go b/router/middleware.go index 79d5594b7..bcf7944cc 100644 --- a/router/middleware.go +++ b/router/middleware.go @@ -4,7 +4,7 @@ import ( "encoding/base64" "github.com/0xJacky/Nginx-UI/app" "github.com/0xJacky/Nginx-UI/internal/logger" - "github.com/0xJacky/Nginx-UI/model" + "github.com/0xJacky/Nginx-UI/internal/user" "github.com/0xJacky/Nginx-UI/settings" "github.com/gin-contrib/static" "github.com/gin-gonic/gin" @@ -58,7 +58,7 @@ func authRequired() gin.HandlerFunc { } } - if model.CheckToken(token) < 1 { + if user.CheckToken(token) < 1 { abortWithAuthFailure() return } diff --git a/router/routers.go b/router/routers.go index 1e003af4a..4fd947d86 100644 --- a/router/routers.go +++ b/router/routers.go @@ -23,10 +23,9 @@ import ( func InitRouter() *gin.Engine { r := gin.New() r.Use(gin.Logger()) - r.Use(recovery()) - r.Use(cacheJs()) + r.Use(ipWhiteList()) //r.Use(OperationSync()) diff --git a/settings/auth.go b/settings/auth.go new file mode 100644 index 000000000..4286fc038 --- /dev/null +++ b/settings/auth.go @@ -0,0 +1,9 @@ +package settings + +type Auth struct { + IPWhiteList []string `ini:",,allowshadow"` + BanThresholdMinutes int `json:"ban_threshold_minutes" binding:"min=1"` + MaxAttempts int `json:"max_attempts" binding:"min=1"` +} + +var AuthSettings = Auth{} diff --git a/settings/settings.go b/settings/settings.go index f08c04800..e18acfaed 100644 --- a/settings/settings.go +++ b/settings/settings.go @@ -27,6 +27,7 @@ var sections = map[string]interface{}{ "casdoor": &CasdoorSettings, "logrotate": &LogrotateSettings, "cluster": &ClusterSettings, + "auth": &AuthSettings, } func init() { @@ -62,6 +63,7 @@ func Setup() { parseEnv(&OpenAISettings, "OPENAI_") parseEnv(&CasdoorSettings, "CASDOOR_") parseEnv(&LogrotateSettings, "LOGROTATE_") + parseEnv(&AuthSettings, "AUTH_") // if in official docker, set the restart cmd of nginx to "nginx -s stop", // then the supervisor of s6-overlay will start the nginx again. From d6b22c157cec7cf40d77111b7af7d64aca97fa03 Mon Sep 17 00:00:00 2001 From: Jacky Date: Sat, 20 Jul 2024 10:50:22 +0800 Subject: [PATCH 2/5] chore: update docs of auth --- docs/.vitepress/config/en.ts | 3 +- docs/.vitepress/config/zh_CN.ts | 3 +- docs/.vitepress/config/zh_TW.ts | 3 +- docs/guide/config-auth.md | 18 + docs/guide/env.md | 6 + docs/package.json | 6 +- docs/pnpm-lock.yaml | 1787 +++++++++++++++++-------------- docs/zh_CN/guide/config-auth.md | 18 + docs/zh_CN/guide/env.md | 8 +- docs/zh_TW/guide/config-auth.md | 17 + docs/zh_TW/guide/env.md | 8 +- 11 files changed, 1052 insertions(+), 825 deletions(-) create mode 100644 docs/guide/config-auth.md create mode 100644 docs/zh_CN/guide/config-auth.md create mode 100644 docs/zh_TW/guide/config-auth.md diff --git a/docs/.vitepress/config/en.ts b/docs/.vitepress/config/en.ts index 8f0de6f99..845a39d8a 100644 --- a/docs/.vitepress/config/en.ts +++ b/docs/.vitepress/config/en.ts @@ -39,7 +39,8 @@ export const enConfig: LocaleSpecificConfig = { {text: 'Open AI', link: '/guide/config-openai'}, {text: 'Casdoor', link: '/guide/config-casdoor'}, {text: 'Logrotate', link: '/guide/config-logrotate'}, - {text: 'Cluster', link: '/guide/config-cluster'} + {text: 'Cluster', link: '/guide/config-cluster'}, + {text: 'Auth', link: '/guide/config-auth'} ] }, { diff --git a/docs/.vitepress/config/zh_CN.ts b/docs/.vitepress/config/zh_CN.ts index 2675619cc..8e5eef974 100644 --- a/docs/.vitepress/config/zh_CN.ts +++ b/docs/.vitepress/config/zh_CN.ts @@ -44,7 +44,8 @@ export const zhCNConfig: LocaleSpecificConfig = { {text: 'Open AI', link: '/zh_CN/guide/config-openai'}, {text: 'Casdoor', link: '/zh_CN/guide/config-casdoor'}, {text: 'Logrotate', link: '/zh_CN/guide/config-logrotate'}, - {text: '集群', link: '/zh_CN/guide/config-cluster'} + {text: '集群', link: '/zh_CN/guide/config-cluster'}, + {text: '认证', link: '/zh_CN/guide/config-auth'} ] }, { diff --git a/docs/.vitepress/config/zh_TW.ts b/docs/.vitepress/config/zh_TW.ts index 69eac35dc..24c2c7521 100644 --- a/docs/.vitepress/config/zh_TW.ts +++ b/docs/.vitepress/config/zh_TW.ts @@ -43,7 +43,8 @@ export const zhTWConfig: LocaleSpecificConfig = { {text: 'Open AI', link: '/zh_TW/guide/config-openai'}, {text: 'Casdoor', link: '/zh_TW/guide/config-casdoor'}, {text: 'Logrotate', link: '/zh_TW/guide/config-logrotate'}, - {text: '集群', link: '/zh_TW/guide/config-cluster'} + {text: '集群', link: '/zh_TW/guide/config-cluster'}, + {text: '認證', link: '/zh_TM/guide/config-auth'} ] }, { diff --git a/docs/guide/config-auth.md b/docs/guide/config-auth.md new file mode 100644 index 000000000..2a54ded16 --- /dev/null +++ b/docs/guide/config-auth.md @@ -0,0 +1,18 @@ +# Auth +From v2.0.0-beta.26, you can authorization settings in the `auth` section of the configuration file. + +## IPWhiteList +- Type: `string` +- Example: `10.0.0.1` + +```ini +[auth] +IPWhiteList = 10.0.0.1 +IPWhiteList = 10.0.0.2 +IPWhiteList = 10.0.0.3 +``` + +By default, if you do not set the `IPWhiteList`, all IP addresses are allowed to access the Nginx UI. + +Once you set the `IPWhiteList`, only the users from IP addresses in the list and `127.0.0.1` can access the Nginx UI, +others will receive a `403 Forbidden` error. diff --git a/docs/guide/env.md b/docs/guide/env.md index 0821250a4..0707b4002 100644 --- a/docs/guide/env.md +++ b/docs/guide/env.md @@ -63,6 +63,12 @@ Applicable for version v2.0.0-beta.23 and above. | CMD | NGINX_UI_LOGROTATE_CMD | | Interval | NGINX_UI_LOGROTATE_INTERVAL | +## Auth + +| Configuration Setting | Environment Variable | +|-----------------------|-----------------------------| +| IPWhiteList | NGINX_UI_AUTH_IPWhiteList | + ## Predefined User In skip installation mode, you can set the following environment variables to create a predefined user: diff --git a/docs/package.json b/docs/package.json index d3f384751..73ab635d1 100644 --- a/docs/package.json +++ b/docs/package.json @@ -7,11 +7,11 @@ "docs:preview": "vitepress preview" }, "dependencies": { - "vue": "^3.4.26", - "vitepress": "^1.1.4" + "vitepress": "^1.3.1", + "vue": "^3.4.33" }, "devDependencies": { - "@types/node": "^20.12.8", + "@types/node": "^20.14.11", "less": "^4.2.0" }, "license": "AGPL-3.0", diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index 50be59762..19ccdd673 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -1,223 +1,119 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - vitepress: - specifier: ^1.1.4 - version: 1.1.4(@algolia/client-search@4.23.3)(@types/node@20.12.8)(less@4.2.0)(search-insights@2.13.0) - vue: - specifier: ^3.4.26 - version: 3.4.26 - -devDependencies: - '@types/node': - specifier: ^20.12.8 - version: 20.12.8 - less: - specifier: ^4.2.0 - version: 4.2.0 +importers: + + .: + dependencies: + vitepress: + specifier: ^1.3.1 + version: 1.3.1(@algolia/client-search@4.24.0)(@types/node@20.14.11)(less@4.2.0)(postcss@8.4.39)(search-insights@2.13.0) + vue: + specifier: ^3.4.33 + version: 3.4.33 + devDependencies: + '@types/node': + specifier: ^20.14.11 + version: 20.14.11 + less: + specifier: ^4.2.0 + version: 4.2.0 packages: - /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0): + '@algolia/autocomplete-core@1.9.3': resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} - dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - search-insights - dev: false - /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0): + '@algolia/autocomplete-plugin-algolia-insights@1.9.3': resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} peerDependencies: search-insights: '>= 1 < 3' - dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - search-insights: 2.13.0 - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - dev: false - /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3): + '@algolia/autocomplete-preset-algolia@1.9.3': resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - '@algolia/client-search': 4.23.3 - algoliasearch: 4.23.3 - dev: false - /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3): + '@algolia/autocomplete-shared@1.9.3': resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - dependencies: - '@algolia/client-search': 4.23.3 - algoliasearch: 4.23.3 - dev: false - /@algolia/cache-browser-local-storage@4.23.3: - resolution: {integrity: sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==} - dependencies: - '@algolia/cache-common': 4.23.3 - dev: false + '@algolia/cache-browser-local-storage@4.24.0': + resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==} - /@algolia/cache-common@4.23.3: - resolution: {integrity: sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==} - dev: false + '@algolia/cache-common@4.24.0': + resolution: {integrity: sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==} - /@algolia/cache-in-memory@4.23.3: - resolution: {integrity: sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==} - dependencies: - '@algolia/cache-common': 4.23.3 - dev: false + '@algolia/cache-in-memory@4.24.0': + resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} - /@algolia/client-account@4.23.3: - resolution: {integrity: sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==} - dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false + '@algolia/client-account@4.24.0': + resolution: {integrity: sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==} - /@algolia/client-analytics@4.23.3: - resolution: {integrity: sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==} - dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false - - /@algolia/client-common@4.23.3: - resolution: {integrity: sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==} - dependencies: - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false + '@algolia/client-analytics@4.24.0': + resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} - /@algolia/client-personalization@4.23.3: - resolution: {integrity: sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==} - dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false + '@algolia/client-common@4.24.0': + resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} - /@algolia/client-search@4.23.3: - resolution: {integrity: sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==} - dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false + '@algolia/client-personalization@4.24.0': + resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} - /@algolia/logger-common@4.23.3: - resolution: {integrity: sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==} - dev: false + '@algolia/client-search@4.24.0': + resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} - /@algolia/logger-console@4.23.3: - resolution: {integrity: sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A==} - dependencies: - '@algolia/logger-common': 4.23.3 - dev: false + '@algolia/logger-common@4.24.0': + resolution: {integrity: sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==} - /@algolia/recommend@4.23.3: - resolution: {integrity: sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w==} - dependencies: - '@algolia/cache-browser-local-storage': 4.23.3 - '@algolia/cache-common': 4.23.3 - '@algolia/cache-in-memory': 4.23.3 - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/logger-console': 4.23.3 - '@algolia/requester-browser-xhr': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false - - /@algolia/requester-browser-xhr@4.23.3: - resolution: {integrity: sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==} - dependencies: - '@algolia/requester-common': 4.23.3 - dev: false + '@algolia/logger-console@4.24.0': + resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} - /@algolia/requester-common@4.23.3: - resolution: {integrity: sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw==} - dev: false + '@algolia/recommend@4.24.0': + resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} - /@algolia/requester-node-http@4.23.3: - resolution: {integrity: sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==} - dependencies: - '@algolia/requester-common': 4.23.3 - dev: false + '@algolia/requester-browser-xhr@4.24.0': + resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} - /@algolia/transporter@4.23.3: - resolution: {integrity: sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==} - dependencies: - '@algolia/cache-common': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - dev: false + '@algolia/requester-common@4.24.0': + resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} - /@babel/helper-string-parser@7.24.1: - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + '@algolia/requester-node-http@4.24.0': + resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} + + '@algolia/transporter@4.24.0': + resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} - dev: false - /@babel/helper-validator-identifier@7.24.5: - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - dev: false - /@babel/parser@7.24.5: - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} + '@babel/parser@7.24.8': + resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.24.5 - dev: false - /@babel/types@7.24.5: - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} + '@babel/types@7.24.9': + resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 - to-fast-properties: 2.0.0 - dev: false - /@docsearch/css@3.6.0: - resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} - dev: false + '@docsearch/css@3.6.1': + resolution: {integrity: sha512-VtVb5DS+0hRIprU2CO6ZQjK2Zg4QU5HrDM1+ix6rT0umsYvFvatMAnf97NHZlVWDaaLlx7GRfR/7FikANiM2Fg==} - /@docsearch/js@3.6.0(@algolia/client-search@4.23.3)(search-insights@2.13.0): - resolution: {integrity: sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==} - dependencies: - '@docsearch/react': 3.6.0(@algolia/client-search@4.23.3)(search-insights@2.13.0) - preact: 10.21.0 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/react' - - react - - react-dom - - search-insights - dev: false + '@docsearch/js@3.6.1': + resolution: {integrity: sha512-erI3RRZurDr1xES5hvYJ3Imp7jtrXj6f1xYIzDzxiS7nNBufYWPbJwrmMqWC5g9y165PmxEmN9pklGCdLi0Iqg==} - /@docsearch/react@3.6.0(@algolia/client-search@4.23.3)(search-insights@2.13.0): - resolution: {integrity: sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==} + '@docsearch/react@3.6.1': + resolution: {integrity: sha512-qXZkEPvybVhSXj0K7U3bXc233tk5e8PfhoZ6MhPOiik/qUQxYC+Dn9DnoS7CxHQQhHfCvTiN0eY9M12oRghEXw==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -232,531 +128,321 @@ packages: optional: true search-insights: optional: true - dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - '@docsearch/css': 3.6.0 - algoliasearch: 4.23.3 - search-insights: 2.13.0 - transitivePeerDependencies: - - '@algolia/client-search' - dev: false - /@esbuild/aix-ppc64@0.20.2: - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] - requiresBuild: true - dev: false - optional: true - /@esbuild/android-arm64@0.20.2: - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] - requiresBuild: true - dev: false - optional: true - /@esbuild/android-arm@0.20.2: - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] - requiresBuild: true - dev: false - optional: true - /@esbuild/android-x64@0.20.2: - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] - requiresBuild: true - dev: false - optional: true - /@esbuild/darwin-arm64@0.20.2: - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@esbuild/darwin-x64@0.20.2: - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@esbuild/freebsd-arm64@0.20.2: - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/freebsd-x64@0.20.2: - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-arm64@0.20.2: - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-arm@0.20.2: - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-ia32@0.20.2: - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-loong64@0.20.2: - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-mips64el@0.20.2: - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-ppc64@0.20.2: - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-riscv64@0.20.2: - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-s390x@0.20.2: - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-x64@0.20.2: - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/netbsd-x64@0.20.2: - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/openbsd-x64@0.20.2: - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/sunos-x64@0.20.2: - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: false - optional: true - /@esbuild/win32-arm64@0.20.2: - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@esbuild/win32-ia32@0.20.2: - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: false - optional: true - /@esbuild/win32-x64@0.20.2: - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: false + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - /@rollup/rollup-android-arm-eabi@4.17.2: - resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} + '@rollup/rollup-android-arm-eabi@4.18.1': + resolution: {integrity: sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==} cpu: [arm] os: [android] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-android-arm64@4.17.2: - resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} + '@rollup/rollup-android-arm64@4.18.1': + resolution: {integrity: sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==} cpu: [arm64] os: [android] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-darwin-arm64@4.17.2: - resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} + '@rollup/rollup-darwin-arm64@4.18.1': + resolution: {integrity: sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-darwin-x64@4.17.2: - resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} + '@rollup/rollup-darwin-x64@4.18.1': + resolution: {integrity: sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==} cpu: [x64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.17.2: - resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} + '@rollup/rollup-linux-arm-gnueabihf@4.18.1': + resolution: {integrity: sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==} cpu: [arm] os: [linux] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-linux-arm-musleabihf@4.17.2: - resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} + '@rollup/rollup-linux-arm-musleabihf@4.18.1': + resolution: {integrity: sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==} cpu: [arm] os: [linux] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-linux-arm64-gnu@4.17.2: - resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} + '@rollup/rollup-linux-arm64-gnu@4.18.1': + resolution: {integrity: sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-linux-arm64-musl@4.17.2: - resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} + '@rollup/rollup-linux-arm64-musl@4.18.1': + resolution: {integrity: sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.17.2: - resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': + resolution: {integrity: sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-linux-riscv64-gnu@4.17.2: - resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} + '@rollup/rollup-linux-riscv64-gnu@4.18.1': + resolution: {integrity: sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-linux-s390x-gnu@4.17.2: - resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} + '@rollup/rollup-linux-s390x-gnu@4.18.1': + resolution: {integrity: sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==} cpu: [s390x] os: [linux] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-linux-x64-gnu@4.17.2: - resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} + '@rollup/rollup-linux-x64-gnu@4.18.1': + resolution: {integrity: sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-linux-x64-musl@4.17.2: - resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} + '@rollup/rollup-linux-x64-musl@4.18.1': + resolution: {integrity: sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-win32-arm64-msvc@4.17.2: - resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} + '@rollup/rollup-win32-arm64-msvc@4.18.1': + resolution: {integrity: sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==} cpu: [arm64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-win32-ia32-msvc@4.17.2: - resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} + '@rollup/rollup-win32-ia32-msvc@4.18.1': + resolution: {integrity: sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==} cpu: [ia32] os: [win32] - requiresBuild: true - dev: false - optional: true - /@rollup/rollup-win32-x64-msvc@4.17.2: - resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} + '@rollup/rollup-win32-x64-msvc@4.18.1': + resolution: {integrity: sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==} cpu: [x64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@shikijs/core@1.4.0: - resolution: {integrity: sha512-CxpKLntAi64h3j+TwWqVIQObPTED0FyXLHTTh3MKXtqiQNn2JGcMQQ362LftDbc9kYbDtrksNMNoVmVXzKFYUQ==} - dev: false + '@shikijs/core@1.10.3': + resolution: {integrity: sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==} - /@shikijs/transformers@1.4.0: - resolution: {integrity: sha512-kzvlWmWYYSeaLKRce/kgmFFORUtBtFahfXRKndor0b60ocYiXufBQM6d6w1PlMuUkdk55aor9xLvy9wy7hTEJg==} - dependencies: - shiki: 1.4.0 - dev: false + '@shikijs/transformers@1.10.3': + resolution: {integrity: sha512-MNjsyye2WHVdxfZUSr5frS97sLGe6G1T+1P41QjyBFJehZphMcr4aBlRLmq6OSPBslYe9byQPVvt/LJCOfxw8Q==} - /@types/estree@1.0.5: + '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: false - /@types/linkify-it@5.0.0: + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - dev: false - /@types/markdown-it@14.1.1: + '@types/markdown-it@14.1.1': resolution: {integrity: sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==} - dependencies: - '@types/linkify-it': 5.0.0 - '@types/mdurl': 2.0.0 - dev: false - /@types/mdurl@2.0.0: + '@types/mdurl@2.0.0': resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - dev: false - /@types/node@20.12.8: - resolution: {integrity: sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==} - dependencies: - undici-types: 5.26.5 + '@types/node@20.14.11': + resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==} - /@types/web-bluetooth@0.0.20: + '@types/unist@3.0.2': + resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + + '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - dev: false - /@vitejs/plugin-vue@5.0.4(vite@5.2.11)(vue@3.4.26): - resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} + '@vitejs/plugin-vue@5.0.5': + resolution: {integrity: sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 vue: ^3.2.25 - dependencies: - vite: 5.2.11(@types/node@20.12.8)(less@4.2.0) - vue: 3.4.26 - dev: false - /@vue/compiler-core@3.4.26: - resolution: {integrity: sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==} - dependencies: - '@babel/parser': 7.24.5 - '@vue/shared': 3.4.26 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.2.0 - dev: false + '@vue/compiler-core@3.4.33': + resolution: {integrity: sha512-MoIREbkdPQlnGfSKDMgzTqzqx5nmEjIc0ydLVYlTACGBsfvOJ4tHSbZXKVF536n6fB+0eZaGEOqsGThPpdvF5A==} - /@vue/compiler-dom@3.4.26: - resolution: {integrity: sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==} - dependencies: - '@vue/compiler-core': 3.4.26 - '@vue/shared': 3.4.26 - dev: false + '@vue/compiler-dom@3.4.33': + resolution: {integrity: sha512-GzB8fxEHKw0gGet5BKlpfXEqoBnzSVWwMnT+dc25wE7pFEfrU/QsvjZMP9rD4iVXHBBoemTct8mN0GJEI6ZX5A==} - /@vue/compiler-sfc@3.4.26: - resolution: {integrity: sha512-It1dp+FAOCgluYSVYlDn5DtZBxk1NCiJJfu2mlQqa/b+k8GL6NG/3/zRbJnHdhV2VhxFghaDq5L4K+1dakW6cw==} - dependencies: - '@babel/parser': 7.24.5 - '@vue/compiler-core': 3.4.26 - '@vue/compiler-dom': 3.4.26 - '@vue/compiler-ssr': 3.4.26 - '@vue/shared': 3.4.26 - estree-walker: 2.0.2 - magic-string: 0.30.10 - postcss: 8.4.38 - source-map-js: 1.2.0 - dev: false + '@vue/compiler-sfc@3.4.33': + resolution: {integrity: sha512-7rk7Vbkn21xMwIUpHQR4hCVejwE6nvhBOiDgoBcR03qvGqRKA7dCBSsHZhwhYUsmjlbJ7OtD5UFIyhP6BY+c8A==} - /@vue/compiler-ssr@3.4.26: - resolution: {integrity: sha512-FNwLfk7LlEPRY/g+nw2VqiDKcnDTVdCfBREekF8X74cPLiWHUX6oldktf/Vx28yh4STNy7t+/yuLoMBBF7YDiQ==} - dependencies: - '@vue/compiler-dom': 3.4.26 - '@vue/shared': 3.4.26 - dev: false + '@vue/compiler-ssr@3.4.33': + resolution: {integrity: sha512-0WveC9Ai+eT/1b6LCV5IfsufBZ0HP7pSSTdDjcuW302tTEgoBw8rHVHKPbGUtzGReUFCRXbv6zQDDgucnV2WzQ==} - /@vue/devtools-api@7.1.3(vue@3.4.26): - resolution: {integrity: sha512-W8IwFJ/o5iUk78jpqhvScbgCsPiOp2uileDVC0NDtW38gCWhsnu9SeBTjcdu3lbwLdsjc+H1c5Msd/x9ApbcFA==} - dependencies: - '@vue/devtools-kit': 7.1.3(vue@3.4.26) - transitivePeerDependencies: - - vue - dev: false + '@vue/devtools-api@7.3.6': + resolution: {integrity: sha512-z6cKyxdXrIGgA++eyGBfquj6dCplRdgjt+I18fJx8hjWTXDTIyeQvryyEBMchnfZVyvUTjK3QjGjDpLCnJxPjw==} - /@vue/devtools-kit@7.1.3(vue@3.4.26): - resolution: {integrity: sha512-NFskFSJMVCBXTkByuk2llzI3KD3Blcm7WqiRorWjD6nClHPgkH5BobDH08rfulqq5ocRt5xV+3qOT1Q9FXJrwQ==} - peerDependencies: - vue: ^3.0.0 - dependencies: - '@vue/devtools-shared': 7.1.3 - hookable: 5.5.3 - mitt: 3.0.1 - perfect-debounce: 1.0.0 - speakingurl: 14.0.1 - vue: 3.4.26 - dev: false + '@vue/devtools-kit@7.3.6': + resolution: {integrity: sha512-5Ym9V3fkJenEoptqKoo+cgY5RTVwrSssFdzRsuyIgaeiskCT+rRJeQdwoo81tyrQ1mfS7Er1rYZlSzr3Y3L/ew==} - /@vue/devtools-shared@7.1.3: - resolution: {integrity: sha512-KJ3AfgjTn3tJz/XKF+BlVShNPecim3G21oHRue+YQOsooW+0s+qXvm09U09aO7yBza5SivL1QgxSrzAbiKWjhQ==} - dependencies: - rfdc: 1.3.1 - dev: false + '@vue/devtools-shared@7.3.6': + resolution: {integrity: sha512-R/FOmdJV+hhuwcNoxp6e87RRkEeDMVhWH+nOsnHUrwjjsyeXJ2W1475Ozmw+cbZhejWQzftkHVKO28Fuo1yqCw==} - /@vue/reactivity@3.4.26: - resolution: {integrity: sha512-E/ynEAu/pw0yotJeLdvZEsp5Olmxt+9/WqzvKff0gE67tw73gmbx6tRkiagE/eH0UCubzSlGRebCbidB1CpqZQ==} - dependencies: - '@vue/shared': 3.4.26 - dev: false + '@vue/reactivity@3.4.33': + resolution: {integrity: sha512-B24QIelahDbyHipBgbUItQblbd4w5HpG3KccL+YkGyo3maXyS253FzcTR3pSz739OTphmzlxP7JxEMWBpewilA==} - /@vue/runtime-core@3.4.26: - resolution: {integrity: sha512-AFJDLpZvhT4ujUgZSIL9pdNcO23qVFh7zWCsNdGQBw8ecLNxOOnPcK9wTTIYCmBJnuPHpukOwo62a2PPivihqw==} - dependencies: - '@vue/reactivity': 3.4.26 - '@vue/shared': 3.4.26 - dev: false + '@vue/runtime-core@3.4.33': + resolution: {integrity: sha512-6wavthExzT4iAxpe8q37/rDmf44nyOJGISJPxCi9YsQO+8w9v0gLCFLfH5TzD1V1AYrTAdiF4Y1cgUmP68jP6w==} - /@vue/runtime-dom@3.4.26: - resolution: {integrity: sha512-UftYA2hUXR2UOZD/Fc3IndZuCOOJgFxJsWOxDkhfVcwLbsfh2CdXE2tG4jWxBZuDAs9J9PzRTUFt1PgydEtItw==} - dependencies: - '@vue/runtime-core': 3.4.26 - '@vue/shared': 3.4.26 - csstype: 3.1.3 - dev: false + '@vue/runtime-dom@3.4.33': + resolution: {integrity: sha512-iHsMCUSFJ+4z432Bn9kZzHX+zOXa6+iw36DaVRmKYZpPt9jW9riF32SxNwB124i61kp9+AZtheQ/mKoJLerAaQ==} - /@vue/server-renderer@3.4.26(vue@3.4.26): - resolution: {integrity: sha512-xoGAqSjYDPGAeRWxeoYwqJFD/gw7mpgzOvSxEmjWaFO2rE6qpbD1PC172YRpvKhrihkyHJkNDADFXTfCyVGhKw==} + '@vue/server-renderer@3.4.33': + resolution: {integrity: sha512-jTH0d6gQcaYideFP/k0WdEu8PpRS9MF8d0b6SfZzNi+ap972pZ0TNIeTaESwdOtdY0XPVj54XEJ6K0wXxir4fw==} peerDependencies: - vue: 3.4.26 - dependencies: - '@vue/compiler-ssr': 3.4.26 - '@vue/shared': 3.4.26 - vue: 3.4.26 - dev: false + vue: 3.4.33 - /@vue/shared@3.4.26: - resolution: {integrity: sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==} - dev: false + '@vue/shared@3.4.33': + resolution: {integrity: sha512-aoRY0jQk3A/cuvdkodTrM4NMfxco8n55eG4H7ML/CRy7OryHfiqvug4xrCBBMbbN+dvXAetDDwZW9DXWWjBntA==} - /@vueuse/core@10.9.0(vue@3.4.26): - resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} - dependencies: - '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 10.9.0 - '@vueuse/shared': 10.9.0(vue@3.4.26) - vue-demi: 0.14.7(vue@3.4.26) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: false + '@vueuse/core@10.11.0': + resolution: {integrity: sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==} - /@vueuse/integrations@10.9.0(focus-trap@7.5.4)(vue@3.4.26): - resolution: {integrity: sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==} + '@vueuse/integrations@10.11.0': + resolution: {integrity: sha512-Pp6MtWEIr+NDOccWd8j59Kpjy5YDXogXI61Kb1JxvSfVBO8NzFQkmrKmSZz47i+ZqHnIzxaT38L358yDHTncZg==} peerDependencies: - async-validator: '*' - axios: '*' - change-case: '*' - drauu: '*' - focus-trap: '*' - fuse.js: '*' - idb-keyval: '*' - jwt-decode: '*' - nprogress: '*' - qrcode: '*' - sortablejs: '*' - universal-cookie: '*' + async-validator: ^4 + axios: ^1 + change-case: ^4 + drauu: ^0.3 + focus-trap: ^7 + fuse.js: ^6 + idb-keyval: ^6 + jwt-decode: ^3 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^6 peerDependenciesMeta: async-validator: optional: true @@ -782,339 +468,190 @@ packages: optional: true universal-cookie: optional: true - dependencies: - '@vueuse/core': 10.9.0(vue@3.4.26) - '@vueuse/shared': 10.9.0(vue@3.4.26) - focus-trap: 7.5.4 - vue-demi: 0.14.7(vue@3.4.26) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: false - /@vueuse/metadata@10.9.0: - resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==} - dev: false + '@vueuse/metadata@10.11.0': + resolution: {integrity: sha512-kQX7l6l8dVWNqlqyN3ePW3KmjCQO3ZMgXuBMddIu83CmucrsBfXlH+JoviYyRBws/yLTQO8g3Pbw+bdIoVm4oQ==} - /@vueuse/shared@10.9.0(vue@3.4.26): - resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} - dependencies: - vue-demi: 0.14.7(vue@3.4.26) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: false + '@vueuse/shared@10.11.0': + resolution: {integrity: sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==} - /algoliasearch@4.23.3: - resolution: {integrity: sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==} - dependencies: - '@algolia/cache-browser-local-storage': 4.23.3 - '@algolia/cache-common': 4.23.3 - '@algolia/cache-in-memory': 4.23.3 - '@algolia/client-account': 4.23.3 - '@algolia/client-analytics': 4.23.3 - '@algolia/client-common': 4.23.3 - '@algolia/client-personalization': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/logger-console': 4.23.3 - '@algolia/recommend': 4.23.3 - '@algolia/requester-browser-xhr': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false - - /copy-anything@2.0.6: + algoliasearch@4.24.0: + resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} + + birpc@0.2.17: + resolution: {integrity: sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==} + + copy-anything@2.0.6: resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} - dependencies: - is-what: 3.14.1 - /csstype@3.1.3: + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: false - /entities@4.5.0: + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - dev: false - /errno@0.1.8: + errno@0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true - requiresBuild: true - dependencies: - prr: 1.0.1 - optional: true - /esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 - dev: false - - /estree-walker@2.0.2: + + estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: false - /focus-trap@7.5.4: + focus-trap@7.5.4: resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} - dependencies: - tabbable: 6.2.0 - dev: false - /fsevents@2.3.3: + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - requiresBuild: true - dev: false - optional: true - /graceful-fs@4.2.11: + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - requiresBuild: true - optional: true - /hookable@5.5.3: + hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - dev: false - /iconv-lite@0.6.3: + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - requiresBuild: true - dependencies: - safer-buffer: 2.1.2 - optional: true - /image-size@0.5.5: + image-size@0.5.5: resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} engines: {node: '>=0.10.0'} hasBin: true - requiresBuild: true - optional: true - /is-what@3.14.1: + is-what@3.14.1: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} - /less@4.2.0: + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + less@4.2.0: resolution: {integrity: sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==} engines: {node: '>=6'} hasBin: true - dependencies: - copy-anything: 2.0.6 - parse-node-version: 1.0.1 - tslib: 2.6.2 - optionalDependencies: - errno: 0.1.8 - graceful-fs: 4.2.11 - image-size: 0.5.5 - make-dir: 2.1.0 - mime: 1.6.0 - needle: 3.3.1 - source-map: 0.6.1 - /magic-string@0.30.10: + magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: false - /make-dir@2.1.0: + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} - requiresBuild: true - dependencies: - pify: 4.0.1 - semver: 5.7.2 - optional: true - /mark.js@8.11.1: + mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} - dev: false - /mime@1.6.0: + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true - requiresBuild: true - optional: true - /minisearch@6.3.0: - resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} - dev: false + minisearch@7.0.2: + resolution: {integrity: sha512-Pf0sFXaCgRpOBDr4G8wTbVAEH9o9rvJzCMwj0TMe3L/NfUuG188xabfx6Vm3vD/Dv5L500n7JeiMB9Mq3sWMfQ==} - /mitt@3.0.1: + mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - dev: false - /nanoid@3.3.7: + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: false - /needle@3.3.1: + needle@3.3.1: resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} engines: {node: '>= 4.4.x'} hasBin: true - requiresBuild: true - dependencies: - iconv-lite: 0.6.3 - sax: 1.3.0 - optional: true - /parse-node-version@1.0.1: + parse-node-version@1.0.1: resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} engines: {node: '>= 0.10'} - /perfect-debounce@1.0.0: + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - dev: false - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: false + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - /pify@4.0.1: + pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - requiresBuild: true - optional: true - /postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + postcss@8.4.39: + resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.2.0 - dev: false - /preact@10.21.0: - resolution: {integrity: sha512-aQAIxtzWEwH8ou+OovWVSVNlFImL7xUCwJX3YMqA3U8iKCNC34999fFOnWjYNsylgfPgMexpbk7WYOLtKr/mxg==} - dev: false + preact@10.22.1: + resolution: {integrity: sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==} - /prr@1.0.1: + prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - requiresBuild: true - optional: true - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} - dev: false + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - /rollup@4.17.2: - resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} + rollup@4.18.1: + resolution: {integrity: sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.17.2 - '@rollup/rollup-android-arm64': 4.17.2 - '@rollup/rollup-darwin-arm64': 4.17.2 - '@rollup/rollup-darwin-x64': 4.17.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 - '@rollup/rollup-linux-arm-musleabihf': 4.17.2 - '@rollup/rollup-linux-arm64-gnu': 4.17.2 - '@rollup/rollup-linux-arm64-musl': 4.17.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 - '@rollup/rollup-linux-riscv64-gnu': 4.17.2 - '@rollup/rollup-linux-s390x-gnu': 4.17.2 - '@rollup/rollup-linux-x64-gnu': 4.17.2 - '@rollup/rollup-linux-x64-musl': 4.17.2 - '@rollup/rollup-win32-arm64-msvc': 4.17.2 - '@rollup/rollup-win32-ia32-msvc': 4.17.2 - '@rollup/rollup-win32-x64-msvc': 4.17.2 - fsevents: 2.3.3 - dev: false - /safer-buffer@2.1.2: + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - requiresBuild: true - optional: true - /sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} - requiresBuild: true - optional: true + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - /search-insights@2.13.0: + search-insights@2.13.0: resolution: {integrity: sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==} - dev: false - /semver@5.7.2: + semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true - requiresBuild: true - optional: true - /shiki@1.4.0: - resolution: {integrity: sha512-5WIn0OL8PWm7JhnTwRWXniy6eEDY234mRrERVlFa646V2ErQqwIFd2UML7e0Pq9eqSKLoMa3Ke+xbsF+DAuy+Q==} - dependencies: - '@shikijs/core': 1.4.0 - dev: false + shiki@1.10.3: + resolution: {integrity: sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==} - /source-map-js@1.2.0: + source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} - dev: false - /source-map@0.6.1: + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - requiresBuild: true - optional: true - /speakingurl@14.0.1: + speakingurl@14.0.1: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} - dev: false - /tabbable@6.2.0: + superjson@2.2.1: + resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} + engines: {node: '>=16'} + + tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - dev: false - /to-fast-properties@2.0.0: + to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: false - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - /undici-types@5.26.5: + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - /vite@5.2.11(@types/node@20.12.8)(less@4.2.0): - resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} + vite@5.3.4: + resolution: {integrity: sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -1140,18 +677,9 @@ packages: optional: true terser: optional: true - dependencies: - '@types/node': 20.12.8 - esbuild: 0.20.2 - less: 4.2.0 - postcss: 8.4.38 - rollup: 4.17.2 - optionalDependencies: - fsevents: 2.3.3 - dev: false - /vitepress@1.1.4(@algolia/client-search@4.23.3)(@types/node@20.12.8)(less@4.2.0)(search-insights@2.13.0): - resolution: {integrity: sha512-bWIzFZXpPB6NIDBuWnS20aMADH+FcFKDfQNYFvbOWij03PR29eImTceQHIzCKordjXYBhM/TjE5VKFTUJ3EheA==} + vitepress@1.3.1: + resolution: {integrity: sha512-soZDpg2rRVJNIM/IYMNDPPr+zTHDA5RbLDHAxacRu+Q9iZ2GwSR0QSUlLs+aEZTkG0SOX1dc8RmUYwyuxK8dfQ==} hasBin: true peerDependencies: markdown-it-mathjax3: ^4 @@ -1161,76 +689,701 @@ packages: optional: true postcss: optional: true - dependencies: - '@docsearch/css': 3.6.0 - '@docsearch/js': 3.6.0(@algolia/client-search@4.23.3)(search-insights@2.13.0) - '@shikijs/core': 1.4.0 - '@shikijs/transformers': 1.4.0 - '@types/markdown-it': 14.1.1 - '@vitejs/plugin-vue': 5.0.4(vite@5.2.11)(vue@3.4.26) - '@vue/devtools-api': 7.1.3(vue@3.4.26) - '@vueuse/core': 10.9.0(vue@3.4.26) - '@vueuse/integrations': 10.9.0(focus-trap@7.5.4)(vue@3.4.26) - focus-trap: 7.5.4 - mark.js: 8.11.1 - minisearch: 6.3.0 - shiki: 1.4.0 - vite: 5.2.11(@types/node@20.12.8)(less@4.2.0) - vue: 3.4.26 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/node' - - '@types/react' - - '@vue/composition-api' - - async-validator - - axios - - change-case - - drauu - - fuse.js - - idb-keyval - - jwt-decode - - less - - lightningcss - - nprogress - - qrcode - - react - - react-dom - - sass - - search-insights - - sortablejs - - stylus - - sugarss - - terser - - typescript - - universal-cookie - dev: false - /vue-demi@0.14.7(vue@3.4.26): - resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} + vue-demi@0.14.8: + resolution: {integrity: sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==} engines: {node: '>=12'} hasBin: true - requiresBuild: true peerDependencies: '@vue/composition-api': ^1.0.0-rc.1 vue: ^3.0.0-0 || ^2.6.0 peerDependenciesMeta: '@vue/composition-api': optional: true - dependencies: - vue: 3.4.26 - dev: false - /vue@3.4.26: - resolution: {integrity: sha512-bUIq/p+VB+0xrJubaemrfhk1/FiW9iX+pDV+62I/XJ6EkspAO9/DXEjbDFoe8pIfOZBqfk45i9BMc41ptP/uRg==} + vue@3.4.33: + resolution: {integrity: sha512-VdMCWQOummbhctl4QFMcW6eNtXHsFyDlX60O/tsSQuCcuDOnJ1qPOhhVla65Niece7xq/P2zyZReIO5mP+LGTQ==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true + +snapshots: + + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.13.0)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.13.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.13.0)': + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + search-insights: 2.13.0 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@algolia/client-search': 4.24.0 + algoliasearch: 4.24.0 + + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + dependencies: + '@algolia/client-search': 4.24.0 + algoliasearch: 4.24.0 + + '@algolia/cache-browser-local-storage@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + + '@algolia/cache-common@4.24.0': {} + + '@algolia/cache-in-memory@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + + '@algolia/client-account@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-analytics@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-common@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-personalization@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-search@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/logger-common@4.24.0': {} + + '@algolia/logger-console@4.24.0': + dependencies: + '@algolia/logger-common': 4.24.0 + + '@algolia/recommend@4.24.0': + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/requester-browser-xhr@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + + '@algolia/requester-common@4.24.0': {} + + '@algolia/requester-node-http@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + + '@algolia/transporter@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/parser@7.24.8': + dependencies: + '@babel/types': 7.24.9 + + '@babel/types@7.24.9': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@docsearch/css@3.6.1': {} + + '@docsearch/js@3.6.1(@algolia/client-search@4.24.0)(search-insights@2.13.0)': + dependencies: + '@docsearch/react': 3.6.1(@algolia/client-search@4.24.0)(search-insights@2.13.0) + preact: 10.22.1 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + + '@docsearch/react@3.6.1(@algolia/client-search@4.24.0)(search-insights@2.13.0)': + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.13.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@docsearch/css': 3.6.1 + algoliasearch: 4.24.0 + optionalDependencies: + search-insights: 2.13.0 + transitivePeerDependencies: + - '@algolia/client-search' + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@rollup/rollup-android-arm-eabi@4.18.1': + optional: true + + '@rollup/rollup-android-arm64@4.18.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.18.1': + optional: true + + '@rollup/rollup-darwin-x64@4.18.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.18.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.18.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.18.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.18.1': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.18.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.18.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.18.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.18.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.18.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.18.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.18.1': + optional: true + + '@shikijs/core@1.10.3': + dependencies: + '@types/hast': 3.0.4 + + '@shikijs/transformers@1.10.3': + dependencies: + shiki: 1.10.3 + + '@types/estree@1.0.5': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.2 + + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.1': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdurl@2.0.0': {} + + '@types/node@20.14.11': + dependencies: + undici-types: 5.26.5 + + '@types/unist@3.0.2': {} + + '@types/web-bluetooth@0.0.20': {} + + '@vitejs/plugin-vue@5.0.5(vite@5.3.4(@types/node@20.14.11)(less@4.2.0))(vue@3.4.33)': + dependencies: + vite: 5.3.4(@types/node@20.14.11)(less@4.2.0) + vue: 3.4.33 + + '@vue/compiler-core@3.4.33': + dependencies: + '@babel/parser': 7.24.8 + '@vue/shared': 3.4.33 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + + '@vue/compiler-dom@3.4.33': + dependencies: + '@vue/compiler-core': 3.4.33 + '@vue/shared': 3.4.33 + + '@vue/compiler-sfc@3.4.33': + dependencies: + '@babel/parser': 7.24.8 + '@vue/compiler-core': 3.4.33 + '@vue/compiler-dom': 3.4.33 + '@vue/compiler-ssr': 3.4.33 + '@vue/shared': 3.4.33 + estree-walker: 2.0.2 + magic-string: 0.30.10 + postcss: 8.4.39 + source-map-js: 1.2.0 + + '@vue/compiler-ssr@3.4.33': + dependencies: + '@vue/compiler-dom': 3.4.33 + '@vue/shared': 3.4.33 + + '@vue/devtools-api@7.3.6': + dependencies: + '@vue/devtools-kit': 7.3.6 + + '@vue/devtools-kit@7.3.6': + dependencies: + '@vue/devtools-shared': 7.3.6 + birpc: 0.2.17 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.1 + + '@vue/devtools-shared@7.3.6': + dependencies: + rfdc: 1.4.1 + + '@vue/reactivity@3.4.33': + dependencies: + '@vue/shared': 3.4.33 + + '@vue/runtime-core@3.4.33': + dependencies: + '@vue/reactivity': 3.4.33 + '@vue/shared': 3.4.33 + + '@vue/runtime-dom@3.4.33': + dependencies: + '@vue/reactivity': 3.4.33 + '@vue/runtime-core': 3.4.33 + '@vue/shared': 3.4.33 + csstype: 3.1.3 + + '@vue/server-renderer@3.4.33(vue@3.4.33)': + dependencies: + '@vue/compiler-ssr': 3.4.33 + '@vue/shared': 3.4.33 + vue: 3.4.33 + + '@vue/shared@3.4.33': {} + + '@vueuse/core@10.11.0(vue@3.4.33)': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.11.0 + '@vueuse/shared': 10.11.0(vue@3.4.33) + vue-demi: 0.14.8(vue@3.4.33) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/integrations@10.11.0(focus-trap@7.5.4)(vue@3.4.33)': + dependencies: + '@vueuse/core': 10.11.0(vue@3.4.33) + '@vueuse/shared': 10.11.0(vue@3.4.33) + vue-demi: 0.14.8(vue@3.4.33) + optionalDependencies: + focus-trap: 7.5.4 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@10.11.0': {} + + '@vueuse/shared@10.11.0(vue@3.4.33)': + dependencies: + vue-demi: 0.14.8(vue@3.4.33) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + algoliasearch@4.24.0: + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-account': 4.24.0 + '@algolia/client-analytics': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-personalization': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/recommend': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 + + birpc@0.2.17: {} + + copy-anything@2.0.6: + dependencies: + is-what: 3.14.1 + + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + + csstype@3.1.3: {} + + entities@4.5.0: {} + + errno@0.1.8: + dependencies: + prr: 1.0.1 + optional: true + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + estree-walker@2.0.2: {} + + focus-trap@7.5.4: + dependencies: + tabbable: 6.2.0 + + fsevents@2.3.3: + optional: true + + graceful-fs@4.2.11: + optional: true + + hookable@5.5.3: {} + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + optional: true + + image-size@0.5.5: + optional: true + + is-what@3.14.1: {} + + is-what@4.1.16: {} + + less@4.2.0: + dependencies: + copy-anything: 2.0.6 + parse-node-version: 1.0.1 + tslib: 2.6.3 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 3.3.1 + source-map: 0.6.1 + + magic-string@0.30.10: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + optional: true + + mark.js@8.11.1: {} + + mime@1.6.0: + optional: true + + minisearch@7.0.2: {} + + mitt@3.0.1: {} + + nanoid@3.3.7: {} + + needle@3.3.1: + dependencies: + iconv-lite: 0.6.3 + sax: 1.4.1 + optional: true + + parse-node-version@1.0.1: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.0.1: {} + + pify@4.0.1: + optional: true + + postcss@8.4.39: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + + preact@10.22.1: {} + + prr@1.0.1: + optional: true + + rfdc@1.4.1: {} + + rollup@4.18.1: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.18.1 + '@rollup/rollup-android-arm64': 4.18.1 + '@rollup/rollup-darwin-arm64': 4.18.1 + '@rollup/rollup-darwin-x64': 4.18.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.1 + '@rollup/rollup-linux-arm-musleabihf': 4.18.1 + '@rollup/rollup-linux-arm64-gnu': 4.18.1 + '@rollup/rollup-linux-arm64-musl': 4.18.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.1 + '@rollup/rollup-linux-riscv64-gnu': 4.18.1 + '@rollup/rollup-linux-s390x-gnu': 4.18.1 + '@rollup/rollup-linux-x64-gnu': 4.18.1 + '@rollup/rollup-linux-x64-musl': 4.18.1 + '@rollup/rollup-win32-arm64-msvc': 4.18.1 + '@rollup/rollup-win32-ia32-msvc': 4.18.1 + '@rollup/rollup-win32-x64-msvc': 4.18.1 + fsevents: 2.3.3 + + safer-buffer@2.1.2: + optional: true + + sax@1.4.1: + optional: true + + search-insights@2.13.0: {} + + semver@5.7.2: + optional: true + + shiki@1.10.3: + dependencies: + '@shikijs/core': 1.10.3 + '@types/hast': 3.0.4 + + source-map-js@1.2.0: {} + + source-map@0.6.1: + optional: true + + speakingurl@14.0.1: {} + + superjson@2.2.1: + dependencies: + copy-anything: 3.0.5 + + tabbable@6.2.0: {} + + to-fast-properties@2.0.0: {} + + tslib@2.6.3: {} + + undici-types@5.26.5: {} + + vite@5.3.4(@types/node@20.14.11)(less@4.2.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.39 + rollup: 4.18.1 + optionalDependencies: + '@types/node': 20.14.11 + fsevents: 2.3.3 + less: 4.2.0 + + vitepress@1.3.1(@algolia/client-search@4.24.0)(@types/node@20.14.11)(less@4.2.0)(postcss@8.4.39)(search-insights@2.13.0): + dependencies: + '@docsearch/css': 3.6.1 + '@docsearch/js': 3.6.1(@algolia/client-search@4.24.0)(search-insights@2.13.0) + '@shikijs/core': 1.10.3 + '@shikijs/transformers': 1.10.3 + '@types/markdown-it': 14.1.1 + '@vitejs/plugin-vue': 5.0.5(vite@5.3.4(@types/node@20.14.11)(less@4.2.0))(vue@3.4.33) + '@vue/devtools-api': 7.3.6 + '@vue/shared': 3.4.33 + '@vueuse/core': 10.11.0(vue@3.4.33) + '@vueuse/integrations': 10.11.0(focus-trap@7.5.4)(vue@3.4.33) + focus-trap: 7.5.4 + mark.js: 8.11.1 + minisearch: 7.0.2 + shiki: 1.10.3 + vite: 5.3.4(@types/node@20.14.11)(less@4.2.0) + vue: 3.4.33 + optionalDependencies: + postcss: 8.4.39 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + + vue-demi@0.14.8(vue@3.4.33): + dependencies: + vue: 3.4.33 + + vue@3.4.33: dependencies: - '@vue/compiler-dom': 3.4.26 - '@vue/compiler-sfc': 3.4.26 - '@vue/runtime-dom': 3.4.26 - '@vue/server-renderer': 3.4.26(vue@3.4.26) - '@vue/shared': 3.4.26 - dev: false + '@vue/compiler-dom': 3.4.33 + '@vue/compiler-sfc': 3.4.33 + '@vue/runtime-dom': 3.4.33 + '@vue/server-renderer': 3.4.33(vue@3.4.33) + '@vue/shared': 3.4.33 diff --git a/docs/zh_CN/guide/config-auth.md b/docs/zh_CN/guide/config-auth.md new file mode 100644 index 000000000..3d0fb9e12 --- /dev/null +++ b/docs/zh_CN/guide/config-auth.md @@ -0,0 +1,18 @@ +# Auth +从 v2.0.0-beta.26 版本开始,您可以在配置文件的 `auth` 部分设置授权选项。 + +## IPWhiteList +- 类型:`string` +- 示例:`10.0.0.1` + +```ini +[auth] +IPWhiteList = 10.0.0.1 +IPWhiteList = 10.0.0.2 +IPWhiteList = 10.0.0.3 +``` + +默认情况下,如果您没有设置 `IPWhiteList`,所有 IP 地址都允许访问 Nginx UI。 + +一旦您设置了 `IPWhiteList`,只有列表中和 `127.0.0.1` 的 IP 地址的用户可以访问 Nginx UI, +其他人将收到 `403 Forbidden` 错误。 diff --git a/docs/zh_CN/guide/env.md b/docs/zh_CN/guide/env.md index 79f63feba..9960968db 100644 --- a/docs/zh_CN/guide/env.md +++ b/docs/zh_CN/guide/env.md @@ -1,7 +1,7 @@ # 环境变量 适用于 v2.0.0-beta.23 及以上版本 -## 服务器 +## Server | Configuration Setting | Environment Variable | | ----------------------------- | ------------------------------------- | @@ -63,6 +63,12 @@ | CMD | NGINX_UI_LOGROTATE_CMD | | Interval | NGINX_UI_LOGROTATE_INTERVAL | +## Auth + +| Configuration Setting | Environment Variable | +|-----------------------|-----------------------------| +| IPWhiteList | NGINX_UI_AUTH_IPWhiteList | + ## 预定义用户 在跳过安装模式下,您可以设置以下环境变量以创建预定义用户: diff --git a/docs/zh_TW/guide/config-auth.md b/docs/zh_TW/guide/config-auth.md new file mode 100644 index 000000000..ed9985728 --- /dev/null +++ b/docs/zh_TW/guide/config-auth.md @@ -0,0 +1,17 @@ +# Auth +從 v2.0.0-beta.26 版本開始,您可以在配置文件的 `auth` 部分設置授權選項。 + +## IPWhiteList +- 類型:`string` +- 範例:`10.0.0.1` + +```ini +[auth] +IPWhiteList = 10.0.0.1 +IPWhiteList = 10.0.0.2 +IPWhiteList = 10.0.0.3 +``` + +默認情況下,如果您沒有設置 IPWhiteList,所有 IP 地址都允許訪問 Nginx UI。 +一旦您設置了 IPWhiteList,只有列表中和 `127.0.0.1` 的 IP 地址的用戶可以訪問 Nginx UI, +其他人將收到 `403 Forbidden` 錯誤。 diff --git a/docs/zh_TW/guide/env.md b/docs/zh_TW/guide/env.md index 7b933f717..a5ea2eed7 100644 --- a/docs/zh_TW/guide/env.md +++ b/docs/zh_TW/guide/env.md @@ -1,7 +1,7 @@ # 環境變量 適用於 v2.0.0-beta.23 及以上版本 -## 伺服器 +## Server | Configuration Setting | Environment Variable | | ----------------------------- | ------------------------------------- | @@ -63,6 +63,12 @@ | CMD | NGINX_UI_LOGROTATE_CMD | | Interval | NGINX_UI_LOGROTATE_INTERVAL | +## Auth + +| Configuration Setting | Environment Variable | +|-----------------------|-----------------------------| +| IPWhiteList | NGINX_UI_AUTH_IPWhiteList | + ## 預定義使用者 在跳過安裝模式下,您可以設置以下環境變量以創建預定義使用者: From ccb04c07d81eaa9990ba90f988f54c4c5105d993 Mon Sep 17 00:00:00 2001 From: Jacky Date: Sat, 20 Jul 2024 18:35:06 +0800 Subject: [PATCH 3/5] enhance: handle websocket error --- api/analytic/analytic.go | 6 +- api/analytic/nodes.go | 11 +--- api/certificate/issue.go | 6 +- api/system/upgrade.go | 73 ++++++++++++++----------- api/upstream/upstream.go | 7 +-- internal/helper/websocket_error.go | 22 ++++++++ internal/helper/websocket_error_test.go | 38 +++++++++++++ internal/upgrader/upgrade.go | 23 +++++--- 8 files changed, 126 insertions(+), 60 deletions(-) create mode 100644 internal/helper/websocket_error.go create mode 100644 internal/helper/websocket_error_test.go diff --git a/api/analytic/analytic.go b/api/analytic/analytic.go index 60158b68b..3551cf5cc 100644 --- a/api/analytic/analytic.go +++ b/api/analytic/analytic.go @@ -3,6 +3,7 @@ package analytic import ( "fmt" "github.com/0xJacky/Nginx-UI/internal/analytic" + "github.com/0xJacky/Nginx-UI/internal/helper" "github.com/0xJacky/Nginx-UI/internal/logger" "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/host" @@ -75,10 +76,7 @@ func Analytic(c *gin.Context) { // write err = ws.WriteJSON(stat) - if err != nil || websocket.IsUnexpectedCloseError(err, - websocket.CloseGoingAway, - websocket.CloseNoStatusReceived, - websocket.CloseNormalClosure) { + if helper.IsUnexpectedWebsocketError(err) { logger.Error(err) break } diff --git a/api/analytic/nodes.go b/api/analytic/nodes.go index 313b3c05b..b880991ca 100644 --- a/api/analytic/nodes.go +++ b/api/analytic/nodes.go @@ -2,6 +2,7 @@ package analytic import ( "github.com/0xJacky/Nginx-UI/internal/analytic" + "github.com/0xJacky/Nginx-UI/internal/helper" "github.com/0xJacky/Nginx-UI/internal/logger" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" @@ -27,10 +28,7 @@ func GetNodeStat(c *gin.Context) { for { // write err = ws.WriteJSON(analytic.GetNodeStat()) - if err != nil || websocket.IsUnexpectedCloseError(err, - websocket.CloseGoingAway, - websocket.CloseNoStatusReceived, - websocket.CloseNormalClosure) { + if helper.IsUnexpectedWebsocketError(err) { logger.Error(err) break } @@ -57,10 +55,7 @@ func GetNodesAnalytic(c *gin.Context) { for { // write err = ws.WriteJSON(analytic.NodeMap) - if err != nil || websocket.IsUnexpectedCloseError(err, - websocket.CloseGoingAway, - websocket.CloseNoStatusReceived, - websocket.CloseNormalClosure) { + if helper.IsUnexpectedWebsocketError(err) { logger.Error(err) break } diff --git a/api/certificate/issue.go b/api/certificate/issue.go index b631c6422..367248328 100644 --- a/api/certificate/issue.go +++ b/api/certificate/issue.go @@ -32,14 +32,12 @@ func handleIssueCertLogChan(conn *websocket.Conn, log *cert.Logger, logChan chan }() for logString := range logChan { - log.Info(logString) err := conn.WriteJSON(IssueCertResponse{ Status: Info, Message: logString, }) - if err != nil { logger.Error(err) return @@ -110,7 +108,6 @@ func IssueCert(c *gin.Context) { Status: Error, Message: err.Error(), }) - if err != nil { logger.Error(err) return @@ -132,7 +129,7 @@ func IssueCert(c *gin.Context) { if err != nil { logger.Error(err) - err = ws.WriteJSON(IssueCertResponse{ + _ = ws.WriteJSON(IssueCertResponse{ Status: Error, Message: err.Error(), }) @@ -149,7 +146,6 @@ func IssueCert(c *gin.Context) { SSLCertificateKey: payload.GetCertificateKeyPath(), KeyType: payload.GetKeyType(), }) - if err != nil { logger.Error(err) return diff --git a/api/system/upgrade.go b/api/system/upgrade.go index 83de6ab3b..131572d2f 100644 --- a/api/system/upgrade.go +++ b/api/system/upgrade.go @@ -41,6 +41,18 @@ func GetCurrentVersion(c *gin.Context) { c.JSON(http.StatusOK, curVer) } +const ( + UpgradeStatusInfo = "info" + UpgradeStatusError = "error" + UpgradeStatusProgress = "progress" +) + +type CoreUpgradeResp struct { + Status string `json:"status"` + Progress float64 `json:"progress"` + Message string `json:"message"` +} + func PerformCoreUpgrade(c *gin.Context) { var upGrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { @@ -67,49 +79,48 @@ func PerformCoreUpgrade(c *gin.Context) { return } - _ = ws.WriteJSON(gin.H{ - "status": "info", - "message": "Initialing core upgrader", + _ = ws.WriteJSON(CoreUpgradeResp{ + Status: UpgradeStatusInfo, + Message: "Initialing core upgrader", }) u, err := upgrader.NewUpgrader(control.Channel) if err != nil { - _ = ws.WriteJSON(gin.H{ - "status": "error", - "message": "Initial core upgrader error", + _ = ws.WriteJSON(CoreUpgradeResp{ + Status: UpgradeStatusError, + Message: "Initial core upgrader error", }) - _ = ws.WriteJSON(gin.H{ - "status": "error", - "message": err.Error(), + _ = ws.WriteJSON(CoreUpgradeResp{ + Status: UpgradeStatusError, + Message: err.Error(), }) logger.Error(err) return } - _ = ws.WriteJSON(gin.H{ - "status": "info", - "message": "Downloading latest release", + _ = ws.WriteJSON(CoreUpgradeResp{ + Status: UpgradeStatusInfo, + Message: "Downloading latest release", }) progressChan := make(chan float64) go func() { for progress := range progressChan { - _ = ws.WriteJSON(gin.H{ - "status": "progress", - "progress": progress, + _ = ws.WriteJSON(CoreUpgradeResp{ + Status: UpgradeStatusProgress, + Progress: progress, }) } }() tarName, err := u.DownloadLatestRelease(progressChan) - if err != nil { - _ = ws.WriteJSON(gin.H{ - "status": "error", - "message": "Download latest release error", + _ = ws.WriteJSON(CoreUpgradeResp{ + Status: UpgradeStatusError, + Message: "Download latest release error", }) - _ = ws.WriteJSON(gin.H{ - "status": "error", - "message": err.Error(), + _ = ws.WriteJSON(CoreUpgradeResp{ + Status: UpgradeStatusError, + Message: err.Error(), }) logger.Error(err) return @@ -119,9 +130,9 @@ func PerformCoreUpgrade(c *gin.Context) { _ = os.Remove(tarName) _ = os.Remove(tarName + ".digest") }() - _ = ws.WriteJSON(gin.H{ - "status": "info", - "message": "Performing core upgrade", + _ = ws.WriteJSON(CoreUpgradeResp{ + Status: UpgradeStatusInfo, + Message: "Performing core upgrade", }) // dry run if control.DryRun || settings.ServerSettings.Demo { @@ -132,13 +143,13 @@ func PerformCoreUpgrade(c *gin.Context) { // bye, overseer will restart nginx-ui err = u.PerformCoreUpgrade(u.ExPath, tarName) if err != nil { - _ = ws.WriteJSON(gin.H{ - "status": "error", - "message": "Perform core upgrade error", + _ = ws.WriteJSON(CoreUpgradeResp{ + Status: UpgradeStatusError, + Message: "Perform core upgrade error", }) - _ = ws.WriteJSON(gin.H{ - "status": "error", - "message": err.Error(), + _ = ws.WriteJSON(CoreUpgradeResp{ + Status: UpgradeStatusError, + Message: err.Error(), }) logger.Error(err) return diff --git a/api/upstream/upstream.go b/api/upstream/upstream.go index e6874213c..0839b10bb 100644 --- a/api/upstream/upstream.go +++ b/api/upstream/upstream.go @@ -1,6 +1,7 @@ package upstream import ( + "github.com/0xJacky/Nginx-UI/internal/helper" "github.com/0xJacky/Nginx-UI/internal/logger" "github.com/0xJacky/Nginx-UI/internal/upstream" "github.com/gin-gonic/gin" @@ -35,11 +36,7 @@ func AvailabilityTest(c *gin.Context) { for { err = ws.WriteJSON(upstream.AvailabilityTest(body)) - - if err != nil || websocket.IsUnexpectedCloseError(err, - websocket.CloseGoingAway, - websocket.CloseNoStatusReceived, - websocket.CloseNormalClosure) { + if helper.IsUnexpectedWebsocketError(err) { logger.Error(err) break } diff --git a/internal/helper/websocket_error.go b/internal/helper/websocket_error.go new file mode 100644 index 000000000..4de1ffe29 --- /dev/null +++ b/internal/helper/websocket_error.go @@ -0,0 +1,22 @@ +package helper + +import ( + "github.com/gorilla/websocket" + "github.com/pkg/errors" + "syscall" +) + +func IsUnexpectedWebsocketError(err error) bool { + // nil error is an expected error + if err == nil { + return false + } + // ignore: write: broken pipe + if errors.Is(err, syscall.EPIPE) { + return false + } + return websocket.IsUnexpectedCloseError(err, + websocket.CloseGoingAway, + websocket.CloseNoStatusReceived, + websocket.CloseNormalClosure) +} diff --git a/internal/helper/websocket_error_test.go b/internal/helper/websocket_error_test.go new file mode 100644 index 000000000..7358e3293 --- /dev/null +++ b/internal/helper/websocket_error_test.go @@ -0,0 +1,38 @@ +package helper + +import ( + "github.com/gorilla/websocket" + "github.com/stretchr/testify/assert" + "syscall" + "testing" +) + +func TestIsUnexpectedWebsocketError(t *testing.T) { + var tests = []struct { + input error + output bool + }{ + {nil, false}, + {input: &websocket.CloseError{ + Code: websocket.CloseGoingAway, + }, output: false}, + {input: &websocket.CloseError{ + Code: websocket.CloseNoStatusReceived, + }, output: false}, + {input: &websocket.CloseError{ + Code: websocket.CloseNormalClosure, + }, output: false}, + {input: &websocket.CloseError{ + Code: websocket.CloseInternalServerErr, + }, output: true}, + { + input: syscall.EPIPE, + output: false, + }, + } + for _, test := range tests { + if !assert.Equal(t, test.output, IsUnexpectedWebsocketError(test.input)) { + t.Log(test.input) + } + } +} diff --git a/internal/upgrader/upgrade.go b/internal/upgrader/upgrade.go index 81cf34822..d75d49388 100644 --- a/internal/upgrader/upgrade.go +++ b/internal/upgrader/upgrade.go @@ -5,7 +5,7 @@ import ( "fmt" _github "github.com/0xJacky/Nginx-UI/.github" "github.com/0xJacky/Nginx-UI/app" - helper2 "github.com/0xJacky/Nginx-UI/internal/helper" + "github.com/0xJacky/Nginx-UI/internal/helper" "github.com/0xJacky/Nginx-UI/internal/logger" "github.com/0xJacky/Nginx-UI/settings" "github.com/pkg/errors" @@ -282,7 +282,6 @@ func (u *Upgrader) DownloadLatestRelease(progressChan chan float64) (tarName str // digest digest, ok := assetsMap[fmt.Sprintf("nginx-ui-%s.tar.gz.digest", arch.Name)] - if !ok || digest.BrowserDownloadUrl == "" { err = errors.New("upgrader core digest is empty") return @@ -297,7 +296,6 @@ func (u *Upgrader) DownloadLatestRelease(progressChan chan float64) (tarName str } resp, err := http.Get(digest.BrowserDownloadUrl) - if err != nil { err = errors.Wrap(err, "upgrader core download digest fail") return @@ -324,16 +322,27 @@ func (u *Upgrader) DownloadLatestRelease(progressChan chan float64) (tarName str // check tar digest digestFileBytes, err := io.ReadAll(resp.Body) if err != nil { - err = errors.Wrap(err, "digestFileContent read error") + err = errors.Wrap(err, "digest file content read error") return } digestFileContent := strings.TrimSpace(string(digestFileBytes)) - logger.Debug("DownloadLatestRelease tar digest", helper2.DigestSHA512(tarName)) + logger.Debug("DownloadLatestRelease tar digest", helper.DigestSHA512(tarName)) logger.Debug("DownloadLatestRelease digestFileContent", digestFileContent) - if digestFileContent != helper2.DigestSHA512(tarName) { + if digestFileContent == "" { + err = errors.New("digest file content is empty") + return + } + + exeSHA512 := helper.DigestSHA512(tarName) + if exeSHA512 == "" { + err = errors.New("executable binary file is empty") + return + } + + if digestFileContent != exeSHA512 { err = errors.Wrap(err, "digest not equal") return } @@ -343,7 +352,7 @@ func (u *Upgrader) DownloadLatestRelease(progressChan chan float64) (tarName str func (u *Upgrader) PerformCoreUpgrade(exPath string, tarPath string) (err error) { dir := filepath.Dir(exPath) - err = helper2.UnTar(dir, tarPath) + err = helper.UnTar(dir, tarPath) if err != nil { err = errors.Wrap(err, "PerformCoreUpgrade unTar error") return From cff843b82b2064a8fce711f4f085a34d5fc27f79 Mon Sep 17 00:00:00 2001 From: Jacky Date: Sun, 21 Jul 2024 15:24:58 +0800 Subject: [PATCH 4/5] feat: add login failed ban ip list --- api/settings/auth.go | 45 +++ api/settings/router.go | 14 + api/{system => settings}/settings.go | 5 +- api/system/router.go | 18 +- api/user/auth.go | 30 +- app/src/api/curd.ts | 4 +- app/src/api/settings.ts | 20 +- app/src/language/LINGUAS | 2 +- app/src/language/en/app.po | 261 ++++++++----- app/src/language/es/app.po | 263 ++++++++----- app/src/language/fr_FR/app.po | 263 ++++++++----- app/src/language/ko_KR/app.po | 263 ++++++++----- app/src/language/messages.pot | 267 ++++++++----- app/src/language/ru_RU/app.po | 263 ++++++++----- app/src/language/vi_VN/app.po | 263 ++++++++----- app/src/language/zh_CN/app.mo | Bin 26602 -> 27667 bytes app/src/language/zh_CN/app.po | 261 ++++++++----- app/src/language/zh_TW/app.po | 263 ++++++++----- app/src/views/domain/DomainAdd.vue | 4 - app/src/views/domain/DomainEdit.vue | 2 - app/src/views/domain/components/Deploy.vue | 5 +- .../views/domain/components/SiteDuplicate.vue | 8 +- app/src/views/other/Install.vue | 3 +- app/src/views/other/Login.vue | 18 +- app/src/views/preference/AuthSettings.vue | 114 ++++++ app/src/views/preference/Preference.vue | 17 +- app/src/views/preference/typedef.ts | 5 + app/src/views/stream/StreamEdit.vue | 2 - app/src/views/stream/components/Deploy.vue | 5 +- .../stream/components/StreamDuplicate.vue | 8 +- ....timestamp-1721542436572-91822f5b8889d.mjs | 87 +++++ docs/guide/config-auth.md | 2 +- docs/zh_CN/guide/config-auth.md | 2 +- docs/zh_TW/guide/config-auth.md | 2 +- internal/user/login.go | 23 +- model/ban_ip.go | 7 + model/model.go | 1 + query/auths.gen.go | 6 +- query/ban_ips.gen.go | 358 ++++++++++++++++++ query/gen.go | 8 + router/routers.go | 4 +- settings/auth.go | 7 +- settings/settings.go | 8 + 43 files changed, 2258 insertions(+), 953 deletions(-) create mode 100644 api/settings/auth.go create mode 100644 api/settings/router.go rename api/{system => settings}/settings.go (89%) create mode 100644 app/src/views/preference/AuthSettings.vue create mode 100644 app/vite.config.ts.timestamp-1721542436572-91822f5b8889d.mjs create mode 100644 model/ban_ip.go create mode 100644 query/ban_ips.gen.go diff --git a/api/settings/auth.go b/api/settings/auth.go new file mode 100644 index 000000000..1fa9144e4 --- /dev/null +++ b/api/settings/auth.go @@ -0,0 +1,45 @@ +package settings + +import ( + "github.com/0xJacky/Nginx-UI/api" + "github.com/0xJacky/Nginx-UI/query" + "github.com/0xJacky/Nginx-UI/settings" + "github.com/gin-gonic/gin" + "net/http" + "time" +) + +func GetBanLoginIP(c *gin.Context) { + b := query.BanIP + + // clear expired banned IPs + _, _ = b.Where(b.ExpiredAt.Lte(time.Now().Unix())).Delete() + + banIps, err := b.Where( + b.ExpiredAt.Gte(time.Now().Unix()), + b.Attempts.Gte(settings.AuthSettings.MaxAttempts)).Find() + if err != nil { + api.ErrHandler(c, err) + return + } + c.JSON(http.StatusOK, banIps) +} + +func RemoveBannedIP(c *gin.Context) { + var json struct { + IP string `json:"ip"` + } + if !api.BindAndValid(c, &json) { + return + } + + b := query.BanIP + _, err := b.Where(b.IP.Eq(json.IP)).Delete() + + if err != nil { + api.ErrHandler(c, err) + return + } + + c.JSON(http.StatusNoContent, nil) +} diff --git a/api/settings/router.go b/api/settings/router.go new file mode 100644 index 000000000..c74eb48d5 --- /dev/null +++ b/api/settings/router.go @@ -0,0 +1,14 @@ +package settings + +import ( + "github.com/gin-gonic/gin" +) + +func InitRouter(r *gin.RouterGroup) { + r.GET("settings/server/name", GetServerName) + r.GET("settings", GetSettings) + r.POST("settings", SaveSettings) + + r.GET("settings/auth/banned_ips", GetBanLoginIP) + r.DELETE("settings/auth/banned_ip", RemoveBannedIP) +} diff --git a/api/system/settings.go b/api/settings/settings.go similarity index 89% rename from api/system/settings.go rename to api/settings/settings.go index ea7f8c7cf..eee5e5305 100644 --- a/api/system/settings.go +++ b/api/settings/settings.go @@ -1,4 +1,4 @@ -package system +package settings import ( "github.com/0xJacky/Nginx-UI/api" @@ -20,6 +20,7 @@ func GetSettings(c *gin.Context) { "nginx": settings.NginxSettings, "openai": settings.OpenAISettings, "logrotate": settings.LogrotateSettings, + "auth": settings.AuthSettings, }) } @@ -29,6 +30,7 @@ func SaveSettings(c *gin.Context) { Nginx settings.Nginx `json:"nginx"` Openai settings.OpenAI `json:"openai"` Logrotate settings.Logrotate `json:"logrotate"` + Auth settings.Auth `json:"auth"` } if !api.BindAndValid(c, &json) { @@ -44,6 +46,7 @@ func SaveSettings(c *gin.Context) { settings.ProtectedFill(&settings.NginxSettings, &json.Nginx) settings.ProtectedFill(&settings.OpenAISettings, &json.Openai) settings.ProtectedFill(&settings.LogrotateSettings, &json.Logrotate) + settings.ProtectedFill(&settings.AuthSettings, &json.Auth) err := settings.Save() if err != nil { diff --git a/api/system/router.go b/api/system/router.go index df536442d..728c45500 100644 --- a/api/system/router.go +++ b/api/system/router.go @@ -1,21 +1,17 @@ package system import ( - "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin" ) func InitPublicRouter(r *gin.RouterGroup) { - r.GET("install", InstallLockCheck) - r.POST("install", InstallNginxUI) - r.GET("translation/:code", GetTranslation) + r.GET("install", InstallLockCheck) + r.POST("install", InstallNginxUI) + r.GET("translation/:code", GetTranslation) } func InitPrivateRouter(r *gin.RouterGroup) { - r.GET("settings/server/name", GetServerName) - r.GET("settings", GetSettings) - r.POST("settings", SaveSettings) - - r.GET("upgrade/release", GetRelease) - r.GET("upgrade/current", GetCurrentVersion) - r.GET("upgrade/perform", PerformCoreUpgrade) + r.GET("upgrade/release", GetRelease) + r.GET("upgrade/current", GetCurrentVersion) + r.GET("upgrade/perform", PerformCoreUpgrade) } diff --git a/api/user/auth.go b/api/user/auth.go index 007bf73f6..82feef408 100644 --- a/api/user/auth.go +++ b/api/user/auth.go @@ -4,12 +4,17 @@ import ( "github.com/0xJacky/Nginx-UI/api" "github.com/0xJacky/Nginx-UI/internal/logger" "github.com/0xJacky/Nginx-UI/internal/user" + "github.com/0xJacky/Nginx-UI/query" + "github.com/0xJacky/Nginx-UI/settings" "github.com/gin-gonic/gin" "github.com/pkg/errors" "net/http" + "sync" "time" ) +var mutex = &sync.Mutex{} + type LoginUser struct { Name string `json:"name" binding:"required,max=255"` Password string `json:"password" binding:"required,max=255"` @@ -29,6 +34,25 @@ type LoginResponse struct { } func Login(c *gin.Context) { + // make sure that only one request is processed at a time + mutex.Lock() + defer mutex.Unlock() + // check if the ip is banned + clientIP := c.ClientIP() + b := query.BanIP + banIP, _ := b.Where(b.IP.Eq(clientIP), + b.ExpiredAt.Gte(time.Now().Unix()), + b.Attempts.Gte(settings.AuthSettings.MaxAttempts), + ).Count() + + if banIP > 0 { + c.JSON(http.StatusTooManyRequests, LoginResponse{ + Message: "Max attempts", + Code: ErrMaxAttempts, + }) + return + } + var json LoginUser ok := api.BindAndValid(c, &json) if !ok { @@ -37,7 +61,7 @@ func Login(c *gin.Context) { u, err := user.Login(json.Name, json.Password) if err != nil { - time.Sleep(5 * time.Second) + // time.Sleep(5 * time.Second) switch { case errors.Is(err, user.ErrPasswordIncorrect): c.JSON(http.StatusForbidden, LoginResponse{ @@ -52,9 +76,13 @@ func Login(c *gin.Context) { default: api.ErrHandler(c, err) } + user.BanIP(clientIP) return } + // login success, clear banned record + _, _ = b.Where(b.IP.Eq(clientIP)).Delete() + logger.Info("[User Login]", u.Name) token, err := user.GenerateJWT(u.Name) if err != nil { diff --git a/app/src/api/curd.ts b/app/src/api/curd.ts index acecee050..fdbce1345 100644 --- a/app/src/api/curd.ts +++ b/app/src/api/curd.ts @@ -13,7 +13,7 @@ export interface Pagination { total_pages: number } -export interface IGetListResponse { +export interface GetListResponse { data: T[] pagination: Pagination } @@ -35,7 +35,7 @@ class Curd { } // eslint-disable-next-line @typescript-eslint/no-explicit-any - _get_list(params: any = null): Promise> { + _get_list(params: any = null): Promise> { return http.get(this.plural, { params }) } diff --git a/app/src/api/settings.ts b/app/src/api/settings.ts index 09146ba9f..bf27a1586 100644 --- a/app/src/api/settings.ts +++ b/app/src/api/settings.ts @@ -1,17 +1,27 @@ import http from '@/lib/http' +export interface BannedIP { + ip: string + attempts: number + expired_at: string +} + const settings = { - get() { + get(): Promise { return http.get('/settings') }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - save(data: any) { + save(data: T) { return http.post('/settings', data) }, - - get_server_name() { + get_server_name(): Promise<{ name: string }> { return http.get('/settings/server/name') }, + get_banned_ips(): Promise { + return http.get('/settings/auth/banned_ips') + }, + remove_banned_ip(ip: string) { + return http.delete('/settings/auth/banned_ip', { data: { ip } }) + }, } export default settings diff --git a/app/src/language/LINGUAS b/app/src/language/LINGUAS index 052f2613d..1dc98da20 100644 --- a/app/src/language/LINGUAS +++ b/app/src/language/LINGUAS @@ -1 +1 @@ -es fr_FR ko_KR ru_RU vi_VN zh_CN zh_TW +en zh_CN zh_TW fr_FR es ru_RU vi_VN ko_KR \ No newline at end of file diff --git a/app/src/language/en/app.po b/app/src/language/en/app.po index 900a4a529..64336d09d 100644 --- a/app/src/language/en/app.po +++ b/app/src/language/en/app.po @@ -28,7 +28,8 @@ msgstr "Username" #: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34 #: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129 #: src/views/notification/Notification.vue:37 -#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43 +#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47 +#: src/views/user/User.vue:43 msgid "Action" msgstr "Action" @@ -51,7 +52,7 @@ msgstr "Add Directive Below" msgid "Add Location" msgstr "Add Location" -#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93 +#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89 msgid "Add Site" msgstr "Add Site" @@ -70,11 +71,11 @@ msgstr "Saved successfully" msgid "Additional" msgstr "Add Location" -#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191 +#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189 msgid "Advance Mode" msgstr "Advance Mode" -#: src/views/preference/OpenAISettings.vue:42 +#: src/views/preference/OpenAISettings.vue:45 msgid "API Base Url" msgstr "" @@ -82,11 +83,11 @@ msgstr "" msgid "API Document" msgstr "" -#: src/views/preference/OpenAISettings.vue:54 +#: src/views/preference/OpenAISettings.vue:57 msgid "API Proxy" msgstr "" -#: src/views/preference/OpenAISettings.vue:66 +#: src/views/preference/OpenAISettings.vue:69 msgid "API Token" msgstr "" @@ -94,7 +95,12 @@ msgstr "" msgid "Arch" msgstr "" -#: src/components/Notification/Notification.vue:84 +#: src/views/preference/AuthSettings.vue:94 +#, fuzzy +msgid "Are you sure to delete this banned IP immediately?" +msgstr "Are you sure you want to remove this directive?" + +#: src/components/Notification/Notification.vue:86 #: src/views/notification/Notification.vue:72 #, fuzzy msgid "Are you sure you want to clear all notifications?" @@ -147,6 +153,14 @@ msgstr "" msgid "Assistant" msgstr "" +#: src/views/preference/AuthSettings.vue:17 +msgid "Attempts" +msgstr "" + +#: src/views/preference/Preference.vue:116 +msgid "Auth" +msgstr "" + #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120 msgid "Author" @@ -170,8 +184,8 @@ msgstr "Auto-renewal enabled for %{name}" #: src/views/certificate/CertificateEditor.vue:242 #: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87 -#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168 -#: src/views/stream/StreamEdit.vue:247 +#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168 +#: src/views/stream/StreamEdit.vue:245 msgid "Back" msgstr "Back" @@ -180,19 +194,31 @@ msgstr "Back" msgid "Back Home" msgstr "Back" -#: src/views/domain/DomainAdd.vue:99 +#: src/views/preference/AuthSettings.vue:68 +msgid "Ban Threshold Minutes" +msgstr "" + +#: src/views/preference/AuthSettings.vue:82 +msgid "Banned IPs" +msgstr "" + +#: src/views/preference/AuthSettings.vue:20 +msgid "Banned Until" +msgstr "" + +#: src/views/domain/DomainAdd.vue:95 msgid "Base information" msgstr "Base information" #: src/views/config/ConfigEdit.vue:115 #: src/views/domain/components/RightSettings.vue:75 -#: src/views/preference/Preference.vue:101 +#: src/views/preference/Preference.vue:110 #: src/views/stream/components/RightSettings.vue:74 #, fuzzy msgid "Basic" msgstr "Basic Mode" -#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194 +#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192 msgid "Basic Mode" msgstr "Basic Mode" @@ -280,12 +306,12 @@ msgid "Cleaning environment variables" msgstr "" #: src/components/ChatGPT/ChatGPT.vue:276 -#: src/components/Notification/Notification.vue:89 +#: src/components/Notification/Notification.vue:91 #: src/views/notification/Notification.vue:77 msgid "Clear" msgstr "" -#: src/components/Notification/Notification.vue:40 +#: src/components/Notification/Notification.vue:42 #: src/views/notification/Notification.vue:46 #, fuzzy msgid "Cleared successfully" @@ -312,7 +338,7 @@ msgstr "Configurations" msgid "Configuration file is test successful" msgstr "" -#: src/views/domain/DomainAdd.vue:105 +#: src/views/domain/DomainAdd.vue:101 msgid "Configuration Name" msgstr "Configuration Name" @@ -320,7 +346,7 @@ msgstr "Configuration Name" msgid "Configurations" msgstr "Configurations" -#: src/views/domain/DomainAdd.vue:100 +#: src/views/domain/DomainAdd.vue:96 msgid "Configure SSL" msgstr "Configure SSL" @@ -351,7 +377,7 @@ msgstr "CPU:" msgid "Create" msgstr "Created at" -#: src/views/domain/DomainAdd.vue:158 +#: src/views/domain/DomainAdd.vue:154 msgid "Create Another" msgstr "Create Another" @@ -390,7 +416,7 @@ msgstr "" msgid "Dashboard" msgstr "Dashboard" -#: src/views/other/Install.vue:121 +#: src/views/other/Install.vue:120 msgid "Database (Optional, default: database)" msgstr "Database (Optional, default: database)" @@ -423,15 +449,15 @@ msgstr "" msgid "Deleted successfully" msgstr "Disabled successfully" -#: src/views/domain/components/Deploy.vue:106 +#: src/views/domain/components/Deploy.vue:103 #: src/views/domain/components/RightSettings.vue:93 -#: src/views/stream/components/Deploy.vue:106 +#: src/views/stream/components/Deploy.vue:103 #: src/views/stream/components/RightSettings.vue:92 msgid "Deploy" msgstr "" -#: src/views/domain/components/Deploy.vue:63 -#: src/views/stream/components/Deploy.vue:63 +#: src/views/domain/components/Deploy.vue:60 +#: src/views/stream/components/Deploy.vue:60 msgid "Deploy %{conf_name} to %{node_name} failed" msgstr "" @@ -481,9 +507,9 @@ msgstr "Disabled" msgid "Disable auto-renewal failed for %{name}" msgstr "Disable auto-renewal failed for %{name}" -#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185 +#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183 #: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93 -#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33 +#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33 msgid "Disabled" msgstr "Disabled" @@ -562,7 +588,7 @@ msgstr "Are you sure you want to remove this directive?" msgid "Domain" msgstr "" -#: src/views/domain/DomainAdd.vue:148 +#: src/views/domain/DomainAdd.vue:144 msgid "Domain Config Created Successfully" msgstr "Domain Config Created Successfully" @@ -582,38 +608,38 @@ msgstr "" msgid "Dry run mode enabled" msgstr "" -#: src/views/domain/components/SiteDuplicate.vue:126 +#: src/views/domain/components/SiteDuplicate.vue:122 #: src/views/domain/DomainList.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:126 +#: src/views/stream/components/StreamDuplicate.vue:122 #: src/views/stream/StreamList.vue:161 msgid "Duplicate" msgstr "" -#: src/views/domain/components/SiteDuplicate.vue:84 -#: src/views/stream/components/StreamDuplicate.vue:84 +#: src/views/domain/components/SiteDuplicate.vue:82 +#: src/views/stream/components/StreamDuplicate.vue:82 #, fuzzy msgid "Duplicate %{conf_name} to %{node_name} successfully" msgstr "Saved successfully" -#: src/views/domain/components/SiteDuplicate.vue:90 -#: src/views/stream/components/StreamDuplicate.vue:90 +#: src/views/domain/components/SiteDuplicate.vue:87 +#: src/views/stream/components/StreamDuplicate.vue:87 #, fuzzy msgid "Duplicate failed" msgstr "Enable failed" -#: src/views/domain/components/SiteDuplicate.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:82 +#: src/views/domain/components/SiteDuplicate.vue:80 +#: src/views/stream/components/StreamDuplicate.vue:80 #, fuzzy msgid "Duplicate successfully" msgstr "Saved successfully" -#: src/views/domain/components/SiteDuplicate.vue:64 -#: src/views/stream/components/StreamDuplicate.vue:64 +#: src/views/domain/components/SiteDuplicate.vue:63 +#: src/views/stream/components/StreamDuplicate.vue:63 #, fuzzy msgid "Duplicate to local successfully" msgstr "Saved successfully" -#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166 +#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164 msgid "Edit %{n}" msgstr "Edit %{n}" @@ -635,25 +661,25 @@ msgstr "Edit Site" msgid "Email" msgstr "Email (*)" -#: src/views/other/Install.vue:90 +#: src/views/other/Install.vue:89 msgid "Email (*)" msgstr "Email (*)" -#: src/views/domain/components/Deploy.vue:86 +#: src/views/domain/components/Deploy.vue:83 #: src/views/domain/DomainList.vue:132 -#: src/views/stream/components/Deploy.vue:86 +#: src/views/stream/components/Deploy.vue:83 #: src/views/stream/StreamList.vue:153 #, fuzzy msgid "Enable" msgstr "Enabled" -#: src/views/domain/components/Deploy.vue:52 -#: src/views/stream/components/Deploy.vue:52 +#: src/views/domain/components/Deploy.vue:50 +#: src/views/stream/components/Deploy.vue:50 msgid "Enable %{conf_name} in %{node_name} failed" msgstr "" -#: src/views/domain/components/Deploy.vue:46 -#: src/views/stream/components/Deploy.vue:46 +#: src/views/domain/components/Deploy.vue:45 +#: src/views/stream/components/Deploy.vue:45 msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "" @@ -661,12 +687,12 @@ msgstr "" msgid "Enable auto-renewal failed for %{name}" msgstr "Enable auto-renewal failed for %{name}" -#: src/views/domain/DomainAdd.vue:46 +#: src/views/domain/DomainAdd.vue:43 msgid "Enable failed" msgstr "Enable failed" -#: src/views/domain/components/Deploy.vue:44 -#: src/views/stream/components/Deploy.vue:44 +#: src/views/domain/components/Deploy.vue:43 +#: src/views/stream/components/Deploy.vue:43 #, fuzzy msgid "Enable successfully" msgstr "Enabled successfully" @@ -677,19 +703,19 @@ msgstr "Enable TLS" #: src/views/domain/cert/ChangeCert.vue:40 #: src/views/domain/components/RightSettings.vue:77 -#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29 +#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29 #: src/views/environment/Environment.vue:102 #: src/views/preference/LogrotateSettings.vue:20 #: src/views/stream/components/RightSettings.vue:76 -#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29 +#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29 msgid "Enabled" msgstr "Enabled" #: src/views/domain/components/RightSettings.vue:29 -#: src/views/domain/components/SiteDuplicate.vue:98 -#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57 +#: src/views/domain/components/SiteDuplicate.vue:94 +#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57 #: src/views/stream/components/RightSettings.vue:29 -#: src/views/stream/components/StreamDuplicate.vue:98 +#: src/views/stream/components/StreamDuplicate.vue:94 #: src/views/stream/StreamList.vue:57 msgid "Enabled successfully" msgstr "Enabled successfully" @@ -759,7 +785,7 @@ msgstr "Failed to enable %{msg}" msgid "Failed to get certificate information" msgstr "" -#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124 +#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122 msgid "Failed to save, syntax error(s) was detected in the configuration." msgstr "" @@ -785,7 +811,7 @@ msgstr "File Not Found" msgid "Filter" msgstr "" -#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101 +#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97 msgid "Finished" msgstr "Finished" @@ -857,6 +883,12 @@ msgstr "" msgid "If left blank, the default CA Dir will be used." msgstr "" +#: src/views/preference/AuthSettings.vue:60 +msgid "" +"If the number of login failed attempts from a ip reach the max attempts in " +"ban threshold minutes, the ip will be banned for a period of time." +msgstr "" + #: src/views/certificate/Certificate.vue:136 msgid "Import" msgstr "" @@ -866,6 +898,10 @@ msgstr "" msgid "Import Certificate" msgstr "Certificate Status" +#: src/views/other/Login.vue:59 +msgid "Incorrect username or password" +msgstr "" + #: src/constants/index.ts:18 msgid "Info" msgstr "" @@ -878,7 +914,7 @@ msgstr "" msgid "Initialing core upgrader" msgstr "" -#: src/routes/index.ts:273 src/views/other/Install.vue:136 +#: src/routes/index.ts:273 src/views/other/Install.vue:135 msgid "Install" msgstr "Install" @@ -900,6 +936,10 @@ msgstr "" msgid "Invalid" msgstr "Invalid E-mail!" +#: src/views/preference/AuthSettings.vue:14 +msgid "IP" +msgstr "" + #: src/views/certificate/Certificate.vue:144 #, fuzzy msgid "Issue wildcard certificate" @@ -933,7 +973,7 @@ msgstr "" msgid "Leave blank for no change" msgstr "Leave blank for no change" -#: src/views/preference/OpenAISettings.vue:50 +#: src/views/preference/OpenAISettings.vue:53 msgid "Leave blank for the default: https://api.openai.com/" msgstr "" @@ -990,11 +1030,11 @@ msgstr "Locations" msgid "Log" msgstr "Login" -#: src/routes/index.ts:279 src/views/other/Login.vue:147 +#: src/routes/index.ts:279 src/views/other/Login.vue:159 msgid "Login" msgstr "Login" -#: src/views/other/Login.vue:51 src/views/other/Login.vue:97 +#: src/views/other/Login.vue:109 src/views/other/Login.vue:51 msgid "Login successful" msgstr "Login successful" @@ -1002,7 +1042,7 @@ msgstr "Login successful" msgid "Logout successful" msgstr "Logout successful" -#: src/views/preference/Preference.vue:119 +#: src/views/preference/Preference.vue:134 msgid "Logrotate" msgstr "" @@ -1047,6 +1087,10 @@ msgstr "Manage Users" msgid "Managed Certificate" msgstr "Certificate is valid" +#: src/views/preference/AuthSettings.vue:74 +msgid "Max Attempts" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:217 #: src/views/dashboard/ServerAnalytic.vue:218 msgid "Memory" @@ -1060,7 +1104,7 @@ msgstr "Memory and Storage" msgid "Minutes" msgstr "" -#: src/views/preference/OpenAISettings.vue:30 +#: src/views/preference/OpenAISettings.vue:33 #, fuzzy msgid "Model" msgstr "Advance Mode" @@ -1077,7 +1121,7 @@ msgstr "Modify Config" msgid "Modify Certificate" msgstr "Certificate Status" -#: src/views/domain/DomainAdd.vue:155 +#: src/views/domain/DomainAdd.vue:151 msgid "Modify Config" msgstr "Modify Config" @@ -1097,12 +1141,12 @@ msgstr "Single Directive" #: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7 #: src/views/domain/cert/ChangeCert.vue:17 #: src/views/domain/components/RightSettings.vue:83 -#: src/views/domain/components/SiteDuplicate.vue:133 +#: src/views/domain/components/SiteDuplicate.vue:129 #: src/views/domain/DomainList.vue:13 #: src/views/domain/ngx_conf/NgxUpstream.vue:175 #: src/views/environment/Environment.vue:12 #: src/views/stream/components/RightSettings.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:133 +#: src/views/stream/components/StreamDuplicate.vue:129 #: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187 msgid "Name" msgstr "Name" @@ -1129,11 +1173,11 @@ msgstr "" #: src/views/certificate/WildcardCertificate.vue:99 #: src/views/domain/cert/components/ObtainCert.vue:203 -#: src/views/domain/DomainAdd.vue:142 +#: src/views/domain/DomainAdd.vue:138 msgid "Next" msgstr "Next" -#: src/views/preference/Preference.vue:107 +#: src/views/preference/Preference.vue:122 msgid "Nginx" msgstr "" @@ -1141,7 +1185,7 @@ msgstr "" msgid "Nginx Access Log Path" msgstr "" -#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209 +#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207 #, fuzzy msgid "Nginx Configuration Parse Error" msgstr "Configuration Name" @@ -1169,7 +1213,7 @@ msgid "Nginx restarted successfully" msgstr "Saved successfully" #: src/components/ChatGPT/ChatGPT.vue:270 -#: src/components/Notification/Notification.vue:82 +#: src/components/Notification/Notification.vue:84 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:521 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:535 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:549 @@ -1177,6 +1221,7 @@ msgstr "Saved successfully" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90 #: src/views/domain/ngx_conf/LocationEditor.vue:71 #: src/views/notification/Notification.vue:70 +#: src/views/preference/AuthSettings.vue:96 #: src/views/preference/BasicSettings.vue:101 #: src/views/stream/StreamList.vue:165 msgid "No" @@ -1208,7 +1253,7 @@ msgstr "" msgid "Notification" msgstr "Certificate is valid" -#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221 +#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221 #, fuzzy msgid "Notifications" msgstr "Certificate is valid" @@ -1234,7 +1279,7 @@ msgid "Ok" msgstr "" #: src/components/ChatGPT/ChatGPT.vue:271 -#: src/components/Notification/Notification.vue:83 +#: src/components/Notification/Notification.vue:85 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:522 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:536 @@ -1264,7 +1309,7 @@ msgstr "" msgid "Online" msgstr "" -#: src/views/preference/Preference.vue:113 +#: src/views/preference/Preference.vue:128 msgid "OpenAI" msgstr "" @@ -1277,13 +1322,13 @@ msgstr "OS:" msgid "OS:" msgstr "OS:" -#: src/views/domain/components/Deploy.vue:90 -#: src/views/stream/components/Deploy.vue:90 +#: src/views/domain/components/Deploy.vue:87 +#: src/views/stream/components/Deploy.vue:87 msgid "Overwrite" msgstr "" -#: src/views/domain/components/Deploy.vue:94 -#: src/views/stream/components/Deploy.vue:94 +#: src/views/domain/components/Deploy.vue:91 +#: src/views/stream/components/Deploy.vue:91 msgid "Overwrite exist file" msgstr "" @@ -1291,11 +1336,11 @@ msgstr "" msgid "Params" msgstr "Params" -#: src/views/other/Login.vue:132 src/views/user/User.vue:18 +#: src/views/other/Login.vue:144 src/views/user/User.vue:18 msgid "Password" msgstr "Password" -#: src/views/other/Install.vue:110 +#: src/views/other/Install.vue:109 msgid "Password (*)" msgstr "Password (*)" @@ -1358,7 +1403,7 @@ msgstr "" msgid "Pre-release" msgstr "" -#: src/routes/index.ts:239 src/views/preference/Preference.vue:96 +#: src/routes/index.ts:239 src/views/preference/Preference.vue:105 msgid "Preference" msgstr "" @@ -1454,7 +1499,16 @@ msgstr "" msgid "Reloading nginx" msgstr "" -#: src/components/Notification/Notification.vue:50 +#: src/views/preference/AuthSettings.vue:101 +msgid "Remove" +msgstr "" + +#: src/views/preference/AuthSettings.vue:47 +#, fuzzy +msgid "Remove successfully" +msgstr "Saved successfully" + +#: src/components/Notification/Notification.vue:52 #, fuzzy msgid "Removed successfully" msgstr "Saved successfully" @@ -1513,9 +1567,9 @@ msgstr "" #: src/components/ChatGPT/ChatGPT.vue:252 #: src/views/certificate/CertificateEditor.vue:249 -#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263 +#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120 -#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254 +#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252 msgid "Save" msgstr "Save" @@ -1523,7 +1577,7 @@ msgstr "Save" msgid "Save Directive" msgstr "Save Directive" -#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50 +#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41 msgid "Save error %{msg}" msgstr "Save error %{msg}" @@ -1531,15 +1585,15 @@ msgstr "Save error %{msg}" #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104 #: src/views/certificate/CertificateEditor.vue:46 -#: src/views/preference/Preference.vue:66 +#: src/views/preference/Preference.vue:74 #, fuzzy msgid "Save successfully" msgstr "Saved successfully" -#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38 -#: src/views/domain/DomainEdit.vue:148 +#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37 +#: src/views/domain/DomainEdit.vue:146 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39 -#: src/views/stream/StreamEdit.vue:140 +#: src/views/stream/StreamEdit.vue:138 msgid "Saved successfully" msgstr "Saved successfully" @@ -1564,8 +1618,9 @@ msgstr "Send" #: src/components/StdDesign/StdDataDisplay/StdTable.vue:196 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:235 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81 -#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70 -#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113 +#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69 +#: src/views/preference/AuthSettings.vue:49 +#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42 msgid "Server error" msgstr "Server error" @@ -1584,7 +1639,7 @@ msgid "server_name not found in directives" msgstr "server_name not found in directives" #: src/views/domain/cert/components/AutoCertStepOne.vue:34 -#: src/views/domain/DomainAdd.vue:121 +#: src/views/domain/DomainAdd.vue:117 msgid "server_name parameter is required" msgstr "server_name parameter is required" @@ -1641,7 +1696,7 @@ msgstr "Certificate Status" msgid "SSL Certificate Path" msgstr "Certificate Status" -#: src/views/other/Login.vue:158 +#: src/views/other/Login.vue:170 #, fuzzy msgid "SSO Login" msgstr "Login" @@ -1728,8 +1783,8 @@ msgstr "" msgid "System" msgstr "" -#: src/views/domain/components/SiteDuplicate.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:140 +#: src/views/domain/components/SiteDuplicate.vue:136 +#: src/views/stream/components/StreamDuplicate.vue:136 msgid "Target" msgstr "" @@ -1763,7 +1818,7 @@ msgstr "" msgid "The input is not a SSL Certificate Key" msgstr "Certificate Status" -#: src/views/preference/OpenAISettings.vue:33 +#: src/views/preference/OpenAISettings.vue:36 msgid "" "The model name should only contain letters, unicode, numbers, hyphens, " "dashes, and dots." @@ -1798,8 +1853,8 @@ msgstr "" msgid "The url is invalid" msgstr "" -#: src/views/preference/OpenAISettings.vue:45 -#: src/views/preference/OpenAISettings.vue:57 +#: src/views/preference/OpenAISettings.vue:48 +#: src/views/preference/OpenAISettings.vue:60 msgid "The url is invalid." msgstr "" @@ -1825,6 +1880,7 @@ msgstr "" msgid "This field should not be empty" msgstr "" +#: src/views/preference/AuthSettings.vue:59 #: src/views/preference/LogrotateSettings.vue:12 msgid "Tips" msgstr "" @@ -1841,10 +1897,14 @@ msgid "" "continue?" msgstr "" -#: src/views/preference/OpenAISettings.vue:69 +#: src/views/preference/OpenAISettings.vue:72 msgid "Token is not valid" msgstr "" +#: src/views/other/Login.vue:62 +msgid "Too many login failed attempts, please try again later" +msgstr "" + #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221 msgid "Trash" msgstr "" @@ -1900,11 +1960,15 @@ msgstr "" msgid "User" msgstr "Username" -#: src/views/other/Login.vue:122 src/views/user/User.vue:9 +#: src/views/other/Login.vue:65 +msgid "User is banned" +msgstr "" + +#: src/views/other/Login.vue:134 src/views/user/User.vue:9 msgid "Username" msgstr "Username" -#: src/views/other/Install.vue:100 +#: src/views/other/Install.vue:99 msgid "Username (*)" msgstr "Username (*)" @@ -1918,7 +1982,7 @@ msgstr "" msgid "View" msgstr "" -#: src/components/Notification/Notification.vue:141 +#: src/components/Notification/Notification.vue:143 #, fuzzy msgid "View all notifications" msgstr "Certificate is valid" @@ -1934,7 +1998,7 @@ msgstr "Basic Mode" #: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33 #: src/views/domain/cert/components/AutoCertStepOne.vue:28 -#: src/views/domain/DomainAdd.vue:116 +#: src/views/domain/DomainAdd.vue:112 msgid "Warning" msgstr "Warning" @@ -1965,6 +2029,7 @@ msgstr "" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89 #: src/views/domain/ngx_conf/LocationEditor.vue:70 +#: src/views/preference/AuthSettings.vue:95 #: src/views/preference/BasicSettings.vue:100 msgid "Yes" msgstr "Yes" diff --git a/app/src/language/es/app.po b/app/src/language/es/app.po index 4676fa38e..79315d23a 100644 --- a/app/src/language/es/app.po +++ b/app/src/language/es/app.po @@ -33,7 +33,8 @@ msgstr "Usuario" #: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34 #: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129 #: src/views/notification/Notification.vue:37 -#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43 +#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47 +#: src/views/user/User.vue:43 msgid "Action" msgstr "Acción" @@ -56,7 +57,7 @@ msgstr "Añadir directiva a continuación" msgid "Add Location" msgstr "Agregar Ubicación" -#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93 +#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89 msgid "Add Site" msgstr "Agregar Sitio" @@ -72,11 +73,11 @@ msgstr "Agregado exitoso" msgid "Additional" msgstr "Adicional" -#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191 +#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189 msgid "Advance Mode" msgstr "Modo avanzado" -#: src/views/preference/OpenAISettings.vue:42 +#: src/views/preference/OpenAISettings.vue:45 msgid "API Base Url" msgstr "URL Base de la API" @@ -85,11 +86,11 @@ msgstr "URL Base de la API" msgid "API Document" msgstr "Token de la API" -#: src/views/preference/OpenAISettings.vue:54 +#: src/views/preference/OpenAISettings.vue:57 msgid "API Proxy" msgstr "Proxy de la API" -#: src/views/preference/OpenAISettings.vue:66 +#: src/views/preference/OpenAISettings.vue:69 msgid "API Token" msgstr "Token de la API" @@ -97,7 +98,12 @@ msgstr "Token de la API" msgid "Arch" msgstr "Arquitectura" -#: src/components/Notification/Notification.vue:84 +#: src/views/preference/AuthSettings.vue:94 +#, fuzzy +msgid "Are you sure to delete this banned IP immediately?" +msgstr "¿Está seguro de que quiere borrar?" + +#: src/components/Notification/Notification.vue:86 #: src/views/notification/Notification.vue:72 msgid "Are you sure you want to clear all notifications?" msgstr "¿Está seguro de que desea borrar todas las notificaciones?" @@ -146,6 +152,15 @@ msgstr "Preguntar por ayuda a ChatGPT" msgid "Assistant" msgstr "Asistente" +#: src/views/preference/AuthSettings.vue:17 +msgid "Attempts" +msgstr "" + +#: src/views/preference/Preference.vue:116 +#, fuzzy +msgid "Auth" +msgstr "Autor" + #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120 msgid "Author" @@ -169,8 +184,8 @@ msgstr "Renovación automática habilitada por %{name}" #: src/views/certificate/CertificateEditor.vue:242 #: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87 -#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168 -#: src/views/stream/StreamEdit.vue:247 +#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168 +#: src/views/stream/StreamEdit.vue:245 msgid "Back" msgstr "Volver" @@ -178,18 +193,30 @@ msgstr "Volver" msgid "Back Home" msgstr "Volver al Inicio" -#: src/views/domain/DomainAdd.vue:99 +#: src/views/preference/AuthSettings.vue:68 +msgid "Ban Threshold Minutes" +msgstr "" + +#: src/views/preference/AuthSettings.vue:82 +msgid "Banned IPs" +msgstr "" + +#: src/views/preference/AuthSettings.vue:20 +msgid "Banned Until" +msgstr "" + +#: src/views/domain/DomainAdd.vue:95 msgid "Base information" msgstr "Información general" #: src/views/config/ConfigEdit.vue:115 #: src/views/domain/components/RightSettings.vue:75 -#: src/views/preference/Preference.vue:101 +#: src/views/preference/Preference.vue:110 #: src/views/stream/components/RightSettings.vue:74 msgid "Basic" msgstr "Básico" -#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194 +#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192 msgid "Basic Mode" msgstr "Modo Básico" @@ -273,12 +300,12 @@ msgid "Cleaning environment variables" msgstr "Borrar las variables de entorno" #: src/components/ChatGPT/ChatGPT.vue:276 -#: src/components/Notification/Notification.vue:89 +#: src/components/Notification/Notification.vue:91 #: src/views/notification/Notification.vue:77 msgid "Clear" msgstr "Borrar" -#: src/components/Notification/Notification.vue:40 +#: src/components/Notification/Notification.vue:42 #: src/views/notification/Notification.vue:46 msgid "Cleared successfully" msgstr "Limpiado exitoso" @@ -303,7 +330,7 @@ msgstr "Plantillas de configuración" msgid "Configuration file is test successful" msgstr "El archivo de configuración se probó exitosamente" -#: src/views/domain/DomainAdd.vue:105 +#: src/views/domain/DomainAdd.vue:101 msgid "Configuration Name" msgstr "Nombre de la configuración" @@ -311,7 +338,7 @@ msgstr "Nombre de la configuración" msgid "Configurations" msgstr "Configuraciones" -#: src/views/domain/DomainAdd.vue:100 +#: src/views/domain/DomainAdd.vue:96 msgid "Configure SSL" msgstr "Configurar SSL" @@ -341,7 +368,7 @@ msgstr "CPU:" msgid "Create" msgstr "Crear" -#: src/views/domain/DomainAdd.vue:158 +#: src/views/domain/DomainAdd.vue:154 msgid "Create Another" msgstr "Crear otro" @@ -380,7 +407,7 @@ msgstr "" msgid "Dashboard" msgstr "Panel" -#: src/views/other/Install.vue:121 +#: src/views/other/Install.vue:120 msgid "Database (Optional, default: database)" msgstr "Base de datos (Opcional, default: database)" @@ -412,15 +439,15 @@ msgstr "Eliminar stream: %{site_name}" msgid "Deleted successfully" msgstr "Borrado exitoso" -#: src/views/domain/components/Deploy.vue:106 +#: src/views/domain/components/Deploy.vue:103 #: src/views/domain/components/RightSettings.vue:93 -#: src/views/stream/components/Deploy.vue:106 +#: src/views/stream/components/Deploy.vue:103 #: src/views/stream/components/RightSettings.vue:92 msgid "Deploy" msgstr "Desplegar" -#: src/views/domain/components/Deploy.vue:63 -#: src/views/stream/components/Deploy.vue:63 +#: src/views/domain/components/Deploy.vue:60 +#: src/views/stream/components/Deploy.vue:60 msgid "Deploy %{conf_name} to %{node_name} failed" msgstr "Falló el desplegado de %{conf_name} a %{node_name}" @@ -467,9 +494,9 @@ msgstr "Desactivar" msgid "Disable auto-renewal failed for %{name}" msgstr "No se pudo desactivar la renovación automática por %{name}" -#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185 +#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183 #: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93 -#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33 +#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33 msgid "Disabled" msgstr "Desactivado" @@ -540,7 +567,7 @@ msgstr "¿Quieres eliminar esta transmisión?" msgid "Domain" msgstr "Dominio" -#: src/views/domain/DomainAdd.vue:148 +#: src/views/domain/DomainAdd.vue:144 msgid "Domain Config Created Successfully" msgstr "Configuración de dominio creada con éxito" @@ -562,34 +589,34 @@ msgstr "Descargando la última versión" msgid "Dry run mode enabled" msgstr "Modo de ejecución de prueba habilitado" -#: src/views/domain/components/SiteDuplicate.vue:126 +#: src/views/domain/components/SiteDuplicate.vue:122 #: src/views/domain/DomainList.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:126 +#: src/views/stream/components/StreamDuplicate.vue:122 #: src/views/stream/StreamList.vue:161 msgid "Duplicate" msgstr "Duplicar" -#: src/views/domain/components/SiteDuplicate.vue:84 -#: src/views/stream/components/StreamDuplicate.vue:84 +#: src/views/domain/components/SiteDuplicate.vue:82 +#: src/views/stream/components/StreamDuplicate.vue:82 msgid "Duplicate %{conf_name} to %{node_name} successfully" msgstr "Duplicado con éxito de %{conf_name} a %{node_name}" -#: src/views/domain/components/SiteDuplicate.vue:90 -#: src/views/stream/components/StreamDuplicate.vue:90 +#: src/views/domain/components/SiteDuplicate.vue:87 +#: src/views/stream/components/StreamDuplicate.vue:87 msgid "Duplicate failed" msgstr "Duplicado fallido" -#: src/views/domain/components/SiteDuplicate.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:82 +#: src/views/domain/components/SiteDuplicate.vue:80 +#: src/views/stream/components/StreamDuplicate.vue:80 msgid "Duplicate successfully" msgstr "Duplicado con éxito" -#: src/views/domain/components/SiteDuplicate.vue:64 -#: src/views/stream/components/StreamDuplicate.vue:64 +#: src/views/domain/components/SiteDuplicate.vue:63 +#: src/views/stream/components/StreamDuplicate.vue:63 msgid "Duplicate to local successfully" msgstr "Duplicado con éxito a local" -#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166 +#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164 msgid "Edit %{n}" msgstr "Editar %{n}" @@ -610,24 +637,24 @@ msgstr "Editar Transmisión" msgid "Email" msgstr "Correo (*)" -#: src/views/other/Install.vue:90 +#: src/views/other/Install.vue:89 msgid "Email (*)" msgstr "Correo (*)" -#: src/views/domain/components/Deploy.vue:86 +#: src/views/domain/components/Deploy.vue:83 #: src/views/domain/DomainList.vue:132 -#: src/views/stream/components/Deploy.vue:86 +#: src/views/stream/components/Deploy.vue:83 #: src/views/stream/StreamList.vue:153 msgid "Enable" msgstr "Habilitar" -#: src/views/domain/components/Deploy.vue:52 -#: src/views/stream/components/Deploy.vue:52 +#: src/views/domain/components/Deploy.vue:50 +#: src/views/stream/components/Deploy.vue:50 msgid "Enable %{conf_name} in %{node_name} failed" msgstr "Falló el habilitado de %{conf_name} en %{node_name}" -#: src/views/domain/components/Deploy.vue:46 -#: src/views/stream/components/Deploy.vue:46 +#: src/views/domain/components/Deploy.vue:45 +#: src/views/stream/components/Deploy.vue:45 msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "Habilitado exitoso de %{conf_name} en %{node_name}" @@ -635,12 +662,12 @@ msgstr "Habilitado exitoso de %{conf_name} en %{node_name}" msgid "Enable auto-renewal failed for %{name}" msgstr "No se pudo activar la renovación automática por %{name}" -#: src/views/domain/DomainAdd.vue:46 +#: src/views/domain/DomainAdd.vue:43 msgid "Enable failed" msgstr "Falló la habilitación" -#: src/views/domain/components/Deploy.vue:44 -#: src/views/stream/components/Deploy.vue:44 +#: src/views/domain/components/Deploy.vue:43 +#: src/views/stream/components/Deploy.vue:43 msgid "Enable successfully" msgstr "Habilitado con Éxito" @@ -650,19 +677,19 @@ msgstr "Habilitar TLS" #: src/views/domain/cert/ChangeCert.vue:40 #: src/views/domain/components/RightSettings.vue:77 -#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29 +#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29 #: src/views/environment/Environment.vue:102 #: src/views/preference/LogrotateSettings.vue:20 #: src/views/stream/components/RightSettings.vue:76 -#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29 +#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29 msgid "Enabled" msgstr "Habilitado" #: src/views/domain/components/RightSettings.vue:29 -#: src/views/domain/components/SiteDuplicate.vue:98 -#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57 +#: src/views/domain/components/SiteDuplicate.vue:94 +#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57 #: src/views/stream/components/RightSettings.vue:29 -#: src/views/stream/components/StreamDuplicate.vue:98 +#: src/views/stream/components/StreamDuplicate.vue:94 #: src/views/stream/StreamList.vue:57 msgid "Enabled successfully" msgstr "Habilitado con éxito" @@ -731,7 +758,7 @@ msgstr "Error al habilitar %{msg}" msgid "Failed to get certificate information" msgstr "No se pudo obtener la información del certificado" -#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124 +#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122 msgid "Failed to save, syntax error(s) was detected in the configuration." msgstr "" "No se pudo guardar, se detectó un error(es) de sintaxis en la configuración." @@ -757,7 +784,7 @@ msgstr "Archivo no encontrado" msgid "Filter" msgstr "Filtro" -#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101 +#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97 msgid "Finished" msgstr "Terminado" @@ -825,6 +852,12 @@ msgstr "HTTP01" msgid "If left blank, the default CA Dir will be used." msgstr "" +#: src/views/preference/AuthSettings.vue:60 +msgid "" +"If the number of login failed attempts from a ip reach the max attempts in " +"ban threshold minutes, the ip will be banned for a period of time." +msgstr "" + #: src/views/certificate/Certificate.vue:136 msgid "Import" msgstr "Importar" @@ -833,6 +866,11 @@ msgstr "Importar" msgid "Import Certificate" msgstr "Importar Certificado" +#: src/views/other/Login.vue:59 +#, fuzzy +msgid "Incorrect username or password" +msgstr "El nombre de usuario o contraseña son incorrectos" + #: src/constants/index.ts:18 msgid "Info" msgstr "Información" @@ -845,7 +883,7 @@ msgstr "Error de actualización de kernel inicial" msgid "Initialing core upgrader" msgstr "Inicializando la actualización del kernel" -#: src/routes/index.ts:273 src/views/other/Install.vue:136 +#: src/routes/index.ts:273 src/views/other/Install.vue:135 msgid "Install" msgstr "Instalar" @@ -866,6 +904,10 @@ msgstr "" msgid "Invalid" msgstr "Válido" +#: src/views/preference/AuthSettings.vue:14 +msgid "IP" +msgstr "" + #: src/views/certificate/Certificate.vue:144 msgid "Issue wildcard certificate" msgstr "Obtener certificado comodín" @@ -897,7 +939,7 @@ msgstr "Comprobado por última vez el" msgid "Leave blank for no change" msgstr "Para no modificar dejar en blanco" -#: src/views/preference/OpenAISettings.vue:50 +#: src/views/preference/OpenAISettings.vue:53 msgid "Leave blank for the default: https://api.openai.com/" msgstr "Dejar en blanco para el valor predeterminado: https://api.openai.com/" @@ -949,11 +991,11 @@ msgstr "Ubicaciones" msgid "Log" msgstr "Registro" -#: src/routes/index.ts:279 src/views/other/Login.vue:147 +#: src/routes/index.ts:279 src/views/other/Login.vue:159 msgid "Login" msgstr "Acceso" -#: src/views/other/Login.vue:51 src/views/other/Login.vue:97 +#: src/views/other/Login.vue:109 src/views/other/Login.vue:51 msgid "Login successful" msgstr "Acceso exitoso" @@ -961,7 +1003,7 @@ msgstr "Acceso exitoso" msgid "Logout successful" msgstr "Cierre de sesión exitoso" -#: src/views/preference/Preference.vue:119 +#: src/views/preference/Preference.vue:134 msgid "Logrotate" msgstr "" @@ -1003,6 +1045,10 @@ msgstr "Administrar usuarios" msgid "Managed Certificate" msgstr "Certificado Administrado" +#: src/views/preference/AuthSettings.vue:74 +msgid "Max Attempts" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:217 #: src/views/dashboard/ServerAnalytic.vue:218 msgid "Memory" @@ -1016,7 +1062,7 @@ msgstr "Memoria y almacenamiento" msgid "Minutes" msgstr "" -#: src/views/preference/OpenAISettings.vue:30 +#: src/views/preference/OpenAISettings.vue:33 #, fuzzy msgid "Model" msgstr "Modo de ejecución" @@ -1031,7 +1077,7 @@ msgstr "Modificar" msgid "Modify Certificate" msgstr "Modificar Certificado" -#: src/views/domain/DomainAdd.vue:155 +#: src/views/domain/DomainAdd.vue:151 msgid "Modify Config" msgstr "Modificar configuración" @@ -1050,12 +1096,12 @@ msgstr "Directiva multilínea" #: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7 #: src/views/domain/cert/ChangeCert.vue:17 #: src/views/domain/components/RightSettings.vue:83 -#: src/views/domain/components/SiteDuplicate.vue:133 +#: src/views/domain/components/SiteDuplicate.vue:129 #: src/views/domain/DomainList.vue:13 #: src/views/domain/ngx_conf/NgxUpstream.vue:175 #: src/views/environment/Environment.vue:12 #: src/views/stream/components/RightSettings.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:133 +#: src/views/stream/components/StreamDuplicate.vue:129 #: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187 msgid "Name" msgstr "Nombre" @@ -1082,11 +1128,11 @@ msgstr "Se liberó una nueva versión" #: src/views/certificate/WildcardCertificate.vue:99 #: src/views/domain/cert/components/ObtainCert.vue:203 -#: src/views/domain/DomainAdd.vue:142 +#: src/views/domain/DomainAdd.vue:138 msgid "Next" msgstr "Siguiente" -#: src/views/preference/Preference.vue:107 +#: src/views/preference/Preference.vue:122 msgid "Nginx" msgstr "Nginx" @@ -1094,7 +1140,7 @@ msgstr "Nginx" msgid "Nginx Access Log Path" msgstr "Ruta de registro de acceso de Nginx" -#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209 +#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207 msgid "Nginx Configuration Parse Error" msgstr "Error de análisis de configuración de Nginx" @@ -1119,7 +1165,7 @@ msgid "Nginx restarted successfully" msgstr "Nginx reiniciado con éxito" #: src/components/ChatGPT/ChatGPT.vue:270 -#: src/components/Notification/Notification.vue:82 +#: src/components/Notification/Notification.vue:84 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:521 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:535 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:549 @@ -1127,6 +1173,7 @@ msgstr "Nginx reiniciado con éxito" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90 #: src/views/domain/ngx_conf/LocationEditor.vue:71 #: src/views/notification/Notification.vue:70 +#: src/views/preference/AuthSettings.vue:96 #: src/views/preference/BasicSettings.vue:101 #: src/views/stream/StreamList.vue:165 msgid "No" @@ -1157,7 +1204,7 @@ msgstr "Nota" msgid "Notification" msgstr "Notificación" -#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221 +#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221 msgid "Notifications" msgstr "Notificaciones" @@ -1181,7 +1228,7 @@ msgid "Ok" msgstr "" #: src/components/ChatGPT/ChatGPT.vue:271 -#: src/components/Notification/Notification.vue:83 +#: src/components/Notification/Notification.vue:85 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:522 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:536 @@ -1211,7 +1258,7 @@ msgstr "Una vez que se complete la verificación, los registros se eliminarán." msgid "Online" msgstr "En línea" -#: src/views/preference/Preference.vue:113 +#: src/views/preference/Preference.vue:128 msgid "OpenAI" msgstr "OpenAI" @@ -1223,13 +1270,13 @@ msgstr "SO" msgid "OS:" msgstr "SO:" -#: src/views/domain/components/Deploy.vue:90 -#: src/views/stream/components/Deploy.vue:90 +#: src/views/domain/components/Deploy.vue:87 +#: src/views/stream/components/Deploy.vue:87 msgid "Overwrite" msgstr "Sobrescribir" -#: src/views/domain/components/Deploy.vue:94 -#: src/views/stream/components/Deploy.vue:94 +#: src/views/domain/components/Deploy.vue:91 +#: src/views/stream/components/Deploy.vue:91 msgid "Overwrite exist file" msgstr "Sobrescribir archivo existente" @@ -1237,11 +1284,11 @@ msgstr "Sobrescribir archivo existente" msgid "Params" msgstr "Parámetros" -#: src/views/other/Login.vue:132 src/views/user/User.vue:18 +#: src/views/other/Login.vue:144 src/views/user/User.vue:18 msgid "Password" msgstr "Contraseña" -#: src/views/other/Install.vue:110 +#: src/views/other/Install.vue:109 msgid "Password (*)" msgstr "Contraseña (*)" @@ -1313,7 +1360,7 @@ msgstr "¡Seleccione al menos un nodo!" msgid "Pre-release" msgstr "Prelanzamiento" -#: src/routes/index.ts:239 src/views/preference/Preference.vue:96 +#: src/routes/index.ts:239 src/views/preference/Preference.vue:105 msgid "Preference" msgstr "Configuración" @@ -1409,7 +1456,16 @@ msgstr "Recargando" msgid "Reloading nginx" msgstr "Recargando Nginx" -#: src/components/Notification/Notification.vue:50 +#: src/views/preference/AuthSettings.vue:101 +msgid "Remove" +msgstr "" + +#: src/views/preference/AuthSettings.vue:47 +#, fuzzy +msgid "Remove successfully" +msgstr "Eliminado con éxito" + +#: src/components/Notification/Notification.vue:52 msgid "Removed successfully" msgstr "Eliminado con éxito" @@ -1461,9 +1517,9 @@ msgstr "Corriendo" #: src/components/ChatGPT/ChatGPT.vue:252 #: src/views/certificate/CertificateEditor.vue:249 -#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263 +#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120 -#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254 +#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252 msgid "Save" msgstr "Guardar" @@ -1471,7 +1527,7 @@ msgstr "Guardar" msgid "Save Directive" msgstr "Guardar Directiva" -#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50 +#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41 msgid "Save error %{msg}" msgstr "Error al guardar %{msg}" @@ -1479,14 +1535,14 @@ msgstr "Error al guardar %{msg}" #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104 #: src/views/certificate/CertificateEditor.vue:46 -#: src/views/preference/Preference.vue:66 +#: src/views/preference/Preference.vue:74 msgid "Save successfully" msgstr "Guardado con éxito" -#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38 -#: src/views/domain/DomainEdit.vue:148 +#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37 +#: src/views/domain/DomainEdit.vue:146 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39 -#: src/views/stream/StreamEdit.vue:140 +#: src/views/stream/StreamEdit.vue:138 msgid "Saved successfully" msgstr "Guardado con éxito" @@ -1511,8 +1567,9 @@ msgstr "Enviado" #: src/components/StdDesign/StdDataDisplay/StdTable.vue:196 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:235 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81 -#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70 -#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113 +#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69 +#: src/views/preference/AuthSettings.vue:49 +#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42 msgid "Server error" msgstr "Error del servidor" @@ -1531,7 +1588,7 @@ msgid "server_name not found in directives" msgstr "No se encuentra server_name en las directivas" #: src/views/domain/cert/components/AutoCertStepOne.vue:34 -#: src/views/domain/DomainAdd.vue:121 +#: src/views/domain/DomainAdd.vue:117 msgid "server_name parameter is required" msgstr "Se requiere el parámetro server_name" @@ -1583,7 +1640,7 @@ msgstr "Ruta de la llave del certificado SSL" msgid "SSL Certificate Path" msgstr "Ruta del certificado SSL" -#: src/views/other/Login.vue:158 +#: src/views/other/Login.vue:170 msgid "SSO Login" msgstr "Acceso SSO" @@ -1667,8 +1724,8 @@ msgstr "" msgid "System" msgstr "Sistema" -#: src/views/domain/components/SiteDuplicate.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:140 +#: src/views/domain/components/SiteDuplicate.vue:136 +#: src/views/stream/components/StreamDuplicate.vue:136 msgid "Target" msgstr "Objetivo" @@ -1701,7 +1758,7 @@ msgstr "La entrada no es un Certificado SSL" msgid "The input is not a SSL Certificate Key" msgstr "La entrada no es una clave de certificado SSL" -#: src/views/preference/OpenAISettings.vue:33 +#: src/views/preference/OpenAISettings.vue:36 msgid "" "The model name should only contain letters, unicode, numbers, hyphens, " "dashes, and dots." @@ -1736,8 +1793,8 @@ msgstr "" msgid "The url is invalid" msgstr "La URL no es válida" -#: src/views/preference/OpenAISettings.vue:45 -#: src/views/preference/OpenAISettings.vue:57 +#: src/views/preference/OpenAISettings.vue:48 +#: src/views/preference/OpenAISettings.vue:60 #, fuzzy msgid "The url is invalid." msgstr "La URL no es válida" @@ -1764,6 +1821,7 @@ msgstr "Este campo es obligatorio" msgid "This field should not be empty" msgstr "Este campo no debe estar vacío" +#: src/views/preference/AuthSettings.vue:59 #: src/views/preference/LogrotateSettings.vue:12 msgid "Tips" msgstr "" @@ -1784,10 +1842,14 @@ msgstr "" "de la autoridad al backend, y debemos guardar este archivo y volver a cargar " "Nginx. ¿Estás seguro de que quieres continuar?" -#: src/views/preference/OpenAISettings.vue:69 +#: src/views/preference/OpenAISettings.vue:72 msgid "Token is not valid" msgstr "El token no es válido" +#: src/views/other/Login.vue:62 +msgid "Too many login failed attempts, please try again later" +msgstr "" + #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221 msgid "Trash" msgstr "" @@ -1840,11 +1902,15 @@ msgstr "URL" msgid "User" msgstr "Usuario" -#: src/views/other/Login.vue:122 src/views/user/User.vue:9 +#: src/views/other/Login.vue:65 +msgid "User is banned" +msgstr "" + +#: src/views/other/Login.vue:134 src/views/user/User.vue:9 msgid "Username" msgstr "Nombre de usuario" -#: src/views/other/Install.vue:100 +#: src/views/other/Install.vue:99 msgid "Username (*)" msgstr "Nombre de usuario (*)" @@ -1858,7 +1924,7 @@ msgstr "Válido" msgid "View" msgstr "Ver" -#: src/components/Notification/Notification.vue:141 +#: src/components/Notification/Notification.vue:143 msgid "View all notifications" msgstr "Ver todas las notificaciones" @@ -1874,7 +1940,7 @@ msgstr "Modo Básico" #: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33 #: src/views/domain/cert/components/AutoCertStepOne.vue:28 -#: src/views/domain/DomainAdd.vue:116 +#: src/views/domain/DomainAdd.vue:112 msgid "Warning" msgstr "Advertencia" @@ -1909,6 +1975,7 @@ msgstr "Escribir certificado a disco" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89 #: src/views/domain/ngx_conf/LocationEditor.vue:70 +#: src/views/preference/AuthSettings.vue:95 #: src/views/preference/BasicSettings.vue:100 msgid "Yes" msgstr "Si" diff --git a/app/src/language/fr_FR/app.po b/app/src/language/fr_FR/app.po index 659300a84..86dc63d6b 100644 --- a/app/src/language/fr_FR/app.po +++ b/app/src/language/fr_FR/app.po @@ -30,7 +30,8 @@ msgstr "Nom d'utilisateur" #: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34 #: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129 #: src/views/notification/Notification.vue:37 -#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43 +#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47 +#: src/views/user/User.vue:43 msgid "Action" msgstr "Action" @@ -53,7 +54,7 @@ msgstr "Ajouter une directive" msgid "Add Location" msgstr "Ajouter une localisation" -#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93 +#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89 msgid "Add Site" msgstr "Ajouter un site" @@ -72,11 +73,11 @@ msgstr "Mis à jour avec succés" msgid "Additional" msgstr "Supplémentaire" -#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191 +#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189 msgid "Advance Mode" msgstr "Mode avancé" -#: src/views/preference/OpenAISettings.vue:42 +#: src/views/preference/OpenAISettings.vue:45 msgid "API Base Url" msgstr "URL de base de l'API" @@ -85,11 +86,11 @@ msgstr "URL de base de l'API" msgid "API Document" msgstr "Jeton d'API" -#: src/views/preference/OpenAISettings.vue:54 +#: src/views/preference/OpenAISettings.vue:57 msgid "API Proxy" msgstr "Proxy d'API" -#: src/views/preference/OpenAISettings.vue:66 +#: src/views/preference/OpenAISettings.vue:69 msgid "API Token" msgstr "Jeton d'API" @@ -98,7 +99,12 @@ msgstr "Jeton d'API" msgid "Arch" msgstr "Arch" -#: src/components/Notification/Notification.vue:84 +#: src/views/preference/AuthSettings.vue:94 +#, fuzzy +msgid "Are you sure to delete this banned IP immediately?" +msgstr "Etes-vous sûr que vous voulez supprimer ?" + +#: src/components/Notification/Notification.vue:86 #: src/views/notification/Notification.vue:72 #, fuzzy msgid "Are you sure you want to clear all notifications?" @@ -149,6 +155,15 @@ msgstr "Modèle ChatGPT" msgid "Assistant" msgstr "" +#: src/views/preference/AuthSettings.vue:17 +msgid "Attempts" +msgstr "" + +#: src/views/preference/Preference.vue:116 +#, fuzzy +msgid "Auth" +msgstr "Autheur" + #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120 msgid "Author" @@ -172,8 +187,8 @@ msgstr "Renouvellement automatique activé pour %{name}" #: src/views/certificate/CertificateEditor.vue:242 #: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87 -#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168 -#: src/views/stream/StreamEdit.vue:247 +#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168 +#: src/views/stream/StreamEdit.vue:245 msgid "Back" msgstr "Retour" @@ -181,18 +196,30 @@ msgstr "Retour" msgid "Back Home" msgstr "Retour au menu principal" -#: src/views/domain/DomainAdd.vue:99 +#: src/views/preference/AuthSettings.vue:68 +msgid "Ban Threshold Minutes" +msgstr "" + +#: src/views/preference/AuthSettings.vue:82 +msgid "Banned IPs" +msgstr "" + +#: src/views/preference/AuthSettings.vue:20 +msgid "Banned Until" +msgstr "" + +#: src/views/domain/DomainAdd.vue:95 msgid "Base information" msgstr "Information générale" #: src/views/config/ConfigEdit.vue:115 #: src/views/domain/components/RightSettings.vue:75 -#: src/views/preference/Preference.vue:101 +#: src/views/preference/Preference.vue:110 #: src/views/stream/components/RightSettings.vue:74 msgid "Basic" msgstr "Basique" -#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194 +#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192 msgid "Basic Mode" msgstr "Mode simple" @@ -279,12 +306,12 @@ msgid "Cleaning environment variables" msgstr "Nettoyage des variables d'environnement" #: src/components/ChatGPT/ChatGPT.vue:276 -#: src/components/Notification/Notification.vue:89 +#: src/components/Notification/Notification.vue:91 #: src/views/notification/Notification.vue:77 msgid "Clear" msgstr "Effacer" -#: src/components/Notification/Notification.vue:40 +#: src/components/Notification/Notification.vue:42 #: src/views/notification/Notification.vue:46 #, fuzzy msgid "Cleared successfully" @@ -310,7 +337,7 @@ msgstr "Modèles de configuration" msgid "Configuration file is test successful" msgstr "Le fichier de configuration est testé avec succès" -#: src/views/domain/DomainAdd.vue:105 +#: src/views/domain/DomainAdd.vue:101 msgid "Configuration Name" msgstr "Nom de la configuration" @@ -318,7 +345,7 @@ msgstr "Nom de la configuration" msgid "Configurations" msgstr "Configurations" -#: src/views/domain/DomainAdd.vue:100 +#: src/views/domain/DomainAdd.vue:96 msgid "Configure SSL" msgstr "Configurer SSL" @@ -349,7 +376,7 @@ msgstr "CPU :" msgid "Create" msgstr "Créé le" -#: src/views/domain/DomainAdd.vue:158 +#: src/views/domain/DomainAdd.vue:154 msgid "Create Another" msgstr "Créer un autre" @@ -388,7 +415,7 @@ msgstr "" msgid "Dashboard" msgstr "Dashboard" -#: src/views/other/Install.vue:121 +#: src/views/other/Install.vue:120 msgid "Database (Optional, default: database)" msgstr "Base de données (Facultatif, par défaut : database)" @@ -422,15 +449,15 @@ msgstr "Supprimer le site : %{site_name}" msgid "Deleted successfully" msgstr "Désactivé avec succès" -#: src/views/domain/components/Deploy.vue:106 +#: src/views/domain/components/Deploy.vue:103 #: src/views/domain/components/RightSettings.vue:93 -#: src/views/stream/components/Deploy.vue:106 +#: src/views/stream/components/Deploy.vue:103 #: src/views/stream/components/RightSettings.vue:92 msgid "Deploy" msgstr "" -#: src/views/domain/components/Deploy.vue:63 -#: src/views/stream/components/Deploy.vue:63 +#: src/views/domain/components/Deploy.vue:60 +#: src/views/stream/components/Deploy.vue:60 msgid "Deploy %{conf_name} to %{node_name} failed" msgstr "" @@ -480,9 +507,9 @@ msgstr "Désactivé" msgid "Disable auto-renewal failed for %{name}" msgstr "La désactivation du renouvellement automatique a échoué pour %{name}" -#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185 +#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183 #: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93 -#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33 +#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33 msgid "Disabled" msgstr "Désactivé" @@ -557,7 +584,7 @@ msgstr "Voulez-vous supprimer ce serveur ?" msgid "Domain" msgstr "" -#: src/views/domain/DomainAdd.vue:148 +#: src/views/domain/DomainAdd.vue:144 msgid "Domain Config Created Successfully" msgstr "La configuration du domaine a été créée avec succès" @@ -580,38 +607,38 @@ msgstr "Téléchargement de la dernière version" msgid "Dry run mode enabled" msgstr "" -#: src/views/domain/components/SiteDuplicate.vue:126 +#: src/views/domain/components/SiteDuplicate.vue:122 #: src/views/domain/DomainList.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:126 +#: src/views/stream/components/StreamDuplicate.vue:122 #: src/views/stream/StreamList.vue:161 msgid "Duplicate" msgstr "Dupliquer" -#: src/views/domain/components/SiteDuplicate.vue:84 -#: src/views/stream/components/StreamDuplicate.vue:84 +#: src/views/domain/components/SiteDuplicate.vue:82 +#: src/views/stream/components/StreamDuplicate.vue:82 #, fuzzy msgid "Duplicate %{conf_name} to %{node_name} successfully" msgstr "Dupliqué avec succès" -#: src/views/domain/components/SiteDuplicate.vue:90 -#: src/views/stream/components/StreamDuplicate.vue:90 +#: src/views/domain/components/SiteDuplicate.vue:87 +#: src/views/stream/components/StreamDuplicate.vue:87 #, fuzzy msgid "Duplicate failed" msgstr "Dupliquer" -#: src/views/domain/components/SiteDuplicate.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:82 +#: src/views/domain/components/SiteDuplicate.vue:80 +#: src/views/stream/components/StreamDuplicate.vue:80 #, fuzzy msgid "Duplicate successfully" msgstr "Dupliqué avec succès" -#: src/views/domain/components/SiteDuplicate.vue:64 -#: src/views/stream/components/StreamDuplicate.vue:64 +#: src/views/domain/components/SiteDuplicate.vue:63 +#: src/views/stream/components/StreamDuplicate.vue:63 #, fuzzy msgid "Duplicate to local successfully" msgstr "Dupliqué avec succès" -#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166 +#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164 msgid "Edit %{n}" msgstr "Modifier %{n}" @@ -633,25 +660,25 @@ msgstr "Modifier le site" msgid "Email" msgstr "Email (*)" -#: src/views/other/Install.vue:90 +#: src/views/other/Install.vue:89 msgid "Email (*)" msgstr "Email (*)" -#: src/views/domain/components/Deploy.vue:86 +#: src/views/domain/components/Deploy.vue:83 #: src/views/domain/DomainList.vue:132 -#: src/views/stream/components/Deploy.vue:86 +#: src/views/stream/components/Deploy.vue:83 #: src/views/stream/StreamList.vue:153 #, fuzzy msgid "Enable" msgstr "Activé" -#: src/views/domain/components/Deploy.vue:52 -#: src/views/stream/components/Deploy.vue:52 +#: src/views/domain/components/Deploy.vue:50 +#: src/views/stream/components/Deploy.vue:50 msgid "Enable %{conf_name} in %{node_name} failed" msgstr "" -#: src/views/domain/components/Deploy.vue:46 -#: src/views/stream/components/Deploy.vue:46 +#: src/views/domain/components/Deploy.vue:45 +#: src/views/stream/components/Deploy.vue:45 msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "" @@ -659,12 +686,12 @@ msgstr "" msgid "Enable auto-renewal failed for %{name}" msgstr "Échec de l'activation du renouvellement automatique pour %{name}" -#: src/views/domain/DomainAdd.vue:46 +#: src/views/domain/DomainAdd.vue:43 msgid "Enable failed" msgstr "Échec de l'activation" -#: src/views/domain/components/Deploy.vue:44 -#: src/views/stream/components/Deploy.vue:44 +#: src/views/domain/components/Deploy.vue:43 +#: src/views/stream/components/Deploy.vue:43 #, fuzzy msgid "Enable successfully" msgstr "Activé avec succès" @@ -675,19 +702,19 @@ msgstr "Activer TLS" #: src/views/domain/cert/ChangeCert.vue:40 #: src/views/domain/components/RightSettings.vue:77 -#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29 +#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29 #: src/views/environment/Environment.vue:102 #: src/views/preference/LogrotateSettings.vue:20 #: src/views/stream/components/RightSettings.vue:76 -#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29 +#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29 msgid "Enabled" msgstr "Activé" #: src/views/domain/components/RightSettings.vue:29 -#: src/views/domain/components/SiteDuplicate.vue:98 -#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57 +#: src/views/domain/components/SiteDuplicate.vue:94 +#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57 #: src/views/stream/components/RightSettings.vue:29 -#: src/views/stream/components/StreamDuplicate.vue:98 +#: src/views/stream/components/StreamDuplicate.vue:94 #: src/views/stream/StreamList.vue:57 msgid "Enabled successfully" msgstr "Activé avec succès" @@ -758,7 +785,7 @@ msgstr "Impossible d'activer %{msg}" msgid "Failed to get certificate information" msgstr "Échec de l'obtention des informations sur le certificat" -#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124 +#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122 msgid "Failed to save, syntax error(s) was detected in the configuration." msgstr "" "Échec de l'enregistrement, une ou plusieurs erreurs de syntaxe ont été " @@ -786,7 +813,7 @@ msgstr "Fichier introuvable" msgid "Filter" msgstr "Filtrer" -#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101 +#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97 msgid "Finished" msgstr "Finie" @@ -856,6 +883,12 @@ msgstr "HTTP01" msgid "If left blank, the default CA Dir will be used." msgstr "" +#: src/views/preference/AuthSettings.vue:60 +msgid "" +"If the number of login failed attempts from a ip reach the max attempts in " +"ban threshold minutes, the ip will be banned for a period of time." +msgstr "" + #: src/views/certificate/Certificate.vue:136 #, fuzzy msgid "Import" @@ -866,6 +899,11 @@ msgstr "Exporter" msgid "Import Certificate" msgstr "État du certificat" +#: src/views/other/Login.vue:59 +#, fuzzy +msgid "Incorrect username or password" +msgstr "Le pseudo ou mot de passe est incorect" + #: src/constants/index.ts:18 msgid "Info" msgstr "" @@ -878,7 +916,7 @@ msgstr "Erreur du programme de mise à niveau initial du core" msgid "Initialing core upgrader" msgstr "Initialisation du programme de mise à niveau du core" -#: src/routes/index.ts:273 src/views/other/Install.vue:136 +#: src/routes/index.ts:273 src/views/other/Install.vue:135 msgid "Install" msgstr "Installer" @@ -898,6 +936,10 @@ msgstr "" msgid "Invalid" msgstr "" +#: src/views/preference/AuthSettings.vue:14 +msgid "IP" +msgstr "" + #: src/views/certificate/Certificate.vue:144 #, fuzzy msgid "Issue wildcard certificate" @@ -931,7 +973,7 @@ msgstr "Dernière vérification le" msgid "Leave blank for no change" msgstr "Laisser vide pour aucun changement" -#: src/views/preference/OpenAISettings.vue:50 +#: src/views/preference/OpenAISettings.vue:53 msgid "Leave blank for the default: https://api.openai.com/" msgstr "Laissez vide pour la valeur par défaut : https://api.openai.com/" @@ -990,11 +1032,11 @@ msgstr "Localisations" msgid "Log" msgstr "Connexion" -#: src/routes/index.ts:279 src/views/other/Login.vue:147 +#: src/routes/index.ts:279 src/views/other/Login.vue:159 msgid "Login" msgstr "Connexion" -#: src/views/other/Login.vue:51 src/views/other/Login.vue:97 +#: src/views/other/Login.vue:109 src/views/other/Login.vue:51 msgid "Login successful" msgstr "Connexion réussie" @@ -1002,7 +1044,7 @@ msgstr "Connexion réussie" msgid "Logout successful" msgstr "Déconnexion réussie" -#: src/views/preference/Preference.vue:119 +#: src/views/preference/Preference.vue:134 msgid "Logrotate" msgstr "" @@ -1047,6 +1089,10 @@ msgstr "Gérer les utilisateurs" msgid "Managed Certificate" msgstr "Changer de certificat" +#: src/views/preference/AuthSettings.vue:74 +msgid "Max Attempts" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:217 #: src/views/dashboard/ServerAnalytic.vue:218 msgid "Memory" @@ -1060,7 +1106,7 @@ msgstr "Mémoire et stockage" msgid "Minutes" msgstr "" -#: src/views/preference/OpenAISettings.vue:30 +#: src/views/preference/OpenAISettings.vue:33 #, fuzzy msgid "Model" msgstr "Mode d'exécution" @@ -1076,7 +1122,7 @@ msgstr "Modifier" msgid "Modify Certificate" msgstr "État du certificat" -#: src/views/domain/DomainAdd.vue:155 +#: src/views/domain/DomainAdd.vue:151 msgid "Modify Config" msgstr "Modifier la configuration" @@ -1095,12 +1141,12 @@ msgstr "Directive multiligne" #: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7 #: src/views/domain/cert/ChangeCert.vue:17 #: src/views/domain/components/RightSettings.vue:83 -#: src/views/domain/components/SiteDuplicate.vue:133 +#: src/views/domain/components/SiteDuplicate.vue:129 #: src/views/domain/DomainList.vue:13 #: src/views/domain/ngx_conf/NgxUpstream.vue:175 #: src/views/environment/Environment.vue:12 #: src/views/stream/components/RightSettings.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:133 +#: src/views/stream/components/StreamDuplicate.vue:129 #: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187 msgid "Name" msgstr "Nom" @@ -1127,11 +1173,11 @@ msgstr "Nouvelle version publiée" #: src/views/certificate/WildcardCertificate.vue:99 #: src/views/domain/cert/components/ObtainCert.vue:203 -#: src/views/domain/DomainAdd.vue:142 +#: src/views/domain/DomainAdd.vue:138 msgid "Next" msgstr "Suivant" -#: src/views/preference/Preference.vue:107 +#: src/views/preference/Preference.vue:122 #, fuzzy msgid "Nginx" msgstr "Journal Nginx" @@ -1140,7 +1186,7 @@ msgstr "Journal Nginx" msgid "Nginx Access Log Path" msgstr "Chemin du journal d'accès Nginx" -#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209 +#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207 msgid "Nginx Configuration Parse Error" msgstr "Erreur d'analyse de configuration Nginx" @@ -1165,7 +1211,7 @@ msgid "Nginx restarted successfully" msgstr "Nginx a redémarré avec succès" #: src/components/ChatGPT/ChatGPT.vue:270 -#: src/components/Notification/Notification.vue:82 +#: src/components/Notification/Notification.vue:84 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:521 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:535 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:549 @@ -1173,6 +1219,7 @@ msgstr "Nginx a redémarré avec succès" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90 #: src/views/domain/ngx_conf/LocationEditor.vue:71 #: src/views/notification/Notification.vue:70 +#: src/views/preference/AuthSettings.vue:96 #: src/views/preference/BasicSettings.vue:101 #: src/views/stream/StreamList.vue:165 msgid "No" @@ -1205,7 +1252,7 @@ msgstr "Note" msgid "Notification" msgstr "Certification" -#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221 +#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221 #, fuzzy msgid "Notifications" msgstr "Certification" @@ -1230,7 +1277,7 @@ msgid "Ok" msgstr "" #: src/components/ChatGPT/ChatGPT.vue:271 -#: src/components/Notification/Notification.vue:83 +#: src/components/Notification/Notification.vue:85 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:522 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:536 @@ -1260,7 +1307,7 @@ msgstr "" msgid "Online" msgstr "" -#: src/views/preference/Preference.vue:113 +#: src/views/preference/Preference.vue:128 msgid "OpenAI" msgstr "OpenAI" @@ -1272,13 +1319,13 @@ msgstr "OS" msgid "OS:" msgstr "OS :" -#: src/views/domain/components/Deploy.vue:90 -#: src/views/stream/components/Deploy.vue:90 +#: src/views/domain/components/Deploy.vue:87 +#: src/views/stream/components/Deploy.vue:87 msgid "Overwrite" msgstr "" -#: src/views/domain/components/Deploy.vue:94 -#: src/views/stream/components/Deploy.vue:94 +#: src/views/domain/components/Deploy.vue:91 +#: src/views/stream/components/Deploy.vue:91 msgid "Overwrite exist file" msgstr "" @@ -1286,11 +1333,11 @@ msgstr "" msgid "Params" msgstr "Paramètres" -#: src/views/other/Login.vue:132 src/views/user/User.vue:18 +#: src/views/other/Login.vue:144 src/views/user/User.vue:18 msgid "Password" msgstr "Mot de passe" -#: src/views/other/Install.vue:110 +#: src/views/other/Install.vue:109 msgid "Password (*)" msgstr "Mot de passe (*)" @@ -1360,7 +1407,7 @@ msgstr "" msgid "Pre-release" msgstr "" -#: src/routes/index.ts:239 src/views/preference/Preference.vue:96 +#: src/routes/index.ts:239 src/views/preference/Preference.vue:105 msgid "Preference" msgstr "Préférence" @@ -1459,7 +1506,16 @@ msgstr "Rechargement" msgid "Reloading nginx" msgstr "Rechargement de nginx" -#: src/components/Notification/Notification.vue:50 +#: src/views/preference/AuthSettings.vue:101 +msgid "Remove" +msgstr "" + +#: src/views/preference/AuthSettings.vue:47 +#, fuzzy +msgid "Remove successfully" +msgstr "Enregistré avec succès" + +#: src/components/Notification/Notification.vue:52 #, fuzzy msgid "Removed successfully" msgstr "Enregistré avec succès" @@ -1517,9 +1573,9 @@ msgstr "En cours d'éxécution" #: src/components/ChatGPT/ChatGPT.vue:252 #: src/views/certificate/CertificateEditor.vue:249 -#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263 +#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120 -#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254 +#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252 msgid "Save" msgstr "Enregistrer" @@ -1527,7 +1583,7 @@ msgstr "Enregistrer" msgid "Save Directive" msgstr "Enregistrer la directive" -#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50 +#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41 msgid "Save error %{msg}" msgstr "Enregistrer l'erreur %{msg}" @@ -1535,14 +1591,14 @@ msgstr "Enregistrer l'erreur %{msg}" #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104 #: src/views/certificate/CertificateEditor.vue:46 -#: src/views/preference/Preference.vue:66 +#: src/views/preference/Preference.vue:74 msgid "Save successfully" msgstr "Sauvegarde réussie" -#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38 -#: src/views/domain/DomainEdit.vue:148 +#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37 +#: src/views/domain/DomainEdit.vue:146 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39 -#: src/views/stream/StreamEdit.vue:140 +#: src/views/stream/StreamEdit.vue:138 msgid "Saved successfully" msgstr "Enregistré avec succès" @@ -1567,8 +1623,9 @@ msgstr "Envoyer" #: src/components/StdDesign/StdDataDisplay/StdTable.vue:196 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:235 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81 -#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70 -#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113 +#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69 +#: src/views/preference/AuthSettings.vue:49 +#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42 msgid "Server error" msgstr "Erreur du serveur" @@ -1587,7 +1644,7 @@ msgid "server_name not found in directives" msgstr "server_name introuvable dans les directives" #: src/views/domain/cert/components/AutoCertStepOne.vue:34 -#: src/views/domain/DomainAdd.vue:121 +#: src/views/domain/DomainAdd.vue:117 msgid "server_name parameter is required" msgstr "Le paramètre server_name est obligatoire" @@ -1643,7 +1700,7 @@ msgstr "Chemin de la clé du certificat SSL" msgid "SSL Certificate Path" msgstr "Chemin du certificat SSL" -#: src/views/other/Login.vue:158 +#: src/views/other/Login.vue:170 #, fuzzy msgid "SSO Login" msgstr "Connexion" @@ -1731,8 +1788,8 @@ msgstr "" msgid "System" msgstr "Système" -#: src/views/domain/components/SiteDuplicate.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:140 +#: src/views/domain/components/SiteDuplicate.vue:136 +#: src/views/stream/components/StreamDuplicate.vue:136 msgid "Target" msgstr "" @@ -1766,7 +1823,7 @@ msgstr "" msgid "The input is not a SSL Certificate Key" msgstr "Chemin de la clé du certificat SSL" -#: src/views/preference/OpenAISettings.vue:33 +#: src/views/preference/OpenAISettings.vue:36 msgid "" "The model name should only contain letters, unicode, numbers, hyphens, " "dashes, and dots." @@ -1802,8 +1859,8 @@ msgstr "" msgid "The url is invalid" msgstr "" -#: src/views/preference/OpenAISettings.vue:45 -#: src/views/preference/OpenAISettings.vue:57 +#: src/views/preference/OpenAISettings.vue:48 +#: src/views/preference/OpenAISettings.vue:60 msgid "The url is invalid." msgstr "" @@ -1832,6 +1889,7 @@ msgstr "" msgid "This field should not be empty" msgstr "" +#: src/views/preference/AuthSettings.vue:59 #: src/views/preference/LogrotateSettings.vue:12 msgid "Tips" msgstr "" @@ -1852,10 +1910,14 @@ msgstr "" "transmettre la demande de l'autorité au backend, et nous devons enregistrer " "ce fichier et recharger le Nginx. Êtes-vous sûr de vouloir continuer?" -#: src/views/preference/OpenAISettings.vue:69 +#: src/views/preference/OpenAISettings.vue:72 msgid "Token is not valid" msgstr "" +#: src/views/other/Login.vue:62 +msgid "Too many login failed attempts, please try again later" +msgstr "" + #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221 msgid "Trash" msgstr "" @@ -1909,11 +1971,15 @@ msgstr "" msgid "User" msgstr "Nom d'utilisateur" -#: src/views/other/Login.vue:122 src/views/user/User.vue:9 +#: src/views/other/Login.vue:65 +msgid "User is banned" +msgstr "" + +#: src/views/other/Login.vue:134 src/views/user/User.vue:9 msgid "Username" msgstr "Nom d'utilisateur" -#: src/views/other/Install.vue:100 +#: src/views/other/Install.vue:99 msgid "Username (*)" msgstr "Nom d'utilisateur (*)" @@ -1927,7 +1993,7 @@ msgstr "" msgid "View" msgstr "Voir" -#: src/components/Notification/Notification.vue:141 +#: src/components/Notification/Notification.vue:143 #, fuzzy msgid "View all notifications" msgstr "Certification" @@ -1943,7 +2009,7 @@ msgstr "Mode simple" #: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33 #: src/views/domain/cert/components/AutoCertStepOne.vue:28 -#: src/views/domain/DomainAdd.vue:116 +#: src/views/domain/DomainAdd.vue:112 msgid "Warning" msgstr "Avertissement" @@ -1976,6 +2042,7 @@ msgstr "Écriture du certificat sur le disque" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89 #: src/views/domain/ngx_conf/LocationEditor.vue:70 +#: src/views/preference/AuthSettings.vue:95 #: src/views/preference/BasicSettings.vue:100 msgid "Yes" msgstr "Oui" diff --git a/app/src/language/ko_KR/app.po b/app/src/language/ko_KR/app.po index 748dcf612..13dd01e1e 100644 --- a/app/src/language/ko_KR/app.po +++ b/app/src/language/ko_KR/app.po @@ -32,7 +32,8 @@ msgstr "사용자 이름" #: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34 #: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129 #: src/views/notification/Notification.vue:37 -#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43 +#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47 +#: src/views/user/User.vue:43 msgid "Action" msgstr "작업" @@ -55,7 +56,7 @@ msgstr "아래에 지시문 추가" msgid "Add Location" msgstr "위치 추가" -#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93 +#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89 msgid "Add Site" msgstr "사이트 추가" @@ -71,11 +72,11 @@ msgstr "성공적으로 추가됨" msgid "Additional" msgstr "추가적인" -#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191 +#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189 msgid "Advance Mode" msgstr "고급 모드" -#: src/views/preference/OpenAISettings.vue:42 +#: src/views/preference/OpenAISettings.vue:45 msgid "API Base Url" msgstr "API 기본 URL" @@ -84,11 +85,11 @@ msgstr "API 기본 URL" msgid "API Document" msgstr "API 토큰" -#: src/views/preference/OpenAISettings.vue:54 +#: src/views/preference/OpenAISettings.vue:57 msgid "API Proxy" msgstr "API 프록시" -#: src/views/preference/OpenAISettings.vue:66 +#: src/views/preference/OpenAISettings.vue:69 msgid "API Token" msgstr "API 토큰" @@ -96,7 +97,12 @@ msgstr "API 토큰" msgid "Arch" msgstr "아키텍처" -#: src/components/Notification/Notification.vue:84 +#: src/views/preference/AuthSettings.vue:94 +#, fuzzy +msgid "Are you sure to delete this banned IP immediately?" +msgstr "정말 삭제하시겠습니까?" + +#: src/components/Notification/Notification.vue:86 #: src/views/notification/Notification.vue:72 msgid "Are you sure you want to clear all notifications?" msgstr "모든 알림을 지우시겠습니까?" @@ -145,6 +151,15 @@ msgstr "ChatGPT에게 도움 요청" msgid "Assistant" msgstr "조수" +#: src/views/preference/AuthSettings.vue:17 +msgid "Attempts" +msgstr "" + +#: src/views/preference/Preference.vue:116 +#, fuzzy +msgid "Auth" +msgstr "저자" + #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120 msgid "Author" @@ -168,8 +183,8 @@ msgstr "%{name}에 대한 자동 갱신 활성화됨" #: src/views/certificate/CertificateEditor.vue:242 #: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87 -#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168 -#: src/views/stream/StreamEdit.vue:247 +#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168 +#: src/views/stream/StreamEdit.vue:245 msgid "Back" msgstr "뒤로" @@ -177,18 +192,30 @@ msgstr "뒤로" msgid "Back Home" msgstr "홈으로" -#: src/views/domain/DomainAdd.vue:99 +#: src/views/preference/AuthSettings.vue:68 +msgid "Ban Threshold Minutes" +msgstr "" + +#: src/views/preference/AuthSettings.vue:82 +msgid "Banned IPs" +msgstr "" + +#: src/views/preference/AuthSettings.vue:20 +msgid "Banned Until" +msgstr "" + +#: src/views/domain/DomainAdd.vue:95 msgid "Base information" msgstr "기본 정보" #: src/views/config/ConfigEdit.vue:115 #: src/views/domain/components/RightSettings.vue:75 -#: src/views/preference/Preference.vue:101 +#: src/views/preference/Preference.vue:110 #: src/views/stream/components/RightSettings.vue:74 msgid "Basic" msgstr "기본" -#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194 +#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192 msgid "Basic Mode" msgstr "기본 모드" @@ -272,12 +299,12 @@ msgid "Cleaning environment variables" msgstr "환경 변수 정리" #: src/components/ChatGPT/ChatGPT.vue:276 -#: src/components/Notification/Notification.vue:89 +#: src/components/Notification/Notification.vue:91 #: src/views/notification/Notification.vue:77 msgid "Clear" msgstr "클리어" -#: src/components/Notification/Notification.vue:40 +#: src/components/Notification/Notification.vue:42 #: src/views/notification/Notification.vue:46 msgid "Cleared successfully" msgstr "성공적으로 제거됨" @@ -301,7 +328,7 @@ msgstr "구성 템플릿" msgid "Configuration file is test successful" msgstr "구성 파일 테스트 성공" -#: src/views/domain/DomainAdd.vue:105 +#: src/views/domain/DomainAdd.vue:101 msgid "Configuration Name" msgstr "구성 이름" @@ -309,7 +336,7 @@ msgstr "구성 이름" msgid "Configurations" msgstr "구성들" -#: src/views/domain/DomainAdd.vue:100 +#: src/views/domain/DomainAdd.vue:96 msgid "Configure SSL" msgstr "SSL 구성하기" @@ -339,7 +366,7 @@ msgstr "CPU:" msgid "Create" msgstr "생성" -#: src/views/domain/DomainAdd.vue:158 +#: src/views/domain/DomainAdd.vue:154 msgid "Create Another" msgstr "다른 것 생성하기" @@ -378,7 +405,7 @@ msgstr "" msgid "Dashboard" msgstr "대시보드" -#: src/views/other/Install.vue:121 +#: src/views/other/Install.vue:120 msgid "Database (Optional, default: database)" msgstr "데이터베이스 (선택사항, 기본값: database)" @@ -410,15 +437,15 @@ msgstr "스트림 삭제: %{stream_name}" msgid "Deleted successfully" msgstr "성공적으로 삭제됨" -#: src/views/domain/components/Deploy.vue:106 +#: src/views/domain/components/Deploy.vue:103 #: src/views/domain/components/RightSettings.vue:93 -#: src/views/stream/components/Deploy.vue:106 +#: src/views/stream/components/Deploy.vue:103 #: src/views/stream/components/RightSettings.vue:92 msgid "Deploy" msgstr "배포" -#: src/views/domain/components/Deploy.vue:63 -#: src/views/stream/components/Deploy.vue:63 +#: src/views/domain/components/Deploy.vue:60 +#: src/views/stream/components/Deploy.vue:60 msgid "Deploy %{conf_name} to %{node_name} failed" msgstr "%{conf_name}을(를) %{node_name}(으)로 배포 실패" @@ -465,9 +492,9 @@ msgstr "비활성화" msgid "Disable auto-renewal failed for %{name}" msgstr "%{name}의 자동 갱신 비활성화 실패" -#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185 +#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183 #: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93 -#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33 +#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33 msgid "Disabled" msgstr "비활성화됨" @@ -538,7 +565,7 @@ msgstr "이 업스트림을 제거하시겠습니까?" msgid "Domain" msgstr "도메인" -#: src/views/domain/DomainAdd.vue:148 +#: src/views/domain/DomainAdd.vue:144 msgid "Domain Config Created Successfully" msgstr "도메인 구성이 성공적으로 생성되었습니다" @@ -559,35 +586,35 @@ msgstr "최신 릴리스 다운로드 중" msgid "Dry run mode enabled" msgstr "드라이런 모드 활성화됨" -#: src/views/domain/components/SiteDuplicate.vue:126 +#: src/views/domain/components/SiteDuplicate.vue:122 #: src/views/domain/DomainList.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:126 +#: src/views/stream/components/StreamDuplicate.vue:122 #: src/views/stream/StreamList.vue:161 msgid "Duplicate" msgstr "복제" -#: src/views/domain/components/SiteDuplicate.vue:84 -#: src/views/stream/components/StreamDuplicate.vue:84 +#: src/views/domain/components/SiteDuplicate.vue:82 +#: src/views/stream/components/StreamDuplicate.vue:82 msgid "Duplicate %{conf_name} to %{node_name} successfully" msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함" -#: src/views/domain/components/SiteDuplicate.vue:90 -#: src/views/stream/components/StreamDuplicate.vue:90 +#: src/views/domain/components/SiteDuplicate.vue:87 +#: src/views/stream/components/StreamDuplicate.vue:87 msgid "Duplicate failed" msgstr "복제 실패" -#: src/views/domain/components/SiteDuplicate.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:82 +#: src/views/domain/components/SiteDuplicate.vue:80 +#: src/views/stream/components/StreamDuplicate.vue:80 #, fuzzy msgid "Duplicate successfully" msgstr "성공적으로 복제됨" -#: src/views/domain/components/SiteDuplicate.vue:64 -#: src/views/stream/components/StreamDuplicate.vue:64 +#: src/views/domain/components/SiteDuplicate.vue:63 +#: src/views/stream/components/StreamDuplicate.vue:63 msgid "Duplicate to local successfully" msgstr "로컬로 성공적으로 복제됨" -#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166 +#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164 msgid "Edit %{n}" msgstr "%{n} 편집" @@ -608,24 +635,24 @@ msgstr "스트림 편집" msgid "Email" msgstr "이메일 (*)" -#: src/views/other/Install.vue:90 +#: src/views/other/Install.vue:89 msgid "Email (*)" msgstr "이메일 (*)" -#: src/views/domain/components/Deploy.vue:86 +#: src/views/domain/components/Deploy.vue:83 #: src/views/domain/DomainList.vue:132 -#: src/views/stream/components/Deploy.vue:86 +#: src/views/stream/components/Deploy.vue:83 #: src/views/stream/StreamList.vue:153 msgid "Enable" msgstr "활성화" -#: src/views/domain/components/Deploy.vue:52 -#: src/views/stream/components/Deploy.vue:52 +#: src/views/domain/components/Deploy.vue:50 +#: src/views/stream/components/Deploy.vue:50 msgid "Enable %{conf_name} in %{node_name} failed" msgstr "%{node_name}에서 %{conf_name} 활성화 실패" -#: src/views/domain/components/Deploy.vue:46 -#: src/views/stream/components/Deploy.vue:46 +#: src/views/domain/components/Deploy.vue:45 +#: src/views/stream/components/Deploy.vue:45 msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨" @@ -633,12 +660,12 @@ msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨" msgid "Enable auto-renewal failed for %{name}" msgstr "%{name}에 대한 자동 갱신 활성화 실패" -#: src/views/domain/DomainAdd.vue:46 +#: src/views/domain/DomainAdd.vue:43 msgid "Enable failed" msgstr "활성화 실패" -#: src/views/domain/components/Deploy.vue:44 -#: src/views/stream/components/Deploy.vue:44 +#: src/views/domain/components/Deploy.vue:43 +#: src/views/stream/components/Deploy.vue:43 msgid "Enable successfully" msgstr "성공적으로 활성화" @@ -648,19 +675,19 @@ msgstr "TLS 활성화" #: src/views/domain/cert/ChangeCert.vue:40 #: src/views/domain/components/RightSettings.vue:77 -#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29 +#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29 #: src/views/environment/Environment.vue:102 #: src/views/preference/LogrotateSettings.vue:20 #: src/views/stream/components/RightSettings.vue:76 -#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29 +#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29 msgid "Enabled" msgstr "활성화됨" #: src/views/domain/components/RightSettings.vue:29 -#: src/views/domain/components/SiteDuplicate.vue:98 -#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57 +#: src/views/domain/components/SiteDuplicate.vue:94 +#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57 #: src/views/stream/components/RightSettings.vue:29 -#: src/views/stream/components/StreamDuplicate.vue:98 +#: src/views/stream/components/StreamDuplicate.vue:94 #: src/views/stream/StreamList.vue:57 msgid "Enabled successfully" msgstr "성공적으로 활성화됨" @@ -730,7 +757,7 @@ msgstr "%{msg} 활성화 실패" msgid "Failed to get certificate information" msgstr "인증서 정보 가져오기 실패" -#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124 +#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122 msgid "Failed to save, syntax error(s) was detected in the configuration." msgstr "저장 실패, 구성에서 구문 오류가 감지되었습니다." @@ -756,7 +783,7 @@ msgstr "파일을 찾을 수 없음" msgid "Filter" msgstr "필터" -#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101 +#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97 msgid "Finished" msgstr "완료됨" @@ -828,6 +855,12 @@ msgstr "HTTP01" msgid "If left blank, the default CA Dir will be used." msgstr "" +#: src/views/preference/AuthSettings.vue:60 +msgid "" +"If the number of login failed attempts from a ip reach the max attempts in " +"ban threshold minutes, the ip will be banned for a period of time." +msgstr "" + #: src/views/certificate/Certificate.vue:136 msgid "Import" msgstr "가져오기" @@ -837,6 +870,11 @@ msgstr "가져오기" msgid "Import Certificate" msgstr "인증서 상태" +#: src/views/other/Login.vue:59 +#, fuzzy +msgid "Incorrect username or password" +msgstr "사용자 이름 또는 비밀번호가 올바르지 않습니다" + #: src/constants/index.ts:18 msgid "Info" msgstr "정보" @@ -849,7 +887,7 @@ msgstr "초기 코어 업그레이더 오류" msgid "Initialing core upgrader" msgstr "코어 업그레이더 초기화" -#: src/routes/index.ts:273 src/views/other/Install.vue:136 +#: src/routes/index.ts:273 src/views/other/Install.vue:135 msgid "Install" msgstr "설치" @@ -871,6 +909,10 @@ msgstr "간격" msgid "Invalid" msgstr "유효함" +#: src/views/preference/AuthSettings.vue:14 +msgid "IP" +msgstr "" + #: src/views/certificate/Certificate.vue:144 #, fuzzy msgid "Issue wildcard certificate" @@ -904,7 +946,7 @@ msgstr "마지막 확인 시간" msgid "Leave blank for no change" msgstr "변경사항이 없으면 비워두세요" -#: src/views/preference/OpenAISettings.vue:50 +#: src/views/preference/OpenAISettings.vue:53 msgid "Leave blank for the default: https://api.openai.com/" msgstr "기본값을 사용하려면 비워 두세요: https://api.openai.com/" @@ -961,11 +1003,11 @@ msgstr "위치들" msgid "Log" msgstr "로그인" -#: src/routes/index.ts:279 src/views/other/Login.vue:147 +#: src/routes/index.ts:279 src/views/other/Login.vue:159 msgid "Login" msgstr "로그인" -#: src/views/other/Login.vue:51 src/views/other/Login.vue:97 +#: src/views/other/Login.vue:109 src/views/other/Login.vue:51 msgid "Login successful" msgstr "로그인 성공" @@ -973,7 +1015,7 @@ msgstr "로그인 성공" msgid "Logout successful" msgstr "로그아웃 성공" -#: src/views/preference/Preference.vue:119 +#: src/views/preference/Preference.vue:134 msgid "Logrotate" msgstr "로그관리" @@ -1023,6 +1065,10 @@ msgstr "사용자 관리" msgid "Managed Certificate" msgstr "인증서 유효" +#: src/views/preference/AuthSettings.vue:74 +msgid "Max Attempts" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:217 #: src/views/dashboard/ServerAnalytic.vue:218 msgid "Memory" @@ -1036,7 +1082,7 @@ msgstr "메모리 및 저장소" msgid "Minutes" msgstr "분" -#: src/views/preference/OpenAISettings.vue:30 +#: src/views/preference/OpenAISettings.vue:33 #, fuzzy msgid "Model" msgstr "실행 모드" @@ -1053,7 +1099,7 @@ msgstr "설정 수정" msgid "Modify Certificate" msgstr "인증서 상태" -#: src/views/domain/DomainAdd.vue:155 +#: src/views/domain/DomainAdd.vue:151 msgid "Modify Config" msgstr "설정 수정" @@ -1073,12 +1119,12 @@ msgstr "단일 지시문" #: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7 #: src/views/domain/cert/ChangeCert.vue:17 #: src/views/domain/components/RightSettings.vue:83 -#: src/views/domain/components/SiteDuplicate.vue:133 +#: src/views/domain/components/SiteDuplicate.vue:129 #: src/views/domain/DomainList.vue:13 #: src/views/domain/ngx_conf/NgxUpstream.vue:175 #: src/views/environment/Environment.vue:12 #: src/views/stream/components/RightSettings.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:133 +#: src/views/stream/components/StreamDuplicate.vue:129 #: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187 msgid "Name" msgstr "이름" @@ -1105,11 +1151,11 @@ msgstr "새 버전 출시" #: src/views/certificate/WildcardCertificate.vue:99 #: src/views/domain/cert/components/ObtainCert.vue:203 -#: src/views/domain/DomainAdd.vue:142 +#: src/views/domain/DomainAdd.vue:138 msgid "Next" msgstr "다음" -#: src/views/preference/Preference.vue:107 +#: src/views/preference/Preference.vue:122 msgid "Nginx" msgstr "Nginx" @@ -1117,7 +1163,7 @@ msgstr "Nginx" msgid "Nginx Access Log Path" msgstr "Nginx 접근 로그 경로" -#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209 +#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207 #, fuzzy msgid "Nginx Configuration Parse Error" msgstr "Nginx 구성 오류름" @@ -1145,7 +1191,7 @@ msgid "Nginx restarted successfully" msgstr "Nginx가 성공적으로 재시작됨" #: src/components/ChatGPT/ChatGPT.vue:270 -#: src/components/Notification/Notification.vue:82 +#: src/components/Notification/Notification.vue:84 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:521 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:535 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:549 @@ -1153,6 +1199,7 @@ msgstr "Nginx가 성공적으로 재시작됨" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90 #: src/views/domain/ngx_conf/LocationEditor.vue:71 #: src/views/notification/Notification.vue:70 +#: src/views/preference/AuthSettings.vue:96 #: src/views/preference/BasicSettings.vue:101 #: src/views/stream/StreamList.vue:165 msgid "No" @@ -1184,7 +1231,7 @@ msgstr "참고" msgid "Notification" msgstr "알림" -#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221 +#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221 #, fuzzy msgid "Notifications" msgstr "알림" @@ -1210,7 +1257,7 @@ msgid "Ok" msgstr "" #: src/components/ChatGPT/ChatGPT.vue:271 -#: src/components/Notification/Notification.vue:83 +#: src/components/Notification/Notification.vue:85 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:522 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:536 @@ -1240,7 +1287,7 @@ msgstr "검증이 완료되면, 레코드는 제거됩니다." msgid "Online" msgstr "온라인" -#: src/views/preference/Preference.vue:113 +#: src/views/preference/Preference.vue:128 msgid "OpenAI" msgstr "오픈AI" @@ -1253,13 +1300,13 @@ msgstr "OS" msgid "OS:" msgstr "OS:" -#: src/views/domain/components/Deploy.vue:90 -#: src/views/stream/components/Deploy.vue:90 +#: src/views/domain/components/Deploy.vue:87 +#: src/views/stream/components/Deploy.vue:87 msgid "Overwrite" msgstr "덮어쓰기" -#: src/views/domain/components/Deploy.vue:94 -#: src/views/stream/components/Deploy.vue:94 +#: src/views/domain/components/Deploy.vue:91 +#: src/views/stream/components/Deploy.vue:91 msgid "Overwrite exist file" msgstr "기존 파일 덮어쓰기" @@ -1267,11 +1314,11 @@ msgstr "기존 파일 덮어쓰기" msgid "Params" msgstr "파라미터" -#: src/views/other/Login.vue:132 src/views/user/User.vue:18 +#: src/views/other/Login.vue:144 src/views/user/User.vue:18 msgid "Password" msgstr "비밀번호" -#: src/views/other/Install.vue:110 +#: src/views/other/Install.vue:109 msgid "Password (*)" msgstr "비밀번호 (*)" @@ -1336,7 +1383,7 @@ msgstr "적어도 하나의 노드를 선택해주세요!" msgid "Pre-release" msgstr "사전 출시" -#: src/routes/index.ts:239 src/views/preference/Preference.vue:96 +#: src/routes/index.ts:239 src/views/preference/Preference.vue:105 msgid "Preference" msgstr "환경설정" @@ -1434,7 +1481,16 @@ msgstr "리로딩 중" msgid "Reloading nginx" msgstr "Nginx 리로딩 중" -#: src/components/Notification/Notification.vue:50 +#: src/views/preference/AuthSettings.vue:101 +msgid "Remove" +msgstr "" + +#: src/views/preference/AuthSettings.vue:47 +#, fuzzy +msgid "Remove successfully" +msgstr "성공적으로 제거됨" + +#: src/components/Notification/Notification.vue:52 #, fuzzy msgid "Removed successfully" msgstr "성공적으로 제거됨" @@ -1493,9 +1549,9 @@ msgstr "실행 중" #: src/components/ChatGPT/ChatGPT.vue:252 #: src/views/certificate/CertificateEditor.vue:249 -#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263 +#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120 -#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254 +#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252 msgid "Save" msgstr "저장" @@ -1503,7 +1559,7 @@ msgstr "저장" msgid "Save Directive" msgstr "지시문 저장" -#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50 +#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41 msgid "Save error %{msg}" msgstr "저장 오류 %{msg}" @@ -1511,15 +1567,15 @@ msgstr "저장 오류 %{msg}" #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104 #: src/views/certificate/CertificateEditor.vue:46 -#: src/views/preference/Preference.vue:66 +#: src/views/preference/Preference.vue:74 #, fuzzy msgid "Save successfully" msgstr "성공적으로 저장됨" -#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38 -#: src/views/domain/DomainEdit.vue:148 +#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37 +#: src/views/domain/DomainEdit.vue:146 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39 -#: src/views/stream/StreamEdit.vue:140 +#: src/views/stream/StreamEdit.vue:138 msgid "Saved successfully" msgstr "성공적으로 저장됨" @@ -1544,8 +1600,9 @@ msgstr "보내기" #: src/components/StdDesign/StdDataDisplay/StdTable.vue:196 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:235 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81 -#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70 -#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113 +#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69 +#: src/views/preference/AuthSettings.vue:49 +#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42 msgid "Server error" msgstr "서버 오류" @@ -1564,7 +1621,7 @@ msgid "server_name not found in directives" msgstr "directives에서 server_name을 찾을 수 없습니다" #: src/views/domain/cert/components/AutoCertStepOne.vue:34 -#: src/views/domain/DomainAdd.vue:121 +#: src/views/domain/DomainAdd.vue:117 msgid "server_name parameter is required" msgstr "server_name 매개변수가 필요합니다" @@ -1620,7 +1677,7 @@ msgstr "SSL 인증서 키 경로" msgid "SSL Certificate Path" msgstr "SSL 인증서 경로" -#: src/views/other/Login.vue:158 +#: src/views/other/Login.vue:170 #, fuzzy msgid "SSO Login" msgstr "SSO 로그인" @@ -1707,8 +1764,8 @@ msgstr "" msgid "System" msgstr "시스템" -#: src/views/domain/components/SiteDuplicate.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:140 +#: src/views/domain/components/SiteDuplicate.vue:136 +#: src/views/stream/components/StreamDuplicate.vue:136 msgid "Target" msgstr "대상" @@ -1742,7 +1799,7 @@ msgstr "입력이 SSL 인증서가 아닙니다" msgid "The input is not a SSL Certificate Key" msgstr "Certificate Status" -#: src/views/preference/OpenAISettings.vue:33 +#: src/views/preference/OpenAISettings.vue:36 msgid "" "The model name should only contain letters, unicode, numbers, hyphens, " "dashes, and dots." @@ -1778,8 +1835,8 @@ msgstr "" msgid "The url is invalid" msgstr "유효한 URL이 아닙니다" -#: src/views/preference/OpenAISettings.vue:45 -#: src/views/preference/OpenAISettings.vue:57 +#: src/views/preference/OpenAISettings.vue:48 +#: src/views/preference/OpenAISettings.vue:60 #, fuzzy msgid "The url is invalid." msgstr "유효한 URL이 아닙니다" @@ -1806,6 +1863,7 @@ msgstr "이 필드는 필수입니다" msgid "This field should not be empty" msgstr "이 필드는 비워둘 수 없습니다" +#: src/views/preference/AuthSettings.vue:59 #: src/views/preference/LogrotateSettings.vue:12 msgid "Tips" msgstr "팁" @@ -1825,10 +1883,14 @@ msgstr "" "시할 수 있는 위치를 추가해야 하며,이 파일을 저장하고 Nginx를 다시로드해야 합" "니다.계속하시겠습니까?" -#: src/views/preference/OpenAISettings.vue:69 +#: src/views/preference/OpenAISettings.vue:72 msgid "Token is not valid" msgstr "토큰이 유효하지 않습니다" +#: src/views/other/Login.vue:62 +msgid "Too many login failed attempts, please try again later" +msgstr "" + #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221 msgid "Trash" msgstr "" @@ -1884,11 +1946,15 @@ msgstr "URL" msgid "User" msgstr "사용자 이름" -#: src/views/other/Login.vue:122 src/views/user/User.vue:9 +#: src/views/other/Login.vue:65 +msgid "User is banned" +msgstr "" + +#: src/views/other/Login.vue:134 src/views/user/User.vue:9 msgid "Username" msgstr "사용자 이름" -#: src/views/other/Install.vue:100 +#: src/views/other/Install.vue:99 msgid "Username (*)" msgstr "사용자 이름 (*)" @@ -1902,7 +1968,7 @@ msgstr "유효함" msgid "View" msgstr "보기" -#: src/components/Notification/Notification.vue:141 +#: src/components/Notification/Notification.vue:143 #, fuzzy msgid "View all notifications" msgstr "Certificate is valid" @@ -1919,7 +1985,7 @@ msgstr "기본 모드" #: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33 #: src/views/domain/cert/components/AutoCertStepOne.vue:28 -#: src/views/domain/DomainAdd.vue:116 +#: src/views/domain/DomainAdd.vue:112 msgid "Warning" msgstr "경고" @@ -1954,6 +2020,7 @@ msgstr "인증서를 디스크에 쓰기" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89 #: src/views/domain/ngx_conf/LocationEditor.vue:70 +#: src/views/preference/AuthSettings.vue:95 #: src/views/preference/BasicSettings.vue:100 msgid "Yes" msgstr "예" diff --git a/app/src/language/messages.pot b/app/src/language/messages.pot index a2c396cac..8039173c1 100644 --- a/app/src/language/messages.pot +++ b/app/src/language/messages.pot @@ -24,6 +24,7 @@ msgstr "" #: src/views/domain/DomainList.vue:47 #: src/views/environment/Environment.vue:129 #: src/views/notification/Notification.vue:37 +#: src/views/preference/AuthSettings.vue:26 #: src/views/stream/StreamList.vue:47 #: src/views/user/User.vue:43 msgid "Action" @@ -49,7 +50,7 @@ msgid "Add Location" msgstr "" #: src/routes/index.ts:64 -#: src/views/domain/DomainAdd.vue:93 +#: src/views/domain/DomainAdd.vue:89 msgid "Add Site" msgstr "" @@ -65,12 +66,12 @@ msgstr "" msgid "Additional" msgstr "" -#: src/views/domain/DomainEdit.vue:199 -#: src/views/stream/StreamEdit.vue:191 +#: src/views/domain/DomainEdit.vue:197 +#: src/views/stream/StreamEdit.vue:189 msgid "Advance Mode" msgstr "" -#: src/views/preference/OpenAISettings.vue:42 +#: src/views/preference/OpenAISettings.vue:45 msgid "API Base Url" msgstr "" @@ -78,11 +79,11 @@ msgstr "" msgid "API Document" msgstr "" -#: src/views/preference/OpenAISettings.vue:54 +#: src/views/preference/OpenAISettings.vue:57 msgid "API Proxy" msgstr "" -#: src/views/preference/OpenAISettings.vue:66 +#: src/views/preference/OpenAISettings.vue:69 msgid "API Token" msgstr "" @@ -90,7 +91,11 @@ msgstr "" msgid "Arch" msgstr "" -#: src/components/Notification/Notification.vue:84 +#: src/views/preference/AuthSettings.vue:94 +msgid "Are you sure to delete this banned IP immediately?" +msgstr "" + +#: src/components/Notification/Notification.vue:86 #: src/views/notification/Notification.vue:72 msgid "Are you sure you want to clear all notifications?" msgstr "" @@ -136,6 +141,14 @@ msgstr "" msgid "Assistant" msgstr "" +#: src/views/preference/AuthSettings.vue:17 +msgid "Attempts" +msgstr "" + +#: src/views/preference/Preference.vue:116 +msgid "Auth" +msgstr "" + #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120 msgid "Author" @@ -160,9 +173,9 @@ msgstr "" #: src/views/certificate/CertificateEditor.vue:242 #: src/views/config/Config.vue:73 #: src/views/config/ConfigEdit.vue:87 -#: src/views/domain/DomainEdit.vue:256 +#: src/views/domain/DomainEdit.vue:254 #: src/views/nginx_log/NginxLog.vue:168 -#: src/views/stream/StreamEdit.vue:247 +#: src/views/stream/StreamEdit.vue:245 msgid "Back" msgstr "" @@ -170,19 +183,31 @@ msgstr "" msgid "Back Home" msgstr "" -#: src/views/domain/DomainAdd.vue:99 +#: src/views/preference/AuthSettings.vue:68 +msgid "Ban Threshold Minutes" +msgstr "" + +#: src/views/preference/AuthSettings.vue:82 +msgid "Banned IPs" +msgstr "" + +#: src/views/preference/AuthSettings.vue:20 +msgid "Banned Until" +msgstr "" + +#: src/views/domain/DomainAdd.vue:95 msgid "Base information" msgstr "" #: src/views/config/ConfigEdit.vue:115 #: src/views/domain/components/RightSettings.vue:75 -#: src/views/preference/Preference.vue:101 +#: src/views/preference/Preference.vue:110 #: src/views/stream/components/RightSettings.vue:74 msgid "Basic" msgstr "" -#: src/views/domain/DomainEdit.vue:202 -#: src/views/stream/StreamEdit.vue:194 +#: src/views/domain/DomainEdit.vue:200 +#: src/views/stream/StreamEdit.vue:192 msgid "Basic Mode" msgstr "" @@ -266,12 +291,12 @@ msgid "Cleaning environment variables" msgstr "" #: src/components/ChatGPT/ChatGPT.vue:276 -#: src/components/Notification/Notification.vue:89 +#: src/components/Notification/Notification.vue:91 #: src/views/notification/Notification.vue:77 msgid "Clear" msgstr "" -#: src/components/Notification/Notification.vue:40 +#: src/components/Notification/Notification.vue:42 #: src/views/notification/Notification.vue:46 msgid "Cleared successfully" msgstr "" @@ -295,7 +320,7 @@ msgstr "" msgid "Configuration file is test successful" msgstr "" -#: src/views/domain/DomainAdd.vue:105 +#: src/views/domain/DomainAdd.vue:101 msgid "Configuration Name" msgstr "" @@ -303,7 +328,7 @@ msgstr "" msgid "Configurations" msgstr "" -#: src/views/domain/DomainAdd.vue:100 +#: src/views/domain/DomainAdd.vue:96 msgid "Configure SSL" msgstr "" @@ -333,7 +358,7 @@ msgstr "" msgid "Create" msgstr "" -#: src/views/domain/DomainAdd.vue:158 +#: src/views/domain/DomainAdd.vue:154 msgid "Create Another" msgstr "" @@ -371,7 +396,7 @@ msgstr "" msgid "Dashboard" msgstr "" -#: src/views/other/Install.vue:121 +#: src/views/other/Install.vue:120 msgid "Database (Optional, default: database)" msgstr "" @@ -403,15 +428,15 @@ msgstr "" msgid "Deleted successfully" msgstr "" -#: src/views/domain/components/Deploy.vue:106 +#: src/views/domain/components/Deploy.vue:103 #: src/views/domain/components/RightSettings.vue:93 -#: src/views/stream/components/Deploy.vue:106 +#: src/views/stream/components/Deploy.vue:103 #: src/views/stream/components/RightSettings.vue:92 msgid "Deploy" msgstr "" -#: src/views/domain/components/Deploy.vue:63 -#: src/views/stream/components/Deploy.vue:63 +#: src/views/domain/components/Deploy.vue:60 +#: src/views/stream/components/Deploy.vue:60 msgid "Deploy %{conf_name} to %{node_name} failed" msgstr "" @@ -460,10 +485,10 @@ msgid "Disable auto-renewal failed for %{name}" msgstr "" #: src/views/domain/cert/ChangeCert.vue:44 -#: src/views/domain/DomainEdit.vue:185 +#: src/views/domain/DomainEdit.vue:183 #: src/views/domain/DomainList.vue:33 #: src/views/environment/Environment.vue:93 -#: src/views/stream/StreamEdit.vue:177 +#: src/views/stream/StreamEdit.vue:175 #: src/views/stream/StreamList.vue:33 msgid "Disabled" msgstr "" @@ -536,7 +561,7 @@ msgstr "" msgid "Domain" msgstr "" -#: src/views/domain/DomainAdd.vue:148 +#: src/views/domain/DomainAdd.vue:144 msgid "Domain Config Created Successfully" msgstr "" @@ -556,35 +581,35 @@ msgstr "" msgid "Dry run mode enabled" msgstr "" -#: src/views/domain/components/SiteDuplicate.vue:126 +#: src/views/domain/components/SiteDuplicate.vue:122 #: src/views/domain/DomainList.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:126 +#: src/views/stream/components/StreamDuplicate.vue:122 #: src/views/stream/StreamList.vue:161 msgid "Duplicate" msgstr "" -#: src/views/domain/components/SiteDuplicate.vue:84 -#: src/views/stream/components/StreamDuplicate.vue:84 +#: src/views/domain/components/SiteDuplicate.vue:82 +#: src/views/stream/components/StreamDuplicate.vue:82 msgid "Duplicate %{conf_name} to %{node_name} successfully" msgstr "" -#: src/views/domain/components/SiteDuplicate.vue:90 -#: src/views/stream/components/StreamDuplicate.vue:90 +#: src/views/domain/components/SiteDuplicate.vue:87 +#: src/views/stream/components/StreamDuplicate.vue:87 msgid "Duplicate failed" msgstr "" -#: src/views/domain/components/SiteDuplicate.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:82 +#: src/views/domain/components/SiteDuplicate.vue:80 +#: src/views/stream/components/StreamDuplicate.vue:80 msgid "Duplicate successfully" msgstr "" -#: src/views/domain/components/SiteDuplicate.vue:64 -#: src/views/stream/components/StreamDuplicate.vue:64 +#: src/views/domain/components/SiteDuplicate.vue:63 +#: src/views/stream/components/StreamDuplicate.vue:63 msgid "Duplicate to local successfully" msgstr "" -#: src/views/domain/DomainEdit.vue:174 -#: src/views/stream/StreamEdit.vue:166 +#: src/views/domain/DomainEdit.vue:172 +#: src/views/stream/StreamEdit.vue:164 msgid "Edit %{n}" msgstr "" @@ -605,24 +630,24 @@ msgstr "" msgid "Email" msgstr "" -#: src/views/other/Install.vue:90 +#: src/views/other/Install.vue:89 msgid "Email (*)" msgstr "" -#: src/views/domain/components/Deploy.vue:86 +#: src/views/domain/components/Deploy.vue:83 #: src/views/domain/DomainList.vue:132 -#: src/views/stream/components/Deploy.vue:86 +#: src/views/stream/components/Deploy.vue:83 #: src/views/stream/StreamList.vue:153 msgid "Enable" msgstr "" -#: src/views/domain/components/Deploy.vue:52 -#: src/views/stream/components/Deploy.vue:52 +#: src/views/domain/components/Deploy.vue:50 +#: src/views/stream/components/Deploy.vue:50 msgid "Enable %{conf_name} in %{node_name} failed" msgstr "" -#: src/views/domain/components/Deploy.vue:46 -#: src/views/stream/components/Deploy.vue:46 +#: src/views/domain/components/Deploy.vue:45 +#: src/views/stream/components/Deploy.vue:45 msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "" @@ -630,12 +655,12 @@ msgstr "" msgid "Enable auto-renewal failed for %{name}" msgstr "" -#: src/views/domain/DomainAdd.vue:46 +#: src/views/domain/DomainAdd.vue:43 msgid "Enable failed" msgstr "" -#: src/views/domain/components/Deploy.vue:44 -#: src/views/stream/components/Deploy.vue:44 +#: src/views/domain/components/Deploy.vue:43 +#: src/views/stream/components/Deploy.vue:43 msgid "Enable successfully" msgstr "" @@ -645,22 +670,22 @@ msgstr "" #: src/views/domain/cert/ChangeCert.vue:40 #: src/views/domain/components/RightSettings.vue:77 -#: src/views/domain/DomainEdit.vue:179 +#: src/views/domain/DomainEdit.vue:177 #: src/views/domain/DomainList.vue:29 #: src/views/environment/Environment.vue:102 #: src/views/preference/LogrotateSettings.vue:20 #: src/views/stream/components/RightSettings.vue:76 -#: src/views/stream/StreamEdit.vue:171 +#: src/views/stream/StreamEdit.vue:169 #: src/views/stream/StreamList.vue:29 msgid "Enabled" msgstr "" #: src/views/domain/components/RightSettings.vue:29 -#: src/views/domain/components/SiteDuplicate.vue:98 -#: src/views/domain/DomainAdd.vue:42 +#: src/views/domain/components/SiteDuplicate.vue:94 +#: src/views/domain/DomainAdd.vue:40 #: src/views/domain/DomainList.vue:57 #: src/views/stream/components/RightSettings.vue:29 -#: src/views/stream/components/StreamDuplicate.vue:98 +#: src/views/stream/components/StreamDuplicate.vue:94 #: src/views/stream/StreamList.vue:57 msgid "Enabled successfully" msgstr "" @@ -730,8 +755,8 @@ msgstr "" msgid "Failed to get certificate information" msgstr "" -#: src/views/domain/DomainEdit.vue:132 -#: src/views/stream/StreamEdit.vue:124 +#: src/views/domain/DomainEdit.vue:130 +#: src/views/stream/StreamEdit.vue:122 msgid "Failed to save, syntax error(s) was detected in the configuration." msgstr "" @@ -757,7 +782,7 @@ msgid "Filter" msgstr "" #: src/language/constants.ts:19 -#: src/views/domain/DomainAdd.vue:101 +#: src/views/domain/DomainAdd.vue:97 msgid "Finished" msgstr "" @@ -825,6 +850,10 @@ msgstr "" msgid "If left blank, the default CA Dir will be used." msgstr "" +#: src/views/preference/AuthSettings.vue:60 +msgid "If the number of login failed attempts from a ip reach the max attempts in ban threshold minutes, the ip will be banned for a period of time." +msgstr "" + #: src/views/certificate/Certificate.vue:136 msgid "Import" msgstr "" @@ -834,6 +863,10 @@ msgstr "" msgid "Import Certificate" msgstr "" +#: src/views/other/Login.vue:59 +msgid "Incorrect username or password" +msgstr "" + #: src/constants/index.ts:18 msgid "Info" msgstr "" @@ -847,7 +880,7 @@ msgid "Initialing core upgrader" msgstr "" #: src/routes/index.ts:273 -#: src/views/other/Install.vue:136 +#: src/views/other/Install.vue:135 msgid "Install" msgstr "" @@ -867,6 +900,10 @@ msgstr "" msgid "Invalid" msgstr "" +#: src/views/preference/AuthSettings.vue:14 +msgid "IP" +msgstr "" + #: src/views/certificate/Certificate.vue:144 msgid "Issue wildcard certificate" msgstr "" @@ -897,7 +934,7 @@ msgstr "" msgid "Leave blank for no change" msgstr "" -#: src/views/preference/OpenAISettings.vue:50 +#: src/views/preference/OpenAISettings.vue:53 msgid "Leave blank for the default: https://api.openai.com/" msgstr "" @@ -949,12 +986,12 @@ msgid "Log" msgstr "" #: src/routes/index.ts:279 -#: src/views/other/Login.vue:147 +#: src/views/other/Login.vue:159 msgid "Login" msgstr "" +#: src/views/other/Login.vue:109 #: src/views/other/Login.vue:51 -#: src/views/other/Login.vue:97 msgid "Login successful" msgstr "" @@ -962,7 +999,7 @@ msgstr "" msgid "Logout successful" msgstr "" -#: src/views/preference/Preference.vue:119 +#: src/views/preference/Preference.vue:134 msgid "Logrotate" msgstr "" @@ -997,6 +1034,10 @@ msgstr "" msgid "Managed Certificate" msgstr "" +#: src/views/preference/AuthSettings.vue:74 +msgid "Max Attempts" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:217 #: src/views/dashboard/ServerAnalytic.vue:218 msgid "Memory" @@ -1010,7 +1051,7 @@ msgstr "" msgid "Minutes" msgstr "" -#: src/views/preference/OpenAISettings.vue:30 +#: src/views/preference/OpenAISettings.vue:33 msgid "Model" msgstr "" @@ -1025,7 +1066,7 @@ msgstr "" msgid "Modify Certificate" msgstr "" -#: src/views/domain/DomainAdd.vue:155 +#: src/views/domain/DomainAdd.vue:151 msgid "Modify Config" msgstr "" @@ -1044,12 +1085,12 @@ msgstr "" #: src/views/config/config.ts:7 #: src/views/domain/cert/ChangeCert.vue:17 #: src/views/domain/components/RightSettings.vue:83 -#: src/views/domain/components/SiteDuplicate.vue:133 +#: src/views/domain/components/SiteDuplicate.vue:129 #: src/views/domain/DomainList.vue:13 #: src/views/domain/ngx_conf/NgxUpstream.vue:175 #: src/views/environment/Environment.vue:12 #: src/views/stream/components/RightSettings.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:133 +#: src/views/stream/components/StreamDuplicate.vue:129 #: src/views/stream/StreamList.vue:13 #: src/views/stream/StreamList.vue:187 msgid "Name" @@ -1077,11 +1118,11 @@ msgstr "" #: src/views/certificate/WildcardCertificate.vue:99 #: src/views/domain/cert/components/ObtainCert.vue:203 -#: src/views/domain/DomainAdd.vue:142 +#: src/views/domain/DomainAdd.vue:138 msgid "Next" msgstr "" -#: src/views/preference/Preference.vue:107 +#: src/views/preference/Preference.vue:122 msgid "Nginx" msgstr "" @@ -1089,8 +1130,8 @@ msgstr "" msgid "Nginx Access Log Path" msgstr "" -#: src/views/domain/DomainEdit.vue:217 -#: src/views/stream/StreamEdit.vue:209 +#: src/views/domain/DomainEdit.vue:215 +#: src/views/stream/StreamEdit.vue:207 msgid "Nginx Configuration Parse Error" msgstr "" @@ -1116,7 +1157,7 @@ msgid "Nginx restarted successfully" msgstr "" #: src/components/ChatGPT/ChatGPT.vue:270 -#: src/components/Notification/Notification.vue:82 +#: src/components/Notification/Notification.vue:84 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:521 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:535 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:549 @@ -1124,6 +1165,7 @@ msgstr "" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90 #: src/views/domain/ngx_conf/LocationEditor.vue:71 #: src/views/notification/Notification.vue:70 +#: src/views/preference/AuthSettings.vue:96 #: src/views/preference/BasicSettings.vue:101 #: src/views/stream/StreamList.vue:165 msgid "No" @@ -1154,7 +1196,7 @@ msgstr "" msgid "Notification" msgstr "" -#: src/components/Notification/Notification.vue:80 +#: src/components/Notification/Notification.vue:82 #: src/routes/index.ts:221 msgid "Notifications" msgstr "" @@ -1179,7 +1221,7 @@ msgid "Ok" msgstr "" #: src/components/ChatGPT/ChatGPT.vue:271 -#: src/components/Notification/Notification.vue:83 +#: src/components/Notification/Notification.vue:85 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:522 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:536 @@ -1209,7 +1251,7 @@ msgstr "" msgid "Online" msgstr "" -#: src/views/preference/Preference.vue:113 +#: src/views/preference/Preference.vue:128 msgid "OpenAI" msgstr "" @@ -1221,13 +1263,13 @@ msgstr "" msgid "OS:" msgstr "" -#: src/views/domain/components/Deploy.vue:90 -#: src/views/stream/components/Deploy.vue:90 +#: src/views/domain/components/Deploy.vue:87 +#: src/views/stream/components/Deploy.vue:87 msgid "Overwrite" msgstr "" -#: src/views/domain/components/Deploy.vue:94 -#: src/views/stream/components/Deploy.vue:94 +#: src/views/domain/components/Deploy.vue:91 +#: src/views/stream/components/Deploy.vue:91 msgid "Overwrite exist file" msgstr "" @@ -1235,12 +1277,12 @@ msgstr "" msgid "Params" msgstr "" -#: src/views/other/Login.vue:132 +#: src/views/other/Login.vue:144 #: src/views/user/User.vue:18 msgid "Password" msgstr "" -#: src/views/other/Install.vue:110 +#: src/views/other/Install.vue:109 msgid "Password (*)" msgstr "" @@ -1300,7 +1342,7 @@ msgid "Pre-release" msgstr "" #: src/routes/index.ts:239 -#: src/views/preference/Preference.vue:96 +#: src/views/preference/Preference.vue:105 msgid "Preference" msgstr "" @@ -1391,7 +1433,15 @@ msgstr "" msgid "Reloading nginx" msgstr "" -#: src/components/Notification/Notification.vue:50 +#: src/views/preference/AuthSettings.vue:101 +msgid "Remove" +msgstr "" + +#: src/views/preference/AuthSettings.vue:47 +msgid "Remove successfully" +msgstr "" + +#: src/components/Notification/Notification.vue:52 msgid "Removed successfully" msgstr "" @@ -1444,10 +1494,10 @@ msgstr "" #: src/components/ChatGPT/ChatGPT.vue:252 #: src/views/certificate/CertificateEditor.vue:249 #: src/views/config/ConfigEdit.vue:96 -#: src/views/domain/DomainEdit.vue:263 +#: src/views/domain/DomainEdit.vue:261 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120 -#: src/views/preference/Preference.vue:130 -#: src/views/stream/StreamEdit.vue:254 +#: src/views/preference/Preference.vue:145 +#: src/views/stream/StreamEdit.vue:252 msgid "Save" msgstr "" @@ -1456,7 +1506,7 @@ msgid "Save Directive" msgstr "" #: src/views/config/ConfigEdit.vue:57 -#: src/views/domain/DomainAdd.vue:50 +#: src/views/domain/DomainAdd.vue:46 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41 msgid "Save error %{msg}" msgstr "" @@ -1464,15 +1514,15 @@ msgstr "" #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104 #: src/views/certificate/CertificateEditor.vue:46 -#: src/views/preference/Preference.vue:66 +#: src/views/preference/Preference.vue:74 msgid "Save successfully" msgstr "" #: src/views/config/ConfigEdit.vue:55 -#: src/views/domain/DomainAdd.vue:38 -#: src/views/domain/DomainEdit.vue:148 +#: src/views/domain/DomainAdd.vue:37 +#: src/views/domain/DomainEdit.vue:146 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39 -#: src/views/stream/StreamEdit.vue:140 +#: src/views/stream/StreamEdit.vue:138 msgid "Saved successfully" msgstr "" @@ -1499,8 +1549,9 @@ msgstr "" #: src/views/config/ConfigEdit.vue:40 #: src/views/domain/DomainList.vue:81 #: src/views/environment/Environment.vue:139 -#: src/views/other/Install.vue:70 -#: src/views/preference/Preference.vue:70 +#: src/views/other/Install.vue:69 +#: src/views/preference/AuthSettings.vue:49 +#: src/views/preference/Preference.vue:78 #: src/views/stream/StreamList.vue:113 #: src/views/stream/StreamList.vue:81 #: src/views/system/Upgrade.vue:42 @@ -1520,7 +1571,7 @@ msgid "server_name not found in directives" msgstr "" #: src/views/domain/cert/components/AutoCertStepOne.vue:34 -#: src/views/domain/DomainAdd.vue:121 +#: src/views/domain/DomainAdd.vue:117 msgid "server_name parameter is required" msgstr "" @@ -1570,7 +1621,7 @@ msgstr "" msgid "SSL Certificate Path" msgstr "" -#: src/views/other/Login.vue:158 +#: src/views/other/Login.vue:170 msgid "SSO Login" msgstr "" @@ -1649,8 +1700,8 @@ msgstr "" msgid "System" msgstr "" -#: src/views/domain/components/SiteDuplicate.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:140 +#: src/views/domain/components/SiteDuplicate.vue:136 +#: src/views/stream/components/StreamDuplicate.vue:136 msgid "Target" msgstr "" @@ -1679,7 +1730,7 @@ msgstr "" msgid "The input is not a SSL Certificate Key" msgstr "" -#: src/views/preference/OpenAISettings.vue:33 +#: src/views/preference/OpenAISettings.vue:36 msgid "The model name should only contain letters, unicode, numbers, hyphens, dashes, and dots." msgstr "" @@ -1704,8 +1755,8 @@ msgstr "" msgid "The url is invalid" msgstr "" -#: src/views/preference/OpenAISettings.vue:45 -#: src/views/preference/OpenAISettings.vue:57 +#: src/views/preference/OpenAISettings.vue:48 +#: src/views/preference/OpenAISettings.vue:60 msgid "The url is invalid." msgstr "" @@ -1731,6 +1782,7 @@ msgstr "" msgid "This field should not be empty" msgstr "" +#: src/views/preference/AuthSettings.vue:59 #: src/views/preference/LogrotateSettings.vue:12 msgid "Tips" msgstr "" @@ -1743,10 +1795,14 @@ msgstr "" msgid "To make sure the certification auto-renewal can work normally, we need to add a location which can proxy the request from authority to backend, and we need to save this file and reload the Nginx. Are you sure you want to continue?" msgstr "" -#: src/views/preference/OpenAISettings.vue:69 +#: src/views/preference/OpenAISettings.vue:72 msgid "Token is not valid" msgstr "" +#: src/views/other/Login.vue:62 +msgid "Too many login failed attempts, please try again later" +msgstr "" + #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221 msgid "Trash" msgstr "" @@ -1804,12 +1860,16 @@ msgstr "" msgid "User" msgstr "" -#: src/views/other/Login.vue:122 +#: src/views/other/Login.vue:65 +msgid "User is banned" +msgstr "" + +#: src/views/other/Login.vue:134 #: src/views/user/User.vue:9 msgid "Username" msgstr "" -#: src/views/other/Install.vue:100 +#: src/views/other/Install.vue:99 msgid "Username (*)" msgstr "" @@ -1823,7 +1883,7 @@ msgstr "" msgid "View" msgstr "" -#: src/components/Notification/Notification.vue:141 +#: src/components/Notification/Notification.vue:143 msgid "View all notifications" msgstr "" @@ -1838,7 +1898,7 @@ msgstr "" #: src/constants/index.ts:17 #: src/views/config/InspectConfig.vue:33 #: src/views/domain/cert/components/AutoCertStepOne.vue:28 -#: src/views/domain/DomainAdd.vue:116 +#: src/views/domain/DomainAdd.vue:112 msgid "Warning" msgstr "" @@ -1865,6 +1925,7 @@ msgstr "" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89 #: src/views/domain/ngx_conf/LocationEditor.vue:70 +#: src/views/preference/AuthSettings.vue:95 #: src/views/preference/BasicSettings.vue:100 msgid "Yes" msgstr "" diff --git a/app/src/language/ru_RU/app.po b/app/src/language/ru_RU/app.po index 3fc4e063d..c18b26bda 100644 --- a/app/src/language/ru_RU/app.po +++ b/app/src/language/ru_RU/app.po @@ -28,7 +28,8 @@ msgstr "Пользователь" #: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34 #: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129 #: src/views/notification/Notification.vue:37 -#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43 +#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47 +#: src/views/user/User.vue:43 msgid "Action" msgstr "Действие" @@ -51,7 +52,7 @@ msgstr "Добавить директиву ниже" msgid "Add Location" msgstr "Добавить Location" -#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93 +#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89 msgid "Add Site" msgstr "Добавть Сайт" @@ -70,11 +71,11 @@ msgstr "Обновлено успешно" msgid "Additional" msgstr "Дополнительно" -#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191 +#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189 msgid "Advance Mode" msgstr "Расширенный режим" -#: src/views/preference/OpenAISettings.vue:42 +#: src/views/preference/OpenAISettings.vue:45 msgid "API Base Url" msgstr "" @@ -82,11 +83,11 @@ msgstr "" msgid "API Document" msgstr "" -#: src/views/preference/OpenAISettings.vue:54 +#: src/views/preference/OpenAISettings.vue:57 msgid "API Proxy" msgstr "" -#: src/views/preference/OpenAISettings.vue:66 +#: src/views/preference/OpenAISettings.vue:69 msgid "API Token" msgstr "" @@ -94,7 +95,12 @@ msgstr "" msgid "Arch" msgstr "" -#: src/components/Notification/Notification.vue:84 +#: src/views/preference/AuthSettings.vue:94 +#, fuzzy +msgid "Are you sure to delete this banned IP immediately?" +msgstr "Вы уверены, что хотите удалить?" + +#: src/components/Notification/Notification.vue:86 #: src/views/notification/Notification.vue:72 #, fuzzy msgid "Are you sure you want to clear all notifications?" @@ -147,6 +153,15 @@ msgstr "Обратитесь за помощью к ChatGPT" msgid "Assistant" msgstr "Ассистент" +#: src/views/preference/AuthSettings.vue:17 +msgid "Attempts" +msgstr "" + +#: src/views/preference/Preference.vue:116 +#, fuzzy +msgid "Auth" +msgstr "Автор" + #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120 msgid "Author" @@ -170,8 +185,8 @@ msgstr "Автообновление включено для %{name}" #: src/views/certificate/CertificateEditor.vue:242 #: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87 -#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168 -#: src/views/stream/StreamEdit.vue:247 +#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168 +#: src/views/stream/StreamEdit.vue:245 msgid "Back" msgstr "Назад" @@ -180,19 +195,31 @@ msgstr "Назад" msgid "Back Home" msgstr "Вернутся" -#: src/views/domain/DomainAdd.vue:99 +#: src/views/preference/AuthSettings.vue:68 +msgid "Ban Threshold Minutes" +msgstr "" + +#: src/views/preference/AuthSettings.vue:82 +msgid "Banned IPs" +msgstr "" + +#: src/views/preference/AuthSettings.vue:20 +msgid "Banned Until" +msgstr "" + +#: src/views/domain/DomainAdd.vue:95 msgid "Base information" msgstr "Основная информация" #: src/views/config/ConfigEdit.vue:115 #: src/views/domain/components/RightSettings.vue:75 -#: src/views/preference/Preference.vue:101 +#: src/views/preference/Preference.vue:110 #: src/views/stream/components/RightSettings.vue:74 #, fuzzy msgid "Basic" msgstr "Простой режим" -#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194 +#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192 msgid "Basic Mode" msgstr "Простой режим" @@ -280,12 +307,12 @@ msgid "Cleaning environment variables" msgstr "Очистка переменных среды" #: src/components/ChatGPT/ChatGPT.vue:276 -#: src/components/Notification/Notification.vue:89 +#: src/components/Notification/Notification.vue:91 #: src/views/notification/Notification.vue:77 msgid "Clear" msgstr "Очистить" -#: src/components/Notification/Notification.vue:40 +#: src/components/Notification/Notification.vue:42 #: src/views/notification/Notification.vue:46 #, fuzzy msgid "Cleared successfully" @@ -312,7 +339,7 @@ msgstr "Шаблоны конфигураций" msgid "Configuration file is test successful" msgstr "Проверка конфигурации успешна" -#: src/views/domain/DomainAdd.vue:105 +#: src/views/domain/DomainAdd.vue:101 msgid "Configuration Name" msgstr "Название конфигурации" @@ -320,7 +347,7 @@ msgstr "Название конфигурации" msgid "Configurations" msgstr "Конфигурации" -#: src/views/domain/DomainAdd.vue:100 +#: src/views/domain/DomainAdd.vue:96 msgid "Configure SSL" msgstr "Настроить SSL" @@ -351,7 +378,7 @@ msgstr "CPU:" msgid "Create" msgstr "Создан в" -#: src/views/domain/DomainAdd.vue:158 +#: src/views/domain/DomainAdd.vue:154 msgid "Create Another" msgstr "Создать еще" @@ -390,7 +417,7 @@ msgstr "" msgid "Dashboard" msgstr "Доска" -#: src/views/other/Install.vue:121 +#: src/views/other/Install.vue:120 msgid "Database (Optional, default: database)" msgstr "База данных (Опционально, по умолчанию: database)" @@ -423,15 +450,15 @@ msgstr "" msgid "Deleted successfully" msgstr "Отключено успешно" -#: src/views/domain/components/Deploy.vue:106 +#: src/views/domain/components/Deploy.vue:103 #: src/views/domain/components/RightSettings.vue:93 -#: src/views/stream/components/Deploy.vue:106 +#: src/views/stream/components/Deploy.vue:103 #: src/views/stream/components/RightSettings.vue:92 msgid "Deploy" msgstr "" -#: src/views/domain/components/Deploy.vue:63 -#: src/views/stream/components/Deploy.vue:63 +#: src/views/domain/components/Deploy.vue:60 +#: src/views/stream/components/Deploy.vue:60 msgid "Deploy %{conf_name} to %{node_name} failed" msgstr "" @@ -481,9 +508,9 @@ msgstr "Отключить" msgid "Disable auto-renewal failed for %{name}" msgstr "Не удалось отключить автоматическое продление для %{name}" -#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185 +#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183 #: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93 -#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33 +#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33 msgid "Disabled" msgstr "Отключено" @@ -562,7 +589,7 @@ msgstr "Вы хотите удалить этот сервер?" msgid "Domain" msgstr "" -#: src/views/domain/DomainAdd.vue:148 +#: src/views/domain/DomainAdd.vue:144 msgid "Domain Config Created Successfully" msgstr "Конфигурация домена успешно создана" @@ -584,38 +611,38 @@ msgstr "Загрузка последней версии" msgid "Dry run mode enabled" msgstr "Включен пробный режим" -#: src/views/domain/components/SiteDuplicate.vue:126 +#: src/views/domain/components/SiteDuplicate.vue:122 #: src/views/domain/DomainList.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:126 +#: src/views/stream/components/StreamDuplicate.vue:122 #: src/views/stream/StreamList.vue:161 msgid "Duplicate" msgstr "Дублировать" -#: src/views/domain/components/SiteDuplicate.vue:84 -#: src/views/stream/components/StreamDuplicate.vue:84 +#: src/views/domain/components/SiteDuplicate.vue:82 +#: src/views/stream/components/StreamDuplicate.vue:82 #, fuzzy msgid "Duplicate %{conf_name} to %{node_name} successfully" msgstr "Продублированно %{conf_name} в %{node_name}" -#: src/views/domain/components/SiteDuplicate.vue:90 -#: src/views/stream/components/StreamDuplicate.vue:90 +#: src/views/domain/components/SiteDuplicate.vue:87 +#: src/views/stream/components/StreamDuplicate.vue:87 #, fuzzy msgid "Duplicate failed" msgstr "Дублировать не удалось" -#: src/views/domain/components/SiteDuplicate.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:82 +#: src/views/domain/components/SiteDuplicate.vue:80 +#: src/views/stream/components/StreamDuplicate.vue:80 #, fuzzy msgid "Duplicate successfully" msgstr "Продублированно" -#: src/views/domain/components/SiteDuplicate.vue:64 -#: src/views/stream/components/StreamDuplicate.vue:64 +#: src/views/domain/components/SiteDuplicate.vue:63 +#: src/views/stream/components/StreamDuplicate.vue:63 #, fuzzy msgid "Duplicate to local successfully" msgstr "Saved successfully" -#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166 +#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164 msgid "Edit %{n}" msgstr "Редактировать %{n}" @@ -637,25 +664,25 @@ msgstr "Редактировать Сайт" msgid "Email" msgstr "Email (*)" -#: src/views/other/Install.vue:90 +#: src/views/other/Install.vue:89 msgid "Email (*)" msgstr "Email (*)" -#: src/views/domain/components/Deploy.vue:86 +#: src/views/domain/components/Deploy.vue:83 #: src/views/domain/DomainList.vue:132 -#: src/views/stream/components/Deploy.vue:86 +#: src/views/stream/components/Deploy.vue:83 #: src/views/stream/StreamList.vue:153 #, fuzzy msgid "Enable" msgstr "Включить" -#: src/views/domain/components/Deploy.vue:52 -#: src/views/stream/components/Deploy.vue:52 +#: src/views/domain/components/Deploy.vue:50 +#: src/views/stream/components/Deploy.vue:50 msgid "Enable %{conf_name} in %{node_name} failed" msgstr "Включение %{conf_name} in %{node_name} нипалучилася" -#: src/views/domain/components/Deploy.vue:46 -#: src/views/stream/components/Deploy.vue:46 +#: src/views/domain/components/Deploy.vue:45 +#: src/views/stream/components/Deploy.vue:45 msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "Включение %{conf_name} in %{node_name} успешно" @@ -663,12 +690,12 @@ msgstr "Включение %{conf_name} in %{node_name} успешно" msgid "Enable auto-renewal failed for %{name}" msgstr "Не удалось включить автоматическое продление для %{name}" -#: src/views/domain/DomainAdd.vue:46 +#: src/views/domain/DomainAdd.vue:43 msgid "Enable failed" msgstr "Включить не удалось" -#: src/views/domain/components/Deploy.vue:44 -#: src/views/stream/components/Deploy.vue:44 +#: src/views/domain/components/Deploy.vue:43 +#: src/views/stream/components/Deploy.vue:43 #, fuzzy msgid "Enable successfully" msgstr "Активировано успешно" @@ -679,19 +706,19 @@ msgstr "Включить TLS" #: src/views/domain/cert/ChangeCert.vue:40 #: src/views/domain/components/RightSettings.vue:77 -#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29 +#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29 #: src/views/environment/Environment.vue:102 #: src/views/preference/LogrotateSettings.vue:20 #: src/views/stream/components/RightSettings.vue:76 -#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29 +#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29 msgid "Enabled" msgstr "Включено" #: src/views/domain/components/RightSettings.vue:29 -#: src/views/domain/components/SiteDuplicate.vue:98 -#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57 +#: src/views/domain/components/SiteDuplicate.vue:94 +#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57 #: src/views/stream/components/RightSettings.vue:29 -#: src/views/stream/components/StreamDuplicate.vue:98 +#: src/views/stream/components/StreamDuplicate.vue:94 #: src/views/stream/StreamList.vue:57 msgid "Enabled successfully" msgstr "Активировано успешно" @@ -762,7 +789,7 @@ msgstr "Не удалось включить %{msg}" msgid "Failed to get certificate information" msgstr "Не удалось получить информацию о сертификате" -#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124 +#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122 msgid "Failed to save, syntax error(s) was detected in the configuration." msgstr "Не удалось сохранить, обнаружены синтаксические ошибки в конфигурации." @@ -788,7 +815,7 @@ msgstr "Файл не найден" msgid "Filter" msgstr "Фильтр" -#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101 +#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97 msgid "Finished" msgstr "Готово" @@ -860,6 +887,12 @@ msgstr "" msgid "If left blank, the default CA Dir will be used." msgstr "" +#: src/views/preference/AuthSettings.vue:60 +msgid "" +"If the number of login failed attempts from a ip reach the max attempts in " +"ban threshold minutes, the ip will be banned for a period of time." +msgstr "" + #: src/views/certificate/Certificate.vue:136 #, fuzzy msgid "Import" @@ -870,6 +903,11 @@ msgstr "Экспорт" msgid "Import Certificate" msgstr "Статус сертификата" +#: src/views/other/Login.vue:59 +#, fuzzy +msgid "Incorrect username or password" +msgstr "Имя пользователя или пароль неверны" + #: src/constants/index.ts:18 msgid "Info" msgstr "" @@ -882,7 +920,7 @@ msgstr "Ошибка первоначального обновления ядр msgid "Initialing core upgrader" msgstr "Инициализация программы обновления ядра" -#: src/routes/index.ts:273 src/views/other/Install.vue:136 +#: src/routes/index.ts:273 src/views/other/Install.vue:135 msgid "Install" msgstr "Установить" @@ -904,6 +942,10 @@ msgstr "" msgid "Invalid" msgstr "Действительный" +#: src/views/preference/AuthSettings.vue:14 +msgid "IP" +msgstr "" + #: src/views/certificate/Certificate.vue:144 #, fuzzy msgid "Issue wildcard certificate" @@ -938,7 +980,7 @@ msgstr "Последняя проверка в" msgid "Leave blank for no change" msgstr "Оставьте пустым без изменений" -#: src/views/preference/OpenAISettings.vue:50 +#: src/views/preference/OpenAISettings.vue:53 msgid "Leave blank for the default: https://api.openai.com/" msgstr "Оставьте пустым для значения по умолчанию: https://api.openai.com/" @@ -995,11 +1037,11 @@ msgstr "Locations" msgid "Log" msgstr "Логин" -#: src/routes/index.ts:279 src/views/other/Login.vue:147 +#: src/routes/index.ts:279 src/views/other/Login.vue:159 msgid "Login" msgstr "Логин" -#: src/views/other/Login.vue:51 src/views/other/Login.vue:97 +#: src/views/other/Login.vue:109 src/views/other/Login.vue:51 msgid "Login successful" msgstr "Авторизация успешна" @@ -1007,7 +1049,7 @@ msgstr "Авторизация успешна" msgid "Logout successful" msgstr "Выход выполнен успешно" -#: src/views/preference/Preference.vue:119 +#: src/views/preference/Preference.vue:134 msgid "Logrotate" msgstr "" @@ -1052,6 +1094,10 @@ msgstr "Пользователи" msgid "Managed Certificate" msgstr "Управление сертификатами" +#: src/views/preference/AuthSettings.vue:74 +msgid "Max Attempts" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:217 #: src/views/dashboard/ServerAnalytic.vue:218 msgid "Memory" @@ -1065,7 +1111,7 @@ msgstr "Память и хранилище" msgid "Minutes" msgstr "" -#: src/views/preference/OpenAISettings.vue:30 +#: src/views/preference/OpenAISettings.vue:33 #, fuzzy msgid "Model" msgstr "Расширенный режим" @@ -1082,7 +1128,7 @@ msgstr "Изменить" msgid "Modify Certificate" msgstr "Статус сертификата" -#: src/views/domain/DomainAdd.vue:155 +#: src/views/domain/DomainAdd.vue:151 msgid "Modify Config" msgstr "Изменить конфигурацию" @@ -1102,12 +1148,12 @@ msgstr "Одиночная директива" #: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7 #: src/views/domain/cert/ChangeCert.vue:17 #: src/views/domain/components/RightSettings.vue:83 -#: src/views/domain/components/SiteDuplicate.vue:133 +#: src/views/domain/components/SiteDuplicate.vue:129 #: src/views/domain/DomainList.vue:13 #: src/views/domain/ngx_conf/NgxUpstream.vue:175 #: src/views/environment/Environment.vue:12 #: src/views/stream/components/RightSettings.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:133 +#: src/views/stream/components/StreamDuplicate.vue:129 #: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187 msgid "Name" msgstr "Имя" @@ -1134,11 +1180,11 @@ msgstr "Вышла новая версия" #: src/views/certificate/WildcardCertificate.vue:99 #: src/views/domain/cert/components/ObtainCert.vue:203 -#: src/views/domain/DomainAdd.vue:142 +#: src/views/domain/DomainAdd.vue:138 msgid "Next" msgstr "Дальше" -#: src/views/preference/Preference.vue:107 +#: src/views/preference/Preference.vue:122 #, fuzzy msgid "Nginx" msgstr "Журнал" @@ -1147,7 +1193,7 @@ msgstr "Журнал" msgid "Nginx Access Log Path" msgstr "Путь для Nginx Access Log" -#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209 +#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207 #, fuzzy msgid "Nginx Configuration Parse Error" msgstr "Ошибка синтаксического анализа конфигурации Nginx" @@ -1175,7 +1221,7 @@ msgid "Nginx restarted successfully" msgstr "Nginx успешно перезапущен" #: src/components/ChatGPT/ChatGPT.vue:270 -#: src/components/Notification/Notification.vue:82 +#: src/components/Notification/Notification.vue:84 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:521 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:535 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:549 @@ -1183,6 +1229,7 @@ msgstr "Nginx успешно перезапущен" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90 #: src/views/domain/ngx_conf/LocationEditor.vue:71 #: src/views/notification/Notification.vue:70 +#: src/views/preference/AuthSettings.vue:96 #: src/views/preference/BasicSettings.vue:101 #: src/views/stream/StreamList.vue:165 msgid "No" @@ -1214,7 +1261,7 @@ msgstr "Заметка" msgid "Notification" msgstr "Сертификат" -#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221 +#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221 #, fuzzy msgid "Notifications" msgstr "Уведомления" @@ -1240,7 +1287,7 @@ msgid "Ok" msgstr "" #: src/components/ChatGPT/ChatGPT.vue:271 -#: src/components/Notification/Notification.vue:83 +#: src/components/Notification/Notification.vue:85 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:522 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:536 @@ -1270,7 +1317,7 @@ msgstr "" msgid "Online" msgstr "" -#: src/views/preference/Preference.vue:113 +#: src/views/preference/Preference.vue:128 msgid "OpenAI" msgstr "" @@ -1283,13 +1330,13 @@ msgstr "OS:" msgid "OS:" msgstr "OS:" -#: src/views/domain/components/Deploy.vue:90 -#: src/views/stream/components/Deploy.vue:90 +#: src/views/domain/components/Deploy.vue:87 +#: src/views/stream/components/Deploy.vue:87 msgid "Overwrite" msgstr "" -#: src/views/domain/components/Deploy.vue:94 -#: src/views/stream/components/Deploy.vue:94 +#: src/views/domain/components/Deploy.vue:91 +#: src/views/stream/components/Deploy.vue:91 msgid "Overwrite exist file" msgstr "" @@ -1297,11 +1344,11 @@ msgstr "" msgid "Params" msgstr "Параметры" -#: src/views/other/Login.vue:132 src/views/user/User.vue:18 +#: src/views/other/Login.vue:144 src/views/user/User.vue:18 msgid "Password" msgstr "Пароль" -#: src/views/other/Install.vue:110 +#: src/views/other/Install.vue:109 msgid "Password (*)" msgstr "Пароль (*)" @@ -1366,7 +1413,7 @@ msgstr "" msgid "Pre-release" msgstr "" -#: src/routes/index.ts:239 src/views/preference/Preference.vue:96 +#: src/routes/index.ts:239 src/views/preference/Preference.vue:105 msgid "Preference" msgstr "Настройки" @@ -1464,7 +1511,16 @@ msgstr "Перезагружается" msgid "Reloading nginx" msgstr "Перезагружается nginx" -#: src/components/Notification/Notification.vue:50 +#: src/views/preference/AuthSettings.vue:101 +msgid "Remove" +msgstr "" + +#: src/views/preference/AuthSettings.vue:47 +#, fuzzy +msgid "Remove successfully" +msgstr "Успешно сохранено" + +#: src/components/Notification/Notification.vue:52 #, fuzzy msgid "Removed successfully" msgstr "Успешно сохранено" @@ -1523,9 +1579,9 @@ msgstr "Выполняется" #: src/components/ChatGPT/ChatGPT.vue:252 #: src/views/certificate/CertificateEditor.vue:249 -#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263 +#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120 -#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254 +#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252 msgid "Save" msgstr "Сохранить" @@ -1533,7 +1589,7 @@ msgstr "Сохранить" msgid "Save Directive" msgstr "Сохранить директиву" -#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50 +#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41 msgid "Save error %{msg}" msgstr "Ошибка сохранения %{msg}" @@ -1541,15 +1597,15 @@ msgstr "Ошибка сохранения %{msg}" #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104 #: src/views/certificate/CertificateEditor.vue:46 -#: src/views/preference/Preference.vue:66 +#: src/views/preference/Preference.vue:74 #, fuzzy msgid "Save successfully" msgstr "Успешно сохранено" -#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38 -#: src/views/domain/DomainEdit.vue:148 +#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37 +#: src/views/domain/DomainEdit.vue:146 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39 -#: src/views/stream/StreamEdit.vue:140 +#: src/views/stream/StreamEdit.vue:138 msgid "Saved successfully" msgstr "Успешно сохранено" @@ -1574,8 +1630,9 @@ msgstr "Отправлено" #: src/components/StdDesign/StdDataDisplay/StdTable.vue:196 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:235 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81 -#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70 -#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113 +#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69 +#: src/views/preference/AuthSettings.vue:49 +#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42 msgid "Server error" msgstr "Ошибка сервера" @@ -1594,7 +1651,7 @@ msgid "server_name not found in directives" msgstr "server_name не нашел в директивах" #: src/views/domain/cert/components/AutoCertStepOne.vue:34 -#: src/views/domain/DomainAdd.vue:121 +#: src/views/domain/DomainAdd.vue:117 msgid "server_name parameter is required" msgstr "server_name параметр обязателен" @@ -1651,7 +1708,7 @@ msgstr "Путь к ключу сертификата SSL" msgid "SSL Certificate Path" msgstr "Путь к сертификату SSL" -#: src/views/other/Login.vue:158 +#: src/views/other/Login.vue:170 #, fuzzy msgid "SSO Login" msgstr "Логин" @@ -1738,8 +1795,8 @@ msgstr "" msgid "System" msgstr "Система" -#: src/views/domain/components/SiteDuplicate.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:140 +#: src/views/domain/components/SiteDuplicate.vue:136 +#: src/views/stream/components/StreamDuplicate.vue:136 msgid "Target" msgstr "" @@ -1773,7 +1830,7 @@ msgstr "" msgid "The input is not a SSL Certificate Key" msgstr "Путь к ключу сертификата SSL" -#: src/views/preference/OpenAISettings.vue:33 +#: src/views/preference/OpenAISettings.vue:36 msgid "" "The model name should only contain letters, unicode, numbers, hyphens, " "dashes, and dots." @@ -1809,8 +1866,8 @@ msgstr "" msgid "The url is invalid" msgstr "URL-адрес неверный" -#: src/views/preference/OpenAISettings.vue:45 -#: src/views/preference/OpenAISettings.vue:57 +#: src/views/preference/OpenAISettings.vue:48 +#: src/views/preference/OpenAISettings.vue:60 #, fuzzy msgid "The url is invalid." msgstr "URL-адрес неверный" @@ -1838,6 +1895,7 @@ msgstr "" msgid "This field should not be empty" msgstr "Это поле обязательно к заполнению" +#: src/views/preference/AuthSettings.vue:59 #: src/views/preference/LogrotateSettings.vue:12 msgid "Tips" msgstr "" @@ -1854,10 +1912,14 @@ msgid "" "continue?" msgstr "" -#: src/views/preference/OpenAISettings.vue:69 +#: src/views/preference/OpenAISettings.vue:72 msgid "Token is not valid" msgstr "" +#: src/views/other/Login.vue:62 +msgid "Too many login failed attempts, please try again later" +msgstr "" + #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221 msgid "Trash" msgstr "" @@ -1913,11 +1975,15 @@ msgstr "" msgid "User" msgstr "Пользователь" -#: src/views/other/Login.vue:122 src/views/user/User.vue:9 +#: src/views/other/Login.vue:65 +msgid "User is banned" +msgstr "" + +#: src/views/other/Login.vue:134 src/views/user/User.vue:9 msgid "Username" msgstr "Имя пользователя" -#: src/views/other/Install.vue:100 +#: src/views/other/Install.vue:99 msgid "Username (*)" msgstr "Имя пользователя (*)" @@ -1931,7 +1997,7 @@ msgstr "Действительный" msgid "View" msgstr "Просмотр" -#: src/components/Notification/Notification.vue:141 +#: src/components/Notification/Notification.vue:143 #, fuzzy msgid "View all notifications" msgstr "Просмотреть все уведомления" @@ -1947,7 +2013,7 @@ msgstr "Простой режим" #: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33 #: src/views/domain/cert/components/AutoCertStepOne.vue:28 -#: src/views/domain/DomainAdd.vue:116 +#: src/views/domain/DomainAdd.vue:112 msgid "Warning" msgstr "Внимание" @@ -1980,6 +2046,7 @@ msgstr "Запись сертификата на диск" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89 #: src/views/domain/ngx_conf/LocationEditor.vue:70 +#: src/views/preference/AuthSettings.vue:95 #: src/views/preference/BasicSettings.vue:100 msgid "Yes" msgstr "Да" diff --git a/app/src/language/vi_VN/app.po b/app/src/language/vi_VN/app.po index bff878963..5a03c8461 100644 --- a/app/src/language/vi_VN/app.po +++ b/app/src/language/vi_VN/app.po @@ -28,7 +28,8 @@ msgstr "Người dùng" #: src/views/certificate/DNSCredential.vue:33 src/views/config/config.ts:34 #: src/views/domain/DomainList.vue:47 src/views/environment/Environment.vue:129 #: src/views/notification/Notification.vue:37 -#: src/views/stream/StreamList.vue:47 src/views/user/User.vue:43 +#: src/views/preference/AuthSettings.vue:26 src/views/stream/StreamList.vue:47 +#: src/views/user/User.vue:43 msgid "Action" msgstr "Hành động" @@ -51,7 +52,7 @@ msgstr "Thêm Directive" msgid "Add Location" msgstr "Thêm Location" -#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:93 +#: src/routes/index.ts:64 src/views/domain/DomainAdd.vue:89 msgid "Add Site" msgstr "Thêm Website" @@ -70,11 +71,11 @@ msgstr "Cập nhật thành công" msgid "Additional" msgstr "Tùy chọn bổ sung" -#: src/views/domain/DomainEdit.vue:199 src/views/stream/StreamEdit.vue:191 +#: src/views/domain/DomainEdit.vue:197 src/views/stream/StreamEdit.vue:189 msgid "Advance Mode" msgstr "Nâng cao" -#: src/views/preference/OpenAISettings.vue:42 +#: src/views/preference/OpenAISettings.vue:45 msgid "API Base Url" msgstr "" @@ -82,11 +83,11 @@ msgstr "" msgid "API Document" msgstr "" -#: src/views/preference/OpenAISettings.vue:54 +#: src/views/preference/OpenAISettings.vue:57 msgid "API Proxy" msgstr "" -#: src/views/preference/OpenAISettings.vue:66 +#: src/views/preference/OpenAISettings.vue:69 msgid "API Token" msgstr "" @@ -94,7 +95,12 @@ msgstr "" msgid "Arch" msgstr "" -#: src/components/Notification/Notification.vue:84 +#: src/views/preference/AuthSettings.vue:94 +#, fuzzy +msgid "Are you sure to delete this banned IP immediately?" +msgstr "Bạn chắc chắn muốn xóa nó " + +#: src/components/Notification/Notification.vue:86 #: src/views/notification/Notification.vue:72 #, fuzzy msgid "Are you sure you want to clear all notifications?" @@ -147,6 +153,15 @@ msgstr "Hỏi ChatGPT" msgid "Assistant" msgstr "Trợ lý" +#: src/views/preference/AuthSettings.vue:17 +msgid "Attempts" +msgstr "" + +#: src/views/preference/Preference.vue:116 +#, fuzzy +msgid "Auth" +msgstr "Tác giả" + #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:106 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:120 msgid "Author" @@ -170,8 +185,8 @@ msgstr "Đã bật tự động gia hạn SSL cho %{name}" #: src/views/certificate/CertificateEditor.vue:242 #: src/views/config/Config.vue:73 src/views/config/ConfigEdit.vue:87 -#: src/views/domain/DomainEdit.vue:256 src/views/nginx_log/NginxLog.vue:168 -#: src/views/stream/StreamEdit.vue:247 +#: src/views/domain/DomainEdit.vue:254 src/views/nginx_log/NginxLog.vue:168 +#: src/views/stream/StreamEdit.vue:245 msgid "Back" msgstr "Quay lại" @@ -180,19 +195,31 @@ msgstr "Quay lại" msgid "Back Home" msgstr "Quay lại" -#: src/views/domain/DomainAdd.vue:99 +#: src/views/preference/AuthSettings.vue:68 +msgid "Ban Threshold Minutes" +msgstr "" + +#: src/views/preference/AuthSettings.vue:82 +msgid "Banned IPs" +msgstr "" + +#: src/views/preference/AuthSettings.vue:20 +msgid "Banned Until" +msgstr "" + +#: src/views/domain/DomainAdd.vue:95 msgid "Base information" msgstr "Thông tin" #: src/views/config/ConfigEdit.vue:115 #: src/views/domain/components/RightSettings.vue:75 -#: src/views/preference/Preference.vue:101 +#: src/views/preference/Preference.vue:110 #: src/views/stream/components/RightSettings.vue:74 #, fuzzy msgid "Basic" msgstr "Cơ bản" -#: src/views/domain/DomainEdit.vue:202 src/views/stream/StreamEdit.vue:194 +#: src/views/domain/DomainEdit.vue:200 src/views/stream/StreamEdit.vue:192 msgid "Basic Mode" msgstr "Cơ bản" @@ -280,12 +307,12 @@ msgid "Cleaning environment variables" msgstr "Xoá các biến môi trường" #: src/components/ChatGPT/ChatGPT.vue:276 -#: src/components/Notification/Notification.vue:89 +#: src/components/Notification/Notification.vue:91 #: src/views/notification/Notification.vue:77 msgid "Clear" msgstr "Xoá" -#: src/components/Notification/Notification.vue:40 +#: src/components/Notification/Notification.vue:42 #: src/views/notification/Notification.vue:46 #, fuzzy msgid "Cleared successfully" @@ -312,7 +339,7 @@ msgstr "Mẫu Cấu hình" msgid "Configuration file is test successful" msgstr "Tệp cấu hình được kiểm tra thành công" -#: src/views/domain/DomainAdd.vue:105 +#: src/views/domain/DomainAdd.vue:101 msgid "Configuration Name" msgstr "Tên cấu hình" @@ -320,7 +347,7 @@ msgstr "Tên cấu hình" msgid "Configurations" msgstr "Cấu hình" -#: src/views/domain/DomainAdd.vue:100 +#: src/views/domain/DomainAdd.vue:96 msgid "Configure SSL" msgstr "Cấu hình SSL" @@ -351,7 +378,7 @@ msgstr "CPU:" msgid "Create" msgstr "Ngày tạo" -#: src/views/domain/DomainAdd.vue:158 +#: src/views/domain/DomainAdd.vue:154 msgid "Create Another" msgstr "Tạo thêm" @@ -390,7 +417,7 @@ msgstr "" msgid "Dashboard" msgstr "Bảng điều khiển" -#: src/views/other/Install.vue:121 +#: src/views/other/Install.vue:120 msgid "Database (Optional, default: database)" msgstr "Tên cơ sở dữ liệu (Tuỳ chọn, Mặc định là: database)" @@ -424,15 +451,15 @@ msgstr "Xoá trang web: %{site_name}" msgid "Deleted successfully" msgstr "Đã xoá thành công" -#: src/views/domain/components/Deploy.vue:106 +#: src/views/domain/components/Deploy.vue:103 #: src/views/domain/components/RightSettings.vue:93 -#: src/views/stream/components/Deploy.vue:106 +#: src/views/stream/components/Deploy.vue:103 #: src/views/stream/components/RightSettings.vue:92 msgid "Deploy" msgstr "Triển khai" -#: src/views/domain/components/Deploy.vue:63 -#: src/views/stream/components/Deploy.vue:63 +#: src/views/domain/components/Deploy.vue:60 +#: src/views/stream/components/Deploy.vue:60 msgid "Deploy %{conf_name} to %{node_name} failed" msgstr "Triển khai %{conf_name} tới %{node_name} thất bại" @@ -482,9 +509,9 @@ msgstr "Tắt" msgid "Disable auto-renewal failed for %{name}" msgstr "Tắt tự động gia hạn SSL cho %{name} thất bại" -#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:185 +#: src/views/domain/cert/ChangeCert.vue:44 src/views/domain/DomainEdit.vue:183 #: src/views/domain/DomainList.vue:33 src/views/environment/Environment.vue:93 -#: src/views/stream/StreamEdit.vue:177 src/views/stream/StreamList.vue:33 +#: src/views/stream/StreamEdit.vue:175 src/views/stream/StreamList.vue:33 msgid "Disabled" msgstr "Đã tắt" @@ -563,7 +590,7 @@ msgstr "Bạn muốn xóa máy chủ này ?" msgid "Domain" msgstr "" -#: src/views/domain/DomainAdd.vue:148 +#: src/views/domain/DomainAdd.vue:144 msgid "Domain Config Created Successfully" msgstr "Tên miền đã được tạo" @@ -585,38 +612,38 @@ msgstr "Đang tải phiên bản mới nhất" msgid "Dry run mode enabled" msgstr "Đã bật chế độ Dry run" -#: src/views/domain/components/SiteDuplicate.vue:126 +#: src/views/domain/components/SiteDuplicate.vue:122 #: src/views/domain/DomainList.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:126 +#: src/views/stream/components/StreamDuplicate.vue:122 #: src/views/stream/StreamList.vue:161 msgid "Duplicate" msgstr "Nhân bản" -#: src/views/domain/components/SiteDuplicate.vue:84 -#: src/views/stream/components/StreamDuplicate.vue:84 +#: src/views/domain/components/SiteDuplicate.vue:82 +#: src/views/stream/components/StreamDuplicate.vue:82 #, fuzzy msgid "Duplicate %{conf_name} to %{node_name} successfully" msgstr "Nhân bản %{conf_name} thành %{node_name} thành công" -#: src/views/domain/components/SiteDuplicate.vue:90 -#: src/views/stream/components/StreamDuplicate.vue:90 +#: src/views/domain/components/SiteDuplicate.vue:87 +#: src/views/stream/components/StreamDuplicate.vue:87 #, fuzzy msgid "Duplicate failed" msgstr "Nhân bản thất bại" -#: src/views/domain/components/SiteDuplicate.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:82 +#: src/views/domain/components/SiteDuplicate.vue:80 +#: src/views/stream/components/StreamDuplicate.vue:80 #, fuzzy msgid "Duplicate successfully" msgstr "Nhân bản thành công" -#: src/views/domain/components/SiteDuplicate.vue:64 -#: src/views/stream/components/StreamDuplicate.vue:64 +#: src/views/domain/components/SiteDuplicate.vue:63 +#: src/views/stream/components/StreamDuplicate.vue:63 #, fuzzy msgid "Duplicate to local successfully" msgstr "Đã sao chép thành công vào máy cục bộ" -#: src/views/domain/DomainEdit.vue:174 src/views/stream/StreamEdit.vue:166 +#: src/views/domain/DomainEdit.vue:172 src/views/stream/StreamEdit.vue:164 msgid "Edit %{n}" msgstr "Sửa %{n}" @@ -638,25 +665,25 @@ msgstr "Sửa trang web" msgid "Email" msgstr "Email (*)" -#: src/views/other/Install.vue:90 +#: src/views/other/Install.vue:89 msgid "Email (*)" msgstr "Email (*)" -#: src/views/domain/components/Deploy.vue:86 +#: src/views/domain/components/Deploy.vue:83 #: src/views/domain/DomainList.vue:132 -#: src/views/stream/components/Deploy.vue:86 +#: src/views/stream/components/Deploy.vue:83 #: src/views/stream/StreamList.vue:153 #, fuzzy msgid "Enable" msgstr "Đã bật" -#: src/views/domain/components/Deploy.vue:52 -#: src/views/stream/components/Deploy.vue:52 +#: src/views/domain/components/Deploy.vue:50 +#: src/views/stream/components/Deploy.vue:50 msgid "Enable %{conf_name} in %{node_name} failed" msgstr "Không thể bật %{conf_name} trên %{node_name}" -#: src/views/domain/components/Deploy.vue:46 -#: src/views/stream/components/Deploy.vue:46 +#: src/views/domain/components/Deploy.vue:45 +#: src/views/stream/components/Deploy.vue:45 msgid "Enable %{conf_name} in %{node_name} successfully" msgstr "Đã bật %{conf_name} trên %{node_name}" @@ -664,12 +691,12 @@ msgstr "Đã bật %{conf_name} trên %{node_name}" msgid "Enable auto-renewal failed for %{name}" msgstr "Không thể bật tự động gia hạn SSL cho %{name}" -#: src/views/domain/DomainAdd.vue:46 +#: src/views/domain/DomainAdd.vue:43 msgid "Enable failed" msgstr "Bật không thành công" -#: src/views/domain/components/Deploy.vue:44 -#: src/views/stream/components/Deploy.vue:44 +#: src/views/domain/components/Deploy.vue:43 +#: src/views/stream/components/Deploy.vue:43 #, fuzzy msgid "Enable successfully" msgstr "Đã bật" @@ -680,19 +707,19 @@ msgstr "Bật TLS" #: src/views/domain/cert/ChangeCert.vue:40 #: src/views/domain/components/RightSettings.vue:77 -#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:29 +#: src/views/domain/DomainEdit.vue:177 src/views/domain/DomainList.vue:29 #: src/views/environment/Environment.vue:102 #: src/views/preference/LogrotateSettings.vue:20 #: src/views/stream/components/RightSettings.vue:76 -#: src/views/stream/StreamEdit.vue:171 src/views/stream/StreamList.vue:29 +#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29 msgid "Enabled" msgstr "Đã bật" #: src/views/domain/components/RightSettings.vue:29 -#: src/views/domain/components/SiteDuplicate.vue:98 -#: src/views/domain/DomainAdd.vue:42 src/views/domain/DomainList.vue:57 +#: src/views/domain/components/SiteDuplicate.vue:94 +#: src/views/domain/DomainAdd.vue:40 src/views/domain/DomainList.vue:57 #: src/views/stream/components/RightSettings.vue:29 -#: src/views/stream/components/StreamDuplicate.vue:98 +#: src/views/stream/components/StreamDuplicate.vue:94 #: src/views/stream/StreamList.vue:57 msgid "Enabled successfully" msgstr "Đã bật" @@ -763,7 +790,7 @@ msgstr "Không thể bật %{msg}" msgid "Failed to get certificate information" msgstr "Không thể truy xuất thông tin chứng chỉ" -#: src/views/domain/DomainEdit.vue:132 src/views/stream/StreamEdit.vue:124 +#: src/views/domain/DomainEdit.vue:130 src/views/stream/StreamEdit.vue:122 msgid "Failed to save, syntax error(s) was detected in the configuration." msgstr "Không lưu được, đã phát hiện thấy (các) lỗi cú pháp trong cấu hình." @@ -789,7 +816,7 @@ msgstr "Không tìm thấy tệp tin" msgid "Filter" msgstr "Lọc" -#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:101 +#: src/language/constants.ts:19 src/views/domain/DomainAdd.vue:97 msgid "Finished" msgstr "Đã hoàn thành" @@ -862,6 +889,12 @@ msgstr "" msgid "If left blank, the default CA Dir will be used." msgstr "" +#: src/views/preference/AuthSettings.vue:60 +msgid "" +"If the number of login failed attempts from a ip reach the max attempts in " +"ban threshold minutes, the ip will be banned for a period of time." +msgstr "" + #: src/views/certificate/Certificate.vue:136 #, fuzzy msgid "Import" @@ -872,6 +905,11 @@ msgstr "Xuất" msgid "Import Certificate" msgstr "Chứng chỉ" +#: src/views/other/Login.vue:59 +#, fuzzy +msgid "Incorrect username or password" +msgstr "Tên người dùng hoặc mật khẩu không chính xác" + #: src/constants/index.ts:18 msgid "Info" msgstr "Thông tin" @@ -884,7 +922,7 @@ msgstr "Không thể khởi tạo trình nâng cấp" msgid "Initialing core upgrader" msgstr "Đang khởi tạo trình nâng cấp" -#: src/routes/index.ts:273 src/views/other/Install.vue:136 +#: src/routes/index.ts:273 src/views/other/Install.vue:135 msgid "Install" msgstr "Cài đặt" @@ -906,6 +944,10 @@ msgstr "" msgid "Invalid" msgstr "Hợp lệ" +#: src/views/preference/AuthSettings.vue:14 +msgid "IP" +msgstr "" + #: src/views/certificate/Certificate.vue:144 #, fuzzy msgid "Issue wildcard certificate" @@ -940,7 +982,7 @@ msgstr "Kiểm tra lần cuối lúc" msgid "Leave blank for no change" msgstr "Bỏ trống nếu không thay đổi" -#: src/views/preference/OpenAISettings.vue:50 +#: src/views/preference/OpenAISettings.vue:53 msgid "Leave blank for the default: https://api.openai.com/" msgstr "Bỏ trống để sử dụng địa chỉ mặc định: https://api.openai.com/" @@ -997,11 +1039,11 @@ msgstr "Locations" msgid "Log" msgstr "Log" -#: src/routes/index.ts:279 src/views/other/Login.vue:147 +#: src/routes/index.ts:279 src/views/other/Login.vue:159 msgid "Login" msgstr "Đăng nhập" -#: src/views/other/Login.vue:51 src/views/other/Login.vue:97 +#: src/views/other/Login.vue:109 src/views/other/Login.vue:51 msgid "Login successful" msgstr "Đăng nhập thành công" @@ -1009,7 +1051,7 @@ msgstr "Đăng nhập thành công" msgid "Logout successful" msgstr "Đã đăng xuất" -#: src/views/preference/Preference.vue:119 +#: src/views/preference/Preference.vue:134 msgid "Logrotate" msgstr "" @@ -1053,6 +1095,10 @@ msgstr "Người dùng" msgid "Managed Certificate" msgstr "" +#: src/views/preference/AuthSettings.vue:74 +msgid "Max Attempts" +msgstr "" + #: src/views/dashboard/ServerAnalytic.vue:217 #: src/views/dashboard/ServerAnalytic.vue:218 msgid "Memory" @@ -1066,7 +1112,7 @@ msgstr "Memory và Storage" msgid "Minutes" msgstr "" -#: src/views/preference/OpenAISettings.vue:30 +#: src/views/preference/OpenAISettings.vue:33 #, fuzzy msgid "Model" msgstr "Run Mode" @@ -1083,7 +1129,7 @@ msgstr "Sửa" msgid "Modify Certificate" msgstr "Sửa chứng chỉ" -#: src/views/domain/DomainAdd.vue:155 +#: src/views/domain/DomainAdd.vue:151 msgid "Modify Config" msgstr "Sửa cấu hình" @@ -1103,12 +1149,12 @@ msgstr "Single Directive" #: src/views/certificate/DNSCredential.vue:11 src/views/config/config.ts:7 #: src/views/domain/cert/ChangeCert.vue:17 #: src/views/domain/components/RightSettings.vue:83 -#: src/views/domain/components/SiteDuplicate.vue:133 +#: src/views/domain/components/SiteDuplicate.vue:129 #: src/views/domain/DomainList.vue:13 #: src/views/domain/ngx_conf/NgxUpstream.vue:175 #: src/views/environment/Environment.vue:12 #: src/views/stream/components/RightSettings.vue:82 -#: src/views/stream/components/StreamDuplicate.vue:133 +#: src/views/stream/components/StreamDuplicate.vue:129 #: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:187 msgid "Name" msgstr "Tên" @@ -1135,11 +1181,11 @@ msgstr "Đã có phiên bản mới" #: src/views/certificate/WildcardCertificate.vue:99 #: src/views/domain/cert/components/ObtainCert.vue:203 -#: src/views/domain/DomainAdd.vue:142 +#: src/views/domain/DomainAdd.vue:138 msgid "Next" msgstr "Tiếp theo" -#: src/views/preference/Preference.vue:107 +#: src/views/preference/Preference.vue:122 msgid "Nginx" msgstr "" @@ -1147,7 +1193,7 @@ msgstr "" msgid "Nginx Access Log Path" msgstr "Vị trí lưu log truy cập (Access log) của Nginx" -#: src/views/domain/DomainEdit.vue:217 src/views/stream/StreamEdit.vue:209 +#: src/views/domain/DomainEdit.vue:215 src/views/stream/StreamEdit.vue:207 #, fuzzy msgid "Nginx Configuration Parse Error" msgstr "Lỗi phân tích cú pháp cấu hình Nginx" @@ -1175,7 +1221,7 @@ msgid "Nginx restarted successfully" msgstr "Restart Nginx thành công" #: src/components/ChatGPT/ChatGPT.vue:270 -#: src/components/Notification/Notification.vue:82 +#: src/components/Notification/Notification.vue:84 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:521 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:535 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:549 @@ -1183,6 +1229,7 @@ msgstr "Restart Nginx thành công" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90 #: src/views/domain/ngx_conf/LocationEditor.vue:71 #: src/views/notification/Notification.vue:70 +#: src/views/preference/AuthSettings.vue:96 #: src/views/preference/BasicSettings.vue:101 #: src/views/stream/StreamList.vue:165 msgid "No" @@ -1214,7 +1261,7 @@ msgstr "Ghi chú" msgid "Notification" msgstr "Thông báo" -#: src/components/Notification/Notification.vue:80 src/routes/index.ts:221 +#: src/components/Notification/Notification.vue:82 src/routes/index.ts:221 #, fuzzy msgid "Notifications" msgstr "Thông báo" @@ -1240,7 +1287,7 @@ msgid "Ok" msgstr "" #: src/components/ChatGPT/ChatGPT.vue:271 -#: src/components/Notification/Notification.vue:83 +#: src/components/Notification/Notification.vue:85 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:56 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:522 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:536 @@ -1270,7 +1317,7 @@ msgstr "Sau khi quá trình xác minh hoàn tất, bản ghi sẽ bị xóa." msgid "Online" msgstr "Trực tuyến" -#: src/views/preference/Preference.vue:113 +#: src/views/preference/Preference.vue:128 msgid "OpenAI" msgstr "" @@ -1283,13 +1330,13 @@ msgstr "Hệ điều hành" msgid "OS:" msgstr "Hệ điều hành:" -#: src/views/domain/components/Deploy.vue:90 -#: src/views/stream/components/Deploy.vue:90 +#: src/views/domain/components/Deploy.vue:87 +#: src/views/stream/components/Deploy.vue:87 msgid "Overwrite" msgstr "Ghi đè" -#: src/views/domain/components/Deploy.vue:94 -#: src/views/stream/components/Deploy.vue:94 +#: src/views/domain/components/Deploy.vue:91 +#: src/views/stream/components/Deploy.vue:91 msgid "Overwrite exist file" msgstr "Ghi đè tập tin đã tồn tại" @@ -1297,11 +1344,11 @@ msgstr "Ghi đè tập tin đã tồn tại" msgid "Params" msgstr "Tham số" -#: src/views/other/Login.vue:132 src/views/user/User.vue:18 +#: src/views/other/Login.vue:144 src/views/user/User.vue:18 msgid "Password" msgstr "Mật khẩu" -#: src/views/other/Install.vue:110 +#: src/views/other/Install.vue:109 msgid "Password (*)" msgstr "Mật khẩu (*)" @@ -1368,7 +1415,7 @@ msgstr "" msgid "Pre-release" msgstr "" -#: src/routes/index.ts:239 src/views/preference/Preference.vue:96 +#: src/routes/index.ts:239 src/views/preference/Preference.vue:105 msgid "Preference" msgstr "Cài đặt" @@ -1466,7 +1513,16 @@ msgstr "Đang tải lại" msgid "Reloading nginx" msgstr "Tải lại nginx" -#: src/components/Notification/Notification.vue:50 +#: src/views/preference/AuthSettings.vue:101 +msgid "Remove" +msgstr "" + +#: src/views/preference/AuthSettings.vue:47 +#, fuzzy +msgid "Remove successfully" +msgstr "Xoá thành công" + +#: src/components/Notification/Notification.vue:52 #, fuzzy msgid "Removed successfully" msgstr "Xoá thành công" @@ -1525,9 +1581,9 @@ msgstr "Running" #: src/components/ChatGPT/ChatGPT.vue:252 #: src/views/certificate/CertificateEditor.vue:249 -#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263 +#: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:261 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120 -#: src/views/preference/Preference.vue:130 src/views/stream/StreamEdit.vue:254 +#: src/views/preference/Preference.vue:145 src/views/stream/StreamEdit.vue:252 msgid "Save" msgstr "Lưu" @@ -1535,7 +1591,7 @@ msgstr "Lưu" msgid "Save Directive" msgstr "Lưu Directive" -#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:50 +#: src/views/config/ConfigEdit.vue:57 src/views/domain/DomainAdd.vue:46 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41 msgid "Save error %{msg}" msgstr "Đã xảy ra lỗi khi lưu %{msg}" @@ -1543,15 +1599,15 @@ msgstr "Đã xảy ra lỗi khi lưu %{msg}" #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104 #: src/views/certificate/CertificateEditor.vue:46 -#: src/views/preference/Preference.vue:66 +#: src/views/preference/Preference.vue:74 #, fuzzy msgid "Save successfully" msgstr "Lưu thành công" -#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:38 -#: src/views/domain/DomainEdit.vue:148 +#: src/views/config/ConfigEdit.vue:55 src/views/domain/DomainAdd.vue:37 +#: src/views/domain/DomainEdit.vue:146 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:39 -#: src/views/stream/StreamEdit.vue:140 +#: src/views/stream/StreamEdit.vue:138 msgid "Saved successfully" msgstr "Lưu thành công" @@ -1576,8 +1632,9 @@ msgstr "Gửi" #: src/components/StdDesign/StdDataDisplay/StdTable.vue:196 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:235 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81 -#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:70 -#: src/views/preference/Preference.vue:70 src/views/stream/StreamList.vue:113 +#: src/views/environment/Environment.vue:139 src/views/other/Install.vue:69 +#: src/views/preference/AuthSettings.vue:49 +#: src/views/preference/Preference.vue:78 src/views/stream/StreamList.vue:113 #: src/views/stream/StreamList.vue:81 src/views/system/Upgrade.vue:42 msgid "Server error" msgstr "Lỗi máy chủ" @@ -1596,7 +1653,7 @@ msgid "server_name not found in directives" msgstr "không tìm thấy server_name trong directives" #: src/views/domain/cert/components/AutoCertStepOne.vue:34 -#: src/views/domain/DomainAdd.vue:121 +#: src/views/domain/DomainAdd.vue:117 msgid "server_name parameter is required" msgstr "Tham số server_name là bắt buộc" @@ -1650,7 +1707,7 @@ msgstr "" msgid "SSL Certificate Path" msgstr "" -#: src/views/other/Login.vue:158 +#: src/views/other/Login.vue:170 msgid "SSO Login" msgstr "" @@ -1736,8 +1793,8 @@ msgstr "" msgid "System" msgstr "Thông tin" -#: src/views/domain/components/SiteDuplicate.vue:140 -#: src/views/stream/components/StreamDuplicate.vue:140 +#: src/views/domain/components/SiteDuplicate.vue:136 +#: src/views/stream/components/StreamDuplicate.vue:136 msgid "Target" msgstr "Mục tiêu" @@ -1770,7 +1827,7 @@ msgstr "" msgid "The input is not a SSL Certificate Key" msgstr "" -#: src/views/preference/OpenAISettings.vue:33 +#: src/views/preference/OpenAISettings.vue:36 msgid "" "The model name should only contain letters, unicode, numbers, hyphens, " "dashes, and dots." @@ -1803,8 +1860,8 @@ msgstr "" msgid "The url is invalid" msgstr "" -#: src/views/preference/OpenAISettings.vue:45 -#: src/views/preference/OpenAISettings.vue:57 +#: src/views/preference/OpenAISettings.vue:48 +#: src/views/preference/OpenAISettings.vue:60 msgid "The url is invalid." msgstr "" @@ -1830,6 +1887,7 @@ msgstr "" msgid "This field should not be empty" msgstr "Trường này không được để trống" +#: src/views/preference/AuthSettings.vue:59 #: src/views/preference/LogrotateSettings.vue:12 msgid "Tips" msgstr "" @@ -1850,10 +1908,14 @@ msgstr "" "quyền đến chương trình phụ trợ và chúng tôi cần lưu tệp này và tải lại " "Nginx. Bạn có chắc chắn muốn Tiếp tục?" -#: src/views/preference/OpenAISettings.vue:69 +#: src/views/preference/OpenAISettings.vue:72 msgid "Token is not valid" msgstr "" +#: src/views/other/Login.vue:62 +msgid "Too many login failed attempts, please try again later" +msgstr "" + #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:221 msgid "Trash" msgstr "" @@ -1909,11 +1971,15 @@ msgstr "" msgid "User" msgstr "Người dùng" -#: src/views/other/Login.vue:122 src/views/user/User.vue:9 +#: src/views/other/Login.vue:65 +msgid "User is banned" +msgstr "" + +#: src/views/other/Login.vue:134 src/views/user/User.vue:9 msgid "Username" msgstr "Username" -#: src/views/other/Install.vue:100 +#: src/views/other/Install.vue:99 msgid "Username (*)" msgstr "Username (*)" @@ -1927,7 +1993,7 @@ msgstr "Hợp lệ" msgid "View" msgstr "Xem" -#: src/components/Notification/Notification.vue:141 +#: src/components/Notification/Notification.vue:143 #, fuzzy msgid "View all notifications" msgstr "Xem tất cả thông báo" @@ -1944,7 +2010,7 @@ msgstr "Cơ bản" #: src/constants/index.ts:17 src/views/config/InspectConfig.vue:33 #: src/views/domain/cert/components/AutoCertStepOne.vue:28 -#: src/views/domain/DomainAdd.vue:116 +#: src/views/domain/DomainAdd.vue:112 msgid "Warning" msgstr "Lưu ý" @@ -1979,6 +2045,7 @@ msgstr "Ghi chứng chỉ vào disk" #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89 #: src/views/domain/ngx_conf/LocationEditor.vue:70 +#: src/views/preference/AuthSettings.vue:95 #: src/views/preference/BasicSettings.vue:100 msgid "Yes" msgstr "Có" diff --git a/app/src/language/zh_CN/app.mo b/app/src/language/zh_CN/app.mo index 0b8fd38645cfdc847fd566b33b80c6e8f8ffd2d1..63b3a4121fa0816b5000938022a51a9e3078bbfb 100644 GIT binary patch delta 9735 zcmZwL34BfGy2tUAhzKI)nRFwF7#p*isfJQ&s-enGvO~xu2|-&ss3fhiHbpw1C&XzL zZFEvad)j+WXGd#jONUcC3HP>+PPf%o@9&@W=ylIM>(j^gdEfP}cUte>n_l`LBycvw z|5<~uEe_X?5XWhSjp{f~*HFiaY@u4mIo{TBYT|1ciSL+atv+a8#_HVv8EfP37>>2u zIZicffDN$;s-HNFa2&tWm!uXIL$LwgZsmJW4O1};7h^o$i#OwbD}RA~C^w9uQyhaH zT!fwR5$uky+x>5`8|BvRSuEo_V@b3^FES%%0fu2NY6VN}em-hK4`CbJiXMC!)&3Jy zKc8b`yog%Z@2KZ$b#R<|*c7W{EY@OtryGeH^j8Ir!f?D3)o_~C--8+`6~i$D^~x5Z zc5V|k#ogElUq$tM66@pVs0my_wGZvc{?{OBOrm$z8l$ljYTyJ^M|WTiOv0)iLUojj z>S#5xNM{>H;ZfumIq#u%LA+het>)}AkEv-BaHL)bDiQFs_ zJ@75mDZYxDSQIz4vKFWvX^SfZ^EIdc5_f$IN!?mV{OWXs8l z)H|w=b+8|5i$|fhYzAtAiKvz2p#~~Otz-{I;v1-e|BiI*oI#zLf1vvL7OP$zYC=(b zDYVe%zcEQODte$kKBG~m*^9%m5cRQp8>8?8)C4}W@+DMyop;q)F>X4j5t?V~c2etUx)7D3uv8aLLQ4{Qsp*R?si!%(@;X+iq z-%+nDJl_47H%Gr7>_^fP2cdRiI%>|LLyP=*Nf@*gs=7%`W%wFvOaw^XCcHiwxeo3_D^HJ|Q&&mbZkaEDvrKl}E zgqqkZs0F-_8u+x`KWF#9LM`M+)R_qD>+WnlKZ#b_9@Rk{s>68H_rk4Ko{5bpXQ0}z zLJd@eYPTM>^(Cl*-axfKiCS?5>J?u>{btnZ=bjaR9EoPs71gl6IRf>r#-RqBi`tnq z)BsCShpo_j2(|U=Pz!h%HL()Z!VaU_zm7xjO=JiCPWAroRz{*G&=58A)>a>nddK}y z6Bv$~(0J70n~Y5{6DMFHZpO2C2c{2j7jgu(1EHIb{RiPhkHRj;BRYNbugXlz2c18OG*q0Z1G)N^yOF5^2{)*v5sS|33* zEJf|eE2shAL>;=5R{t^TWA&BQe}{VRDryI#2D$Cqp-z7sYNrNbbDWHRy{ilo9iA1a zmFz;Tq!hIi2T(IUZ1sOZz3X>S9e#izZ6wZZNLTA>zjGwPMyg8EbqMNMe@VD?{$ zmkLcJ2Q^Ru>VXZYSF+jMiQ0*MI0s)w54PY$=~wa=Y>l%}J9#f^0&7tVc?7kCyUe{q z{O(E*P@xsSh+4rhE1yM8d^Hc?*2;NjngQv!gxGq)*ZpuHs#^C93MmNXv>lA zndpY?bsulWdDs#C#UvW|b&ST3F${k~orT}99IM^xc6bTiN@l|2%2}mr$RYYUA7;YBY}hkE9}+3O&#nRgO1@m}Bk!bkrG`gS9XPbru%d{l%zL ze?O|9jaGgfwZjKd;~cm9e;vpEtKmmh@ufBR#>zjSW**8fi5_f;YTwq%-OWDcAiF;j z_1v9SKOZ&Wg{ZS}pVb%mNz~ywt0+dzbeGjXi~77CMRo8`)I@%<`=R6A4(lS{NltTA zyXja5lTkaCjT(3fw#SvIL+{^9q7L_=CQ^ni@HpzL^i!+<8PzU)f_up7U{}h$QO_lz z?q`{KR=?cJYs^jNc2~c%lSGH7)NZ_m>hJ_=#^+IAI2EYV8-1tyMKuCFloL^3EUT=3 zyVbvh>i1*RA^!z6!RU$Z^X*aR&lyRgceM!{;L}znb%M|)L@GHZ^O>0_Or1rrkIP(fa zhWeMSQ(`qApnCk=%HN@;RBfu;Q$5tnZHgLcAZiPypxWi3{)X`Y*2kUZbEuiTVZMW* zluu6O&Bl_Pq9Px!Sp)xFZifY^fdZ%w_MrwWv-(q3{|#yaKcIdLLZ`XyJD~QkD>lZy z<~YTNHkLLIEI8|$s%F6>18i`WdmM76t$notdX&1Dqo6g5V5+z!>QkKG@E z5tPTECN#TeFU`rFLOrWZ9(25JGzQD1FEs2yBymLlW% zo#R&Vo?GFRqbBg389vJ$xH)Qq9#qF&Q3Lfwz1!PR6P#rxn+wcr)S+97`cAzMBXwHx zNi^U(R0liFQtUx_f1pj1hJM}o+FE{ZEo$83J`sgFMUAcOL9Ml;ITU+Qo{ssr9{Xe6 z*>1bhW+Jwv{$3o2Td@^>G@E_Wny*lyJ@~~MM$B

M^JRr=jjI#H!6lt+fcXfVE}- z)vg$|ccrK;coo&|1nT}7^THgz+u({-gn8Wt_04G1gPl8$JYv3!ydCEpdT?Np>nzkOT8hVhnCKkKz={Um;&EPXD>?fLl<% z$U9IAdm8nrcms9nuc3Chi$CaMXe|i)jkcYVGgQY zp80^?f7r^~upRezqXvEp_1*e0R(<{}?8Y}(lN;Ai4I<{dw8|r&t0#+?x0sF6t94hnvHgAJTE3XvOMVOLU*jpnF3RP^X<`=TZNz)z>BO_d3?hu^NBynDDB>H+y7Kfc50PxB zD!Qj$>AhA?=6)OEGb?|9`UlbyE5C#M)52*&n>mF3da5hM<^TM-hSG4_491n%o$wE* zFoyUCF`LMuQr}h$@J?bAc_E&}7-A)%tB8o9J^}R|Fq8bB*cvzDjaOIdl8E-iYd73T z)BaDSQrB{P%yN}S5sfH+hfQ%BeowR`&qrM=i20P);v&?=KTVx)iT_f8>mt#Ldw<5o z#2E5iLcfMldjAtho+Q$#Jc7DXiI<662ru>H@hzei@gVUM(TAu_Y$l!}YS8X&oPgJ_ z6C_iKMCu}lndI3-8{z>XlkuISD%eB+L9Q##%E})h1`ui+Pkk8%h$8ZbP*-#EM=^_7 zO>Cgthd4{Vlqe?G6-SI9zZu^r{D0?s-n-+QvT{@~hA+*Fmh zfB39zF~w~}8s%T@el&Rn`Co{4iCn9nt2OPhf=D8Ai0VWS9$HQOLOu*1B0`C=#EsW> zD?etHohe@>zs<_8;2>-BBY8e~H@kQH_3!_2RPM9NP2}^)TVgMqhxLi|gszc91kr-> zP}KFMOVyu~sSm%Q+|iy>)mHL&oIl0!U@i67y#Pj5fi0XEKJ$WqoH7q1{ z5?zVD)HNhNB(G*|Nu3Pxppt*NYE%Clbvy7Q)S0UK|BXYb_>KIWD!7&tf33D) zsu5oiIkeqK=vrr9af{AG>`z@6!e@2j4AI`o585-H5O;hhU=@$xR%>*fVM89l+1nx5`UPW9&c(v}8>wQE_H+je(IWNxl6Ju5fI8MY{QUZ81APUj5IG}++L%?8#xnw>6wdto}5KVNxqz%ltpQ2OUw2QxDwGjGt-mq z%~<;HSJlOnmFDy2u;1BBJ>I!q){w?7X9u>7*jUT+$15oFjI0|LTk-Uo;JUJ4(aww8 zODd0Tzwpvil}|ohv1dia=Diig59l=oH*URrWJg)sgy|s-g9jh4Jg}vF->&j42c63O zC6xzO1eT3n){_UypLz1)wxVGEk;_Mlf<*-vH|@B5a{5Br#^6Ic%5rC&suA~ZW_heISW;Xy_KOvJ b*9AAO4;HLr&jJa)K+Qj9QTCCqN$CFoQid7G delta 8764 zcmYk>3w+P@9>?+T-!^8(n7M7kE|}Zg#<00xW*Fw$urNv_HbgGv&z$C()ErVe(m^QX zj3Y{|QbH1O4(ib5kUF_^l1ryL=k@;oK019LK6`#|zu))r`~H4g=Mx3U~p_;=eEm|BY4g zCh9(63C@K&=XW*8gi#TPk=Vq_olqTnV=xZGmN*hy;S-pOrPvs6VH_qTau4i|%`qR< zz8;(55sbn+Sf24+rFz~>YobDmry$qRNuK8SRFOvW~du?$10eOn!s38|LIr`i%^eX z1=hi5F$DLa?(-I^-zoI-4BTgAbfb%?8{I_yx$+Iz9c+#ju@h?LS*RNfLrrKDmc>b^ z{?kx9u>d>Zaw{K3P3#m#;O7n4|FUGRQ<06gtRXYWyKxSNP=7ya;7LdqHv@xl9qRfG zsEKbuo!i&3Hl9YU_y<(K(1zYwh`<(<(;Bk>I+c^C(9HZ;4ws>Jq!=~uM%0RSSa~0+ z-@C}Y-BAq1AFvw!jB1Z;Wi6;npmN=FGKBA zG5VF+K}Lt+Flwv6L0xbIBk&j0YgLiEwZ4&KMpKQtgYvrF(5rh}5!#7x&@-?i2`rxZyB+mEomBe|JpHJ~VII+x1TiXOHVLL1L zLT&XB)Xq*oO(-8V@xs>Zzh<=5I;^w~YfvlLhI;0&VH6%jt?(@B2Io;Xyo7r1?^rpa zjn_W`)xRxjoDNtGyPU)U(}$`knALmcjF=34MX;cg4JgdPF{c zC2GJJ)Q-fV?w^dhKHcnu+HrqZGFm}TtcE$Ll}$liFcUlDY}6L+GfPnuIE0$`39G+^ zdbU?k6S#?*P*7X%(1oI2%S6o9`=3r`6&1^|KgPH7R#Jf4fu-hV>_hn-jKhlUy`5-= zI(%uU*R3Ze;W$jdWvGelKuzp*)T20v<@Ej^31m2pSe=G*sGay8b$H69c^Af@-iCUp z_SUFF+6UEdBx*bPDzQoJCFOviTEg zBH{eT(Li-k{TreVW3t&Ewep@g1_xmrmS8-dLOr6JsGW=IXzzdhj^0X|qqZ!~?21}x zrkRaeL5`KDq9!sMwW4{bM^lU%U@K0>{g{CbJ2}Twb@`}Ay|okjuN#(9p@Gh#Ch&!M z8MWeTs0(i6B8=db;OV$Es6%!V8{m(agRxz_KT>CyTW~n_pW-}h)79J2-F`AUJcqEp zIv^iC=j-O3;uO@tBe4!nL#_BJ)LB@Kmv9~G5iRU)^{9U9FbFrG&dMg#PQ8j+u>U415gtmjvA-{^Kcf<#B<0_ z``y5v-b!;YhKBhVgzGR4U%;mLHYVa#jK|0fw%o^Sh&qHLdwDB-z?^12hMLe~WI*>c zY5{8lWxsQqtzkQACw8OW(<7*k=TJNHwUvJ~%Vc`(5vUu-Vm(a6B+N7mP&@k!>a4wv z>URp`8QK&1&e^ z4HL-d!sZx)sThVGFc^EG+OtrHY%uD&@m8LW+OZ;3ztz_Myt&QXYwZWEe6$bGUt4m< z8osxN+g1+g>)kNitcn^q8g*Tg)px-#%Du2W4zl`ORR3{SEb0+GHJZ9zf7*2UJYQp{!GO1(^pibot z)Q6@Pzl-Cr9qO$Zj;hbM`W2`f??j#M6Q~K^K=u0%aw``-zl~*DC{cby% zWEys(X7;6d4K?u3SOFumz4kh06Rb#mI}Gd$>e2MGat=18Jlb4p?R!uYFU4@icV7lF zJX_R_eztPZK<`mhM%A}NO{lY#hnl&liI21P0@T(PS$QSu`pu{v*pB+-mrA|=r^x6u zU&a*l4e~B%gAtTFm|147wLfG|N3C>@wQoWVu*b@WQ4>6in#d*8qrQTE4IDYx+ma@z zj{Q)d;t^N{XPS#qH+a_EfDI{cvGNJj^=GVn5w+Fdp~k5+#JfHT)vwtQ_Fv!hbZZ!m z+Pd+mtu8Q&Fp}~*)HB|Ry1{;{KZNRk4jbWh)PT`Ly?!aEiFYx3q0UbKp}cFlajtdD zw+@eDDD?|b6Ix!}GO}vmTe;DC?y{CQ@iCusA7BAJGw$(*+-n|04RylG7tHTaQ@VqC z$ojKE<;rFavkq#h^>f%OO|_L(^fU)q$I<3^tDkJnF&Ci*T7_EDM%1Tk2iC;h<}uWO zm#qAQmBWW~RyBcI{2?QoqGsF~bwLK|#)DA<-HX+5GOFJ~bE)~1`3#n!eLd=%`6B9m zn^EJGpss)4Z<%A*f{IgC4jJKf2sf*uE{wKvve_DSdeW_&fi)@jGsk0V%6^=WyRkjC z8R_-&=UZkm>iyV&{3+`WU@ZQG+JPFm-U{MT{hDD4_CXCe&)U~u;8CDfz5}(=znJ?_ zJ5h@4q~9GQqm_MS9d25OU(B$3z4jWY3mcnl%^s)$2BHSeLEUexwa>8nLMtz~_O$`4 zI`@h-yk!j^7Uxx~8u)LBE7o!gb?e|!-kK_5Wy+DLzXuahry>n?O0rQ8WejR+lTcHi zh79QZRxUPQK;3^ks{h_m?2B&nCKd7{^E{5Gd==xcKLweOdI&2~18p_`YQBrQ@yF)h zQ3Ia0@@3TZ*Q^{m#_#==6fwqISrlp_jZp)n;eFT(yW=a^3a_I!KQYfU6*W+A)C2~b zBg{Nh{|Pt^=c4{pxaubpN2dB%?>|D?Vix65sPFvC=Eula%KeC(RM&T$H{eUC->|z- zD?5NX_kY7!tjz4Spk&me>xh8~n*I@F&e4#ET5*T_Z6z4!h(XkkK(&uDCt3R}EBi5# z_T{JnUqyX8OHudv2(?3}t^R^n_PZ#5Jgi`5y3o zQH7vh*d$c{?pE%DdSv4<3D=^2@x6^c&fjlolJB>ydtZE%I||`v-<&Cqii{cGvp(B_2pC zsnB-lF9M|rL^omvCZK#+8)3CTxK`ZdtHP0mKaG)CoU37JqW#Ch1OSfcT+nu&51rl2<`2y&m0Vl|7RMC zi8{n$Dhsd+jwcGq>ot3YI84-{PALPg<2clZL(LT$S=d~gi=2u z%4hq3jlz6l8==&n&K-!gLfmr7|O@jTI01=1R#Q6T62C`12W$hN`CzpMY6{If(?>Xr6; zxOB?;J@FZlYi%jy1MBZ-okU9--^2A*_c-MR2m@9M0}_94<|E)c%QhNI@4(`g=peUB9Z7%C_O+dq5TnJ zEcqf;TB=N41W}dpSp322TVf`0j`)TcMcW`^Amh7-h(8iP5_PFmdWWb<>{Ef%iu!Uy zTk`3F8t=zo>;D8kV0pDvBI2w(+w1C!8m6l_Pmks{Rkdp?;z;F-4 { - // eslint-disable-next-line promise/no-nesting domain.save(ngx_config.name, { name: ngx_config.name, content: r.content, overwrite: true }).then(() => { message.success($gettext('Saved successfully')) - // eslint-disable-next-line promise/no-nesting domain.enable(ngx_config.name).then(() => { message.success($gettext('Enabled successfully')) window.scroll({ top: 0, left: 0, behavior: 'smooth' }) - // eslint-disable-next-line promise/no-nesting }).catch(e => { message.error(e.message ?? $gettext('Enable failed'), 5) }) - // eslint-disable-next-line promise/no-nesting }).catch(e => { message.error($gettext('Save error %{msg}', { msg: $gettext(e.message) ?? '' }), 5) }) diff --git a/app/src/views/domain/DomainEdit.vue b/app/src/views/domain/DomainEdit.vue index c80f4e79b..cb7e9ad21 100644 --- a/app/src/views/domain/DomainEdit.vue +++ b/app/src/views/domain/DomainEdit.vue @@ -105,10 +105,8 @@ function on_mode_change(advanced: CheckedType) { build_config() } else { - // eslint-disable-next-line promise/no-nesting return ngx.tokenize_config(configText.value).then(r => { Object.assign(ngx_config, r) - // eslint-disable-next-line promise/no-nesting }).catch(handle_parse_error) } }) diff --git a/app/src/views/domain/components/Deploy.vue b/app/src/views/domain/components/Deploy.vue index 3f38d0eac..92afe1752 100644 --- a/app/src/views/domain/components/Deploy.vue +++ b/app/src/views/domain/components/Deploy.vue @@ -29,7 +29,7 @@ function deploy() { name: name.value, content: r.config, overwrite: overwrite.value, - // eslint-disable-next-line promise/no-nesting + }, { headers: { 'X-Node-ID': id } }).then(async () => { notification.success({ message: $gettext('Deploy successfully'), @@ -38,7 +38,6 @@ function deploy() { { conf_name: name.value, node_name }), }) if (enabled.value) { - // eslint-disable-next-line promise/no-nesting domain.enable(name.value).then(() => { notification.success({ message: $gettext('Enable successfully'), @@ -46,7 +45,6 @@ function deploy() { $gettext('Enable %{conf_name} in %{node_name} successfully', { conf_name: name.value, node_name }), }) - // eslint-disable-next-line promise/no-nesting }).catch(e => { notification.error({ message: $gettext('Enable %{conf_name} in %{node_name} failed', { @@ -57,7 +55,6 @@ function deploy() { }) }) } - // eslint-disable-next-line promise/no-nesting }).catch(e => { notification.error({ message: $gettext('Deploy %{conf_name} to %{node_name} failed', { diff --git a/app/src/views/domain/components/SiteDuplicate.vue b/app/src/views/domain/components/SiteDuplicate.vue index 7883232f9..118df38e6 100644 --- a/app/src/views/domain/components/SiteDuplicate.vue +++ b/app/src/views/domain/components/SiteDuplicate.vue @@ -59,24 +59,22 @@ function onSubmit() { modelRef.target.forEach(id => { if (id === 0) { - // eslint-disable-next-line promise/no-nesting domain.duplicate(props.name, { name: modelRef.name }).then(() => { message.success($gettext('Duplicate to local successfully')) show.value = false emit('duplicated') - // eslint-disable-next-line promise/no-nesting }).catch(e => { message.error($gettext(e?.message ?? 'Server error')) }) } else { // get source content - // eslint-disable-next-line promise/no-nesting + domain.get(props.name).then(r => { domain.save(modelRef.name, { name: modelRef.name, content: r.config, - // eslint-disable-next-line promise/no-nesting + }, { headers: { 'X-Node-ID': id } }).then(() => { notification.success({ message: $gettext('Duplicate successfully'), @@ -84,7 +82,6 @@ function onSubmit() { $gettext('Duplicate %{conf_name} to %{node_name} successfully', { conf_name: props.name, node_name: node_map[id] }), }) - // eslint-disable-next-line promise/no-nesting }).catch(e => { notification.error({ message: $gettext('Duplicate failed'), @@ -92,7 +89,6 @@ function onSubmit() { }) }) if (r.enabled) { - // eslint-disable-next-line promise/no-nesting domain.enable(modelRef.name, { headers: { 'X-Node-ID': id } }).then(() => { notification.success({ message: $gettext('Enabled successfully'), diff --git a/app/src/views/other/Install.vue b/app/src/views/other/Install.vue index 7a1c5f083..b6c6ee4b3 100644 --- a/app/src/views/other/Install.vue +++ b/app/src/views/other/Install.vue @@ -61,11 +61,10 @@ const onSubmit = () => { validate().then(() => { // modelRef loading.value = true - // eslint-disable-next-line promise/no-nesting + install.install_nginx_ui(modelRef).then(async () => { message.success($gettext('Install successfully')) await router.push('/login') - // eslint-disable-next-line promise/no-nesting }).catch(e => { message.error(e.message ?? $gettext('Server error')) }).finally(() => { diff --git a/app/src/views/other/Login.vue b/app/src/views/other/Login.vue index 59d0b8ca4..96bfbdf30 100644 --- a/app/src/views/other/Login.vue +++ b/app/src/views/other/Login.vue @@ -46,16 +46,28 @@ const { validate, validateInfos, clearValidate } = Form.useForm(modelRef, rulesR const onSubmit = () => { validate().then(async () => { loading.value = true - // eslint-disable-next-line promise/no-nesting + await auth.login(modelRef.username, modelRef.password).then(async () => { message.success($gettext('Login successful'), 1) const next = (route.query?.next || '').toString() || '/' await router.push(next) - // eslint-disable-next-line promise/no-nesting }).catch(e => { - message.error($gettext(e.message ?? 'Server error')) + switch (e.code) { + case 4031: + message.error($gettext('Incorrect username or password')) + break + case 4291: + message.error($gettext('Too many login failed attempts, please try again later')) + break + case 4033: + message.error($gettext('User is banned')) + break + default: + message.error($gettext(e.message ?? 'Server error')) + break + } }) loading.value = false }) diff --git a/app/src/views/preference/AuthSettings.vue b/app/src/views/preference/AuthSettings.vue new file mode 100644 index 000000000..bd7424973 --- /dev/null +++ b/app/src/views/preference/AuthSettings.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/app/src/views/preference/Preference.vue b/app/src/views/preference/Preference.vue index 3a92e1b00..3243d98db 100644 --- a/app/src/views/preference/Preference.vue +++ b/app/src/views/preference/Preference.vue @@ -10,6 +10,7 @@ import NginxSettings from '@/views/preference/NginxSettings.vue' import type { Settings } from '@/views/preference/typedef' import LogrotateSettings from '@/views/preference/LogrotateSettings.vue' import { useSettingsStore } from '@/pinia' +import AuthSettings from '@/views/preference/AuthSettings.vue' const data = ref({ server: { @@ -46,15 +47,21 @@ const data = ref({ cmd: '', interval: 1440, }, + auth: { + ip_white_list: [], + ban_threshold_minutes: 10, + max_attempts: 10, + }, }) -settings.get().then(r => { +settings.get().then(r => { data.value = r }) const settingsStore = useSettingsStore() const { server_name } = storeToRefs(settingsStore) const errors = ref({}) as Ref>> +const refAuthSettings = ref() async function save() { // fix type @@ -63,6 +70,7 @@ async function save() { if (!settingsStore.is_remote) server_name.value = r?.server?.name ?? '' data.value = r + refAuthSettings.value.getBannedIPs() message.success($gettext('Save successfully')) errors.value = {} }).catch(e => { @@ -90,6 +98,7 @@ onMounted(() => { if (route.query?.tab) activeKey.value = route.query.tab.toString() }) +