From 277c93c5841fcecc2a3f3b706feca3e45a0b8582 Mon Sep 17 00:00:00 2001 From: yanghao05 Date: Mon, 12 Jun 2023 10:39:56 +0800 Subject: [PATCH] separate addons --- cmd_root.go | 2 +- default_grpc.go | 14 - defautl_http.go | 14 - ds/request/page.go | 4 +- go.mod | 118 +--- go.sum | 334 +--------- providers/captcha/captcha.go | 72 -- providers/captcha/config.go | 38 -- providers/casdoor/casdoor.go | 33 - providers/casdoor/config.go | 26 - providers/cert/cert.go | 18 - providers/cert/config.go | 23 - providers/config/config.go | 58 -- providers/database/mysql/config.go | 64 -- providers/database/mysql/mysql.go | 83 --- providers/database/postgres/config.go | 45 -- providers/database/postgres/postgres.go | 46 -- providers/database/redis/config.go | 35 - providers/database/redis/redis.go | 32 - providers/database/sqlite/config.go | 29 - providers/database/sqlite/sqlite.go | 27 - providers/faker/faker.go | 27 - providers/grpcs/config.go | 30 - providers/grpcs/grpcs.go | 76 --- providers/hashids/config.go | 24 - providers/hashids/hashids.go | 34 - providers/http/config.go | 44 -- providers/http/contracts.go | 8 - providers/http/gin/engine.go | 73 -- providers/httpclient/client.go | 151 ----- providers/httpclient/config.go | 35 - providers/httpclient/cookiejar/jar.go | 704 -------------------- providers/httpclient/cookiejar/punycode.go | 159 ----- providers/httpclient/cookiejar/serialize.go | 188 ------ providers/jwt/config.go | 34 - providers/jwt/jwt.go | 115 ---- providers/k8s/kubernetes.go | 39 -- providers/log/config.go | 44 -- providers/log/gin_level_writer.go | 20 - providers/log/logger.go | 159 ----- providers/log/zap.go | 13 - providers/micro_service/config.go | 15 - providers/micro_service/contracts.go | 6 - providers/micro_service/gomicro/engine.go | 54 -- providers/single_flight/flight.go | 21 - providers/swagger/config.go | 30 - providers/swagger/docs.go | 53 -- providers/swagger/template.go | 39 -- providers/uuid/uuid.go | 41 -- resources/.gitkeep | 0 services/grpc.go | 25 - services/http.go | 24 - utils/info.go | 7 + 53 files changed, 48 insertions(+), 3359 deletions(-) delete mode 100644 default_grpc.go delete mode 100644 defautl_http.go delete mode 100644 providers/captcha/captcha.go delete mode 100644 providers/captcha/config.go delete mode 100644 providers/casdoor/casdoor.go delete mode 100644 providers/casdoor/config.go delete mode 100644 providers/cert/cert.go delete mode 100644 providers/cert/config.go delete mode 100644 providers/config/config.go delete mode 100755 providers/database/mysql/config.go delete mode 100644 providers/database/mysql/mysql.go delete mode 100755 providers/database/postgres/config.go delete mode 100644 providers/database/postgres/postgres.go delete mode 100644 providers/database/redis/config.go delete mode 100644 providers/database/redis/redis.go delete mode 100755 providers/database/sqlite/config.go delete mode 100644 providers/database/sqlite/sqlite.go delete mode 100644 providers/faker/faker.go delete mode 100644 providers/grpcs/config.go delete mode 100644 providers/grpcs/grpcs.go delete mode 100644 providers/hashids/config.go delete mode 100644 providers/hashids/hashids.go delete mode 100644 providers/http/config.go delete mode 100644 providers/http/contracts.go delete mode 100644 providers/http/gin/engine.go delete mode 100644 providers/httpclient/client.go delete mode 100644 providers/httpclient/config.go delete mode 100644 providers/httpclient/cookiejar/jar.go delete mode 100644 providers/httpclient/cookiejar/punycode.go delete mode 100644 providers/httpclient/cookiejar/serialize.go delete mode 100644 providers/jwt/config.go delete mode 100644 providers/jwt/jwt.go delete mode 100644 providers/k8s/kubernetes.go delete mode 100644 providers/log/config.go delete mode 100644 providers/log/gin_level_writer.go delete mode 100644 providers/log/logger.go delete mode 100644 providers/log/zap.go delete mode 100644 providers/micro_service/config.go delete mode 100644 providers/micro_service/contracts.go delete mode 100644 providers/micro_service/gomicro/engine.go delete mode 100644 providers/single_flight/flight.go delete mode 100644 providers/swagger/config.go delete mode 100644 providers/swagger/docs.go delete mode 100644 providers/swagger/template.go delete mode 100644 providers/uuid/uuid.go delete mode 100644 resources/.gitkeep delete mode 100644 services/grpc.go delete mode 100644 services/http.go create mode 100644 utils/info.go diff --git a/cmd_root.go b/cmd_root.go index 09a3414..45f0afd 100644 --- a/cmd_root.go +++ b/cmd_root.go @@ -5,9 +5,9 @@ import ( "log" "github.com/pkg/errors" + "github.com/rogeecn/atom-addons/providers/config" "github.com/rogeecn/atom/container" "github.com/rogeecn/atom/contracts" - "github.com/rogeecn/atom/providers/config" "github.com/spf13/cobra" "go.uber.org/dig" ) diff --git a/default_grpc.go b/default_grpc.go deleted file mode 100644 index 49df658..0000000 --- a/default_grpc.go +++ /dev/null @@ -1,14 +0,0 @@ -package atom - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/grpcs" - "github.com/rogeecn/atom/providers/log" -) - -func DefaultGRPC(providers ...container.ProviderContainer) container.Providers { - return append(container.Providers{ - log.DefaultProvider(), - grpcs.DefaultProvider(), - }, providers...) -} diff --git a/defautl_http.go b/defautl_http.go deleted file mode 100644 index 8f58d34..0000000 --- a/defautl_http.go +++ /dev/null @@ -1,14 +0,0 @@ -package atom - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/http/gin" - "github.com/rogeecn/atom/providers/log" -) - -func DefaultHTTP(providers ...container.ProviderContainer) container.Providers { - return append(container.Providers{ - log.DefaultProvider(), - gin.DefaultProvider(), - }, providers...) -} diff --git a/ds/request/page.go b/ds/request/page.go index ea2ff23..2a9fed3 100644 --- a/ds/request/page.go +++ b/ds/request/page.go @@ -1,6 +1,6 @@ package request type PageFilter struct { - Page uint64 `form:"page"` - Limit uint64 `form:"limit"` + Page uint64 `form:"page"` + PerPage uint64 `form:"per_page"` } diff --git a/go.mod b/go.mod index 9bececd..1d9ec12 100644 --- a/go.mod +++ b/go.mod @@ -4,85 +4,38 @@ go 1.19 require ( github.com/brianvoe/gofakeit/v6 v6.20.1 - github.com/casdoor/casdoor-go-sdk v0.21.0 - github.com/gin-gonic/gin v1.9.1 - github.com/glebarez/sqlite v1.5.0 + github.com/glebarez/sqlite v1.8.0 github.com/go-gormigrate/gormigrate/v2 v2.0.2 - github.com/gofrs/uuid v4.0.0+incompatible - github.com/golang-jwt/jwt/v4 v4.4.3 - github.com/imroc/req/v3 v3.34.0 - github.com/juju/go4 v0.0.0-20160222163258-40d72ab9641a - github.com/mojocn/base64Captcha v1.3.5 github.com/pkg/errors v0.9.1 - github.com/redis/go-redis/v9 v9.0.5 + github.com/rogeecn/atom-addons/providers/config v0.0.0-20230612015354-c4986241695f github.com/rogeecn/gen v1.0.11 - github.com/speps/go-hashids/v2 v2.0.1 github.com/spf13/cobra v1.7.0 - github.com/spf13/viper v1.15.0 - github.com/swaggo/files v1.0.1 - github.com/swaggo/gin-swagger v1.6.0 - github.com/swaggo/swag v1.16.1 - go-micro.dev/v4 v4.10.2 - go.uber.org/dig v1.15.0 - go.uber.org/zap v1.21.0 + github.com/spf13/viper v1.16.0 + go.uber.org/dig v1.17.0 golang.org/x/crypto v0.9.0 - golang.org/x/net v0.10.0 - golang.org/x/sync v0.2.0 - google.golang.org/grpc v1.53.0 - gopkg.in/retry.v1 v1.0.3 gorm.io/driver/mysql v1.4.1 gorm.io/driver/postgres v1.4.4 gorm.io/gen v0.3.19 - gorm.io/gorm v1.24.0 - k8s.io/client-go v0.27.1 + gorm.io/gorm v1.25.1 ) require ( - github.com/KyleBanks/depth v1.2.1 // indirect - github.com/Microsoft/go-winio v0.6.0 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 // indirect - github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/bitly/go-simplejson v0.5.0 // indirect - github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect github.com/bytedance/sonic v1.9.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/emicklei/go-restful/v3 v3.9.0 // indirect - github.com/emirpasic/gods v1.12.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/gin-contrib/sse v0.1.0 // indirect - github.com/glebarez/go-sqlite v1.19.1 // indirect - github.com/go-git/gcfg v1.5.0 // indirect - github.com/go-git/go-billy/v5 v5.3.1 // indirect - github.com/go-git/go-git/v5 v5.4.2 // indirect - github.com/go-logr/logr v1.2.3 // indirect - github.com/go-openapi/jsonpointer v0.19.6 // indirect - github.com/go-openapi/jsonreference v0.20.2 // indirect - github.com/go-openapi/spec v0.20.9 // indirect - github.com/go-openapi/swag v0.22.3 // indirect + github.com/gin-gonic/gin v1.9.1 // indirect + github.com/glebarez/go-sqlite v1.21.1 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.14.1 // indirect github.com/go-sql-driver/mysql v1.6.0 // indirect - github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/goccy/go-json v0.10.2 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect - github.com/golang/mock v1.6.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-cmp v0.5.9 // indirect - github.com/google/gofuzz v1.1.0 // indirect github.com/google/pprof v0.0.0-20230426061923-93006964c1fc // indirect github.com/google/uuid v1.3.0 // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jackc/chunkreader/v2 v2.0.1 // indirect github.com/jackc/pgconn v1.13.0 // indirect @@ -92,80 +45,43 @@ require ( github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect github.com/jackc/pgtype v1.12.0 // indirect github.com/jackc/pgx/v4 v4.17.2 // indirect - github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect - github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect github.com/leodido/go-urn v1.2.4 // indirect github.com/magiconair/properties v1.8.7 // indirect - github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/microsoft/go-mssqldb v0.21.0 // indirect - github.com/miekg/dns v1.1.43 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/nxadm/tail v1.4.8 // indirect - github.com/onsi/ginkgo/v2 v2.9.2 // indirect - github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect - github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect - github.com/quic-go/qpack v0.4.0 // indirect - github.com/quic-go/qtls-go1-19 v0.3.2 // indirect - github.com/quic-go/qtls-go1-20 v0.2.2 // indirect - github.com/quic-go/quic-go v0.34.0 // indirect - github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect - github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/sergi/go-diff v1.1.0 // indirect - github.com/spf13/afero v1.9.3 // indirect - github.com/spf13/cast v1.5.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/rogpeppe/go-internal v1.10.0 // indirect + github.com/spf13/afero v1.9.5 // indirect + github.com/spf13/cast v1.5.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.4.2 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect - github.com/urfave/cli/v2 v2.3.0 // indirect - github.com/xanzy/ssh-agent v0.3.0 // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.8.0 // indirect golang.org/x/arch v0.3.0 // indirect - golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53 // indirect - golang.org/x/image v0.0.0-20190802002840-cff245a6509b // indirect golang.org/x/mod v0.10.0 // indirect - golang.org/x/oauth2 v0.4.0 // indirect + golang.org/x/net v0.10.0 // indirect golang.org/x/sys v0.8.0 // indirect - golang.org/x/term v0.8.0 // indirect golang.org/x/text v0.9.0 // indirect - golang.org/x/time v0.1.0 // indirect golang.org/x/tools v0.9.3 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect google.golang.org/protobuf v1.30.0 // indirect - gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect - gopkg.in/warnings.v0 v0.1.2 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gorm.io/datatypes v1.0.7 // indirect gorm.io/driver/sqlserver v1.4.1 // indirect gorm.io/hints v1.1.0 // indirect gorm.io/plugin/dbresolver v1.3.0 // indirect - k8s.io/api v0.27.1 // indirect - k8s.io/apimachinery v0.27.1 // indirect - k8s.io/klog/v2 v2.90.1 // indirect - k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a // indirect - k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect - modernc.org/libc v1.19.0 // indirect + modernc.org/libc v1.22.3 // indirect modernc.org/mathutil v1.5.0 // indirect - modernc.org/memory v1.4.0 // indirect - modernc.org/sqlite v1.19.1 // indirect - sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + modernc.org/memory v1.5.0 // indirect + modernc.org/sqlite v1.21.1 // indirect ) diff --git a/go.sum b/go.sum index ccb02d3..15921f1 100644 --- a/go.sum +++ b/go.sum @@ -48,40 +48,14 @@ github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0/go.mod h1:Vt9s github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1/go.mod h1:4qFor3D/HDsvBME35Xy9rwW9DecL+M2sNw1ybjPtwA0= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= -github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= -github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 h1:YoJbenK9C67SkzkDfmQuVln04ygHj3vjZfd9FL+GmQQ= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/brianvoe/gofakeit/v6 v6.20.1 h1:8ihJ60OvPnPJ2W6wZR7M+TTeaZ9bml0z6oy4gvyJ/ek= github.com/brianvoe/gofakeit/v6 v6.20.1/go.mod h1:Ow6qC71xtwm79anlwKRlWZW6zVq9D2XHE4QSSMP/rU8= -github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao= -github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= -github.com/casdoor/casdoor-go-sdk v0.21.0 h1:VIolLhU8/eiuzJ0InpRqWkXzcYmC4sv2ZtL3M8PMbtU= -github.com/casdoor/casdoor-go-sdk v0.21.0/go.mod h1:MBed3ISHQfXTtoOCAk5T8l5lt4wFvsyynrw0awggydY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -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/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= @@ -96,59 +70,32 @@ github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= -github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/frankban/quicktest v1.2.2/go.mod h1:Qh/WofXFeiAFII1aEBu529AtJo6Zg2VHscnEsbBnJ20= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= -github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= -github.com/glebarez/go-sqlite v1.19.1 h1:o2XhjyR8CQ2m84+bVz10G0cabmG0tY4sIMiCbrcUTrY= -github.com/glebarez/go-sqlite v1.19.1/go.mod h1:9AykawGIyIcxoSfpYWiX1SgTNHTNsa/FVc75cDkbp4M= -github.com/glebarez/sqlite v1.5.0 h1:+8LAEpmywqresSoGlqjjT+I9m4PseIM3NcerIJ/V7mk= -github.com/glebarez/sqlite v1.5.0/go.mod h1:0wzXzTvfVJIN2GqRhCdMbnYd+m+aH5/QV7B30rM6NgY= -github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-git-fixtures/v4 v4.2.1 h1:n9gGL1Ct/yIw+nfsfr8s4+sbhT+Ncu2SubfXjIWgci8= -github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= -github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= -github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= +github.com/glebarez/go-sqlite v1.21.1 h1:7MZyUPh2XTrHS7xNEHQbrhfMZuPSzhkm2A1qgg0y5NY= +github.com/glebarez/sqlite v1.8.0 h1:02X12E2I/4C1n+v90yTqrjRa8yuo7c3KeHI3FRznCvc= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -156,22 +103,6 @@ github.com/go-gormigrate/gormigrate/v2 v2.0.2 h1:YV4Lc5yMQX8ahVW0ENPq6sPhrhdkGuk github.com/go-gormigrate/gormigrate/v2 v2.0.2/go.mod h1:vld36QpBTfTzLealsHsmQQJK5lSwJt6wiORv+oFX8/I= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= -github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= -github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= -github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/spec v0.20.9 h1:xnlYNQAwKd2VQRRfwTEI0DcK+2cbuvI/0c7jx3gA8/8= -github.com/go-openapi/spec v0.20.9/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= -github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= @@ -182,29 +113,20 @@ github.com/go-playground/validator/v10 v10.14.1/go.mod h1:9iXMNT7sEkjXb0I+enO7QX github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang-jwt/jwt/v4 v4.1.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang-jwt/jwt/v4 v4.4.3 h1:Hxl6lhQFj4AnOX6MLrsCb/+7tCj7DxP7VA+2rDIq5AU= -github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -216,8 +138,6 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -233,15 +153,9 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= -github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.2.1-0.20190312032427-6f77996f0c42/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -249,14 +163,10 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -271,7 +181,6 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20230426061923-93006964c1fc h1:AGDHt781oIcL4EFk7cPnvBUYTwU8BEU6GDTO3ZMn1sE= -github.com/google/pprof v0.0.0-20230426061923-93006964c1fc/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -282,11 +191,6 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -294,10 +198,6 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imroc/req/v3 v3.34.0 h1:ChzOrBy397f+mvLTGT0yai9FeODsZnLQU7EnRvVlhiY= -github.com/imroc/req/v3 v3.34.0/go.mod h1:zWuou7ZZtPLp/gmMj58jARgZuhKlEdb2gLxDeNfWpCA= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= @@ -352,15 +252,12 @@ github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0f github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.2.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= @@ -368,18 +265,10 @@ github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/ github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= -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.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/juju/go4 v0.0.0-20160222163258-40d72ab9641a h1:45JtCyuNYE+QN9aPuR1ID9++BQU+NMTMudHSuaK0Las= -github.com/juju/go4 v0.0.0-20160222163258-40d72ab9641a/go.mod h1:RVHtZuvrpETIepiNUrNlih2OynoFf1eM6DGC6dloXzk= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -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/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= @@ -388,14 +277,12 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= @@ -406,33 +293,20 @@ github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= -github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= github.com/microsoft/go-mssqldb v0.17.0/go.mod h1:OkoNGhGEs8EZqchVTtochlXruEhEOaO4S0d2sB5aeGQ= github.com/microsoft/go-mssqldb v0.21.0 h1:p2rpHIL7TlSv1QrbXJUAcbyRKnIT0C9rRkH2E4OjLn8= github.com/microsoft/go-mssqldb v0.21.0/go.mod h1:+4wZTUnz/SV6nffv+RRRB/ss8jPng5Sho2SmM1l2ts4= -github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -441,21 +315,7 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/mojocn/base64Captcha v1.3.5 h1:Qeilr7Ta6eDtG4S+tQuZ5+hO+QHbiGAJdi4PfoagaA0= -github.com/mojocn/base64Captcha v1.3.5/go.mod h1:/tTTXn4WTpX9CfrmipqRytCpJ27Uw3G6I7NcP2WwcmY= github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= -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.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU= -github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts= -github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E= -github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= -github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= -github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= -github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= @@ -468,54 +328,37 @@ github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qR github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= -github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/quic-go/qtls-go1-19 v0.3.2 h1:tFxjCFcTQzK+oMxG6Zcvp4Dq8dx4yD3dDiIiyc86Z5U= -github.com/quic-go/qtls-go1-19 v0.3.2/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI= -github.com/quic-go/qtls-go1-20 v0.2.2 h1:WLOPx6OY/hxtTxKV1Zrq20FtXtDEkeY00CGQm8GEa3E= -github.com/quic-go/qtls-go1-20 v0.2.2/go.mod h1:JKtK6mjbAVcUTN/9jZpvLbGxvdWIKS8uT7EiStoU1SM= -github.com/quic-go/quic-go v0.34.0 h1:OvOJ9LFjTySgwOTYUZmNoq0FzVicP8YujpV0kB7m2lU= -github.com/quic-go/quic-go v0.34.0/go.mod h1:+4CVgVppm0FNjpG3UcX8Joi/frKOH7/ciD5yGcwOO1g= -github.com/redis/go-redis/v9 v9.0.5 h1:CuQcn5HIEeK7BgElubPP8CGtE0KakrnbBSTLjathl5o= -github.com/redis/go-redis/v9 v9.0.5/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDOjzMvcuQHk= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/rogeecn/atom-addons/providers/config v0.0.0-20230612015354-c4986241695f h1:jfL3aNhXyoxnGo99RJ1PPoijYfd2hB5jZx3syrsKYz4= +github.com/rogeecn/atom-addons/providers/config v0.0.0-20230612015354-c4986241695f/go.mod h1:hr6V2JEtrKxy71M83S4Vgp6lAHUItS+Pk/if5f/fszk= github.com/rogeecn/gen v1.0.11 h1:POphMIL4Jt+2nNl8OAayGhhBqb3jF3XRpfEO/WS8Byg= github.com/rogeecn/gen v1.0.11/go.mod h1:LEbdAmYd12LM+sfRNfyM4RyThP0VEA1Z+R96OQlQ8aA= -github.com/rogpeppe/clock v0.0.0-20190514195947-2896927a307a h1:3QH7VyOaaiUHNrA9Se4YQIRkDTCw1EJls9xTUCaCeRM= -github.com/rogpeppe/clock v0.0.0-20190514195947-2896927a307a/go.mod h1:4r5QyqhjIWCcK8DO4KMclc5Iknq5qVBAlbYYzAbUScQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/speps/go-hashids/v2 v2.0.1 h1:ViWOEqWES/pdOSq+C1SLVa8/Tnsd52XC34RY7lt7m4g= -github.com/speps/go-hashids/v2 v2.0.1/go.mod h1:47LKunwvDZki/uRVD6NImtyk712yFzIs3UF3KlHohGw= -github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= -github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= +github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= 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/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= +github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= 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= @@ -535,29 +378,15 @@ github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gt github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= -github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= -github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M= -github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo= -github.com/swaggo/swag v1.16.1 h1:fTNRhKstPKxcnoKsytm4sahr8FaYzUcT7i1/3nd/fBg= -github.com/swaggo/swag v1.16.1/go.mod h1:9/LMvHycG3NFHfR6LwvikHv5iFvmPADQ359cKikGxto= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= -github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/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= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= -go-micro.dev/v4 v4.10.2 h1:GWQf1+FcAiMf1yca3P09RNjB31Xtk0C5HiKHSpq/2qA= -go-micro.dev/v4 v4.10.2/go.mod h1:RV2AolXjTAil9Xm82QCMo1gknuZwD61oMUH14wJpECk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -568,29 +397,17 @@ go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/dig v1.15.0 h1:vq3YWr8zRj1eFGC7Gvf907hE0eRjPTZ1d3xHadD6liE= -go.uber.org/dig v1.15.0/go.mod h1:pKHs0wMynzL6brANhB2hLMro+zalv1osARTviTcqHLM= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/dig v1.17.0 h1:5Chju+tUvcC+N7N6EV08BJz41UZuO3BmHcN4A287ZLI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -601,12 +418,10 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220511200225-c6db032c6c88/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -624,11 +439,7 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53 h1:5llv2sWeaMSnA3w2kS57ouQQ4pudlXrR0dCgw51QK9o= -golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= 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= @@ -651,8 +462,6 @@ 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.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/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.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= @@ -688,13 +497,9 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -706,9 +511,6 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -719,10 +521,7 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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-20201207232520-09787c993a3a/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.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -737,9 +536,7 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -765,22 +562,12 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -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-20220811171246-fbc7d0a398ab/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.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -789,9 +576,6 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -800,14 +584,11 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= -golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 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= @@ -850,22 +631,16 @@ golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/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-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -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.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-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -899,7 +674,6 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -931,15 +705,12 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 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-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -956,8 +727,6 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -969,38 +738,22 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= -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.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/retry.v1 v1.0.3 h1:a9CArYczAVv6Qs6VGoLMio99GEs7kY9UzSF9+LD+iGs= -gopkg.in/retry.v1 v1.0.3/go.mod h1:FJkXmWiMaAo7xB+xhvDF59zhfjDWyzmyAxiT4dB688g= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -1026,8 +779,8 @@ gorm.io/gorm v1.23.1/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= gorm.io/gorm v1.23.6/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= gorm.io/gorm v1.23.7/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= -gorm.io/gorm v1.24.0 h1:j/CoiSm6xpRpmzbFJsQHYj+I8bGYWLXVHeYEyyKlF74= gorm.io/gorm v1.24.0/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= +gorm.io/gorm v1.25.1 h1:nsSALe5Pr+cM3V1qwwQ7rOkw+6UeLrX5O4v3llhHa64= gorm.io/hints v1.1.0 h1:Lp4z3rxREufSdxn4qmkK3TLDltrM10FLTHiuqwDPvXw= gorm.io/hints v1.1.0/go.mod h1:lKQ0JjySsPBj3uslFzY3JhYDtqEwzm+G1hv8rWujB6Y= gorm.io/plugin/dbresolver v1.3.0 h1:uFDX3bIuH9Lhj5LY2oyqR/bU6pqWuDgas35NAPF4X3M= @@ -1039,57 +792,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.27.1 h1:Z6zUGQ1Vd10tJ+gHcNNNgkV5emCyW+v2XTmn+CLjSd0= -k8s.io/api v0.27.1/go.mod h1:z5g/BpAiD+f6AArpqNjkY+cji8ueZDU/WV1jcj5Jk4E= -k8s.io/apimachinery v0.27.1 h1:EGuZiLI95UQQcClhanryclaQE6xjg1Bts6/L3cD7zyc= -k8s.io/apimachinery v0.27.1/go.mod h1:5ikh59fK3AJ287GUvpUsryoMFtH9zj/ARfWCo3AyXTM= -k8s.io/client-go v0.27.1 h1:oXsfhW/qncM1wDmWBIuDzRHNS2tLhK3BZv512Nc59W8= -k8s.io/client-go v0.27.1/go.mod h1:f8LHMUkVb3b9N8bWturc+EDtVVVwZ7ueTVquFAJb2vA= -k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= -k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a h1:gmovKNur38vgoWfGtP5QOGNOA7ki4n6qNYoFAgMlNvg= -k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a/go.mod h1:y5VtZWM9sHHc2ZodIH/6SHzXj+TPU5USoA8lcIeKEKY= -k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY= -k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= -modernc.org/cc/v3 v3.38.1/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= -modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI= -modernc.org/ccgo/v3 v3.0.0-20220910160915-348f15de615a/go.mod h1:8p47QxPkdugex9J4n9P2tLZ9bK01yngIVp00g4nomW0= -modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= -modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= -modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= -modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA= -modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0= -modernc.org/libc v1.19.0 h1:bXyVhGQg6KIClTr8FMVIDPl7jtbcs7aS5WP7vLDaxPs= -modernc.org/libc v1.19.0/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= -modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY= modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/memory v1.4.0 h1:crykUfNSnMAXaOJnnxcSzbUGMqkLWjklJKkBK2nwZwk= -modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.19.1 h1:8xmS5oLnZtAK//vnd4aTVj8VOeTAccEFOtUnIzfSw+4= -modernc.org/sqlite v1.19.1/go.mod h1:UfQ83woKMaPW/ZBruK0T7YaFCrI+IE0LeWVY6pmnVms= -modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= -modernc.org/tcl v1.14.0/go.mod h1:gQ7c1YPMvryCHCcmf8acB6VPabE59QBeuRQLL7cTUlM= -modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/z v1.6.0/go.mod h1:hVdgNMh8ggTuRG1rGU8x+xGRFfiQUIAw0ZqlPy8+HyQ= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/sqlite v1.21.1 h1:GyDFqNnESLOhwwDRaHGdp2jKLDzpyT/rNLglX3ZkMSU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= -sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/providers/captcha/captcha.go b/providers/captcha/captcha.go deleted file mode 100644 index ae81b98..0000000 --- a/providers/captcha/captcha.go +++ /dev/null @@ -1,72 +0,0 @@ -package captcha - -import ( - "errors" - "log" - "time" - - "github.com/mojocn/base64Captcha" - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" - "github.com/spf13/viper" -) - -type CaptchaResponse struct { - CaptchaId string `json:"captcha_id,omitempty"` - PicPath string `json:"pic_path,omitempty"` - CaptchaLength uint `json:"captcha_length,omitempty"` - OpenCaptcha uint `json:"open_captcha,omitempty"` -} - -type Captcha struct { - captcha *base64Captcha.Captcha -} - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var conf Config - if err := o.UnmarshalConfig(&conf); err != nil { - return err - } - - return container.Container.Provide(func() (*Captcha, error) { - driver := base64Captcha.NewDriverDigit( - int(conf.Width), - int(conf.Height), - int(conf.Long), - conf.MaxScrew, - conf.DotCount, - ) - - store := base64Captcha.DefaultMemStore - return &Captcha{ - captcha: base64Captcha.NewCaptcha(driver, store), - }, nil - }, o.DiOptions()...) -} - -func (c *Captcha) OpenCaptchaTimeOutDuration() time.Duration { - d, err := time.ParseDuration(viper.GetString("CAPTCHA_IMG_OPEN_TIMEOUT")) - if err != nil { - log.Panic(err) - } - return d -} - -func (c *Captcha) Generate() (*CaptchaResponse, error) { - id, b64s, err := c.captcha.Generate() - if err != nil { - return nil, errors.New("验证码获取失败") - } - - return &CaptchaResponse{ - CaptchaId: id, - PicPath: b64s, - CaptchaLength: viper.GetUint("CAPTCHA_IMG_KEY_LONG"), - OpenCaptcha: viper.GetUint("CAPTCHA_IMG_OPEN"), - }, nil -} - -func (c *Captcha) Verify(id, answer string) bool { - return c.captcha.Verify(id, answer, false) -} diff --git a/providers/captcha/config.go b/providers/captcha/config.go deleted file mode 100644 index f8b140f..0000000 --- a/providers/captcha/config.go +++ /dev/null @@ -1,38 +0,0 @@ -package captcha - -import ( - "log" - "time" - - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" -) - -const DefaultPrefix = "Captcha" - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(DefaultPrefix), - }, - } -} - -type Config struct { - Long uint // 验证码长度 - Width uint // 验证码宽度 - Height uint // 验证码高度 - Open uint // 防爆破验证码开启此数,0代表每次登录都需要验证码,其他数字代表错误密码此数,如3代表错误三次后出现验证码 - OpenTimeOut string // 防爆破验证码超时时间,单位:s(秒) - MaxScrew float64 // MaxSkew max absolute skew factor of a single digit. - DotCount int // Number of background circles. -} - -func (c *Config) OpenCaptchaTimeOutDuration() time.Duration { - d, err := time.ParseDuration(c.OpenTimeOut) - if err != nil { - log.Panic(err) - } - return d -} diff --git a/providers/casdoor/casdoor.go b/providers/casdoor/casdoor.go deleted file mode 100644 index 5cc297e..0000000 --- a/providers/casdoor/casdoor.go +++ /dev/null @@ -1,33 +0,0 @@ -package casdoor - -import ( - "github.com/casdoor/casdoor-go-sdk/casdoorsdk" - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/cert" - "github.com/rogeecn/atom/utils/opt" -) - -type Casdoor struct{} - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var config Config - if err := o.UnmarshalConfig(&config); err != nil { - return err - } - return container.Container.Provide(func(cert *cert.Cert) *Casdoor { - certificate := config.Certificate - if certificate == "" { - certificate = cert.Cert - } - casdoorsdk.InitConfig( - config.Endpoint, - config.ClientId, - config.ClientSecret, - certificate, - config.OrganizationName, - config.ApplicationName, - ) - return &Casdoor{} - }, o.DiOptions()...) -} diff --git a/providers/casdoor/config.go b/providers/casdoor/config.go deleted file mode 100644 index baccbce..0000000 --- a/providers/casdoor/config.go +++ /dev/null @@ -1,26 +0,0 @@ -package casdoor - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" -) - -const DefaultPrefix = "Casdoor" - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(DefaultPrefix), - }, - } -} - -type Config struct { - Endpoint string - ClientId string - ClientSecret string - OrganizationName string - ApplicationName string - Certificate string -} diff --git a/providers/cert/cert.go b/providers/cert/cert.go deleted file mode 100644 index 0f2a440..0000000 --- a/providers/cert/cert.go +++ /dev/null @@ -1,18 +0,0 @@ -package cert - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" -) - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var config Cert - if err := o.UnmarshalConfig(&config); err != nil { - return err - } - - return container.Container.Provide(func() (*Cert, error) { - return &config, nil - }, o.DiOptions()...) -} diff --git a/providers/cert/config.go b/providers/cert/config.go deleted file mode 100644 index 6242c01..0000000 --- a/providers/cert/config.go +++ /dev/null @@ -1,23 +0,0 @@ -package cert - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" -) - -const DefaultPrefix = "Cert" - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(DefaultPrefix), - }, - } -} - -type Cert struct { - CA string - Cert string - Key string -} diff --git a/providers/config/config.go b/providers/config/config.go deleted file mode 100644 index b1994cf..0000000 --- a/providers/config/config.go +++ /dev/null @@ -1,58 +0,0 @@ -package config - -import ( - "log" - "os" - "path/filepath" - - "github.com/pkg/errors" - "github.com/rogeecn/atom/container" - "github.com/spf13/viper" -) - -func Load(file, app string) (*viper.Viper, error) { - v := viper.NewWithOptions(viper.KeyDelimiter("_")) - v.AutomaticEnv() - - if file == "" { - v.SetConfigType("toml") - v.SetConfigName(app + ".toml") - - // execute path - execPath, err := os.Executable() - if err == nil { - v.AddConfigPath(filepath.Dir(execPath)) - } - - // home path - homePath, err := os.UserHomeDir() - if err == nil { - v.AddConfigPath(homePath) - v.AddConfigPath(homePath + "/" + app) - v.AddConfigPath(homePath + "/.config") - v.AddConfigPath(homePath + "/.config/" + app) - } - - v.AddConfigPath("/etc") - v.AddConfigPath("/etc/" + app) - v.AddConfigPath("/usr/local/etc") - v.AddConfigPath("/usr/local/etc/" + app) - } else { - v.SetConfigFile(file) - } - - err := v.ReadInConfig() - log.Println("config file:", v.ConfigFileUsed()) - if err != nil { - return nil, errors.Wrap(err, "config file read error") - } - - err = container.Container.Provide(func() (*viper.Viper, error) { - return v, nil - }) - if err != nil { - return nil, err - } - - return v, nil -} diff --git a/providers/database/mysql/config.go b/providers/database/mysql/config.go deleted file mode 100755 index 344ae6f..0000000 --- a/providers/database/mysql/config.go +++ /dev/null @@ -1,64 +0,0 @@ -package mysql - -import ( - "fmt" - - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" -) - -const DefaultPrefix = "MySQL" - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(DefaultPrefix), - }, - } -} - -// MySQL database config -type Config struct { - Host string - Port uint - Database string - Username string - Password string - Prefix string // 表前缀 - Singular bool // 是否开启全局禁用复数,true表示开启 - MaxIdleConns int // 空闲中的最大连接数 - MaxOpenConns int // 打开到数据库的最大连接数 - Engine string // 数据库引擎,默认InnoDB -} - -func (m *Config) CreateDatabaseSql() string { - return fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;", m.Database) -} - -func (m *Config) EmptyDsn() string { - dsnTpl := "%s@tcp(%s:%d)/" - - authString := func() string { - if len(m.Password) > 0 { - return m.Username + ":" + m.Password - } - return m.Username - } - - return fmt.Sprintf(dsnTpl, authString(), m.Host, m.Port) -} - -// DSN connection dsn -func (m *Config) DSN() string { - dsnTpl := "%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local" - - authString := func() string { - if len(m.Password) > 0 { - return m.Username + ":" + m.Password - } - return m.Username - } - - return fmt.Sprintf(dsnTpl, authString(), m.Host, m.Port, m.Database) -} diff --git a/providers/database/mysql/mysql.go b/providers/database/mysql/mysql.go deleted file mode 100644 index cd2665a..0000000 --- a/providers/database/mysql/mysql.go +++ /dev/null @@ -1,83 +0,0 @@ -package mysql - -import ( - "database/sql" - - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/log" - "github.com/rogeecn/atom/utils/opt" - - "gorm.io/driver/mysql" - "gorm.io/gorm" - "gorm.io/gorm/schema" -) - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var conf Config - if err := o.UnmarshalConfig(&conf); err != nil { - return err - } - - return container.Container.Provide(func() (*gorm.DB, error) { - if err := createMySQLDatabase(conf.EmptyDsn(), "mysql", conf.CreateDatabaseSql()); err != nil { - return nil, err - } - - mysqlConfig := mysql.Config{ - DSN: conf.DSN(), // DSN data source name - DefaultStringSize: 191, // string 类型字段的默认长度 - SkipInitializeWithVersion: false, // 根据版本自动配置 - } - - gormConfig := gorm.Config{ - NamingStrategy: schema.NamingStrategy{ - TablePrefix: conf.Prefix, - SingularTable: conf.Singular, - }, - DisableForeignKeyConstraintWhenMigrating: true, - } - - // TODO: config logger - // _default := logger.New(NewWriter(log.New(os.Stdout, "\r\n", log.LstdFlags)), logger.Config{ - // SlowThreshold: 200 * time.Millisecond, - // LogLevel: logger.Warn, - // Colorful: true, - // }) - // conf.Logger = _default.LogMode(logger.Warn) - - db, err := gorm.Open(mysql.New(mysqlConfig), &gormConfig) - if err != nil { - return nil, err - } - - // config instance - db.InstanceSet("gorm:table_options", "ENGINE="+conf.Engine) - - sqlDB, _ := db.DB() - sqlDB.SetMaxIdleConns(conf.MaxIdleConns) - sqlDB.SetMaxOpenConns(conf.MaxOpenConns) - - return db, err - }, o.DiOptions()...) -} - -// createDatabase 创建数据库 -func createMySQLDatabase(dsn, driver, createSql string) error { - db, err := sql.Open(driver, dsn) - if err != nil { - return err - } - defer func(db *sql.DB) { - err = db.Close() - if err != nil { - log.Error(err) - } - }(db) - err = db.Ping() - if err != nil { - return err - } - _, err = db.Exec(createSql) - return err -} diff --git a/providers/database/postgres/config.go b/providers/database/postgres/config.go deleted file mode 100755 index 10c2575..0000000 --- a/providers/database/postgres/config.go +++ /dev/null @@ -1,45 +0,0 @@ -package postgres - -import ( - "fmt" - - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" -) - -const DefaultPrefix = "Postgres" - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(DefaultPrefix), - }, - } -} - -type Config struct { - Username string - Password string - Database string - Host string - Port uint - SslMode string - TimeZone string - Prefix string // 表前缀 - Singular bool // 是否开启全局禁用复数,true表示开启 - MaxIdleConns int // 空闲中的最大连接数 - MaxOpenConns int // 打开到数据库的最大连接数 -} - -func (m *Config) EmptyDsn() string { - dsnTpl := "host=%s user=%s password=%s port=%d dbname=postgres sslmode=disable TimeZone=Asia/Shanghai" - - return fmt.Sprintf(dsnTpl, m.Host, m.Username, m.Password, m.Port) -} - -// DSN connection dsn -func (m *Config) DSN() string { - dsnTpl := "host=%s user=%s password=%s dbname=%s port=%d sslmode=%s TimeZone=%s" - return fmt.Sprintf(dsnTpl, m.Host, m.Username, m.Password, m.Database, m.Port, m.SslMode, m.TimeZone) -} diff --git a/providers/database/postgres/postgres.go b/providers/database/postgres/postgres.go deleted file mode 100644 index 4f1405f..0000000 --- a/providers/database/postgres/postgres.go +++ /dev/null @@ -1,46 +0,0 @@ -package postgres - -import ( - "log" - - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" - - "gorm.io/driver/postgres" - "gorm.io/gorm" - "gorm.io/gorm/schema" -) - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var conf Config - if err := o.UnmarshalConfig(&conf); err != nil { - return err - } - - return container.Container.Provide(func() (*gorm.DB, error) { - dbConfig := postgres.Config{ - DSN: conf.DSN(), // DSN data source name - } - log.Println("PostgreSQL DSN: ", dbConfig.DSN) - - gormConfig := gorm.Config{ - NamingStrategy: schema.NamingStrategy{ - TablePrefix: conf.Prefix, - SingularTable: conf.Singular, - }, - DisableForeignKeyConstraintWhenMigrating: true, - } - - db, err := gorm.Open(postgres.New(dbConfig), &gormConfig) - if err != nil { - return nil, err - } - - sqlDB, _ := db.DB() - sqlDB.SetMaxIdleConns(conf.MaxIdleConns) - sqlDB.SetMaxOpenConns(conf.MaxOpenConns) - - return db, err - }, o.DiOptions()...) -} diff --git a/providers/database/redis/config.go b/providers/database/redis/config.go deleted file mode 100644 index 66904ed..0000000 --- a/providers/database/redis/config.go +++ /dev/null @@ -1,35 +0,0 @@ -package redis - -import ( - "fmt" - - "github.com/redis/go-redis/v9" - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" -) - -const DefaultPrefix = "Redis" - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(DefaultPrefix), - }, - } -} - -type Config struct { - Host string - Port uint - Password string - DB uint -} - -func (c *Config) ToRedisOptions() *redis.Options { - return &redis.Options{ - Addr: fmt.Sprintf("%s:%d", c.Host, c.Port), - Password: c.Password, - DB: int(c.DB), - } -} diff --git a/providers/database/redis/redis.go b/providers/database/redis/redis.go deleted file mode 100644 index c5ea791..0000000 --- a/providers/database/redis/redis.go +++ /dev/null @@ -1,32 +0,0 @@ -package redis - -import ( - "context" - - "github.com/pkg/errors" - "github.com/redis/go-redis/v9" - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" -) - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var conf Config - if err := o.UnmarshalConfig(&conf); err != nil { - return err - } - - return container.Container.Provide(func() (*redis.Client, error) { - client := redis.NewClient(conf.ToRedisOptions()) - - _, err := client.Ping(context.Background()).Result() - if err != nil { - return nil, errors.Wrap(err, "failed to ping") - } - - container.AddCloseAble(func() { - client.Close() - }) - return client, nil - }, o.DiOptions()...) -} diff --git a/providers/database/sqlite/config.go b/providers/database/sqlite/config.go deleted file mode 100755 index d138827..0000000 --- a/providers/database/sqlite/config.go +++ /dev/null @@ -1,29 +0,0 @@ -package sqlite - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" -) - -const DefaultPrefix = "SQLite" - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(DefaultPrefix), - }, - } -} - -type Config struct { - File string -} - -func (m *Config) CreateDatabaseSql() string { - return "" -} - -func (m *Config) EmptyDsn() string { - return m.File -} diff --git a/providers/database/sqlite/sqlite.go b/providers/database/sqlite/sqlite.go deleted file mode 100644 index 728b16a..0000000 --- a/providers/database/sqlite/sqlite.go +++ /dev/null @@ -1,27 +0,0 @@ -package sqlite - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" - - // "gorm.io/driver/sqlite" - "github.com/glebarez/sqlite" - "gorm.io/gorm" -) - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var conf Config - if err := o.UnmarshalConfig(&conf); err != nil { - return err - } - - return container.Container.Provide(func() (*gorm.DB, error) { - db, err := gorm.Open(sqlite.Open(conf.File), &gorm.Config{}) - if err != nil { - return nil, err - } - - return db, err - }, o.DiOptions()...) -} diff --git a/providers/faker/faker.go b/providers/faker/faker.go deleted file mode 100644 index 50f784d..0000000 --- a/providers/faker/faker.go +++ /dev/null @@ -1,27 +0,0 @@ -package faker - -import ( - "time" - - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" - - "github.com/brianvoe/gofakeit/v6" -) - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{}, - } -} - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - return container.Container.Provide(func() (*gofakeit.Faker, error) { - faker := gofakeit.New(time.Now().UnixNano()) - gofakeit.SetGlobalFaker(faker) - - return faker, nil - }, o.DiOptions()...) -} diff --git a/providers/grpcs/config.go b/providers/grpcs/config.go deleted file mode 100644 index 74b7148..0000000 --- a/providers/grpcs/config.go +++ /dev/null @@ -1,30 +0,0 @@ -package grpcs - -import ( - "fmt" -) - -const DefaultPrefix = "Grpc" - -type Config struct { - Host *string - Port uint - Tls *Tls -} - -type Tls struct { - CA string - Cert string - Key string -} - -func (h *Config) Address() string { - if h.Host == nil { - return h.PortString() - } - return fmt.Sprintf("%s:%d", *h.Host, h.Port) -} - -func (h *Config) PortString() string { - return fmt.Sprintf(":%d", h.Port) -} diff --git a/providers/grpcs/grpcs.go b/providers/grpcs/grpcs.go deleted file mode 100644 index 0baa997..0000000 --- a/providers/grpcs/grpcs.go +++ /dev/null @@ -1,76 +0,0 @@ -package grpcs - -import ( - "net" - - "github.com/pkg/errors" - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/log" - "github.com/rogeecn/atom/utils/opt" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" - "google.golang.org/grpc/reflection" -) - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(DefaultPrefix), - }, - } -} - -// 给注入启动调用使用 -type ServerService interface { - Name() string - Register(*grpc.Server) -} - -type Grpc struct { - server *grpc.Server - config *Config -} - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var config Config - if err := o.UnmarshalConfig(&config); err != nil { - return err - } - - return container.Container.Provide(func() (*Grpc, error) { - serverOptions := []grpc.ServerOption{} - - // tls - if config.Tls != nil { - tlsConfig, err := credentials.NewServerTLSFromFile(config.Tls.Cert, config.Tls.Key) - if err != nil { - return nil, errors.Wrap(err, "Failed to create tls credential") - } - serverOptions = append(serverOptions, grpc.Creds(tlsConfig)) - } - - return &Grpc{ - server: grpc.NewServer(serverOptions...), - config: &config, - }, nil - }, o.DiOptions()...) -} - -func (g *Grpc) Serve() error { - ld, err := net.Listen("tcp", g.config.Address()) - if err != nil { - return errors.Wrapf(err, "bind address failed: %s", g.config.Address()) - } - - log.Infof("grpc server listen on %s", g.config.Address()) - reflection.Register(g.server) - - return g.server.Serve(ld) -} - -func (g *Grpc) RegisterService(name string, f func(*grpc.Server)) { - log.Debug("register service:", name) - f(g.server) -} diff --git a/providers/hashids/config.go b/providers/hashids/config.go deleted file mode 100644 index 48d05f9..0000000 --- a/providers/hashids/config.go +++ /dev/null @@ -1,24 +0,0 @@ -package hashids - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/http" - "github.com/rogeecn/atom/utils/opt" -) - -const DefaultPrefix = "HashIDs" - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(http.DefaultPrefix), - }, - } -} - -type Config struct { - Alphabet string - Salt string - MinLength uint -} diff --git a/providers/hashids/hashids.go b/providers/hashids/hashids.go deleted file mode 100644 index 8810de8..0000000 --- a/providers/hashids/hashids.go +++ /dev/null @@ -1,34 +0,0 @@ -package hashids - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" - - "github.com/speps/go-hashids/v2" -) - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var config Config - if err := o.UnmarshalConfig(&config); err != nil { - return err - } - return container.Container.Provide(func() (*hashids.HashID, error) { - data := hashids.NewData() - data.MinLength = int(config.MinLength) - if data.MinLength == 0 { - data.MinLength = 5 - } - - data.Salt = config.Salt - if data.Salt == "" { - data.Salt = "default-salt-key" - } - - if config.Alphabet != "" { - data.Alphabet = config.Alphabet - } - - return hashids.NewWithData(data) - }, o.DiOptions()...) -} diff --git a/providers/http/config.go b/providers/http/config.go deleted file mode 100644 index 22164c1..0000000 --- a/providers/http/config.go +++ /dev/null @@ -1,44 +0,0 @@ -package http - -import ( - "fmt" -) - -const DefaultPrefix = "Http" - -type Config struct { - Static *string - Host *string - Port uint - Tls *Tls - Cors *Cors -} - -type Tls struct { - Cert string - Key string -} - -type Cors struct { - Mode string - Whitelist []Whitelist -} - -type Whitelist struct { - AllowOrigin string - AllowHeaders string - AllowMethods string - ExposeHeaders string - AllowCredentials bool -} - -func (h *Config) Address() string { - if h.Host == nil { - return h.PortString() - } - return fmt.Sprintf("%s:%d", *h.Host, h.Port) -} - -func (h *Config) PortString() string { - return fmt.Sprintf(":%d", h.Port) -} diff --git a/providers/http/contracts.go b/providers/http/contracts.go deleted file mode 100644 index 1580236..0000000 --- a/providers/http/contracts.go +++ /dev/null @@ -1,8 +0,0 @@ -package http - -type Route interface{} - -type Service interface { - Serve() error - GetEngine() interface{} -} diff --git a/providers/http/gin/engine.go b/providers/http/gin/engine.go deleted file mode 100644 index 9a80204..0000000 --- a/providers/http/gin/engine.go +++ /dev/null @@ -1,73 +0,0 @@ -package gin - -import ( - "fmt" - "time" - - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/http" - "github.com/rogeecn/atom/providers/log" - "github.com/rogeecn/atom/utils/opt" - - "github.com/gin-gonic/gin" -) - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(http.DefaultPrefix), - }, - } -} - -type Service struct { - conf *http.Config - Engine *gin.Engine -} - -func (e *Service) Use(middleware ...gin.HandlerFunc) gin.IRoutes { - return e.Engine.Use(middleware...) -} - -func (e *Service) GetEngine() interface{} { - return e.Engine -} - -func (e *Service) Serve() error { - if e.conf.Tls != nil { - return e.Engine.RunTLS(e.conf.PortString(), e.conf.Tls.Cert, e.conf.Tls.Key) - } - return e.Engine.Run(e.conf.PortString()) -} - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var config http.Config - if err := o.UnmarshalConfig(&config); err != nil { - return err - } - - return container.Container.Provide(func() (http.Service, error) { - gin.DefaultWriter = log.LevelWriter{Level: log.InfoLevel} - gin.DefaultErrorWriter = log.LevelWriter{Level: log.ErrorLevel} - - engine := gin.New() - engine.Use(gin.Recovery()) - engine.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string { - return fmt.Sprintf(`%s - [%s] "%s %s %s %d %s '%q' %s"\n`, - param.ClientIP, - param.TimeStamp.Format(time.RFC1123), - param.Method, - param.Path, - param.Request.Proto, - param.StatusCode, - param.Latency, - param.Request.UserAgent(), - param.ErrorMessage, - ) - })) - - return &Service{Engine: engine, conf: &config}, nil - }, o.DiOptions()...) -} diff --git a/providers/httpclient/client.go b/providers/httpclient/client.go deleted file mode 100644 index 919405d..0000000 --- a/providers/httpclient/client.go +++ /dev/null @@ -1,151 +0,0 @@ -package httpclient - -import ( - "net/http" - "net/url" - "os" - "path/filepath" - "strconv" - "strings" - "time" - - "github.com/imroc/req/v3" - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/httpclient/cookiejar" - "github.com/rogeecn/atom/utils/opt" -) - -type Client struct { - client *req.Client - jar *cookiejar.Jar -} - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var config Config - if err := o.UnmarshalConfig(&config); err != nil { - return err - } - return container.Container.Provide(func() (*Client, error) { - c := &Client{} - - client := req.C() - if config.DevMode { - client.DevMode() - } - - if config.CookieJarFile != "" { - dir := filepath.Dir(config.CookieJarFile) - if _, err := os.Stat(dir); os.IsNotExist(err) { - err = os.MkdirAll(dir, 0o755) - if err != nil { - return nil, err - } - } - jar, err := cookiejar.New(&cookiejar.Options{ - Filename: config.CookieJarFile, - }) - if err != nil { - return nil, err - } - - c.jar = jar - client.SetCookieJar(jar) - } - - if config.RootCa != nil { - client.SetRootCertsFromFile(config.RootCa...) - } - - if config.InsecureSkipVerify { - client.EnableInsecureSkipVerify() - } - - if config.UserAgent != "" { - client.SetUserAgent(config.UserAgent) - } - if config.Timeout > 0 { - client.SetTimeout(time.Duration(config.Timeout) * time.Second) - } - - if config.CommonHeaders != nil { - client.SetCommonHeaders(config.CommonHeaders) - } - - if config.AuthBasic.Username != "" && config.AuthBasic.Password != "" { - client.SetCommonBasicAuth(config.AuthBasic.Username, config.AuthBasic.Password) - } - - if config.AuthBearerToken != "" { - client.SetCommonBearerAuthToken(config.AuthBearerToken) - } - - if config.ProxyURL != "" { - client.SetProxyURL(config.ProxyURL) - } - - if config.RedirectPolicy != nil { - client.SetRedirectPolicy(parsePolicies(config.RedirectPolicy)...) - } - - c.client = client - return c, nil - }, o.DiOptions()...) -} - -func parsePolicies(policies []string) []req.RedirectPolicy { - ps := []req.RedirectPolicy{} - for _, policy := range policies { - policyItems := strings.Split(policy, ":") - if len(policyItems) != 2 { - continue - } - - switch policyItems[0] { - case "Max": - max, err := strconv.Atoi(policyItems[1]) - if err != nil { - continue - } - ps = append(ps, req.MaxRedirectPolicy(max)) - case "No": - ps = append(ps, req.NoRedirectPolicy()) - case "SameDomain": - ps = append(ps, req.SameDomainRedirectPolicy()) - case "SameHost": - ps = append(ps, req.SameHostRedirectPolicy()) - case "AllowedHost": - ps = append(ps, req.AllowedHostRedirectPolicy(strings.Split(policyItems[1], ",")...)) - case "AllowedDomain": - ps = append(ps, req.AllowedDomainRedirectPolicy(strings.Split(policyItems[1], ",")...)) - } - } - - return ps -} - -func (c *Client) R() *req.Request { - return c.client.R() -} - -func (c *Client) SaveCookJar() error { - return c.jar.Save() -} - -func (c *Client) GetCookie(key string) (string, bool) { - kv := c.AllCookiesKV() - v, ok := kv[key] - return v, ok -} - -func (c *Client) AllCookies() []*http.Cookie { - return c.jar.AllCookies() -} - -func (c *Client) AllCookiesKV() map[string]string { - return c.jar.KVData() -} - -func (c *Client) SetCookie(u *url.URL, cookies []*http.Cookie) { - c.jar.SetCookies(u, cookies) -} diff --git a/providers/httpclient/config.go b/providers/httpclient/config.go deleted file mode 100644 index 8e8a8bc..0000000 --- a/providers/httpclient/config.go +++ /dev/null @@ -1,35 +0,0 @@ -package httpclient - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/http" - "github.com/rogeecn/atom/utils/opt" -) - -const DefaultPrefix = "HttpClient" - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(http.DefaultPrefix), - }, - } -} - -type Config struct { - DevMode bool - CookieJarFile string - RootCa []string - UserAgent string - InsecureSkipVerify bool - CommonHeaders map[string]string - Timeout uint - AuthBasic struct { - Username string - Password string - } - AuthBearerToken string - ProxyURL string - RedirectPolicy []string // "Max:10;No;SameDomain;SameHost;AllowedHost:x,x,x,x,x,AllowedDomain:x,x,x,x,x" -} diff --git a/providers/httpclient/cookiejar/jar.go b/providers/httpclient/cookiejar/jar.go deleted file mode 100644 index 1208aad..0000000 --- a/providers/httpclient/cookiejar/jar.go +++ /dev/null @@ -1,704 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package cookiejar implements an in-memory RFC 6265-compliant http.CookieJar. -// -// This implementation is a fork of net/http/cookiejar which also -// implements methods for dumping the cookies to persistent -// storage and retrieving them. -package cookiejar - -import ( - "fmt" - "net" - "net/http" - "net/url" - "os" - "path/filepath" - "runtime" - "sort" - "strings" - "sync" - "time" - - "github.com/pkg/errors" - "golang.org/x/net/publicsuffix" -) - -// PublicSuffixList provides the public suffix of a domain. For example: -// - the public suffix of "example.com" is "com", -// - the public suffix of "foo1.foo2.foo3.co.uk" is "co.uk", and -// - the public suffix of "bar.pvt.k12.ma.us" is "pvt.k12.ma.us". -// -// Implementations of PublicSuffixList must be safe for concurrent use by -// multiple goroutines. -// -// An implementation that always returns "" is valid and may be useful for -// testing but it is not secure: it means that the HTTP server for foo.com can -// set a cookie for bar.com. -// -// A public suffix list implementation is in the package -// golang.org/x/net/publicsuffix. -type PublicSuffixList interface { - // PublicSuffix returns the public suffix of domain. - // - // TODO: specify which of the caller and callee is responsible for IP - // addresses, for leading and trailing dots, for case sensitivity, and - // for IDN/Punycode. - PublicSuffix(domain string) string - - // String returns a description of the source of this public suffix - // list. The description will typically contain something like a time - // stamp or version number. - String() string -} - -// Options are the options for creating a new Jar. -type Options struct { - // PublicSuffixList is the public suffix list that determines whether - // an HTTP server can set a cookie for a domain. - // - // If this is nil, the public suffix list implementation in golang.org/x/net/publicsuffix - // is used. - PublicSuffixList PublicSuffixList - - // Filename holds the file to use for storage of the cookies. - // If it is empty, the value of DefaultCookieFile will be used. - Filename string - - // NoPersist specifies whether no persistence should be used - // (useful for tests). If this is true, the value of Filename will be - // ignored. - NoPersist bool -} - -// Jar implements the http.CookieJar interface from the net/http package. -type Jar struct { - // filename holds the file that the cookies were loaded from. - filename string - - psList PublicSuffixList - - // mu locks the remaining fields. - mu sync.Mutex - - // entries is a set of entries, keyed by their eTLD+1 and subkeyed by - // their name/domain/path. - entries map[string]map[string]entry -} - -var noOptions Options - -// New returns a new cookie jar. A nil *Options is equivalent to a zero -// Options. -// -// New will return an error if the cookies could not be loaded -// from the file for any reason than if the file does not exist. -func New(o *Options) (*Jar, error) { - return newAtTime(o, time.Now()) -} - -// newAtTime is like New but takes the current time as a parameter. -func newAtTime(o *Options, now time.Time) (*Jar, error) { - jar := &Jar{ - entries: make(map[string]map[string]entry), - } - if o == nil { - o = &noOptions - } - if jar.psList = o.PublicSuffixList; jar.psList == nil { - jar.psList = publicsuffix.List - } - if !o.NoPersist { - if jar.filename = o.Filename; jar.filename == "" { - jar.filename = DefaultCookieFile() - } - if err := jar.load(); err != nil { - return nil, errors.Wrap(err, "cannot load cookies") - } - } - jar.deleteExpired(now) - return jar, nil -} - -// homeDir returns the OS-specific home path as specified in the environment. -func homeDir() string { - if runtime.GOOS == "windows" { - return filepath.Join(os.Getenv("HOMEDRIVE"), os.Getenv("HOMEPATH")) - } - return os.Getenv("HOME") -} - -// entry is the internal representation of a cookie. -// -// This struct type is not used outside of this package per se, but the exported -// fields are those of RFC 6265. -// Note that this structure is marshaled to JSON, so backward-compatibility -// should be preserved. -type entry struct { - Name string - Value string - Domain string - Path string - Secure bool - HttpOnly bool - Persistent bool - HostOnly bool - Expires time.Time - Creation time.Time - LastAccess time.Time - - // Updated records when the cookie was updated. - // This is different from creation time because a cookie - // can be changed without updating the creation time. - Updated time.Time - - // CanonicalHost stores the original canonical host name - // that the cookie was associated with. We store this - // so that even if the public suffix list changes (for example - // when storing/loading cookies) we can still get the correct - // jar keys. - CanonicalHost string -} - -// id returns the domain;path;name triple of e as an id. -func (e *entry) id() string { - return id(e.Domain, e.Path, e.Name) -} - -// id returns the domain;path;name triple as an id. -func id(domain, path, name string) string { - return fmt.Sprintf("%s;%s;%s", domain, path, name) -} - -// shouldSend determines whether e's cookie qualifies to be included in a -// request to host/path. It is the caller's responsibility to check if the -// cookie is expired. -func (e *entry) shouldSend(https bool, host, path string) bool { - return e.domainMatch(host) && e.pathMatch(path) && (https || !e.Secure) -} - -// domainMatch implements "domain-match" of RFC 6265 section 5.1.3. -func (e *entry) domainMatch(host string) bool { - if e.Domain == host { - return true - } - return !e.HostOnly && hasDotSuffix(host, e.Domain) -} - -// pathMatch implements "path-match" according to RFC 6265 section 5.1.4. -func (e *entry) pathMatch(requestPath string) bool { - if requestPath == e.Path { - return true - } - if strings.HasPrefix(requestPath, e.Path) { - if e.Path[len(e.Path)-1] == '/' { - return true // The "/any/" matches "/any/path" case. - } else if requestPath[len(e.Path)] == '/' { - return true // The "/any" matches "/any/path" case. - } - } - return false -} - -// hasDotSuffix reports whether s ends in "."+suffix. -func hasDotSuffix(s, suffix string) bool { - return len(s) > len(suffix) && s[len(s)-len(suffix)-1] == '.' && s[len(s)-len(suffix):] == suffix -} - -type byCanonicalHost struct { - byPathLength -} - -func (s byCanonicalHost) Less(i, j int) bool { - e0, e1 := &s.byPathLength[i], &s.byPathLength[j] - if e0.CanonicalHost != e1.CanonicalHost { - return e0.CanonicalHost < e1.CanonicalHost - } - return s.byPathLength.Less(i, j) -} - -// byPathLength is a []entry sort.Interface that sorts according to RFC 6265 -// section 5.4 point 2: by longest path and then by earliest creation time. -type byPathLength []entry - -func (s byPathLength) Len() int { return len(s) } - -func (s byPathLength) Less(i, j int) bool { - e0, e1 := &s[i], &s[j] - if len(e0.Path) != len(e1.Path) { - return len(e0.Path) > len(e1.Path) - } - if !e0.Creation.Equal(e1.Creation) { - return e0.Creation.Before(e1.Creation) - } - // The following are not strictly necessary - // but are useful for providing deterministic - // behaviour in tests. - if e0.Name != e1.Name { - return e0.Name < e1.Name - } - return e0.Value < e1.Value -} - -func (s byPathLength) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -// Cookies implements the Cookies method of the http.CookieJar interface. -// -// It returns an empty slice if the URL's scheme is not HTTP or HTTPS. -func (j *Jar) Cookies(u *url.URL) (cookies []*http.Cookie) { - return j.cookies(u, time.Now()) -} - -// cookies is like Cookies but takes the current time as a parameter. -func (j *Jar) cookies(u *url.URL, now time.Time) (cookies []*http.Cookie) { - if u.Scheme != "http" && u.Scheme != "https" { - return cookies - } - host, err := canonicalHost(u.Host) - if err != nil { - return cookies - } - key := jarKey(host, j.psList) - - j.mu.Lock() - defer j.mu.Unlock() - - submap := j.entries[key] - if submap == nil { - return cookies - } - - https := u.Scheme == "https" - path := u.Path - if path == "" { - path = "/" - } - - var selected []entry - for id, e := range submap { - if !e.Expires.After(now) { - // Save some space by deleting the value when the cookie - // expires. We can't delete the cookie itself because then - // we wouldn't know that the cookie had expired when - // we merge with another cookie jar. - if e.Value != "" { - e.Value = "" - submap[id] = e - } - continue - } - if !e.shouldSend(https, host, path) { - continue - } - e.LastAccess = now - submap[id] = e - selected = append(selected, e) - } - - sort.Sort(byPathLength(selected)) - for _, e := range selected { - cookies = append(cookies, &http.Cookie{Name: e.Name, Value: e.Value}) - } - - return cookies -} - -// AllCookies returns all cookies in the jar. The returned cookies will -// have Domain, Expires, HttpOnly, Name, Secure, Path, and Value filled -// out. Expired cookies will not be returned. This function does not -// modify the cookie jar. -func (j *Jar) AllCookies() (cookies []*http.Cookie) { - return j.allCookies(time.Now()) -} - -// allCookies is like AllCookies but takes the current time as a parameter. -func (j *Jar) allCookies(now time.Time) []*http.Cookie { - var selected []entry - j.mu.Lock() - defer j.mu.Unlock() - for _, submap := range j.entries { - for _, e := range submap { - if !e.Expires.After(now) { - // Do not return expired cookies. - continue - } - selected = append(selected, e) - } - } - - sort.Sort(byCanonicalHost{byPathLength(selected)}) - cookies := make([]*http.Cookie, len(selected)) - for i, e := range selected { - // Note: The returned cookies do not contain sufficient - // information to recreate the database. - cookies[i] = &http.Cookie{ - Name: e.Name, - Value: e.Value, - Path: e.Path, - Domain: e.Domain, - Expires: e.Expires, - Secure: e.Secure, - HttpOnly: e.HttpOnly, - } - } - - return cookies -} - -// RemoveCookie removes the cookie matching the name, domain and path -// specified by c. -func (j *Jar) RemoveCookie(c *http.Cookie) { - j.mu.Lock() - defer j.mu.Unlock() - id := id(c.Domain, c.Path, c.Name) - key := jarKey(c.Domain, j.psList) - if e, ok := j.entries[key][id]; ok { - e.Value = "" - e.Expires = time.Now().Add(-1 * time.Second) - j.entries[key][id] = e - } -} - -// merge merges all the given entries into j. More recently changed -// cookies take precedence over older ones. -func (j *Jar) merge(entries []entry) { - for _, e := range entries { - if e.CanonicalHost == "" { - continue - } - key := jarKey(e.CanonicalHost, j.psList) - id := e.id() - submap := j.entries[key] - if submap == nil { - j.entries[key] = map[string]entry{ - id: e, - } - continue - } - oldEntry, ok := submap[id] - if !ok || e.Updated.After(oldEntry.Updated) { - submap[id] = e - } - } -} - -var expiryRemovalDuration = 24 * time.Hour - -// deleteExpired deletes all entries that have expired for long enough -// that we can actually expect there to be no external copies of it that -// might resurrect the dead cookie. -func (j *Jar) deleteExpired(now time.Time) { - for tld, submap := range j.entries { - for id, e := range submap { - if !e.Expires.After(now) && !e.Updated.Add(expiryRemovalDuration).After(now) { - delete(submap, id) - } - } - if len(submap) == 0 { - delete(j.entries, tld) - } - } -} - -// RemoveAllHost removes any cookies from the jar that were set for the given host. -func (j *Jar) RemoveAllHost(host string) { - host, err := canonicalHost(host) - if err != nil { - return - } - key := jarKey(host, j.psList) - - j.mu.Lock() - defer j.mu.Unlock() - - expired := time.Now().Add(-1 * time.Second) - submap := j.entries[key] - for id, e := range submap { - if e.CanonicalHost == host { - // Save some space by deleting the value when the cookie - // expires. We can't delete the cookie itself because then - // we wouldn't know that the cookie had expired when - // we merge with another cookie jar. - e.Value = "" - e.Expires = expired - submap[id] = e - } - } -} - -// RemoveAll removes all the cookies from the jar. -func (j *Jar) RemoveAll() { - expired := time.Now().Add(-1 * time.Second) - j.mu.Lock() - defer j.mu.Unlock() - for _, submap := range j.entries { - for id, e := range submap { - // Save some space by deleting the value when the cookie - // expires. We can't delete the cookie itself because then - // we wouldn't know that the cookie had expired when - // we merge with another cookie jar. - e.Value = "" - e.Expires = expired - submap[id] = e - } - } -} - -// SetCookies implements the SetCookies method of the http.CookieJar interface. -// -// It does nothing if the URL's scheme is not HTTP or HTTPS. -func (j *Jar) SetCookies(u *url.URL, cookies []*http.Cookie) { - j.setCookies(u, cookies, time.Now()) -} - -// setCookies is like SetCookies but takes the current time as parameter. -func (j *Jar) setCookies(u *url.URL, cookies []*http.Cookie, now time.Time) { - if len(cookies) == 0 { - return - } - if u.Scheme != "http" && u.Scheme != "https" { - // TODO is this really correct? It might be nice to send - // cookies to websocket connections, for example. - return - } - host, err := canonicalHost(u.Host) - if err != nil { - return - } - key := jarKey(host, j.psList) - defPath := defaultPath(u.Path) - - j.mu.Lock() - defer j.mu.Unlock() - - submap := j.entries[key] - for _, cookie := range cookies { - e, err := j.newEntry(cookie, now, defPath, host) - if err != nil { - continue - } - e.CanonicalHost = host - id := e.id() - if submap == nil { - submap = make(map[string]entry) - j.entries[key] = submap - } - if old, ok := submap[id]; ok { - e.Creation = old.Creation - } else { - e.Creation = now - } - e.Updated = now - e.LastAccess = now - submap[id] = e - } -} - -// canonicalHost strips port from host if present and returns the canonicalized -// host name. -func canonicalHost(host string) (string, error) { - var err error - host = strings.ToLower(host) - if hasPort(host) { - host, _, err = net.SplitHostPort(host) - if err != nil { - return "", err - } - } - if strings.HasSuffix(host, ".") { - // Strip trailing dot from fully qualified domain names. - host = host[:len(host)-1] - } - return toASCII(host) -} - -// hasPort reports whether host contains a port number. host may be a host -// name, an IPv4 or an IPv6 address. -func hasPort(host string) bool { - colons := strings.Count(host, ":") - if colons == 0 { - return false - } - if colons == 1 { - return true - } - return host[0] == '[' && strings.Contains(host, "]:") -} - -// jarKey returns the key to use for a jar. -func jarKey(host string, psl PublicSuffixList) string { - if isIP(host) { - return host - } - - var i int - if psl == nil { - i = strings.LastIndex(host, ".") - if i == -1 { - return host - } - } else { - suffix := psl.PublicSuffix(host) - if suffix == host { - return host - } - i = len(host) - len(suffix) - if i <= 0 || host[i-1] != '.' { - // The provided public suffix list psl is broken. - // Storing cookies under host is a safe stopgap. - return host - } - } - prevDot := strings.LastIndex(host[:i-1], ".") - return host[prevDot+1:] -} - -// isIP reports whether host is an IP address. -func isIP(host string) bool { - return net.ParseIP(host) != nil -} - -// defaultPath returns the directory part of an URL's path according to -// RFC 6265 section 5.1.4. -func defaultPath(path string) string { - if len(path) == 0 || path[0] != '/' { - return "/" // Path is empty or malformed. - } - - i := strings.LastIndex(path, "/") // Path starts with "/", so i != -1. - if i == 0 { - return "/" // Path has the form "/abc". - } - return path[:i] // Path is either of form "/abc/xyz" or "/abc/xyz/". -} - -// newEntry creates an entry from a http.Cookie c. now is the current -// time and is compared to c.Expires to determine deletion of c. defPath -// and host are the default-path and the canonical host name of the URL -// c was received from. -// -// The returned entry should be removed if its expiry time is in the -// past. In this case, e may be incomplete, but it will be valid to call -// e.id (which depends on e's Name, Domain and Path). -// -// A malformed c.Domain will result in an error. -func (j *Jar) newEntry(c *http.Cookie, now time.Time, defPath, host string) (e entry, err error) { - e.Name = c.Name - if c.Path == "" || c.Path[0] != '/' { - e.Path = defPath - } else { - e.Path = c.Path - } - - e.Domain, e.HostOnly, err = j.domainAndType(host, c.Domain) - if err != nil { - return e, err - } - // MaxAge takes precedence over Expires. - if c.MaxAge != 0 { - e.Persistent = true - e.Expires = now.Add(time.Duration(c.MaxAge) * time.Second) - if c.MaxAge < 0 { - return e, nil - } - } else if c.Expires.IsZero() { - e.Expires = endOfTime - } else { - e.Persistent = true - e.Expires = c.Expires - if !c.Expires.After(now) { - return e, nil - } - } - - e.Value = c.Value - e.Secure = c.Secure - e.HttpOnly = c.HttpOnly - - return e, nil -} - -var ( - errIllegalDomain = errors.New("cookiejar: illegal cookie domain attribute") - errMalformedDomain = errors.New("cookiejar: malformed cookie domain attribute") - errNoHostname = errors.New("cookiejar: no host name available (IP only)") -) - -// endOfTime is the time when session (non-persistent) cookies expire. -// This instant is representable in most date/time formats (not just -// Go's time.Time) and should be far enough in the future. -var endOfTime = time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC) - -// domainAndType determines the cookie's domain and hostOnly attribute. -func (j *Jar) domainAndType(host, domain string) (string, bool, error) { - if domain == "" { - // No domain attribute in the SetCookie header indicates a - // host cookie. - return host, true, nil - } - - if isIP(host) { - // According to RFC 6265 domain-matching includes not being - // an IP address. - // TODO: This might be relaxed as in common browsers. - return "", false, errNoHostname - } - - // From here on: If the cookie is valid, it is a domain cookie (with - // the one exception of a public suffix below). - // See RFC 6265 section 5.2.3. - if domain[0] == '.' { - domain = domain[1:] - } - - if len(domain) == 0 || domain[0] == '.' { - // Received either "Domain=." or "Domain=..some.thing", - // both are illegal. - return "", false, errMalformedDomain - } - domain = strings.ToLower(domain) - - if domain[len(domain)-1] == '.' { - // We received stuff like "Domain=www.example.com.". - // Browsers do handle such stuff (actually differently) but - // RFC 6265 seems to be clear here (e.g. section 4.1.2.3) in - // requiring a reject. 4.1.2.3 is not normative, but - // "Domain Matching" (5.1.3) and "Canonicalized Host Names" - // (5.1.2) are. - return "", false, errMalformedDomain - } - - // See RFC 6265 section 5.3 #5. - if j.psList != nil { - if ps := j.psList.PublicSuffix(domain); ps != "" && !hasDotSuffix(domain, ps) { - if host == domain { - // This is the one exception in which a cookie - // with a domain attribute is a host cookie. - return host, true, nil - } - return "", false, errIllegalDomain - } - } - - // The domain must domain-match host: www.mycompany.com cannot - // set cookies for .ourcompetitors.com. - if host != domain && !hasDotSuffix(host, domain) { - return "", false, errIllegalDomain - } - - return domain, false, nil -} - -// DefaultCookieFile returns the default cookie file to use -// for persisting cookie data. -// The following names will be used in decending order of preference: -// - the value of the $GOCOOKIES environment variable. -// - $HOME/.go-cookies -func DefaultCookieFile() string { - if f := os.Getenv("GOCOOKIES"); f != "" { - return f - } - return filepath.Join(homeDir(), ".go-cookies") -} diff --git a/providers/httpclient/cookiejar/punycode.go b/providers/httpclient/cookiejar/punycode.go deleted file mode 100644 index ea7ceb5..0000000 --- a/providers/httpclient/cookiejar/punycode.go +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cookiejar - -// This file implements the Punycode algorithm from RFC 3492. - -import ( - "fmt" - "strings" - "unicode/utf8" -) - -// These parameter values are specified in section 5. -// -// All computation is done with int32s, so that overflow behavior is identical -// regardless of whether int is 32-bit or 64-bit. -const ( - base int32 = 36 - damp int32 = 700 - initialBias int32 = 72 - initialN int32 = 128 - skew int32 = 38 - tmax int32 = 26 - tmin int32 = 1 -) - -// encode encodes a string as specified in section 6.3 and prepends prefix to -// the result. -// -// The "while h < length(input)" line in the specification becomes "for -// remaining != 0" in the Go code, because len(s) in Go is in bytes, not runes. -func encode(prefix, s string) (string, error) { - output := make([]byte, len(prefix), len(prefix)+1+2*len(s)) - copy(output, prefix) - delta, n, bias := int32(0), initialN, initialBias - b, remaining := int32(0), int32(0) - for _, r := range s { - if r < 0x80 { - b++ - output = append(output, byte(r)) - } else { - remaining++ - } - } - h := b - if b > 0 { - output = append(output, '-') - } - for remaining != 0 { - m := int32(0x7fffffff) - for _, r := range s { - if m > r && r >= n { - m = r - } - } - delta += (m - n) * (h + 1) - if delta < 0 { - return "", fmt.Errorf("cookiejar: invalid label %q", s) - } - n = m - for _, r := range s { - if r < n { - delta++ - if delta < 0 { - return "", fmt.Errorf("cookiejar: invalid label %q", s) - } - continue - } - if r > n { - continue - } - q := delta - for k := base; ; k += base { - t := k - bias - if t < tmin { - t = tmin - } else if t > tmax { - t = tmax - } - if q < t { - break - } - output = append(output, encodeDigit(t+(q-t)%(base-t))) - q = (q - t) / (base - t) - } - output = append(output, encodeDigit(q)) - bias = adapt(delta, h+1, h == b) - delta = 0 - h++ - remaining-- - } - delta++ - n++ - } - return string(output), nil -} - -func encodeDigit(digit int32) byte { - switch { - case 0 <= digit && digit < 26: - return byte(digit + 'a') - case 26 <= digit && digit < 36: - return byte(digit + ('0' - 26)) - } - panic("cookiejar: internal error in punycode encoding") -} - -// adapt is the bias adaptation function specified in section 6.1. -func adapt(delta, numPoints int32, firstTime bool) int32 { - if firstTime { - delta /= damp - } else { - delta /= 2 - } - delta += delta / numPoints - k := int32(0) - for delta > ((base-tmin)*tmax)/2 { - delta /= base - tmin - k += base - } - return k + (base-tmin+1)*delta/(delta+skew) -} - -// Strictly speaking, the remaining code below deals with IDNA (RFC 5890 and -// friends) and not Punycode (RFC 3492) per se. - -// acePrefix is the ASCII Compatible Encoding prefix. -const acePrefix = "xn--" - -// toASCII converts a domain or domain label to its ASCII form. For example, -// toASCII("bücher.example.com") is "xn--bcher-kva.example.com", and -// toASCII("golang") is "golang". -func toASCII(s string) (string, error) { - if ascii(s) { - return s, nil - } - labels := strings.Split(s, ".") - for i, label := range labels { - if !ascii(label) { - a, err := encode(acePrefix, label) - if err != nil { - return "", err - } - labels[i] = a - } - } - return strings.Join(labels, "."), nil -} - -func ascii(s string) bool { - for i := 0; i < len(s); i++ { - if s[i] >= utf8.RuneSelf { - return false - } - } - return true -} diff --git a/providers/httpclient/cookiejar/serialize.go b/providers/httpclient/cookiejar/serialize.go deleted file mode 100644 index 4264e19..0000000 --- a/providers/httpclient/cookiejar/serialize.go +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cookiejar - -import ( - "encoding/json" - "io" - "log" - "os" - "path/filepath" - "sort" - "strings" - "time" - - "gopkg.in/retry.v1" - - filelock "github.com/juju/go4/lock" - "github.com/pkg/errors" -) - -// Save saves the cookies to the persistent cookie file. -// Before the file is written, it reads any cookies that -// have been stored from it and merges them into j. -func (j *Jar) Save() error { - if j.filename == "" { - return nil - } - return j.save(time.Now()) -} - -// MarshalJSON implements json.Marshaler by encoding all persistent cookies -// currently in the jar. -func (j *Jar) MarshalJSON() ([]byte, error) { - j.mu.Lock() - defer j.mu.Unlock() - // Marshaling entries can never fail. - data, _ := json.Marshal(j.allPersistentEntries()) - return data, nil -} - -// save is like Save but takes the current time as a parameter. -func (j *Jar) save(now time.Time) error { - locked, err := lockFile(lockFileName(j.filename)) - if err != nil { - return err - } - defer locked.Close() - f, err := os.OpenFile(j.filename, os.O_RDWR|os.O_CREATE, 0o600) - if err != nil { - return err - } - defer f.Close() - // TODO optimization: if the file hasn't changed since we - // loaded it, don't bother with the merge step. - - j.mu.Lock() - defer j.mu.Unlock() - if err := j.mergeFrom(f); err != nil { - // The cookie file is probably corrupt. - log.Printf("cannot read cookie file to merge it; ignoring it: %v", err) - } - j.deleteExpired(now) - if err := f.Truncate(0); err != nil { - return errors.Wrap(err, "cannot truncate file") - } - if _, err := f.Seek(0, 0); err != nil { - return err - } - return j.writeTo(f) -} - -// load loads the cookies from j.filename. If the file does not exist, -// no error will be returned and no cookies will be loaded. -func (j *Jar) load() error { - if _, err := os.Stat(filepath.Dir(j.filename)); os.IsNotExist(err) { - // The directory that we'll store the cookie jar - // in doesn't exist, so don't bother trying - // to acquire the lock. - return nil - } - locked, err := lockFile(lockFileName(j.filename)) - if err != nil { - return err - } - defer locked.Close() - f, err := os.Open(j.filename) - if err != nil { - if os.IsNotExist(err) { - return nil - } - return err - } - defer f.Close() - if err := j.mergeFrom(f); err != nil { - return err - } - return nil -} - -// mergeFrom reads all the cookies from r and stores them in the Jar. -func (j *Jar) mergeFrom(r io.Reader) error { - decoder := json.NewDecoder(r) - // Cope with old cookiejar format by just discarding - // cookies, but still return an error if it's invalid JSON. - var data json.RawMessage - if err := decoder.Decode(&data); err != nil { - if err == io.EOF { - // Empty file. - return nil - } - return err - } - var entries []entry - if err := json.Unmarshal(data, &entries); err != nil { - log.Printf("warning: discarding cookies in invalid format (error: %v)", err) - return nil - } - j.merge(entries) - return nil -} - -// writeTo writes all the cookies in the jar to w -// as a JSON array. -func (j *Jar) writeTo(w io.Writer) error { - encoder := json.NewEncoder(w) - entries := j.allPersistentEntries() - if err := encoder.Encode(entries); err != nil { - return err - } - return nil -} - -// allPersistentEntries returns all the entries in the jar, sorted by primarly by canonical host -// name and secondarily by path length. -func (j *Jar) allPersistentEntries() []entry { - var entries []entry - for _, submap := range j.entries { - for _, e := range submap { - if e.Persistent { - entries = append(entries, e) - } - } - } - sort.Sort(byCanonicalHost{entries}) - return entries -} - -func (j *Jar) KVData() map[string]string { - pairs := make(map[string]string) - - entries := j.allPersistentEntries() - if len(entries) == 0 { - return pairs - } - - for _, entry := range entries { - pairs[strings.ToLower(entry.Name)] = entry.Value - } - - return pairs -} - -// lockFileName returns the name of the lock file associated with -// the given path. -func lockFileName(path string) string { - return path + ".lock" -} - -var attempt = retry.LimitTime(3*time.Second, retry.Exponential{ - Initial: 100 * time.Microsecond, - Factor: 1.5, - MaxDelay: 100 * time.Millisecond, -}) - -func lockFile(path string) (io.Closer, error) { - for a := retry.Start(attempt, nil); a.Next(); { - locker, err := filelock.Lock(path) - if err == nil { - return locker, nil - } - if !a.More() { - return nil, errors.Wrap(err, "file locked for too long; giving up") - } - } - panic("unreachable") -} diff --git a/providers/jwt/config.go b/providers/jwt/config.go deleted file mode 100644 index 8845740..0000000 --- a/providers/jwt/config.go +++ /dev/null @@ -1,34 +0,0 @@ -package jwt - -import ( - "time" - - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/log" - "github.com/rogeecn/atom/utils/opt" -) - -const DefaultPrefix = "JWT" - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(DefaultPrefix), - }, - } -} - -type Config struct { - SigningKey string // jwt签名 - ExpiresTime string // 过期时间 - Issuer string // 签发者 -} - -func (c *Config) ExpiresTimeDuration() time.Duration { - d, err := time.ParseDuration(c.ExpiresTime) - if err != nil { - log.Fatal(err) - } - return d -} diff --git a/providers/jwt/jwt.go b/providers/jwt/jwt.go deleted file mode 100644 index 927dc58..0000000 --- a/providers/jwt/jwt.go +++ /dev/null @@ -1,115 +0,0 @@ -package jwt - -import ( - "errors" - "strings" - "time" - - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" - - jwt "github.com/golang-jwt/jwt/v4" - "golang.org/x/sync/singleflight" -) - -const ( - CtxKey = "claims" - HttpHeader = "Authorization" -) - -type BaseClaims struct { - UID uint64 `json:"uid,omitempty"` - Role uint64 `json:"role,omitempty"` -} - -// Custom claims structure -type Claims struct { - BaseClaims - jwt.RegisteredClaims -} - -const TOKEN_PREFIX = "Bearer " - -type JWT struct { - singleflight *singleflight.Group - config *Config - SigningKey []byte -} - -var ( - TokenExpired = errors.New("Token is expired") - TokenNotValidYet = errors.New("Token not active yet") - TokenMalformed = errors.New("That's not even a token") - TokenInvalid = errors.New("Couldn't handle this token:") -) - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var config Config - if err := o.UnmarshalConfig(&config); err != nil { - return err - } - return container.Container.Provide(func() (*JWT, error) { - return &JWT{ - config: &config, - SigningKey: []byte(config.SigningKey), - }, nil - }, o.DiOptions()...) -} - -func (j *JWT) CreateClaims(baseClaims BaseClaims) *Claims { - ep, _ := time.ParseDuration(j.config.ExpiresTime) - claims := Claims{ - BaseClaims: baseClaims, - RegisteredClaims: jwt.RegisteredClaims{ - NotBefore: jwt.NewNumericDate(time.Now().Add(-time.Second * 10)), // 签名生效时间 - ExpiresAt: jwt.NewNumericDate(time.Now().Add(ep)), // 过期时间 7天 配置文件 - Issuer: j.config.Issuer, // 签名的发行者 - }, - } - return &claims -} - -// 创建一个token -func (j *JWT) CreateToken(claims *Claims) (string, error) { - token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - return token.SignedString(j.SigningKey) -} - -// CreateTokenByOldToken 旧token 换新token 使用归并回源避免并发问题 -func (j *JWT) CreateTokenByOldToken(oldToken string, claims *Claims) (string, error) { - v, err, _ := j.singleflight.Do("JWT:"+oldToken, func() (interface{}, error) { - return j.CreateToken(claims) - }) - return v.(string), err -} - -// 解析 token -func (j *JWT) ParseToken(tokenString string) (*Claims, error) { - tokenString = strings.TrimPrefix(tokenString, TOKEN_PREFIX) - token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (i interface{}, e error) { - return j.SigningKey, nil - }) - if err != nil { - if ve, ok := err.(*jwt.ValidationError); ok { - if ve.Errors&jwt.ValidationErrorMalformed != 0 { - return nil, TokenMalformed - } else if ve.Errors&jwt.ValidationErrorExpired != 0 { - // Token is expired - return nil, TokenExpired - } else if ve.Errors&jwt.ValidationErrorNotValidYet != 0 { - return nil, TokenNotValidYet - } else { - return nil, TokenInvalid - } - } - } - if token != nil { - if claims, ok := token.Claims.(*Claims); ok && token.Valid { - return claims, nil - } - return nil, TokenInvalid - } else { - return nil, TokenInvalid - } -} diff --git a/providers/k8s/kubernetes.go b/providers/k8s/kubernetes.go deleted file mode 100644 index 10c723e..0000000 --- a/providers/k8s/kubernetes.go +++ /dev/null @@ -1,39 +0,0 @@ -package k8s - -import ( - "os" - "path/filepath" - - "github.com/pkg/errors" - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/log" - "github.com/rogeecn/atom/utils/opt" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/tools/clientcmd" -) - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{}, - } -} - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - return container.Container.Provide(func() (*kubernetes.Clientset, error) { - config := filepath.Join(os.Getenv("HOME"), ".kube", "config") - if _, err := os.Stat(config); err != nil { - config = "" - } else { - log.Debugf("using kube config: %s", config) - } - - clientConfig, err := clientcmd.BuildConfigFromFlags("", config) - if err != nil { - return nil, errors.Wrap(err, "failed to build config") - } - - return kubernetes.NewForConfig(clientConfig) - }, o.DiOptions()...) -} diff --git a/providers/log/config.go b/providers/log/config.go deleted file mode 100644 index 24e524e..0000000 --- a/providers/log/config.go +++ /dev/null @@ -1,44 +0,0 @@ -package log - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" -) - -const DefaultPrefix = "Log" - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(DefaultPrefix), - }, - } -} - -type Config struct { - Level Level -} - -type Level int8 - -const ( - // DebugLevel logs are typically voluminous, and are usually disabled in - // production. - DebugLevel Level = iota - 1 - // InfoLevel is the default logging priority. - InfoLevel - // WarnLevel logs are more important than Info, but don't need individual - // human review. - WarnLevel - // ErrorLevel logs are high-priority. If an application is running smoothly, - // it shouldn't generate any error-level logs. - ErrorLevel - // DPanicLevel logs are particularly important errors. In development the - // logger panics after writing the message. - DPanicLevel - // PanicLevel logs a message, then panics. - PanicLevel - // FatalLevel logs a message, then calls os.Exit(1). - FatalLevel -) diff --git a/providers/log/gin_level_writer.go b/providers/log/gin_level_writer.go deleted file mode 100644 index b5ed7fe..0000000 --- a/providers/log/gin_level_writer.go +++ /dev/null @@ -1,20 +0,0 @@ -package log - -import ( - "strings" -) - -type LevelWriter struct { - Level Level -} - -func (w LevelWriter) Write(p []byte) (n int, err error) { - str := strings.TrimSpace(string(p)) - switch w.Level { - case InfoLevel: - Info(str) - case ErrorLevel: - Error(str) - } - return len(p), nil -} diff --git a/providers/log/logger.go b/providers/log/logger.go deleted file mode 100644 index 997b978..0000000 --- a/providers/log/logger.go +++ /dev/null @@ -1,159 +0,0 @@ -package log - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" - - "go.uber.org/zap" -) - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var config Config - if err := o.UnmarshalConfig(&config); err != nil { - return err - } - - logger, err := newZapLogger(&config) - if err != nil { - return err - } - defaultLogger = logger - return container.Container.Provide(func() (*Logger, error) { - return defaultLogger, nil - }, o.DiOptions()...) -} - -var defaultLogger *Logger - -type Logger struct { - logger *zap.SugaredLogger -} - -func (l *Logger) LevelWriter(level Level) *LevelWriter { - return &LevelWriter{Level: level} -} - -// Debug uses fmt.Sprint to construct and log a message. -func Debug(args ...interface{}) { - defaultLogger.logger.Debug(args...) -} - -// Info uses fmt.Sprint to construct and log a message. -func Info(args ...interface{}) { - defaultLogger.logger.Info(args...) -} - -// Warn uses fmt.Sprint to construct and log a message. -func Warn(args ...interface{}) { - defaultLogger.logger.Warn(args...) -} - -// Error uses fmt.Sprint to construct and log a message. -func Error(args ...interface{}) { - defaultLogger.logger.Error(args...) -} - -// DPanic uses fmt.Sprint to construct and log a message. In development, the -// logger then panics. (See DPanicLevel for details.) -func DPanic(args ...interface{}) { - defaultLogger.logger.DPanic(args...) -} - -// Panic uses fmt.Sprint to construct and log a message, then panics. -func Panic(args ...interface{}) { - defaultLogger.logger.Panic(args...) -} - -// Fatal uses fmt.Sprint to construct and log a message, then calls os.Exit. -func Fatal(args ...interface{}) { - defaultLogger.logger.Fatal(args...) -} - -// Debugf uses fmt.Sprintf to log a templated message. -func Debugf(template string, args ...interface{}) { - defaultLogger.logger.Debugf(template, args...) -} - -// Infof uses fmt.Sprintf to log a templated message. -func Infof(template string, args ...interface{}) { - defaultLogger.logger.Infof(template, args...) -} - -// Warnf uses fmt.Sprintf to log a templated message. -func Warnf(template string, args ...interface{}) { - defaultLogger.logger.Warnf(template, args...) -} - -// Errorf uses fmt.Sprintf to log a templated message. -func Errorf(template string, args ...interface{}) { - defaultLogger.logger.Errorf(template, args...) -} - -// DPanicf uses fmt.Sprintf to log a templated message. In development, the -// logger then panics. (See DPanicLevel for details.) -func DPanicf(template string, args ...interface{}) { - defaultLogger.logger.DPanicf(template, args...) -} - -// Panicf uses fmt.Sprintf to log a templated message, then panics. -func Panicf(template string, args ...interface{}) { - defaultLogger.logger.Panicf(template, args...) -} - -// Fatalf uses fmt.Sprintf to log a templated message, then calls os.Exit. -func Fatalf(template string, args ...interface{}) { - defaultLogger.logger.Fatalf(template, args...) -} - -// Debugw logs a message with some additional context. The variadic key-value -// pairs are treated as they are in With. -// -// When debug-level logging is disabled, this is much faster than -// -// s.With(keysAndValues).Debug(msg) -func Debugw(msg string, keysAndValues ...interface{}) { - defaultLogger.logger.Debugw(msg, keysAndValues...) -} - -// Infow logs a message with some additional context. The variadic key-value -// pairs are treated as they are in With. -func Infow(msg string, keysAndValues ...interface{}) { - defaultLogger.logger.Infow(msg, keysAndValues...) -} - -// Warnw logs a message with some additional context. The variadic key-value -// pairs are treated as they are in With. -func Warnw(msg string, keysAndValues ...interface{}) { - defaultLogger.logger.Warnw(msg, keysAndValues...) -} - -// Errorw logs a message with some additional context. The variadic key-value -// pairs are treated as they are in With. -func Errorw(msg string, keysAndValues ...interface{}) { - defaultLogger.logger.Errorw(msg, keysAndValues...) -} - -// DPanicw logs a message with some additional context. In development, the -// logger then panics. (See DPanicLevel for details.) The variadic key-value -// pairs are treated as they are in With. -func DPanicw(msg string, keysAndValues ...interface{}) { - defaultLogger.logger.DPanicw(msg, keysAndValues...) -} - -// Panicw logs a message with some additional context, then panics. The -// variadic key-value pairs are treated as they are in With. -func Panicw(msg string, keysAndValues ...interface{}) { - defaultLogger.logger.Panicw(msg, keysAndValues...) -} - -// Fatalw logs a message with some additional context, then calls os.Exit. The -// variadic key-value pairs are treated as they are in With. -func Fatalw(msg string, keysAndValues ...interface{}) { - defaultLogger.logger.Fatalw(msg, keysAndValues...) -} - -// Sync flushes any buffered log entries. -func Sync() error { - return defaultLogger.logger.Sync() -} diff --git a/providers/log/zap.go b/providers/log/zap.go deleted file mode 100644 index dbe9246..0000000 --- a/providers/log/zap.go +++ /dev/null @@ -1,13 +0,0 @@ -package log - -import ( - "go.uber.org/zap" -) - -func newZapLogger(conf *Config) (*Logger, error) { - logger, err := zap.NewDevelopment() - if err != nil { - return nil, err - } - return &Logger{logger: logger.Sugar()}, nil -} diff --git a/providers/micro_service/config.go b/providers/micro_service/config.go deleted file mode 100644 index e8a7e97..0000000 --- a/providers/micro_service/config.go +++ /dev/null @@ -1,15 +0,0 @@ -package micro_service - -const DefaultPrefix = "Micro" - -type Config struct { - Name string - Version string - Port uint - Tls *Tls -} - -type Tls struct { - Cert string - Key string -} diff --git a/providers/micro_service/contracts.go b/providers/micro_service/contracts.go deleted file mode 100644 index 91434ee..0000000 --- a/providers/micro_service/contracts.go +++ /dev/null @@ -1,6 +0,0 @@ -package micro_service - -type Service interface { - Serve() error - GetEngine() any -} diff --git a/providers/micro_service/gomicro/engine.go b/providers/micro_service/gomicro/engine.go deleted file mode 100644 index e56481d..0000000 --- a/providers/micro_service/gomicro/engine.go +++ /dev/null @@ -1,54 +0,0 @@ -package gomicro - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/http" - "github.com/rogeecn/atom/providers/micro_service" - "github.com/rogeecn/atom/utils/opt" - "go-micro.dev/v4" - goMicro "go-micro.dev/v4" -) - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(http.DefaultPrefix), - }, - } -} - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var config micro_service.Config - if err := o.UnmarshalConfig(&config); err != nil { - return err - } - - return container.Container.Provide(func() (micro_service.Service, error) { - service := &Service{ - conf: &config, - Engine: goMicro.NewService(), - } - return service, nil - }, o.DiOptions()...) -} - -type Service struct { - conf *micro_service.Config - Engine goMicro.Service -} - -func (s *Service) Serve() error { - return s.Engine.Run() -} - -func (s *Service) GetEngine() any { - return s.Engine -} - -func (s *Service) Init(f func()) { - s.Engine.Init( - micro.Name("abc"), - ) -} diff --git a/providers/single_flight/flight.go b/providers/single_flight/flight.go deleted file mode 100644 index 851bc58..0000000 --- a/providers/single_flight/flight.go +++ /dev/null @@ -1,21 +0,0 @@ -package single_flight - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" - "golang.org/x/sync/singleflight" -) - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{}, - } -} - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - return container.Container.Provide(func() (*singleflight.Group, error) { - return &singleflight.Group{}, nil - }, o.DiOptions()...) -} diff --git a/providers/swagger/config.go b/providers/swagger/config.go deleted file mode 100644 index 3aaf358..0000000 --- a/providers/swagger/config.go +++ /dev/null @@ -1,30 +0,0 @@ -package swagger - -import ( - "github.com/rogeecn/atom" - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" - ginSwagger "github.com/swaggo/gin-swagger" -) - -const DefaultPrefix = "Swagger" - -type Config struct { - BaseRoute string - Version string - Host string - BasePath string - Title string - Description string - HandlerConfig *ginSwagger.Config -} - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{ - opt.Prefix(DefaultPrefix), - opt.Group(atom.GroupInitialName), - }, - } -} diff --git a/providers/swagger/docs.go b/providers/swagger/docs.go deleted file mode 100644 index e821778..0000000 --- a/providers/swagger/docs.go +++ /dev/null @@ -1,53 +0,0 @@ -package swagger - -import ( - "fmt" - - "github.com/gin-gonic/gin" - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/contracts" - "github.com/rogeecn/atom/providers/http" - "github.com/rogeecn/atom/utils/opt" - swaggerFiles "github.com/swaggo/files" - ginSwagger "github.com/swaggo/gin-swagger" - "github.com/swaggo/swag" -) - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - var config Config - if err := o.UnmarshalConfig(&config); err != nil { - return err - } - - return container.Container.Provide(func(http http.Service) contracts.Initial { - if config.BaseRoute == "" { - config.BaseRoute = "swagger" - } - - swaggerInfo := &swag.Spec{ - Version: config.Version, - Host: config.Host, - BasePath: config.BasePath, - Schemes: []string{}, - Title: config.Title, - Description: config.Description, - InfoInstanceName: "swagger", - SwaggerTemplate: docTemplate, - LeftDelim: "{{", - RightDelim: "}}", - } - swag.Register(swaggerInfo.InstanceName(), swaggerInfo) - engine := http.GetEngine().(*gin.Engine) - - var handler gin.HandlerFunc - if config.HandlerConfig != nil { - handler = ginSwagger.CustomWrapHandler(config.HandlerConfig, swaggerFiles.Handler) - } else { - handler = ginSwagger.WrapHandler(swaggerFiles.Handler) - } - engine.GET(fmt.Sprintf("/%s/*any", config.BaseRoute), handler) - - return nil - }, o.DiOptions()...) -} diff --git a/providers/swagger/template.go b/providers/swagger/template.go deleted file mode 100644 index 5c95026..0000000 --- a/providers/swagger/template.go +++ /dev/null @@ -1,39 +0,0 @@ -package swagger - -const docTemplate = `{ - "schemes": {{ marshal .Schemes }}, - "swagger": "2.0", - "info": { - "description": "{{escape .Description}}", - "title": "{{.Title}}", - "contact": {}, - "version": "{{.Version}}" - }, - "host": "{{.Host}}", - "basePath": "{{.BasePath}}", - "paths": { - "/example/helloworld": { - "get": { - "description": "do ping", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "example" - ], - "summary": "ping example", - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - } - } - } - } - } -}` diff --git a/providers/uuid/uuid.go b/providers/uuid/uuid.go deleted file mode 100644 index 310aa1f..0000000 --- a/providers/uuid/uuid.go +++ /dev/null @@ -1,41 +0,0 @@ -package uuid - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/utils/opt" - - "github.com/gofrs/uuid" -) - -func DefaultProvider() container.ProviderContainer { - return container.ProviderContainer{ - Provider: Provide, - Options: []opt.Option{}, - } -} - -type Generator struct { - generator uuid.Generator -} - -func Provide(opts ...opt.Option) error { - o := opt.New(opts...) - return container.Container.Provide(func() (*Generator, error) { - return &Generator{ - generator: uuid.DefaultGenerator, - }, nil - }, o.DiOptions()...) -} - -func (u *Generator) MustGenerate() string { - uuid, _ := u.Generate() - return uuid -} - -func (u *Generator) Generate() (string, error) { - uuid, err := u.generator.NewV4() - if err != nil { - return "", err - } - return uuid.String(), err -} diff --git a/resources/.gitkeep b/resources/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/services/grpc.go b/services/grpc.go deleted file mode 100644 index 20f5ae1..0000000 --- a/services/grpc.go +++ /dev/null @@ -1,25 +0,0 @@ -package services - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/providers/grpcs" - "go.uber.org/dig" -) - -type GrpcService struct { - dig.In - - Server *grpcs.Grpc - Services []grpcs.ServerService `group:"grpc_server_services"` -} - -func ServeGrpc() error { - defer container.Close() - - return container.Container.Invoke(func(grpc GrpcService) error { - for _, svc := range grpc.Services { - grpc.Server.RegisterService(svc.Name(), svc.Register) - } - return grpc.Server.Serve() - }) -} diff --git a/services/http.go b/services/http.go deleted file mode 100644 index 0e6010d..0000000 --- a/services/http.go +++ /dev/null @@ -1,24 +0,0 @@ -package services - -import ( - "github.com/rogeecn/atom/container" - "github.com/rogeecn/atom/contracts" - "github.com/rogeecn/atom/providers/http" - "go.uber.org/dig" -) - -type Http struct { - dig.In - - Service http.Service - Initials []contracts.Initial `group:"initials"` - Routes []http.Route `group:"routes"` -} - -func ServeHttp() error { - defer container.Close() - - return container.Container.Invoke(func(http Http) error { - return http.Service.Serve() - }) -} diff --git a/utils/info.go b/utils/info.go new file mode 100644 index 0000000..00f5dec --- /dev/null +++ b/utils/info.go @@ -0,0 +1,7 @@ +package utils + +var ( + Version = "1.0.0" + BuildAt = "2014-02-02 00:00:00" + GitHash = "" +)