commit da86ee374af10a80f5010df2dfd112fc64243dae Author: sbouaram Date: Tue Aug 8 12:28:43 2023 +0200 first commit diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..38cf0ea --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/silvermobi.iml b/.idea/silvermobi.iml new file mode 100644 index 0000000..5e764c4 --- /dev/null +++ b/.idea/silvermobi.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/config.go b/config.go new file mode 100644 index 0000000..b5f9c96 --- /dev/null +++ b/config.go @@ -0,0 +1,17 @@ +package main + +import ( + "strings" + + "github.com/spf13/viper" +) + +func ReadConfig() (*viper.Viper, error) { + v := viper.New() + v.SetConfigName("config") + v.AddConfigPath(".") + v.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) + v.AutomaticEnv() + err := v.ReadInConfig() + return v, err +} diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..f5dba71 --- /dev/null +++ b/config.yaml @@ -0,0 +1,70 @@ +service_name: SILVERMOBI + +services: + internal: + mobility_accounts: + type: grpc + dial: localhost:8090 + push: + type: gorush-grpc + dial: 0.0.0.0:8095 + external: + grpc: + enable: true + port: 8099 + web: + enable: true + port: 8098 + moncomptemobilite: + enable: true + port: 8097 + oidc: + provider: https://idp-fabmob.stg.hub.flowbird.io/auth/realms/mcm + client_id: ridygo-pub + # redirect_url: "http://192.168.1.27:8097/callbacks/oidc/cee" + redirect_url: "http://192.168.1.27:8097/callbacks/oidc/cee" + # redirect_url: "http://localhost:8097/callbacks/oidc/cee" + certinergy: + enable: true + port: 8100 + jwt_key: 6mt29Z4rkCPmib9ckigPWFbaDTQFUPyK + # jwt_key : UjXnZr4u7x!A%D*G-KaPdSgVkYp3s5v8 # PROD + clients: + - name: certinergy + id: cd11c681-4168-4bdf-8f2d-9e3ade5fac8d + bearer: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjZDExYzY4MS00MTY4LTRiZGYtOGYyZC05ZTNhZGU1ZmFjOGQiLCJuYW1lIjoiY2VydGluZXJneSIsImlhdCI6MTUxNjIzOTAyMn0.tPwn3uD_6T4FjOTehYDRNg39x2A4E9FFv6qTgduODaA + # bearer: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjZDExYzY4MS00MTY4LTRiZGYtOGYyZC05ZTNhZGU1ZmFjOGQiLCJuYW1lIjoiY2VydGluZXJneSIsImlhdCI6MTUxNjIzOTAyMn0.LAr2l5X9XFRbPRPQvZLt8AWyfzbFGS5BO9MlB4U5HJo # PROD + +identification: + local: + jwt_secret: JWT_KEY + ttl: 120s + +carpooling_proofs: + rpc_registry: + base_url: https://api.demo.covoiturage.beta.gouv.fr + token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhIjoiN2Y4MTQwNzYtOTJmOS00NjExLTlhMmItZjA0MzU4MmMwOWI3IiwibyI6OSwicyI6Im9wZXJhdG9yIiwicCI6WyJjb21tb24uY2VydGlmaWNhdGUuZmluZCIsImNvbW1vbi5jb21wYW55LmZldGNoIiwiY29tbW9uLmNvbXBhbnkuZmluZCIsImNvbW1vbi5ob25vci5zYXZlIiwiY29tbW9uLmhvbm9yLnN0YXRzIiwiY29tbW9uLm9wZXJhdG9yLmxpc3QiLCJjb21tb24ub3BlcmF0b3IuZmluZCIsImNvbW1vbi5wb2xpY3kubGlzdCIsImNvbW1vbi5wb2xpY3kubGlzdC50ZW1wbGF0ZXMiLCJjb21tb24udGVycml0b3J5LmZpbmQiLCJjb21tb24udGVycml0b3J5Lmxpc3QiLCJjb21tb24udGVycml0b3J5LnJlYWQiLCJjb21tb24udHJpcC5zdGF0cyIsImNvbW1vbi51c2VyLnVwZGF0ZSIsImNvbW1vbi51c2VyLmZpbmQiLCJjb21tb24udXNlci5wb2xpY3lTaW11bGF0ZSIsIm9wZXJhdG9yLmFjcXVpc2l0aW9uLmNyZWF0ZSIsIm9wZXJhdG9yLmFjcXVpc2l0aW9uLmNhbmNlbCIsIm9wZXJhdG9yLmFjcXVpc2l0aW9uLnN0YXR1cyIsIm9wZXJhdG9yLmNlcnRpZmljYXRlLmNyZWF0ZSIsIm9wZXJhdG9yLmNlcnRpZmljYXRlLmRvd25sb2FkIiwib3BlcmF0b3IucG9saWN5LnNpbXVsYXRlLmZ1dHVyZSJdLCJ2IjoyLCJpYXQiOjE2NzgwOTg0NTR9.b4ezR41U4kGwa6FVF0-JyvqEE1kKtxGEa5gzqh4ctTU + +storage: + kv: + redis: + addr: 0.0.0.0:6379 + db: db0 + type: minio + +geocoder: + type: pelias + pelias: + base_url: https://geocode.ridygo.fr + +routing: + type: valhalla + valhalla: + base_url: https://valhalla.coopgo.io/ + +emailing: + smtp: + host: mail.gandi.net + port: 587 + username: support@parcoursmob.fr + password: Sc1tYc00p diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..ec66cca --- /dev/null +++ b/go.mod @@ -0,0 +1,65 @@ +module git.coopgo.io/coopgo-apps/silvermobi + +go 1.20 + +require ( + git.coopgo.io/coopgo-platform/mobility-accounts v0.0.0-20230430115320-f5bb2e7c2c26 + github.com/appleboy/gorush v1.16.3 + github.com/go-redis/redis/v9 v9.0.0-rc.2 + github.com/golang-jwt/jwt/v4 v4.5.0 + github.com/golang/protobuf v1.5.3 + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 + github.com/pkg/errors v0.9.1 + github.com/rs/zerolog v1.29.1 + github.com/spf13/viper v1.16.0 + google.golang.org/grpc v1.56.0 + google.golang.org/protobuf v1.31.0 + gopkg.in/mail.v2 v2.3.1 +) + +require ( + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/coreos/go-semver v0.3.0 // indirect + github.com/coreos/go-systemd/v22 v22.5.0 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-stack/stack v1.8.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/klauspost/compress v1.16.3 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.0.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/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.0.2 // indirect + github.com/xdg-go/stringprep v1.0.2 // indirect + github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect + go.etcd.io/etcd/api/v3 v3.5.9 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect + go.etcd.io/etcd/client/v3 v3.5.9 // indirect + go.mongodb.org/mongo-driver v1.9.1 // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.8.0 // indirect + go.uber.org/zap v1.21.0 // indirect + golang.org/x/crypto v0.9.0 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/text v0.9.0 // indirect + google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect + gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect + gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..e4068e6 --- /dev/null +++ b/go.sum @@ -0,0 +1,627 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +git.coopgo.io/coopgo-platform/mobility-accounts v0.0.0-20230430115320-f5bb2e7c2c26 h1:qiYVLLNU29xgT0RRj0Jz0WrjEJnz1Eng1X7l1UW9jGU= +git.coopgo.io/coopgo-platform/mobility-accounts v0.0.0-20230430115320-f5bb2e7c2c26/go.mod h1:1typNYtO+PQT6KG77vs/PUv0fO60/nbeSGZL2tt1LLg= +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/appleboy/gorush v1.16.3 h1:g0VfSEggVGoPY/RvOJp6aoCi2c6S1szGLgztvpnLpd0= +github.com/appleboy/gorush v1.16.3/go.mod h1:ZWWQx7W9c7aptKnJuJxdo24leCcSfduINwaVu1TuFQo= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +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/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +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/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/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/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/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= +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-redis/redis/v9 v9.0.0-rc.2 h1:IN1eI8AvJJeWHjMW/hlFAv2sAfvTun2DVksDDJ3a6a0= +github.com/go-redis/redis/v9 v9.0.0-rc.2/go.mod h1:cgBknjwcBJa2prbnuHH/4k/Mlj4r0pWNV2HBanHujfY= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +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/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +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= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +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/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= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +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.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +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.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/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= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +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/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= +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= +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/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/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= +github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/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.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +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/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= +github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +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/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +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/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +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/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +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/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= +github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 h1:TToq11gyfNlrMFZiYujSekIsPd9AmsA2Bj/iv+s4JHE= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +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/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.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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +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/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= +github.com/yuin/goldmark v1.1.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= +go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs= +go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= +go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE= +go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= +go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E= +go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA= +go.mongodb.org/mongo-driver v1.9.1 h1:m078y9v7sBItkt1aaoe2YlvWEXcD263e1a4E1fBrJ1c= +go.mongodb.org/mongo-driver v1.9.1/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +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/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/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +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/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +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= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +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/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +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.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= +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= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-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.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-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-20191001151750-bb3f8db39f24/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= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/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-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-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/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.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/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= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/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.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/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= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +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-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.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +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= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +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-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-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +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.56.0 h1:+y7Bs8rtMd07LeXmL3NxcTLn7mUkbKZqEpPhMNkwJEE= +google.golang.org/grpc v1.56.0/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +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.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +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/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk= +gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/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= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +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= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/handler/authentication.go b/handler/authentication.go new file mode 100644 index 0000000..5f4b362 --- /dev/null +++ b/handler/authentication.go @@ -0,0 +1,54 @@ +package handler + +import ( + "context" + "time" +) + +func (h *SilvermobiHandler) Login(ctx context.Context, username string, password string) (jwt string, err error) { + account, err := h.Services.MobilityAccounts.Login(ctx, username, password, "silvermobi") + if err != nil { + return + } + + key := h.Config.GetString("identification.local.jwt_secret") + ttl := h.Config.GetString("identification.local.ttl") + + parsedttl, err := time.ParseDuration(ttl) + if err != nil { + return "", err + } + + return account.CreateToken(parsedttl, key) +} + +func (h *SilvermobiHandler) Register(ctx context.Context, username string, password string, email string, phone_number string, first_name string, last_name string) (jwt string, err error) { + account, err := h.Services.MobilityAccounts.Register( + ctx, + username, + password, + email, + phone_number, + map[string]any{ + "first_name": first_name, + "last_name": last_name, + "email": email, + "phone_number": phone_number, + }, + "silvermobi", + ) + + if err != nil { + return "", err + } + + key := h.Config.GetString("identification.local.jwt_secret") + ttl := h.Config.GetString("identification.local.ttl") + + parsedttl, err := time.ParseDuration(ttl) + if err != nil { + return "", err + } + + return account.CreateToken(parsedttl, key) +} diff --git a/handler/forget_password.go b/handler/forget_password.go new file mode 100644 index 0000000..f90d1ed --- /dev/null +++ b/handler/forget_password.go @@ -0,0 +1,46 @@ +package handler + +import ( + "context" + "crypto/rand" + "crypto/tls" + "encoding/base64" + gomail "gopkg.in/mail.v2" +) + +func generateRandomPassword(length int) (string, error) { + buffer := make([]byte, length) + _, err := rand.Read(buffer) + if err != nil { + return "", err + } + password := base64.StdEncoding.EncodeToString(buffer)[:length] + return password, nil +} + +func (h *SilvermobiHandler) ForgetAccount(ctx context.Context, username string, namespace string) (response bool, access_Code string) { + account, err := h.Services.MobilityAccounts.GetAccountUsername(ctx, username, namespace) + if err == nil { + message := []byte("Hello dear,\nYour new Silvermobi password is: ") + password, _ := generateRandomPassword(10) + update := h.Services.MobilityAccounts.UpdatePassword(ctx, account.ID, password) + if update == false { + return false, "" + } + m := gomail.NewMessage() + m.SetHeader("From", h.Config.GetString("emailing.smtp.username")) + m.SetHeader("To", username) + m.SetHeader("Subject", "Silvermobi Password Recovery") + message = append(message, []byte(password)...) + m.SetBody("text/plain", string(message)) + d := gomail.NewDialer(h.Config.GetString("emailing.smtp.host"), h.Config.GetInt("emailing.smtp.port"), h.Config.GetString("emailing.smtp.username"), + h.Config.GetString("emailing.smtp.password")) + d.TLSConfig = &tls.Config{InsecureSkipVerify: true} + if err := d.DialAndSend(m); err != nil { + return false, "" + } + return true, password + } else { + return false, "" + } +} diff --git a/handler/handler.go b/handler/handler.go new file mode 100644 index 0000000..a24470c --- /dev/null +++ b/handler/handler.go @@ -0,0 +1,21 @@ +package handler + +import ( + "git.coopgo.io/coopgo-apps/silvermobi/services" + "git.coopgo.io/coopgo-apps/silvermobi/storage" + "github.com/spf13/viper" +) + +type SilvermobiHandler struct { + Config *viper.Viper + Services *services.ServicesHandler + KVHandler storage.KVHandler +} + +func NewSilvermobiHandler(cfg *viper.Viper, services *services.ServicesHandler, KVHandler storage.KVHandler) (*SilvermobiHandler, error) { + return &SilvermobiHandler{ + Config: cfg, + Services: services, + KVHandler: KVHandler, + }, nil +} diff --git a/handler/onboarding_validation.go b/handler/onboarding_validation.go new file mode 100644 index 0000000..785cd27 --- /dev/null +++ b/handler/onboarding_validation.go @@ -0,0 +1,109 @@ +package handler + +import ( + "context" + "fmt" + "git.coopgo.io/coopgo-apps/silvermobi/services" + "git.coopgo.io/coopgo-platform/mobility-accounts/grpcapi" + "github.com/pkg/errors" + "github.com/rs/zerolog/log" + "math/rand" +) + +func (h *SilvermobiHandler) UpdatePhoneNumber(ctx context.Context, email string, phone_number string) error { + code := rand.Intn(9999) + account, err := h.Services.MobilityAccounts.GetAccountUsername(ctx, email, "silvermobi") + if err != nil { + return err + } + err = h.Services.MobilityAccounts.UpdatePhoneNumber( + ctx, + account.ID, + phone_number, + false, + fmt.Sprintf("%04d", code), + ) + if err != nil { + log.Error().Err(err).Msg("updating phone number failed") + return err + } + + err = h.Services.Push.Send( + services.Notification{ + Platform: services.PushToSMSFactor, + Recipients: []string{phone_number[1:]}, + Title: "SILVERMOBI", + Message: fmt.Sprintf("SILVERMOBI - Votre code de validation : %04d", code), + }, + ) + + if err != nil { + log.Error().Err(err).Msg("issue sending verification code by sms") + } + + return nil +} + +func (h *SilvermobiHandler) VerifyPhoneNumber(ctx context.Context, email string, phone_number string, verification_code string) error { + account, err := h.Services.MobilityAccounts.GetAccountUsername(ctx, email, "silvermobi") + request := &grpcapi.GetAccountRequest{ + Id: account.ID, + } + resp, err := h.Services.MobilityAccounts.Client.GetAccount(ctx, request) + if err != nil { + return err + } + + account_ := resp.Account + + log.Debug(). + Str("phone_number", phone_number). + Str("account.phone_number", account_.Authentication.Local.PhoneNumber). + Str("verification_code", verification_code). + Str("account.verification_code", account_.Authentication.Local.PhoneNumberValidation.ValidationCode). + Msg("Verify phone number") + + if account_.Authentication.Local.PhoneNumber != phone_number || account_.Authentication.Local.PhoneNumberValidation.ValidationCode != verification_code { + return errors.New("cound not validate phone number : verification code mismatch") + } + + err = h.Services.MobilityAccounts.UpdatePhoneNumber( + ctx, + account.ID, + phone_number, + true, + "", + ) + if err != nil { + return err + } + + return nil +} + +func (h *SilvermobiHandler) UpdateBirthDate(ctx context.Context, username string, birthdate string) error { + err := h.Services.MobilityAccounts.UpdateAccountBirthDate(ctx, username, "silvermobi", birthdate) + if err != nil { + return err + } + return nil +} + +func (h *SilvermobiHandler) CheckValidation(ctx context.Context, email string) (phone_validation, birth_validation bool, err error) { + account, err := h.Services.MobilityAccounts.GetAccountUsername(ctx, email, "silvermobi") + if err != nil { + return false, false, err + log.Error().Err(err).Msg("Failed get validation response") + } + phone_validation = false + birth_validation = false + if account.LocalCredentials.PhoneNumberVerified { + phone_validation = true + + } + if account.BirthDate != "" { + birth_validation = true + } + log.Info().Msg("Getting phone and birth validation for " + email) + return phone_validation, birth_validation, nil +} diff --git a/handler/update_password.go b/handler/update_password.go new file mode 100644 index 0000000..0db1b3e --- /dev/null +++ b/handler/update_password.go @@ -0,0 +1,16 @@ +package handler + +import "context" + +func (h *SilvermobiHandler) UpdatePassword(ctx context.Context, username string, password string) (response bool) { + account, err := h.Services.MobilityAccounts.GetAccountUsername(ctx, username, "silvermobi") + if err != nil { + return false + } + result := h.Services.MobilityAccounts.UpdatePassword(ctx, account.ID, password) + if result == true { + return true + } else { + return false + } +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..31562fc --- /dev/null +++ b/main.go @@ -0,0 +1,48 @@ +package main + +import ( + "git.coopgo.io/coopgo-apps/silvermobi/handler" + grpcserver "git.coopgo.io/coopgo-apps/silvermobi/servers/grpcapi/server" + "git.coopgo.io/coopgo-apps/silvermobi/services" + "git.coopgo.io/coopgo-apps/silvermobi/storage" + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" +) + +func main() { + zerolog.TimeFieldFormat = zerolog.TimeFormatUnix + + cfg, err := ReadConfig() + if err != nil { + panic(err) + } + + var ( + grpc_enable = cfg.GetBool("services.external.grpc.enable") + ) + + services, err := services.NewServicesHandler(cfg) + if err != nil { + log.Fatal().Err(err).Msg("failed starting services handler") + } + kvhandler, err := storage.NewKVHandler(cfg) + if err != nil { + log.Fatal().Err(err).Msg("failed starting storage handler") + } + + handler, err := handler.NewSilvermobiHandler(cfg, services, kvhandler) + if err != nil { + log.Fatal().Err(err).Msg("failed starting ridygo handler") + } + + failed := make(chan error) + + if grpc_enable { + log.Info().Msg("Running gRPC server") + go grpcserver.Run(failed, cfg, handler) + } + + err = <-failed + + log.Fatal().Err(err).Msg("Terminating") +} diff --git a/models/accounts.go b/models/accounts.go new file mode 100644 index 0000000..5e997ef --- /dev/null +++ b/models/accounts.go @@ -0,0 +1,41 @@ +package models + +import ( + "github.com/golang-jwt/jwt/v4" + "time" +) + +type Account struct { + ID string `json:"id"` + FirstName string `json:"firstName,omitempty"` + LastName string `json:"lastName,omitempty"` + VerifiedIdentity *bool `json:"verifiedIdentity,omitempty"` + BirthDate string `json:"birthdate,omitempty"` + LocalCredentials +} + +type LocalCredentials struct { + Email string + EmailVerified bool + EmailValidationCode string + PhoneNumber string + PhoneNumberVerified bool + PhoneNumberValidationCode string +} + +type UserClaims struct { + jwt.RegisteredClaims +} + +func (account Account) CreateToken(ttl time.Duration, key string) (token string, err error) { + expires_at := jwt.NewNumericDate(time.Now().Add(ttl)) + claims := UserClaims{ + RegisteredClaims: jwt.RegisteredClaims{ + Subject: account.Email, + ExpiresAt: expires_at, + }, + } + + t := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + return t.SignedString([]byte(key)) +} diff --git a/servers/git.coopgo.io/coopgo-apps/silvermobi/grpcapi/proto/silvermobi-service.pb.go b/servers/git.coopgo.io/coopgo-apps/silvermobi/grpcapi/proto/silvermobi-service.pb.go new file mode 100644 index 0000000..3d6a8eb --- /dev/null +++ b/servers/git.coopgo.io/coopgo-apps/silvermobi/grpcapi/proto/silvermobi-service.pb.go @@ -0,0 +1,1002 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: silvermobi-service.proto + +package proto + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + timestamp "github.com/golang/protobuf/ptypes/timestamp" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type AuthLoginRequest struct { + Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AuthLoginRequest) Reset() { *m = AuthLoginRequest{} } +func (m *AuthLoginRequest) String() string { return proto.CompactTextString(m) } +func (*AuthLoginRequest) ProtoMessage() {} +func (*AuthLoginRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{0} +} + +func (m *AuthLoginRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_AuthLoginRequest.Unmarshal(m, b) +} +func (m *AuthLoginRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_AuthLoginRequest.Marshal(b, m, deterministic) +} +func (m *AuthLoginRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuthLoginRequest.Merge(m, src) +} +func (m *AuthLoginRequest) XXX_Size() int { + return xxx_messageInfo_AuthLoginRequest.Size(m) +} +func (m *AuthLoginRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AuthLoginRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AuthLoginRequest proto.InternalMessageInfo + +func (m *AuthLoginRequest) GetUsername() string { + if m != nil { + return m.Username + } + return "" +} + +func (m *AuthLoginRequest) GetPassword() string { + if m != nil { + return m.Password + } + return "" +} + +type AuthLoginResponse struct { + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AuthLoginResponse) Reset() { *m = AuthLoginResponse{} } +func (m *AuthLoginResponse) String() string { return proto.CompactTextString(m) } +func (*AuthLoginResponse) ProtoMessage() {} +func (*AuthLoginResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{1} +} + +func (m *AuthLoginResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_AuthLoginResponse.Unmarshal(m, b) +} +func (m *AuthLoginResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_AuthLoginResponse.Marshal(b, m, deterministic) +} +func (m *AuthLoginResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuthLoginResponse.Merge(m, src) +} +func (m *AuthLoginResponse) XXX_Size() int { + return xxx_messageInfo_AuthLoginResponse.Size(m) +} +func (m *AuthLoginResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AuthLoginResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_AuthLoginResponse proto.InternalMessageInfo + +func (m *AuthLoginResponse) GetToken() string { + if m != nil { + return m.Token + } + return "" +} + +type AuthRegisterRequest struct { + Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` + FirstName string `protobuf:"bytes,3,opt,name=first_name,json=firstName,proto3" json:"first_name,omitempty"` + LastName string `protobuf:"bytes,4,opt,name=last_name,json=lastName,proto3" json:"last_name,omitempty"` + PhoneNumber string `protobuf:"bytes,5,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AuthRegisterRequest) Reset() { *m = AuthRegisterRequest{} } +func (m *AuthRegisterRequest) String() string { return proto.CompactTextString(m) } +func (*AuthRegisterRequest) ProtoMessage() {} +func (*AuthRegisterRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{2} +} + +func (m *AuthRegisterRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_AuthRegisterRequest.Unmarshal(m, b) +} +func (m *AuthRegisterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_AuthRegisterRequest.Marshal(b, m, deterministic) +} +func (m *AuthRegisterRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuthRegisterRequest.Merge(m, src) +} +func (m *AuthRegisterRequest) XXX_Size() int { + return xxx_messageInfo_AuthRegisterRequest.Size(m) +} +func (m *AuthRegisterRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AuthRegisterRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AuthRegisterRequest proto.InternalMessageInfo + +func (m *AuthRegisterRequest) GetEmail() string { + if m != nil { + return m.Email + } + return "" +} + +func (m *AuthRegisterRequest) GetPassword() string { + if m != nil { + return m.Password + } + return "" +} + +func (m *AuthRegisterRequest) GetFirstName() string { + if m != nil { + return m.FirstName + } + return "" +} + +func (m *AuthRegisterRequest) GetLastName() string { + if m != nil { + return m.LastName + } + return "" +} + +func (m *AuthRegisterRequest) GetPhoneNumber() string { + if m != nil { + return m.PhoneNumber + } + return "" +} + +type AuthRegisterResponse struct { + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AuthRegisterResponse) Reset() { *m = AuthRegisterResponse{} } +func (m *AuthRegisterResponse) String() string { return proto.CompactTextString(m) } +func (*AuthRegisterResponse) ProtoMessage() {} +func (*AuthRegisterResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{3} +} + +func (m *AuthRegisterResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_AuthRegisterResponse.Unmarshal(m, b) +} +func (m *AuthRegisterResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_AuthRegisterResponse.Marshal(b, m, deterministic) +} +func (m *AuthRegisterResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AuthRegisterResponse.Merge(m, src) +} +func (m *AuthRegisterResponse) XXX_Size() int { + return xxx_messageInfo_AuthRegisterResponse.Size(m) +} +func (m *AuthRegisterResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AuthRegisterResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_AuthRegisterResponse proto.InternalMessageInfo + +func (m *AuthRegisterResponse) GetToken() string { + if m != nil { + return m.Token + } + return "" +} + +type ForgetAccountRequest struct { + Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ForgetAccountRequest) Reset() { *m = ForgetAccountRequest{} } +func (m *ForgetAccountRequest) String() string { return proto.CompactTextString(m) } +func (*ForgetAccountRequest) ProtoMessage() {} +func (*ForgetAccountRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{4} +} + +func (m *ForgetAccountRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ForgetAccountRequest.Unmarshal(m, b) +} +func (m *ForgetAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ForgetAccountRequest.Marshal(b, m, deterministic) +} +func (m *ForgetAccountRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForgetAccountRequest.Merge(m, src) +} +func (m *ForgetAccountRequest) XXX_Size() int { + return xxx_messageInfo_ForgetAccountRequest.Size(m) +} +func (m *ForgetAccountRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ForgetAccountRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ForgetAccountRequest proto.InternalMessageInfo + +func (m *ForgetAccountRequest) GetUsername() string { + if m != nil { + return m.Username + } + return "" +} + +func (m *ForgetAccountRequest) GetNamespace() string { + if m != nil { + return m.Namespace + } + return "" +} + +type ForgetAccountResponse struct { + Response bool `protobuf:"varint,1,opt,name=response,proto3" json:"response,omitempty"` + AccessCode string `protobuf:"bytes,2,opt,name=access_code,json=accessCode,proto3" json:"access_code,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ForgetAccountResponse) Reset() { *m = ForgetAccountResponse{} } +func (m *ForgetAccountResponse) String() string { return proto.CompactTextString(m) } +func (*ForgetAccountResponse) ProtoMessage() {} +func (*ForgetAccountResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{5} +} + +func (m *ForgetAccountResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ForgetAccountResponse.Unmarshal(m, b) +} +func (m *ForgetAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ForgetAccountResponse.Marshal(b, m, deterministic) +} +func (m *ForgetAccountResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForgetAccountResponse.Merge(m, src) +} +func (m *ForgetAccountResponse) XXX_Size() int { + return xxx_messageInfo_ForgetAccountResponse.Size(m) +} +func (m *ForgetAccountResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ForgetAccountResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ForgetAccountResponse proto.InternalMessageInfo + +func (m *ForgetAccountResponse) GetResponse() bool { + if m != nil { + return m.Response + } + return false +} + +func (m *ForgetAccountResponse) GetAccessCode() string { + if m != nil { + return m.AccessCode + } + return "" +} + +type UpdatePasswordRequest struct { + Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UpdatePasswordRequest) Reset() { *m = UpdatePasswordRequest{} } +func (m *UpdatePasswordRequest) String() string { return proto.CompactTextString(m) } +func (*UpdatePasswordRequest) ProtoMessage() {} +func (*UpdatePasswordRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{6} +} + +func (m *UpdatePasswordRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UpdatePasswordRequest.Unmarshal(m, b) +} +func (m *UpdatePasswordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UpdatePasswordRequest.Marshal(b, m, deterministic) +} +func (m *UpdatePasswordRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdatePasswordRequest.Merge(m, src) +} +func (m *UpdatePasswordRequest) XXX_Size() int { + return xxx_messageInfo_UpdatePasswordRequest.Size(m) +} +func (m *UpdatePasswordRequest) XXX_DiscardUnknown() { + xxx_messageInfo_UpdatePasswordRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_UpdatePasswordRequest proto.InternalMessageInfo + +func (m *UpdatePasswordRequest) GetEmail() string { + if m != nil { + return m.Email + } + return "" +} + +func (m *UpdatePasswordRequest) GetPassword() string { + if m != nil { + return m.Password + } + return "" +} + +type UpdatePasswordResponse struct { + Response bool `protobuf:"varint,1,opt,name=response,proto3" json:"response,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UpdatePasswordResponse) Reset() { *m = UpdatePasswordResponse{} } +func (m *UpdatePasswordResponse) String() string { return proto.CompactTextString(m) } +func (*UpdatePasswordResponse) ProtoMessage() {} +func (*UpdatePasswordResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{7} +} + +func (m *UpdatePasswordResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UpdatePasswordResponse.Unmarshal(m, b) +} +func (m *UpdatePasswordResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UpdatePasswordResponse.Marshal(b, m, deterministic) +} +func (m *UpdatePasswordResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdatePasswordResponse.Merge(m, src) +} +func (m *UpdatePasswordResponse) XXX_Size() int { + return xxx_messageInfo_UpdatePasswordResponse.Size(m) +} +func (m *UpdatePasswordResponse) XXX_DiscardUnknown() { + xxx_messageInfo_UpdatePasswordResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_UpdatePasswordResponse proto.InternalMessageInfo + +func (m *UpdatePasswordResponse) GetResponse() bool { + if m != nil { + return m.Response + } + return false +} + +type SetPhoneNumberRequest struct { + PhoneNumber string `protobuf:"bytes,1,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetPhoneNumberRequest) Reset() { *m = SetPhoneNumberRequest{} } +func (m *SetPhoneNumberRequest) String() string { return proto.CompactTextString(m) } +func (*SetPhoneNumberRequest) ProtoMessage() {} +func (*SetPhoneNumberRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{8} +} + +func (m *SetPhoneNumberRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetPhoneNumberRequest.Unmarshal(m, b) +} +func (m *SetPhoneNumberRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetPhoneNumberRequest.Marshal(b, m, deterministic) +} +func (m *SetPhoneNumberRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetPhoneNumberRequest.Merge(m, src) +} +func (m *SetPhoneNumberRequest) XXX_Size() int { + return xxx_messageInfo_SetPhoneNumberRequest.Size(m) +} +func (m *SetPhoneNumberRequest) XXX_DiscardUnknown() { + xxx_messageInfo_SetPhoneNumberRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_SetPhoneNumberRequest proto.InternalMessageInfo + +func (m *SetPhoneNumberRequest) GetPhoneNumber() string { + if m != nil { + return m.PhoneNumber + } + return "" +} + +func (m *SetPhoneNumberRequest) GetEmail() string { + if m != nil { + return m.Email + } + return "" +} + +type SetPhoneNumberResponse struct { + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetPhoneNumberResponse) Reset() { *m = SetPhoneNumberResponse{} } +func (m *SetPhoneNumberResponse) String() string { return proto.CompactTextString(m) } +func (*SetPhoneNumberResponse) ProtoMessage() {} +func (*SetPhoneNumberResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{9} +} + +func (m *SetPhoneNumberResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetPhoneNumberResponse.Unmarshal(m, b) +} +func (m *SetPhoneNumberResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetPhoneNumberResponse.Marshal(b, m, deterministic) +} +func (m *SetPhoneNumberResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetPhoneNumberResponse.Merge(m, src) +} +func (m *SetPhoneNumberResponse) XXX_Size() int { + return xxx_messageInfo_SetPhoneNumberResponse.Size(m) +} +func (m *SetPhoneNumberResponse) XXX_DiscardUnknown() { + xxx_messageInfo_SetPhoneNumberResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_SetPhoneNumberResponse proto.InternalMessageInfo + +func (m *SetPhoneNumberResponse) GetOk() bool { + if m != nil { + return m.Ok + } + return false +} + +type VerifyPhoneNumberRequest struct { + PhoneNumber string `protobuf:"bytes,1,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` + VerificationCode string `protobuf:"bytes,2,opt,name=verification_code,json=verificationCode,proto3" json:"verification_code,omitempty"` + Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VerifyPhoneNumberRequest) Reset() { *m = VerifyPhoneNumberRequest{} } +func (m *VerifyPhoneNumberRequest) String() string { return proto.CompactTextString(m) } +func (*VerifyPhoneNumberRequest) ProtoMessage() {} +func (*VerifyPhoneNumberRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{10} +} + +func (m *VerifyPhoneNumberRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VerifyPhoneNumberRequest.Unmarshal(m, b) +} +func (m *VerifyPhoneNumberRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VerifyPhoneNumberRequest.Marshal(b, m, deterministic) +} +func (m *VerifyPhoneNumberRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_VerifyPhoneNumberRequest.Merge(m, src) +} +func (m *VerifyPhoneNumberRequest) XXX_Size() int { + return xxx_messageInfo_VerifyPhoneNumberRequest.Size(m) +} +func (m *VerifyPhoneNumberRequest) XXX_DiscardUnknown() { + xxx_messageInfo_VerifyPhoneNumberRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_VerifyPhoneNumberRequest proto.InternalMessageInfo + +func (m *VerifyPhoneNumberRequest) GetPhoneNumber() string { + if m != nil { + return m.PhoneNumber + } + return "" +} + +func (m *VerifyPhoneNumberRequest) GetVerificationCode() string { + if m != nil { + return m.VerificationCode + } + return "" +} + +func (m *VerifyPhoneNumberRequest) GetEmail() string { + if m != nil { + return m.Email + } + return "" +} + +type VerifyPhoneNumberResponse struct { + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VerifyPhoneNumberResponse) Reset() { *m = VerifyPhoneNumberResponse{} } +func (m *VerifyPhoneNumberResponse) String() string { return proto.CompactTextString(m) } +func (*VerifyPhoneNumberResponse) ProtoMessage() {} +func (*VerifyPhoneNumberResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{11} +} + +func (m *VerifyPhoneNumberResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VerifyPhoneNumberResponse.Unmarshal(m, b) +} +func (m *VerifyPhoneNumberResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VerifyPhoneNumberResponse.Marshal(b, m, deterministic) +} +func (m *VerifyPhoneNumberResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_VerifyPhoneNumberResponse.Merge(m, src) +} +func (m *VerifyPhoneNumberResponse) XXX_Size() int { + return xxx_messageInfo_VerifyPhoneNumberResponse.Size(m) +} +func (m *VerifyPhoneNumberResponse) XXX_DiscardUnknown() { + xxx_messageInfo_VerifyPhoneNumberResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_VerifyPhoneNumberResponse proto.InternalMessageInfo + +func (m *VerifyPhoneNumberResponse) GetOk() bool { + if m != nil { + return m.Ok + } + return false +} + +type BirthDateRequest struct { + Birthdate *timestamp.Timestamp `protobuf:"bytes,1,opt,name=birthdate,proto3" json:"birthdate,omitempty"` + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BirthDateRequest) Reset() { *m = BirthDateRequest{} } +func (m *BirthDateRequest) String() string { return proto.CompactTextString(m) } +func (*BirthDateRequest) ProtoMessage() {} +func (*BirthDateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{12} +} + +func (m *BirthDateRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BirthDateRequest.Unmarshal(m, b) +} +func (m *BirthDateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BirthDateRequest.Marshal(b, m, deterministic) +} +func (m *BirthDateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_BirthDateRequest.Merge(m, src) +} +func (m *BirthDateRequest) XXX_Size() int { + return xxx_messageInfo_BirthDateRequest.Size(m) +} +func (m *BirthDateRequest) XXX_DiscardUnknown() { + xxx_messageInfo_BirthDateRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_BirthDateRequest proto.InternalMessageInfo + +func (m *BirthDateRequest) GetBirthdate() *timestamp.Timestamp { + if m != nil { + return m.Birthdate + } + return nil +} + +func (m *BirthDateRequest) GetEmail() string { + if m != nil { + return m.Email + } + return "" +} + +type BirthDateResponse struct { + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BirthDateResponse) Reset() { *m = BirthDateResponse{} } +func (m *BirthDateResponse) String() string { return proto.CompactTextString(m) } +func (*BirthDateResponse) ProtoMessage() {} +func (*BirthDateResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{13} +} + +func (m *BirthDateResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BirthDateResponse.Unmarshal(m, b) +} +func (m *BirthDateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BirthDateResponse.Marshal(b, m, deterministic) +} +func (m *BirthDateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_BirthDateResponse.Merge(m, src) +} +func (m *BirthDateResponse) XXX_Size() int { + return xxx_messageInfo_BirthDateResponse.Size(m) +} +func (m *BirthDateResponse) XXX_DiscardUnknown() { + xxx_messageInfo_BirthDateResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_BirthDateResponse proto.InternalMessageInfo + +func (m *BirthDateResponse) GetOk() bool { + if m != nil { + return m.Ok + } + return false +} + +type KeyValueRequest struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *KeyValueRequest) Reset() { *m = KeyValueRequest{} } +func (m *KeyValueRequest) String() string { return proto.CompactTextString(m) } +func (*KeyValueRequest) ProtoMessage() {} +func (*KeyValueRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{14} +} + +func (m *KeyValueRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KeyValueRequest.Unmarshal(m, b) +} +func (m *KeyValueRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KeyValueRequest.Marshal(b, m, deterministic) +} +func (m *KeyValueRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_KeyValueRequest.Merge(m, src) +} +func (m *KeyValueRequest) XXX_Size() int { + return xxx_messageInfo_KeyValueRequest.Size(m) +} +func (m *KeyValueRequest) XXX_DiscardUnknown() { + xxx_messageInfo_KeyValueRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_KeyValueRequest proto.InternalMessageInfo + +func (m *KeyValueRequest) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *KeyValueRequest) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +type KeyValueResponse struct { + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *KeyValueResponse) Reset() { *m = KeyValueResponse{} } +func (m *KeyValueResponse) String() string { return proto.CompactTextString(m) } +func (*KeyValueResponse) ProtoMessage() {} +func (*KeyValueResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{15} +} + +func (m *KeyValueResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KeyValueResponse.Unmarshal(m, b) +} +func (m *KeyValueResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KeyValueResponse.Marshal(b, m, deterministic) +} +func (m *KeyValueResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_KeyValueResponse.Merge(m, src) +} +func (m *KeyValueResponse) XXX_Size() int { + return xxx_messageInfo_KeyValueResponse.Size(m) +} +func (m *KeyValueResponse) XXX_DiscardUnknown() { + xxx_messageInfo_KeyValueResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_KeyValueResponse proto.InternalMessageInfo + +func (m *KeyValueResponse) GetOk() bool { + if m != nil { + return m.Ok + } + return false +} + +type KeyRequest struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *KeyRequest) Reset() { *m = KeyRequest{} } +func (m *KeyRequest) String() string { return proto.CompactTextString(m) } +func (*KeyRequest) ProtoMessage() {} +func (*KeyRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{16} +} + +func (m *KeyRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KeyRequest.Unmarshal(m, b) +} +func (m *KeyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KeyRequest.Marshal(b, m, deterministic) +} +func (m *KeyRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_KeyRequest.Merge(m, src) +} +func (m *KeyRequest) XXX_Size() int { + return xxx_messageInfo_KeyRequest.Size(m) +} +func (m *KeyRequest) XXX_DiscardUnknown() { + xxx_messageInfo_KeyRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_KeyRequest proto.InternalMessageInfo + +func (m *KeyRequest) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +type ValueResponse struct { + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValueResponse) Reset() { *m = ValueResponse{} } +func (m *ValueResponse) String() string { return proto.CompactTextString(m) } +func (*ValueResponse) ProtoMessage() {} +func (*ValueResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{17} +} + +func (m *ValueResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValueResponse.Unmarshal(m, b) +} +func (m *ValueResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValueResponse.Marshal(b, m, deterministic) +} +func (m *ValueResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValueResponse.Merge(m, src) +} +func (m *ValueResponse) XXX_Size() int { + return xxx_messageInfo_ValueResponse.Size(m) +} +func (m *ValueResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ValueResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ValueResponse proto.InternalMessageInfo + +func (m *ValueResponse) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +type ValidationRequest struct { + Phone bool `protobuf:"varint,1,opt,name=phone,proto3" json:"phone,omitempty"` + Birthdate bool `protobuf:"varint,2,opt,name=birthdate,proto3" json:"birthdate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValidationRequest) Reset() { *m = ValidationRequest{} } +func (m *ValidationRequest) String() string { return proto.CompactTextString(m) } +func (*ValidationRequest) ProtoMessage() {} +func (*ValidationRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{18} +} + +func (m *ValidationRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValidationRequest.Unmarshal(m, b) +} +func (m *ValidationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValidationRequest.Marshal(b, m, deterministic) +} +func (m *ValidationRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidationRequest.Merge(m, src) +} +func (m *ValidationRequest) XXX_Size() int { + return xxx_messageInfo_ValidationRequest.Size(m) +} +func (m *ValidationRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ValidationRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidationRequest proto.InternalMessageInfo + +func (m *ValidationRequest) GetPhone() bool { + if m != nil { + return m.Phone + } + return false +} + +func (m *ValidationRequest) GetBirthdate() bool { + if m != nil { + return m.Birthdate + } + return false +} + +type ValidationResponse struct { + Phone bool `protobuf:"varint,1,opt,name=phone,proto3" json:"phone,omitempty"` + Birthdate bool `protobuf:"varint,2,opt,name=birthdate,proto3" json:"birthdate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ValidationResponse) Reset() { *m = ValidationResponse{} } +func (m *ValidationResponse) String() string { return proto.CompactTextString(m) } +func (*ValidationResponse) ProtoMessage() {} +func (*ValidationResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a78a5ce418359426, []int{19} +} + +func (m *ValidationResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ValidationResponse.Unmarshal(m, b) +} +func (m *ValidationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ValidationResponse.Marshal(b, m, deterministic) +} +func (m *ValidationResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidationResponse.Merge(m, src) +} +func (m *ValidationResponse) XXX_Size() int { + return xxx_messageInfo_ValidationResponse.Size(m) +} +func (m *ValidationResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ValidationResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidationResponse proto.InternalMessageInfo + +func (m *ValidationResponse) GetPhone() bool { + if m != nil { + return m.Phone + } + return false +} + +func (m *ValidationResponse) GetBirthdate() bool { + if m != nil { + return m.Birthdate + } + return false +} + +func init() { + proto.RegisterType((*AuthLoginRequest)(nil), "AuthLoginRequest") + proto.RegisterType((*AuthLoginResponse)(nil), "AuthLoginResponse") + proto.RegisterType((*AuthRegisterRequest)(nil), "AuthRegisterRequest") + proto.RegisterType((*AuthRegisterResponse)(nil), "AuthRegisterResponse") + proto.RegisterType((*ForgetAccountRequest)(nil), "ForgetAccountRequest") + proto.RegisterType((*ForgetAccountResponse)(nil), "ForgetAccountResponse") + proto.RegisterType((*UpdatePasswordRequest)(nil), "UpdatePasswordRequest") + proto.RegisterType((*UpdatePasswordResponse)(nil), "UpdatePasswordResponse") + proto.RegisterType((*SetPhoneNumberRequest)(nil), "SetPhoneNumberRequest") + proto.RegisterType((*SetPhoneNumberResponse)(nil), "SetPhoneNumberResponse") + proto.RegisterType((*VerifyPhoneNumberRequest)(nil), "VerifyPhoneNumberRequest") + proto.RegisterType((*VerifyPhoneNumberResponse)(nil), "VerifyPhoneNumberResponse") + proto.RegisterType((*BirthDateRequest)(nil), "BirthDateRequest") + proto.RegisterType((*BirthDateResponse)(nil), "BirthDateResponse") + proto.RegisterType((*KeyValueRequest)(nil), "KeyValueRequest") + proto.RegisterType((*KeyValueResponse)(nil), "KeyValueResponse") + proto.RegisterType((*KeyRequest)(nil), "KeyRequest") + proto.RegisterType((*ValueResponse)(nil), "ValueResponse") + proto.RegisterType((*ValidationRequest)(nil), "ValidationRequest") + proto.RegisterType((*ValidationResponse)(nil), "ValidationResponse") +} + +func init() { + proto.RegisterFile("silvermobi-service.proto", fileDescriptor_a78a5ce418359426) +} + +var fileDescriptor_a78a5ce418359426 = []byte{ + // 776 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x5d, 0x4f, 0xdb, 0x4a, + 0x10, 0x75, 0x02, 0x5c, 0x91, 0x09, 0xe4, 0xc6, 0x4b, 0x12, 0x82, 0xef, 0x6d, 0x69, 0xb7, 0xaa, + 0x44, 0x05, 0x6c, 0x24, 0x1a, 0xa9, 0x1f, 0x52, 0xa5, 0x02, 0x55, 0xd3, 0x16, 0x84, 0xa2, 0x84, + 0xf2, 0xd0, 0x17, 0xe4, 0x38, 0x8b, 0x59, 0x25, 0xf1, 0xba, 0xde, 0x4d, 0xaa, 0xbc, 0xf5, 0xd7, + 0xf4, 0x37, 0xf6, 0xb1, 0xf2, 0xda, 0x8e, 0x1d, 0xc7, 0xa1, 0x2d, 0x4f, 0xf6, 0x7c, 0xec, 0x99, + 0xe3, 0xd9, 0x39, 0x23, 0x43, 0x5d, 0xb0, 0xe1, 0x84, 0x7a, 0x23, 0xde, 0x63, 0x87, 0x82, 0x7a, + 0x13, 0x66, 0x51, 0xe2, 0x7a, 0x5c, 0x72, 0x63, 0xd7, 0xe6, 0xdc, 0x1e, 0xd2, 0x86, 0xb2, 0x7a, + 0xe3, 0x9b, 0x86, 0x64, 0x23, 0x2a, 0xa4, 0x39, 0x72, 0x83, 0x04, 0xfc, 0x09, 0xca, 0xc7, 0x63, + 0x79, 0x7b, 0xce, 0x6d, 0xe6, 0x74, 0xe8, 0xd7, 0x31, 0x15, 0x12, 0x19, 0xb0, 0x3e, 0x16, 0xd4, + 0x73, 0xcc, 0x11, 0xad, 0xe7, 0x1e, 0xe5, 0xf6, 0x0a, 0x9d, 0x99, 0xed, 0xc7, 0x5c, 0x53, 0x88, + 0x6f, 0xdc, 0xeb, 0xd7, 0xf3, 0x41, 0x2c, 0xb2, 0xf1, 0x33, 0xd0, 0x13, 0x58, 0xc2, 0xe5, 0x8e, + 0xa0, 0xa8, 0x02, 0x6b, 0x92, 0x0f, 0xa8, 0x13, 0x22, 0x05, 0x06, 0xfe, 0x91, 0x83, 0x2d, 0x3f, + 0xb7, 0x43, 0x6d, 0x26, 0x24, 0xf5, 0xa2, 0xd2, 0x15, 0x58, 0xa3, 0x23, 0x93, 0x0d, 0xa3, 0x6c, + 0x65, 0xdc, 0x55, 0x14, 0x3d, 0x00, 0xb8, 0x61, 0x9e, 0x90, 0xd7, 0x8a, 0xee, 0x8a, 0x8a, 0x16, + 0x94, 0xe7, 0xc2, 0xe7, 0xfb, 0x1f, 0x14, 0x86, 0x66, 0x14, 0x5d, 0x0d, 0xce, 0xfa, 0x0e, 0x15, + 0x7c, 0x0c, 0x1b, 0xee, 0x2d, 0x77, 0xe8, 0xb5, 0x33, 0x1e, 0xf5, 0xa8, 0x57, 0x5f, 0x53, 0xf1, + 0xa2, 0xf2, 0x5d, 0x28, 0x17, 0x3e, 0x80, 0xca, 0x3c, 0xcf, 0x3b, 0x3f, 0xab, 0x0d, 0x95, 0xf7, + 0xdc, 0xb3, 0xa9, 0x3c, 0xb6, 0x2c, 0x3e, 0x76, 0xe4, 0x9f, 0x74, 0xf4, 0x7f, 0x28, 0xf8, 0x4f, + 0xe1, 0x9a, 0x16, 0x0d, 0xbf, 0x2e, 0x76, 0xe0, 0x4b, 0xa8, 0xa6, 0x10, 0x43, 0x02, 0x06, 0xac, + 0x7b, 0xe1, 0xbb, 0x82, 0x5c, 0xef, 0xcc, 0x6c, 0xb4, 0x0b, 0x45, 0xd3, 0xb2, 0xa8, 0x10, 0xd7, + 0x16, 0xef, 0x47, 0xa0, 0x10, 0xb8, 0x4e, 0x79, 0x9f, 0xe2, 0x8f, 0x50, 0xfd, 0xec, 0xf6, 0x4d, + 0x49, 0xdb, 0x61, 0x1b, 0xef, 0xdd, 0x7f, 0xdc, 0x84, 0x5a, 0x1a, 0xea, 0xf7, 0x0c, 0x71, 0x1b, + 0xaa, 0x5d, 0x2a, 0xdb, 0x71, 0xa3, 0x23, 0x02, 0xe9, 0x2b, 0xc9, 0x2d, 0x5c, 0x49, 0xcc, 0x31, + 0x9f, 0xe0, 0x88, 0xf7, 0xa0, 0x96, 0x46, 0x0c, 0x79, 0x94, 0x20, 0xcf, 0x07, 0x21, 0x83, 0x3c, + 0x1f, 0xe0, 0xef, 0x39, 0xa8, 0x5f, 0x51, 0x8f, 0xdd, 0x4c, 0xef, 0x57, 0x7f, 0x1f, 0xf4, 0x89, + 0x7f, 0x9c, 0x59, 0xa6, 0x64, 0xdc, 0x49, 0xf6, 0xb8, 0x9c, 0x0c, 0xf8, 0x9d, 0x8e, 0xc9, 0xae, + 0x24, 0xc9, 0xee, 0xc3, 0x4e, 0x06, 0x83, 0x25, 0x7c, 0x7b, 0x50, 0x3e, 0x61, 0x9e, 0xbc, 0x7d, + 0x67, 0x4a, 0x1a, 0xd1, 0x7c, 0x09, 0x85, 0x9e, 0xef, 0xf3, 0x1b, 0xaf, 0x52, 0x8b, 0x47, 0x06, + 0x09, 0xb4, 0x4e, 0x22, 0xad, 0x93, 0xcb, 0x48, 0xeb, 0x9d, 0x38, 0x79, 0x49, 0xf7, 0x9e, 0x80, + 0x9e, 0xa8, 0xb1, 0x84, 0xc8, 0x2b, 0xf8, 0xf7, 0x8c, 0x4e, 0xaf, 0xcc, 0xe1, 0x78, 0xc6, 0xa3, + 0x0c, 0x2b, 0x03, 0x3a, 0x0d, 0xbb, 0xe4, 0xbf, 0xfa, 0xf8, 0x13, 0x3f, 0x23, 0xc2, 0x57, 0x06, + 0xc6, 0x50, 0x8e, 0x8f, 0x2e, 0x81, 0x7f, 0x08, 0x70, 0x46, 0xa7, 0x4b, 0x91, 0xf1, 0x53, 0xd8, + 0x9c, 0x07, 0x98, 0x95, 0xca, 0x25, 0x4b, 0xb5, 0x40, 0xbf, 0x32, 0x87, 0xac, 0xaf, 0xee, 0x20, + 0x31, 0xd7, 0xea, 0x0a, 0xc3, 0x72, 0x81, 0xe1, 0x4b, 0x2f, 0xee, 0x62, 0x5e, 0x45, 0x62, 0x07, + 0xfe, 0x00, 0x28, 0x09, 0x14, 0x17, 0xfd, 0x5b, 0xa4, 0xa3, 0x9f, 0xab, 0x50, 0xea, 0xce, 0x56, + 0x74, 0xab, 0xd3, 0x3e, 0x45, 0x4d, 0x28, 0xcc, 0x76, 0x25, 0xd2, 0x49, 0x7a, 0x07, 0x1b, 0x88, + 0x2c, 0xac, 0x52, 0xac, 0xa1, 0x37, 0xb0, 0x91, 0xdc, 0x46, 0xa8, 0x42, 0x32, 0x96, 0xa8, 0x51, + 0x25, 0x59, 0x2b, 0x0b, 0x6b, 0xe8, 0x2d, 0x6c, 0xce, 0x2d, 0x13, 0x54, 0x25, 0x59, 0xeb, 0xca, + 0xa8, 0x91, 0xcc, 0x9d, 0x83, 0x35, 0x74, 0x0a, 0xa5, 0x79, 0xb5, 0xa3, 0x1a, 0xc9, 0xdc, 0x24, + 0xc6, 0x36, 0xc9, 0x5e, 0x0b, 0x01, 0xc8, 0xbc, 0x54, 0x51, 0x8d, 0x64, 0x6e, 0x03, 0x63, 0x9b, + 0x64, 0x6b, 0x1a, 0x6b, 0xe8, 0x1c, 0xf4, 0x05, 0x09, 0xa1, 0x1d, 0xb2, 0x4c, 0xd8, 0x86, 0x41, + 0x96, 0x2a, 0x0e, 0x6b, 0xe8, 0x05, 0x6c, 0x74, 0xa9, 0x9c, 0x49, 0x00, 0xe9, 0x24, 0x2d, 0x39, + 0x03, 0x91, 0x05, 0x85, 0x60, 0x0d, 0x35, 0xa1, 0xd8, 0xa5, 0x32, 0x9a, 0x6d, 0x54, 0x26, 0x29, + 0x85, 0x18, 0x3a, 0x49, 0x0f, 0x3e, 0xd6, 0xd0, 0x01, 0x14, 0x5b, 0x89, 0x53, 0x45, 0x12, 0x0f, + 0xbe, 0x51, 0x22, 0xe9, 0xec, 0xd7, 0xb0, 0xd9, 0xa2, 0x32, 0x9e, 0x45, 0x84, 0xc8, 0xc2, 0x84, + 0x1b, 0x5b, 0x64, 0x71, 0x58, 0xb1, 0x76, 0xd2, 0xfc, 0x72, 0x64, 0x33, 0x49, 0x2c, 0xce, 0x5d, + 0x9b, 0x13, 0xc6, 0x1b, 0xc1, 0xdb, 0xa1, 0xe9, 0xba, 0xa2, 0x11, 0xff, 0x36, 0x34, 0x6c, 0xcf, + 0xb5, 0x4c, 0x97, 0x85, 0x3f, 0x0a, 0xff, 0xa8, 0xc7, 0xf3, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, + 0x2c, 0x6e, 0x3e, 0x6e, 0x59, 0x08, 0x00, 0x00, +} diff --git a/servers/grpcapi/proto/silvermobi-service.pb.go b/servers/grpcapi/proto/silvermobi-service.pb.go new file mode 100644 index 0000000..842c5fd --- /dev/null +++ b/servers/grpcapi/proto/silvermobi-service.pb.go @@ -0,0 +1,1543 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.30.0 +// protoc v3.12.4 +// source: silvermobi-service.proto + +package proto + +import ( + timestamp "github.com/golang/protobuf/ptypes/timestamp" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type AuthLoginRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` +} + +func (x *AuthLoginRequest) Reset() { + *x = AuthLoginRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthLoginRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthLoginRequest) ProtoMessage() {} + +func (x *AuthLoginRequest) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthLoginRequest.ProtoReflect.Descriptor instead. +func (*AuthLoginRequest) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{0} +} + +func (x *AuthLoginRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *AuthLoginRequest) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +type AuthLoginResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` +} + +func (x *AuthLoginResponse) Reset() { + *x = AuthLoginResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthLoginResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthLoginResponse) ProtoMessage() {} + +func (x *AuthLoginResponse) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthLoginResponse.ProtoReflect.Descriptor instead. +func (*AuthLoginResponse) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{1} +} + +func (x *AuthLoginResponse) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +type AuthRegisterRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` + FirstName string `protobuf:"bytes,3,opt,name=first_name,json=firstName,proto3" json:"first_name,omitempty"` + LastName string `protobuf:"bytes,4,opt,name=last_name,json=lastName,proto3" json:"last_name,omitempty"` + PhoneNumber string `protobuf:"bytes,5,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` +} + +func (x *AuthRegisterRequest) Reset() { + *x = AuthRegisterRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthRegisterRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthRegisterRequest) ProtoMessage() {} + +func (x *AuthRegisterRequest) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthRegisterRequest.ProtoReflect.Descriptor instead. +func (*AuthRegisterRequest) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{2} +} + +func (x *AuthRegisterRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *AuthRegisterRequest) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +func (x *AuthRegisterRequest) GetFirstName() string { + if x != nil { + return x.FirstName + } + return "" +} + +func (x *AuthRegisterRequest) GetLastName() string { + if x != nil { + return x.LastName + } + return "" +} + +func (x *AuthRegisterRequest) GetPhoneNumber() string { + if x != nil { + return x.PhoneNumber + } + return "" +} + +type AuthRegisterResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` +} + +func (x *AuthRegisterResponse) Reset() { + *x = AuthRegisterResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthRegisterResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthRegisterResponse) ProtoMessage() {} + +func (x *AuthRegisterResponse) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthRegisterResponse.ProtoReflect.Descriptor instead. +func (*AuthRegisterResponse) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{3} +} + +func (x *AuthRegisterResponse) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +type ForgetAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` +} + +func (x *ForgetAccountRequest) Reset() { + *x = ForgetAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ForgetAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ForgetAccountRequest) ProtoMessage() {} + +func (x *ForgetAccountRequest) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ForgetAccountRequest.ProtoReflect.Descriptor instead. +func (*ForgetAccountRequest) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{4} +} + +func (x *ForgetAccountRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *ForgetAccountRequest) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +type ForgetAccountResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Response bool `protobuf:"varint,1,opt,name=response,proto3" json:"response,omitempty"` + AccessCode string `protobuf:"bytes,2,opt,name=access_code,json=accessCode,proto3" json:"access_code,omitempty"` +} + +func (x *ForgetAccountResponse) Reset() { + *x = ForgetAccountResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ForgetAccountResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ForgetAccountResponse) ProtoMessage() {} + +func (x *ForgetAccountResponse) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ForgetAccountResponse.ProtoReflect.Descriptor instead. +func (*ForgetAccountResponse) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{5} +} + +func (x *ForgetAccountResponse) GetResponse() bool { + if x != nil { + return x.Response + } + return false +} + +func (x *ForgetAccountResponse) GetAccessCode() string { + if x != nil { + return x.AccessCode + } + return "" +} + +type UpdatePasswordRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` +} + +func (x *UpdatePasswordRequest) Reset() { + *x = UpdatePasswordRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdatePasswordRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdatePasswordRequest) ProtoMessage() {} + +func (x *UpdatePasswordRequest) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdatePasswordRequest.ProtoReflect.Descriptor instead. +func (*UpdatePasswordRequest) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{6} +} + +func (x *UpdatePasswordRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *UpdatePasswordRequest) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +type UpdatePasswordResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Response bool `protobuf:"varint,1,opt,name=response,proto3" json:"response,omitempty"` +} + +func (x *UpdatePasswordResponse) Reset() { + *x = UpdatePasswordResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdatePasswordResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdatePasswordResponse) ProtoMessage() {} + +func (x *UpdatePasswordResponse) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdatePasswordResponse.ProtoReflect.Descriptor instead. +func (*UpdatePasswordResponse) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{7} +} + +func (x *UpdatePasswordResponse) GetResponse() bool { + if x != nil { + return x.Response + } + return false +} + +type SetPhoneNumberRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PhoneNumber string `protobuf:"bytes,1,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` +} + +func (x *SetPhoneNumberRequest) Reset() { + *x = SetPhoneNumberRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetPhoneNumberRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetPhoneNumberRequest) ProtoMessage() {} + +func (x *SetPhoneNumberRequest) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetPhoneNumberRequest.ProtoReflect.Descriptor instead. +func (*SetPhoneNumberRequest) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{8} +} + +func (x *SetPhoneNumberRequest) GetPhoneNumber() string { + if x != nil { + return x.PhoneNumber + } + return "" +} + +func (x *SetPhoneNumberRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +type SetPhoneNumberResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` +} + +func (x *SetPhoneNumberResponse) Reset() { + *x = SetPhoneNumberResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetPhoneNumberResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetPhoneNumberResponse) ProtoMessage() {} + +func (x *SetPhoneNumberResponse) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetPhoneNumberResponse.ProtoReflect.Descriptor instead. +func (*SetPhoneNumberResponse) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{9} +} + +func (x *SetPhoneNumberResponse) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +type VerifyPhoneNumberRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PhoneNumber string `protobuf:"bytes,1,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` + VerificationCode string `protobuf:"bytes,2,opt,name=verification_code,json=verificationCode,proto3" json:"verification_code,omitempty"` + Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` +} + +func (x *VerifyPhoneNumberRequest) Reset() { + *x = VerifyPhoneNumberRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VerifyPhoneNumberRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyPhoneNumberRequest) ProtoMessage() {} + +func (x *VerifyPhoneNumberRequest) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyPhoneNumberRequest.ProtoReflect.Descriptor instead. +func (*VerifyPhoneNumberRequest) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{10} +} + +func (x *VerifyPhoneNumberRequest) GetPhoneNumber() string { + if x != nil { + return x.PhoneNumber + } + return "" +} + +func (x *VerifyPhoneNumberRequest) GetVerificationCode() string { + if x != nil { + return x.VerificationCode + } + return "" +} + +func (x *VerifyPhoneNumberRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +type VerifyPhoneNumberResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` +} + +func (x *VerifyPhoneNumberResponse) Reset() { + *x = VerifyPhoneNumberResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VerifyPhoneNumberResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyPhoneNumberResponse) ProtoMessage() {} + +func (x *VerifyPhoneNumberResponse) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyPhoneNumberResponse.ProtoReflect.Descriptor instead. +func (*VerifyPhoneNumberResponse) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{11} +} + +func (x *VerifyPhoneNumberResponse) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +type BirthDateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Birthdate *timestamp.Timestamp `protobuf:"bytes,1,opt,name=birthdate,proto3" json:"birthdate,omitempty"` + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` +} + +func (x *BirthDateRequest) Reset() { + *x = BirthDateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BirthDateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BirthDateRequest) ProtoMessage() {} + +func (x *BirthDateRequest) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BirthDateRequest.ProtoReflect.Descriptor instead. +func (*BirthDateRequest) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{12} +} + +func (x *BirthDateRequest) GetBirthdate() *timestamp.Timestamp { + if x != nil { + return x.Birthdate + } + return nil +} + +func (x *BirthDateRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +type BirthDateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` +} + +func (x *BirthDateResponse) Reset() { + *x = BirthDateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BirthDateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BirthDateResponse) ProtoMessage() {} + +func (x *BirthDateResponse) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BirthDateResponse.ProtoReflect.Descriptor instead. +func (*BirthDateResponse) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{13} +} + +func (x *BirthDateResponse) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +type KeyValueRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *KeyValueRequest) Reset() { + *x = KeyValueRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KeyValueRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeyValueRequest) ProtoMessage() {} + +func (x *KeyValueRequest) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KeyValueRequest.ProtoReflect.Descriptor instead. +func (*KeyValueRequest) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{14} +} + +func (x *KeyValueRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *KeyValueRequest) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +type KeyValueResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` +} + +func (x *KeyValueResponse) Reset() { + *x = KeyValueResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KeyValueResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeyValueResponse) ProtoMessage() {} + +func (x *KeyValueResponse) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KeyValueResponse.ProtoReflect.Descriptor instead. +func (*KeyValueResponse) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{15} +} + +func (x *KeyValueResponse) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +type KeyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` +} + +func (x *KeyRequest) Reset() { + *x = KeyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KeyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeyRequest) ProtoMessage() {} + +func (x *KeyRequest) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KeyRequest.ProtoReflect.Descriptor instead. +func (*KeyRequest) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{16} +} + +func (x *KeyRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +type ValueResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *ValueResponse) Reset() { + *x = ValueResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValueResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueResponse) ProtoMessage() {} + +func (x *ValueResponse) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueResponse.ProtoReflect.Descriptor instead. +func (*ValueResponse) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{17} +} + +func (x *ValueResponse) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +type ValidationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` +} + +func (x *ValidationRequest) Reset() { + *x = ValidationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidationRequest) ProtoMessage() {} + +func (x *ValidationRequest) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidationRequest.ProtoReflect.Descriptor instead. +func (*ValidationRequest) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{18} +} + +func (x *ValidationRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +type ValidationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Phone bool `protobuf:"varint,1,opt,name=phone,proto3" json:"phone,omitempty"` + Birthdate bool `protobuf:"varint,2,opt,name=birthdate,proto3" json:"birthdate,omitempty"` +} + +func (x *ValidationResponse) Reset() { + *x = ValidationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_silvermobi_service_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidationResponse) ProtoMessage() {} + +func (x *ValidationResponse) ProtoReflect() protoreflect.Message { + mi := &file_silvermobi_service_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidationResponse.ProtoReflect.Descriptor instead. +func (*ValidationResponse) Descriptor() ([]byte, []int) { + return file_silvermobi_service_proto_rawDescGZIP(), []int{19} +} + +func (x *ValidationResponse) GetPhone() bool { + if x != nil { + return x.Phone + } + return false +} + +func (x *ValidationResponse) GetBirthdate() bool { + if x != nil { + return x.Birthdate + } + return false +} + +var File_silvermobi_service_proto protoreflect.FileDescriptor + +var file_silvermobi_service_proto_rawDesc = []byte{ + 0x0a, 0x18, 0x73, 0x69, 0x6c, 0x76, 0x65, 0x72, 0x6d, 0x6f, 0x62, 0x69, 0x2d, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4a, 0x0a, 0x10, 0x41, + 0x75, 0x74, 0x68, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x29, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x22, 0xa6, 0x01, 0x0a, 0x13, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, + 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1d, 0x0a, 0x0a, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e, + 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x14, 0x41, + 0x75, 0x74, 0x68, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x50, 0x0a, 0x14, 0x46, 0x6f, 0x72, + 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x54, 0x0a, 0x15, 0x46, + 0x6f, 0x72, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x64, + 0x65, 0x22, 0x49, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, + 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x34, 0x0a, 0x16, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x50, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, + 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x28, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x50, 0x68, 0x6f, 0x6e, 0x65, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x80, + 0x01, 0x0a, 0x18, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, + 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2b, + 0x0a, 0x11, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, + 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x22, 0x2b, 0x0a, 0x19, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x50, 0x68, 0x6f, 0x6e, 0x65, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x62, + 0x0a, 0x10, 0x42, 0x69, 0x72, 0x74, 0x68, 0x44, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x74, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x22, 0x23, 0x0a, 0x11, 0x42, 0x69, 0x72, 0x74, 0x68, 0x44, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x39, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x22, 0x0a, 0x10, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1e, 0x0a, 0x0a, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x25, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x29, 0x0a, + 0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x48, 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x70, + 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x74, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, + 0x74, 0x65, 0x32, 0xf8, 0x04, 0x0a, 0x0e, 0x53, 0x69, 0x6c, 0x76, 0x65, 0x72, 0x6d, 0x6f, 0x62, + 0x69, 0x47, 0x52, 0x50, 0x43, 0x12, 0x34, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x68, 0x4c, 0x6f, 0x67, + 0x69, 0x6e, 0x12, 0x11, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4c, 0x6f, 0x67, 0x69, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0c, 0x41, + 0x75, 0x74, 0x68, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x14, 0x2e, 0x41, 0x75, + 0x74, 0x68, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x15, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0d, 0x46, 0x6f, + 0x72, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x15, 0x2e, 0x46, 0x6f, + 0x72, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x46, 0x6f, 0x72, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x16, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x43, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x16, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x53, 0x65, + 0x74, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, + 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x19, 0x2e, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x50, + 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x42, 0x69, 0x72, 0x74, 0x68, + 0x44, 0x61, 0x74, 0x65, 0x12, 0x11, 0x2e, 0x42, 0x69, 0x72, 0x74, 0x68, 0x44, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x42, 0x69, 0x72, 0x74, 0x68, 0x44, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x34, 0x0a, + 0x0b, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x2e, 0x4b, + 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, + 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x0b, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x3a, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x12, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x34, 0x5a, + 0x32, 0x67, 0x69, 0x74, 0x2e, 0x63, 0x6f, 0x6f, 0x70, 0x67, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x63, + 0x6f, 0x6f, 0x70, 0x67, 0x6f, 0x2d, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x73, 0x69, 0x6c, 0x76, 0x65, + 0x72, 0x6d, 0x6f, 0x62, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_silvermobi_service_proto_rawDescOnce sync.Once + file_silvermobi_service_proto_rawDescData = file_silvermobi_service_proto_rawDesc +) + +func file_silvermobi_service_proto_rawDescGZIP() []byte { + file_silvermobi_service_proto_rawDescOnce.Do(func() { + file_silvermobi_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_silvermobi_service_proto_rawDescData) + }) + return file_silvermobi_service_proto_rawDescData +} + +var file_silvermobi_service_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_silvermobi_service_proto_goTypes = []interface{}{ + (*AuthLoginRequest)(nil), // 0: AuthLoginRequest + (*AuthLoginResponse)(nil), // 1: AuthLoginResponse + (*AuthRegisterRequest)(nil), // 2: AuthRegisterRequest + (*AuthRegisterResponse)(nil), // 3: AuthRegisterResponse + (*ForgetAccountRequest)(nil), // 4: ForgetAccountRequest + (*ForgetAccountResponse)(nil), // 5: ForgetAccountResponse + (*UpdatePasswordRequest)(nil), // 6: UpdatePasswordRequest + (*UpdatePasswordResponse)(nil), // 7: UpdatePasswordResponse + (*SetPhoneNumberRequest)(nil), // 8: SetPhoneNumberRequest + (*SetPhoneNumberResponse)(nil), // 9: SetPhoneNumberResponse + (*VerifyPhoneNumberRequest)(nil), // 10: VerifyPhoneNumberRequest + (*VerifyPhoneNumberResponse)(nil), // 11: VerifyPhoneNumberResponse + (*BirthDateRequest)(nil), // 12: BirthDateRequest + (*BirthDateResponse)(nil), // 13: BirthDateResponse + (*KeyValueRequest)(nil), // 14: KeyValueRequest + (*KeyValueResponse)(nil), // 15: KeyValueResponse + (*KeyRequest)(nil), // 16: KeyRequest + (*ValueResponse)(nil), // 17: ValueResponse + (*ValidationRequest)(nil), // 18: ValidationRequest + (*ValidationResponse)(nil), // 19: ValidationResponse + (*timestamp.Timestamp)(nil), // 20: google.protobuf.Timestamp +} +var file_silvermobi_service_proto_depIdxs = []int32{ + 20, // 0: BirthDateRequest.birthdate:type_name -> google.protobuf.Timestamp + 0, // 1: SilvermobiGRPC.AuthLogin:input_type -> AuthLoginRequest + 2, // 2: SilvermobiGRPC.AuthRegister:input_type -> AuthRegisterRequest + 4, // 3: SilvermobiGRPC.ForgetAccount:input_type -> ForgetAccountRequest + 6, // 4: SilvermobiGRPC.UpdatePassword:input_type -> UpdatePasswordRequest + 8, // 5: SilvermobiGRPC.SetPhoneNumber:input_type -> SetPhoneNumberRequest + 10, // 6: SilvermobiGRPC.VerifyPhoneNumber:input_type -> VerifyPhoneNumberRequest + 12, // 7: SilvermobiGRPC.SetBirthDate:input_type -> BirthDateRequest + 14, // 8: SilvermobiGRPC.SetKeyValue:input_type -> KeyValueRequest + 16, // 9: SilvermobiGRPC.GetKeyValue:input_type -> KeyRequest + 18, // 10: SilvermobiGRPC.GetValidation:input_type -> ValidationRequest + 1, // 11: SilvermobiGRPC.AuthLogin:output_type -> AuthLoginResponse + 3, // 12: SilvermobiGRPC.AuthRegister:output_type -> AuthRegisterResponse + 5, // 13: SilvermobiGRPC.ForgetAccount:output_type -> ForgetAccountResponse + 7, // 14: SilvermobiGRPC.UpdatePassword:output_type -> UpdatePasswordResponse + 9, // 15: SilvermobiGRPC.SetPhoneNumber:output_type -> SetPhoneNumberResponse + 11, // 16: SilvermobiGRPC.VerifyPhoneNumber:output_type -> VerifyPhoneNumberResponse + 13, // 17: SilvermobiGRPC.SetBirthDate:output_type -> BirthDateResponse + 15, // 18: SilvermobiGRPC.SetKeyValue:output_type -> KeyValueResponse + 17, // 19: SilvermobiGRPC.GetKeyValue:output_type -> ValueResponse + 19, // 20: SilvermobiGRPC.GetValidation:output_type -> ValidationResponse + 11, // [11:21] is the sub-list for method output_type + 1, // [1:11] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_silvermobi_service_proto_init() } +func file_silvermobi_service_proto_init() { + if File_silvermobi_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_silvermobi_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthLoginRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthLoginResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthRegisterRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthRegisterResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ForgetAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ForgetAccountResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdatePasswordRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdatePasswordResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetPhoneNumberRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetPhoneNumberResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifyPhoneNumberRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifyPhoneNumberResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BirthDateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BirthDateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KeyValueRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KeyValueResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KeyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValueResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_silvermobi_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidationResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_silvermobi_service_proto_rawDesc, + NumEnums: 0, + NumMessages: 20, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_silvermobi_service_proto_goTypes, + DependencyIndexes: file_silvermobi_service_proto_depIdxs, + MessageInfos: file_silvermobi_service_proto_msgTypes, + }.Build() + File_silvermobi_service_proto = out.File + file_silvermobi_service_proto_rawDesc = nil + file_silvermobi_service_proto_goTypes = nil + file_silvermobi_service_proto_depIdxs = nil +} diff --git a/servers/grpcapi/proto/silvermobi-service.proto b/servers/grpcapi/proto/silvermobi-service.proto new file mode 100644 index 0000000..4bde8b0 --- /dev/null +++ b/servers/grpcapi/proto/silvermobi-service.proto @@ -0,0 +1,115 @@ +syntax = "proto3"; +import "google/protobuf/timestamp.proto"; +option go_package = "git.coopgo.io/coopgo-apps/silvermobi/grpcapi/proto"; + +service SilvermobiGRPC { + // User authentication functions + rpc AuthLogin(AuthLoginRequest) returns (AuthLoginResponse) {} + rpc AuthRegister(AuthRegisterRequest) returns (AuthRegisterResponse) {} + // User forget password + rpc ForgetAccount(ForgetAccountRequest) returns (ForgetAccountResponse) {} + rpc UpdatePassword(UpdatePasswordRequest) returns (UpdatePasswordResponse) {} + // phone_number + rpc SetPhoneNumber(SetPhoneNumberRequest) returns (SetPhoneNumberResponse) {} + rpc VerifyPhoneNumber(VerifyPhoneNumberRequest) returns (VerifyPhoneNumberResponse) {} + rpc SetBirthDate(BirthDateRequest) returns (BirthDateResponse) {} + // redis + rpc SetKeyValue(KeyValueRequest) returns (KeyValueResponse) {} + rpc GetKeyValue(KeyRequest) returns (ValueResponse) {} + rpc GetValidation(ValidationRequest) returns (ValidationResponse) {} + + +} + +message AuthLoginRequest { + string username = 1; + string password = 2; +} + +message AuthLoginResponse { + string token = 1; +} + +message AuthRegisterRequest { + string email = 1; + string password = 2; + string first_name = 3; + string last_name = 4; + string phone_number = 5; +} + +message AuthRegisterResponse { + string token = 1; +} + +message ForgetAccountRequest{ + string username = 1 ; + string namespace = 2 ; +} + +message ForgetAccountResponse{ + bool response = 1 ; + string access_code = 2 ; +} + +message UpdatePasswordRequest{ + string email = 1 ; + string password = 2; +} + +message UpdatePasswordResponse{ + bool response =1 ; +} + +message SetPhoneNumberRequest { + string phone_number = 1; + string email = 2; +} + +message SetPhoneNumberResponse { + bool ok = 1; +} + +message VerifyPhoneNumberRequest { + string phone_number = 1; + string verification_code = 2; + string email = 3; +} + +message VerifyPhoneNumberResponse { + bool ok = 1; +} + +message BirthDateRequest { + google.protobuf.Timestamp birthdate = 1 ; + string email = 2; +} + +message BirthDateResponse { + bool ok = 1; +} + +message KeyValueRequest { + string key = 1; + string value=2; +} +message KeyValueResponse { + bool ok = 1; +} + +message KeyRequest { + string key = 1; +} + +message ValueResponse{ + string value =1 ; +} + +message ValidationRequest { + string email =1 ; +} + +message ValidationResponse { + bool phone = 1 ; + bool birthdate = 2; +} \ No newline at end of file diff --git a/servers/grpcapi/proto/silvermobi-service_grpc.pb.go b/servers/grpcapi/proto/silvermobi-service_grpc.pb.go new file mode 100644 index 0000000..44c6d3c --- /dev/null +++ b/servers/grpcapi/proto/silvermobi-service_grpc.pb.go @@ -0,0 +1,450 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.12.4 +// source: silvermobi-service.proto + +package proto + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + SilvermobiGRPC_AuthLogin_FullMethodName = "/SilvermobiGRPC/AuthLogin" + SilvermobiGRPC_AuthRegister_FullMethodName = "/SilvermobiGRPC/AuthRegister" + SilvermobiGRPC_ForgetAccount_FullMethodName = "/SilvermobiGRPC/ForgetAccount" + SilvermobiGRPC_UpdatePassword_FullMethodName = "/SilvermobiGRPC/UpdatePassword" + SilvermobiGRPC_SetPhoneNumber_FullMethodName = "/SilvermobiGRPC/SetPhoneNumber" + SilvermobiGRPC_VerifyPhoneNumber_FullMethodName = "/SilvermobiGRPC/VerifyPhoneNumber" + SilvermobiGRPC_SetBirthDate_FullMethodName = "/SilvermobiGRPC/SetBirthDate" + SilvermobiGRPC_SetKeyValue_FullMethodName = "/SilvermobiGRPC/SetKeyValue" + SilvermobiGRPC_GetKeyValue_FullMethodName = "/SilvermobiGRPC/GetKeyValue" + SilvermobiGRPC_GetValidation_FullMethodName = "/SilvermobiGRPC/GetValidation" +) + +// SilvermobiGRPCClient is the client API for SilvermobiGRPC service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SilvermobiGRPCClient interface { + // User authentication functions + AuthLogin(ctx context.Context, in *AuthLoginRequest, opts ...grpc.CallOption) (*AuthLoginResponse, error) + AuthRegister(ctx context.Context, in *AuthRegisterRequest, opts ...grpc.CallOption) (*AuthRegisterResponse, error) + // User forget password + ForgetAccount(ctx context.Context, in *ForgetAccountRequest, opts ...grpc.CallOption) (*ForgetAccountResponse, error) + UpdatePassword(ctx context.Context, in *UpdatePasswordRequest, opts ...grpc.CallOption) (*UpdatePasswordResponse, error) + // phone_number + SetPhoneNumber(ctx context.Context, in *SetPhoneNumberRequest, opts ...grpc.CallOption) (*SetPhoneNumberResponse, error) + VerifyPhoneNumber(ctx context.Context, in *VerifyPhoneNumberRequest, opts ...grpc.CallOption) (*VerifyPhoneNumberResponse, error) + SetBirthDate(ctx context.Context, in *BirthDateRequest, opts ...grpc.CallOption) (*BirthDateResponse, error) + // redis + SetKeyValue(ctx context.Context, in *KeyValueRequest, opts ...grpc.CallOption) (*KeyValueResponse, error) + GetKeyValue(ctx context.Context, in *KeyRequest, opts ...grpc.CallOption) (*ValueResponse, error) + GetValidation(ctx context.Context, in *ValidationRequest, opts ...grpc.CallOption) (*ValidationResponse, error) +} + +type silvermobiGRPCClient struct { + cc grpc.ClientConnInterface +} + +func NewSilvermobiGRPCClient(cc grpc.ClientConnInterface) SilvermobiGRPCClient { + return &silvermobiGRPCClient{cc} +} + +func (c *silvermobiGRPCClient) AuthLogin(ctx context.Context, in *AuthLoginRequest, opts ...grpc.CallOption) (*AuthLoginResponse, error) { + out := new(AuthLoginResponse) + err := c.cc.Invoke(ctx, SilvermobiGRPC_AuthLogin_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *silvermobiGRPCClient) AuthRegister(ctx context.Context, in *AuthRegisterRequest, opts ...grpc.CallOption) (*AuthRegisterResponse, error) { + out := new(AuthRegisterResponse) + err := c.cc.Invoke(ctx, SilvermobiGRPC_AuthRegister_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *silvermobiGRPCClient) ForgetAccount(ctx context.Context, in *ForgetAccountRequest, opts ...grpc.CallOption) (*ForgetAccountResponse, error) { + out := new(ForgetAccountResponse) + err := c.cc.Invoke(ctx, SilvermobiGRPC_ForgetAccount_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *silvermobiGRPCClient) UpdatePassword(ctx context.Context, in *UpdatePasswordRequest, opts ...grpc.CallOption) (*UpdatePasswordResponse, error) { + out := new(UpdatePasswordResponse) + err := c.cc.Invoke(ctx, SilvermobiGRPC_UpdatePassword_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *silvermobiGRPCClient) SetPhoneNumber(ctx context.Context, in *SetPhoneNumberRequest, opts ...grpc.CallOption) (*SetPhoneNumberResponse, error) { + out := new(SetPhoneNumberResponse) + err := c.cc.Invoke(ctx, SilvermobiGRPC_SetPhoneNumber_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *silvermobiGRPCClient) VerifyPhoneNumber(ctx context.Context, in *VerifyPhoneNumberRequest, opts ...grpc.CallOption) (*VerifyPhoneNumberResponse, error) { + out := new(VerifyPhoneNumberResponse) + err := c.cc.Invoke(ctx, SilvermobiGRPC_VerifyPhoneNumber_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *silvermobiGRPCClient) SetBirthDate(ctx context.Context, in *BirthDateRequest, opts ...grpc.CallOption) (*BirthDateResponse, error) { + out := new(BirthDateResponse) + err := c.cc.Invoke(ctx, SilvermobiGRPC_SetBirthDate_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *silvermobiGRPCClient) SetKeyValue(ctx context.Context, in *KeyValueRequest, opts ...grpc.CallOption) (*KeyValueResponse, error) { + out := new(KeyValueResponse) + err := c.cc.Invoke(ctx, SilvermobiGRPC_SetKeyValue_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *silvermobiGRPCClient) GetKeyValue(ctx context.Context, in *KeyRequest, opts ...grpc.CallOption) (*ValueResponse, error) { + out := new(ValueResponse) + err := c.cc.Invoke(ctx, SilvermobiGRPC_GetKeyValue_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *silvermobiGRPCClient) GetValidation(ctx context.Context, in *ValidationRequest, opts ...grpc.CallOption) (*ValidationResponse, error) { + out := new(ValidationResponse) + err := c.cc.Invoke(ctx, SilvermobiGRPC_GetValidation_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SilvermobiGRPCServer is the server API for SilvermobiGRPC service. +// All implementations must embed UnimplementedSilvermobiGRPCServer +// for forward compatibility +type SilvermobiGRPCServer interface { + // User authentication functions + AuthLogin(context.Context, *AuthLoginRequest) (*AuthLoginResponse, error) + AuthRegister(context.Context, *AuthRegisterRequest) (*AuthRegisterResponse, error) + // User forget password + ForgetAccount(context.Context, *ForgetAccountRequest) (*ForgetAccountResponse, error) + UpdatePassword(context.Context, *UpdatePasswordRequest) (*UpdatePasswordResponse, error) + // phone_number + SetPhoneNumber(context.Context, *SetPhoneNumberRequest) (*SetPhoneNumberResponse, error) + VerifyPhoneNumber(context.Context, *VerifyPhoneNumberRequest) (*VerifyPhoneNumberResponse, error) + SetBirthDate(context.Context, *BirthDateRequest) (*BirthDateResponse, error) + // redis + SetKeyValue(context.Context, *KeyValueRequest) (*KeyValueResponse, error) + GetKeyValue(context.Context, *KeyRequest) (*ValueResponse, error) + GetValidation(context.Context, *ValidationRequest) (*ValidationResponse, error) + mustEmbedUnimplementedSilvermobiGRPCServer() +} + +// UnimplementedSilvermobiGRPCServer must be embedded to have forward compatible implementations. +type UnimplementedSilvermobiGRPCServer struct { +} + +func (UnimplementedSilvermobiGRPCServer) AuthLogin(context.Context, *AuthLoginRequest) (*AuthLoginResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AuthLogin not implemented") +} +func (UnimplementedSilvermobiGRPCServer) AuthRegister(context.Context, *AuthRegisterRequest) (*AuthRegisterResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AuthRegister not implemented") +} +func (UnimplementedSilvermobiGRPCServer) ForgetAccount(context.Context, *ForgetAccountRequest) (*ForgetAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ForgetAccount not implemented") +} +func (UnimplementedSilvermobiGRPCServer) UpdatePassword(context.Context, *UpdatePasswordRequest) (*UpdatePasswordResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdatePassword not implemented") +} +func (UnimplementedSilvermobiGRPCServer) SetPhoneNumber(context.Context, *SetPhoneNumberRequest) (*SetPhoneNumberResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetPhoneNumber not implemented") +} +func (UnimplementedSilvermobiGRPCServer) VerifyPhoneNumber(context.Context, *VerifyPhoneNumberRequest) (*VerifyPhoneNumberResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method VerifyPhoneNumber not implemented") +} +func (UnimplementedSilvermobiGRPCServer) SetBirthDate(context.Context, *BirthDateRequest) (*BirthDateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetBirthDate not implemented") +} +func (UnimplementedSilvermobiGRPCServer) SetKeyValue(context.Context, *KeyValueRequest) (*KeyValueResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetKeyValue not implemented") +} +func (UnimplementedSilvermobiGRPCServer) GetKeyValue(context.Context, *KeyRequest) (*ValueResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetKeyValue not implemented") +} +func (UnimplementedSilvermobiGRPCServer) GetValidation(context.Context, *ValidationRequest) (*ValidationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetValidation not implemented") +} +func (UnimplementedSilvermobiGRPCServer) mustEmbedUnimplementedSilvermobiGRPCServer() {} + +// UnsafeSilvermobiGRPCServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SilvermobiGRPCServer will +// result in compilation errors. +type UnsafeSilvermobiGRPCServer interface { + mustEmbedUnimplementedSilvermobiGRPCServer() +} + +func RegisterSilvermobiGRPCServer(s grpc.ServiceRegistrar, srv SilvermobiGRPCServer) { + s.RegisterService(&SilvermobiGRPC_ServiceDesc, srv) +} + +func _SilvermobiGRPC_AuthLogin_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthLoginRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SilvermobiGRPCServer).AuthLogin(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SilvermobiGRPC_AuthLogin_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SilvermobiGRPCServer).AuthLogin(ctx, req.(*AuthLoginRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SilvermobiGRPC_AuthRegister_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthRegisterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SilvermobiGRPCServer).AuthRegister(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SilvermobiGRPC_AuthRegister_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SilvermobiGRPCServer).AuthRegister(ctx, req.(*AuthRegisterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SilvermobiGRPC_ForgetAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ForgetAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SilvermobiGRPCServer).ForgetAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SilvermobiGRPC_ForgetAccount_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SilvermobiGRPCServer).ForgetAccount(ctx, req.(*ForgetAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SilvermobiGRPC_UpdatePassword_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdatePasswordRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SilvermobiGRPCServer).UpdatePassword(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SilvermobiGRPC_UpdatePassword_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SilvermobiGRPCServer).UpdatePassword(ctx, req.(*UpdatePasswordRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SilvermobiGRPC_SetPhoneNumber_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetPhoneNumberRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SilvermobiGRPCServer).SetPhoneNumber(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SilvermobiGRPC_SetPhoneNumber_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SilvermobiGRPCServer).SetPhoneNumber(ctx, req.(*SetPhoneNumberRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SilvermobiGRPC_VerifyPhoneNumber_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VerifyPhoneNumberRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SilvermobiGRPCServer).VerifyPhoneNumber(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SilvermobiGRPC_VerifyPhoneNumber_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SilvermobiGRPCServer).VerifyPhoneNumber(ctx, req.(*VerifyPhoneNumberRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SilvermobiGRPC_SetBirthDate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BirthDateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SilvermobiGRPCServer).SetBirthDate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SilvermobiGRPC_SetBirthDate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SilvermobiGRPCServer).SetBirthDate(ctx, req.(*BirthDateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SilvermobiGRPC_SetKeyValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(KeyValueRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SilvermobiGRPCServer).SetKeyValue(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SilvermobiGRPC_SetKeyValue_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SilvermobiGRPCServer).SetKeyValue(ctx, req.(*KeyValueRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SilvermobiGRPC_GetKeyValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(KeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SilvermobiGRPCServer).GetKeyValue(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SilvermobiGRPC_GetKeyValue_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SilvermobiGRPCServer).GetKeyValue(ctx, req.(*KeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SilvermobiGRPC_GetValidation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ValidationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SilvermobiGRPCServer).GetValidation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SilvermobiGRPC_GetValidation_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SilvermobiGRPCServer).GetValidation(ctx, req.(*ValidationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// SilvermobiGRPC_ServiceDesc is the grpc.ServiceDesc for SilvermobiGRPC service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var SilvermobiGRPC_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "SilvermobiGRPC", + HandlerType: (*SilvermobiGRPCServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "AuthLogin", + Handler: _SilvermobiGRPC_AuthLogin_Handler, + }, + { + MethodName: "AuthRegister", + Handler: _SilvermobiGRPC_AuthRegister_Handler, + }, + { + MethodName: "ForgetAccount", + Handler: _SilvermobiGRPC_ForgetAccount_Handler, + }, + { + MethodName: "UpdatePassword", + Handler: _SilvermobiGRPC_UpdatePassword_Handler, + }, + { + MethodName: "SetPhoneNumber", + Handler: _SilvermobiGRPC_SetPhoneNumber_Handler, + }, + { + MethodName: "VerifyPhoneNumber", + Handler: _SilvermobiGRPC_VerifyPhoneNumber_Handler, + }, + { + MethodName: "SetBirthDate", + Handler: _SilvermobiGRPC_SetBirthDate_Handler, + }, + { + MethodName: "SetKeyValue", + Handler: _SilvermobiGRPC_SetKeyValue_Handler, + }, + { + MethodName: "GetKeyValue", + Handler: _SilvermobiGRPC_GetKeyValue_Handler, + }, + { + MethodName: "GetValidation", + Handler: _SilvermobiGRPC_GetValidation_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "silvermobi-service.proto", +} diff --git a/servers/grpcapi/server/authentication.go b/servers/grpcapi/server/authentication.go new file mode 100644 index 0000000..ac6fdd6 --- /dev/null +++ b/servers/grpcapi/server/authentication.go @@ -0,0 +1,45 @@ +package grpcserver + +import ( + "context" + "errors" + + grpcproto "git.coopgo.io/coopgo-apps/silvermobi/servers/grpcapi/proto" + "github.com/rs/zerolog/log" +) + +func (s SilvermobiGRPCService) AuthLogin(ctx context.Context, req *grpcproto.AuthLoginRequest) (res *grpcproto.AuthLoginResponse, err error) { + log.Info(). + Str("username", req.Username). + Msg("AuthLogin") + + jwt, err := s.Handler.Login(ctx, req.Username, req.Password) + if err != nil { + log.Error(). + Err(err). + Str("username", req.Username). + Msg("user not found") + + return nil, errors.New("user/password not found") + } + + return &grpcproto.AuthLoginResponse{ + Token: jwt, + }, nil +} + +func (s SilvermobiGRPCService) AuthRegister(ctx context.Context, req *grpcproto.AuthRegisterRequest) (res *grpcproto.AuthRegisterResponse, err error) { + log.Info(). + Str("username", req.Email). + Msg("AuthRegister") + + jwt, err := s.Handler.Register(ctx, req.Email, req.Password, req.Email, req.PhoneNumber, req.FirstName, req.LastName) + if err != nil { + log.Error().Err(err).Msg("AuthRegister failed") + return nil, errors.New("could not register user") + } + + return &grpcproto.AuthRegisterResponse{ + Token: jwt, + }, nil +} diff --git a/servers/grpcapi/server/forget_password.go b/servers/grpcapi/server/forget_password.go new file mode 100644 index 0000000..346049d --- /dev/null +++ b/servers/grpcapi/server/forget_password.go @@ -0,0 +1,27 @@ +package grpcserver + +import ( + "context" + grpcproto "git.coopgo.io/coopgo-apps/silvermobi/servers/grpcapi/proto" + "github.com/rs/zerolog/log" +) + +func (s SilvermobiGRPCService) ForgetAccount(ctx context.Context, req *grpcproto.ForgetAccountRequest) (res *grpcproto.ForgetAccountResponse, err error) { + log.Info(). + Str("username", req.Username). + Str("namespace", req.Namespace). + Msg("ForgetAccount") + response, access_code := s.Handler.ForgetAccount(ctx, req.Username, req.Namespace) + if response == true { + return &grpcproto.ForgetAccountResponse{ + Response: true, + AccessCode: access_code, + }, nil + } else { + return &grpcproto.ForgetAccountResponse{ + Response: false, + AccessCode: "", + }, nil + } + +} diff --git a/servers/grpcapi/server/onboarding_validation.go b/servers/grpcapi/server/onboarding_validation.go new file mode 100644 index 0000000..58a77f5 --- /dev/null +++ b/servers/grpcapi/server/onboarding_validation.go @@ -0,0 +1,55 @@ +package grpcserver + +import ( + "context" + grpcproto "git.coopgo.io/coopgo-apps/silvermobi/servers/grpcapi/proto" + "time" +) + +func (s SilvermobiGRPCService) SetPhoneNumber(ctx context.Context, req *grpcproto.SetPhoneNumberRequest) (res *grpcproto.SetPhoneNumberResponse, err error) { + if err = s.Handler.UpdatePhoneNumber( + context.Background(), + req.Email, + req.PhoneNumber, + ); err != nil { + return nil, err + } + + return &grpcproto.SetPhoneNumberResponse{Ok: true}, nil +} + +func (s SilvermobiGRPCService) VerifyPhoneNumber(ctx context.Context, req *grpcproto.VerifyPhoneNumberRequest) (res *grpcproto.VerifyPhoneNumberResponse, err error) { + + if err = s.Handler.VerifyPhoneNumber( + context.Background(), + req.Email, + req.PhoneNumber, + req.VerificationCode, + ); err != nil { + return nil, err + } + + return &grpcproto.VerifyPhoneNumberResponse{Ok: true}, nil +} + +func (s SilvermobiGRPCService) SetBirthDate(ctx context.Context, req *grpcproto.BirthDateRequest) (res *grpcproto.BirthDateResponse, err error) { + birthdate := time.Unix(req.Birthdate.Seconds, int64(req.Birthdate.Nanos)).UTC() + birthdateString := birthdate.Format("2006-01-02T15:04:05Z") + if err = s.Handler.UpdateBirthDate(ctx, req.Email, birthdateString); err != nil { + return nil, err + } + return &grpcproto.BirthDateResponse{ + Ok: true, + }, nil +} + +func (s SilvermobiGRPCService) GetValidation(ctx context.Context, req *grpcproto.ValidationRequest) (res *grpcproto.ValidationResponse, err error) { + phone_validation, birth_validation, err := s.Handler.CheckValidation(ctx, req.Email) + if err != nil { + return nil, err + } + return &grpcproto.ValidationResponse{ + Phone: phone_validation, + Birthdate: birth_validation, + }, nil +} diff --git a/servers/grpcapi/server/silvermobi-grpc-server.go b/servers/grpcapi/server/silvermobi-grpc-server.go new file mode 100644 index 0000000..8531032 --- /dev/null +++ b/servers/grpcapi/server/silvermobi-grpc-server.go @@ -0,0 +1,125 @@ +package grpcserver + +import ( + "context" + "net" + "strings" + + "git.coopgo.io/coopgo-apps/silvermobi/handler" + grpcproto "git.coopgo.io/coopgo-apps/silvermobi/servers/grpcapi/proto" + "github.com/golang-jwt/jwt/v4" + grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" + grpc_auth "github.com/grpc-ecosystem/go-grpc-middleware/auth" + grpc_ctxtags "github.com/grpc-ecosystem/go-grpc-middleware/tags" + "github.com/rs/zerolog/log" + "github.com/spf13/viper" + "google.golang.org/grpc" +) + +type contextKey string + +var ( + contextKeyUser = contextKey("user") +) + +type SilvermobiGRPCService struct { + Config *viper.Viper + Handler *handler.SilvermobiHandler + + grpcproto.UnimplementedSilvermobiGRPCServer +} + +func NewSilvermobiGRPCService(cfg *viper.Viper, handler *handler.SilvermobiHandler) SilvermobiGRPCService { + return SilvermobiGRPCService{ + Config: cfg, + Handler: handler, + } +} + +func Run(done chan error, cfg *viper.Viper, handler *handler.SilvermobiHandler) { + var ( + address = "127.0.0.1:" + cfg.GetString("services.external.grpc.port") + jwt_secret = cfg.GetString("identification.local.jwt_secret") + ) + + log.Info().Msg("GRPC server on " + address) + + server := grpc.NewServer( + grpc.StreamInterceptor(grpc_middleware.ChainStreamServer( + grpc_ctxtags.StreamServerInterceptor(), + StreamAuthServerInterceptor(GRPCAuthFunc(jwt_secret)), + )), + grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer( + grpc_ctxtags.UnaryServerInterceptor(), + UnaryAuthServerInterceptor(GRPCAuthFunc(jwt_secret)), + )), + ) + + grpcproto.RegisterSilvermobiGRPCServer(server, NewSilvermobiGRPCService(cfg, handler)) + l, err := net.Listen("tcp", address) + if err != nil { + log.Fatal().Err(err) + } + + if err := server.Serve(l); err != nil { + log.Error().Err(err).Msg("gRPC service ended") + done <- err + } +} + +func UnaryAuthServerInterceptor(authFunc grpc_auth.AuthFunc) grpc.UnaryServerInterceptor { + return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { + if NoAuth(info.FullMethod) { + return handler(ctx, req) + } + var newCtx context.Context + var err error + newCtx, err = authFunc(ctx) + if err != nil { + return nil, err + } + return handler(newCtx, req) + } +} + +func StreamAuthServerInterceptor(authFunc grpc_auth.AuthFunc) grpc.StreamServerInterceptor { + return func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { + if NoAuth(info.FullMethod) { + wrapped := grpc_middleware.WrapServerStream(stream) + wrapped.WrappedContext = stream.Context() + return handler(srv, wrapped) + } + var newCtx context.Context + var err error + newCtx, err = authFunc(stream.Context()) + if err != nil { + return err + } + wrapped := grpc_middleware.WrapServerStream(stream) + wrapped.WrappedContext = newCtx + return handler(srv, wrapped) + } +} + +func GRPCAuthFunc(jwtKey string) grpc_auth.AuthFunc { + return func(ctx context.Context) (context.Context, error) { + tokenString, err := grpc_auth.AuthFromMD(ctx, "bearer") + if err != nil { + log.Error().Err(err) + return nil, err + } + + claims := jwt.MapClaims{} + jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) { + return []byte(jwtKey), nil + }) + + ctx = context.WithValue(ctx, contextKeyUser, claims["sub"].(string)) + + return ctx, nil + } +} + +func NoAuth(method string) bool { + return strings.Contains(method, "Auth") +} diff --git a/servers/grpcapi/server/update_password.go b/servers/grpcapi/server/update_password.go new file mode 100644 index 0000000..5779bea --- /dev/null +++ b/servers/grpcapi/server/update_password.go @@ -0,0 +1,23 @@ +package grpcserver + +import ( + "context" + grpcproto "git.coopgo.io/coopgo-apps/silvermobi/servers/grpcapi/proto" + "github.com/rs/zerolog/log" +) + +func (s SilvermobiGRPCService) UpdatePassword(ctx context.Context, req *grpcproto.UpdatePasswordRequest) (res *grpcproto.UpdatePasswordResponse, err error) { + log.Info(). + Str("username", req.Email). + Msg("Update Password") + result := s.Handler.UpdatePassword(ctx, req.Email, req.Password) + if result == true { + return &grpcproto.UpdatePasswordResponse{ + Response: true, + }, nil + } else { + return &grpcproto.UpdatePasswordResponse{ + Response: false, + }, nil + } +} diff --git a/services/mobility-accounts.go b/services/mobility-accounts.go new file mode 100644 index 0000000..54b18c3 --- /dev/null +++ b/services/mobility-accounts.go @@ -0,0 +1,188 @@ +package services + +import ( + "context" + "git.coopgo.io/coopgo-apps/silvermobi/models" + mobilityaccounts "git.coopgo.io/coopgo-platform/mobility-accounts/grpcapi" + ma "git.coopgo.io/coopgo-platform/mobility-accounts/storage" + "google.golang.org/grpc" + "google.golang.org/protobuf/types/known/structpb" +) + +type MobilityAccountService struct { + Client mobilityaccounts.MobilityAccountsClient +} + +func NewMobilityAccountService(mobilityAccountsDial string) (MobilityAccountService, error) { + mobilityAccountsConn, err := grpc.Dial(mobilityAccountsDial, grpc.WithInsecure()) + + client := mobilityaccounts.NewMobilityAccountsClient(mobilityAccountsConn) + if err != nil { + return MobilityAccountService{}, err + } + + return MobilityAccountService{ + Client: client, + }, nil +} + +func (s MobilityAccountService) Login(ctx context.Context, username, password, namespace string) (*models.Account, error) { + resp, err := s.Client.Login(ctx, &mobilityaccounts.LoginRequest{ + Username: username, + Password: password, + Namespace: namespace, + }) + if err != nil { + return nil, err + } + + account := resp.Account.ToStorageType() + return toAccountModel(account), nil +} + +func (s MobilityAccountService) UpdateAccountData(ctx context.Context, id string, data map[string]any) error { + d, err := structpb.NewStruct(data) + if err != nil { + return err + } + + if _, err = s.Client.UpdateData(ctx, &mobilityaccounts.UpdateDataRequest{ + Account: &mobilityaccounts.Account{ + Id: id, + Data: d, + }, + }); err != nil { + return err + } + + return nil +} + +func (s MobilityAccountService) UpdatePassword(ctx context.Context, id string, password string) bool { + _, err := s.Client.ChangePassword(ctx, &mobilityaccounts.ChangePasswordRequest{ + Id: id, + Password: password, + }) + if err == nil { + return true + } else { + return false + } +} + +func (s MobilityAccountService) GetAccountUsername(ctx context.Context, username string, namespace string) (*models.Account, error) { + resp, err := s.Client.GetAccountUsername(ctx, &mobilityaccounts.GetAccountUsernameRequest{ + Username: username, + Namespace: namespace, + }) + if err != nil { + return nil, err + } + return toAccountModel(resp.Account.ToStorageType()), nil +} + +func (s MobilityAccountService) Register(ctx context.Context, username string, password string, email string, phone_number string, data map[string]any, namespace string) (*models.Account, error) { + account := &ma.Account{ + Authentication: ma.AccountAuth{ + Local: ma.LocalAuth{ + Username: username, + Password: password, + Email: email, + PhoneNumber: phone_number, + }, + }, + Namespace: namespace, + Data: data, + } + + acc, err := mobilityaccounts.AccountFromStorageType(account) + if err != nil { + return nil, err + } + + resp, err := s.Client.Register(ctx, &mobilityaccounts.RegisterRequest{ + Account: acc, + }) + + if err != nil { + return nil, err + } + + return toAccountModel(resp.Account.ToStorageType()), nil +} +func (s MobilityAccountService) UpdatePhoneNumber(ctx context.Context, accountid string, phone_number string, verified bool, verification_code string) error { + _, err := s.Client.UpdatePhoneNumber( + ctx, + &mobilityaccounts.UpdatePhoneNumberRequest{ + Id: accountid, + PhoneNumber: phone_number, + Verified: verified, + VerificationCode: verification_code, + }, + ) + + if err != nil { + return err + } + + return nil +} + +func (s MobilityAccountService) UpdateAccountBirthDate(ctx context.Context, username string, namespace string, birthdate string) error { + resp, err := s.Client.GetAccountUsername(ctx, &mobilityaccounts.GetAccountUsernameRequest{ + Username: username, + Namespace: namespace, + }) + account, err := s.Client.GetAccount(ctx, &mobilityaccounts.GetAccountRequest{ + Id: resp.Account.Id, + }) + data := make(map[string]interface{}) + data["birthdate"] = birthdate + + dataStruct := &structpb.Struct{ + Fields: make(map[string]*structpb.Value), + } + + for key, value := range data { + stringValue, ok := value.(string) + if !ok { + continue + } + + dataStruct.Fields[key] = &structpb.Value{ + Kind: &structpb.Value_StringValue{ + StringValue: stringValue, + }, + } + } + account.Account.Data = dataStruct + _, err = s.Client.UpdateData(ctx, &mobilityaccounts.UpdateDataRequest{ + Account: account.Account, + }) + if err != nil { + return err + } + return nil +} + +func toAccountModel(account ma.Account) *models.Account { + first_name := account.Data["first_name"].(string) + last_name := account.Data["last_name"].(string) + birth_date, ok := account.Data["birthdate"].(string) + if !ok { + birth_date = "" + } + return &models.Account{ + ID: account.ID, + FirstName: first_name, + LastName: last_name, + BirthDate: birth_date, + LocalCredentials: models.LocalCredentials{ + Email: account.Authentication.Local.Email, + EmailVerified: account.Authentication.Local.EmailValidation.Validated, + EmailValidationCode: account.Authentication.Local.EmailValidation.ValidationCode, + PhoneNumber: account.Authentication.Local.PhoneNumber, + PhoneNumberVerified: account.Authentication.Local.PhoneNumberValidation.Validated, + }, + } +} diff --git a/services/push.go b/services/push.go new file mode 100644 index 0000000..313879d --- /dev/null +++ b/services/push.go @@ -0,0 +1,74 @@ +package services + +import ( + "context" + + "github.com/appleboy/gorush/rpc/proto" + "github.com/rs/zerolog/log" + "google.golang.org/grpc" +) + +const ( + // PlatFormIos constant is 1 for iOS + PushToIos = iota + 1 + // PlatFormAndroid constant is 2 for Android + PushToAndroid + // PlatFormHuawei constant is 3 for Huawei + PushToHuawei + // PlatformUnifiedPush constant is 4 for UnifiedPush + PushToUnifiedPush + // PlatformSMSFactor constant is 5 for SMSFactor + PushToSMSFactor +) + +type Notification struct { + Platform int32 + Recipients []string + Message string + Title string +} + +type PushService struct { + Client proto.GorushClient +} + +func NewPushService(address string) (*PushService, error) { + conn, err := grpc.Dial(address, grpc.WithInsecure()) + + if err != nil { + return nil, err + } + + return &PushService{ + Client: proto.NewGorushClient(conn), + }, nil +} + +func (s *PushService) Send(notification Notification) error { + log.Debug(). + Int32("Platform", notification.Platform). + Strs("recipients", notification.Recipients). + Str("notification_message", notification.Message). + Str("notification_title", notification.Title). + Msg("Send notification") + + resp, err := s.Client.Send(context.Background(), &proto.NotificationRequest{ + Platform: notification.Platform, + Tokens: notification.Recipients, + Message: notification.Message, + Title: notification.Title, + Priority: proto.NotificationRequest_HIGH, + Alert: &proto.Alert{ + Title: notification.Title, + Body: notification.Message, + }, + }) + + if err != nil { + return err + } + + log.Debug().Str("response", resp.String()).Msg("notification sent") + + return nil +} diff --git a/services/services.go b/services/services.go new file mode 100644 index 0000000..da62b12 --- /dev/null +++ b/services/services.go @@ -0,0 +1,33 @@ +package services + +import ( + "github.com/rs/zerolog/log" + "github.com/spf13/viper" +) + +type ServicesHandler struct { + MobilityAccounts MobilityAccountService + Push *PushService +} + +func NewServicesHandler(cfg *viper.Viper) (*ServicesHandler, error) { + var ( + mobilityAccountsDial = cfg.GetString("services.internal.mobility_accounts.dial") + pushDial = cfg.GetString("services.internal.push.dial") + ) + mobilityAccounts, err := NewMobilityAccountService(mobilityAccountsDial) + if err != nil { + log.Fatal().Err(err).Msg("Could not connect to Mobility Accounts Service") + return nil, err + } + push, err := NewPushService(pushDial) + if err != nil { + log.Fatal().Err(err).Msg("Could not connect to Push Notifications Service") + return nil, err + } + + return &ServicesHandler{ + MobilityAccounts: mobilityAccounts, + Push: push, + }, nil +} diff --git a/storage/kvhandler.go b/storage/kvhandler.go new file mode 100644 index 0000000..cecc924 --- /dev/null +++ b/storage/kvhandler.go @@ -0,0 +1,15 @@ +package storage + +import ( + "github.com/spf13/viper" +) + +type KVHandler interface { + Put(k string, v any) error + Get(k string) (any, error) + Delete(k string) error +} + +func NewKVHandler(cfg *viper.Viper) (KVHandler, error) { + return NewRedisHandler(cfg) +} diff --git a/storage/redis.go b/storage/redis.go new file mode 100644 index 0000000..f791fc1 --- /dev/null +++ b/storage/redis.go @@ -0,0 +1,43 @@ +package storage + +import ( + "context" + "github.com/go-redis/redis/v9" + "github.com/spf13/viper" +) + +type RedisHandler struct { + client *redis.Client +} + +func NewRedisHandler(cfg *viper.Viper) (*RedisHandler, error) { + redisClient := redis.NewClient(&redis.Options{ + Addr: cfg.GetString("storage.kv.redis.addr"), + DB: cfg.GetInt("storage.kv.redis.db"), + }) + + _, err := redisClient.Ping(context.Background()).Result() + if err != nil { + return nil, err + } + + return &RedisHandler{ + client: redisClient, + }, nil +} + +func (rh *RedisHandler) Put(k string, v any) error { + return rh.client.Set(context.Background(), k, v, 0).Err() +} + +func (rh *RedisHandler) Get(k string) (any, error) { + value, err := rh.client.Get(context.Background(), k).Result() + if err != nil { + return nil, err + } + return value, nil +} + +func (rh *RedisHandler) Delete(k string) error { + return rh.client.Del(context.Background(), k).Err() +}