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

+

+

+ + special sponsor appwrite + +

+ # 项目文档 [在线文档](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 @@ + + + + + + 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 {