diff --git a/README.md b/README.md
index d511be6f9..3fde94cea 100644
--- a/README.md
+++ b/README.md
@@ -21,6 +21,17 @@
[声明式API版](https://github.com/flipped-aurora/gin-vue-admin/tree/v2.4.x) |
[声明式API多语言(i18n)版](https://github.com/flipped-aurora/gin-vue-admin/tree/i18n-dev)
+## 赞助商
+Gin-Vue-Admin是一个全栈自动化代码的开源项目,其持续开发完全得益于这些令人敬畏的赞助的支持。如果你想加入他们,请考虑赞助Gin-Vue-Admin的开发。
+
+
Sponsor
+
+
+
+
+
+
+
# 项目文档
[在线文档](https://www.gin-vue-admin.com) : https://www.gin-vue-admin.com
@@ -314,7 +325,7 @@ swag init
- 前端文件参考: [web/src/view/superAdmin/api/api.vue](https://github.com/flipped-aurora/gin-vue-admin/blob/master/web/src/view/superAdmin/api/api.vue)
- 后台文件参考: [server/router/sys_api.go](https://github.com/flipped-aurora/gin-vue-admin/blob/master/server/router/sys_api.go)
- 多点登录限制:需要在`config.yaml`中把`system`中的`use-multipoint`修改为true(需要自行配置Redis和Config中的Redis参数,测试阶段,有bug请及时反馈)。
-- 分片长传:提供文件分片上传和大文件分片上传功能示例。
+- 分片上传:提供文件分片上传和大文件分片上传功能示例。
- 表单生成器:表单生成器借助 [@Variant Form](https://github.com/vform666/variant-form) 。
- 代码生成器:后台基础逻辑以及简单curd的代码生成器。
diff --git a/server/api/v1/system/sys_menu.go b/server/api/v1/system/sys_menu.go
index 92d61beb7..d4fa91f8d 100644
--- a/server/api/v1/system/sys_menu.go
+++ b/server/api/v1/system/sys_menu.go
@@ -28,6 +28,7 @@ func (a *AuthorityMenuApi) GetMenu(c *gin.Context) {
if err != nil {
global.GVA_LOG.Error(global.Translate("general.getDataFail"), zap.Error(err))
response.FailWithMessage(global.Translate("general.getDataFailErr"), c)
+ return
}
if menus == nil {
menus = []system.SysMenu{}
diff --git a/server/api/v1/system/sys_user.go b/server/api/v1/system/sys_user.go
index 3f6c71f52..d71672791 100644
--- a/server/api/v1/system/sys_user.go
+++ b/server/api/v1/system/sys_user.go
@@ -94,7 +94,7 @@ func (b *BaseApi) TokenNext(c *gin.Context, user system.SysUser) {
response.OkWithDetailed(systemRes.LoginResponse{
User: user,
Token: token,
- ExpiresAt: claims.StandardClaims.ExpiresAt * 1000,
+ ExpiresAt: claims.RegisteredClaims.ExpiresAt.Unix() * 1000,
}, global.Translate("sys_user.loginSuccess"), c)
return
}
@@ -108,7 +108,7 @@ func (b *BaseApi) TokenNext(c *gin.Context, user system.SysUser) {
response.OkWithDetailed(systemRes.LoginResponse{
User: user,
Token: token,
- ExpiresAt: claims.StandardClaims.ExpiresAt * 1000,
+ ExpiresAt: claims.RegisteredClaims.ExpiresAt.Unix() * 1000,
}, "sys_user.loginSuccess", c)
} else if err != nil {
global.GVA_LOG.Error(global.Translate("sys_user.loginStatusFail"), zap.Error(err))
@@ -127,7 +127,7 @@ func (b *BaseApi) TokenNext(c *gin.Context, user system.SysUser) {
response.OkWithDetailed(systemRes.LoginResponse{
User: user,
Token: token,
- ExpiresAt: claims.StandardClaims.ExpiresAt * 1000,
+ ExpiresAt: claims.RegisteredClaims.ExpiresAt.Unix() * 1000,
}, global.Translate("sys_user.loginSuccess"), c)
}
}
@@ -268,7 +268,7 @@ func (b *BaseApi) SetUserAuthority(c *gin.Context) {
response.FailWithMessage(err.Error(), c)
} else {
c.Header("new-token", token)
- c.Header("new-expires-at", strconv.FormatInt(claims.ExpiresAt, 10))
+ c.Header("new-expires-at", strconv.FormatInt(claims.ExpiresAt.Unix(), 10))
response.OkWithMessage(global.Translate("general.modifySuccess"), c)
}
}
diff --git a/server/docs/docs.go b/server/docs/docs.go
index 509677c8c..f0ff02471 100644
--- a/server/docs/docs.go
+++ b/server/docs/docs.go
@@ -1,22 +1,14 @@
-// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
-// This file was generated by swaggo/swag
+// Code generated by swaggo/swag. DO NOT EDIT.
package docs
-import (
- "bytes"
- "encoding/json"
- "strings"
+import "github.com/swaggo/swag"
- "github.com/alecthomas/template"
- "github.com/swaggo/swag"
-)
-
-var doc = `{
+const docTemplate = `{
"schemes": {{ marshal .Schemes }},
"swagger": "2.0",
"info": {
- "description": "{{.Description}}",
+ "description": "{{escape .Description}}",
"title": "{{.Title}}",
"contact": {},
"version": "{{.Version}}"
@@ -1475,7 +1467,7 @@ var doc = `{
"summary": "生成验证码",
"responses": {
"200": {
- "description": "生成验证码,返回包括随机数id,base64,验证码长度",
+ "description": "生成验证码,返回包括随机数id,base64,验证码长度,是否开启验证码",
"schema": {
"allOf": [
{
@@ -1997,161 +1989,6 @@ var doc = `{
}
}
},
- "/excel/downloadTemplate": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "consumes": [
- "multipart/form-data"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "excel"
- ],
- "summary": "下载模板",
- "parameters": [
- {
- "type": "string",
- "description": "模板名称",
- "name": "fileName",
- "in": "query",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": ""
- }
- }
- }
- },
- "/excel/exportExcel": {
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/octet-stream"
- ],
- "tags": [
- "excel"
- ],
- "summary": "导出Excel",
- "parameters": [
- {
- "description": "导出Excel文件信息",
- "name": "data",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/example.ExcelInfo"
- }
- }
- ],
- "responses": {
- "200": {
- "description": ""
- }
- }
- }
- },
- "/excel/importExcel": {
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "consumes": [
- "multipart/form-data"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "excel"
- ],
- "summary": "导入Excel文件",
- "parameters": [
- {
- "type": "file",
- "description": "导入Excel文件",
- "name": "file",
- "in": "formData",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "导入Excel文件",
- "schema": {
- "allOf": [
- {
- "$ref": "#/definitions/response.Response"
- },
- {
- "type": "object",
- "properties": {
- "msg": {
- "type": "string"
- }
- }
- }
- ]
- }
- }
- }
- }
- },
- "/excel/loadExcel": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "excel"
- ],
- "summary": "加载Excel数据",
- "responses": {
- "200": {
- "description": "加载Excel数据,返回包括列表,总数,页码,每页数量",
- "schema": {
- "allOf": [
- {
- "$ref": "#/definitions/response.Response"
- },
- {
- "type": "object",
- "properties": {
- "data": {
- "$ref": "#/definitions/response.PageResult"
- },
- "msg": {
- "type": "string"
- }
- }
- }
- ]
- }
- }
- }
- }
- },
"/fileUploadAndDownload/breakpointContinue": {
"post": {
"security": [
@@ -4940,6 +4777,14 @@ var doc = `{
"key-long": {
"description": "验证码长度",
"type": "integer"
+ },
+ "open-captcha": {
+ "description": "防爆破验证码开启此数,0代表每次登录都需要验证码,其他数字代表错误密码此数,如3代表错误三次后出现验证码",
+ "type": "integer"
+ },
+ "open-captcha-timeout": {
+ "description": "防爆破验证码超时时间,单位:s(秒)",
+ "type": "integer"
}
}
},
@@ -4960,39 +4805,6 @@ var doc = `{
}
}
},
- "config.Email": {
- "type": "object",
- "properties": {
- "from": {
- "description": "收件人",
- "type": "string"
- },
- "host": {
- "description": "服务器地址",
- "type": "string"
- },
- "is-ssl": {
- "description": "是否SSL",
- "type": "boolean"
- },
- "nickname": {
- "description": "昵称",
- "type": "string"
- },
- "port": {
- "description": "端口",
- "type": "integer"
- },
- "secret": {
- "description": "密钥",
- "type": "string"
- },
- "to": {
- "description": "收件人:多个以英文逗号分隔",
- "type": "string"
- }
- }
- },
"config.Excel": {
"type": "object",
"properties": {
@@ -5055,7 +4867,7 @@ var doc = `{
}
}
},
- "config.Mysql": {
+ "config.Mssql": {
"type": "object",
"properties": {
"config": {
@@ -5066,6 +4878,11 @@ var doc = `{
"description": "数据库名",
"type": "string"
},
+ "engine": {
+ "description": "数据库引擎,默认InnoDB",
+ "type": "string",
+ "default": "InnoDB"
+ },
"log-mode": {
"description": "是否开启Gorm全局日志",
"type": "string"
@@ -5094,6 +4911,130 @@ var doc = `{
"description": ":端口",
"type": "string"
},
+ "prefix": {
+ "description": "全局表前缀,单独定义TableName则不生效",
+ "type": "string"
+ },
+ "singular": {
+ "description": "是否开启全局禁用复数,true表示开启",
+ "type": "boolean"
+ },
+ "username": {
+ "description": "数据库用户名",
+ "type": "string"
+ }
+ }
+ },
+ "config.Mysql": {
+ "type": "object",
+ "properties": {
+ "config": {
+ "description": "高级配置",
+ "type": "string"
+ },
+ "db-name": {
+ "description": "数据库名",
+ "type": "string"
+ },
+ "engine": {
+ "description": "数据库引擎,默认InnoDB",
+ "type": "string",
+ "default": "InnoDB"
+ },
+ "log-mode": {
+ "description": "是否开启Gorm全局日志",
+ "type": "string"
+ },
+ "log-zap": {
+ "description": "是否通过zap写入日志文件",
+ "type": "boolean"
+ },
+ "max-idle-conns": {
+ "description": "空闲中的最大连接数",
+ "type": "integer"
+ },
+ "max-open-conns": {
+ "description": "打开到数据库的最大连接数",
+ "type": "integer"
+ },
+ "password": {
+ "description": "数据库密码",
+ "type": "string"
+ },
+ "path": {
+ "description": "服务器地址:端口",
+ "type": "string"
+ },
+ "port": {
+ "description": ":端口",
+ "type": "string"
+ },
+ "prefix": {
+ "description": "全局表前缀,单独定义TableName则不生效",
+ "type": "string"
+ },
+ "singular": {
+ "description": "是否开启全局禁用复数,true表示开启",
+ "type": "boolean"
+ },
+ "username": {
+ "description": "数据库用户名",
+ "type": "string"
+ }
+ }
+ },
+ "config.Oracle": {
+ "type": "object",
+ "properties": {
+ "config": {
+ "description": "高级配置",
+ "type": "string"
+ },
+ "db-name": {
+ "description": "数据库名",
+ "type": "string"
+ },
+ "engine": {
+ "description": "数据库引擎,默认InnoDB",
+ "type": "string",
+ "default": "InnoDB"
+ },
+ "log-mode": {
+ "description": "是否开启Gorm全局日志",
+ "type": "string"
+ },
+ "log-zap": {
+ "description": "是否通过zap写入日志文件",
+ "type": "boolean"
+ },
+ "max-idle-conns": {
+ "description": "空闲中的最大连接数",
+ "type": "integer"
+ },
+ "max-open-conns": {
+ "description": "打开到数据库的最大连接数",
+ "type": "integer"
+ },
+ "password": {
+ "description": "数据库密码",
+ "type": "string"
+ },
+ "path": {
+ "description": "服务器地址:端口",
+ "type": "string"
+ },
+ "port": {
+ "description": ":端口",
+ "type": "string"
+ },
+ "prefix": {
+ "description": "全局表前缀,单独定义TableName则不生效",
+ "type": "string"
+ },
+ "singular": {
+ "description": "是否开启全局禁用复数,true表示开启",
+ "type": "boolean"
+ },
"username": {
"description": "数据库用户名",
"type": "string"
@@ -5111,6 +5052,11 @@ var doc = `{
"description": "数据库名",
"type": "string"
},
+ "engine": {
+ "description": "数据库引擎,默认InnoDB",
+ "type": "string",
+ "default": "InnoDB"
+ },
"log-mode": {
"description": "是否开启Gorm全局日志",
"type": "string"
@@ -5139,6 +5085,14 @@ var doc = `{
"description": ":端口",
"type": "string"
},
+ "prefix": {
+ "description": "全局表前缀,单独定义TableName则不生效",
+ "type": "string"
+ },
+ "singular": {
+ "description": "是否开启全局禁用复数,true表示开启",
+ "type": "boolean"
+ },
"username": {
"description": "数据库用户名",
"type": "string"
@@ -5203,7 +5157,11 @@ var doc = `{
},
"autocode": {
"description": "auto",
- "$ref": "#/definitions/config.Autocode"
+ "allOf": [
+ {
+ "$ref": "#/definitions/config.Autocode"
+ }
+ ]
},
"aws-s3": {
"$ref": "#/definitions/config.AwsS3"
@@ -5213,7 +5171,11 @@ var doc = `{
},
"cors": {
"description": "跨域配置",
- "$ref": "#/definitions/config.CORS"
+ "allOf": [
+ {
+ "$ref": "#/definitions/config.CORS"
+ }
+ ]
},
"db-list": {
"type": "array",
@@ -5222,7 +5184,7 @@ var doc = `{
}
},
"email": {
- "$ref": "#/definitions/config.Email"
+ "$ref": "#/definitions/github_com_flipped-aurora_gin-vue-admin_server_config.Email"
},
"excel": {
"$ref": "#/definitions/config.Excel"
@@ -5235,11 +5197,25 @@ var doc = `{
},
"local": {
"description": "oss",
- "$ref": "#/definitions/config.Local"
+ "allOf": [
+ {
+ "$ref": "#/definitions/config.Local"
+ }
+ ]
+ },
+ "mssql": {
+ "$ref": "#/definitions/config.Mssql"
},
"mysql": {
"description": "gorm",
- "$ref": "#/definitions/config.Mysql"
+ "allOf": [
+ {
+ "$ref": "#/definitions/config.Mysql"
+ }
+ ]
+ },
+ "oracle": {
+ "$ref": "#/definitions/config.Oracle"
},
"pgsql": {
"$ref": "#/definitions/config.Pgsql"
@@ -5281,6 +5257,11 @@ var doc = `{
"disable": {
"type": "boolean"
},
+ "engine": {
+ "description": "数据库引擎,默认InnoDB",
+ "type": "string",
+ "default": "InnoDB"
+ },
"log-mode": {
"description": "是否开启Gorm全局日志",
"type": "string"
@@ -5309,6 +5290,14 @@ var doc = `{
"description": ":端口",
"type": "string"
},
+ "prefix": {
+ "description": "全局表前缀,单独定义TableName则不生效",
+ "type": "string"
+ },
+ "singular": {
+ "description": "是否开启全局禁用复数,true表示开启",
+ "type": "boolean"
+ },
"type": {
"type": "string"
},
@@ -5343,6 +5332,9 @@ var doc = `{
"description": "Oss类型",
"type": "string"
},
+ "router-prefix": {
+ "type": "string"
+ },
"use-multipoint": {
"description": "多点登录拦截",
"type": "boolean"
@@ -5461,7 +5453,11 @@ var doc = `{
},
"sysUser": {
"description": "管理详情",
- "$ref": "#/definitions/system.SysUser"
+ "allOf": [
+ {
+ "$ref": "#/definitions/system.SysUser"
+ }
+ ]
},
"sysUserAuthorityID": {
"description": "管理角色ID",
@@ -5574,18 +5570,36 @@ var doc = `{
}
}
},
- "example.ExcelInfo": {
+ "github_com_flipped-aurora_gin-vue-admin_server_config.Email": {
"type": "object",
"properties": {
- "fileName": {
- "description": "文件名",
+ "from": {
+ "description": "收件人",
"type": "string"
},
- "infoList": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/system.SysBaseMenu"
- }
+ "host": {
+ "description": "服务器地址",
+ "type": "string"
+ },
+ "is-ssl": {
+ "description": "是否SSL",
+ "type": "boolean"
+ },
+ "nickname": {
+ "description": "昵称",
+ "type": "string"
+ },
+ "port": {
+ "description": "端口",
+ "type": "integer"
+ },
+ "secret": {
+ "description": "密钥",
+ "type": "string"
+ },
+ "to": {
+ "description": "收件人:多个以英文逗号分隔",
+ "type": "string"
}
}
},
@@ -5752,28 +5766,40 @@ var doc = `{
"type": "object",
"properties": {
"authorityId": {
- "type": "integer"
+ "type": "string",
+ "example": "int 角色id"
},
"authorityIds": {
- "type": "array",
- "items": {
- "type": "integer"
- }
+ "type": "string",
+ "example": "[]uint 角色id"
+ },
+ "email": {
+ "type": "string",
+ "example": "电子邮箱"
},
"enable": {
- "type": "integer"
+ "type": "string",
+ "example": "int 是否启用"
},
"headerImg": {
- "type": "string"
+ "type": "string",
+ "example": "头像链接"
},
"nickName": {
- "type": "string"
+ "type": "string",
+ "example": "昵称"
},
"passWord": {
- "type": "string"
+ "type": "string",
+ "example": "密码"
+ },
+ "phone": {
+ "type": "string",
+ "example": "电话号码"
},
"userName": {
- "type": "string"
+ "type": "string",
+ "example": "用户名"
}
}
},
@@ -5967,9 +5993,7 @@ var doc = `{
"response.PageResult": {
"type": "object",
"properties": {
- "list": {
- "type": "object"
- },
+ "list": {},
"page": {
"type": "integer"
},
@@ -5998,9 +6022,7 @@ var doc = `{
"code": {
"type": "integer"
},
- "data": {
- "type": "object"
- },
+ "data": {},
"msg": {
"type": "string"
}
@@ -6084,6 +6106,9 @@ var doc = `{
"captchaLength": {
"type": "integer"
},
+ "openCaptcha": {
+ "type": "boolean"
+ },
"picPath": {
"type": "string"
}
@@ -6135,6 +6160,10 @@ var doc = `{
"description": "是否自动移动文件",
"type": "boolean"
},
+ "businessDB": {
+ "description": "业务数据库",
+ "type": "string"
+ },
"description": {
"description": "Struct中文名称",
"type": "string"
@@ -6219,6 +6248,38 @@ var doc = `{
"require": {
"description": "是否必填",
"type": "boolean"
+ },
+ "sort": {
+ "description": "是否增加排序",
+ "type": "boolean"
+ }
+ }
+ },
+ "system.Meta": {
+ "type": "object",
+ "properties": {
+ "activeName": {
+ "type": "string"
+ },
+ "closeTab": {
+ "description": "自动关闭tab",
+ "type": "boolean"
+ },
+ "defaultMenu": {
+ "description": "是否是基础路由(开发中)",
+ "type": "boolean"
+ },
+ "icon": {
+ "description": "菜单图标",
+ "type": "string"
+ },
+ "keepAlive": {
+ "description": "是否缓存",
+ "type": "boolean"
+ },
+ "title": {
+ "description": "菜单名",
+ "type": "string"
}
}
},
@@ -6346,10 +6407,6 @@ var doc = `{
"$ref": "#/definitions/system.SysBaseMenu"
}
},
- "closeTab": {
- "description": "自动关闭tab",
- "type": "boolean"
- },
"component": {
"description": "对应前端文件路径",
"type": "string"
@@ -6358,32 +6415,28 @@ var doc = `{
"description": "创建时间",
"type": "string"
},
- "defaultMenu": {
- "description": "是否是基础路由(开发中)",
- "type": "boolean"
- },
"hidden": {
"description": "是否在列表隐藏",
"type": "boolean"
},
- "icon": {
- "description": "菜单图标",
- "type": "string"
- },
"id": {
"description": "主键ID",
"type": "integer"
},
- "keepAlive": {
- "description": "是否缓存",
- "type": "boolean"
- },
"menuBtn": {
"type": "array",
"items": {
"$ref": "#/definitions/system.SysBaseMenuBtn"
}
},
+ "meta": {
+ "description": "附加属性",
+ "allOf": [
+ {
+ "$ref": "#/definitions/system.Meta"
+ }
+ ]
+ },
"name": {
"description": "路由name",
"type": "string"
@@ -6406,10 +6459,6 @@ var doc = `{
"description": "排序标记",
"type": "integer"
},
- "title": {
- "description": "菜单名",
- "type": "string"
- },
"updatedAt": {
"description": "更新时间",
"type": "string"
@@ -6571,10 +6620,6 @@ var doc = `{
"$ref": "#/definitions/system.SysMenu"
}
},
- "closeTab": {
- "description": "自动关闭tab",
- "type": "boolean"
- },
"component": {
"description": "对应前端文件路径",
"type": "string"
@@ -6583,26 +6628,14 @@ var doc = `{
"description": "创建时间",
"type": "string"
},
- "defaultMenu": {
- "description": "是否是基础路由(开发中)",
- "type": "boolean"
- },
"hidden": {
"description": "是否在列表隐藏",
"type": "boolean"
},
- "icon": {
- "description": "菜单图标",
- "type": "string"
- },
"id": {
"description": "主键ID",
"type": "integer"
},
- "keepAlive": {
- "description": "是否缓存",
- "type": "boolean"
- },
"menuBtn": {
"type": "array",
"items": {
@@ -6612,6 +6645,14 @@ var doc = `{
"menuId": {
"type": "string"
},
+ "meta": {
+ "description": "附加属性",
+ "allOf": [
+ {
+ "$ref": "#/definitions/system.Meta"
+ }
+ ]
+ },
"name": {
"description": "路由name",
"type": "string"
@@ -6634,10 +6675,6 @@ var doc = `{
"description": "排序标记",
"type": "integer"
},
- "title": {
- "description": "菜单名",
- "type": "string"
- },
"updatedAt": {
"description": "更新时间",
"type": "string"
@@ -6792,49 +6829,20 @@ var doc = `{
}
}`
-type swaggerInfo struct {
- Version string
- Host string
- BasePath string
- Schemes []string
- Title string
- Description string
-}
-
// SwaggerInfo holds exported Swagger Info so clients can modify it
-var SwaggerInfo = swaggerInfo{
- Version: "0.0.1",
- Host: "",
- BasePath: "/",
- Schemes: []string{},
- Title: "Swagger Example API",
- Description: "This is a sample Server pets",
-}
-
-type s struct{}
-
-func (s *s) ReadDoc() string {
- sInfo := SwaggerInfo
- sInfo.Description = strings.Replace(sInfo.Description, "\n", "\\n", -1)
-
- t, err := template.New("swagger_info").Funcs(template.FuncMap{
- "marshal": func(v interface{}) string {
- a, _ := json.Marshal(v)
- return string(a)
- },
- }).Parse(doc)
- if err != nil {
- return doc
- }
-
- var tpl bytes.Buffer
- if err := t.Execute(&tpl, sInfo); err != nil {
- return doc
- }
-
- return tpl.String()
+var SwaggerInfo = &swag.Spec{
+ Version: "0.0.1",
+ Host: "",
+ BasePath: "",
+ Schemes: []string{},
+ Title: "Swagger Example API",
+ Description: "This is a sample Server pets",
+ InfoInstanceName: "swagger",
+ SwaggerTemplate: docTemplate,
+ LeftDelim: "{{",
+ RightDelim: "}}",
}
func init() {
- swag.Register(swag.Name, &s{})
+ swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
}
diff --git a/server/docs/swagger.json b/server/docs/swagger.json
index adaceb2ae..ae4c5d7b4 100644
--- a/server/docs/swagger.json
+++ b/server/docs/swagger.json
@@ -6,7 +6,6 @@
"contact": {},
"version": "0.0.1"
},
- "basePath": "/",
"paths": {
"/api/createApi": {
"post": {
@@ -1459,7 +1458,7 @@
"summary": "生成验证码",
"responses": {
"200": {
- "description": "生成验证码,返回包括随机数id,base64,验证码长度",
+ "description": "生成验证码,返回包括随机数id,base64,验证码长度,是否开启验证码",
"schema": {
"allOf": [
{
@@ -1981,161 +1980,6 @@
}
}
},
- "/excel/downloadTemplate": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "consumes": [
- "multipart/form-data"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "excel"
- ],
- "summary": "下载模板",
- "parameters": [
- {
- "type": "string",
- "description": "模板名称",
- "name": "fileName",
- "in": "query",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": ""
- }
- }
- }
- },
- "/excel/exportExcel": {
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/octet-stream"
- ],
- "tags": [
- "excel"
- ],
- "summary": "导出Excel",
- "parameters": [
- {
- "description": "导出Excel文件信息",
- "name": "data",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/example.ExcelInfo"
- }
- }
- ],
- "responses": {
- "200": {
- "description": ""
- }
- }
- }
- },
- "/excel/importExcel": {
- "post": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "consumes": [
- "multipart/form-data"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "excel"
- ],
- "summary": "导入Excel文件",
- "parameters": [
- {
- "type": "file",
- "description": "导入Excel文件",
- "name": "file",
- "in": "formData",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "导入Excel文件",
- "schema": {
- "allOf": [
- {
- "$ref": "#/definitions/response.Response"
- },
- {
- "type": "object",
- "properties": {
- "msg": {
- "type": "string"
- }
- }
- }
- ]
- }
- }
- }
- }
- },
- "/excel/loadExcel": {
- "get": {
- "security": [
- {
- "ApiKeyAuth": []
- }
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "excel"
- ],
- "summary": "加载Excel数据",
- "responses": {
- "200": {
- "description": "加载Excel数据,返回包括列表,总数,页码,每页数量",
- "schema": {
- "allOf": [
- {
- "$ref": "#/definitions/response.Response"
- },
- {
- "type": "object",
- "properties": {
- "data": {
- "$ref": "#/definitions/response.PageResult"
- },
- "msg": {
- "type": "string"
- }
- }
- }
- ]
- }
- }
- }
- }
- },
"/fileUploadAndDownload/breakpointContinue": {
"post": {
"security": [
@@ -4924,6 +4768,14 @@
"key-long": {
"description": "验证码长度",
"type": "integer"
+ },
+ "open-captcha": {
+ "description": "防爆破验证码开启此数,0代表每次登录都需要验证码,其他数字代表错误密码此数,如3代表错误三次后出现验证码",
+ "type": "integer"
+ },
+ "open-captcha-timeout": {
+ "description": "防爆破验证码超时时间,单位:s(秒)",
+ "type": "integer"
}
}
},
@@ -4944,39 +4796,6 @@
}
}
},
- "config.Email": {
- "type": "object",
- "properties": {
- "from": {
- "description": "收件人",
- "type": "string"
- },
- "host": {
- "description": "服务器地址",
- "type": "string"
- },
- "is-ssl": {
- "description": "是否SSL",
- "type": "boolean"
- },
- "nickname": {
- "description": "昵称",
- "type": "string"
- },
- "port": {
- "description": "端口",
- "type": "integer"
- },
- "secret": {
- "description": "密钥",
- "type": "string"
- },
- "to": {
- "description": "收件人:多个以英文逗号分隔",
- "type": "string"
- }
- }
- },
"config.Excel": {
"type": "object",
"properties": {
@@ -5039,7 +4858,7 @@
}
}
},
- "config.Mysql": {
+ "config.Mssql": {
"type": "object",
"properties": {
"config": {
@@ -5050,6 +4869,11 @@
"description": "数据库名",
"type": "string"
},
+ "engine": {
+ "description": "数据库引擎,默认InnoDB",
+ "type": "string",
+ "default": "InnoDB"
+ },
"log-mode": {
"description": "是否开启Gorm全局日志",
"type": "string"
@@ -5078,6 +4902,130 @@
"description": ":端口",
"type": "string"
},
+ "prefix": {
+ "description": "全局表前缀,单独定义TableName则不生效",
+ "type": "string"
+ },
+ "singular": {
+ "description": "是否开启全局禁用复数,true表示开启",
+ "type": "boolean"
+ },
+ "username": {
+ "description": "数据库用户名",
+ "type": "string"
+ }
+ }
+ },
+ "config.Mysql": {
+ "type": "object",
+ "properties": {
+ "config": {
+ "description": "高级配置",
+ "type": "string"
+ },
+ "db-name": {
+ "description": "数据库名",
+ "type": "string"
+ },
+ "engine": {
+ "description": "数据库引擎,默认InnoDB",
+ "type": "string",
+ "default": "InnoDB"
+ },
+ "log-mode": {
+ "description": "是否开启Gorm全局日志",
+ "type": "string"
+ },
+ "log-zap": {
+ "description": "是否通过zap写入日志文件",
+ "type": "boolean"
+ },
+ "max-idle-conns": {
+ "description": "空闲中的最大连接数",
+ "type": "integer"
+ },
+ "max-open-conns": {
+ "description": "打开到数据库的最大连接数",
+ "type": "integer"
+ },
+ "password": {
+ "description": "数据库密码",
+ "type": "string"
+ },
+ "path": {
+ "description": "服务器地址:端口",
+ "type": "string"
+ },
+ "port": {
+ "description": ":端口",
+ "type": "string"
+ },
+ "prefix": {
+ "description": "全局表前缀,单独定义TableName则不生效",
+ "type": "string"
+ },
+ "singular": {
+ "description": "是否开启全局禁用复数,true表示开启",
+ "type": "boolean"
+ },
+ "username": {
+ "description": "数据库用户名",
+ "type": "string"
+ }
+ }
+ },
+ "config.Oracle": {
+ "type": "object",
+ "properties": {
+ "config": {
+ "description": "高级配置",
+ "type": "string"
+ },
+ "db-name": {
+ "description": "数据库名",
+ "type": "string"
+ },
+ "engine": {
+ "description": "数据库引擎,默认InnoDB",
+ "type": "string",
+ "default": "InnoDB"
+ },
+ "log-mode": {
+ "description": "是否开启Gorm全局日志",
+ "type": "string"
+ },
+ "log-zap": {
+ "description": "是否通过zap写入日志文件",
+ "type": "boolean"
+ },
+ "max-idle-conns": {
+ "description": "空闲中的最大连接数",
+ "type": "integer"
+ },
+ "max-open-conns": {
+ "description": "打开到数据库的最大连接数",
+ "type": "integer"
+ },
+ "password": {
+ "description": "数据库密码",
+ "type": "string"
+ },
+ "path": {
+ "description": "服务器地址:端口",
+ "type": "string"
+ },
+ "port": {
+ "description": ":端口",
+ "type": "string"
+ },
+ "prefix": {
+ "description": "全局表前缀,单独定义TableName则不生效",
+ "type": "string"
+ },
+ "singular": {
+ "description": "是否开启全局禁用复数,true表示开启",
+ "type": "boolean"
+ },
"username": {
"description": "数据库用户名",
"type": "string"
@@ -5095,6 +5043,11 @@
"description": "数据库名",
"type": "string"
},
+ "engine": {
+ "description": "数据库引擎,默认InnoDB",
+ "type": "string",
+ "default": "InnoDB"
+ },
"log-mode": {
"description": "是否开启Gorm全局日志",
"type": "string"
@@ -5123,6 +5076,14 @@
"description": ":端口",
"type": "string"
},
+ "prefix": {
+ "description": "全局表前缀,单独定义TableName则不生效",
+ "type": "string"
+ },
+ "singular": {
+ "description": "是否开启全局禁用复数,true表示开启",
+ "type": "boolean"
+ },
"username": {
"description": "数据库用户名",
"type": "string"
@@ -5187,7 +5148,11 @@
},
"autocode": {
"description": "auto",
- "$ref": "#/definitions/config.Autocode"
+ "allOf": [
+ {
+ "$ref": "#/definitions/config.Autocode"
+ }
+ ]
},
"aws-s3": {
"$ref": "#/definitions/config.AwsS3"
@@ -5197,7 +5162,11 @@
},
"cors": {
"description": "跨域配置",
- "$ref": "#/definitions/config.CORS"
+ "allOf": [
+ {
+ "$ref": "#/definitions/config.CORS"
+ }
+ ]
},
"db-list": {
"type": "array",
@@ -5206,7 +5175,7 @@
}
},
"email": {
- "$ref": "#/definitions/config.Email"
+ "$ref": "#/definitions/github_com_flipped-aurora_gin-vue-admin_server_config.Email"
},
"excel": {
"$ref": "#/definitions/config.Excel"
@@ -5219,11 +5188,25 @@
},
"local": {
"description": "oss",
- "$ref": "#/definitions/config.Local"
+ "allOf": [
+ {
+ "$ref": "#/definitions/config.Local"
+ }
+ ]
+ },
+ "mssql": {
+ "$ref": "#/definitions/config.Mssql"
},
"mysql": {
"description": "gorm",
- "$ref": "#/definitions/config.Mysql"
+ "allOf": [
+ {
+ "$ref": "#/definitions/config.Mysql"
+ }
+ ]
+ },
+ "oracle": {
+ "$ref": "#/definitions/config.Oracle"
},
"pgsql": {
"$ref": "#/definitions/config.Pgsql"
@@ -5265,6 +5248,11 @@
"disable": {
"type": "boolean"
},
+ "engine": {
+ "description": "数据库引擎,默认InnoDB",
+ "type": "string",
+ "default": "InnoDB"
+ },
"log-mode": {
"description": "是否开启Gorm全局日志",
"type": "string"
@@ -5293,6 +5281,14 @@
"description": ":端口",
"type": "string"
},
+ "prefix": {
+ "description": "全局表前缀,单独定义TableName则不生效",
+ "type": "string"
+ },
+ "singular": {
+ "description": "是否开启全局禁用复数,true表示开启",
+ "type": "boolean"
+ },
"type": {
"type": "string"
},
@@ -5327,6 +5323,9 @@
"description": "Oss类型",
"type": "string"
},
+ "router-prefix": {
+ "type": "string"
+ },
"use-multipoint": {
"description": "多点登录拦截",
"type": "boolean"
@@ -5445,7 +5444,11 @@
},
"sysUser": {
"description": "管理详情",
- "$ref": "#/definitions/system.SysUser"
+ "allOf": [
+ {
+ "$ref": "#/definitions/system.SysUser"
+ }
+ ]
},
"sysUserAuthorityID": {
"description": "管理角色ID",
@@ -5558,18 +5561,36 @@
}
}
},
- "example.ExcelInfo": {
+ "github_com_flipped-aurora_gin-vue-admin_server_config.Email": {
"type": "object",
"properties": {
- "fileName": {
- "description": "文件名",
+ "from": {
+ "description": "收件人",
"type": "string"
},
- "infoList": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/system.SysBaseMenu"
- }
+ "host": {
+ "description": "服务器地址",
+ "type": "string"
+ },
+ "is-ssl": {
+ "description": "是否SSL",
+ "type": "boolean"
+ },
+ "nickname": {
+ "description": "昵称",
+ "type": "string"
+ },
+ "port": {
+ "description": "端口",
+ "type": "integer"
+ },
+ "secret": {
+ "description": "密钥",
+ "type": "string"
+ },
+ "to": {
+ "description": "收件人:多个以英文逗号分隔",
+ "type": "string"
}
}
},
@@ -5736,28 +5757,40 @@
"type": "object",
"properties": {
"authorityId": {
- "type": "integer"
+ "type": "string",
+ "example": "int 角色id"
},
"authorityIds": {
- "type": "array",
- "items": {
- "type": "integer"
- }
+ "type": "string",
+ "example": "[]uint 角色id"
+ },
+ "email": {
+ "type": "string",
+ "example": "电子邮箱"
},
"enable": {
- "type": "integer"
+ "type": "string",
+ "example": "int 是否启用"
},
"headerImg": {
- "type": "string"
+ "type": "string",
+ "example": "头像链接"
},
"nickName": {
- "type": "string"
+ "type": "string",
+ "example": "昵称"
},
"passWord": {
- "type": "string"
+ "type": "string",
+ "example": "密码"
+ },
+ "phone": {
+ "type": "string",
+ "example": "电话号码"
},
"userName": {
- "type": "string"
+ "type": "string",
+ "example": "用户名"
}
}
},
@@ -5951,9 +5984,7 @@
"response.PageResult": {
"type": "object",
"properties": {
- "list": {
- "type": "object"
- },
+ "list": {},
"page": {
"type": "integer"
},
@@ -5982,9 +6013,7 @@
"code": {
"type": "integer"
},
- "data": {
- "type": "object"
- },
+ "data": {},
"msg": {
"type": "string"
}
@@ -6068,6 +6097,9 @@
"captchaLength": {
"type": "integer"
},
+ "openCaptcha": {
+ "type": "boolean"
+ },
"picPath": {
"type": "string"
}
@@ -6119,6 +6151,10 @@
"description": "是否自动移动文件",
"type": "boolean"
},
+ "businessDB": {
+ "description": "业务数据库",
+ "type": "string"
+ },
"description": {
"description": "Struct中文名称",
"type": "string"
@@ -6203,6 +6239,38 @@
"require": {
"description": "是否必填",
"type": "boolean"
+ },
+ "sort": {
+ "description": "是否增加排序",
+ "type": "boolean"
+ }
+ }
+ },
+ "system.Meta": {
+ "type": "object",
+ "properties": {
+ "activeName": {
+ "type": "string"
+ },
+ "closeTab": {
+ "description": "自动关闭tab",
+ "type": "boolean"
+ },
+ "defaultMenu": {
+ "description": "是否是基础路由(开发中)",
+ "type": "boolean"
+ },
+ "icon": {
+ "description": "菜单图标",
+ "type": "string"
+ },
+ "keepAlive": {
+ "description": "是否缓存",
+ "type": "boolean"
+ },
+ "title": {
+ "description": "菜单名",
+ "type": "string"
}
}
},
@@ -6330,10 +6398,6 @@
"$ref": "#/definitions/system.SysBaseMenu"
}
},
- "closeTab": {
- "description": "自动关闭tab",
- "type": "boolean"
- },
"component": {
"description": "对应前端文件路径",
"type": "string"
@@ -6342,32 +6406,28 @@
"description": "创建时间",
"type": "string"
},
- "defaultMenu": {
- "description": "是否是基础路由(开发中)",
- "type": "boolean"
- },
"hidden": {
"description": "是否在列表隐藏",
"type": "boolean"
},
- "icon": {
- "description": "菜单图标",
- "type": "string"
- },
"id": {
"description": "主键ID",
"type": "integer"
},
- "keepAlive": {
- "description": "是否缓存",
- "type": "boolean"
- },
"menuBtn": {
"type": "array",
"items": {
"$ref": "#/definitions/system.SysBaseMenuBtn"
}
},
+ "meta": {
+ "description": "附加属性",
+ "allOf": [
+ {
+ "$ref": "#/definitions/system.Meta"
+ }
+ ]
+ },
"name": {
"description": "路由name",
"type": "string"
@@ -6390,10 +6450,6 @@
"description": "排序标记",
"type": "integer"
},
- "title": {
- "description": "菜单名",
- "type": "string"
- },
"updatedAt": {
"description": "更新时间",
"type": "string"
@@ -6555,10 +6611,6 @@
"$ref": "#/definitions/system.SysMenu"
}
},
- "closeTab": {
- "description": "自动关闭tab",
- "type": "boolean"
- },
"component": {
"description": "对应前端文件路径",
"type": "string"
@@ -6567,26 +6619,14 @@
"description": "创建时间",
"type": "string"
},
- "defaultMenu": {
- "description": "是否是基础路由(开发中)",
- "type": "boolean"
- },
"hidden": {
"description": "是否在列表隐藏",
"type": "boolean"
},
- "icon": {
- "description": "菜单图标",
- "type": "string"
- },
"id": {
"description": "主键ID",
"type": "integer"
},
- "keepAlive": {
- "description": "是否缓存",
- "type": "boolean"
- },
"menuBtn": {
"type": "array",
"items": {
@@ -6596,6 +6636,14 @@
"menuId": {
"type": "string"
},
+ "meta": {
+ "description": "附加属性",
+ "allOf": [
+ {
+ "$ref": "#/definitions/system.Meta"
+ }
+ ]
+ },
"name": {
"description": "路由name",
"type": "string"
@@ -6618,10 +6666,6 @@
"description": "排序标记",
"type": "integer"
},
- "title": {
- "description": "菜单名",
- "type": "string"
- },
"updatedAt": {
"description": "更新时间",
"type": "string"
diff --git a/server/docs/swagger.yaml b/server/docs/swagger.yaml
index 0079f7171..c1b8fb142 100644
--- a/server/docs/swagger.yaml
+++ b/server/docs/swagger.yaml
@@ -1,4 +1,3 @@
-basePath: /
definitions:
config.AliyunOSS:
properties:
@@ -100,6 +99,12 @@ definitions:
key-long:
description: 验证码长度
type: integer
+ open-captcha:
+ description: 防爆破验证码开启此数,0代表每次登录都需要验证码,其他数字代表错误密码此数,如3代表错误三次后出现验证码
+ type: integer
+ open-captcha-timeout:
+ description: 防爆破验证码超时时间,单位:s(秒)
+ type: integer
type: object
config.Detail:
properties:
@@ -113,30 +118,6 @@ definitions:
description: 需要清理的表名
type: string
type: object
- config.Email:
- properties:
- from:
- description: 收件人
- type: string
- host:
- description: 服务器地址
- type: string
- is-ssl:
- description: 是否SSL
- type: boolean
- nickname:
- description: 昵称
- type: string
- port:
- description: 端口
- type: integer
- secret:
- description: 密钥
- type: string
- to:
- description: 收件人:多个以英文逗号分隔
- type: string
- type: object
config.Excel:
properties:
dir:
@@ -179,7 +160,7 @@ definitions:
description: 本地文件存储路径
type: string
type: object
- config.Mysql:
+ config.Mssql:
properties:
config:
description: 高级配置
@@ -187,6 +168,10 @@ definitions:
db-name:
description: 数据库名
type: string
+ engine:
+ default: InnoDB
+ description: 数据库引擎,默认InnoDB
+ type: string
log-mode:
description: 是否开启Gorm全局日志
type: string
@@ -208,6 +193,98 @@ definitions:
port:
description: :端口
type: string
+ prefix:
+ description: 全局表前缀,单独定义TableName则不生效
+ type: string
+ singular:
+ description: 是否开启全局禁用复数,true表示开启
+ type: boolean
+ username:
+ description: 数据库用户名
+ type: string
+ type: object
+ config.Mysql:
+ properties:
+ config:
+ description: 高级配置
+ type: string
+ db-name:
+ description: 数据库名
+ type: string
+ engine:
+ default: InnoDB
+ description: 数据库引擎,默认InnoDB
+ type: string
+ log-mode:
+ description: 是否开启Gorm全局日志
+ type: string
+ log-zap:
+ description: 是否通过zap写入日志文件
+ type: boolean
+ max-idle-conns:
+ description: 空闲中的最大连接数
+ type: integer
+ max-open-conns:
+ description: 打开到数据库的最大连接数
+ type: integer
+ password:
+ description: 数据库密码
+ type: string
+ path:
+ description: 服务器地址:端口
+ type: string
+ port:
+ description: :端口
+ type: string
+ prefix:
+ description: 全局表前缀,单独定义TableName则不生效
+ type: string
+ singular:
+ description: 是否开启全局禁用复数,true表示开启
+ type: boolean
+ username:
+ description: 数据库用户名
+ type: string
+ type: object
+ config.Oracle:
+ properties:
+ config:
+ description: 高级配置
+ type: string
+ db-name:
+ description: 数据库名
+ type: string
+ engine:
+ default: InnoDB
+ description: 数据库引擎,默认InnoDB
+ type: string
+ log-mode:
+ description: 是否开启Gorm全局日志
+ type: string
+ log-zap:
+ description: 是否通过zap写入日志文件
+ type: boolean
+ max-idle-conns:
+ description: 空闲中的最大连接数
+ type: integer
+ max-open-conns:
+ description: 打开到数据库的最大连接数
+ type: integer
+ password:
+ description: 数据库密码
+ type: string
+ path:
+ description: 服务器地址:端口
+ type: string
+ port:
+ description: :端口
+ type: string
+ prefix:
+ description: 全局表前缀,单独定义TableName则不生效
+ type: string
+ singular:
+ description: 是否开启全局禁用复数,true表示开启
+ type: boolean
username:
description: 数据库用户名
type: string
@@ -220,6 +297,10 @@ definitions:
db-name:
description: 数据库名
type: string
+ engine:
+ default: InnoDB
+ description: 数据库引擎,默认InnoDB
+ type: string
log-mode:
description: 是否开启Gorm全局日志
type: string
@@ -241,6 +322,12 @@ definitions:
port:
description: :端口
type: string
+ prefix:
+ description: 全局表前缀,单独定义TableName则不生效
+ type: string
+ singular:
+ description: 是否开启全局禁用复数,true表示开启
+ type: boolean
username:
description: 数据库用户名
type: string
@@ -286,21 +373,23 @@ definitions:
aliyun-oss:
$ref: '#/definitions/config.AliyunOSS'
autocode:
- $ref: '#/definitions/config.Autocode'
+ allOf:
+ - $ref: '#/definitions/config.Autocode'
description: auto
aws-s3:
$ref: '#/definitions/config.AwsS3'
captcha:
$ref: '#/definitions/config.Captcha'
cors:
- $ref: '#/definitions/config.CORS'
+ allOf:
+ - $ref: '#/definitions/config.CORS'
description: 跨域配置
db-list:
items:
$ref: '#/definitions/config.SpecializedDB'
type: array
email:
- $ref: '#/definitions/config.Email'
+ $ref: '#/definitions/github_com_flipped-aurora_gin-vue-admin_server_config.Email'
excel:
$ref: '#/definitions/config.Excel'
hua-wei-obs:
@@ -308,11 +397,17 @@ definitions:
jwt:
$ref: '#/definitions/config.JWT'
local:
- $ref: '#/definitions/config.Local'
+ allOf:
+ - $ref: '#/definitions/config.Local'
description: oss
+ mssql:
+ $ref: '#/definitions/config.Mssql'
mysql:
- $ref: '#/definitions/config.Mysql'
+ allOf:
+ - $ref: '#/definitions/config.Mysql'
description: gorm
+ oracle:
+ $ref: '#/definitions/config.Oracle'
pgsql:
$ref: '#/definitions/config.Pgsql'
qiniu:
@@ -340,6 +435,10 @@ definitions:
type: string
disable:
type: boolean
+ engine:
+ default: InnoDB
+ description: 数据库引擎,默认InnoDB
+ type: string
log-mode:
description: 是否开启Gorm全局日志
type: string
@@ -361,6 +460,12 @@ definitions:
port:
description: :端口
type: string
+ prefix:
+ description: 全局表前缀,单独定义TableName则不生效
+ type: string
+ singular:
+ description: 是否开启全局禁用复数,true表示开启
+ type: boolean
type:
type: string
username:
@@ -385,6 +490,8 @@ definitions:
oss-type:
description: Oss类型
type: string
+ router-prefix:
+ type: string
use-multipoint:
description: 多点登录拦截
type: boolean
@@ -468,7 +575,8 @@ definitions:
description: 主键ID
type: integer
sysUser:
- $ref: '#/definitions/system.SysUser'
+ allOf:
+ - $ref: '#/definitions/system.SysUser'
description: 管理详情
sysUserAuthorityID:
description: 管理角色ID
@@ -548,15 +656,29 @@ definitions:
description: 文件地址
type: string
type: object
- example.ExcelInfo:
+ github_com_flipped-aurora_gin-vue-admin_server_config.Email:
properties:
- fileName:
- description: 文件名
+ from:
+ description: 收件人
+ type: string
+ host:
+ description: 服务器地址
+ type: string
+ is-ssl:
+ description: 是否SSL
+ type: boolean
+ nickname:
+ description: 昵称
+ type: string
+ port:
+ description: 端口
+ type: integer
+ secret:
+ description: 密钥
+ type: string
+ to:
+ description: 收件人:多个以英文逗号分隔
type: string
- infoList:
- items:
- $ref: '#/definitions/system.SysBaseMenu'
- type: array
type: object
request.AddMenuAuthorityInfo:
properties:
@@ -671,20 +793,31 @@ definitions:
request.Register:
properties:
authorityId:
- type: integer
+ example: int 角色id
+ type: string
authorityIds:
- items:
- type: integer
- type: array
+ example: '[]uint 角色id'
+ type: string
+ email:
+ example: 电子邮箱
+ type: string
enable:
- type: integer
+ example: int 是否启用
+ type: string
headerImg:
+ example: 头像链接
type: string
nickName:
+ example: 昵称
type: string
passWord:
+ example: 密码
+ type: string
+ phone:
+ example: 电话号码
type: string
userName:
+ example: 用户名
type: string
type: object
request.RollBack:
@@ -817,8 +950,7 @@ definitions:
type: object
response.PageResult:
properties:
- list:
- type: object
+ list: {}
page:
type: integer
pageSize:
@@ -837,8 +969,7 @@ definitions:
properties:
code:
type: integer
- data:
- type: object
+ data: {}
msg:
type: string
type: object
@@ -892,6 +1023,8 @@ definitions:
type: string
captchaLength:
type: integer
+ openCaptcha:
+ type: boolean
picPath:
type: string
type: object
@@ -926,6 +1059,9 @@ definitions:
autoMoveFile:
description: 是否自动移动文件
type: boolean
+ businessDB:
+ description: 业务数据库
+ type: string
description:
description: Struct中文名称
type: string
@@ -988,6 +1124,29 @@ definitions:
require:
description: 是否必填
type: boolean
+ sort:
+ description: 是否增加排序
+ type: boolean
+ type: object
+ system.Meta:
+ properties:
+ activeName:
+ type: string
+ closeTab:
+ description: 自动关闭tab
+ type: boolean
+ defaultMenu:
+ description: 是否是基础路由(开发中)
+ type: boolean
+ icon:
+ description: 菜单图标
+ type: string
+ keepAlive:
+ description: 是否缓存
+ type: boolean
+ title:
+ description: 菜单名
+ type: string
type: object
system.SysApi:
properties:
@@ -1076,34 +1235,26 @@ definitions:
items:
$ref: '#/definitions/system.SysBaseMenu'
type: array
- closeTab:
- description: 自动关闭tab
- type: boolean
component:
description: 对应前端文件路径
type: string
createdAt:
description: 创建时间
type: string
- defaultMenu:
- description: 是否是基础路由(开发中)
- type: boolean
hidden:
description: 是否在列表隐藏
type: boolean
- icon:
- description: 菜单图标
- type: string
id:
description: 主键ID
type: integer
- keepAlive:
- description: 是否缓存
- type: boolean
menuBtn:
items:
$ref: '#/definitions/system.SysBaseMenuBtn'
type: array
+ meta:
+ allOf:
+ - $ref: '#/definitions/system.Meta'
+ description: 附加属性
name:
description: 路由name
type: string
@@ -1120,9 +1271,6 @@ definitions:
sort:
description: 排序标记
type: integer
- title:
- description: 菜单名
- type: string
updatedAt:
description: 更新时间
type: string
@@ -1237,36 +1385,28 @@ definitions:
items:
$ref: '#/definitions/system.SysMenu'
type: array
- closeTab:
- description: 自动关闭tab
- type: boolean
component:
description: 对应前端文件路径
type: string
createdAt:
description: 创建时间
type: string
- defaultMenu:
- description: 是否是基础路由(开发中)
- type: boolean
hidden:
description: 是否在列表隐藏
type: boolean
- icon:
- description: 菜单图标
- type: string
id:
description: 主键ID
type: integer
- keepAlive:
- description: 是否缓存
- type: boolean
menuBtn:
items:
$ref: '#/definitions/system.SysBaseMenuBtn'
type: array
menuId:
type: string
+ meta:
+ allOf:
+ - $ref: '#/definitions/system.Meta'
+ description: 附加属性
name:
description: 路由name
type: string
@@ -1283,9 +1423,6 @@ definitions:
sort:
description: 排序标记
type: integer
- title:
- description: 菜单名
- type: string
updatedAt:
description: 更新时间
type: string
@@ -2212,7 +2349,7 @@ paths:
- application/json
responses:
"200":
- description: 生成验证码,返回包括随机数id,base64,验证码长度
+ description: 生成验证码,返回包括随机数id,base64,验证码长度,是否开启验证码
schema:
allOf:
- $ref: '#/definitions/response.Response'
@@ -2515,95 +2652,6 @@ paths:
summary: 发送邮件
tags:
- System
- /excel/downloadTemplate:
- get:
- consumes:
- - multipart/form-data
- parameters:
- - description: 模板名称
- in: query
- name: fileName
- required: true
- type: string
- produces:
- - application/json
- responses:
- "200":
- description: ""
- security:
- - ApiKeyAuth: []
- summary: 下载模板
- tags:
- - excel
- /excel/exportExcel:
- post:
- consumes:
- - application/json
- parameters:
- - description: 导出Excel文件信息
- in: body
- name: data
- required: true
- schema:
- $ref: '#/definitions/example.ExcelInfo'
- produces:
- - application/octet-stream
- responses:
- "200":
- description: ""
- security:
- - ApiKeyAuth: []
- summary: 导出Excel
- tags:
- - excel
- /excel/importExcel:
- post:
- consumes:
- - multipart/form-data
- parameters:
- - description: 导入Excel文件
- in: formData
- name: file
- required: true
- type: file
- produces:
- - application/json
- responses:
- "200":
- description: 导入Excel文件
- schema:
- allOf:
- - $ref: '#/definitions/response.Response'
- - properties:
- msg:
- type: string
- type: object
- security:
- - ApiKeyAuth: []
- summary: 导入Excel文件
- tags:
- - excel
- /excel/loadExcel:
- get:
- produces:
- - application/json
- responses:
- "200":
- description: 加载Excel数据,返回包括列表,总数,页码,每页数量
- schema:
- allOf:
- - $ref: '#/definitions/response.Response'
- - properties:
- data:
- $ref: '#/definitions/response.PageResult'
- msg:
- type: string
- type: object
- security:
- - ApiKeyAuth: []
- summary: 加载Excel数据
- tags:
- - excel
/fileUploadAndDownload/breakpointContinue:
post:
consumes:
diff --git a/server/go.mod b/server/go.mod
index 3562ce54d..6af46db46 100644
--- a/server/go.mod
+++ b/server/go.mod
@@ -3,18 +3,18 @@ module github.com/flipped-aurora/gin-vue-admin/server
go 1.18
require (
- github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
- github.com/aliyun/aliyun-oss-go-sdk v2.2.4+incompatible
- github.com/aws/aws-sdk-go v1.44.24
- github.com/casbin/casbin/v2 v2.66.0
+ github.com/aliyun/aliyun-oss-go-sdk v2.1.6+incompatible
+ github.com/aws/aws-sdk-go v1.42.27
+ github.com/casbin/casbin/v2 v2.68.0
github.com/casbin/gorm-adapter/v3 v3.7.3
github.com/flipped-aurora/ws v1.0.2
- github.com/fsnotify/fsnotify v1.5.1
+ github.com/fsnotify/fsnotify v1.4.9
github.com/fvbock/endless v0.0.0-20170109170031-447134032cb6
- github.com/gin-gonic/gin v1.7.7
- github.com/go-redis/redis/v8 v8.11.5
+ github.com/gin-gonic/gin v1.9.0
+ github.com/go-redis/redis/v8 v8.11.4
github.com/go-sql-driver/mysql v1.6.0
- github.com/golang-jwt/jwt/v4 v4.4.1
+ github.com/gofrs/uuid v4.0.0+incompatible
+ github.com/golang-jwt/jwt/v4 v4.3.0
github.com/gookit/color v1.3.1
github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.8+incompatible
github.com/jordan-wright/email v0.0.0-20200824153738-3f5bafa1cd84
@@ -26,20 +26,18 @@ require (
github.com/qiniu/api.v7/v7 v7.4.1
github.com/robfig/cron/v3 v3.0.1
github.com/sashabaranov/go-openai v1.5.7
- github.com/satori/go.uuid v1.2.0
github.com/shirou/gopsutil/v3 v3.22.5
github.com/songzhibin97/gkit v1.2.7
github.com/spf13/viper v1.7.0
- github.com/stretchr/testify v1.7.1
- github.com/swaggo/gin-swagger v1.4.1
- github.com/swaggo/swag v1.7.9
+ github.com/stretchr/testify v1.8.1
+ github.com/swaggo/gin-swagger v1.3.0
+ github.com/swaggo/swag v1.16.1
github.com/tencentyun/cos-go-sdk-v5 v0.7.19
github.com/unrolled/secure v1.0.7
go.uber.org/zap v1.16.0
- golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4
- golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
- golang.org/x/text v0.3.7
- gopkg.in/ini.v1 v1.55.0 // indirect
+ golang.org/x/crypto v0.5.0
+ golang.org/x/sync v0.2.0
+ golang.org/x/text v0.9.0
gorm.io/driver/mysql v1.3.3
gorm.io/driver/postgres v1.3.4
gorm.io/driver/sqlserver v1.3.2
@@ -48,11 +46,13 @@ require (
)
require (
+ github.com/BurntSushi/toml v1.2.1 // indirect
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect
github.com/KyleBanks/depth v1.2.1 // indirect
- github.com/PuerkitoBio/purell v1.1.1 // indirect
- github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
+ github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
+ github.com/bytedance/sonic v1.8.0 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
+ github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/denisenkom/go-mssqldb v0.12.0 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
@@ -60,17 +60,17 @@ require (
github.com/glebarez/go-sqlite v1.16.0 // indirect
github.com/glebarez/sqlite v1.4.3 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
- github.com/go-openapi/jsonpointer v0.19.5 // indirect
- github.com/go-openapi/jsonreference v0.19.6 // indirect
- github.com/go-openapi/spec v0.20.4 // indirect
- github.com/go-openapi/swag v0.19.15 // indirect
- github.com/go-playground/locales v0.14.0 // indirect
- github.com/go-playground/universal-translator v0.18.0 // indirect
- github.com/go-playground/validator/v10 v10.10.0 // indirect
+ github.com/go-openapi/jsonpointer v0.19.6 // indirect
+ github.com/go-openapi/jsonreference v0.20.2 // indirect
+ github.com/go-openapi/spec v0.20.9 // indirect
+ github.com/go-openapi/swag v0.22.3 // indirect
+ github.com/go-playground/locales v0.14.1 // indirect
+ github.com/go-playground/universal-translator v0.18.1 // indirect
+ github.com/go-playground/validator/v10 v10.11.2 // indirect
+ github.com/goccy/go-json v0.10.0 // indirect
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188 // indirect
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
- github.com/golang/protobuf v1.5.2 // indirect
github.com/google/go-querystring v1.0.0 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
@@ -88,17 +88,19 @@ require (
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.13.6 // indirect
+ github.com/klauspost/cpuid/v2 v2.0.9 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/lestrrat-go/strftime v1.0.6 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/magiconair/properties v1.8.1 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
- github.com/mattn/go-isatty v0.0.14 // indirect
+ github.com/mattn/go-isatty v0.0.17 // indirect
github.com/mitchellh/mapstructure v1.2.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mozillazg/go-httpheader v0.2.1 // indirect
github.com/pelletier/go-toml v1.6.0 // indirect
+ github.com/pelletier/go-toml/v2 v2.0.6 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
@@ -109,24 +111,26 @@ require (
github.com/subosito/gotenv v1.2.0 // indirect
github.com/tklauser/go-sysconf v0.3.10 // indirect
github.com/tklauser/numcpus v0.4.0 // indirect
- github.com/ugorji/go/codec v1.2.6 // indirect
+ github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
+ github.com/ugorji/go/codec v1.2.9 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
go.uber.org/atomic v1.6.0 // indirect
go.uber.org/multierr v1.5.0 // indirect
+ golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb // indirect
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
- golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect
- golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect
+ golang.org/x/net v0.10.0 // indirect
+ golang.org/x/sys v0.8.0 // indirect
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect
- golang.org/x/tools v0.1.7 // indirect
- google.golang.org/protobuf v1.27.1 // indirect
+ golang.org/x/tools v0.9.1 // indirect
+ google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/ini.v1 v1.55.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
- gopkg.in/yaml.v3 v3.0.0 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/plugin/dbresolver v1.1.0 // indirect
modernc.org/libc v1.15.1 // indirect
modernc.org/mathutil v1.4.1 // indirect
- modernc.org/memory v1.0.7 // indirect; indirec
+ modernc.org/memory v1.0.7 // indirect
modernc.org/sqlite v1.16.0 // indirect
)
diff --git a/server/go.sum b/server/go.sum
index 30e5f6a60..cc9ae4dd2 100644
--- a/server/go.sum
+++ b/server/go.sum
@@ -15,8 +15,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbL
github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0=
github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU=
-github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
+github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
+github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
@@ -25,38 +25,40 @@ github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6Xge
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
-github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
-github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
+github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/QcloudApi/qcloud_sign_golang v0.0.0-20141224014652-e4130a326409/go.mod h1:1pk82RBxDY/JZnPQrtqHlUFfCctgdorsd9M06fMynOM=
-github.com/agiledragon/gomonkey/v2 v2.3.1 h1:k+UnUY0EMNYUFUAQVETGY9uUTxjMdnUkP0ARyJS1zzs=
-github.com/agiledragon/gomonkey/v2 v2.3.1/go.mod h1:ap1AmDzcVOAz1YpeJ3TCzIgstoaWLA6jbbgxfB4w2iY=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/aliyun/aliyun-oss-go-sdk v2.2.4+incompatible h1:cD1bK/FmYTpL+r5i9lQ9EU6ScAjA173EVsii7gAc6SQ=
-github.com/aliyun/aliyun-oss-go-sdk v2.2.4+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
+github.com/aliyun/aliyun-oss-go-sdk v2.1.6+incompatible h1:Ft+KeWIJxFP76LqgJbvtOA1qBIoC8vGkTV3QeCOeJC4=
+github.com/aliyun/aliyun-oss-go-sdk v2.1.6+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
-github.com/aws/aws-sdk-go v1.44.24 h1:3nOkwJBJLiGBmJKWp3z0utyXuBkxyGkRRwWjrTItJaY=
-github.com/aws/aws-sdk-go v1.44.24/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
+github.com/aws/aws-sdk-go v1.42.27 h1:kxsBXQg3ee6LLbqjp5/oUeDgG7TENFrWYDmEVnd7spU=
+github.com/aws/aws-sdk-go v1.42.27/go.mod h1:OGr6lGMAKGlG9CVrYnWYDKIyb829c6EVBRjxqjmPepc=
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f h1:ZNv7On9kyUzm7fvRZumSyy/IUiSC7AzL0I1jKKtwooA=
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
+github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
+github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA=
+github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
github.com/casbin/casbin/v2 v2.37.4/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
-github.com/casbin/casbin/v2 v2.51.0 h1:BC41imD9Z2coIJpELapy2h5kMT+lB4vFDTYpMhTsU4A=
-github.com/casbin/casbin/v2 v2.51.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
+github.com/casbin/casbin/v2 v2.68.0 h1:7L4kwNJJw/pzdSEhl4SkeHz+1JzYn8guO+Q422sxzLM=
+github.com/casbin/casbin/v2 v2.68.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
github.com/casbin/gorm-adapter/v3 v3.7.3 h1:tp3EL3vS31dF+GX0n3QwUytQlrFOPXtOKKZ7SZtLOA8=
github.com/casbin/gorm-adapter/v3 v3.7.3/go.mod h1:7mwHmC2phiw6N4gDWlzi+c4DUX7zaVmQC/hINsRgBDg=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
+github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
+github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I=
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
@@ -68,7 +70,6 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -86,18 +87,22 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv
github.com/flipped-aurora/ws v1.0.2 h1:oEUz7sgrbPENvgli7Q4QpC0NIEbJucgR4yjcDMg/AjY=
github.com/flipped-aurora/ws v1.0.2/go.mod h1:RdyM2Fnvxx7f7A6WSmU1aAhDrQIAVW7LS/0LsAUE5mE=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
-github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
+github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fvbock/endless v0.0.0-20170109170031-447134032cb6 h1:6VSn3hB5U5GeA6kQw4TwWIWbOhtvR2hmbBJnTOtqTWc=
github.com/fvbock/endless v0.0.0-20170109170031-447134032cb6/go.mod h1:YxOVT5+yHzKvwhsiSIWmbAYM3Dr9AEEbER2dVayfBkg=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/gin-contrib/gzip v0.0.3 h1:etUaeesHhEORpZMp18zoOhepboiWnFtXrBZxszWUn4k=
-github.com/gin-contrib/gzip v0.0.3/go.mod h1:YxxswVZIqOvcHEQpsSn+QF5guQtO1dCfy0shBPy4jFc=
+github.com/gin-contrib/gzip v0.0.1 h1:ezvKOL6jH+jlzdHNE4h9h8q8uMpDQjyl0NN0Jd7jozc=
+github.com/gin-contrib/gzip v0.0.1/go.mod h1:fGBJBCdt6qCZuCAOwWuFhBB4OOq9EFqlo5dEaFhhu5w=
+github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
+github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
+github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y=
+github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
-github.com/gin-gonic/gin v1.7.7 h1:3DoBmSbJbZAWqXJC3SLjAPfutPJJRN1U5pALB7EeTTs=
-github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U=
+github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8=
+github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k=
github.com/glebarez/go-sqlite v1.16.0 h1:h28rHued+hGof3fNLksBcLwz/a71fiGZ/eIJHK0SsLI=
github.com/glebarez/go-sqlite v1.16.0/go.mod h1:i8/JtqoqzBAFkrUTxbQFkQ05odCOds3j7NlDaXjqiPY=
github.com/glebarez/sqlite v1.4.3 h1:ZABNo+2YIau8F8sZ7Qh/1h/ZnlSUMHFGD4zJKPval7A=
@@ -110,46 +115,56 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs=
-github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns=
-github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M=
-github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I=
+github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
+github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
+github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
+github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
+github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo=
+github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
+github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
+github.com/go-openapi/spec v0.19.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
+github.com/go-openapi/spec v0.20.9 h1:xnlYNQAwKd2VQRRfwTEI0DcK+2cbuvI/0c7jx3gA8/8=
+github.com/go-openapi/spec v0.20.9/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA=
+github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM=
github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
+github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g=
+github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
+github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
-github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
-github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
+github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
+github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
-github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
-github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
+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.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
-github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
-github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0=
-github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
-github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
-github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
+github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU=
+github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s=
+github.com/go-redis/redis/v8 v8.11.4 h1:kHoYkfZP6+pe04aFTnhDH6GDROa5yJdHJVNxV3F46Tg=
+github.com/go-redis/redis/v8 v8.11.4/go.mod h1:2Z2wHZXdQpCDXEGzqMockDpNyYvi2l4Pxt6RJr792+w=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0=
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8=
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo=
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
+github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=
+github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
-github.com/golang-jwt/jwt/v4 v4.4.1 h1:pC5DB52sCeK48Wlb9oPcdhnjkz1TKt1D/P7WKJ0kUcQ=
-github.com/golang-jwt/jwt/v4 v4.4.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
+github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog=
+github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
@@ -169,6 +184,12 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
@@ -176,6 +197,7 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
@@ -225,6 +247,7 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.8+incompatible h1:3kDd8PIWAdU+qGs/+0QUgsMI2ZSiJPt45Xn0su+x/Q0=
github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.8+incompatible/go.mod h1:l7VUhRbTKCzdOacdT4oWCwATKyvZqUOlOqr0Ous3k4s=
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
@@ -290,6 +313,7 @@ github.com/jordan-wright/email v0.0.0-20200824153738-3f5bafa1cd84 h1:pS0A6cr4aHY
github.com/jordan-wright/email v0.0.0-20200824153738-3f5bafa1cd84/go.mod h1:1c7szIrayyPPB/987hsnvNzLushdWf4o/79s3P08L8A=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
+github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -304,13 +328,14 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o
github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
+github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
+github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
-github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
@@ -334,6 +359,7 @@ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
@@ -343,11 +369,14 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
+github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
@@ -373,13 +402,19 @@ github.com/mojocn/base64Captcha v1.3.1/go.mod h1:wAQCKEc5bDujxKRmbT6/vTnTt5CjStQ
github.com/mozillazg/go-httpheader v0.2.1 h1:geV7TrjbL8KXSyvghnFm+NyTux/hxwueTSrwhe88TQQ=
github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/nicksnyder/go-i18n/v2 v2.2.0 h1:MNXbyPvd141JJqlU6gJKrczThxJy+kdCNivxZpBQFkw=
-github.com/nicksnyder/go-i18n/v2 v2.2.0/go.mod h1:4OtLfzqyAxsscyCb//3gfqSvBc81gImX91LrZzczN1o=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
+github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
-github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
+github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
+github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
+github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c=
+github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
github.com/otiai10/copy v1.7.0 h1:hVoPiN+t+7d2nzzwMiDHPSOogsWAStewq3TwU05+clE=
github.com/otiai10/copy v1.7.0/go.mod h1:rmRl6QPdJj6EiUqXQ/4Nn2lLXoNQjFCQbbNrxgc/t3U=
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
@@ -391,8 +426,9 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml v1.6.0 h1:aetoXYr0Tv7xRU/V4B4IZJ2QcbtMUFoNb3ORp7TzIK4=
github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys=
+github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU=
+github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=
-github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -419,13 +455,10 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
-github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
-github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sashabaranov/go-openai v1.5.7 h1:8DGgRG+P7yWixte5j720y6yiXgY3Hlgcd0gcpHdltfo=
github.com/sashabaranov/go-openai v1.5.7/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
@@ -437,7 +470,6 @@ github.com/shirou/gopsutil/v3 v3.22.5/go.mod h1:so9G9VzeHt/hsd0YwqprnjHnfARAUkta
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
-github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
@@ -466,21 +498,26 @@ github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5q
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
-github.com/swaggo/files v0.0.0-20210815190702-a29dd2bc99b2/go.mod h1:lKJPbtWzJ9JhsTN1k1gZgleJWY/cqq0psdoMmaThG3w=
-github.com/swaggo/gin-swagger v1.4.1 h1:F2vJndw+Q+ZBOlsC6CaodqXJV3ZOf6hpg/4Y6MEx5BM=
-github.com/swaggo/gin-swagger v1.4.1/go.mod h1:hmJ1vPn+XjUvnbzjCdUAxVqgraxELxk8x5zAsjCE5mg=
-github.com/swaggo/swag v1.7.9 h1:6vCG5mm43ebDzGlZPMGYrYI4zKFfOr5kicQX8qjeDwc=
-github.com/swaggo/swag v1.7.9/go.mod h1:gZ+TJ2w/Ve1RwQsA2IRoSOTidHz6DX+PIG8GWvbnoLU=
+github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14/go.mod h1:gxQT6pBGRuIGunNf/+tSOB5OHvguWi8Tbt82WOkf35E=
+github.com/swaggo/gin-swagger v1.3.0 h1:eOmp7r57oUgZPw2dJOjcGNMse9cvXcI4tTqBcnZtPsI=
+github.com/swaggo/gin-swagger v1.3.0/go.mod h1:oy1BRA6WvgtCp848lhxce7BnWH4C8Bxa0m5SkWx+cS0=
+github.com/swaggo/swag v1.5.1/go.mod h1:1Bl9F/ZBpVWh22nY0zmYyASPO1lI/zIwRDrpZU+tv8Y=
+github.com/swaggo/swag v1.16.1 h1:fTNRhKstPKxcnoKsytm4sahr8FaYzUcT7i1/3nd/fBg=
+github.com/swaggo/swag v1.16.1/go.mod h1:9/LMvHycG3NFHfR6LwvikHv5iFvmPADQ359cKikGxto=
github.com/tencentyun/cos-go-sdk-v5 v0.7.19 h1:janAfTO4MglOrUFuKGTQJBuMc66+F7TgtEIt1wPsJ+k=
github.com/tencentyun/cos-go-sdk-v5 v0.7.19/go.mod h1:wQBO5HdAkLjj2q6XQiIfDSP8DXDNrppDRw2Kp/1BODA=
github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw=
@@ -488,17 +525,21 @@ github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYa
github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o=
github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
+github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
+github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
-github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0=
+github.com/ugorji/go v1.1.13/go.mod h1:jxau1n+/wyTGLQoCkjok9r5zFa/FxT6eI5HiHKQszjc=
+github.com/ugorji/go/codec v0.0.0-20181022190402-e5e69e061d4f/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-github.com/ugorji/go/codec v1.2.6 h1:7kbGefxLoDBuYXOms4yD7223OpNMMPNPZxXk5TvFcyQ=
-github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw=
+github.com/ugorji/go/codec v1.1.13/go.mod h1:oNVt3Dq+FO91WNQ/9JnHKQP2QJxTzoN7wCBFCq1OeuU=
+github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU=
+github.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/unrolled/secure v1.0.7 h1:BcQHp3iKZyZCKj5gRqwQG+5urnGBF00wGgoPPwtheVQ=
github.com/unrolled/secure v1.0.7/go.mod h1:uGc1OcRF8gCVBA+ANksKmvM85Hka6SZtQIbrKc3sHS4=
-github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
+github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
@@ -521,6 +562,8 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM=
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
+golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU=
+golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -535,8 +578,9 @@ golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWP
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA=
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
+golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -562,10 +606,11 @@ golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKG
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
-golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
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=
+golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -577,17 +622,18 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM=
+golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=
-golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
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=
@@ -597,14 +643,16 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
+golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -614,40 +662,44 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
+golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
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/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=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -664,7 +716,9 @@ golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190606050223-4d9ae51c2468/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190611222205-d73e1c7e250b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -678,14 +732,14 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.1.7 h1:6j8CgantCy3yc8JGBqkDLMKWqZ0RDU2g1HVgacojGWQ=
-golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
+golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo=
+golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
@@ -708,10 +762,16 @@ google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvx
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=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
-google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
+google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
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=
@@ -719,16 +779,19 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
+gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.55.0 h1:E8yzL5unfpW3M6fz/eB7Cb5MQAYSZ7GKo4Qth+N2sgQ=
gopkg.in/ini.v1 v1.55.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -737,8 +800,8 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA=
-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/driver/mysql v1.0.3/go.mod h1:twGxftLBlFgNVNakL7F+P/x9oYqoymG3YYT8cAfI9oI=
gorm.io/driver/mysql v1.3.3 h1:jXG9ANrwBc4+bMvBcSl8zCfPBaVoPyBEBshA8dA93X8=
gorm.io/driver/mysql v1.3.3/go.mod h1:ChK6AHbHgDCFZyJp0F+BmVGb06PSIoh9uVYKAlRbb2U=
@@ -900,3 +963,4 @@ nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0
nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g=
nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
+rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
diff --git a/server/middleware/jwt.go b/server/middleware/jwt.go
index 334443359..c67cc28b1 100644
--- a/server/middleware/jwt.go
+++ b/server/middleware/jwt.go
@@ -2,6 +2,7 @@ package middleware
import (
"errors"
+ "github.com/golang-jwt/jwt/v4"
"strconv"
"time"
@@ -54,13 +55,13 @@ func JWTAuth() gin.HandlerFunc {
// response.FailWithDetailed(gin.H{"reload": true}, err.Error(), c)
// c.Abort()
//}
- if claims.ExpiresAt-time.Now().Unix() < claims.BufferTime {
+ if claims.ExpiresAt.Unix()-time.Now().Unix() < claims.BufferTime {
dr, _ := utils.ParseDuration(global.GVA_CONFIG.JWT.ExpiresTime)
- claims.ExpiresAt = time.Now().Add(dr).Unix()
+ claims.ExpiresAt = jwt.NewNumericDate(time.Now().Add(dr))
newToken, _ := j.CreateTokenByOldToken(token, *claims)
newClaims, _ := j.ParseToken(newToken)
c.Header("new-token", newToken)
- c.Header("new-expires-at", strconv.FormatInt(newClaims.ExpiresAt, 10))
+ c.Header("new-expires-at", strconv.FormatInt(newClaims.ExpiresAt.Unix(), 10))
if global.GVA_CONFIG.System.UseMultipoint {
RedisJwtToken, err := jwtService.GetRedisJWT(newClaims.Username)
if err != nil {
diff --git a/server/middleware/operation.go b/server/middleware/operation.go
index 6579610a3..495d68ed4 100644
--- a/server/middleware/operation.go
+++ b/server/middleware/operation.go
@@ -56,8 +56,8 @@ func OperationRecord() gin.HandlerFunc {
body, _ = json.Marshal(&m)
}
claims, _ := utils.GetClaims(c)
- if claims.ID != 0 {
- userId = int(claims.ID)
+ if claims.BaseClaims.ID != 0 {
+ userId = int(claims.BaseClaims.ID)
} else {
id, err := strconv.Atoi(c.Request.Header.Get("x-user-id"))
if err != nil {
@@ -75,7 +75,7 @@ func OperationRecord() gin.HandlerFunc {
}
// 上传文件时候 中间件日志进行裁断操作
- if strings.Contains(c.GetHeader("Content-Type"), "multipart/form-data") {
+ if strings.Contains(c.GetHeader("Content-Type"), "multipart/form-data") {
if len(record.Body) > 1024 {
// 截断
newBody := respPool.Get().([]byte)
@@ -100,14 +100,14 @@ func OperationRecord() gin.HandlerFunc {
record.Latency = latency
record.Resp = writer.body.String()
- if strings.Contains(c.Writer.Header().Get("Pragma"), "public") ||
- strings.Contains(c.Writer.Header().Get("Expires"), "0") ||
+ if strings.Contains(c.Writer.Header().Get("Pragma"), "public") ||
+ strings.Contains(c.Writer.Header().Get("Expires"), "0") ||
strings.Contains(c.Writer.Header().Get("Cache-Control"), "must-revalidate, post-check=0, pre-check=0") ||
- strings.Contains(c.Writer.Header().Get("Content-Type"), "application/force-download") ||
- strings.Contains(c.Writer.Header().Get("Content-Type"), "application/octet-stream") ||
- strings.Contains(c.Writer.Header().Get("Content-Type"), "application/vnd.ms-excel") ||
- strings.Contains(c.Writer.Header().Get("Content-Type"), "application/download") ||
- strings.Contains(c.Writer.Header().Get("Content-Disposition"), "attachment") ||
+ strings.Contains(c.Writer.Header().Get("Content-Type"), "application/force-download") ||
+ strings.Contains(c.Writer.Header().Get("Content-Type"), "application/octet-stream") ||
+ strings.Contains(c.Writer.Header().Get("Content-Type"), "application/vnd.ms-excel") ||
+ strings.Contains(c.Writer.Header().Get("Content-Type"), "application/download") ||
+ strings.Contains(c.Writer.Header().Get("Content-Disposition"), "attachment") ||
strings.Contains(c.Writer.Header().Get("Content-Transfer-Encoding"), "binary") {
if len(record.Resp) > 1024 {
// 截断
diff --git a/server/model/system/request/jwt.go b/server/model/system/request/jwt.go
index 5a7c78aab..f6f48f6c8 100644
--- a/server/model/system/request/jwt.go
+++ b/server/model/system/request/jwt.go
@@ -1,15 +1,15 @@
package request
import (
+ "github.com/gofrs/uuid"
jwt "github.com/golang-jwt/jwt/v4"
- uuid "github.com/satori/go.uuid"
)
// Custom claims structure
type CustomClaims struct {
BaseClaims
BufferTime int64
- jwt.StandardClaims
+ jwt.RegisteredClaims
}
type BaseClaims struct {
diff --git a/server/model/system/sys_user.go b/server/model/system/sys_user.go
index b704a8d9b..5c047d798 100644
--- a/server/model/system/sys_user.go
+++ b/server/model/system/sys_user.go
@@ -2,7 +2,7 @@ package system
import (
"github.com/flipped-aurora/gin-vue-admin/server/global"
- "github.com/satori/go.uuid"
+ "github.com/gofrs/uuid"
)
type SysUser struct {
diff --git a/server/service/system/sys_api.go b/server/service/system/sys_api.go
index 3e35d94a8..e9f3bac22 100644
--- a/server/service/system/sys_api.go
+++ b/server/service/system/sys_api.go
@@ -43,10 +43,7 @@ func (apiService *ApiService) DeleteApi(api system.SysApi) (err error) {
if err != nil {
return err
}
- success := CasbinServiceApp.ClearCasbin(1, entity.Path, entity.Method)
- if !success {
- return errors.New(entity.Path + ":" + entity.Method + "casbin同步清理失败")
- }
+ CasbinServiceApp.ClearCasbin(1, entity.Path, entity.Method)
e := CasbinServiceApp.Casbin()
err = e.InvalidateCache()
if err != nil {
@@ -179,10 +176,7 @@ func (apiService *ApiService) DeleteApisByIds(ids request.IdsReq) (err error) {
return err
} else {
for _, sysApi := range apis {
- success := CasbinServiceApp.ClearCasbin(1, sysApi.Path, sysApi.Method)
- if !success {
- return errors.New(sysApi.Path + ":" + sysApi.Method + "casbin同步清理失败")
- }
+ CasbinServiceApp.ClearCasbin(1, sysApi.Path, sysApi.Method)
}
e := CasbinServiceApp.Casbin()
err = e.InvalidateCache()
diff --git a/server/service/system/sys_casbin.go b/server/service/system/sys_casbin.go
index 83de20922..d36ad351b 100644
--- a/server/service/system/sys_casbin.go
+++ b/server/service/system/sys_casbin.go
@@ -2,6 +2,9 @@ package system
import (
"errors"
+ "strconv"
+ "sync"
+
"github.com/casbin/casbin/v2"
"github.com/casbin/casbin/v2/model"
gormadapter "github.com/casbin/gorm-adapter/v3"
@@ -9,8 +12,6 @@ import (
"github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
_ "github.com/go-sql-driver/mysql"
"go.uber.org/zap"
- "strconv"
- "sync"
)
//@author: [piexlmax](https://github.com/piexlmax)
@@ -98,11 +99,11 @@ func (casbinService *CasbinService) ClearCasbin(v int, p ...string) bool {
//@return: *casbin.Enforcer
var (
- cachedEnforcer *casbin.CachedEnforcer
- once sync.Once
+ syncedCachedEnforcer *casbin.SyncedCachedEnforcer
+ once sync.Once
)
-func (casbinService *CasbinService) Casbin() *casbin.CachedEnforcer {
+func (casbinService *CasbinService) Casbin() *casbin.SyncedCachedEnforcer {
once.Do(func() {
a, err := gormadapter.NewAdapterByDB(global.GVA_DB)
if err != nil {
@@ -130,9 +131,9 @@ func (casbinService *CasbinService) Casbin() *casbin.CachedEnforcer {
zap.L().Error("字符串加载模型失败!", zap.Error(err))
return
}
- cachedEnforcer, _ = casbin.NewCachedEnforcer(m, a)
- cachedEnforcer.SetExpireTime(60 * 60)
- _ = cachedEnforcer.LoadPolicy()
+ syncedCachedEnforcer, _ = casbin.NewSyncedCachedEnforcer(m, a)
+ syncedCachedEnforcer.SetExpireTime(60 * 60)
+ _ = syncedCachedEnforcer.LoadPolicy()
})
- return cachedEnforcer
+ return syncedCachedEnforcer
}
diff --git a/server/service/system/sys_initdb_mysql.go b/server/service/system/sys_initdb_mysql.go
index 257acafc3..d163fc024 100644
--- a/server/service/system/sys_initdb_mysql.go
+++ b/server/service/system/sys_initdb_mysql.go
@@ -13,7 +13,7 @@ import (
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
- uuid "github.com/satori/go.uuid"
+ "github.com/gofrs/uuid"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
@@ -32,7 +32,7 @@ func (h MysqlInitHandler) WriteConfig(ctx context.Context) error {
}
global.GVA_CONFIG.System.DbType = "mysql"
global.GVA_CONFIG.Mysql = c
- global.GVA_CONFIG.JWT.SigningKey = uuid.NewV4().String()
+ global.GVA_CONFIG.JWT.SigningKey = uuid.Must(uuid.NewV4()).String()
cs := utils.StructToMap(global.GVA_CONFIG)
for k, v := range cs {
global.GVA_VP.Set(k, v)
diff --git a/server/service/system/sys_initdb_pgsql.go b/server/service/system/sys_initdb_pgsql.go
index ac09814c0..42407aba7 100644
--- a/server/service/system/sys_initdb_pgsql.go
+++ b/server/service/system/sys_initdb_pgsql.go
@@ -13,7 +13,7 @@ import (
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
- uuid "github.com/satori/go.uuid"
+ "github.com/gofrs/uuid"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
@@ -32,7 +32,7 @@ func (h PgsqlInitHandler) WriteConfig(ctx context.Context) error {
}
global.GVA_CONFIG.System.DbType = "pgsql"
global.GVA_CONFIG.Pgsql = c
- global.GVA_CONFIG.JWT.SigningKey = uuid.NewV4().String()
+ global.GVA_CONFIG.JWT.SigningKey = uuid.Must(uuid.NewV4()).String()
cs := utils.StructToMap(global.GVA_CONFIG)
for k, v := range cs {
global.GVA_VP.Set(k, v)
diff --git a/server/service/system/sys_user.go b/server/service/system/sys_user.go
index a051f0ab0..7b8779f31 100644
--- a/server/service/system/sys_user.go
+++ b/server/service/system/sys_user.go
@@ -9,7 +9,7 @@ import (
"github.com/flipped-aurora/gin-vue-admin/server/model/common/request"
"github.com/flipped-aurora/gin-vue-admin/server/model/system"
"github.com/flipped-aurora/gin-vue-admin/server/utils"
- uuid "github.com/satori/go.uuid"
+ "github.com/gofrs/uuid"
"gorm.io/gorm"
)
@@ -28,7 +28,7 @@ func (userService *UserService) Register(u system.SysUser) (userInter system.Sys
}
// 否则 附加uuid 密码hash加密 注册
u.Password = utils.BcryptHash(u.Password)
- u.UUID = uuid.NewV4()
+ u.UUID = uuid.Must(uuid.NewV4())
err = global.GVA_DB.Create(&u).Error
return u, err
}
diff --git a/server/source/system/api.go b/server/source/system/api.go
index c80978621..13054b67d 100644
--- a/server/source/system/api.go
+++ b/server/source/system/api.go
@@ -45,9 +45,7 @@ func (i *initApi) InitializeData(ctx context.Context) (context.Context, error) {
return ctx, system.ErrMissingDBContext
}
entities := []sysModel.SysApi{
- {ApiGroup: "base", Method: "POST", Path: "/base/login", Description: global.Translate("system.api.userLoginRequired")},
-
- {ApiGroup: "jwt", Method: "POST", Path: "/jwt/jsonInBlacklist", Description: global.Translate("system.api.jwtAddedToBlackList")},
+ {ApiGroup: "jwt", Method: "POST", Path: "/jwt/jsonInBlacklist", Description: "jwt加入黑名单(退出,必选)"},
{ApiGroup: global.Translate("system.api.systemUser"), Method: "DELETE", Path: "/user/deleteUser", Description: global.Translate("system.api.deleteUsers")},
{ApiGroup: global.Translate("system.api.systemUser"), Method: "POST", Path: "/user/admin_register", Description: global.Translate("system.api.userRegistration")},
diff --git a/server/source/system/casbin.go b/server/source/system/casbin.go
index c75e8f8f8..bcb744731 100644
--- a/server/source/system/casbin.go
+++ b/server/source/system/casbin.go
@@ -45,7 +45,6 @@ func (i *initCasbin) InitializeData(ctx context.Context) (context.Context, error
return ctx, system.ErrMissingDBContext
}
entities := []adapter.CasbinRule{
- {Ptype: "p", V0: "888", V1: "/base/login", V2: "POST"},
{Ptype: "p", V0: "888", V1: "/user/admin_register", V2: "POST"},
{Ptype: "p", V0: "888", V1: "/api/createApi", V2: "POST"},
@@ -157,7 +156,6 @@ func (i *initCasbin) InitializeData(ctx context.Context) (context.Context, error
{Ptype: "p", V0: "888", V1: "/chatGpt/getSK", V2: "GET"},
{Ptype: "p", V0: "888", V1: "/chatGpt/deleteSK", V2: "DELETE"},
- {Ptype: "p", V0: "8881", V1: "/base/login", V2: "POST"},
{Ptype: "p", V0: "8881", V1: "/user/admin_register", V2: "POST"},
{Ptype: "p", V0: "8881", V1: "/api/createApi", V2: "POST"},
{Ptype: "p", V0: "8881", V1: "/api/getApiList", V2: "POST"},
@@ -197,7 +195,6 @@ func (i *initCasbin) InitializeData(ctx context.Context) (context.Context, error
{Ptype: "p", V0: "8881", V1: "/customer/customerList", V2: "GET"},
{Ptype: "p", V0: "8881", V1: "/user/getUserInfo", V2: "GET"},
- {Ptype: "p", V0: "9528", V1: "/base/login", V2: "POST"},
{Ptype: "p", V0: "9528", V1: "/user/admin_register", V2: "POST"},
{Ptype: "p", V0: "9528", V1: "/api/createApi", V2: "POST"},
{Ptype: "p", V0: "9528", V1: "/api/getApiList", V2: "POST"},
diff --git a/server/source/system/user.go b/server/source/system/user.go
index da9669d92..383f3c43e 100644
--- a/server/source/system/user.go
+++ b/server/source/system/user.go
@@ -7,8 +7,8 @@ import (
sysModel "github.com/flipped-aurora/gin-vue-admin/server/model/system"
"github.com/flipped-aurora/gin-vue-admin/server/service/system"
"github.com/flipped-aurora/gin-vue-admin/server/utils"
+ "github.com/gofrs/uuid"
"github.com/pkg/errors"
- uuid "github.com/satori/go.uuid"
"gorm.io/gorm"
)
@@ -51,7 +51,7 @@ func (i *initUser) InitializeData(ctx context.Context) (next context.Context, er
entities := []sysModel.SysUser{
{
- UUID: uuid.NewV4(),
+ UUID: uuid.Must(uuid.NewV4()),
Username: "admin",
Password: adminPassword,
NickName: "Mr.奇淼",
@@ -61,7 +61,7 @@ func (i *initUser) InitializeData(ctx context.Context) (next context.Context, er
Email: "333333333@qq.com",
},
{
- UUID: uuid.NewV4(),
+ UUID: uuid.Must(uuid.NewV4()),
Username: "a303176530",
Password: password,
NickName: "用户1",
diff --git a/server/utils/clamis.go b/server/utils/clamis.go
index e80515782..76f5509fc 100644
--- a/server/utils/clamis.go
+++ b/server/utils/clamis.go
@@ -4,7 +4,7 @@ import (
"github.com/flipped-aurora/gin-vue-admin/server/global"
systemReq "github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
"github.com/gin-gonic/gin"
- uuid "github.com/satori/go.uuid"
+ "github.com/gofrs/uuid"
)
func GetClaims(c *gin.Context) (*systemReq.CustomClaims, error) {
@@ -23,11 +23,11 @@ func GetUserID(c *gin.Context) uint {
if cl, err := GetClaims(c); err != nil {
return 0
} else {
- return cl.ID
+ return cl.BaseClaims.ID
}
} else {
waitUse := claims.(*systemReq.CustomClaims)
- return waitUse.ID
+ return waitUse.BaseClaims.ID
}
}
diff --git a/server/utils/jwt.go b/server/utils/jwt.go
index 61d163f7d..c1298a870 100644
--- a/server/utils/jwt.go
+++ b/server/utils/jwt.go
@@ -33,10 +33,11 @@ func (j *JWT) CreateClaims(baseClaims request.BaseClaims) request.CustomClaims {
claims := request.CustomClaims{
BaseClaims: baseClaims,
BufferTime: int64(bf / time.Second), // 缓冲时间1天 缓冲时间内会获得新的token刷新令牌 此时一个用户会存在两个有效令牌 但是前端只留一个 另一个会丢失
- StandardClaims: jwt.StandardClaims{
- NotBefore: time.Now().Unix() - 1000, // 签名生效时间
- ExpiresAt: time.Now().Add(ep).Unix(), // 过期时间 7天 配置文件
- Issuer: global.GVA_CONFIG.JWT.Issuer, // 签名的发行者
+ RegisteredClaims: jwt.RegisteredClaims{
+ Audience: jwt.ClaimStrings{"GVA"}, // 受众
+ NotBefore: jwt.NewNumericDate(time.Now().Add(-1000)), // 签名生效时间
+ ExpiresAt: jwt.NewNumericDate(time.Now().Add(ep)), // 过期时间 7天 配置文件
+ Issuer: global.GVA_CONFIG.JWT.Issuer, // 签名的发行者
},
}
return claims
diff --git a/web/package.json b/web/package.json
index 2f06334f0..06346e680 100644
--- a/web/package.json
+++ b/web/package.json
@@ -10,36 +10,35 @@
"fix-memory-limit": "cross-env LIMIT=4096 increase-memory-limit"
},
"dependencies": {
- "@element-plus/icons-vue": "^0.2.7",
- "axios": "^0.27.2",
+ "@element-plus/icons-vue": "^2.1.0",
+ "axios": "^0.19.2",
"core-js": "^3.6.5",
- "echarts": "5.3.3",
- "element-plus": "2.2.30",
+ "echarts": "5.3.2",
+ "element-plus": "^2.3.4",
"highlight.js": "^10.6.0",
- "js-cookie": "^3.0.1",
- "marked": "^4.1.0",
+ "marked": "^2.0.0",
"mitt": "^3.0.0",
"nprogress": "^0.2.0",
"path": "^0.12.7",
- "pinia": "^2.0.22",
- "qs": "^6.11.0",
+ "pinia": "^2.0.9",
+ "qs": "^6.8.0",
"quill": "^1.3.7",
- "screenfull": "^6.0.2",
- "spark-md5": "^3.0.2",
- "vue": "^3.2.39",
+ "screenfull": "^5.0.2",
+ "spark-md5": "^3.0.1",
+ "vue": "^3.2.47",
+ "vue-router": "^4.0.0-0",
"vue-i18n": "^9.2.2",
- "vue-router": "^4.1.5"
},
"devDependencies": {
+ "@vitejs/plugin-legacy": "^4.0.2",
+ "@vitejs/plugin-vue": "^4.1.0",
+ "@vue/cli-plugin-babel": "~4.5.0",
+ "@vue/cli-plugin-eslint": "~4.5.0",
+ "@vue/cli-plugin-router": "~4.5.0",
+ "@vue/cli-plugin-vuex": "~4.5.0",
+ "@vue/cli-service": "~4.5.0",
"@intlify/vite-plugin-vue-i18n": "^6.0.1",
"@intlify/vue-i18n-loader": "^4.2.0",
- "@vitejs/plugin-legacy": "^2.0.0",
- "@vitejs/plugin-vue": "^3.0.1",
- "@vue/cli-plugin-babel": "^5.0.8",
- "@vue/cli-plugin-eslint": "^5.0.8",
- "@vue/cli-plugin-router": "^5.0.8",
- "@vue/cli-plugin-vuex": "^5.0.8",
- "@vue/cli-service": "^5.0.8",
"@vue/compiler-sfc": "^3.1.5",
"babel-eslint": "^10.1.0",
"babel-plugin-import": "^1.13.3",
@@ -51,7 +50,7 @@
"terser": "^5.4.0",
"unplugin-auto-import": "^0.14.2",
"unplugin-vue-components": "^0.23.0",
- "vite": "^3.0.1",
+ "vite": "^4.3.1",
"vite-plugin-banner": "^0.1.3",
"vite-plugin-importer": "^0.2.5"
}
diff --git a/web/src/components/commandMenu/index.vue b/web/src/components/commandMenu/index.vue
new file mode 100644
index 000000000..b8f7fbb1b
--- /dev/null
+++ b/web/src/components/commandMenu/index.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
{{ option.label }}
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/src/main.js b/web/src/main.js
index b663d0596..42056f193 100644
--- a/web/src/main.js
+++ b/web/src/main.js
@@ -1,3 +1,8 @@
+import 'element-plus/es/components/message/style/css'
+import 'element-plus/es/components/loading/style/css'
+import 'element-plus/es/components/notification/style/css'
+import 'element-plus/es/components/message-box/style/css'
+import './style/element_visiable.scss'
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
// import zhCn from 'element-plus/es/locale/lang/zh-cn'
@@ -14,11 +19,6 @@ import i18n from './i18n' // added by mohamed hassan to multilangauge
/* *
import { initDom } from './utils/positionToCode'
-import 'element-plus/es/components/message/style/css'
-import 'element-plus/es/components/loading/style/css'
-import 'element-plus/es/components/notification/style/css'
-import 'element-plus/es/components/message-box/style/css'
-import './style/element_visiable.scss'
initDom()
/**
diff --git a/web/src/pinia/modules/router.js b/web/src/pinia/modules/router.js
index 4f4cfdb1e..b8e226f94 100644
--- a/web/src/pinia/modules/router.js
+++ b/web/src/pinia/modules/router.js
@@ -4,16 +4,12 @@ import { asyncMenu } from '@/api/menu'
import { defineStore } from 'pinia'
import { ref } from 'vue'
-const routerListArr = []
const notLayoutRouterArr = []
const keepAliveRoutersArr = []
const nameMap = {}
const formatRouter = (routes, routeMap) => {
routes && routes.forEach(item => {
- if ((!item.children || item.children.every(ch => ch.hidden)) && item.name !== '404' && !item.hidden) {
- routerListArr.push({ label: item.meta.title, value: item.name })
- }
item.meta.btns = item.btns
item.meta.hidden = item.hidden
if (item.meta.defaultMenu === true) {
@@ -60,10 +56,9 @@ export const useRouterStore = defineStore('router', () => {
emitter.on('setKeepAlive', setKeepAliveRouters)
const asyncRouters = ref([])
- const routerList = ref(routerListArr)
const routeMap = ({})
// 从后台获取动态路由
- const SetAsyncRouter = async() => {
+ const SetAsyncRouter = async () => {
asyncRouterFlag.value++
const baseRouter = [{
path: '/layout',
@@ -94,13 +89,11 @@ export const useRouterStore = defineStore('router', () => {
asyncRouterHandle(baseRouter)
KeepAliveFilter(asyncRouter)
asyncRouters.value = baseRouter
- routerList.value = routerListArr
return true
}
return {
asyncRouters,
- routerList,
keepAliveRouters,
asyncRouterFlag,
SetAsyncRouter,
diff --git a/web/src/pinia/modules/user.js b/web/src/pinia/modules/user.js
index 805162408..f4dbd40c9 100644
--- a/web/src/pinia/modules/user.js
+++ b/web/src/pinia/modules/user.js
@@ -79,6 +79,13 @@ export const useUserStore = defineStore('user', () => {
})
await router.replace({ name: userInfo.value.authority.defaultRouter })
loadingInstance.value.close()
+
+ const isWin = ref(/windows/i.test(navigator.userAgent))
+ if (isWin.value) {
+ window.localStorage.setItem('osType', 'WIN')
+ } else {
+ window.localStorage.setItem('osType', 'MAC')
+ }
return true
}
} catch (e) {
diff --git a/web/src/view/layout/index.vue b/web/src/view/layout/index.vue
index 7cef318f3..1738a18dc 100644
--- a/web/src/view/layout/index.vue
+++ b/web/src/view/layout/index.vue
@@ -62,6 +62,16 @@
+
+
+
指令菜单
+
+ {{ first }}
+ +
+ K
+
+
+
{{ t('layout.personalInfo') }}
{{ t('layout.logout') }}
@@ -96,6 +106,7 @@
+
@@ -114,6 +125,7 @@ import HistoryComponent from '@/view/layout/aside/historyComponent/history.vue'
import Search from '@/view/layout/search/search.vue'
import BottomInfo from '@/view/layout/bottomInfo/bottomInfo.vue'
import CustomPic from '@/components/customPic/index.vue'
+import CommandMenu from '@/components/commandMenu/index.vue'
import Setting from './setting/index.vue'
import { setUserAuthority } from '@/api/user'
import { emitter } from '@/utils/bus.js'
@@ -134,8 +146,26 @@ const isCollapse = ref(false)
const isSider = ref(true)
const isMobile = ref(false)
+const first = ref('')
+const dialogVisible = ref(false)
const initPage = () => {
- const screenWidth = document.body.clientWidth
+ // 判断当前用户的操作系统
+ if(window.localStorage.getItem('osType') === 'WIN') {
+ first.value = 'Ctrl'
+ } else {
+ first.value = '⌘'
+ }
+ // 当用户同时按下ctrl和k键的时候
+ const handleKeyDown = (e) => {
+ if (e.ctrlKey && e.key === 'k') {
+ // 阻止浏览器默认事件
+ e.preventDefault();
+ handleCommand()
+ }
+ }
+ window.addEventListener('keydown', handleKeyDown);
+
+ const screenWidth = document.body.clientWidth
if (screenWidth < 1000) {
isMobile.value = true
isSider.value = false
@@ -153,6 +183,11 @@ const initPage = () => {
initPage()
+const command = ref()
+const handleCommand = () => {
+ command.value.open()
+}
+
const loadingFlag = ref(false)
onMounted(() => {
// 挂载一些通用的事件
@@ -249,4 +284,20 @@ const changeShadow = () => {
diff --git a/web/src/view/layout/search/search.vue b/web/src/view/layout/search/search.vue
index 9817e237a..cd0a95782 100644
--- a/web/src/view/layout/search/search.vue
+++ b/web/src/view/layout/search/search.vue
@@ -1,43 +1,20 @@
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
@@ -50,39 +27,7 @@ export default {