From 00df85c4f0ee736522844150a7066092a076f122 Mon Sep 17 00:00:00 2001 From: Echo <1711788888@qq.com> Date: Wed, 9 Apr 2025 19:16:49 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=96=B0=E5=A2=9E=E7=94=A8=E6=88=B7&?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=96=87=E7=AB=A0=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/enter.go | 2 + api/v1/user/enter.go | 7 ++ api/v1/user/user.go | 85 +++++++++++++++++++++++ core/server.go | 2 + go.mod | 22 +++++- go.sum | 132 +++++++++++++++++++++++++++++++++++- log/2025-03-28/error.log | 2 - log/2025-03-28/info.log | 25 ------- log/2025-04-03/error.log | 1 - log/2025-04-03/info.log | 4 -- log/2025-04-09/error.log | 6 -- log/2025-04-09/info.log | 46 ------------- model/article/article.go | 11 +-- model/article/vo/article.go | 13 ++++ model/user/request/jwt.go | 15 ++++ model/user/request/user.go | 42 ++++++++++++ model/user/user.go | 23 +++++++ service/enter.go | 2 + service/user/enter.go | 3 + service/user/user.go | 80 ++++++++++++++++++++++ 20 files changed, 431 insertions(+), 92 deletions(-) create mode 100644 api/v1/user/enter.go create mode 100644 api/v1/user/user.go delete mode 100644 log/2025-03-28/error.log delete mode 100644 log/2025-03-28/info.log delete mode 100644 log/2025-04-03/error.log delete mode 100644 log/2025-04-03/info.log delete mode 100644 log/2025-04-09/error.log delete mode 100644 log/2025-04-09/info.log create mode 100644 model/article/vo/article.go create mode 100644 model/user/request/jwt.go create mode 100644 model/user/request/user.go create mode 100644 model/user/user.go create mode 100644 service/user/enter.go create mode 100644 service/user/user.go diff --git a/api/v1/enter.go b/api/v1/enter.go index d7bcab0..9ea2c73 100644 --- a/api/v1/enter.go +++ b/api/v1/enter.go @@ -6,6 +6,7 @@ import ( "git.echol.cn/loser/lckt/api/v1/category" "git.echol.cn/loser/lckt/api/v1/example" "git.echol.cn/loser/lckt/api/v1/system" + "git.echol.cn/loser/lckt/api/v1/user" ) var ApiGroupApp = new(ApiGroup) @@ -16,4 +17,5 @@ type ApiGroup struct { CategoryApiGroup category.ApiGroup BotApiGroup bot.ApiGroup ArticleApiGroup article.ApiGroup + UserApiGroup user.APPUserApi } diff --git a/api/v1/user/enter.go b/api/v1/user/enter.go new file mode 100644 index 0000000..f333a3a --- /dev/null +++ b/api/v1/user/enter.go @@ -0,0 +1,7 @@ +package user + +import "git.echol.cn/loser/lckt/service" + +type ApiGroup struct{ APPUserApi } + +var userService = service.ServiceGroupApp.UserServiceGroup.UserService diff --git a/api/v1/user/user.go b/api/v1/user/user.go new file mode 100644 index 0000000..9fa3167 --- /dev/null +++ b/api/v1/user/user.go @@ -0,0 +1,85 @@ +package user + +import ( + "fmt" + "git.echol.cn/loser/lckt/global" + r "git.echol.cn/loser/lckt/model/common/response" + "git.echol.cn/loser/lckt/model/user/request" + "git.echol.cn/loser/lckt/utils" + "git.echol.cn/loser/lckt/utils/user_jwt" + "github.com/gin-gonic/gin" + "github.com/redis/go-redis/v9" + "go.uber.org/zap" + "time" +) + +type APPUserApi struct{} + +// SendCode 发送验证码 +func (*APPUserApi) SendCode(ctx *gin.Context) { + var p request.SendCodeReq + if err := ctx.ShouldBind(&p); err != nil { + r.FailWithMessage(err.Error(), ctx) + global.GVA_LOG.Error("参数错误,发送验证码失败", zap.Error(err)) + return + } + if err := userService.SendCode(p); err != nil { + r.FailWithMessage("发送验证码失败", ctx) + return + } + + r.OkWithMessage("发送验证码成功", ctx) +} + +// Login 用户登录 +func (*APPUserApi) Login(ctx *gin.Context) { + var p request.CodeLoginReq + if err := ctx.ShouldBind(&p); err != nil { + r.FailWithMessage(err.Error(), ctx) + global.GVA_LOG.Error("参数错误,登录失败", zap.Error(err)) + return + } + + if result, _ := global.GVA_REDIS.Get(ctx, fmt.Sprintf("VerifyCode:%s", p.Phone)).Result(); result != p.Code { + global.GVA_LOG.Error("验证码错误", zap.String("phone", p.Phone)) + r.FailWithMessage("验证码错误", ctx) + return + } + + user, err := userService.Login(p) + if err != nil { + r.FailWithMessage("登录失败", ctx) + return + } + + // 生成token + token, claims, err := user_jwt.LoginToken(user) + if err != nil { + global.GVA_LOG.Error("获取token失败!", zap.Error(err)) + r.FailWithMessage("获取token失败", ctx) + return + } + + if _, err = global.GVA_REDIS.Get(ctx, user.Phone).Result(); err == redis.Nil { + // 此处过期时间等于jwt过期时间 + dr, err := utils.ParseDuration(global.GVA_CONFIG.JWT.ExpiresTime) + if err != nil { + return + } + timer := dr + if err := global.GVA_REDIS.Set(ctx, user.Phone, token, timer).Err(); err != nil { + global.GVA_LOG.Error("设置登录状态失败!", zap.Error(err)) + r.FailWithMessage("设置登录状态失败", ctx) + return + } + user_jwt.SetToken(ctx, token, int(claims.RegisteredClaims.ExpiresAt.Unix()-time.Now().Unix())) + r.OkWithDetailed(gin.H{ + "User": user, + "Token": token, + "ExpiresAt": claims.RegisteredClaims.ExpiresAt.Unix() * 1000, + }, "登录成功", ctx) + } else if err != nil { + global.GVA_LOG.Error("设置登录状态失败!", zap.Error(err)) + r.FailWithMessage("设置登录状态失败", ctx) + } +} diff --git a/core/server.go b/core/server.go index d693a3b..998b9a7 100644 --- a/core/server.go +++ b/core/server.go @@ -37,5 +37,7 @@ func RunWindowsServer() { global.GVA_LOG.Info("server run success on ", zap.String("address", address)) + fmt.Println(global.GVA_CONFIG.Pays) + global.GVA_LOG.Error(s.ListenAndServe().Error()) } diff --git a/go.mod b/go.mod index 87118bc..7a2aae1 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,14 @@ module git.echol.cn/loser/lckt -go 1.22.2 +go 1.23 + +toolchain go1.23.2 require ( + github.com/ArtisanCloud/PowerWeChat/v3 v3.4.6 + github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.7 + github.com/alibabacloud-go/dysmsapi-20170525/v4 v4.1.2 + github.com/alibabacloud-go/tea-utils/v2 v2.0.7 github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible github.com/aws/aws-sdk-go v1.55.6 github.com/casbin/casbin/v2 v2.103.0 @@ -53,10 +59,18 @@ require ( require ( filippo.io/edwards25519 v1.1.0 // indirect + github.com/ArtisanCloud/PowerLibs/v3 v3.3.2 // indirect + github.com/ArtisanCloud/PowerSocialite/v3 v3.0.7 // indirect github.com/BurntSushi/toml v1.4.0 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/STARRY-S/zip v0.1.0 // indirect github.com/alex-ant/gomath v0.0.0-20160516115720-89013a210a82 // indirect + github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 // indirect + github.com/alibabacloud-go/debug v1.0.1 // indirect + github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect + github.com/alibabacloud-go/openapi-util v0.1.1 // indirect + github.com/alibabacloud-go/tea v1.3.8 // indirect + github.com/aliyun/credentials-go v1.4.5 // indirect github.com/andybalholm/brotli v1.1.1 // indirect github.com/bmatcuk/doublestar/v4 v4.8.0 // indirect github.com/bodgit/plumbing v1.3.0 // indirect @@ -67,6 +81,7 @@ require ( github.com/casbin/govaluate v1.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/clbanning/mxj v1.8.4 // indirect + github.com/clbanning/mxj/v2 v2.7.0 // indirect github.com/cloudwego/base64x v0.1.5 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect @@ -123,6 +138,7 @@ require ( github.com/ncruces/go-strftime v0.1.9 // indirect github.com/nwaples/rardecode/v2 v2.0.1 // indirect github.com/otiai10/mint v1.6.3 // indirect + github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -141,6 +157,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/therootcompany/xz v1.0.1 // indirect + github.com/tjfoc/gmsm v1.4.1 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.9.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect @@ -154,6 +171,8 @@ require ( github.com/xuri/nfp v0.0.0-20250111060730-82a408b9aa71 // indirect github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect + go.opentelemetry.io/otel v1.29.0 // indirect + go.opentelemetry.io/otel/trace v1.29.0 // indirect go.uber.org/multierr v1.11.0 // indirect go4.org v0.0.0-20230225012048-214862532bf5 // indirect golang.org/x/arch v0.13.0 // indirect @@ -166,6 +185,7 @@ require ( golang.org/x/tools v0.29.0 // indirect google.golang.org/protobuf v1.36.3 // indirect gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gorm.io/hints v1.1.2 // indirect gorm.io/plugin/dbresolver v1.5.3 // indirect diff --git a/go.sum b/go.sum index d2ad132..21b3906 100644 --- a/go.sum +++ b/go.sum @@ -17,6 +17,12 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +github.com/ArtisanCloud/PowerLibs/v3 v3.3.2 h1:IInr1YWwkhwOykxDqux1Goym0uFhrYwBjmgLnEwCLqs= +github.com/ArtisanCloud/PowerLibs/v3 v3.3.2/go.mod h1:xFGsskCnzAu+6rFEJbGVAlwhrwZPXAny6m7j71S/B5k= +github.com/ArtisanCloud/PowerSocialite/v3 v3.0.7 h1:P+erNlErr+X2v7Et+yTWaTfIRhw+HfpAPdvNIEwk9Gw= +github.com/ArtisanCloud/PowerSocialite/v3 v3.0.7/go.mod h1:VZQNCvcK/rldF3QaExiSl1gJEAkyc5/I8RLOd3WFZq4= +github.com/ArtisanCloud/PowerWeChat/v3 v3.4.6 h1:IOGdt8Lt8EDRl9qBTnX2TxU0Bjx7gdK9Qy+IegyHltY= +github.com/ArtisanCloud/PowerWeChat/v3 v3.4.6/go.mod h1:ybM3u4Lhso0X+ZsgoRCF4e5W1KT2fBc6plpjPZ2fop4= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA= @@ -50,8 +56,58 @@ github.com/STARRY-S/zip v0.1.0 h1:eUER3jKmHKXjv+iy3BekLa+QnNSo1Lqz4eTzYBcGDqo= github.com/STARRY-S/zip v0.1.0/go.mod h1:qj/mTZkvb3AvfGQ2e775/3AODRvB4peSw8KNMvrM8/I= github.com/alex-ant/gomath v0.0.0-20160516115720-89013a210a82 h1:7dONQ3WNZ1zy960TmkxJPuwoolZwL7xKtpcM04MBnt4= github.com/alex-ant/gomath v0.0.0-20160516115720-89013a210a82/go.mod h1:nLnM0KdK1CmygvjpDUO6m1TjSsiQtL61juhNsvV/JVI= +github.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6 h1:eIf+iGJxdU4U9ypaUfbtOWCsZSbTb8AUHvyPrxu6mAA= +github.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6/go.mod h1:4EUIoxs/do24zMOGGqYVWgw0s9NtiylnJglOeEB5UJo= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 h1:zE8vH9C7JiZLNJJQ5OwjU9mSi4T9ef9u3BURT6LCLC8= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5/go.mod h1:tWnyE9AjF8J8qqLk645oUmVUnFybApTQWklQmi5tY6g= +github.com/alibabacloud-go/darabonba-array v0.1.0 h1:vR8s7b1fWAQIjEjWnuF0JiKsCvclSRTfDzZHTYqfufY= +github.com/alibabacloud-go/darabonba-array v0.1.0/go.mod h1:BLKxr0brnggqOJPqT09DFJ8g3fsDshapUD3C3aOEFaI= +github.com/alibabacloud-go/darabonba-encode-util v0.0.2 h1:1uJGrbsGEVqWcWxrS9MyC2NG0Ax+GpOM5gtupki31XE= +github.com/alibabacloud-go/darabonba-encode-util v0.0.2/go.mod h1:JiW9higWHYXm7F4PKuMgEUETNZasrDM6vqVr/Can7H8= +github.com/alibabacloud-go/darabonba-map v0.0.2 h1:qvPnGB4+dJbJIxOOfawxzF3hzMnIpjmafa0qOTp6udc= +github.com/alibabacloud-go/darabonba-map v0.0.2/go.mod h1:28AJaX8FOE/ym8OUFWga+MtEzBunJwQGceGQlvaPGPc= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.10/go.mod h1:26a14FGhZVELuz2cc2AolvW4RHmIO3/HRwsdHhaIPDE= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.7 h1:ASXSBga98QrGMxbIThCD6jAti09gedLfvry6yJtsoBE= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.7/go.mod h1:TBpgqm3XofZz2LCYjZhektGPU7ArEgascyzbm4SjFo4= +github.com/alibabacloud-go/darabonba-signature-util v0.0.7 h1:UzCnKvsjPFzApvODDNEYqBHMFt1w98wC7FOo0InLyxg= +github.com/alibabacloud-go/darabonba-signature-util v0.0.7/go.mod h1:oUzCYV2fcCH797xKdL6BDH8ADIHlzrtKVjeRtunBNTQ= +github.com/alibabacloud-go/darabonba-string v1.0.2 h1:E714wms5ibdzCqGeYJ9JCFywE5nDyvIXIIQbZVFkkqo= +github.com/alibabacloud-go/darabonba-string v1.0.2/go.mod h1:93cTfV3vuPhhEwGGpKKqhVW4jLe7tDpo3LUM0i0g6mA= +github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY= +github.com/alibabacloud-go/debug v1.0.0/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc= +github.com/alibabacloud-go/debug v1.0.1 h1:MsW9SmUtbb1Fnt3ieC6NNZi6aEwrXfDksD4QA6GSbPg= +github.com/alibabacloud-go/debug v1.0.1/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc= +github.com/alibabacloud-go/dysmsapi-20170525/v4 v4.1.2 h1:foU5EWfDi6sF3c9V2Woj74UMmd8Dwa4lTPeE/zqO7RE= +github.com/alibabacloud-go/dysmsapi-20170525/v4 v4.1.2/go.mod h1:+0hEVb1D5a8xOWp/IApSN/gukLm+cfKgLSn98MYE4ik= +github.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q= +github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE= +github.com/alibabacloud-go/openapi-util v0.1.0/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= +github.com/alibabacloud-go/openapi-util v0.1.1 h1:ujGErJjG8ncRW6XtBBMphzHTvCxn4DjrVw4m04HsS28= +github.com/alibabacloud-go/openapi-util v0.1.1/go.mod h1:/UehBSE2cf1gYT43GV4E+RxTdLRzURImCYY0aRmlXpw= +github.com/alibabacloud-go/tea v1.1.0/go.mod h1:IkGyUSX4Ba1V+k4pCtJUc6jDpZLFph9QMy2VUPTwukg= +github.com/alibabacloud-go/tea v1.1.7/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= +github.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= +github.com/alibabacloud-go/tea v1.1.11/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= +github.com/alibabacloud-go/tea v1.1.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.1.20/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.2.2/go.mod h1:CF3vOzEMAG+bR4WOql8gc2G9H3EkH3ZLAQdpmpXMgwk= +github.com/alibabacloud-go/tea v1.3.8 h1:Sk2+BDJC//xJ1/Eljf+Dlg2u2tgWpA9P7mlb87AEcEs= +github.com/alibabacloud-go/tea v1.3.8/go.mod h1:A560v/JTQ1n5zklt2BEpurJzZTI8TUT+Psg2drWlxRg= +github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= +github.com/alibabacloud-go/tea-utils/v2 v2.0.5/go.mod h1:dL6vbUT35E4F4bFTHL845eUloqaerYBYPsdWR2/jhe4= +github.com/alibabacloud-go/tea-utils/v2 v2.0.6/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I= +github.com/alibabacloud-go/tea-utils/v2 v2.0.7 h1:WDx5qW3Xa5ZgJ1c8NfqJkF6w+AU5wB8835UdhPr6Ax0= +github.com/alibabacloud-go/tea-utils/v2 v2.0.7/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I= +github.com/alibabacloud-go/tea-xml v1.1.3/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible h1:8psS8a+wKfiLt1iVDX79F7Y6wUM49Lcha2FMXt4UM8g= github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= +github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw= +github.com/aliyun/credentials-go v1.3.1/go.mod h1:8jKYhQuDawt8x2+fusqa1Y6mPxemTsBEN04dgcAcYz0= +github.com/aliyun/credentials-go v1.3.6/go.mod h1:1LxUuX7L5YrZUWzBrRyk0SwSdH4OmPrib8NVePL3fxM= +github.com/aliyun/credentials-go v1.3.10/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= +github.com/aliyun/credentials-go v1.4.5 h1:O76WYKgdy1oQYYiJkERjlA2dxGuvLRrzuO2ScrtGWSk= +github.com/aliyun/credentials-go v1.4.5/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/aws/aws-sdk-go v1.55.6 h1:cSg4pvZ3m8dgYcgqB97MrcdjUmZ1BeMYKUxMMB89IPk= @@ -88,10 +144,14 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= +github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= +github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dave/jennifer v1.6.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3RmGZc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -107,10 +167,10 @@ github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707/go.mod h1:qssHWj6 github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -git.echol.cn/loser/lckt v0.0.0-20250327142420-7e7ec5229064 h1:FleStwTSVqGqSBhkRbQTGtSbl+6HM/3yKQY70hT3x5Y= -git.echol.cn/loser/lckt v0.0.0-20250327142420-7e7ec5229064/go.mod h1:oMHjLxfdG3L3OxroCNaK6SkelydV0U4eGk8eWTNAopM= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= @@ -135,6 +195,10 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= @@ -193,6 +257,12 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 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.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/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -225,6 +295,8 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= @@ -273,10 +345,12 @@ github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible/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.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= @@ -333,6 +407,8 @@ github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= @@ -348,12 +424,15 @@ github.com/mozillazg/go-httpheader v0.4.0 h1:aBn6aRXtFzyDLZ4VIRLsZbbJloagQfMnCiY github.com/mozillazg/go-httpheader v0.4.0/go.mod h1:PuT8h0pw6efvp8ZeUec1Rs7dwjK08bt6gKSReGMqtdA= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nwaples/rardecode/v2 v2.0.1 h1:3MN6/R+Y4c7e+21U3yhWuUcf72sYmcmr6jtiuAVSH1A= github.com/nwaples/rardecode/v2 v2.0.1/go.mod h1:yntwv/HfMc/Hbvtq9I19D1n58te3h6KsqCf3GxyfBGY= github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8= github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I= github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs= github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= @@ -407,6 +486,9 @@ github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFt github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/songzhibin97/gkit v1.2.13 h1:paY0XJkdRuy9/8k9nTnbdrzo8pC22jIIFldUkOQv5nU= github.com/songzhibin97/gkit v1.2.13/go.mod h1:38CreNR27eTGaG1UMGihrXqI4xc3nGfYxLVKKVx6Ngg= github.com/sorairolake/lzip-go v0.3.5 h1:ms5Xri9o1JBIWvOFAorYtUNik6HI3HgBTkISiqu0Cwg= @@ -422,12 +504,14 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.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/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.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/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -450,6 +534,9 @@ github.com/tencentyun/cos-go-sdk-v5 v0.7.60 h1:/e/tmvRmfKexr/QQIBzWhOkZWsmY3EK72 github.com/tencentyun/cos-go-sdk-v5 v0.7.60/go.mod h1:8+hG+mQMuRP/OIS9d83syAvXvrMj9HhkND6Q1fLghw0= github.com/therootcompany/xz v1.0.1 h1:CmOtsn1CbtmyYiusbfmhmkpAAETj0wBIH6kCYaX+xzw= github.com/therootcompany/xz v1.0.1/go.mod h1:3K3UH1yCKgBneZYhuQUvJ9HPD19UEXEI0BWbMn8qNMY= +github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= +github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= +github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= github.com/tklauser/numcpus v0.9.0 h1:lmyCHtANi8aRUgkckBgoDk1nHCux3n2cgkJLXdQGPDo= @@ -481,6 +568,8 @@ github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZ github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM= github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= @@ -491,6 +580,14 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= +go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= +go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= +go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= +go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= +go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= +go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= +go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -507,7 +604,10 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= @@ -518,8 +618,10 @@ golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= @@ -573,6 +675,9 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/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-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= @@ -586,7 +691,9 @@ golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -600,6 +707,7 @@ 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-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= @@ -621,6 +729,9 @@ golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/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-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -638,8 +749,10 @@ golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= @@ -656,8 +769,10 @@ golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -675,6 +790,7 @@ golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= @@ -688,6 +804,7 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -706,6 +823,7 @@ golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= @@ -745,16 +863,26 @@ google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZi 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/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +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.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU= google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 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/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/log/2025-03-28/error.log b/log/2025-03-28/error.log deleted file mode 100644 index da885ea..0000000 --- a/log/2025-03-28/error.log +++ /dev/null @@ -1,2 +0,0 @@ -[git.echol.cn/loser/lckt]2025-03-28 22:07:32.143 error C:/Users/Administrator/Desktop/lckt/server/api/v1/category/category.go:161 获取失败! {"error": "Error 1146 (42S02): Table 'lckt.categories' doesn't exist"} -[git.echol.cn/loser/lckt]2025-03-28 22:07:37.462 error C:/Users/Administrator/Desktop/lckt/server/api/v1/category/category.go:161 获取失败! {"error": "Error 1146 (42S02): Table 'lckt.categories' doesn't exist"} diff --git a/log/2025-03-28/info.log b/log/2025-03-28/info.log deleted file mode 100644 index 9287e31..0000000 --- a/log/2025-03-28/info.log +++ /dev/null @@ -1,25 +0,0 @@ -[git.echol.cn/loser/lckt]2025-03-28 21:37:57.372 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-03-28 21:37:57.377 info C:/Users/Administrator/Desktop/lckt/server/initialize/plugin.go:10 项目暂未初始化,无法安装插件,初始化后重启项目即可完成插件安装 -[git.echol.cn/loser/lckt]2025-03-28 21:37:57.378 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-03-28 21:37:57.378 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-03-28 21:44:26.187 info C:/Users/Administrator/Desktop/lckt/server/api/v1/system/sys_initdb.go:57 前往初始化数据库 -[git.echol.cn/loser/lckt]2025-03-28 21:46:08.101 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-03-28 21:46:08.134 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-03-28 21:46:08.997 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-03-28 21:46:08.998 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-03-28 21:49:38.325 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-03-28 21:49:38.359 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-03-28 21:49:39.202 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-03-28 21:49:39.202 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-03-28 21:56:23.897 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-03-28 21:56:23.935 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-03-28 21:56:24.865 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-03-28 21:56:24.865 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-03-28 22:03:04.372 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-03-28 22:03:04.409 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-03-28 22:03:05.325 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-03-28 22:03:05.326 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-03-28 22:08:03.543 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-03-28 22:08:03.580 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-03-28 22:08:04.493 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-03-28 22:08:04.493 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} diff --git a/log/2025-04-03/error.log b/log/2025-04-03/error.log deleted file mode 100644 index 904053e..0000000 --- a/log/2025-04-03/error.log +++ /dev/null @@ -1 +0,0 @@ -[git.echol.cn/loser/lckt]2025-04-03 17:04:21.965 error C:/Users/Administrator/Desktop/lckt/server/api/v1/system/sys_user.go:56 登陆失败! 用户名不存在或者密码错误! {"error": "密码错误"} diff --git a/log/2025-04-03/info.log b/log/2025-04-03/info.log deleted file mode 100644 index 0a3f931..0000000 --- a/log/2025-04-03/info.log +++ /dev/null @@ -1,4 +0,0 @@ -[git.echol.cn/loser/lckt]2025-04-03 16:44:04.749 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-03 16:44:04.784 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-03 16:44:05.634 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-04-03 16:44:05.634 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} diff --git a/log/2025-04-09/error.log b/log/2025-04-09/error.log deleted file mode 100644 index 09cefe7..0000000 --- a/log/2025-04-09/error.log +++ /dev/null @@ -1,6 +0,0 @@ -[git.echol.cn/loser/lckt]2025-04-09 11:56:23.490 error C:/Users/Administrator/Desktop/lckt/server/api/v1/article/article.go:18 参数有误! {"error": "invalid character '}' looking for beginning of object key string"} -[git.echol.cn/loser/lckt]2025-04-09 11:57:17.901 error C:/Users/Administrator/Desktop/lckt/server/api/v1/article/article.go:23 创建失败! {"error": "Error 1146 (42S02): Table 'lckt.article' doesn't exist"} -[git.echol.cn/loser/lckt]2025-04-09 11:58:58.317 error C:/Users/Administrator/Desktop/lckt/server/api/v1/article/article.go:52 参数有误! {"error": "invalid character '}' looking for beginning of object key string"} -[git.echol.cn/loser/lckt]2025-04-09 11:59:41.494 error C:/Users/Administrator/Desktop/lckt/server/api/v1/article/article.go:35 参数有误! {"error": "json: cannot unmarshal object into Go value of type []string"} -[git.echol.cn/loser/lckt]2025-04-09 12:01:05.763 error C:/Users/Administrator/Desktop/lckt/server/api/v1/article/article.go:35 参数有误! {"error": "json: cannot unmarshal number into Go struct field DeleteIds.ids of type string"} -[git.echol.cn/loser/lckt]2025-04-09 12:02:35.671 error C:/Users/Administrator/Desktop/lckt/server/api/v1/article/article.go:41 删除失败! {"error": "sql: converting argument $2 type: unsupported type request.DeleteIds, a struct"} diff --git a/log/2025-04-09/info.log b/log/2025-04-09/info.log deleted file mode 100644 index 41aa22b..0000000 --- a/log/2025-04-09/info.log +++ /dev/null @@ -1,46 +0,0 @@ -[git.echol.cn/loser/lckt]2025-04-09 10:52:11.988 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-09 10:52:12.021 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-09 10:52:12.856 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-04-09 10:52:12.856 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-04-09 10:57:32.057 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-09 10:57:32.091 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-09 10:57:32.892 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-04-09 10:57:32.892 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-04-09 11:08:25.203 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-09 11:08:25.242 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-09 11:08:26.222 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-04-09 11:08:26.223 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-04-09 11:13:20.423 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-09 11:13:20.461 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-09 11:13:21.392 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-04-09 11:13:21.392 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-04-09 11:47:30.968 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-09 11:47:31.002 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-09 11:48:28.705 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-09 11:48:28.740 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-09 11:48:29.585 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-04-09 11:48:29.585 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-04-09 11:52:13.750 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-09 11:52:13.786 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-09 11:52:14.677 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-04-09 11:52:14.678 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-04-09 11:58:20.324 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-09 11:58:20.363 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-09 11:58:21.305 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-04-09 11:58:21.305 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-04-09 12:01:03.057 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-09 12:01:03.091 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-09 12:01:03.936 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-04-09 12:01:03.937 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-04-09 12:02:28.681 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-09 12:02:28.718 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-09 12:02:29.660 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-04-09 12:02:29.660 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-04-09 12:03:22.537 info C:/Users/Administrator/Desktop/lckt/server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-09 12:03:22.573 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-09 12:03:23.455 info C:/Users/Administrator/Desktop/lckt/server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-04-09 12:03:23.455 info C:/Users/Administrator/Desktop/lckt/server/core/server.go:38 server run success on {"address": ":8888"} -[git.echol.cn/loser/lckt]2025-04-09 12:14:32.734 info C:/Users/Administrator/GolandProjects/zb/lckt-server/initialize/gorm.go:77 register table success -[git.echol.cn/loser/lckt]2025-04-09 12:14:32.768 info C:/Users/Administrator/GolandProjects/zb/lckt-server/initialize/router.go:60 register swagger handler -[git.echol.cn/loser/lckt]2025-04-09 12:14:33.632 info C:/Users/Administrator/GolandProjects/zb/lckt-server/initialize/router.go:109 router register success -[git.echol.cn/loser/lckt]2025-04-09 12:14:33.632 info C:/Users/Administrator/GolandProjects/zb/lckt-server/core/server.go:38 server run success on {"address": ":8888"} diff --git a/model/article/article.go b/model/article/article.go index ee0dcf3..377ac97 100644 --- a/model/article/article.go +++ b/model/article/article.go @@ -6,11 +6,12 @@ import ( type Article struct { global.GVA_MODEL - Title string `json:"title" gorm:"comment:文章标题"` - Desc string `json:"desc" gorm:"comment:文章描述"` - Content string `json:"content" gorm:"comment:文章内容"` - CoverImg string `json:"coverImg" gorm:"comment:文章封面图"` - Price int64 `json:"price" gorm:"comment:文章价格(单位为分)"` + Title string `json:"title" gorm:"comment:文章标题"` + Desc string `json:"desc" gorm:"comment:文章描述"` + Content string `json:"content" gorm:"comment:文章内容"` + CoverImg string `json:"coverImg" gorm:"comment:文章封面图"` + TeacherId int `json:"teacherId" gorm:"comment:讲师ID"` + Price int64 `json:"price" gorm:"comment:文章价格(单位为分)"` } // TableName 文章表 diff --git a/model/article/vo/article.go b/model/article/vo/article.go new file mode 100644 index 0000000..9a9494d --- /dev/null +++ b/model/article/vo/article.go @@ -0,0 +1,13 @@ +package vo + +type ArticleVo struct { + ID int `json:"id" gorm:"comment:文章ID"` + Title string `json:"title" gorm:"comment:文章标题"` + Desc string `json:"desc" gorm:"comment:文章描述"` + Content string `json:"content" gorm:"comment:文章内容"` + CoverImg string `json:"coverImg" gorm:"comment:文章封面图"` + Price int64 `json:"price" gorm:"comment:文章价格(单位为分)"` + TeacherId int `json:"teacherId" gorm:"comment:讲师ID"` + TeacherName string `json:"teacherName" gorm:"comment:讲师名称"` + TeacherAvatar string `json:"teacherAvatar" gorm:"comment:讲师头像"` +} diff --git a/model/user/request/jwt.go b/model/user/request/jwt.go new file mode 100644 index 0000000..90b858f --- /dev/null +++ b/model/user/request/jwt.go @@ -0,0 +1,15 @@ +package request + +import "github.com/golang-jwt/jwt/v5" + +type BaseClaims struct { + NickName string `json:"nickName"` + ID uint `json:"id"` + Phone string `json:"phone"` +} + +type CustomClaims struct { + BaseClaims + BufferTime int64 + jwt.RegisteredClaims +} diff --git a/model/user/request/user.go b/model/user/request/user.go new file mode 100644 index 0000000..71a93a4 --- /dev/null +++ b/model/user/request/user.go @@ -0,0 +1,42 @@ +package request + +type SendCodeReq struct { + Phone string `json:"phone" vd:"@:len($)>0; msg:'手机号码不能为空'"` +} + +type CodeLoginReq struct { + Phone string `json:"phone" vd:"@:len($)>0; msg:'请输入手机号码'"` + Code string `json:"code" vd:"@:len($)>0; msg:'请输入短信验证码'"` +} + +type InviteLoginReq struct { + Phone string `json:"phone" vd:"@:len($)>0; msg:'手机号码不能为空'"` + Code string `json:"code" vd:"@:len($)>0; msg:'验证码不能为空'"` + Type string `json:"type" vd:"@:len($)>0; msg:'邀请类型不能为空'"` + Token string `json:"token" vd:"@:len($)>0; msg:'token不能为空'"` +} + +type WxLoginReq struct { + OpenId string `json:"openId" binding:"required"` + NickName string `json:"nickName"` + Gender int `json:"gender"` + UnionId string `json:"unionId" binding:"required"` + AvatarUrl string `json:"avatarUrl"` + Province string `json:"province"` + City string `json:"city"` +} + +type BindWechatReq struct { + Id int `json:"id" vd:"@:len($)>0; msg:'id不能为空'"` + Openid string `json:"openid" vd:"@:len($)>0; msg:'OpenId不能为空'"` + UnionId string `json:"unionId" gorm:"type:varchar(64);comment:用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的 unionid 是唯一的。"` +} + +type BindQQReq struct { + QQ string `json:"qq" vd:"@:len($)>0; msg:'QQ号不能为空'"` +} + +type BindPhoneReq struct { + Id int `json:"id" vd:"@:len($)>0; msg:'用户ID不能为空'"` + Phone string `json:"phone" vd:"@:len($)>0; msg:'手机号码不能为空'"` +} diff --git a/model/user/user.go b/model/user/user.go new file mode 100644 index 0000000..5c58afc --- /dev/null +++ b/model/user/user.go @@ -0,0 +1,23 @@ +package user + +import "git.echol.cn/loser/lckt/global" + +type User struct { + global.GVA_MODEL + NickName string `json:"nick_name" gorm:"comment:用户昵称"` + Phone string `json:"phone" gorm:"comment:用户手机号"` + UnionId string `json:"union_id" gorm:"type:varchar(255) comment '微信UnionId'"` + OpenId string `gorm:"column:open_id;default:'';comment:'openId'" json:"-"` + Avatar string `json:"avatar" gorm:"comment:用户头像"` + Status int8 `gorm:"column:status;default:1;NOT NULL;comment:'用户状态 0 封禁 1 正常'" json:"status"` + //邀请码 + InviteCode *string `json:"invite_code" gorm:"type:varchar(255) comment '用户专属邀请码'"` + Balance float32 `json:"balance" gorm:"type:decimal(10,2);comment:学员余额"` + CommenderId int `json:"commender_id" gorm:"comment:推荐人ID"` + UserLabel string `json:"user_label" gorm:"type:varchar(255) comment '用户标签 普通/VIP/SVIP'"` + UserType int8 `gorm:"column:user_type;default:1;NOT NULL;comment:'用户类型 1 用户 2 讲师'" json:"user_type"` +} + +func (User) TableName() string { + return "app_user" +} diff --git a/service/enter.go b/service/enter.go index 5a7f5bb..01f1564 100644 --- a/service/enter.go +++ b/service/enter.go @@ -6,6 +6,7 @@ import ( "git.echol.cn/loser/lckt/service/category" "git.echol.cn/loser/lckt/service/example" "git.echol.cn/loser/lckt/service/system" + "git.echol.cn/loser/lckt/service/user" ) var ServiceGroupApp = new(ServiceGroup) @@ -16,4 +17,5 @@ type ServiceGroup struct { CategoryServiceGroup category.ServiceGroup BotServiceGroup bot.ServiceGroup ArticleGroup article.ServiceGroup + UserServiceGroup user.ServiceGroup } diff --git a/service/user/enter.go b/service/user/enter.go new file mode 100644 index 0000000..333a789 --- /dev/null +++ b/service/user/enter.go @@ -0,0 +1,3 @@ +package user + +type ServiceGroup struct{ UserService } diff --git a/service/user/user.go b/service/user/user.go new file mode 100644 index 0000000..861ddf3 --- /dev/null +++ b/service/user/user.go @@ -0,0 +1,80 @@ +package user + +import ( + "context" + "fmt" + "git.echol.cn/loser/lckt/global" + "git.echol.cn/loser/lckt/model/user" + "git.echol.cn/loser/lckt/model/user/request" + "git.echol.cn/loser/lckt/utils/sms" + "go.uber.org/zap" + "math/rand" + "time" +) + +type UserService struct{} + +func (u *UserService) GetUserById(id int) (user user.User, err error) { + + return +} + +// SendCode 发送验证码 +func (u *UserService) SendCode(req request.SendCodeReq) (err error) { + rdb := global.GVA_REDIS + + key := fmt.Sprintf("VerifyCode:%s", req.Phone) + + // 发送频率检查 + result, err := rdb.Get(context.Background(), key).Result() + if result != "" { + global.GVA_LOG.Error("验证码发送过于频繁", zap.String("phone", req.Phone)) + return + } + + rand.New(rand.NewSource(time.Now().UnixNano())) + verifyCode := fmt.Sprintf("%06v", rand.Int31n(1000000)) + + if ok := sms.SendSMS(req.Phone, verifyCode); !ok { + global.GVA_LOG.Error("发送验证码失败") + return + } + // + if err = rdb.Set(context.Background(), key, verifyCode, time.Duration(global.GVA_CONFIG.SMS.ExpireTime)*time.Second).Err(); err != nil { + global.GVA_LOG.Error("设置验证码缓存失败", zap.Error(err)) + return + } + + return +} + +// Login 用户登录 +func (u *UserService) Login(req request.CodeLoginReq) (users user.User, err error) { + // 1. 判断用户是否存在 + var count int64 + err = global.GVA_DB.Model(&user.User{}).Where("phone = ?", req.Phone).Count(&count).Error + if err != nil { + global.GVA_LOG.Error("查询用户失败", zap.Error(err)) + return + } + + // 2. 如果用户不存在,则创建用户 + if count == 0 { + user := user.User{ + Phone: req.Phone, + } + err = global.GVA_DB.Save(&user).Error + if err != nil { + global.GVA_LOG.Error("创建用户失败", zap.Error(err)) + return + } + } else { + err = global.GVA_DB.Where("phone = ?", req.Phone).First(&users).Error + if err != nil { + global.GVA_LOG.Error("查询用户失败", zap.Error(err)) + return + } + } + + return +}