From c08d7f84ea0e872f0896972eacdfd590ce969211 Mon Sep 17 00:00:00 2001 From: jiahui Date: Thu, 23 Nov 2023 10:23:35 +0800 Subject: [PATCH 01/16] init message notification --- go.mod | 14 ++++ go.sum | 70 ++++++++++++++++++ go.work.sum | 102 +++++++++++++++++++++++--- service/go.work | 1 + service/notification/alisms.go | 80 ++++++++++++++++++++ service/notification/common.go | 1 + service/notification/email.go | 25 +++++++ service/notification/email_test.go | 8 ++ service/notification/go.mod | 5 ++ service/notification/inferface.go | 9 +++ service/notification/types/message.go | 4 + service/notification/types/options.go | 4 + service/notification/types/user.go | 4 + 13 files changed, 318 insertions(+), 9 deletions(-) create mode 100644 service/notification/alisms.go create mode 100644 service/notification/common.go create mode 100644 service/notification/email.go create mode 100644 service/notification/email_test.go create mode 100644 service/notification/go.mod create mode 100644 service/notification/inferface.go create mode 100644 service/notification/types/message.go create mode 100644 service/notification/types/options.go create mode 100644 service/notification/types/user.go diff --git a/go.mod b/go.mod index fe948fd0d5d..2cfa82508a0 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,10 @@ require ( github.com/BurntSushi/toml v1.3.2 github.com/Masterminds/semver/v3 v3.2.1 github.com/Masterminds/sprig/v3 v3.2.3 + github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4 + github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6 + github.com/alibabacloud-go/tea v1.2.1 + github.com/alibabacloud-go/tea-utils/v2 v2.0.4 github.com/containerd/containerd v1.7.2 github.com/containers/buildah v1.30.0 github.com/containers/common v0.53.0 @@ -70,11 +74,19 @@ require ( github.com/Microsoft/hcsshim v0.10.0-rc.8 // indirect github.com/VividCortex/ewma v1.2.0 // indirect github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect + github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect + github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect + github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect + github.com/alibabacloud-go/openapi-util v0.1.0 // indirect + github.com/alibabacloud-go/tea-utils v1.3.1 // indirect + github.com/alibabacloud-go/tea-xml v1.1.2 // indirect + github.com/aliyun/credentials-go v1.1.2 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/clbanning/mxj/v2 v2.5.5 // indirect github.com/container-orchestrated-devices/container-device-interface v0.5.4 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect @@ -199,6 +211,7 @@ require ( github.com/tchap/go-patricia/v2 v2.3.1 // indirect github.com/theupdateframework/go-tuf v0.5.2 // indirect github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect + github.com/tjfoc/gmsm v1.3.2 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/vbatts/tar-split v0.11.3 // indirect github.com/vbauerster/mpb/v8 v8.4.0 // indirect @@ -228,6 +241,7 @@ require ( google.golang.org/protobuf v1.31.0 // indirect gopkg.in/go-jose/go-jose.v2 v2.6.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 3e67dfce55b..4394770d9a9 100644 --- a/go.sum +++ b/go.sum @@ -35,6 +35,37 @@ github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpH github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 h1:iC9YFYKDGEy3n/FtqJnOkZsene9olVspKmkX5A2YBEo= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.2/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4 h1:7Q2FEyqxeZeIkwYMwRC3uphxV4i7O2eV4ETe21d6lS4= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ= +github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 h1:NqugFkGxx1TXSh/pBcU00Y6bljgDPaFdh5MUSeJ7e50= +github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY= +github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6 h1:UTl97mt2qfavxveqCkaVg4tKaZUPzA9RKbFIRaIdtdg= +github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6/go.mod h1:UWpcGrWwTbES9QW7OQ7xDffukMJ/l7lzioixIz8+lgY= +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.0.11/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= +github.com/alibabacloud-go/openapi-util v0.1.0 h1:0z75cIULkDrdEhkLWgi9tnLe+KhAFE/r5Pb3312/eAY= +github.com/alibabacloud-go/openapi-util v0.1.0/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= +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.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.1.19/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.2.1 h1:rFF1LnrAdhaiPmKwH5xwYOKlMh66CqRwPUTzIK74ask= +github.com/alibabacloud-go/tea v1.2.1/go.mod h1:qbzof29bM/IFhLMtJPrgTGK3eauV5J2wSyEUo4OEmnA= +github.com/alibabacloud-go/tea-utils v1.3.1 h1:iWQeRzRheqCMuiF3+XkfybB3kTgUXkXX+JMrqfLeB2I= +github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= +github.com/alibabacloud-go/tea-utils/v2 v2.0.0/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4= +github.com/alibabacloud-go/tea-utils/v2 v2.0.3/go.mod h1:sj1PbjPodAVTqGTA3olprfeeqqmwD0A5OQz94o9EuXQ= +github.com/alibabacloud-go/tea-utils/v2 v2.0.4 h1:SoFgjJuO7pze88j9RBJNbKb7AgTS52O+J5ITxc00lCs= +github.com/alibabacloud-go/tea-utils/v2 v2.0.4/go.mod h1:sj1PbjPodAVTqGTA3olprfeeqqmwD0A5OQz94o9EuXQ= +github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M= +github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= +github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY= +github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= @@ -65,6 +96,8 @@ github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObk github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= +github.com/clbanning/mxj/v2 v2.5.5 h1:oT81vUeEiQQ/DcHbzSytRngP6Ky9O+L+0Bw0zSJag9E= +github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -297,6 +330,8 @@ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +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/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -334,9 +369,11 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +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/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= @@ -545,7 +582,10 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +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/assertions v1.13.1 h1:Ef7KhSmjZcK6AVf9YbJdvPYG9avaF0ZxudX+ThRdWfU= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.8.0 h1:Oi49ha/2MURE0WexF052Z0m+BNSGirfjg5RL+JXWq3w= github.com/smartystreets/goconvey v1.8.0/go.mod h1:EdX8jtrTIj26jmjCOVNMVSIYAtgexqXKHOXW2Dx9JLg= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -563,6 +603,7 @@ github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= 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 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -586,6 +627,8 @@ github.com/theupdateframework/go-tuf v0.5.2/go.mod h1:SyMV5kg5n4uEclsyxXJZI2UxPF github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= +github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM= +github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= @@ -618,6 +661,7 @@ github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= 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.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -656,7 +700,9 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= 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-20200302210943-78000ba7a073/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-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -664,6 +710,7 @@ golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -677,6 +724,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -691,6 +739,7 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/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-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-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -703,6 +752,10 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -716,9 +769,11 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190412183630-56d357773e84/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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -743,6 +798,7 @@ golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/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-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -762,11 +818,17 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -778,6 +840,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= @@ -786,6 +850,7 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -793,11 +858,13 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -855,6 +922,9 @@ gopkg.in/go-jose/go-jose.v2 v2.6.1 h1:qEzJlIDmG9q5VO0M/o8tGS65QMHMS1w01TQJB1VPJ4 gopkg.in/go-jose/go-jose.v2 v2.6.1/go.mod h1:zzZDPkNNw/c9IE7Z9jr11mBZQhKQTMzoEEIoEdZlFBI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +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/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= diff --git a/go.work.sum b/go.work.sum index 93664cca7df..cdfcf05be36 100644 --- a/go.work.sum +++ b/go.work.sum @@ -2311,58 +2311,111 @@ github.com/tsenart/vegeta/v12 v12.8.4/go.mod h1:ZiJtwLn/9M4fTPdMY7bdbIeyNeFVE8/A github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/urfave/cli v1.19.1/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.12 h1:igJgVw1JdKH+trcLWLeLwZjU9fEfPesQ+9/e4MQ44S8= +github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= +github.com/vbauerster/mpb/v7 v7.5.3 h1:BkGfmb6nMrrBQDFECR/Q7RkKCw7ylMetCb4079CGs4w= +github.com/vektah/gqlparser/v2 v2.4.5 h1:C02NsyEsL4TXJB7ndonqTfuQOL4XPIu0aAWugdmTgmc= github.com/vektah/gqlparser/v2 v2.4.5/go.mod h1:flJWIR04IMQPGz+BXLrORkrARBxv/rtyIAFvd/MceW0= github.com/veraison/go-cose v1.0.0-rc.1/go.mod h1:7ziE85vSq4ScFTg6wyoMXjucIGOf4JkFEZi/an96Ct4= +github.com/veraison/go-cose v1.1.0 h1:AalPS4VGiKavpAzIlBjrn7bhqXiXi4jbMYY/2+UC+4o= github.com/veraison/go-cose v1.1.0/go.mod h1:7ziE85vSq4ScFTg6wyoMXjucIGOf4JkFEZi/an96Ct4= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vmware/govmomi v0.20.3 h1:gpw/0Ku+6RgF3jsi7fnCLmlcikBHfKBCUcu1qgc16OU= github.com/wechatpay-apiv3/wechatpay-go v0.2.17 h1:i4YJA/6BqAbi2YfyPZBjpeEeO/+oa4UbKP4gSTRhhQg= +github.com/weppos/publicsuffix-go v0.20.1-0.20221209102050-40d9c30084b3 h1:ypyhoprZWFzU0ydOBv3I5SS7/jLFJ+ujPAU+BD/EVFM= +github.com/willf/bitset v1.1.11 h1:N7Z7E9UvjW+sGsEl7k/SJrvY2reP1A07MrGuCjIOjRE= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= +github.com/xhit/go-str2duration v1.2.0 h1:BcV5u025cITWxEQKGWr1URRzrcXtu7uk8+luz3Yuhwc= +github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc= github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= +github.com/yashtewari/glob-intersection v0.1.0 h1:6gJvMYQlTDOL3dMsPF6J0+26vwX9MB8/1q3uAdhmTrg= github.com/yashtewari/glob-intersection v0.1.0/go.mod h1:LK7pIC3piUjovexikBbJ26Yml7g8xa5bsjfx2v1fwok= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= +github.com/ysmood/fetchup v0.2.3 h1:ulX+SonA0Vma5zUFXtv52Kzip/xe7aj4vqT5AJwQ+ZQ= +github.com/ysmood/goob v0.4.0 h1:HsxXhyLBeGzWXnqVKtmT9qM7EuVs/XOgkX7T6r1o1AQ= +github.com/ysmood/got v0.34.1 h1:IrV2uWLs45VXNvZqhJ6g2nIhY+pgIG1CUoOcqfXFl1s= +github.com/ysmood/gson v0.7.3 h1:QFkWbTH8MxyUTKPkVWAENJhxqdBa4lYTQWqZCiLG6kE= +github.com/ysmood/leakless v0.8.0 h1:BzLrVoiwxikpgEQR0Lk8NyBN5Cit2b1z+u0mgL4ZJak= +github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= +github.com/zalando/go-keyring v0.1.1 h1:w2V9lcx/Uj4l+dzAf1m9s+DJ1O8ROkEHnynonHjTcYE= +github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= +github.com/zmap/zcrypto v0.0.0-20220402174210-599ec18ecbac h1:+nr36qrZEH0RIYNjcUEnOrCUdcSG3om2ANaFA6iSVWA= +github.com/zmap/zlint/v3 v3.4.0 h1:Xs/lrMJY74MpJx/jSx2oVvZBrqlyUyFaLLBRyf68cqg= +go.etcd.io/etcd/api/v3 v3.5.4 h1:OHVyt3TopwtUQ2GKdd5wu3PmmipR4FTwCqoEjSyRdIc= +go.etcd.io/etcd/client/pkg/v3 v3.5.4 h1:lrneYvz923dvC14R54XcA7FXoZ3mlGZAgmwhfm7HqOg= +go.etcd.io/etcd/client/v2 v2.305.4 h1:Dcx3/MYyfKcPNLpR4VVQUP5KgYrBeJtktBwEKkw08Ao= +go.etcd.io/etcd/client/v3 v3.5.4 h1:p83BUL3tAYS0OT/r0qglgc3M1JjhM0diV8DSWAhVXv4= +go.etcd.io/etcd/pkg/v3 v3.5.4 h1:V5Dvl7S39ZDwjkKqJG2BfXgxZ3QREqqKifWQgIw5IM0= +go.etcd.io/etcd/raft/v3 v3.5.4 h1:YGrnAgRfgXloBNuqa+oBI/aRZMcK/1GS6trJePJ/Gqc= +go.etcd.io/etcd/server/v3 v3.5.4 h1:CMAZd0g8Bn5NRhynW6pKhc4FRg41/0QYy3d7aNm9874= +go.etcd.io/gofail v0.1.0 h1:XItAMIhOojXFQMgrxjnd2EIIHun/d5qL0Pf7FzVTkFg= go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= +go.opentelemetry.io/contrib v0.20.0 h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0= +go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful v0.20.0 h1:8YW+SL62UmcwRQJFZVfnyOlIUUtmlR13NaMKi+Fa6Fo= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.40.0 h1:5jD3teb4Qh7mx/nfzq4jO2WFFpvXD0vYWFDrdvNWmXk= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.40.0/go.mod h1:UMklln0+MRhZC4e3PwmN3pCtq4DyIadWw4yikh6bNrw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0 h1:mac9BKRqwaX6zxHPDe3pvmWpwuuIM0vuXv2juCnQevE= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0/go.mod h1:5eCOqeGphOyz6TsY3ZDNjE33SM/TFAK3RGuCL2naTgY= go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= +go.opentelemetry.io/otel/exporters/otlp v0.20.0 h1:PTNgq9MRmQqqJY0REVbZFvwkYOA85vbdQU/nVfxDyqg= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0/go.mod h1:M1hVZHNxcbkAlcvrOMlpQ4YOO3Awf+4N2dxkZL3xm04= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0/go.mod h1:UFG7EBMRdXyFstOwH028U0sVf+AvukSGhF0g8+dmNG8= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.0 h1:ZSdnH1x5Gm/eUFNQquwSt4/LMCOqS6KPlI9qaTKx5Ho= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.0/go.mod h1:uOTV75+LOzV+ODmL8ahRLWkFA3eQcSC2aAsbxIu4duk= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.7.0/go.mod h1:ceUgdyfNv4h4gLxHR0WNfDiiVmZFodZhZSbOLhpxqXE= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0/go.mod h1:HrbCVv40OOLTABmOn1ZWty6CHXkU8DK/Urc43tHug70= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.0 h1:rk5I7PaOk5NGQHfHR2Rz6MgdA8AYQSHwsigFsOxEC1c= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.0/go.mod h1:pvkFJxNUXyJ5i8u6m8NIcqkoOf/65VM2mSyBbBJfeVQ= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.7.0/go.mod h1:E+/KKhwOSw8yoPxSSuUHG6vKppkvhN+S1Jc7Nib3k3o= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0/go.mod h1:5w41DY6S9gZrbjuq6Y+753e96WfPha5IcsOSZTtullM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.0 h1:rHD0vfQbtki6/FnsMzTpAOgdv+Ku+T6R47MZXmgelf8= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.0/go.mod h1:RPagkaZrpwD+rSwQjzos6rBLsHOvenOqufCj4/7I46E= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.14.0 h1:3jAYbRHQAqzLjd9I4tzxwJ8Pk/N6AqBcF6m1ZHrxG94= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.14.0/go.mod h1:+N7zNjIJv4K+DeX67XXET0P+eIciESgaFDBqh+ZJFS4= go.opentelemetry.io/otel/metric v0.30.0/go.mod h1:/ShZ7+TS4dHzDFmfi1kSXMhMVubNoP0oIaBp70J6UXU= +go.opentelemetry.io/otel/metric v0.37.0 h1:pHDQuLQOZwYD+Km0eb657A25NaRzy0a+eLyKfDXedEs= go.opentelemetry.io/otel/metric v0.37.0/go.mod h1:DmdaHfGt54iV6UKxsV9slj2bBRJcKC1B1uvDLIioc1s= +go.opentelemetry.io/otel/oteltest v0.20.0 h1:HiITxCawalo5vQzdHfKeZurV8x7ljcqAgiWzF6Vaeaw= go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU= go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM= +go.opentelemetry.io/otel/sdk v1.15.0 h1:jZTCkRRd08nxD6w7rIaZeDNGZGGQstH3SfLQ3ZsKICk= go.opentelemetry.io/otel/sdk v1.15.0/go.mod h1:XDEMrYWzJ4YlC17i6Luih2lwDw2j6G0PkUfr1ZqE+rQ= +go.opentelemetry.io/otel/sdk/export/metric v0.20.0 h1:c5VRjxCXdQlx1HjzwGdQHzZaVI82b5EbBgOu2ljD92g= +go.opentelemetry.io/otel/sdk/metric v0.20.0 h1:7ao1wpzHRVKf0OQ7GIxiQJA6X7DLX9o14gmVon7mMK8= go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU= go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8= go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= go.opentelemetry.io/proto/otlp v0.16.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.step.sm/crypto v0.31.2 h1:GJX4A15zXxxcbuS++g2SvETTitAUClGIfg5QnKlscDs= +go.uber.org/automaxprocs v1.5.1 h1:e1YG66Lrk73dn4qhg8WFSvhF0JuFQF0ERIp4rpuV8Qk= go.uber.org/automaxprocs v1.5.1/go.mod h1:BF4eumQw0P9GtnuxxovUd06vwm1o18oMzFtK66vU6XU= go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +goa.design/goa v2.2.5+incompatible h1:mjAtiy7ZdZIkj974hpFxCR6bL69qprfV00Veu3Vybts= +gocloud.dev v0.29.0 h1:fBy0jwJSmxs0IjT0fE32MO+Mj+307VZQwyHaTyFZbC4= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= @@ -2374,16 +2427,16 @@ golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= @@ -2391,7 +2444,6 @@ golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2403,34 +2455,34 @@ golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E= google.golang.org/api v0.123.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.124.0 h1:dP6Ef1VgOGqQ8eiv4GiY8RhmeyqzovcXBYPDUYG8Syo= google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= +google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8 h1:Cpp2P6TPjujNoC5M2KHY6g7wfyLYfIWRZaSdIKfDasA= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= @@ -2443,6 +2495,7 @@ google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVix google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54 h1:9NWlQfY2ePejTmfwUH1OWwmznFa+0kKcHGPDvcPza9M= google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9 h1:m8v1xLLLzMe1m5P+gCTF8nJB9epwZQUBERm20Oy1poQ= google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/grpc v1.18.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= @@ -2451,14 +2504,45 @@ google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11 google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= +gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/gcfg.v1 v1.2.0 h1:0HIbH907iBTAntm+88IJV2qmJALDAh8sPekI9Vc1fm0= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 h1:OAj3g0cR6Dx/R07QgQe8wkA9RNjB2u4i700xBkIT4e0= +gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= +gopkg.in/warnings.v0 v0.1.1 h1:XM28wIgFzaBmeZ5dNHIpWLQpt/9DGKxk+rCg/22nnYE= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= +k8s.io/cloud-provider v0.25.6 h1:xxJg78XIeotzLRaXlk8HgZ+OsOWy5uBmDCkErGtgkl0= +k8s.io/code-generator v0.25.6 h1:md8jqhQiMqos8WaTY0ZxhDk8ttlmJl/ijCneJ8ahBNQ= +k8s.io/controller-manager v0.25.6 h1:m6TOcxj20Na0mBg3d8596XdEsgdGwa0Fp36YsgS1G5o= +k8s.io/csi-translation-lib v0.25.6 h1:MnMgkTkhYfkyq4r9Bcem3TCjxZdlbSoyphZygJqoToE= +k8s.io/gengo v0.0.0-20211129171323-c02415ce4185 h1:TT1WdmqqXareKxZ/oNXEUSwKlLiHzPMyB0t8BaFeBYI= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-aggregator v0.25.6 h1:+8OPm8EAD98Vguqdz5mWQ0dMqa5A9QUtspGYDjWAwvY= +k8s.io/kube-controller-manager v0.25.6 h1:FKYRr7lmvOZNDQlXJk3WhhBVG+hchWaFuubtNGMC1sA= +k8s.io/kube-scheduler v0.25.6 h1:Wbxc1u8I6CWhi48vINZl1AJ9R7LEKX5PAqJomlknd7I= +k8s.io/legacy-cloud-providers v0.25.6 h1:r0b+6jCmB7YiF79xrUTTFUJ40Q85wxhe4yhQ9/cIVMg= +k8s.io/metrics v0.25.6 h1:EezfQTfTsSW/Cs9oHJXAftRlbL0fnHfDh02ObTOs/34= +k8s.io/mount-utils v0.25.6 h1:7fK5wzp7F93PZiz7RdnvEavRVuoe89yJ+zspy4hrzGc= +k8s.io/pod-security-admission v0.25.6 h1:xBoOFwzhi2Yz1m2wURl0v8lu7HBem+vig2ByOlc7UfY= +k8s.io/sample-apiserver v0.25.6 h1:3YyQmSBsYK/zXofIEuk0SFTcg0XhXLWo56CSgWDwTk8= +k8s.io/system-validators v1.8.0 h1:tq05tdO9zdJZnNF3SXrq6LE7Knc/KfJm5wk68467JDg= k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +knative.dev/pkg v0.0.0-20230404101938-ee73c9355c9d h1:mubqXUjYfnwNg3IGWYEj2YffXYIxg44Qn9GS5vPAjck= oras.land/oras-go v1.2.0/go.mod h1:pFNs7oHp2dYsYMSS82HaX5l4mpnGO7hbpPN6EWH2ltc= +rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= +rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= +rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.35 h1:+xBL5uTc+BkPBwmMi3vYfUJjq+N3K+H6PXeETwf5cPI= +sigs.k8s.io/kustomize/kustomize/v4 v4.5.7 h1:cDW6AVMl6t/SLuQaezMET8hgnadZGIAr8tUrxFVOrpg= +sigs.k8s.io/release-utils v0.7.4 h1:17LmJrydpUloTCtaoWj95uKlcrUp4h2A9Sa+ZL+lV9w= sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= diff --git a/service/go.work b/service/go.work index cbfa2e45998..40394e2d9a4 100644 --- a/service/go.work +++ b/service/go.work @@ -3,6 +3,7 @@ go 1.20 use ( ./database ./pay + ./notification ) replace ( diff --git a/service/notification/alisms.go b/service/notification/alisms.go new file mode 100644 index 00000000000..70e3c2b96c0 --- /dev/null +++ b/service/notification/alisms.go @@ -0,0 +1,80 @@ +package notification + +import ( + //"os" + // + //openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + //dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" + //util "github.com/alibabacloud-go/tea-utils/v2/service" + //"github.com/alibabacloud-go/tea/tea" + "github.com/labring/sealos/service/notification/types" +) + +type AliSms struct { +} + +func (s *AliSms) SendMessage(message *types.Message, user *types.User, ops types.Options) error { + return nil +} + +//func CreateClient(accessKeyId *string, accessKeySecret *string) (_result *dysmsapi20170525.Client, _err error) { +// config := &openapi.Config{ +// // 必填,您的 AccessKey ID +// AccessKeyId: accessKeyId, +// // 必填,您的 AccessKey Secret +// AccessKeySecret: accessKeySecret, +// } +// // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi +// config.Endpoint = tea.String("dysmsapi.aliyuncs.com") +// _result = &dysmsapi20170525.Client{} +// _result, _err = dysmsapi20170525.NewClient(config) +// return _result, _err +//} +// +//func _main(args []*string) (_err error) { +// // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 +// // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378661.html +// client, _err := CreateClient(tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))) +// if _err != nil { +// return _err +// } +// +// sendSmsRequest := &dysmsapi20170525.SendSmsRequest{} +// runtime := &util.RuntimeOptions{} +// tryErr := func() (_e error) { +// defer func() { +// if r := tea.Recover(recover()); r != nil { +// _e = r +// } +// }() +// // 复制代码运行请自行打印 API 的返回值 +// _, _err = client.SendSmsWithOptions(sendSmsRequest, runtime) +// if _err != nil { +// return _err +// } +// +// return nil +// }() +// +// if tryErr != nil { +// var error = &tea.SDKError{} +// if _t, ok := tryErr.(*tea.SDKError); ok { +// error = _t +// } else { +// error.Message = tea.String(tryErr.Error()) +// } +// // 如有需要,请打印 error +// _, _err = util.AssertAsString(error.Message) +// if _err != nil { +// return _err +// } +// } +// return _err +//} +// +//func main() { +// err := _main(tea.StringSlice(os.Args[1:])) +// if err != nil { +// panic(err) +// } +//} diff --git a/service/notification/common.go b/service/notification/common.go new file mode 100644 index 00000000000..4306c87f12a --- /dev/null +++ b/service/notification/common.go @@ -0,0 +1 @@ +package notification diff --git a/service/notification/email.go b/service/notification/email.go new file mode 100644 index 00000000000..13fd742b1af --- /dev/null +++ b/service/notification/email.go @@ -0,0 +1,25 @@ +package notification + +import ( + "fmt" + "net/smtp" + + "github.com/labring/sealos/service/notification/types" +) + +type Email struct { +} + +func (e *Email) SendMessage(message *types.Message, user *types.User, ops types.Options) error { + return nil +} + +func sendMail(smtpServer, smtpPort, from, password, to string, message []byte) error { + addr := fmt.Sprintf("%s:%s", smtpServer, smtpPort) + auth := smtp.PlainAuth("", from, password, smtpServer) + err := smtp.SendMail(addr, auth, from, []string{to}, message) + if err != nil { + return err + } + return nil +} diff --git a/service/notification/email_test.go b/service/notification/email_test.go new file mode 100644 index 00000000000..83bedc611a3 --- /dev/null +++ b/service/notification/email_test.go @@ -0,0 +1,8 @@ +package notification + +import ( + "testing" +) + +func Test_sendMail(t *testing.T) { +} diff --git a/service/notification/go.mod b/service/notification/go.mod new file mode 100644 index 00000000000..c22405ef00a --- /dev/null +++ b/service/notification/go.mod @@ -0,0 +1,5 @@ +module github.com/labring/sealos/service/notification + +go 1.20 + +require github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible diff --git a/service/notification/inferface.go b/service/notification/inferface.go new file mode 100644 index 00000000000..4d1087a1344 --- /dev/null +++ b/service/notification/inferface.go @@ -0,0 +1,9 @@ +package notification + +import "github.com/labring/sealos/service/notification/types" + +type ChannelType string + +type Interface interface { + SendMessage(message *types.Message, user *types.User, opts *types.Options) error +} diff --git a/service/notification/types/message.go b/service/notification/types/message.go new file mode 100644 index 00000000000..b5586e5aa2f --- /dev/null +++ b/service/notification/types/message.go @@ -0,0 +1,4 @@ +package types + +type Message struct { +} diff --git a/service/notification/types/options.go b/service/notification/types/options.go new file mode 100644 index 00000000000..bd0159c6d37 --- /dev/null +++ b/service/notification/types/options.go @@ -0,0 +1,4 @@ +package types + +type Options struct { +} diff --git a/service/notification/types/user.go b/service/notification/types/user.go new file mode 100644 index 00000000000..cb5750b6830 --- /dev/null +++ b/service/notification/types/user.go @@ -0,0 +1,4 @@ +package types + +type User struct { +} From 94fab62c0bc9a74f06df10357f4e521aa679d8b4 Mon Sep 17 00:00:00 2001 From: jiahui Date: Mon, 27 Nov 2023 16:23:02 +0800 Subject: [PATCH 02/16] optimize notification type --- .../account/controllers/account_controller.go | 2 +- .../account/controllers/billing_controller.go | 2 +- .../billinginfoquery_controller.go | 2 +- .../billingrecordquery_controller.go | 4 +- .../namespacebillinghistory_controller.go | 6 +- .../controllers/transfer_controller.go | 2 +- controllers/account/main.go | 4 +- controllers/pkg/database/interface.go | 23 ++++ .../database/{mongodb.go => mongo/account.go} | 106 +++++++++--------- .../account_test.go} | 47 ++++---- controllers/pkg/database/mongo/user.go | 28 +++++ controllers/pkg/database/mongo/user_test.go | 25 +++++ controllers/pkg/types/User.go | 15 +++ controllers/resources/main.go | 4 +- 14 files changed, 182 insertions(+), 88 deletions(-) rename controllers/pkg/database/{mongodb.go => mongo/account.go} (91%) rename controllers/pkg/database/{mongodb_test.go => mongo/account_test.go} (93%) create mode 100644 controllers/pkg/database/mongo/user.go create mode 100644 controllers/pkg/database/mongo/user_test.go create mode 100644 controllers/pkg/types/User.go diff --git a/controllers/account/controllers/account_controller.go b/controllers/account/controllers/account_controller.go index 03f881d8bcf..5ac690a605a 100644 --- a/controllers/account/controllers/account_controller.go +++ b/controllers/account/controllers/account_controller.go @@ -71,7 +71,7 @@ type AccountReconciler struct { Scheme *runtime.Scheme Logger logr.Logger AccountSystemNamespace string - DBClient database.Interface + DBClient database.Account MongoDBURI string } diff --git a/controllers/account/controllers/billing_controller.go b/controllers/account/controllers/billing_controller.go index 39f5bbf82d7..665658cd5ec 100644 --- a/controllers/account/controllers/billing_controller.go +++ b/controllers/account/controllers/billing_controller.go @@ -60,7 +60,7 @@ type BillingReconciler struct { Scheme *runtime.Scheme logr.Logger AccountSystemNamespace string - DBClient database.Interface + DBClient database.Account Properties *resources.PropertyTypeLS } diff --git a/controllers/account/controllers/billinginfoquery_controller.go b/controllers/account/controllers/billinginfoquery_controller.go index a84c94589fb..86156c30eae 100644 --- a/controllers/account/controllers/billinginfoquery_controller.go +++ b/controllers/account/controllers/billinginfoquery_controller.go @@ -43,7 +43,7 @@ type BillingInfoQueryReconciler struct { client.Client logr.Logger Scheme *runtime.Scheme - DBClient database.Interface + DBClient database.Account Properties *resources.PropertyTypeLS propertiesQuery []accountv1.PropertyQuery QueryFuncMap map[string]func(context.Context, ctrl.Request, *accountv1.BillingInfoQuery) (string, error) diff --git a/controllers/account/controllers/billingrecordquery_controller.go b/controllers/account/controllers/billingrecordquery_controller.go index 8a87366a705..e4da6dca53d 100644 --- a/controllers/account/controllers/billingrecordquery_controller.go +++ b/controllers/account/controllers/billingrecordquery_controller.go @@ -23,6 +23,8 @@ import ( "strconv" "time" + "github.com/labring/sealos/controllers/pkg/database/mongo" + "github.com/go-logr/logr" accountv1 "github.com/labring/sealos/controllers/account/api/v1" @@ -71,7 +73,7 @@ func (r *BillingRecordQueryReconciler) Reconcile(ctx context.Context, req ctrl.R _ = log.FromContext(ctx) dbCtx := context.Background() - dbClient, err := database.NewMongoDB(dbCtx, r.MongoDBURI) + dbClient, err := mongo.NewMongoInterface(dbCtx, r.MongoDBURI) if err != nil { r.Logger.Error(err, "connect mongo client failed") return ctrl.Result{Requeue: true}, err diff --git a/controllers/account/controllers/namespacebillinghistory_controller.go b/controllers/account/controllers/namespacebillinghistory_controller.go index d3ae83d1b40..36abb44ff11 100644 --- a/controllers/account/controllers/namespacebillinghistory_controller.go +++ b/controllers/account/controllers/namespacebillinghistory_controller.go @@ -22,6 +22,8 @@ import ( "os" "time" + "github.com/labring/sealos/controllers/pkg/database/mongo" + userv1 "github.com/labring/sealos/controllers/user/api/v1" "github.com/go-logr/logr" @@ -59,7 +61,7 @@ type NamespaceBillingHistoryReconciler struct { // - https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.11.2/pkg/reconcile func (r *NamespaceBillingHistoryReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { dbCtx := context.Background() - dbClient, err := database.NewMongoDB(dbCtx, r.MongoDBURI) + dbClient, err := mongo.NewMongoInterface(dbCtx, r.MongoDBURI) if err != nil { r.Logger.Error(err, "connect mongo client failed") return ctrl.Result{Requeue: true}, err @@ -91,7 +93,7 @@ func (r *NamespaceBillingHistoryReconciler) Reconcile(ctx context.Context, req c return ctrl.Result{}, client.IgnoreNotFound(err) } -func (r *NamespaceBillingHistoryReconciler) reconcile(ctx context.Context, req ctrl.Request, dbClient database.Interface, nsHistory *accountv1.NamespaceBillingHistory) error { +func (r *NamespaceBillingHistoryReconciler) reconcile(ctx context.Context, req ctrl.Request, dbClient database.Account, nsHistory *accountv1.NamespaceBillingHistory) error { user := &userv1.User{} if err := r.Get(ctx, client.ObjectKey{Namespace: req.Namespace, Name: getUsername(req.Namespace)}, user); err != nil { return fmt.Errorf("get user failed: %w", err) diff --git a/controllers/account/controllers/transfer_controller.go b/controllers/account/controllers/transfer_controller.go index 5665f7840f3..ef05f79a307 100644 --- a/controllers/account/controllers/transfer_controller.go +++ b/controllers/account/controllers/transfer_controller.go @@ -51,7 +51,7 @@ type TransferReconciler struct { client.Client Scheme *runtime.Scheme AccountSystemNamespace string - DBClient database.Interface + DBClient database.Account } //TODO add user, account role diff --git a/controllers/account/main.go b/controllers/account/main.go index 70009dffe9c..d77d14f6159 100644 --- a/controllers/account/main.go +++ b/controllers/account/main.go @@ -22,6 +22,8 @@ import ( "os" "time" + "github.com/labring/sealos/controllers/pkg/database/mongo" + "github.com/labring/sealos/controllers/pkg/resources" "github.com/labring/sealos/controllers/pkg/database" @@ -118,7 +120,7 @@ func main() { RateLimiter: rate.GetRateLimiter(rateLimiterOptions), } dbCtx := context.Background() - dbClient, err := database.NewMongoDB(dbCtx, os.Getenv(database.MongoURI)) + dbClient, err := mongo.NewMongoInterface(dbCtx, os.Getenv(database.MongoURI)) if err != nil { setupLog.Error(err, "unable to connect to mongo") os.Exit(1) diff --git a/controllers/pkg/database/interface.go b/controllers/pkg/database/interface.go index 2e5245d811c..132a9d3316c 100644 --- a/controllers/pkg/database/interface.go +++ b/controllers/pkg/database/interface.go @@ -18,11 +18,22 @@ import ( "context" "time" + "github.com/labring/sealos/controllers/pkg/types" + accountv1 "github.com/labring/sealos/controllers/account/api/v1" "github.com/labring/sealos/controllers/pkg/resources" ) type Interface interface { + Account + Auth +} + +type Auth interface { + GetUser(k8sUser string) (*types.User, error) +} + +type Account interface { //InitDB() error GetBillingLastUpdateTime(owner string, _type accountv1.Type) (bool, time.Time, error) GetBillingHistoryNamespaceList(ns *accountv1.NamespaceBillingHistorySpec, owner string) ([]string, error) @@ -55,3 +66,15 @@ type MeteringOwnerTimeResult struct { Amount int64 `bson:"amount"` Costs map[string]int64 `bson:"costs"` } + +//func NewDBInterface(ctx context.Context, mongoURI string) (Interface, error) { +// return mongo.NewMongoInterface(ctx, mongoURI) +//} + +const ( + MongoURI = "MONGO_URI" + //MongoUsername = "MONGO_USERNAME" + //MongoPassword = "MONGO_PASSWORD" + //RetentionDay = "RETENTION_DAY" + //PermanentRetention = "PERMANENT_RETENTION" +) diff --git a/controllers/pkg/database/mongodb.go b/controllers/pkg/database/mongo/account.go similarity index 91% rename from controllers/pkg/database/mongodb.go rename to controllers/pkg/database/mongo/account.go index 921af925c01..d844e52d933 100644 --- a/controllers/pkg/database/mongodb.go +++ b/controllers/pkg/database/mongo/account.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package database +package mongo import ( "context" @@ -22,6 +22,8 @@ import ( "strings" "time" + "github.com/labring/sealos/controllers/pkg/database" + gonanoid "github.com/matoous/go-nanoid/v2" accountv1 "github.com/labring/sealos/controllers/account/api/v1" @@ -38,33 +40,28 @@ import ( ) const ( - DefaultDBName = "sealos-resources" + DefaultAccountDBName = "sealos-resources" + DefaultAuthDBName = "sealos-auth" DefaultMeteringConn = "metering" DefaultMonitorConn = "monitor" DefaultBillingConn = "billing" + DefaultUserConn = "user" DefaultPricesConn = "prices" DefaultPropertiesConn = "properties" ) const DefaultRetentionDay = 30 -const ( - MongoURI = "MONGO_URI" - MongoUsername = "MONGO_USERNAME" - MongoPassword = "MONGO_PASSWORD" - RetentionDay = "RETENTION_DAY" - PermanentRetention = "PERMANENT_RETENTION" -) - // override this value at build time const defaultCryptoKey = "Af0b2Bc5e9d0C84adF0A5887cF43aB63" var cryptoKey = defaultCryptoKey -type MongoDB struct { - URL string +type mongoDB struct { Client *mongo.Client - DBName string + AccountDB string + AuthDB string + UserConn string MonitorConnPrefix string MeteringConn string BillingConn string @@ -79,11 +76,11 @@ type AccountBalanceSpecBSON struct { accountv1.BillingRecordQueryItemInline `json:",inline" bson:",inline"` } -func (m *MongoDB) Disconnect(ctx context.Context) error { +func (m *mongoDB) Disconnect(ctx context.Context) error { return m.Client.Disconnect(ctx) } -func (m *MongoDB) GetBillingLastUpdateTime(owner string, _type accountv1.Type) (bool, time.Time, error) { +func (m *mongoDB) GetBillingLastUpdateTime(owner string, _type accountv1.Type) (bool, time.Time, error) { filter := bson.M{ "owner": owner, "type": _type, @@ -106,7 +103,7 @@ func (m *MongoDB) GetBillingLastUpdateTime(owner string, _type accountv1.Type) ( return false, time.Time{}, fmt.Errorf("failed to convert time field to primitive.DateTime: %v", result["time"]) } -func (m *MongoDB) GetUnsettingBillingHandler(owner string) ([]resources.BillingHandler, error) { +func (m *mongoDB) GetUnsettingBillingHandler(owner string) ([]resources.BillingHandler, error) { filter := bson.M{ "owner": owner, "status": bson.M{ @@ -135,7 +132,7 @@ func (m *MongoDB) GetUnsettingBillingHandler(owner string) ([]resources.BillingH return results, nil } -func (m *MongoDB) UpdateBillingStatus(orderID string, status resources.BillingStatus) error { +func (m *mongoDB) UpdateBillingStatus(orderID string, status resources.BillingStatus) error { // create a query filter filter := bson.M{"order_id": orderID} update := bson.M{ @@ -150,7 +147,7 @@ func (m *MongoDB) UpdateBillingStatus(orderID string, status resources.BillingSt return nil } -func (m *MongoDB) GetBillingHistoryNamespaces(startTime, endTime *time.Time, billType int, owner string) ([]string, error) { +func (m *mongoDB) GetBillingHistoryNamespaces(startTime, endTime *time.Time, billType int, owner string) ([]string, error) { filter := bson.M{ "owner": owner, } @@ -188,7 +185,7 @@ func (m *MongoDB) GetBillingHistoryNamespaces(startTime, endTime *time.Time, bil return result.Namespaces, nil } -func (m *MongoDB) GetBillingHistoryNamespaceList(nsHistorySpec *accountv1.NamespaceBillingHistorySpec, owner string) ([]string, error) { +func (m *mongoDB) GetBillingHistoryNamespaceList(nsHistorySpec *accountv1.NamespaceBillingHistorySpec, owner string) ([]string, error) { filter := bson.M{ "owner": owner, } @@ -226,7 +223,7 @@ func (m *MongoDB) GetBillingHistoryNamespaceList(nsHistorySpec *accountv1.Namesp return result.Namespaces, nil } -func (m *MongoDB) SaveBillings(billing ...*resources.Billing) error { +func (m *mongoDB) SaveBillings(billing ...*resources.Billing) error { billings := make([]interface{}, len(billing)) for i, b := range billing { billings[i] = b @@ -237,7 +234,7 @@ func (m *MongoDB) SaveBillings(billing ...*resources.Billing) error { // InsertMonitor insert monitor data to mongodb collection monitor + time (eg: monitor_20200101) // The monitor data is saved daily 2020-12-01 00:00:00 - 2020-12-01 23:59:59 => monitor_20201201 -func (m *MongoDB) InsertMonitor(ctx context.Context, monitors ...*resources.Monitor) error { +func (m *mongoDB) InsertMonitor(ctx context.Context, monitors ...*resources.Monitor) error { if len(monitors) == 0 { return nil } @@ -249,7 +246,7 @@ func (m *MongoDB) InsertMonitor(ctx context.Context, monitors ...*resources.Moni return err } -func (m *MongoDB) GetAllPricesMap() (map[string]resources.Price, error) { +func (m *mongoDB) GetAllPricesMap() (map[string]resources.Price, error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() cursor, err := m.getPricesCollection().Find(ctx, bson.M{}) @@ -279,7 +276,7 @@ func (m *MongoDB) GetAllPricesMap() (map[string]resources.Price, error) { return pricesMap, nil } -func (m *MongoDB) InitDefaultPropertyTypeLS() error { +func (m *mongoDB) InitDefaultPropertyTypeLS() error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() cursor, err := m.getPropertiesCollection().Find(ctx, bson.M{}) @@ -296,7 +293,7 @@ func (m *MongoDB) InitDefaultPropertyTypeLS() error { return nil } -func (m *MongoDB) SavePropertyTypes(types []resources.PropertyType) error { +func (m *mongoDB) SavePropertyTypes(types []resources.PropertyType) error { tps := make([]interface{}, len(types)) for i, b := range types { tps[i] = b @@ -307,7 +304,7 @@ func (m *MongoDB) SavePropertyTypes(types []resources.PropertyType) error { // 2020-12-01 23:00:00 - 2020-12-02 00:00:00 // 2020-12-02 00:00:00 - 2020-12-02 01:00:00 -func (m *MongoDB) GenerateMeteringData(startTime, endTime time.Time, prices map[string]resources.Price) error { +func (m *mongoDB) GenerateMeteringData(startTime, endTime time.Time, prices map[string]resources.Price) error { filter := bson.M{ "time": bson.M{ "$gte": startTime, @@ -398,7 +395,7 @@ func (m *MongoDB) GenerateMeteringData(startTime, endTime time.Time, prices map[ Name: resourceMap[name].Name(), }) */ -func (m *MongoDB) GenerateBillingData(startTime, endTime time.Time, prols *resources.PropertyTypeLS, namespaces []string, owner string) (orderID []string, amount int64, err error) { +func (m *mongoDB) GenerateBillingData(startTime, endTime time.Time, prols *resources.PropertyTypeLS, namespaces []string, owner string) (orderID []string, amount int64, err error) { minutes := endTime.Sub(startTime).Minutes() groupStage := bson.D{ @@ -554,7 +551,7 @@ func (m *MongoDB) GenerateBillingData(startTime, endTime time.Time, prols *resou return orderID, amount, nil } -func (m *MongoDB) GetUpdateTimeForCategoryAndPropertyFromMetering(category string, property string) (time.Time, error) { +func (m *mongoDB) GetUpdateTimeForCategoryAndPropertyFromMetering(category string, property string) (time.Time, error) { filter := bson.M{"category": category, "property": property} // sort by time desc opts := options.FindOne().SetSort(bson.D{primitive.E{Key: "time", Value: -1}}) @@ -573,7 +570,7 @@ func (m *MongoDB) GetUpdateTimeForCategoryAndPropertyFromMetering(category strin return result.Time, nil } -func (m *MongoDB) queryBillingRecordsByOrderID(billingRecordQuery *accountv1.BillingRecordQuery, owner string) error { +func (m *mongoDB) queryBillingRecordsByOrderID(billingRecordQuery *accountv1.BillingRecordQuery, owner string) error { if billingRecordQuery.Spec.OrderID == "" { return fmt.Errorf("order id is empty") } @@ -642,7 +639,7 @@ func (m *MongoDB) queryBillingRecordsByOrderID(billingRecordQuery *accountv1.Bil return nil } -func (m *MongoDB) QueryBillingRecords(billingRecordQuery *accountv1.BillingRecordQuery, owner string) (err error) { +func (m *mongoDB) QueryBillingRecords(billingRecordQuery *accountv1.BillingRecordQuery, owner string) (err error) { if billingRecordQuery.Spec.OrderID != "" { return m.queryBillingRecordsByOrderID(billingRecordQuery, owner) } @@ -836,7 +833,7 @@ func (m *MongoDB) QueryBillingRecords(billingRecordQuery *accountv1.BillingRecor return nil } -func (m *MongoDB) GetBillingCount(accountType accountv1.Type, startTime, endTime time.Time) (count, amount int64, err error) { +func (m *mongoDB) GetBillingCount(accountType accountv1.Type, startTime, endTime time.Time) (count, amount int64, err error) { filter := bson.M{ "type": accountType, "time": bson.M{ @@ -869,38 +866,38 @@ func (m *MongoDB) GetBillingCount(accountType accountv1.Type, startTime, endTime return } -func (m *MongoDB) getMeteringCollection() *mongo.Collection { - return m.Client.Database(m.DBName).Collection(m.MeteringConn) +func (m *mongoDB) getMeteringCollection() *mongo.Collection { + return m.Client.Database(m.AccountDB).Collection(m.MeteringConn) } -func (m *MongoDB) getMonitorCollection(collTime time.Time) *mongo.Collection { +func (m *mongoDB) getMonitorCollection(collTime time.Time) *mongo.Collection { // 2020-12-01 00:00:00 - 2020-12-01 23:59:59 - return m.Client.Database(m.DBName).Collection(m.getMonitorCollectionName(collTime)) + return m.Client.Database(m.AccountDB).Collection(m.getMonitorCollectionName(collTime)) } -func (m *MongoDB) getMonitorCollectionName(collTime time.Time) string { +func (m *mongoDB) getMonitorCollectionName(collTime time.Time) string { // Calculate the suffix by day, for example, the suffix on the first day of 202012 is 20201201 return fmt.Sprintf("%s_%s", m.MonitorConnPrefix, collTime.Format("20060102")) } -func (m *MongoDB) getPricesCollection() *mongo.Collection { - return m.Client.Database(m.DBName).Collection(m.PricesConn) +func (m *mongoDB) getPricesCollection() *mongo.Collection { + return m.Client.Database(m.AccountDB).Collection(m.PricesConn) } -func (m *MongoDB) getBillingCollection() *mongo.Collection { - return m.Client.Database(m.DBName).Collection(m.BillingConn) +func (m *mongoDB) getBillingCollection() *mongo.Collection { + return m.Client.Database(m.AccountDB).Collection(m.BillingConn) } -func (m *MongoDB) getPropertiesCollection() *mongo.Collection { - return m.Client.Database(m.DBName).Collection(m.PropertiesConn) +func (m *mongoDB) getPropertiesCollection() *mongo.Collection { + return m.Client.Database(m.AccountDB).Collection(m.PropertiesConn) } -func (m *MongoDB) CreateBillingIfNotExist() error { - if exist, err := m.collectionExist(m.DBName, m.BillingConn); exist || err != nil { +func (m *mongoDB) CreateBillingIfNotExist() error { + if exist, err := m.collectionExist(m.AccountDB, m.BillingConn); exist || err != nil { return err } ctx := context.Background() - err := m.Client.Database(m.DBName).CreateCollection(ctx, m.BillingConn) + err := m.Client.Database(m.AccountDB).CreateCollection(ctx, m.BillingConn) if err != nil { return fmt.Errorf("failed to create collection for billing: %w", err) } @@ -928,11 +925,11 @@ func (m *MongoDB) CreateBillingIfNotExist() error { } // CreateMonitorTimeSeriesIfNotExist creates the time series table for monitor -func (m *MongoDB) CreateMonitorTimeSeriesIfNotExist(collTime time.Time) error { - return m.CreateTimeSeriesIfNotExist(m.DBName, m.getMonitorCollectionName(collTime)) +func (m *mongoDB) CreateMonitorTimeSeriesIfNotExist(collTime time.Time) error { + return m.CreateTimeSeriesIfNotExist(m.AccountDB, m.getMonitorCollectionName(collTime)) } -func (m *MongoDB) CreateTimeSeriesIfNotExist(dbName, collectionName string) error { +func (m *mongoDB) CreateTimeSeriesIfNotExist(dbName, collectionName string) error { // Check if the collection already exists if exist, err := m.collectionExist(dbName, collectionName); exist || err != nil { return err @@ -946,8 +943,8 @@ func (m *MongoDB) CreateTimeSeriesIfNotExist(dbName, collectionName string) erro return m.Client.Database(dbName).RunCommand(context.TODO(), cmd).Err() } -func (m *MongoDB) DropMonitorCollectionsOlderThan(days int) error { - db := m.Client.Database(m.DBName) +func (m *mongoDB) DropMonitorCollectionsOlderThan(days int) error { + db := m.Client.Database(m.AccountDB) // Get the current time minus the number of days cutoffDate := time.Now().UTC().AddDate(0, 0, -days) cutoffName := m.getMonitorCollectionName(cutoffDate) @@ -968,22 +965,23 @@ func (m *MongoDB) DropMonitorCollectionsOlderThan(days int) error { return nil } -func (m *MongoDB) collectionExist(dbName, collectionName string) (bool, error) { +func (m *mongoDB) collectionExist(dbName, collectionName string) (bool, error) { // Check if the collection already exists collections, err := m.Client.Database(dbName).ListCollectionNames(context.Background(), bson.M{"name": collectionName}) return len(collections) > 0, err } -func NewMongoDB(ctx context.Context, URL string) (Interface, error) { +func NewMongoInterface(ctx context.Context, URL string) (database.Interface, error) { client, err := mongo.Connect(ctx, options.Client().ApplyURI(URL)) if err != nil { return nil, err } err = client.Ping(ctx, nil) - return &MongoDB{ + return &mongoDB{ Client: client, - URL: URL, - DBName: DefaultDBName, + AccountDB: DefaultAccountDBName, + AuthDB: DefaultAuthDBName, + UserConn: DefaultUserConn, MeteringConn: DefaultMeteringConn, MonitorConnPrefix: DefaultMonitorConn, BillingConn: DefaultBillingConn, diff --git a/controllers/pkg/database/mongodb_test.go b/controllers/pkg/database/mongo/account_test.go similarity index 93% rename from controllers/pkg/database/mongodb_test.go rename to controllers/pkg/database/mongo/account_test.go index ec8d43cdc49..397b33ae089 100644 --- a/controllers/pkg/database/mongodb_test.go +++ b/controllers/pkg/database/mongo/account_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package database +package mongo import ( "context" @@ -36,7 +36,7 @@ import ( func TestMongoDB_QueryBillingRecords(t *testing.T) { dbCTX := context.Background() - m, err := NewMongoDB(dbCTX, os.Getenv("MONGODB_URI")) + m, err := NewMongoInterface(dbCTX, os.Getenv("MONGODB_URI")) if err != nil { t.Errorf("failed to connect mongo: error = %v", err) } @@ -121,7 +121,7 @@ func TestMongoDB_QueryBillingRecords(t *testing.T) { func TestMongoDB_QueryBillingRecords1(t *testing.T) { dbCTX := context.Background() - m, err := NewMongoDB(dbCTX, os.Getenv("MONGODB_URI")) + m, err := NewMongoInterface(dbCTX, os.Getenv("MONGODB_URI")) if err != nil { t.Errorf("failed to connect mongo: error = %v", err) } @@ -157,7 +157,7 @@ func TestMongoDB_QueryBillingRecords2(t *testing.T) { dbCTX := context.Background() os.Setenv("MONGODB_URI", "mongodb://root:lv4nfcgz@127.0.0.1:64110/sealos-resources?authSource=admin&directConnection=true") - m, err := NewMongoDB(dbCTX, os.Getenv("MONGODB_URI")) + m, err := NewMongoInterface(dbCTX, os.Getenv("MONGODB_URI")) if err != nil { t.Errorf("failed to connect mongo: error = %v", err) } @@ -310,7 +310,7 @@ func TestMongoDB_SaveBillingsWithAccountBalance(t *testing.T) { dbCTX := context.Background() - m, err := NewMongoDB(dbCTX, os.Getenv("MONGODB_URI")) + m, err := NewMongoInterface(dbCTX, os.Getenv("MONGODB_URI")) if err != nil { t.Errorf("failed to connect mongo: error = %v", err) } @@ -350,10 +350,9 @@ func TestMongoDB_getBillingCollection(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - m := &MongoDB{ - URL: tt.fields.URL, + m := &mongoDB{ Client: tt.fields.Client, - DBName: tt.fields.DBName, + AccountDB: tt.fields.DBName, MonitorConnPrefix: tt.fields.MonitorConn, MeteringConn: tt.fields.MeteringConn, BillingConn: tt.fields.BillingConn, @@ -383,10 +382,9 @@ func TestMongoDB_getMeteringCollection(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - m := &MongoDB{ - URL: tt.fields.URL, + m := &mongoDB{ Client: tt.fields.Client, - DBName: tt.fields.DBName, + AccountDB: tt.fields.DBName, MonitorConnPrefix: tt.fields.MonitorConn, MeteringConn: tt.fields.MeteringConn, BillingConn: tt.fields.BillingConn, @@ -417,10 +415,9 @@ func TestMongoDB_getMonitorCollection(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - m := &MongoDB{ - URL: tt.fields.URL, + m := &mongoDB{ Client: tt.fields.Client, - DBName: tt.fields.DBName, + AccountDB: tt.fields.DBName, MonitorConnPrefix: tt.fields.MonitorConn, MeteringConn: tt.fields.MeteringConn, BillingConn: tt.fields.BillingConn, @@ -432,7 +429,7 @@ func TestMongoDB_getMonitorCollection(t *testing.T) { } } -func TestNewMongoDB(t *testing.T) { +func TestNewMongoInterface(t *testing.T) { type args struct { ctx context.Context URL string @@ -440,20 +437,20 @@ func TestNewMongoDB(t *testing.T) { tests := []struct { name string args args - want *MongoDB + want *mongoDB wantErr bool }{ // TODO: Add test cases. } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got, err := NewMongoDB(tt.args.ctx, tt.args.URL) + got, err := NewMongoInterface(tt.args.ctx, tt.args.URL) if (err != nil) != tt.wantErr { - t.Errorf("NewMongoDB() error = %v, wantErr %v", err, tt.wantErr) + t.Errorf("NewMongoInterface() error = %v, wantErr %v", err, tt.wantErr) return } if !reflect.DeepEqual(got, tt.want) { - t.Errorf("NewMongoDB() got = %v, want %v", got, tt.want) + t.Errorf("NewMongoInterface() got = %v, want %v", got, tt.want) } }) } @@ -462,7 +459,7 @@ func TestNewMongoDB(t *testing.T) { func TestMongoDB_GetBillingLastUpdateTime(t *testing.T) { dbCTX := context.Background() - m, err := NewMongoDB(dbCTX, os.Getenv("MONGODB_URI")) + m, err := NewMongoInterface(dbCTX, os.Getenv("MONGODB_URI")) if err != nil { t.Errorf("failed to connect mongo: error = %v", err) } @@ -485,7 +482,7 @@ func TestMongoDB_GetBillingLastUpdateTime(t *testing.T) { func TestMongoDB_GetAllPricesMap(t *testing.T) { dbCTX := context.Background() - m, err := NewMongoDB(dbCTX, os.Getenv("MONGODB_URI")) + m, err := NewMongoInterface(dbCTX, os.Getenv("MONGODB_URI")) if err != nil { t.Errorf("failed to connect mongo: error = %v", err) } @@ -503,7 +500,7 @@ func TestMongoDB_GetAllPricesMap(t *testing.T) { func TestMongoDB_DropMonitorCollectionsOlderThan(t *testing.T) { dbCTX := context.Background() - m, err := NewMongoDB(dbCTX, os.Getenv("MONGODB_URI")) + m, err := NewMongoInterface(dbCTX, os.Getenv("MONGODB_URI")) if err != nil { t.Errorf("failed to connect mongo: error = %v", err) } @@ -520,7 +517,7 @@ func TestMongoDB_DropMonitorCollectionsOlderThan(t *testing.T) { func TestMongoDB_GetBillingHistoryNamespaceList(t *testing.T) { dbCTX := context.Background() - m, err := NewMongoDB(dbCTX, os.Getenv("MONGODB_URI")) + m, err := NewMongoInterface(dbCTX, os.Getenv("MONGODB_URI")) if err != nil { t.Errorf("failed to connect mongo: error = %v", err) } @@ -552,7 +549,7 @@ info generate billing data used {2 ns-7uyfrr47 pay-xy map[0:325 1:166 2:0]} func TestMongoDB_GenerateBillingData(t *testing.T) { dbCTX := context.Background() - m, err := NewMongoDB(dbCTX, os.Getenv("MONGODB_URI")) + m, err := NewMongoInterface(dbCTX, os.Getenv("MONGODB_URI")) if err != nil { t.Errorf("failed to connect mongo: error = %v", err) } @@ -574,7 +571,7 @@ func TestMongoDB_GenerateBillingData(t *testing.T) { func TestMongoDB_SetPropertyTypeLS(t *testing.T) { dbCTX := context.Background() - m, err := NewMongoDB(dbCTX, os.Getenv("MONGODB_URI")) + m, err := NewMongoInterface(dbCTX, os.Getenv("MONGODB_URI")) if err != nil { t.Errorf("failed to connect mongo: error = %v", err) } diff --git a/controllers/pkg/database/mongo/user.go b/controllers/pkg/database/mongo/user.go new file mode 100644 index 00000000000..ac12b8e9f57 --- /dev/null +++ b/controllers/pkg/database/mongo/user.go @@ -0,0 +1,28 @@ +package mongo + +import ( + "context" + "fmt" + + "go.mongodb.org/mongo-driver/bson" + + "github.com/labring/sealos/controllers/pkg/types" + "go.mongodb.org/mongo-driver/mongo" +) + +func (m *mongoDB) GetUser(name string) (*types.User, error) { + collection := m.getUserCollection() + if collection == nil { + return nil, fmt.Errorf("failed to get user collection") + } + var user types.User + err := collection.FindOne(context.Background(), bson.M{"k8s_users.name": name}).Decode(&user) + if err != nil { + return nil, fmt.Errorf("failed to find user: error = %v", err) + } + return &user, nil +} + +func (m *mongoDB) getUserCollection() *mongo.Collection { + return m.Client.Database(m.AuthDB).Collection(m.UserConn) +} diff --git a/controllers/pkg/database/mongo/user_test.go b/controllers/pkg/database/mongo/user_test.go new file mode 100644 index 00000000000..9ce1c841790 --- /dev/null +++ b/controllers/pkg/database/mongo/user_test.go @@ -0,0 +1,25 @@ +package mongo + +import ( + "context" + "os" + "testing" +) + +func Test_mongoDB_GetUser(t *testing.T) { + dbCTX := context.Background() + m, err := NewMongoInterface(dbCTX, os.Getenv("MONGODB_URI")) + if err != nil { + t.Errorf("failed to connect mongo: error = %v", err) + } + defer func() { + if err = m.Disconnect(dbCTX); err != nil { + t.Errorf("failed to disconnect mongo: error = %v", err) + } + }() + users, err := m.GetUser("admin") + if err != nil { + t.Errorf("failed to get user: error = %v", err) + } + t.Logf("users: %v", users) +} diff --git a/controllers/pkg/types/User.go b/controllers/pkg/types/User.go new file mode 100644 index 00000000000..1400c3fff2c --- /dev/null +++ b/controllers/pkg/types/User.go @@ -0,0 +1,15 @@ +package types + +type User struct { + //UID string `bson:"uid" json:"uid"` + //Name string `bson:"name" json:"name"` + //Email string `bson:"email" json:"email"` + Phone string `bson:"phone" json:"phone"` + //Wechat string `bson:"wechat" json:"wechat"` + //CreatedTime string `bson:"created_time" json:"created_time"` + K8sUsers []K8sUser `bson:"k8s_users" json:"k8s_users"` +} + +type K8sUser struct { + Name string `bson:"name" json:"name"` +} diff --git a/controllers/resources/main.go b/controllers/resources/main.go index 0ed2659e350..a70b73a5cb4 100644 --- a/controllers/resources/main.go +++ b/controllers/resources/main.go @@ -22,6 +22,8 @@ import ( "os" "time" + "github.com/labring/sealos/controllers/pkg/database/mongo" + "github.com/labring/sealos/controllers/pkg/database" "github.com/labring/sealos/controllers/pkg/resources" @@ -111,7 +113,7 @@ func main() { setupLog.Error(err, "failed to init monitor reconciler") os.Exit(1) } - reconciler.DBClient, err = database.NewMongoDB(context.Background(), os.Getenv(database.MongoURI)) + reconciler.DBClient, err = mongo.NewMongoInterface(context.Background(), os.Getenv(database.MongoURI)) if err != nil { setupLog.Error(err, "failed to init db client") os.Exit(1) From efac5b180077602fae9448c4eece33c6e7050b33 Mon Sep 17 00:00:00 2001 From: jiahui Date: Mon, 27 Nov 2023 16:24:10 +0800 Subject: [PATCH 03/16] optimize notification struct --- .../notification/api/v1/notification_types.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/controllers/pkg/notification/api/v1/notification_types.go b/controllers/pkg/notification/api/v1/notification_types.go index 7ff5f588328..61732dfcab4 100644 --- a/controllers/pkg/notification/api/v1/notification_types.go +++ b/controllers/pkg/notification/api/v1/notification_types.go @@ -29,11 +29,20 @@ const Low Type = "Low" // NotificationSpec defines the desired state of Notification // UserName and whether read will be set in label,because set in label is ease to query type NotificationSpec struct { - Title string `json:"title"` - Message string `json:"message"` - Timestamp int64 `json:"timestamp"` - From string `json:"from,omitempty"` - Importance Type `json:"importance,omitempty"` + Title string `json:"title"` + Message string `json:"message"` + Timestamp int64 `json:"timestamp"` + From string `json:"from,omitempty"` + Importance Type `json:"importance,omitempty"` + DesktopPopup bool `json:"desktopPopup,omitempty"` + I18n []I18n `json:"i18ns,omitempty"` +} + +type I18n struct { + Language string `json:"language"` + Title string `json:"title"` + Message string `json:"message"` + From string `json:"from,omitempty"` } // NotificationStatus defines the observed state of Notification From d30e66dd3e4cf516035f1827a37c55319b42a27d Mon Sep 17 00:00:00 2001 From: jiahui Date: Mon, 27 Nov 2023 16:25:13 +0800 Subject: [PATCH 04/16] add ali sms service for debt message notification --- .../account/controllers/utils/alisms.go | 41 ++++++++++ controllers/account/go.mod | 16 +++- controllers/account/go.sum | 77 ++++++++++++++++++- controllers/pkg/utils/env/env.go | 10 +++ 4 files changed, 142 insertions(+), 2 deletions(-) create mode 100644 controllers/account/controllers/utils/alisms.go diff --git a/controllers/account/controllers/utils/alisms.go b/controllers/account/controllers/utils/alisms.go new file mode 100644 index 00000000000..c1763d670d8 --- /dev/null +++ b/controllers/account/controllers/utils/alisms.go @@ -0,0 +1,41 @@ +package utils + +import ( + "os" + + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" + util "github.com/alibabacloud-go/tea-utils/v2/service" + "github.com/alibabacloud-go/tea/tea" + "github.com/labring/sealos/controllers/pkg/utils/env" +) + +const ( + envAK = "ALI_SMS_AK" + envSK = "ALI_SMS_SK" + envEP = "ALI_SMS_ENDPOINT" +) + +type AliSms struct{} + +func CreateSMSClient() (*dysmsapi20170525.Client, error) { + if err := env.CheckEnvSetting([]string{envAK, envSK, envEP}); err != nil { + return nil, err + } + + accessKeyId, accessKeySecret, endPoint := os.Getenv(envAK), os.Getenv(envSK), os.Getenv(envEP) + config := &openapi.Config{ + AccessKeyId: tea.String(accessKeyId), + AccessKeySecret: tea.String(accessKeySecret), + Endpoint: tea.String(endPoint), + } + + client, err := dysmsapi20170525.NewClient(config) + return client, err +} + +func SendSms(client *dysmsapi20170525.Client, req *dysmsapi20170525.SendSmsRequest) error { + runtime := &util.RuntimeOptions{} + _, err := client.SendSmsWithOptions(req, runtime) + return err +} diff --git a/controllers/account/go.mod b/controllers/account/go.mod index d5d56e982f2..545a5fcaf1f 100644 --- a/controllers/account/go.mod +++ b/controllers/account/go.mod @@ -3,6 +3,10 @@ module github.com/labring/sealos/controllers/account go 1.20 require ( + github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.5 + github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6 + github.com/alibabacloud-go/tea v1.2.1 + github.com/alibabacloud-go/tea-utils/v2 v2.0.4 github.com/go-logr/logr v1.2.4 github.com/labring/sealos/controllers/pkg v0.0.0-00010101000000-000000000000 github.com/labring/sealos/controllers/user v0.0.0 @@ -16,8 +20,16 @@ require ( ) require ( + github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect + github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect + github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect + github.com/alibabacloud-go/openapi-util v0.1.0 // indirect + github.com/alibabacloud-go/tea-utils v1.3.1 // indirect + github.com/alibabacloud-go/tea-xml v1.1.3 // indirect + github.com/aliyun/credentials-go v1.3.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/clbanning/mxj/v2 v2.5.5 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dinoallo/sealos-networkmanager-protoapi v0.0.0-20230928031328-cf9649d6af49 // indirect github.com/emicklei/go-restful/v3 v3.10.1 // indirect @@ -56,6 +68,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.8.4 // indirect github.com/stripe/stripe-go/v74 v74.30.0 // indirect + github.com/tjfoc/gmsm v1.3.2 // indirect github.com/wechatpay-apiv3/wechatpay-go v0.2.17 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect @@ -65,7 +78,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect golang.org/x/crypto v0.10.0 // indirect - golang.org/x/net v0.10.0 // indirect + golang.org/x/net v0.11.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.4.0 // indirect golang.org/x/sys v0.12.0 // indirect @@ -78,6 +91,7 @@ require ( google.golang.org/grpc v1.57.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/ini.v1 v1.56.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/controllers/account/go.sum b/controllers/account/go.sum index 41429d9f2cc..11379b1c6b5 100644 --- a/controllers/account/go.sum +++ b/controllers/account/go.sum @@ -6,6 +6,39 @@ github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3Q github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw= github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 h1:iC9YFYKDGEy3n/FtqJnOkZsene9olVspKmkX5A2YBEo= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.2/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.5 h1:yyolbgHfV2Tp91vMjO/CF5aOxKG+UgdVAeUoloEQI3E= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.5/go.mod h1:kUe8JqFmoVU7lfBauaDD5taFaW7mBI+xVsyHutYtabg= +github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 h1:NqugFkGxx1TXSh/pBcU00Y6bljgDPaFdh5MUSeJ7e50= +github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY= +github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6 h1:UTl97mt2qfavxveqCkaVg4tKaZUPzA9RKbFIRaIdtdg= +github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6/go.mod h1:UWpcGrWwTbES9QW7OQ7xDffukMJ/l7lzioixIz8+lgY= +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.0.11/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= +github.com/alibabacloud-go/openapi-util v0.1.0 h1:0z75cIULkDrdEhkLWgi9tnLe+KhAFE/r5Pb3312/eAY= +github.com/alibabacloud-go/openapi-util v0.1.0/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= +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.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.1.19/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.2.1 h1:rFF1LnrAdhaiPmKwH5xwYOKlMh66CqRwPUTzIK74ask= +github.com/alibabacloud-go/tea v1.2.1/go.mod h1:qbzof29bM/IFhLMtJPrgTGK3eauV5J2wSyEUo4OEmnA= +github.com/alibabacloud-go/tea-utils v1.3.1 h1:iWQeRzRheqCMuiF3+XkfybB3kTgUXkXX+JMrqfLeB2I= +github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= +github.com/alibabacloud-go/tea-utils/v2 v2.0.0/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4= +github.com/alibabacloud-go/tea-utils/v2 v2.0.3/go.mod h1:sj1PbjPodAVTqGTA3olprfeeqqmwD0A5OQz94o9EuXQ= +github.com/alibabacloud-go/tea-utils/v2 v2.0.4 h1:SoFgjJuO7pze88j9RBJNbKb7AgTS52O+J5ITxc00lCs= +github.com/alibabacloud-go/tea-utils/v2 v2.0.4/go.mod h1:sj1PbjPodAVTqGTA3olprfeeqqmwD0A5OQz94o9EuXQ= +github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= +github.com/alibabacloud-go/tea-xml v1.1.3 h1:7LYnm+JbOq2B+T/B0fHC4Ies4/FofC4zHzYtqw7dgt0= +github.com/alibabacloud-go/tea-xml v1.1.3/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= +github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw= +github.com/aliyun/credentials-go v1.3.1 h1:uq/0v7kWrxmoLGpqjx7vtQ/s03f0zR//0br/xWDTE28= +github.com/aliyun/credentials-go v1.3.1/go.mod h1:8jKYhQuDawt8x2+fusqa1Y6mPxemTsBEN04dgcAcYz0= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -15,6 +48,8 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/clbanning/mxj/v2 v2.5.5 h1:oT81vUeEiQQ/DcHbzSytRngP6Ky9O+L+0Bw0zSJag9E= +github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -101,6 +136,9 @@ github.com/google/pprof v0.0.0-20230323073829-e72429f035bd/go.mod h1:79YE0hCXdHa github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0= +github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= @@ -109,8 +147,11 @@ github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+h github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= 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/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= @@ -134,12 +175,15 @@ github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfr 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/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +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= @@ -169,11 +213,17 @@ github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJf github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v1.1.0 h1:MkTeG1DMwsrdH7QtLXy5W+fUxWq+vmb6cLmyJ7aRtF0= +github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= 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/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -187,6 +237,8 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stripe/stripe-go/v74 v74.30.0 h1:0Kf0KkeFnY7iRhOwvTerX0Ia1BRw+eV1CVJ51mGYAUY= github.com/stripe/stripe-go/v74 v74.30.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= +github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM= +github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= github.com/wechatpay-apiv3/wechatpay-go v0.2.17 h1:i4YJA/6BqAbi2YfyPZBjpeEeO/+oa4UbKP4gSTRhhQg= github.com/wechatpay-apiv3/wechatpay-go v0.2.17/go.mod h1:A254AUBVB6R+EqQFo3yTgeh7HtyqRRtN2w9hQSOrd4Q= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= @@ -201,6 +253,7 @@ github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQ github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= 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.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -218,6 +271,8 @@ go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-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-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -232,6 +287,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/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= @@ -242,6 +298,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -251,8 +308,11 @@ golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qx 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-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= @@ -262,9 +322,11 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -275,6 +337,7 @@ golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/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-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -285,10 +348,15 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -299,6 +367,7 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= @@ -307,13 +376,16 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= 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= @@ -358,11 +430,14 @@ google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw 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-20190902080502-41f04d3bba15/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/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.56.0 h1:DPMeDvGTM54DXbPkVIZsp19fp/I2K7zwA/itHYHKo8Y= +gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= diff --git a/controllers/pkg/utils/env/env.go b/controllers/pkg/utils/env/env.go index 004d6d6d6ec..657384df789 100644 --- a/controllers/pkg/utils/env/env.go +++ b/controllers/pkg/utils/env/env.go @@ -15,6 +15,7 @@ package env import ( + "fmt" "os" "strconv" ) @@ -34,3 +35,12 @@ func GetInt64EnvWithDefault(key string, defaultValue int64) int64 { } return defaultValue } + +func CheckEnvSetting(keys []string) error { + for _, key := range keys { + if val, ok := os.LookupEnv(key); !ok || val == "" { + return fmt.Errorf("env %s not set", key) + } + } + return nil +} From d0a4b845041dcea36aa277b331932afaaff0f095 Mon Sep 17 00:00:00 2001 From: jiahui Date: Mon, 27 Nov 2023 16:25:33 +0800 Subject: [PATCH 05/16] optimize debt message --- .../account/controllers/debt_controller.go | 66 +++++++++++++++++-- 1 file changed, 59 insertions(+), 7 deletions(-) diff --git a/controllers/account/controllers/debt_controller.go b/controllers/account/controllers/debt_controller.go index 6a2e077206b..36124dfeb6a 100644 --- a/controllers/account/controllers/debt_controller.go +++ b/controllers/account/controllers/debt_controller.go @@ -22,6 +22,9 @@ import ( "strconv" "time" + client2 "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" + "github.com/labring/sealos/controllers/account/controllers/utils" + "github.com/go-logr/logr" accountv1 "github.com/labring/sealos/controllers/account/api/v1" @@ -312,25 +315,74 @@ const ( FinalDeletionNotice ) -var NoticeTemplate = map[int]string{ +const ( + fromEn = "Debt-System" + fromZh = "欠费系统" + //languageEn = "en" + languageZh = "zh" + debtChoicePrefix = "debt-choice-" +) + +var NoticeTemplateEN = map[int]string{ WarningNotice: "Your account balance is not enough to pay this month's bill, and services will be suspended for you. Please recharge in time to avoid affecting your normal use.", ApproachingDeletionNotice: "Your account balance is not enough to pay this month's bill. The system will delete your resources after three days or after the arrears exceed the recharge amount. Please recharge in time to avoid affecting your normal use.", ImminentDeletionNotice: "Your container instance resources have been suspended. If you are still in arrears for more than 7 days, the resources will be completely deleted and cannot be recovered. Please recharge in time to avoid affecting your normal use.", FinalDeletionNotice: "The system has completely deleted all your resources, please recharge in time to avoid affecting your normal use.", } +var TitleTemplateZH = map[int]string{ + WarningNotice: "欠费告警", + ApproachingDeletionNotice: "资源暂停告警", + ImminentDeletionNotice: "资源释放告警", + FinalDeletionNotice: "资源已释放告警", +} + +var TitleTemplateEN = map[int]string{ + WarningNotice: "Debt Warning", + ApproachingDeletionNotice: "Resource Suspension Warning", + ImminentDeletionNotice: "Resource Release Warning", + FinalDeletionNotice: "Resource Release Warning", +} + +var NoticeTemplateZH = map[int]string{ + WarningNotice: "您的账户余额不足,系统将为您暂停服务,请及时充值,以免影响您的正常使用。", + ApproachingDeletionNotice: "您的账户余额不足,系统将在三天后或欠费超过充值金额后释放您的资源,请及时充值,以免影响您的正常使用。", + ImminentDeletionNotice: "您的容器实例资源已被暂停,若您仍欠费超过7天,系统将彻底释放资源,无法恢复,请及时充值,以免影响您的正常使用。", + FinalDeletionNotice: "系统已彻底释放您的所有资源,请及时充值,以免影响您的正常使用。", +} + +func (r *DebtReconciler) sendSMSNotice(user string, oweAmount int64, noticeType int) error { + // TODO send sms + + clt, err := utils.CreateSMSClient() + if err != nil { + return err + } + utils.SendSms(clt, &client2.SendSmsRequest{}) + return nil +} + func (r *DebtReconciler) sendNotice(ctx context.Context, noticeType int, namespaces []string) error { now := time.Now().UTC().Unix() ntfTmp := &v1.Notification{ ObjectMeta: metav1.ObjectMeta{ - Name: "debt-notice" + strconv.Itoa(noticeType), + Name: debtChoicePrefix + strconv.Itoa(noticeType), }, Spec: v1.NotificationSpec{ - Title: "Debt Notice", - Message: NoticeTemplate[noticeType], - From: "Debt-System", - Importance: v1.High, - Timestamp: now, + Title: TitleTemplateEN[noticeType], + Message: NoticeTemplateEN[noticeType], + From: fromEn, + Importance: v1.High, + DesktopPopup: true, + Timestamp: now, + I18n: []v1.I18n{ + { + Language: languageZh, + Title: TitleTemplateZH[noticeType], + From: fromZh, + Message: NoticeTemplateZH[noticeType], + }, + }, }, } for i := range namespaces { From 4b3ef86294aecf0c1a47a158334e658a1926acfb Mon Sep 17 00:00:00 2001 From: jiahui Date: Mon, 27 Nov 2023 17:28:26 +0800 Subject: [PATCH 06/16] optimize ali sms debt message notification --- .../account/controllers/debt_controller.go | 118 +++++++++++++++--- .../controllers/debt_controller_test.go | 25 ++++ .../account/controllers/utils/alisms.go | 31 ++--- controllers/account/main.go | 5 +- controllers/go.work.sum | 8 -- controllers/pkg/database/mongo/user.go | 3 + 6 files changed, 139 insertions(+), 51 deletions(-) create mode 100644 controllers/account/controllers/debt_controller_test.go diff --git a/controllers/account/controllers/debt_controller.go b/controllers/account/controllers/debt_controller.go index 36124dfeb6a..8bbd73fa8cf 100644 --- a/controllers/account/controllers/debt_controller.go +++ b/controllers/account/controllers/debt_controller.go @@ -19,9 +19,15 @@ package controllers import ( "context" "fmt" + "os" "strconv" + "strings" "time" + "github.com/alibabacloud-go/tea/tea" + + "github.com/labring/sealos/controllers/pkg/database" + client2 "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" "github.com/labring/sealos/controllers/account/controllers/utils" @@ -44,16 +50,32 @@ import ( "sigs.k8s.io/controller-runtime/pkg/predicate" ) -const DebtDetectionCycleEnv = "DebtDetectionCycleSeconds" +const ( + DebtDetectionCycleEnv = "DebtDetectionCycleSeconds" + + SMSAccessKeyIDEnv = "SMS_AK" + SMSAccessKeySecretEnv = "SMS_SK" + SMSEndpointEnv = "SMS_ENDPOINT" + SMSSignNameEnv = "SMS_SIGN_NAME" + SMSCodeMapEnv = "SMS_CODE_MAP" +) // DebtReconciler reconciles a Debt object type DebtReconciler struct { client.Client + DBClient database.Auth Scheme *runtime.Scheme DebtDetectionCycle time.Duration logr.Logger accountSystemNamespace string accountNamespace string + SmsConfig *SmsConfig +} + +type SmsConfig struct { + Client *client2.Client + SmsSignName string + SmsCode map[int]string } var DebtConfig = accountv1.DefaultDebtConfig @@ -154,7 +176,7 @@ func (r *DebtReconciler) reconcileDebtStatus(ctx context.Context, debt *accountv return nil } update = SetDebtStatus(debt, accountv1.WarningPeriod) - if err := r.sendWarningNotice(ctx, userNamespaceList); err != nil { + if err := r.sendWarningNotice(ctx, debt.Spec.UserName, oweamount, userNamespaceList); err != nil { r.Logger.Error(err, "send warning notice error") } case accountv1.WarningPeriod: @@ -177,7 +199,7 @@ func (r *DebtReconciler) reconcileDebtStatus(ctx context.Context, debt *accountv return nil } update = SetDebtStatus(debt, accountv1.ApproachingDeletionPeriod) - if err := r.sendApproachingDeletionNotice(ctx, userNamespaceList); err != nil { + if err := r.sendApproachingDeletionNotice(ctx, debt.Spec.UserName, oweamount, userNamespaceList); err != nil { r.Logger.Error(err, "sendApproachingDeletionNotice error") } @@ -200,7 +222,7 @@ func (r *DebtReconciler) reconcileDebtStatus(ctx context.Context, debt *accountv return nil } update = SetDebtStatus(debt, accountv1.ImminentDeletionPeriod) - if err := r.sendImminentDeletionNotice(ctx, userNamespaceList); err != nil { + if err := r.sendImminentDeletionNotice(ctx, debt.Spec.UserName, oweamount, userNamespaceList); err != nil { r.Logger.Error(err, "sendImminentDeletionNotice error") } if err := r.SuspendUserResource(ctx, userNamespaceList); err != nil { @@ -230,7 +252,7 @@ func (r *DebtReconciler) reconcileDebtStatus(ctx context.Context, debt *accountv } // TODO 暂时只暂停资源,后续会添加真正删除全部资源逻辑, 或直接删除namespace update = SetDebtStatus(debt, accountv1.FinalDeletionPeriod) - if err := r.sendFinalDeletionNotice(ctx, userNamespaceList); err != nil { + if err := r.sendFinalDeletionNotice(ctx, debt.Spec.UserName, oweamount, userNamespaceList); err != nil { r.Error(err, "sendFinalDeletionNotice error") } if err := r.SuspendUserResource(ctx, userNamespaceList); err != nil { @@ -352,17 +374,27 @@ var NoticeTemplateZH = map[int]string{ } func (r *DebtReconciler) sendSMSNotice(user string, oweAmount int64, noticeType int) error { + if r.SmsConfig == nil { + return nil + } // TODO send sms - - clt, err := utils.CreateSMSClient() + usr, err := r.DBClient.GetUser(user) if err != nil { - return err + return fmt.Errorf("failed to get user: %w", err) } - utils.SendSms(clt, &client2.SendSmsRequest{}) - return nil + if usr == nil || usr.Phone == "" { + r.Logger.Info("user not exist or user phone is empty, skip sms notification", "user", user) + return nil + } + return utils.SendSms(r.SmsConfig.Client, &client2.SendSmsRequest{ + PhoneNumbers: tea.String(usr.Phone), + SignName: tea.String(r.SmsConfig.SmsSignName), + TemplateCode: tea.String(r.SmsConfig.SmsCode[noticeType]), + TemplateParam: tea.String("{\"oweAmount\":\"" + strconv.FormatInt(oweAmount, 10) + "\"}, \"user_id\":\"" + user + "\"}"), + }) } -func (r *DebtReconciler) sendNotice(ctx context.Context, noticeType int, namespaces []string) error { +func (r *DebtReconciler) sendNotice(ctx context.Context, user string, oweAmount int64, noticeType int, namespaces []string) error { now := time.Now().UTC().Unix() ntfTmp := &v1.Notification{ ObjectMeta: metav1.ObjectMeta{ @@ -394,23 +426,23 @@ func (r *DebtReconciler) sendNotice(ctx context.Context, noticeType int, namespa return err } } - return nil + return r.sendSMSNotice(user, oweAmount, noticeType) } -func (r *DebtReconciler) sendWarningNotice(ctx context.Context, namespaces []string) error { - return r.sendNotice(ctx, WarningNotice, namespaces) +func (r *DebtReconciler) sendWarningNotice(ctx context.Context, user string, oweAmount int64, namespaces []string) error { + return r.sendNotice(ctx, user, oweAmount, WarningNotice, namespaces) } -func (r *DebtReconciler) sendApproachingDeletionNotice(ctx context.Context, namespaces []string) error { - return r.sendNotice(ctx, ApproachingDeletionNotice, namespaces) +func (r *DebtReconciler) sendApproachingDeletionNotice(ctx context.Context, user string, oweAmount int64, namespaces []string) error { + return r.sendNotice(ctx, user, oweAmount, ApproachingDeletionNotice, namespaces) } -func (r *DebtReconciler) sendImminentDeletionNotice(ctx context.Context, namespaces []string) error { - return r.sendNotice(ctx, ImminentDeletionNotice, namespaces) +func (r *DebtReconciler) sendImminentDeletionNotice(ctx context.Context, user string, oweAmount int64, namespaces []string) error { + return r.sendNotice(ctx, user, oweAmount, ImminentDeletionNotice, namespaces) } -func (r *DebtReconciler) sendFinalDeletionNotice(ctx context.Context, namespaces []string) error { - return r.sendNotice(ctx, FinalDeletionNotice, namespaces) +func (r *DebtReconciler) sendFinalDeletionNotice(ctx context.Context, user string, oweAmount int64, namespaces []string) error { + return r.sendNotice(ctx, user, oweAmount, FinalDeletionNotice, namespaces) } func (r *DebtReconciler) SuspendUserResource(ctx context.Context, namespaces []string) error { @@ -436,6 +468,45 @@ func (r *DebtReconciler) updateNamespaceStatus(ctx context.Context, status strin return nil } +// convert "1:code1,2:code2" to map[int]string +func splitSmsCodeMap(codeStr string) (map[int]string, error) { + codeMap := make(map[int]string) + for _, code := range strings.Split(codeStr, ",") { + split := strings.SplitN(code, ":", 2) + if len(split) != 2 { + return nil, fmt.Errorf("invalid sms code map: %s", codeStr) + } + codeInt, err := strconv.Atoi(split[0]) + if err != nil { + return nil, fmt.Errorf("invalid sms code map: %s", codeStr) + } + codeMap[codeInt] = split[1] + } + return codeMap, nil +} + +func setupSmsConfig() (*SmsConfig, error) { + if err := env.CheckEnvSetting([]string{SMSAccessKeyIDEnv, SMSAccessKeySecretEnv, SMSEndpointEnv, SMSSignNameEnv, SMSCodeMapEnv}); err != nil { + return nil, fmt.Errorf("check env setting error: %w", err) + } + + smsCodeMap, err := splitSmsCodeMap(os.Getenv(SMSCodeMapEnv)) + if err != nil { + return nil, fmt.Errorf("split sms code map error: %w", err) + } + + smsClient, err := utils.CreateSMSClient(os.Getenv(SMSAccessKeyIDEnv), os.Getenv(SMSAccessKeySecretEnv), os.Getenv(SMSEndpointEnv)) + if err != nil { + return nil, fmt.Errorf("create sms client error: %w", err) + } + + return &SmsConfig{ + Client: smsClient, + SmsSignName: os.Getenv(SMSSignNameEnv), + SmsCode: smsCodeMap, + }, nil +} + // SetupWithManager sets up the controller with the Manager. func (r *DebtReconciler) SetupWithManager(mgr ctrl.Manager, rateOpts controller.Options) error { r.Logger = ctrl.Log.WithName("DebtController") @@ -445,6 +516,13 @@ func (r *DebtReconciler) SetupWithManager(mgr ctrl.Manager, rateOpts controller. debtDetectionCycleSecond := env.GetInt64EnvWithDefault(DebtDetectionCycleEnv, 60) r.DebtDetectionCycle = time.Duration(debtDetectionCycleSecond) * time.Second + smsConfig, err := setupSmsConfig() + if err != nil { + r.Logger.Error(err, "Failed to set up SMS configuration") + } else { + r.SmsConfig = smsConfig + } + /* {"DebtConfig":{ "ApproachingDeletionPeriod":345600, diff --git a/controllers/account/controllers/debt_controller_test.go b/controllers/account/controllers/debt_controller_test.go new file mode 100644 index 00000000000..1dd42c50c52 --- /dev/null +++ b/controllers/account/controllers/debt_controller_test.go @@ -0,0 +1,25 @@ +package controllers + +import ( + "testing" +) + +func Test_splitSmsCodeMap(t *testing.T) { + codeMap, err := splitSmsCodeMap("0:SMS_123456,1:SMS_654321,2:SMS_987654") + if err != nil { + t.Fatal(err) + } + t.Logf("codeMap: %v", codeMap) + if len(codeMap) != 3 { + t.Fatal("invalid codeMap") + } + if codeMap[0] != "SMS_123456" { + t.Fatal("invalid codeMap") + } + if codeMap[1] != "SMS_654321" { + t.Fatal("invalid codeMap") + } + if codeMap[2] != "SMS_987654" { + t.Fatal("invalid codeMap") + } +} diff --git a/controllers/account/controllers/utils/alisms.go b/controllers/account/controllers/utils/alisms.go index c1763d670d8..f73dc8c4aac 100644 --- a/controllers/account/controllers/utils/alisms.go +++ b/controllers/account/controllers/utils/alisms.go @@ -1,39 +1,28 @@ package utils import ( - "os" - openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" - "github.com/labring/sealos/controllers/pkg/utils/env" -) - -const ( - envAK = "ALI_SMS_AK" - envSK = "ALI_SMS_SK" - envEP = "ALI_SMS_ENDPOINT" ) -type AliSms struct{} - -func CreateSMSClient() (*dysmsapi20170525.Client, error) { - if err := env.CheckEnvSetting([]string{envAK, envSK, envEP}); err != nil { - return nil, err - } - - accessKeyId, accessKeySecret, endPoint := os.Getenv(envAK), os.Getenv(envSK), os.Getenv(envEP) +func CreateSMSClient(ak, sk, endpoint string) (*dysmsapi20170525.Client, error) { config := &openapi.Config{ - AccessKeyId: tea.String(accessKeyId), - AccessKeySecret: tea.String(accessKeySecret), - Endpoint: tea.String(endPoint), + AccessKeyId: tea.String(ak), + AccessKeySecret: tea.String(sk), + Endpoint: tea.String(endpoint), } - client, err := dysmsapi20170525.NewClient(config) return client, err } +// SendSms sendSmsRequest := &dysmsapi20170525.SendSmsRequest{ +// PhoneNumbers: tea.String("18888888888"), +// SignName: tea.String("环界云"), +// TemplateCode: tea.String("SMS_xxx"), +// TemplateParam: tea.String("{\"code\":\"1234\"}"), +// }/* func SendSms(client *dysmsapi20170525.Client, req *dysmsapi20170525.SendSmsRequest) error { runtime := &util.RuntimeOptions{} _, err := client.SendSmsWithOptions(req, runtime) diff --git a/controllers/account/main.go b/controllers/account/main.go index d77d14f6159..e118ecaf307 100644 --- a/controllers/account/main.go +++ b/controllers/account/main.go @@ -147,8 +147,9 @@ func main() { os.Exit(1) } if err = (&controllers.DebtReconciler{ - Client: mgr.GetClient(), - Scheme: mgr.GetScheme(), + Client: mgr.GetClient(), + Scheme: mgr.GetScheme(), + DBClient: dbClient, }).SetupWithManager(mgr, rateOpts); err != nil { setupLog.Error(err, "unable to create controller", "controller", "Debt") os.Exit(1) diff --git a/controllers/go.work.sum b/controllers/go.work.sum index 28e518a971c..9ace24a3e99 100644 --- a/controllers/go.work.sum +++ b/controllers/go.work.sum @@ -396,7 +396,6 @@ github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGAR github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/kisielk/errcheck v1.5.0 h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= @@ -459,7 +458,6 @@ github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 h1:Rpf github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/slok/kubewebhook/v2 v2.2.0 h1:pOrFBTp6hnO0zakRfR9rd5WDRGiUimerNfR/JoNg1uI= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= @@ -524,14 +522,11 @@ golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= @@ -545,10 +540,7 @@ golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= diff --git a/controllers/pkg/database/mongo/user.go b/controllers/pkg/database/mongo/user.go index ac12b8e9f57..504dda37637 100644 --- a/controllers/pkg/database/mongo/user.go +++ b/controllers/pkg/database/mongo/user.go @@ -18,6 +18,9 @@ func (m *mongoDB) GetUser(name string) (*types.User, error) { var user types.User err := collection.FindOne(context.Background(), bson.M{"k8s_users.name": name}).Decode(&user) if err != nil { + if err == mongo.ErrNoDocuments { + return nil, nil + } return nil, fmt.Errorf("failed to find user: error = %v", err) } return &user, nil From 3b51bd79b1a6a5f00f06ee24a7e969b9c6d9ff47 Mon Sep 17 00:00:00 2001 From: jiahui Date: Mon, 27 Nov 2023 17:36:08 +0800 Subject: [PATCH 07/16] fix mod tidy --- controllers/account/go.mod | 12 ++++---- controllers/account/go.sum | 23 +++++++------- controllers/license/go.mod | 10 +++--- controllers/license/go.sum | 20 ++++++------ controllers/pkg/go.mod | 19 +++++++----- service/go.work.sum | 62 +++++++++----------------------------- 6 files changed, 59 insertions(+), 87 deletions(-) diff --git a/controllers/account/go.mod b/controllers/account/go.mod index 545a5fcaf1f..a872a5dc46a 100644 --- a/controllers/account/go.mod +++ b/controllers/account/go.mod @@ -77,13 +77,13 @@ require ( go.mongodb.org/mongo-driver v1.12.1 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect - golang.org/x/crypto v0.10.0 // indirect - golang.org/x/net v0.11.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/net v0.17.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.4.0 // indirect - golang.org/x/sys v0.12.0 // indirect - golang.org/x/term v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -91,7 +91,7 @@ require ( google.golang.org/grpc v1.57.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/ini.v1 v1.56.0 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/controllers/account/go.sum b/controllers/account/go.sum index 11379b1c6b5..570ed7492da 100644 --- a/controllers/account/go.sum +++ b/controllers/account/go.sum @@ -137,7 +137,6 @@ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -150,7 +149,6 @@ github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFF 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/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -214,9 +212,7 @@ github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.1.0 h1:MkTeG1DMwsrdH7QtLXy5W+fUxWq+vmb6cLmyJ7aRtF0= github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -276,8 +272,9 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -311,8 +308,9 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= @@ -351,14 +349,15 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.3.0/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= @@ -368,8 +367,9 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -436,8 +436,9 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.56.0 h1:DPMeDvGTM54DXbPkVIZsp19fp/I2K7zwA/itHYHKo8Y= 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/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= diff --git a/controllers/license/go.mod b/controllers/license/go.mod index 108a60f525c..bf7b7e988cc 100644 --- a/controllers/license/go.mod +++ b/controllers/license/go.mod @@ -81,13 +81,13 @@ require ( go.uber.org/goleak v1.2.1 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect - golang.org/x/crypto v0.10.0 // indirect - golang.org/x/net v0.10.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/net v0.17.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.4.0 // indirect - golang.org/x/sys v0.12.0 // indirect - golang.org/x/term v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.9.3 // indirect gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect diff --git a/controllers/license/go.sum b/controllers/license/go.sum index 639c8e53f0b..9375c86d454 100644 --- a/controllers/license/go.sum +++ b/controllers/license/go.sum @@ -231,8 +231,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -259,8 +259,8 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b 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-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= @@ -288,12 +288,12 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= -golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.3.0/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= @@ -302,8 +302,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/controllers/pkg/go.mod b/controllers/pkg/go.mod index a59245e3f6b..3a6a1082e57 100644 --- a/controllers/pkg/go.mod +++ b/controllers/pkg/go.mod @@ -24,6 +24,8 @@ require ( github.com/go-logr/logr v1.2.4 github.com/labring/sealos/controllers/account v0.0.0-00010101000000-000000000000 github.com/matoous/go-nanoid/v2 v2.0.0 + github.com/minio/minio-go/v7 v7.0.64 + github.com/prometheus/client_golang v1.15.1 github.com/spf13/pflag v1.0.5 github.com/stripe/stripe-go/v74 v74.30.0 github.com/wechatpay-apiv3/wechatpay-go v0.2.17 @@ -74,13 +76,15 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.16.7 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/klauspost/cpuid/v2 v2.2.5 // indirect github.com/klauspost/pgzip v1.2.6 // indirect github.com/labring/sealos/controllers/user v0.0.0 // indirect github.com/leodido/go-urn v1.2.4 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/minio/md5-simd v1.1.2 // indirect + github.com/minio/sha256-simd v1.0.1 // indirect github.com/moby/sys/mountinfo v0.6.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -90,11 +94,11 @@ require ( github.com/opencontainers/runtime-spec v1.1.0 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.15.1 // indirect github.com/prometheus/client_model v0.4.0 // indirect github.com/prometheus/common v0.42.0 // indirect github.com/prometheus/procfs v0.9.0 // indirect github.com/rogpeppe/go-internal v1.11.0 // indirect + github.com/rs/xid v1.5.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect @@ -106,18 +110,19 @@ require ( github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/arch v0.3.0 // indirect - golang.org/x/crypto v0.10.0 // indirect - golang.org/x/net v0.10.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/net v0.17.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect - golang.org/x/sys v0.12.0 // indirect - golang.org/x/term v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 // indirect google.golang.org/grpc v1.57.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // 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 k8s.io/apiextensions-apiserver v0.27.2 // indirect diff --git a/service/go.work.sum b/service/go.work.sum index 8a08520a52c..d88600ff198 100644 --- a/service/go.work.sum +++ b/service/go.work.sum @@ -1,49 +1,15 @@ -github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/emicklei/go-restful/v3 v3.10.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-task/slim-sprig v2.20.0+incompatible/go.mod h1:N/mhXZITr/EQAOErEHciKvO1bFei2Lld2Ym6h96pdy0= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20230323073829-e72429f035bd/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/matoous/go-nanoid v1.5.0 h1:VRorl6uCngneC4oUQqOYtO3S0H5QKFtKuKycFG3euek= -github.com/onsi/ginkgo/v2 v2.10.0/go.mod h1:UDQOh5wbQUlMnkLfVaIUMtQ1Vus92oM+P2JX1aulgcE= -github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= From 343da5d21ffa7f3fdaf0a6af0160db2e8f935089 Mon Sep 17 00:00:00 2001 From: jiahui Date: Tue, 28 Nov 2023 10:06:53 +0800 Subject: [PATCH 08/16] make license && make format --- .../account/controllers/debt_controller.go | 1 + .../controllers/debt_controller_test.go | 14 ++++++++++ .../account/controllers/utils/alisms.go | 14 ++++++++++ controllers/go.work.sum | 2 ++ controllers/pkg/database/mongo/user.go | 17 +++++++++++- controllers/pkg/database/mongo/user_test.go | 14 ++++++++++ controllers/pkg/go.sum | 26 ++++++++++--------- controllers/pkg/types/User.go | 14 ++++++++++ 8 files changed, 89 insertions(+), 13 deletions(-) diff --git a/controllers/account/controllers/debt_controller.go b/controllers/account/controllers/debt_controller.go index 8bbd73fa8cf..89634a1832a 100644 --- a/controllers/account/controllers/debt_controller.go +++ b/controllers/account/controllers/debt_controller.go @@ -29,6 +29,7 @@ import ( "github.com/labring/sealos/controllers/pkg/database" client2 "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" + "github.com/labring/sealos/controllers/account/controllers/utils" "github.com/go-logr/logr" diff --git a/controllers/account/controllers/debt_controller_test.go b/controllers/account/controllers/debt_controller_test.go index 1dd42c50c52..1c3f8dc8977 100644 --- a/controllers/account/controllers/debt_controller_test.go +++ b/controllers/account/controllers/debt_controller_test.go @@ -1,3 +1,17 @@ +// Copyright © 2023 sealos. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package controllers import ( diff --git a/controllers/account/controllers/utils/alisms.go b/controllers/account/controllers/utils/alisms.go index f73dc8c4aac..26d8db70772 100644 --- a/controllers/account/controllers/utils/alisms.go +++ b/controllers/account/controllers/utils/alisms.go @@ -1,3 +1,17 @@ +// Copyright © 2023 sealos. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package utils import ( diff --git a/controllers/go.work.sum b/controllers/go.work.sum index 9ace24a3e99..831692612a4 100644 --- a/controllers/go.work.sum +++ b/controllers/go.work.sum @@ -415,6 +415,8 @@ github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebG github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= +github.com/minio/minio-go/v7 v7.0.64 h1:Zdza8HwOzkld0ZG/og50w56fKi6AAyfqfifmasD9n2Q= +github.com/minio/minio-go/v7 v7.0.64/go.mod h1:R4WVUR6ZTedlCcGwZRauLMIKjgyaWxhs4Mqi/OMPmEc= github.com/mistifyio/go-zfs/v3 v3.0.1 h1:YaoXgBePoMA12+S1u/ddkv+QqxcfiZK4prI6HPnkFiU= github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= diff --git a/controllers/pkg/database/mongo/user.go b/controllers/pkg/database/mongo/user.go index 504dda37637..10acf434020 100644 --- a/controllers/pkg/database/mongo/user.go +++ b/controllers/pkg/database/mongo/user.go @@ -1,3 +1,17 @@ +// Copyright © 2023 sealos. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package mongo import ( @@ -6,8 +20,9 @@ import ( "go.mongodb.org/mongo-driver/bson" - "github.com/labring/sealos/controllers/pkg/types" "go.mongodb.org/mongo-driver/mongo" + + "github.com/labring/sealos/controllers/pkg/types" ) func (m *mongoDB) GetUser(name string) (*types.User, error) { diff --git a/controllers/pkg/database/mongo/user_test.go b/controllers/pkg/database/mongo/user_test.go index 9ce1c841790..88d5ceac7b8 100644 --- a/controllers/pkg/database/mongo/user_test.go +++ b/controllers/pkg/database/mongo/user_test.go @@ -1,3 +1,17 @@ +// Copyright © 2023 sealos. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package mongo import ( diff --git a/controllers/pkg/go.sum b/controllers/pkg/go.sum index 42ffe482cdf..870662d0eb8 100644 --- a/controllers/pkg/go.sum +++ b/controllers/pkg/go.sum @@ -132,6 +132,7 @@ github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+h github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= 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/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -165,8 +166,8 @@ github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zk github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.63 h1:GbZ2oCvaUdgT5640WJOpyDhhDxvknAJU2/T3yurwcbQ= -github.com/minio/minio-go/v7 v7.0.63/go.mod h1:Q6X7Qjb7WMhvG65qKf4gUgA5XaiSox74kR1uAEjxRS4= +github.com/minio/minio-go/v7 v7.0.64 h1:Zdza8HwOzkld0ZG/og50w56fKi6AAyfqfifmasD9n2Q= +github.com/minio/minio-go/v7 v7.0.64/go.mod h1:R4WVUR6ZTedlCcGwZRauLMIKjgyaWxhs4Mqi/OMPmEc= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= @@ -180,6 +181,7 @@ github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6f github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo/v2 v2.10.0 h1:sfUl4qgLdvkChZrWCYndY2EAu9BRIw1YphNAzy1VNWs= @@ -270,8 +272,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -296,8 +298,8 @@ golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qx 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-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= @@ -327,12 +329,12 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.3.0/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= @@ -341,8 +343,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/controllers/pkg/types/User.go b/controllers/pkg/types/User.go index 1400c3fff2c..c4618d4192b 100644 --- a/controllers/pkg/types/User.go +++ b/controllers/pkg/types/User.go @@ -1,3 +1,17 @@ +// Copyright © 2023 sealos. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package types type User struct { From 6fc263d579e6af0ea9f389ae60a17cddf667dc45 Mon Sep 17 00:00:00 2001 From: jiahui Date: Tue, 28 Nov 2023 10:13:06 +0800 Subject: [PATCH 09/16] fix service lint --- service/notification/alisms.go | 12 +----------- service/notification/email.go | 29 +++++++++++------------------ service/notification/email_test.go | 8 -------- 3 files changed, 12 insertions(+), 37 deletions(-) delete mode 100644 service/notification/email_test.go diff --git a/service/notification/alisms.go b/service/notification/alisms.go index 70e3c2b96c0..55c3384d0ec 100644 --- a/service/notification/alisms.go +++ b/service/notification/alisms.go @@ -1,19 +1,9 @@ package notification -import ( - //"os" - // - //openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" - //dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" - //util "github.com/alibabacloud-go/tea-utils/v2/service" - //"github.com/alibabacloud-go/tea/tea" - "github.com/labring/sealos/service/notification/types" -) - type AliSms struct { } -func (s *AliSms) SendMessage(message *types.Message, user *types.User, ops types.Options) error { +func (s *AliSms) SendMessage( /*message *types.Message, user *types.User, ops types.Options*/ ) error { return nil } diff --git a/service/notification/email.go b/service/notification/email.go index 13fd742b1af..40646c9c4cf 100644 --- a/service/notification/email.go +++ b/service/notification/email.go @@ -1,25 +1,18 @@ package notification -import ( - "fmt" - "net/smtp" - - "github.com/labring/sealos/service/notification/types" -) - type Email struct { } -func (e *Email) SendMessage(message *types.Message, user *types.User, ops types.Options) error { - return nil +func (e *Email) SendMessage( /*message *types.Message, user *types.User, ops types.Options*/ ) error { + panic("implement me") } -func sendMail(smtpServer, smtpPort, from, password, to string, message []byte) error { - addr := fmt.Sprintf("%s:%s", smtpServer, smtpPort) - auth := smtp.PlainAuth("", from, password, smtpServer) - err := smtp.SendMail(addr, auth, from, []string{to}, message) - if err != nil { - return err - } - return nil -} +//func sendMail(smtpServer, smtpPort, from, password, to string, message []byte) error { +// addr := fmt.Sprintf("%s:%s", smtpServer, smtpPort) +// auth := smtp.PlainAuth("", from, password, smtpServer) +// err := smtp.SendMail(addr, auth, from, []string{to}, message) +// if err != nil { +// return err +// } +// return nil +//} diff --git a/service/notification/email_test.go b/service/notification/email_test.go deleted file mode 100644 index 83bedc611a3..00000000000 --- a/service/notification/email_test.go +++ /dev/null @@ -1,8 +0,0 @@ -package notification - -import ( - "testing" -) - -func Test_sendMail(t *testing.T) { -} From 1da4c113818c6190355b5e91b6f085556116658b Mon Sep 17 00:00:00 2001 From: jiahui Date: Tue, 28 Nov 2023 11:54:43 +0800 Subject: [PATCH 10/16] fix ali sms template param out of position --- .../account/controllers/debt_controller.go | 2 +- .../account/controllers/utils/alisms.go | 12 ++++++-- .../account/controllers/utils/alisms_test.go | 28 +++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 controllers/account/controllers/utils/alisms_test.go diff --git a/controllers/account/controllers/debt_controller.go b/controllers/account/controllers/debt_controller.go index 89634a1832a..aa1e88595ab 100644 --- a/controllers/account/controllers/debt_controller.go +++ b/controllers/account/controllers/debt_controller.go @@ -391,7 +391,7 @@ func (r *DebtReconciler) sendSMSNotice(user string, oweAmount int64, noticeType PhoneNumbers: tea.String(usr.Phone), SignName: tea.String(r.SmsConfig.SmsSignName), TemplateCode: tea.String(r.SmsConfig.SmsCode[noticeType]), - TemplateParam: tea.String("{\"oweAmount\":\"" + strconv.FormatInt(oweAmount, 10) + "\"}, \"user_id\":\"" + user + "\"}"), + TemplateParam: tea.String("{\"user_id\":\"" + user + "\",\"oweamount\":\"" + strconv.FormatInt(oweAmount, 10) + "\"}"), }) } diff --git a/controllers/account/controllers/utils/alisms.go b/controllers/account/controllers/utils/alisms.go index 26d8db70772..c1dc9359eff 100644 --- a/controllers/account/controllers/utils/alisms.go +++ b/controllers/account/controllers/utils/alisms.go @@ -15,6 +15,8 @@ package utils import ( + "fmt" + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" @@ -37,8 +39,14 @@ func CreateSMSClient(ak, sk, endpoint string) (*dysmsapi20170525.Client, error) // TemplateCode: tea.String("SMS_xxx"), // TemplateParam: tea.String("{\"code\":\"1234\"}"), // }/* -func SendSms(client *dysmsapi20170525.Client, req *dysmsapi20170525.SendSmsRequest) error { +func SendSms(client *dysmsapi20170525.Client, req *dysmsapi20170525.SendSmsRequest) (err error) { runtime := &util.RuntimeOptions{} - _, err := client.SendSmsWithOptions(req, runtime) + resp, err := client.SendSmsWithOptions(req, runtime) + if err != nil { + return err + } + if *resp.Body.Code != "OK" { + return fmt.Errorf("send sms err code %s: %s", *resp.Body.Code, *resp.Body.Message) + } return err } diff --git a/controllers/account/controllers/utils/alisms_test.go b/controllers/account/controllers/utils/alisms_test.go new file mode 100644 index 00000000000..a48241c08f6 --- /dev/null +++ b/controllers/account/controllers/utils/alisms_test.go @@ -0,0 +1,28 @@ +package utils + +import ( + "fmt" + "os" + "testing" + + "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" + "github.com/alibabacloud-go/tea/tea" +) + +func TestSendSms(t *testing.T) { + clt, err := CreateSMSClient(os.Getenv("ak"), os.Getenv("sk"), "dysmsapi.aliyuncs.com") + if err != nil { + t.Fatal(err) + } + userID, oweAmount := "uid", "1234" + err = SendSms(clt, &client.SendSmsRequest{ + PhoneNumbers: tea.String(os.Getenv("phone")), + SignName: tea.String(os.Getenv("sign_name")), + TemplateCode: tea.String(os.Getenv("template_code")), + // user_id:, oweAmount + TemplateParam: tea.String("{\"user_id\":\"" + userID + "\",\"oweamount\":\"" + oweAmount + "\"}"), + }) + if err != nil { + t.Fatal(fmt.Errorf("send sms failed: %w", err)) + } +} From 7ccf4477870e6cd3d85d2a72d65c466ab79d467a Mon Sep 17 00:00:00 2001 From: jiahui Date: Tue, 28 Nov 2023 11:56:14 +0800 Subject: [PATCH 11/16] add license --- .../account/controllers/utils/alisms_test.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/controllers/account/controllers/utils/alisms_test.go b/controllers/account/controllers/utils/alisms_test.go index a48241c08f6..7a0ad200b62 100644 --- a/controllers/account/controllers/utils/alisms_test.go +++ b/controllers/account/controllers/utils/alisms_test.go @@ -1,3 +1,17 @@ +// Copyright © 2023 sealos. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package utils import ( From df08d0bf2245d1877ba39323c54dce7d302181be Mon Sep 17 00:00:00 2001 From: jiahui Date: Tue, 28 Nov 2023 12:20:05 +0800 Subject: [PATCH 12/16] fix owe amount value --- controllers/account/controllers/debt_controller.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/controllers/account/controllers/debt_controller.go b/controllers/account/controllers/debt_controller.go index aa1e88595ab..4843f4c067e 100644 --- a/controllers/account/controllers/debt_controller.go +++ b/controllers/account/controllers/debt_controller.go @@ -19,6 +19,7 @@ package controllers import ( "context" "fmt" + "math" "os" "strconv" "strings" @@ -387,11 +388,13 @@ func (r *DebtReconciler) sendSMSNotice(user string, oweAmount int64, noticeType r.Logger.Info("user not exist or user phone is empty, skip sms notification", "user", user) return nil } + oweamount := strconv.FormatInt(int64(math.Abs(math.Ceil(float64(oweAmount)/1_000_000))), 10) return utils.SendSms(r.SmsConfig.Client, &client2.SendSmsRequest{ - PhoneNumbers: tea.String(usr.Phone), - SignName: tea.String(r.SmsConfig.SmsSignName), - TemplateCode: tea.String(r.SmsConfig.SmsCode[noticeType]), - TemplateParam: tea.String("{\"user_id\":\"" + user + "\",\"oweamount\":\"" + strconv.FormatInt(oweAmount, 10) + "\"}"), + PhoneNumbers: tea.String(usr.Phone), + SignName: tea.String(r.SmsConfig.SmsSignName), + TemplateCode: tea.String(r.SmsConfig.SmsCode[noticeType]), + // |ownAmount/1_000_000| + TemplateParam: tea.String("{\"user_id\":\"" + user + "\",\"oweamount\":\"" + oweamount + "\"}"), }) } From 2366cee4dadebd9ec782afb76ec90ab5f18a7d50 Mon Sep 17 00:00:00 2001 From: jiahui Date: Tue, 28 Nov 2023 13:19:15 +0800 Subject: [PATCH 13/16] add notification crd && fix debt update notification --- .../account/controllers/debt_controller.go | 30 ++--- .../notification.sealos.io_notifications.yaml | 19 +++ deploy/cloud/manifests/notifications_crd.yaml | 117 +++++++++++------- 3 files changed, 110 insertions(+), 56 deletions(-) diff --git a/controllers/account/controllers/debt_controller.go b/controllers/account/controllers/debt_controller.go index 4843f4c067e..e35586e9acd 100644 --- a/controllers/account/controllers/debt_controller.go +++ b/controllers/account/controllers/debt_controller.go @@ -404,27 +404,29 @@ func (r *DebtReconciler) sendNotice(ctx context.Context, user string, oweAmount ObjectMeta: metav1.ObjectMeta{ Name: debtChoicePrefix + strconv.Itoa(noticeType), }, - Spec: v1.NotificationSpec{ - Title: TitleTemplateEN[noticeType], - Message: NoticeTemplateEN[noticeType], - From: fromEn, - Importance: v1.High, - DesktopPopup: true, - Timestamp: now, - I18n: []v1.I18n{ - { - Language: languageZh, - Title: TitleTemplateZH[noticeType], - From: fromZh, - Message: NoticeTemplateZH[noticeType], - }, + } + ntfTmpSpc := v1.NotificationSpec{ + Title: TitleTemplateEN[noticeType], + Message: NoticeTemplateEN[noticeType], + From: fromEn, + Importance: v1.High, + DesktopPopup: true, + Timestamp: now, + I18n: []v1.I18n{ + { + Language: languageZh, + Title: TitleTemplateZH[noticeType], + From: fromZh, + Message: NoticeTemplateZH[noticeType], }, }, } for i := range namespaces { ntf := ntfTmp.DeepCopy() + ntfSpec := ntfTmpSpc.DeepCopy() ntf.Namespace = namespaces[i] if _, err := controllerutil.CreateOrUpdate(ctx, r.Client, ntf, func() error { + ntf.Spec = *ntfSpec return nil }); err != nil { return err diff --git a/controllers/pkg/notification/config/crd/bases/notification.sealos.io_notifications.yaml b/controllers/pkg/notification/config/crd/bases/notification.sealos.io_notifications.yaml index a338a8e6ce8..c99b29ac0e4 100644 --- a/controllers/pkg/notification/config/crd/bases/notification.sealos.io_notifications.yaml +++ b/controllers/pkg/notification/config/crd/bases/notification.sealos.io_notifications.yaml @@ -51,8 +51,27 @@ spec: UserName and whether read will be set in label,because set in label is ease to query properties: + desktopPopup: + type: boolean from: type: string + i18ns: + items: + properties: + from: + type: string + language: + type: string + message: + type: string + title: + type: string + required: + - language + - message + - title + type: object + type: array importance: type: string message: diff --git a/deploy/cloud/manifests/notifications_crd.yaml b/deploy/cloud/manifests/notifications_crd.yaml index b1237389281..b8fb78d6f4d 100644 --- a/deploy/cloud/manifests/notifications_crd.yaml +++ b/deploy/cloud/manifests/notifications_crd.yaml @@ -1,3 +1,17 @@ +# Copyright © 2023 sealos. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -15,49 +29,68 @@ spec: singular: notification scope: Namespaced versions: - - name: v1 - schema: - openAPIV3Schema: - description: Notification is the Schema for the notifications API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation + - name: v1 + schema: + openAPIV3Schema: + description: Notification is the Schema for the notifications API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: NotificationSpec defines the desired state of Notification - UserName and whether read will be set in label,because set in label - is ease to query - properties: - from: - type: string - importance: - type: string - message: - type: string - timestamp: - format: int64 - type: integer - title: - type: string - required: - - message - - timestamp - - title - type: object - status: - description: NotificationStatus defines the observed state of Notification - type: object - type: object - served: true - storage: true - subresources: - status: {} + type: string + metadata: + type: object + spec: + description: NotificationSpec defines the desired state of Notification + UserName and whether read will be set in label,because set in label + is ease to query + properties: + desktopPopup: + type: boolean + from: + type: string + i18ns: + items: + properties: + from: + type: string + language: + type: string + message: + type: string + title: + type: string + required: + - language + - message + - title + type: object + type: array + importance: + type: string + message: + type: string + timestamp: + format: int64 + type: integer + title: + type: string + required: + - message + - timestamp + - title + type: object + status: + description: NotificationStatus defines the observed state of Notification + type: object + type: object + served: true + storage: true + subresources: + status: {} From af58b3d4b520a5a4bc640339511ecd124be24f98 Mon Sep 17 00:00:00 2001 From: jiahui Date: Tue, 28 Nov 2023 17:22:19 +0800 Subject: [PATCH 14/16] optimize notification_types struct --- .../account/controllers/debt_controller.go | 11 +++++----- .../notification/api/v1/notification_types.go | 21 +++++++++---------- .../notification.sealos.io_notifications.yaml | 21 ++----------------- deploy/cloud/manifests/notifications_crd.yaml | 7 ++----- 4 files changed, 19 insertions(+), 41 deletions(-) diff --git a/controllers/account/controllers/debt_controller.go b/controllers/account/controllers/debt_controller.go index e35586e9acd..1266e6d289c 100644 --- a/controllers/account/controllers/debt_controller.go +++ b/controllers/account/controllers/debt_controller.go @@ -412,12 +412,11 @@ func (r *DebtReconciler) sendNotice(ctx context.Context, user string, oweAmount Importance: v1.High, DesktopPopup: true, Timestamp: now, - I18n: []v1.I18n{ - { - Language: languageZh, - Title: TitleTemplateZH[noticeType], - From: fromZh, - Message: NoticeTemplateZH[noticeType], + I18n: map[string]v1.I18n{ + languageZh: { + Title: TitleTemplateZH[noticeType], + From: fromZh, + Message: NoticeTemplateZH[noticeType], }, }, } diff --git a/controllers/pkg/notification/api/v1/notification_types.go b/controllers/pkg/notification/api/v1/notification_types.go index 61732dfcab4..3596a12323a 100644 --- a/controllers/pkg/notification/api/v1/notification_types.go +++ b/controllers/pkg/notification/api/v1/notification_types.go @@ -29,20 +29,19 @@ const Low Type = "Low" // NotificationSpec defines the desired state of Notification // UserName and whether read will be set in label,because set in label is ease to query type NotificationSpec struct { - Title string `json:"title"` - Message string `json:"message"` - Timestamp int64 `json:"timestamp"` - From string `json:"from,omitempty"` - Importance Type `json:"importance,omitempty"` - DesktopPopup bool `json:"desktopPopup,omitempty"` - I18n []I18n `json:"i18ns,omitempty"` + Title string `json:"title"` + Message string `json:"message"` + Timestamp int64 `json:"timestamp"` + From string `json:"from,omitempty"` + Importance Type `json:"importance,omitempty"` + DesktopPopup bool `json:"desktopPopup,omitempty"` + I18n map[string]I18n `json:"i18ns,omitempty"` } type I18n struct { - Language string `json:"language"` - Title string `json:"title"` - Message string `json:"message"` - From string `json:"from,omitempty"` + Title string `json:"title"` + Message string `json:"message"` + From string `json:"from,omitempty"` } // NotificationStatus defines the observed state of Notification diff --git a/controllers/pkg/notification/config/crd/bases/notification.sealos.io_notifications.yaml b/controllers/pkg/notification/config/crd/bases/notification.sealos.io_notifications.yaml index c99b29ac0e4..d6c8b27923f 100644 --- a/controllers/pkg/notification/config/crd/bases/notification.sealos.io_notifications.yaml +++ b/controllers/pkg/notification/config/crd/bases/notification.sealos.io_notifications.yaml @@ -1,17 +1,3 @@ -# Copyright © 2023 sealos. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -56,22 +42,19 @@ spec: from: type: string i18ns: - items: + additionalProperties: properties: from: type: string - language: - type: string message: type: string title: type: string required: - - language - message - title type: object - type: array + type: object importance: type: string message: diff --git a/deploy/cloud/manifests/notifications_crd.yaml b/deploy/cloud/manifests/notifications_crd.yaml index b8fb78d6f4d..299b8e429aa 100644 --- a/deploy/cloud/manifests/notifications_crd.yaml +++ b/deploy/cloud/manifests/notifications_crd.yaml @@ -56,22 +56,19 @@ spec: from: type: string i18ns: - items: + additionalProperties: properties: from: type: string - language: - type: string message: type: string title: type: string required: - - language - message - title type: object - type: array + type: object importance: type: string message: From 669a483f3d47ba20c472229c9df0a9e47ccc0b00 Mon Sep 17 00:00:00 2001 From: jiahui Date: Tue, 28 Nov 2023 17:28:02 +0800 Subject: [PATCH 15/16] make license --- .../notification.sealos.io_notifications.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/controllers/pkg/notification/config/crd/bases/notification.sealos.io_notifications.yaml b/controllers/pkg/notification/config/crd/bases/notification.sealos.io_notifications.yaml index d6c8b27923f..7ba79ac4b7c 100644 --- a/controllers/pkg/notification/config/crd/bases/notification.sealos.io_notifications.yaml +++ b/controllers/pkg/notification/config/crd/bases/notification.sealos.io_notifications.yaml @@ -1,3 +1,17 @@ +# Copyright © 2023 sealos. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition From fea5e16ee8594d82bead3019f0ca592e4a120ce1 Mon Sep 17 00:00:00 2001 From: jiahui Date: Wed, 29 Nov 2023 13:59:49 +0800 Subject: [PATCH 16/16] delete useless code --- service/go.work | 1 - service/notification/alisms.go | 70 --------------------------- service/notification/common.go | 1 - service/notification/email.go | 18 ------- service/notification/go.mod | 5 -- service/notification/inferface.go | 9 ---- service/notification/types/message.go | 4 -- service/notification/types/options.go | 4 -- service/notification/types/user.go | 4 -- 9 files changed, 116 deletions(-) delete mode 100644 service/notification/alisms.go delete mode 100644 service/notification/common.go delete mode 100644 service/notification/email.go delete mode 100644 service/notification/go.mod delete mode 100644 service/notification/inferface.go delete mode 100644 service/notification/types/message.go delete mode 100644 service/notification/types/options.go delete mode 100644 service/notification/types/user.go diff --git a/service/go.work b/service/go.work index 40394e2d9a4..cbfa2e45998 100644 --- a/service/go.work +++ b/service/go.work @@ -3,7 +3,6 @@ go 1.20 use ( ./database ./pay - ./notification ) replace ( diff --git a/service/notification/alisms.go b/service/notification/alisms.go deleted file mode 100644 index 55c3384d0ec..00000000000 --- a/service/notification/alisms.go +++ /dev/null @@ -1,70 +0,0 @@ -package notification - -type AliSms struct { -} - -func (s *AliSms) SendMessage( /*message *types.Message, user *types.User, ops types.Options*/ ) error { - return nil -} - -//func CreateClient(accessKeyId *string, accessKeySecret *string) (_result *dysmsapi20170525.Client, _err error) { -// config := &openapi.Config{ -// // 必填,您的 AccessKey ID -// AccessKeyId: accessKeyId, -// // 必填,您的 AccessKey Secret -// AccessKeySecret: accessKeySecret, -// } -// // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi -// config.Endpoint = tea.String("dysmsapi.aliyuncs.com") -// _result = &dysmsapi20170525.Client{} -// _result, _err = dysmsapi20170525.NewClient(config) -// return _result, _err -//} -// -//func _main(args []*string) (_err error) { -// // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 -// // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378661.html -// client, _err := CreateClient(tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))) -// if _err != nil { -// return _err -// } -// -// sendSmsRequest := &dysmsapi20170525.SendSmsRequest{} -// runtime := &util.RuntimeOptions{} -// tryErr := func() (_e error) { -// defer func() { -// if r := tea.Recover(recover()); r != nil { -// _e = r -// } -// }() -// // 复制代码运行请自行打印 API 的返回值 -// _, _err = client.SendSmsWithOptions(sendSmsRequest, runtime) -// if _err != nil { -// return _err -// } -// -// return nil -// }() -// -// if tryErr != nil { -// var error = &tea.SDKError{} -// if _t, ok := tryErr.(*tea.SDKError); ok { -// error = _t -// } else { -// error.Message = tea.String(tryErr.Error()) -// } -// // 如有需要,请打印 error -// _, _err = util.AssertAsString(error.Message) -// if _err != nil { -// return _err -// } -// } -// return _err -//} -// -//func main() { -// err := _main(tea.StringSlice(os.Args[1:])) -// if err != nil { -// panic(err) -// } -//} diff --git a/service/notification/common.go b/service/notification/common.go deleted file mode 100644 index 4306c87f12a..00000000000 --- a/service/notification/common.go +++ /dev/null @@ -1 +0,0 @@ -package notification diff --git a/service/notification/email.go b/service/notification/email.go deleted file mode 100644 index 40646c9c4cf..00000000000 --- a/service/notification/email.go +++ /dev/null @@ -1,18 +0,0 @@ -package notification - -type Email struct { -} - -func (e *Email) SendMessage( /*message *types.Message, user *types.User, ops types.Options*/ ) error { - panic("implement me") -} - -//func sendMail(smtpServer, smtpPort, from, password, to string, message []byte) error { -// addr := fmt.Sprintf("%s:%s", smtpServer, smtpPort) -// auth := smtp.PlainAuth("", from, password, smtpServer) -// err := smtp.SendMail(addr, auth, from, []string{to}, message) -// if err != nil { -// return err -// } -// return nil -//} diff --git a/service/notification/go.mod b/service/notification/go.mod deleted file mode 100644 index c22405ef00a..00000000000 --- a/service/notification/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/labring/sealos/service/notification - -go 1.20 - -require github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible diff --git a/service/notification/inferface.go b/service/notification/inferface.go deleted file mode 100644 index 4d1087a1344..00000000000 --- a/service/notification/inferface.go +++ /dev/null @@ -1,9 +0,0 @@ -package notification - -import "github.com/labring/sealos/service/notification/types" - -type ChannelType string - -type Interface interface { - SendMessage(message *types.Message, user *types.User, opts *types.Options) error -} diff --git a/service/notification/types/message.go b/service/notification/types/message.go deleted file mode 100644 index b5586e5aa2f..00000000000 --- a/service/notification/types/message.go +++ /dev/null @@ -1,4 +0,0 @@ -package types - -type Message struct { -} diff --git a/service/notification/types/options.go b/service/notification/types/options.go deleted file mode 100644 index bd0159c6d37..00000000000 --- a/service/notification/types/options.go +++ /dev/null @@ -1,4 +0,0 @@ -package types - -type Options struct { -} diff --git a/service/notification/types/user.go b/service/notification/types/user.go deleted file mode 100644 index cb5750b6830..00000000000 --- a/service/notification/types/user.go +++ /dev/null @@ -1,4 +0,0 @@ -package types - -type User struct { -}