diff --git a/COPYING_NOTES.md b/COPYING_NOTES.md
index 456cd8d2..7054c162 100644
--- a/COPYING_NOTES.md
+++ b/COPYING_NOTES.md
@@ -42,7 +42,10 @@ Proton Mail Bridge includes the following 3rd party software:
* [go-smtp](https://github.com/emersion/go-smtp) available under [license](https://github.com/emersion/go-smtp/blob/master/LICENSE)
* [go-vcard](https://github.com/emersion/go-vcard) available under [license](https://github.com/emersion/go-vcard/blob/master/LICENSE)
* [color](https://github.com/fatih/color) available under [license](https://github.com/fatih/color/blob/master/LICENSE)
+* [cbor](https://github.com/fxamacker/cbor/v2) available under [license](https://github.com/fxamacker/cbor/v2/blob/master/LICENSE)
* [sentry-go](https://github.com/getsentry/sentry-go) available under [license](https://github.com/getsentry/sentry-go/blob/master/LICENSE)
+* [ctaphid](https://github.com/go-ctap/ctaphid) available under [license](https://github.com/go-ctap/ctaphid/blob/master/LICENSE)
+* [winhello](https://github.com/go-ctap/winhello) available under [license](https://github.com/go-ctap/winhello/blob/master/LICENSE)
* [resty](https://github.com/go-resty/resty/v2) available under [license](https://github.com/go-resty/resty/v2/blob/master/LICENSE)
* [dbus](https://github.com/godbus/dbus) available under [license](https://github.com/godbus/dbus/blob/master/LICENSE)
* [mock](https://github.com/golang/mock) available under [license](https://github.com/golang/mock/blob/master/LICENSE)
@@ -52,6 +55,7 @@ Proton Mail Bridge includes the following 3rd party software:
* [html2text](https://github.com/jaytaylor/html2text) available under [license](https://github.com/jaytaylor/html2text/blob/master/LICENSE)
* [go-locale](https://github.com/jeandeaual/go-locale) available under [license](https://github.com/jeandeaual/go-locale/blob/master/LICENSE)
* [go-keychain](https://github.com/keybase/go-keychain) available under [license](https://github.com/keybase/go-keychain/blob/master/LICENSE)
+* [go-libfido2](https://github.com/keys-pub/go-libfido2) available under [license](https://github.com/keys-pub/go-libfido2/blob/master/LICENSE)
* [dns](https://github.com/miekg/dns) available under [license](https://github.com/miekg/dns/blob/master/LICENSE)
* [memory](https://github.com/pbnjay/memory) available under [license](https://github.com/pbnjay/memory/blob/master/LICENSE)
* [errors](https://github.com/pkg/errors) available under [license](https://github.com/pkg/errors/blob/master/LICENSE)
@@ -70,7 +74,6 @@ Proton Mail Bridge includes the following 3rd party software:
* [grpc](https://google.golang.org/grpc) available under [license](https://github.com/grpc/grpc-go/blob/master/LICENSE)
* [protobuf](https://google.golang.org/protobuf) available under [license](https://github.com/protocolbuffers/protobuf/blob/main/LICENSE)
* [plist](https://howett.net/plist) available under [license](https://github.com/DHowett/go-plist/blob/main/LICENSE)
-* [compute](https://cloud.google.com/go/compute) available under [license](https://pkg.go.dev/cloud.google.com/go/compute?tab=licenses)
* [metadata](https://cloud.google.com/go/compute/metadata) available under [license](https://pkg.go.dev/cloud.google.com/go/compute/metadata?tab=licenses)
* [bcrypt](https://github.com/ProtonMail/bcrypt) available under [license](https://github.com/ProtonMail/bcrypt/blob/master/LICENSE)
* [go-crypto](https://github.com/ProtonMail/go-crypto) available under [license](https://github.com/ProtonMail/go-crypto/blob/master/LICENSE)
@@ -111,6 +114,7 @@ Proton Mail Bridge includes the following 3rd party software:
* [multierror](https://github.com/joeshaw/multierror) available under [license](https://github.com/joeshaw/multierror/blob/master/LICENSE)
* [go](https://github.com/json-iterator/go) available under [license](https://github.com/json-iterator/go/blob/master/LICENSE)
* [cpuid](https://github.com/klauspost/cpuid/v2) available under [license](https://github.com/klauspost/cpuid/v2/blob/master/LICENSE)
+* [cose](https://github.com/ldclabs/cose) available under [license](https://github.com/ldclabs/cose/blob/master/LICENSE)
* [go-urn](https://github.com/leodido/go-urn) available under [license](https://github.com/leodido/go-urn/blob/master/LICENSE)
* [go-colorable](https://github.com/mattn/go-colorable) available under [license](https://github.com/mattn/go-colorable/blob/master/LICENSE)
* [go-isatty](https://github.com/mattn/go-isatty) available under [license](https://github.com/mattn/go-isatty/blob/master/LICENSE)
@@ -131,6 +135,7 @@ Proton Mail Bridge includes the following 3rd party software:
* [golang-asm](https://github.com/twitchyliquid64/golang-asm) available under [license](https://github.com/twitchyliquid64/golang-asm/blob/master/LICENSE)
* [codec](https://github.com/ugorji/go/codec) available under [license](https://github.com/ugorji/go/codec/blob/master/LICENSE)
* [tagparser](https://github.com/vmihailenco/tagparser/v2) available under [license](https://github.com/vmihailenco/tagparser/v2/blob/master/LICENSE)
+* [float16](https://github.com/x448/float16) available under [license](https://github.com/x448/float16/blob/master/LICENSE)
* [smetrics](https://github.com/xrash/smetrics) available under [license](https://github.com/xrash/smetrics/blob/master/LICENSE)
* [go-ordered-json](https://gitlab.com/c0b/go-ordered-json) available under [license](https://gitlab.com/c0b/go-ordered-json/blob/master/LICENSE)
* [go.opencensus.io](https://pkg.go.dev/go.opencensus.io?tab=licenses) available under [license](https://pkg.go.dev/go.opencensus.io?tab=licenses)
@@ -142,9 +147,11 @@ Proton Mail Bridge includes the following 3rd party software:
* [appengine](https://google.golang.org/appengine) available under [license](https://pkg.go.dev/google.golang.org/appengine?tab=licenses)
* [genproto](https://google.golang.org/genproto) available under [license](https://pkg.go.dev/google.golang.org/genproto?tab=licenses)
* [yaml](https://gopkg.in/yaml.v3) available under [license](https://github.com/go-yaml/yaml/blob/v3.0.1/LICENSE) available under [license](https://github.com/go-yaml/yaml/blob/v3.0.1/LICENSE)
-* [go-autostart](https://github.com/ElectroNafta/go-autostart) available under [license](https://github.com/ElectroNafta/go-autostart/blob/master/LICENSE)
+* [go-autostart](https://github.com/ProtonMail/go-autostart) available under [license](https://github.com/ProtonMail/go-autostart/blob/master/LICENSE)
* [go-message](https://github.com/ProtonMail/go-message) available under [license](https://github.com/ProtonMail/go-message/blob/master/LICENSE)
* [go-smtp](https://github.com/ProtonMail/go-smtp) available under [license](https://github.com/ProtonMail/go-smtp/blob/master/LICENSE)
+* [winhello](https://github.com/ProtonMail/winhello) available under [license](https://github.com/ProtonMail/winhello/blob/master/LICENSE)
* [resty](https://github.com/LBeernaertProton/resty/v2) available under [license](https://github.com/LBeernaertProton/resty/v2/blob/master/LICENSE)
* [go-keychain](https://github.com/cuthix/go-keychain) available under [license](https://github.com/cuthix/go-keychain/blob/master/LICENSE)
+* [go-libfido2](https://github.com/ProtonMail/go-libfido2) available under [license](https://github.com/ProtonMail/go-libfido2/blob/master/LICENSE)
diff --git a/ci/setup.yml b/ci/setup.yml
index 207a5a51..3fee9618 100644
--- a/ci/setup.yml
+++ b/ci/setup.yml
@@ -1,5 +1,5 @@
---
include:
- project: "go/bridge-internal"
- ref: "chore/libfido2-build"
+ ref: "master"
file: "ci/runners-setup.yml"
diff --git a/go.mod b/go.mod
index bcccc6d0..42f7499b 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,7 @@ require (
github.com/Masterminds/semver/v3 v3.2.0
github.com/ProtonMail/gluon v0.17.1-0.20250627102828-b014b7cc8132
github.com/ProtonMail/go-autostart v0.0.0-20210130080809-00ed301c8e9a
- github.com/ProtonMail/go-proton-api v0.4.1-0.20250910105600-4de5d9039a5f
+ github.com/ProtonMail/go-proton-api v0.4.1-0.20250925134057-a44ee01d3b3b
github.com/ProtonMail/gopenpgp/v2 v2.9.0-proton
github.com/PuerkitoBio/goquery v1.8.1
github.com/abiosoft/ishell v2.0.0+incompatible
@@ -26,12 +26,12 @@ require (
github.com/fatih/color v1.13.0
github.com/fxamacker/cbor/v2 v2.9.0
github.com/getsentry/sentry-go v0.15.0
- github.com/go-ctap/ctaphid v0.7.0
+ github.com/go-ctap/ctaphid v0.8.1
github.com/go-ctap/winhello v0.1.0
github.com/go-resty/resty/v2 v2.7.0
github.com/godbus/dbus v4.1.0+incompatible
github.com/golang/mock v1.6.0
- github.com/google/go-cmp v0.6.0
+ github.com/google/go-cmp v0.7.0
github.com/google/uuid v1.6.0
github.com/hashicorp/go-multierror v1.1.1
github.com/jaytaylor/html2text v0.0.0-20211105163654-bc68cce691ba
@@ -43,24 +43,23 @@ require (
github.com/pkg/errors v0.9.1
github.com/pkg/profile v1.7.0
github.com/sirupsen/logrus v1.9.2
- github.com/stretchr/testify v1.10.0
+ github.com/stretchr/testify v1.11.1
github.com/urfave/cli/v2 v2.24.4
github.com/vmihailenco/msgpack/v5 v5.3.5
go.uber.org/goleak v1.2.1
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1
- golang.org/x/net v0.40.0
- golang.org/x/oauth2 v0.7.0
- golang.org/x/sys v0.33.0
- golang.org/x/text v0.26.0
+ golang.org/x/net v0.42.0
+ golang.org/x/oauth2 v0.30.0
+ golang.org/x/sys v0.35.0
+ golang.org/x/text v0.28.0
google.golang.org/api v0.114.0
- google.golang.org/grpc v1.56.3
- google.golang.org/protobuf v1.33.0
+ google.golang.org/grpc v1.75.1
+ google.golang.org/protobuf v1.36.6
howett.net/plist v1.0.0
)
require (
- cloud.google.com/go/compute v1.19.1 // indirect
- cloud.google.com/go/compute/metadata v0.2.3 // indirect
+ cloud.google.com/go/compute/metadata v0.7.0 // indirect
github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf // indirect
github.com/ProtonMail/go-crypto v1.3.0-proton // indirect
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f // indirect
@@ -89,7 +88,7 @@ require (
github.com/goccy/go-json v0.10.2 // indirect
github.com/gofrs/uuid v4.3.0+incompatible // indirect
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd // indirect
github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect
github.com/googleapis/gax-go/v2 v2.7.1 // indirect
@@ -126,20 +125,21 @@ require (
gitlab.com/c0b/go-ordered-json v0.0.0-20201030195603-febf46534d5a // indirect
go.opencensus.io v0.24.0 // indirect
golang.org/x/arch v0.3.0 // indirect
- golang.org/x/crypto v0.39.0 // indirect
- golang.org/x/mod v0.25.0 // indirect
- golang.org/x/sync v0.15.0 // indirect
- golang.org/x/tools v0.33.0 // indirect
+ golang.org/x/crypto v0.41.0 // indirect
+ golang.org/x/mod v0.26.0 // indirect
+ golang.org/x/sync v0.16.0 // indirect
+ golang.org/x/tools v0.35.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
replace (
- github.com/ProtonMail/go-autostart => github.com/ElectroNafta/go-autostart v0.0.0-20250402094843-326608c16033
+ github.com/ProtonMail/go-autostart => github.com/ProtonMail/go-autostart v0.0.0-20250402094843-326608c16033
github.com/emersion/go-message => github.com/ProtonMail/go-message v0.13.1-0.20240919135104-3bc88e6a9423
github.com/emersion/go-smtp => github.com/ProtonMail/go-smtp v0.0.0-20231109081432-2b3d50599865
+ github.com/go-ctap/winhello => github.com/ProtonMail/winhello v0.0.0-20250918145518-a739b7dc2e56
github.com/go-resty/resty/v2 => github.com/LBeernaertProton/resty/v2 v2.0.0-20231129100320-dddf8030d93a
github.com/keybase/go-keychain => github.com/cuthix/go-keychain v0.0.0-20240103134243-0b6a41580b77
- github.com/keys-pub/go-libfido2 => github.com/ElectroNafta/go-libfido2 v0.0.0-20250915152115-4584ec5a59ac
+ github.com/keys-pub/go-libfido2 => github.com/ProtonMail/go-libfido2 v0.0.0-20250916110427-df894d6d07a1
)
diff --git a/go.sum b/go.sum
index acd43ac2..d0030eef 100644
--- a/go.sum
+++ b/go.sum
@@ -7,10 +7,8 @@ cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTj
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
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/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY=
-cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE=
-cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
-cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
+cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU=
+cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM=
@@ -23,10 +21,6 @@ github.com/0xAX/notificator v0.0.0-20220220101646-ee9b8921e557 h1:l6surSnJ3RP4qA
github.com/0xAX/notificator v0.0.0-20220220101646-ee9b8921e557/go.mod h1:sTrmvD/TxuypdOERsDOS7SndZg0rzzcCi1b6wQMXUYM=
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/ElectroNafta/go-autostart v0.0.0-20250402094843-326608c16033 h1:d2RB9rQmSusb0K+qSgB+DAY+8i+AXZ/o+oDHj2vAUaA=
-github.com/ElectroNafta/go-autostart v0.0.0-20250402094843-326608c16033/go.mod h1:o0nKiWcK0e2G/90uL6akWRkzOV4mFcZmvpBPpigJvdw=
-github.com/ElectroNafta/go-libfido2 v0.0.0-20250915152115-4584ec5a59ac h1:FYEkCIEW4MGkv7oehbGsfxJYsufq7wnBI8XAHrwVDZg=
-github.com/ElectroNafta/go-libfido2 v0.0.0-20250915152115-4584ec5a59ac/go.mod h1:92J9LtSBl0UyUWljElJpTbMMNhC6VeY8dshsu40qjjo=
github.com/Kodeworks/golang-image-ico v0.0.0-20141118225523-73f0f4cfade9/go.mod h1:7uhhqiBaR4CpN0k9rMjOtjpcfGd6DG2m04zQxKnWQ0I=
github.com/LBeernaertProton/resty/v2 v2.0.0-20231129100320-dddf8030d93a h1:eQO/GF/+H8/9udc9QAgieFr+jr1tjXlJo35RAhsUbWY=
github.com/LBeernaertProton/resty/v2 v2.0.0-20231129100320-dddf8030d93a/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A=
@@ -40,21 +34,27 @@ github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf h1:yc9daCCYUefEs
github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf/go.mod h1:o0ESU9p83twszAU8LBeJKFAAMX14tISa0yk4Oo5TOqo=
github.com/ProtonMail/gluon v0.17.1-0.20250627102828-b014b7cc8132 h1:2HA7IRoYUA1Lm7yFl1JGskGotNnqIqKJJB/ZxYhoJ6w=
github.com/ProtonMail/gluon v0.17.1-0.20250627102828-b014b7cc8132/go.mod h1:OMwmLjgk6yJHX/P5KPck9WOcBVWIJLvuGZjj/8Ts/cw=
+github.com/ProtonMail/go-autostart v0.0.0-20250402094843-326608c16033 h1:4r/ALoiixOOyjc1WhpwlkrcSFtRnc1GHWhk7ERELwbs=
+github.com/ProtonMail/go-autostart v0.0.0-20250402094843-326608c16033/go.mod h1:oTGdE7/DlWIr23G0IKW3OXK9wZ5Hw1GGiaJFccTvZi4=
github.com/ProtonMail/go-crypto v0.0.0-20230321155629-9a39f2531310/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE=
github.com/ProtonMail/go-crypto v1.3.0-proton h1:tAQKQRZX/73VmzK6yHSCaRUOvS/3OYSQzhXQsrR7yUM=
github.com/ProtonMail/go-crypto v1.3.0-proton/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE=
+github.com/ProtonMail/go-libfido2 v0.0.0-20250916110427-df894d6d07a1 h1:MpPKmpti7MswJG5il3A+P24+iGxMj8V7/3JSMSRM1+c=
+github.com/ProtonMail/go-libfido2 v0.0.0-20250916110427-df894d6d07a1/go.mod h1:92J9LtSBl0UyUWljElJpTbMMNhC6VeY8dshsu40qjjo=
github.com/ProtonMail/go-message v0.13.1-0.20240919135104-3bc88e6a9423 h1:p8nBDxvRnvDOyrcePKkPpErWGhDoTqpX8a1c54CcSu0=
github.com/ProtonMail/go-message v0.13.1-0.20240919135104-3bc88e6a9423/go.mod h1:NBAn21zgCJ/52WLDyed18YvYFm5tEoeDauubFqLokM4=
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f h1:tCbYj7/299ekTTXpdwKYF8eBlsYsDVoggDAuAjoK66k=
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f/go.mod h1:gcr0kNtGBqin9zDW9GOHcVntrwnjrK+qdJ06mWYBybw=
-github.com/ProtonMail/go-proton-api v0.4.1-0.20250910105600-4de5d9039a5f h1:BEX62gQfydYK8vUGaxQ6aWqqtVq0g6eHuv6JBwpDaJ8=
-github.com/ProtonMail/go-proton-api v0.4.1-0.20250910105600-4de5d9039a5f/go.mod h1:9t9+oQfH+6ssa7O2nLv34Uyjv8UmqTPGbVNcFToewck=
+github.com/ProtonMail/go-proton-api v0.4.1-0.20250925134057-a44ee01d3b3b h1:TOYM14eu1k/zgXOOQH86MP68+mc9ASpX0gasYI51TNs=
+github.com/ProtonMail/go-proton-api v0.4.1-0.20250925134057-a44ee01d3b3b/go.mod h1:9t9+oQfH+6ssa7O2nLv34Uyjv8UmqTPGbVNcFToewck=
github.com/ProtonMail/go-smtp v0.0.0-20231109081432-2b3d50599865 h1:EP1gnxLL5Z7xBSymE9nSTM27nRYINuvssAtDmG0suD8=
github.com/ProtonMail/go-smtp v0.0.0-20231109081432-2b3d50599865/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ=
github.com/ProtonMail/go-srp v0.0.7 h1:Sos3Qk+th4tQR64vsxGIxYpN3rdnG9Wf9K4ZloC1JrI=
github.com/ProtonMail/go-srp v0.0.7/go.mod h1:giCp+7qRnMIcCvI6V6U3S1lDDXDQYx2ewJ6F/9wdlJk=
github.com/ProtonMail/gopenpgp/v2 v2.9.0-proton h1:K3YRIBJo3YVObikaV9y1KWYGxFWRML+pFaiyh8ON2xA=
github.com/ProtonMail/gopenpgp/v2 v2.9.0-proton/go.mod h1:NJ4RywdeD2sXCJyRRwb0ZYCx+QwGi14HUmlyNPegiwI=
+github.com/ProtonMail/winhello v0.0.0-20250918145518-a739b7dc2e56 h1:OFDKuwogje2Nor+2X81P0wWGcSZPXu2HKNUE71o3qZI=
+github.com/ProtonMail/winhello v0.0.0-20250918145518-a739b7dc2e56/go.mod h1:kJnpbFRhpEatnRc05/CTeq4cWR2LUE7P6+KsPP/zRnE=
github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM=
github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ=
github.com/abiosoft/ishell v2.0.0+incompatible h1:zpwIuEHc37EzrsIYah3cpevrIc8Oma7oZPxr03tlmmw=
@@ -176,10 +176,8 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
-github.com/go-ctap/ctaphid v0.7.0 h1:NLDPio3g9JaWQdE7nSO2HGFk2kUa/jm5EKt2pXwxP9E=
-github.com/go-ctap/ctaphid v0.7.0/go.mod h1:0Lw4YghP45DtCQD8JHEvZ8bJvpcIm9R3fIKjDgcYQyw=
-github.com/go-ctap/winhello v0.1.0 h1:ZWHwCbqMAHJH2opfGuW1tkAzDjs2wo++W2238Po5dH0=
-github.com/go-ctap/winhello v0.1.0/go.mod h1:hcUpGmVxxS+zOn9foMfP98l0S0lpmHpMQpCqkWNF9kE=
+github.com/go-ctap/ctaphid v0.8.1 h1:HIDoSfqInkUIRBVPv61fVB2CNZ5nYxoaIgqmt8vzcs4=
+github.com/go-ctap/ctaphid v0.8.1/go.mod h1:jRVrVfCs30jdZkSH2PoBopv9ry+tK99mpYumE4GIbb8=
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk=
@@ -188,6 +186,10 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200625191551-73d3c3675aa3/go.mod h1:tQ2
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
+github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
@@ -202,8 +204,8 @@ github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG
github.com/godbus/dbus v4.1.0+incompatible h1:WqqLRTsQic3apZUK9qC5sGNfXthmPXzUZ7nQPrNITa4=
github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
-github.com/goforj/godump v1.5.0 h1:QALI7uJkpiwAW3Anko+vOFQzLlWvB7YviYCJpE1sFIE=
-github.com/goforj/godump v1.5.0/go.mod h1:lCaXaxNTozTNAMJTPY91/ntMqw3JF8FOL93jCNKpNW0=
+github.com/goforj/godump v1.6.0 h1:3Dn8gaw5Xxxefr1ezTGTWrTKSr3ihK+eJ2xzRUoFfHQ=
+github.com/goforj/godump v1.6.0/go.mod h1:/Vy+p50JtOkwsFN5dA1HQ7LS5gtPk3f61DaP4UR2o4s=
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc=
github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
@@ -231,9 +233,8 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W
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.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/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
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=
@@ -242,9 +243,8 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/go-cmp v0.4.0/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.3/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.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
@@ -466,8 +466,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
-github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
+github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
@@ -495,6 +495,18 @@ 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.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
+go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
+go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
+go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
+go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
+go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
+go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
+go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
+go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
+go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc=
+go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
+go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
+go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
@@ -513,8 +525,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
-golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
-golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
+golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
+golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
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=
@@ -540,8 +552,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
-golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
+golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
+golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
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-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -570,13 +582,13 @@ golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
-golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
-golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
+golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
+golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
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.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g=
-golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
+golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
+golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
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=
@@ -586,8 +598,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
-golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
+golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
+golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -626,8 +638,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
-golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
+golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
@@ -647,8 +659,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
-golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
+golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
+golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
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.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
@@ -678,12 +690,14 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
-golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
+golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
+golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
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=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
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=
@@ -716,8 +730,8 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc=
-google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
+google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI=
+google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
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=
@@ -727,10 +741,8 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
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.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.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
-google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
+google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/internal/fido/fido.go b/internal/fido/fido.go
new file mode 100644
index 00000000..b63577bb
--- /dev/null
+++ b/internal/fido/fido.go
@@ -0,0 +1,267 @@
+// Copyright (c) 2025 Proton AG
+//
+// This file is part of Proton Mail Bridge.
+//
+// Proton Mail Bridge is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Proton Mail Bridge is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Proton Mail Bridge. If not, see .
+
+//go:build darwin || linux
+
+package fido
+
+import (
+ "context"
+ "crypto/sha256"
+ "errors"
+ "fmt"
+ "time"
+
+ "github.com/ProtonMail/go-proton-api"
+ "github.com/fxamacker/cbor/v2"
+ "github.com/keys-pub/go-libfido2"
+)
+
+var ErrAssertionCancelled = errors.New("FIDO assertion cancelled")
+
+const (
+ clientPinOption = "clientPin"
+ touchNotificationDelay = 500 * time.Millisecond
+)
+
+func getFidoDevice() (fido2Device *libfido2.Device, err error) {
+ locs, err := libfido2.DeviceLocations()
+ if err != nil {
+ return nil, fmt.Errorf("could not find security key device location: %w", err)
+ }
+
+ if len(locs) == 0 {
+ return nil, errors.New("no device found")
+ }
+
+ if len(locs) > 1 {
+ return nil, errors.New("multiple security keys detected, please disconnect all but one device and try again")
+ }
+
+ fido2Device, err = libfido2.NewDevice(locs[0].Path)
+ if err != nil {
+ return nil, fmt.Errorf("cannot open security key: %w", err)
+ }
+
+ return fido2Device, nil
+}
+
+func deviceHasOption(dev *libfido2.Device, name string) (bool, error) {
+ info, err := dev.Info()
+ if err != nil {
+ return false, fmt.Errorf("cannot get device info: %w", err)
+ }
+
+ for _, opt := range info.Options {
+ if opt.Name == name && opt.Value == libfido2.True {
+ return true, err
+ }
+ }
+
+ return false, err
+}
+
+func IsPinSupported() (bool, error) {
+ dev, err := getFidoDevice()
+ if err != nil {
+ return false, err
+ }
+
+ return deviceHasOption(dev, clientPinOption)
+}
+
+func constructCredentialIDs(allowCredentials []interface{}) ([][]byte, error) {
+ var credentialIDs [][]byte //nolint:prealloc
+ for _, cred := range allowCredentials {
+ credMap, ok := cred.(map[string]interface{})
+ if !ok {
+ continue
+ }
+ idArray, ok := credMap["id"].([]interface{})
+ if !ok {
+ continue
+ }
+ credID := sliceAnyToByteArray(idArray)
+ credentialIDs = append(credentialIDs, credID)
+ }
+
+ if len(credentialIDs) == 0 {
+ return nil, errors.New("no valid credential IDs found")
+ }
+
+ return credentialIDs, nil
+}
+
+func prepareFidoAuth(auth proton.Auth) (*libfido2.Device, authData, [][]byte, [32]byte, error) {
+ dev, err := getFidoDevice()
+ if err != nil {
+ return nil, authData{}, nil, [32]byte{}, fmt.Errorf("could not obtain security key device: %w", err)
+ }
+
+ data, err := extractFidoAuthData(auth)
+ if err != nil {
+ return nil, authData{}, nil, [32]byte{}, fmt.Errorf("could not extract security key authentication data: %w", err)
+ }
+
+ credentialIDs, err := constructCredentialIDs(data.AllowCredentials)
+ if err != nil {
+ return nil, authData{}, nil, [32]byte{}, err
+ }
+
+ clientDataHash := sha256.Sum256(data.ClientDataJSONBytes)
+
+ return dev, data, credentialIDs, clientDataHash, nil
+}
+
+func processFidoAssertion(assertion *libfido2.Assertion) ([]byte, error) {
+ var authData []byte
+ if err := cbor.Unmarshal(assertion.AuthDataCBOR, &authData); err != nil {
+ return nil, fmt.Errorf("failed to decode CBOR authenticator data: %w", err)
+ }
+ return authData, nil
+}
+
+func performAssertion(dev *libfido2.Device, rpID string, clientDataHash []byte, credentialIDs [][]byte, pin string) (*libfido2.Assertion, error) {
+ assertion, err := dev.Assertion(
+ rpID,
+ clientDataHash,
+ credentialIDs,
+ pin,
+ &libfido2.AssertionOpts{UP: libfido2.True},
+ )
+ if err != nil {
+ return nil, fmt.Errorf("FIDO2 assertion failed: %w", err)
+ }
+ return assertion, nil
+}
+
+// performAssertationWithTimeout - initializes the assertion and sends data to the touchEventCh (with some delay) in parallel.
+func performAssertionWithTimeout(ctx context.Context, dev *libfido2.Device, rpID string, clientDataHash []byte, credentialIDs [][]byte, pin string, touchEventCh chan struct{}) (*libfido2.Assertion, error) {
+ type assertionResult struct {
+ assertion *libfido2.Assertion
+ err error
+ }
+
+ resultCh := make(chan assertionResult, 1)
+ go func() {
+ assertion, err := performAssertion(dev, rpID, clientDataHash, credentialIDs, pin)
+ resultCh <- assertionResult{assertion: assertion, err: err}
+ }()
+
+ nearTimeout := time.NewTimer(touchNotificationDelay)
+ defer nearTimeout.Stop()
+
+ select {
+ case result := <-resultCh:
+ if result.err != nil {
+ return nil, result.err
+ }
+ return result.assertion, nil
+
+ case <-nearTimeout.C:
+ // Notify that touch is required.
+ select {
+ case touchEventCh <- struct{}{}:
+ default:
+ }
+
+ // Wait for either completion or cancellation.
+ select {
+ case result := <-resultCh:
+ if result.err != nil {
+ return nil, result.err
+ }
+ return result.assertion, nil
+
+ case <-ctx.Done():
+ if err := dev.Cancel(); err != nil {
+ return nil, fmt.Errorf("%w: %v", ErrAssertionCancelled, err)
+ }
+ return nil, ErrAssertionCancelled
+ }
+ }
+}
+
+func AuthWithHardwareKeyGUI(ctx context.Context, client *proton.Client, auth proton.Auth, touchEventCh chan struct{}, touchConfirmCh chan struct{}, pin string) error {
+ dev, fidoAuthData, credentialIDs, clientDataHash, err := prepareFidoAuth(auth)
+ if err != nil {
+ return err
+ }
+
+ assertion, err := performAssertionWithTimeout(ctx, dev, fidoAuthData.RpID, clientDataHash[:], credentialIDs, pin, touchEventCh)
+ if err != nil {
+ return err
+ }
+
+ // Notify that spinner should be displayed, as assertion has finished.
+ touchConfirmCh <- struct{}{}
+
+ // Decode CBOR to get raw authenticator data.
+ authData, err := processFidoAssertion(assertion)
+ if err != nil {
+ return err
+ }
+
+ return authWithFido(client,
+ auth,
+ assertion.CredentialID,
+ fidoAuthData.ClientDataJSONBytes,
+ authData,
+ assertion.Sig)
+}
+
+func AuthWithHardwareKeyCLI(cliProvider CLIProvider, client *proton.Client, auth proton.Auth) error {
+ cliProvider.PromptAndWaitReturn("Please insert your security key")
+
+ dev, fidoAuthData, credentialIDs, clientDataHash, err := prepareFidoAuth(auth)
+ if err != nil {
+ return err
+ }
+
+ pinSupported, err := IsPinSupported()
+ if err != nil {
+ return fmt.Errorf("could not determine security key PIN support: %w", err)
+ }
+
+ var pin string
+ if pinSupported {
+ pin = cliProvider.ReadSecurityKeyPin()
+ if pin == "" {
+ return errors.New("a PIN is required for this security key")
+ }
+ }
+
+ fmt.Println("Please touch the button or sensor on your security key.")
+ assertion, err := performAssertion(dev, fidoAuthData.RpID, clientDataHash[:], credentialIDs, pin)
+ if err != nil {
+ return err
+ }
+
+ authData, err := processFidoAssertion(assertion)
+ if err != nil {
+ return err
+ }
+
+ fmt.Println("Submitting FIDO2 authentication request.")
+ return authWithFido(
+ client,
+ auth,
+ assertion.CredentialID,
+ fidoAuthData.ClientDataJSONBytes,
+ authData,
+ assertion.Sig)
+}
diff --git a/internal/fido/fido_windows.go b/internal/fido/fido_windows.go
new file mode 100644
index 00000000..e48f73ef
--- /dev/null
+++ b/internal/fido/fido_windows.go
@@ -0,0 +1,94 @@
+// Copyright (c) 2025 Proton AG
+//
+// This file is part of Proton Mail Bridge.
+//
+// Proton Mail Bridge is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Proton Mail Bridge is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Proton Mail Bridge. If not, see .
+
+//go:build windows
+
+package fido
+
+import (
+ "fmt"
+ "time"
+
+ "github.com/ProtonMail/go-proton-api"
+ "github.com/go-ctap/ctaphid/pkg/webauthntypes"
+ "github.com/go-ctap/winhello"
+ "github.com/go-ctap/winhello/window"
+)
+
+func AuthWithHardwareKeyCLI(_ CLIProvider, client *proton.Client, auth proton.Auth) error {
+ return AuthWithHardwareKeyGUI(client, auth, true)
+}
+
+func AuthWithHardwareKeyGUI(client *proton.Client, auth proton.Auth, onCLI bool) error {
+ fidoAuthData, err := extractFidoAuthData(auth)
+ if err != nil {
+ return fmt.Errorf("could not extract security key authentication data: %w", err)
+ }
+
+ var credentialDescriptors []webauthntypes.PublicKeyCredentialDescriptor
+ for _, cred := range fidoAuthData.AllowCredentials {
+ credMap, ok := cred.(map[string]interface{})
+ if !ok {
+ continue
+ }
+ idArray, ok := credMap["id"].([]interface{})
+ if !ok {
+ continue
+ }
+ credID := sliceAnyToByteArray(idArray)
+ credentialDescriptors = append(credentialDescriptors, webauthntypes.PublicKeyCredentialDescriptor{
+ ID: credID,
+ Type: webauthntypes.PublicKeyCredentialTypePublicKey,
+ })
+ }
+
+ if len(credentialDescriptors) == 0 {
+ return fmt.Errorf("no valid credential descriptors found")
+ }
+
+ windowHandler, err := window.GetForegroundWindow()
+ if err != nil {
+ return fmt.Errorf("failed to obtain window handle: %w", err)
+ }
+
+ if onCLI {
+ fmt.Println("Please use Windows Hello to authenticate.")
+ }
+ assertion, err := winhello.GetAssertion(windowHandler,
+ fidoAuthData.RpID,
+ fidoAuthData.ClientDataJSONBytes,
+ credentialDescriptors,
+ nil,
+ &winhello.AuthenticatorGetAssertionOptions{
+ Timeout: time.Second * 60,
+ AuthenticatorAttachment: winhello.WinHelloAuthenticatorAttachmentCrossPlatform,
+ UserVerificationRequirement: winhello.WinHelloUserVerificationRequirementPreferred,
+ CredentialHints: []webauthntypes.PublicKeyCredentialHint{
+ webauthntypes.PublicKeyCredentialHintSecurityKey,
+ },
+ },
+ )
+ if err != nil {
+ return fmt.Errorf("windows Hello assertion failed: %w", err)
+ }
+
+ if onCLI {
+ fmt.Println("Submitting FIDO2 authentication request.")
+ }
+
+ return authWithFido(client, auth, assertion.Credential.ID, fidoAuthData.ClientDataJSONBytes, assertion.AuthDataRaw, assertion.Signature)
+}
diff --git a/internal/fido/types.go b/internal/fido/types.go
new file mode 100644
index 00000000..75234600
--- /dev/null
+++ b/internal/fido/types.go
@@ -0,0 +1,23 @@
+// Copyright (c) 2025 Proton AG
+//
+// This file is part of Proton Mail Bridge.
+//
+// Proton Mail Bridge is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Proton Mail Bridge is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Proton Mail Bridge. If not, see .
+
+package fido
+
+type CLIProvider interface {
+ PromptAndWaitReturn(string)
+ ReadSecurityKeyPin() string
+}
diff --git a/internal/fido/utils.go b/internal/fido/utils.go
new file mode 100644
index 00000000..a49735b9
--- /dev/null
+++ b/internal/fido/utils.go
@@ -0,0 +1,111 @@
+// Copyright (c) 2025 Proton AG
+//
+// This file is part of Proton Mail Bridge.
+//
+// Proton Mail Bridge is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Proton Mail Bridge is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Proton Mail Bridge. If not, see .
+
+package fido
+
+import (
+ "context"
+ "encoding/base64"
+ "encoding/json"
+ "fmt"
+
+ "github.com/ProtonMail/go-proton-api"
+)
+
+type authData struct {
+ AllowCredentials []interface{}
+ ClientDataJSONBytes []byte
+ RpID string
+}
+
+func extractFidoAuthData(auth proton.Auth) (authData, error) {
+ authOptions, ok := auth.TwoFA.FIDO2.AuthenticationOptions.(map[string]interface{})
+ if !ok {
+ return authData{}, fmt.Errorf("invalid authentication options format")
+ }
+
+ publicKey, ok := authOptions["publicKey"].(map[string]interface{})
+ if !ok {
+ return authData{}, fmt.Errorf("no publicKey found in authentication options")
+ }
+
+ rpID, ok := publicKey["rpId"].(string)
+ if !ok {
+ return authData{}, fmt.Errorf("could not find rpId in authentication options")
+ }
+
+ challengeArray, ok := publicKey["challenge"].([]interface{})
+ if !ok {
+ return authData{}, fmt.Errorf("no challenge found in authentication options")
+ }
+ challenge := sliceAnyToByteArray(challengeArray)
+
+ allowCredentials, ok := publicKey["allowCredentials"].([]interface{})
+ if !ok || len(allowCredentials) == 0 {
+ return authData{}, fmt.Errorf("no allowed credentials found in authentication options")
+ }
+
+ clientDataJSON := map[string]interface{}{
+ "type": "webauthn.get",
+ "challenge": base64.URLEncoding.WithPadding(base64.NoPadding).EncodeToString(challenge),
+ "origin": "https://" + rpID,
+ }
+
+ clientDataJSONBytes, err := json.Marshal(clientDataJSON)
+ if err != nil {
+ return authData{}, fmt.Errorf("failed to marshal client data JSON: %w", err)
+ }
+
+ return authData{
+ AllowCredentials: allowCredentials,
+ ClientDataJSONBytes: clientDataJSONBytes,
+ RpID: rpID,
+ }, nil
+}
+
+func sliceAnyToByteArray(s []any) []byte {
+ result := make([]byte, len(s))
+ for i, val := range s {
+ if intVal, ok := val.(float64); ok {
+ result[i] = byte(intVal)
+ } else {
+ panic("boom")
+ }
+ }
+ return result
+}
+
+func authWithFido(client *proton.Client, auth proton.Auth, credentialIDs []byte, clientDataJSON []byte, authDataRaw []byte, signature []byte) error {
+ credentialIDInts := make([]int, len(credentialIDs))
+ for i, b := range credentialIDs {
+ credentialIDInts[i] = int(b)
+ }
+
+ fido2Req := proton.FIDO2Req{
+ AuthenticationOptions: auth.TwoFA.FIDO2.AuthenticationOptions,
+ ClientData: base64.StdEncoding.EncodeToString(clientDataJSON),
+ AuthenticatorData: base64.StdEncoding.EncodeToString(authDataRaw),
+ Signature: base64.StdEncoding.EncodeToString(signature),
+ CredentialID: credentialIDInts,
+ }
+
+ if err := client.Auth2FA(context.Background(), proton.Auth2FAReq{FIDO2: fido2Req}); err != nil {
+ return fmt.Errorf("FIDO2 authentication failed: %w", err)
+ }
+
+ return nil
+}
diff --git a/internal/focus/client.go b/internal/focus/client.go
index 83b4e89c..a141ea58 100644
--- a/internal/focus/client.go
+++ b/internal/focus/client.go
@@ -87,8 +87,7 @@ func withClientConn(ctx context.Context, settingsPath string, fn func(context.Co
if err != nil {
return err
}
- cc, err := grpc.DialContext(
- ctx,
+ cc, err := grpc.NewClient(
net.JoinHostPort(Host, fmt.Sprint(config.Port)),
grpc.WithTransportCredentials(insecure.NewCredentials()),
)
diff --git a/internal/focus/proto/focus.pb.go b/internal/focus/proto/focus.pb.go
index cafde844..901dfb14 100644
--- a/internal/focus/proto/focus.pb.go
+++ b/internal/focus/proto/focus.pb.go
@@ -17,8 +17,8 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.31.0
-// protoc v3.21.12
+// protoc-gen-go v1.36.6
+// protoc v5.29.5
// source: focus.proto
package proto
@@ -30,6 +30,7 @@ import (
wrapperspb "google.golang.org/protobuf/types/known/wrapperspb"
reflect "reflect"
sync "sync"
+ unsafe "unsafe"
)
const (
@@ -40,20 +41,17 @@ const (
)
type VersionResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *VersionResponse) Reset() {
*x = VersionResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_focus_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_focus_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *VersionResponse) String() string {
@@ -64,7 +62,7 @@ func (*VersionResponse) ProtoMessage() {}
func (x *VersionResponse) ProtoReflect() protoreflect.Message {
mi := &file_focus_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -88,44 +86,29 @@ func (x *VersionResponse) GetVersion() string {
var File_focus_proto protoreflect.FileDescriptor
-var file_focus_proto_rawDesc = []byte{
- 0x0a, 0x0b, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x66,
- 0x6f, 0x63, 0x75, 0x73, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
- 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x22, 0x2b, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x81,
- 0x01, 0x0a, 0x05, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x12, 0x3d, 0x0a, 0x05, 0x52, 0x61, 0x69, 0x73,
- 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a,
- 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69,
- 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x66, 0x6f, 0x63,
- 0x75, 0x73, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
- 0x2f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x4d, 0x61, 0x69, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x6e, 0x2d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2f, 0x76, 0x33, 0x2f, 0x69, 0x6e, 0x74,
- 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
+const file_focus_proto_rawDesc = "" +
+ "\n" +
+ "\vfocus.proto\x12\x05focus\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1egoogle/protobuf/wrappers.proto\"+\n" +
+ "\x0fVersionResponse\x12\x18\n" +
+ "\aversion\x18\x01 \x01(\tR\aversion2\x81\x01\n" +
+ "\x05Focus\x12=\n" +
+ "\x05Raise\x12\x1c.google.protobuf.StringValue\x1a\x16.google.protobuf.Empty\x129\n" +
+ "\aVersion\x12\x16.google.protobuf.Empty\x1a\x16.focus.VersionResponseB=Z;github.com/ProtonMail/proton-bridge/v3/internal/focus/protob\x06proto3"
var (
file_focus_proto_rawDescOnce sync.Once
- file_focus_proto_rawDescData = file_focus_proto_rawDesc
+ file_focus_proto_rawDescData []byte
)
func file_focus_proto_rawDescGZIP() []byte {
file_focus_proto_rawDescOnce.Do(func() {
- file_focus_proto_rawDescData = protoimpl.X.CompressGZIP(file_focus_proto_rawDescData)
+ file_focus_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_focus_proto_rawDesc), len(file_focus_proto_rawDesc)))
})
return file_focus_proto_rawDescData
}
var file_focus_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
-var file_focus_proto_goTypes = []interface{}{
+var file_focus_proto_goTypes = []any{
(*VersionResponse)(nil), // 0: focus.VersionResponse
(*wrapperspb.StringValue)(nil), // 1: google.protobuf.StringValue
(*emptypb.Empty)(nil), // 2: google.protobuf.Empty
@@ -147,25 +130,11 @@ func file_focus_proto_init() {
if File_focus_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_focus_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*VersionResponse); 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_focus_proto_rawDesc,
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_focus_proto_rawDesc), len(file_focus_proto_rawDesc)),
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
@@ -176,7 +145,6 @@ func file_focus_proto_init() {
MessageInfos: file_focus_proto_msgTypes,
}.Build()
File_focus_proto = out.File
- file_focus_proto_rawDesc = nil
file_focus_proto_goTypes = nil
file_focus_proto_depIdxs = nil
}
diff --git a/internal/focus/proto/focus_grpc.pb.go b/internal/focus/proto/focus_grpc.pb.go
index 3bb593c7..813f5686 100644
--- a/internal/focus/proto/focus_grpc.pb.go
+++ b/internal/focus/proto/focus_grpc.pb.go
@@ -17,8 +17,8 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
-// - protoc-gen-go-grpc v1.3.0
-// - protoc v3.21.12
+// - protoc-gen-go-grpc v1.5.1
+// - protoc v5.29.5
// source: focus.proto
package proto
@@ -34,8 +34,8 @@ import (
// 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
+// Requires gRPC-Go v1.64.0 or later.
+const _ = grpc.SupportPackageIsVersion9
const (
Focus_Raise_FullMethodName = "/focus.Focus/Raise"
@@ -45,6 +45,12 @@ const (
// FocusClient is the client API for Focus 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.
+//
+// **********************************************************************************************************************
+//
+// Service Declaration
+//
+// **********************************************************************************************************************≠––
type FocusClient interface {
Raise(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error)
Version(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*VersionResponse, error)
@@ -59,8 +65,9 @@ func NewFocusClient(cc grpc.ClientConnInterface) FocusClient {
}
func (c *focusClient) Raise(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Focus_Raise_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Focus_Raise_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -68,8 +75,9 @@ func (c *focusClient) Raise(ctx context.Context, in *wrapperspb.StringValue, opt
}
func (c *focusClient) Version(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*VersionResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(VersionResponse)
- err := c.cc.Invoke(ctx, Focus_Version_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Focus_Version_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -78,16 +86,25 @@ func (c *focusClient) Version(ctx context.Context, in *emptypb.Empty, opts ...gr
// FocusServer is the server API for Focus service.
// All implementations must embed UnimplementedFocusServer
-// for forward compatibility
+// for forward compatibility.
+//
+// **********************************************************************************************************************
+//
+// Service Declaration
+//
+// **********************************************************************************************************************≠––
type FocusServer interface {
Raise(context.Context, *wrapperspb.StringValue) (*emptypb.Empty, error)
Version(context.Context, *emptypb.Empty) (*VersionResponse, error)
mustEmbedUnimplementedFocusServer()
}
-// UnimplementedFocusServer must be embedded to have forward compatible implementations.
-type UnimplementedFocusServer struct {
-}
+// UnimplementedFocusServer must be embedded to have
+// forward compatible implementations.
+//
+// NOTE: this should be embedded by value instead of pointer to avoid a nil
+// pointer dereference when methods are called.
+type UnimplementedFocusServer struct{}
func (UnimplementedFocusServer) Raise(context.Context, *wrapperspb.StringValue) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method Raise not implemented")
@@ -96,6 +113,7 @@ func (UnimplementedFocusServer) Version(context.Context, *emptypb.Empty) (*Versi
return nil, status.Errorf(codes.Unimplemented, "method Version not implemented")
}
func (UnimplementedFocusServer) mustEmbedUnimplementedFocusServer() {}
+func (UnimplementedFocusServer) testEmbeddedByValue() {}
// UnsafeFocusServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to FocusServer will
@@ -105,6 +123,13 @@ type UnsafeFocusServer interface {
}
func RegisterFocusServer(s grpc.ServiceRegistrar, srv FocusServer) {
+ // If the following call pancis, it indicates UnimplementedFocusServer was
+ // embedded by pointer and is nil. This will cause panics if an
+ // unimplemented method is ever invoked, so we test this at initialization
+ // time to prevent it from happening at runtime later due to I/O.
+ if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
+ t.testEmbeddedByValue()
+ }
s.RegisterService(&Focus_ServiceDesc, srv)
}
diff --git a/internal/frontend/bridge-gui/bridge-gui/QMLBackend.cpp b/internal/frontend/bridge-gui/bridge-gui/QMLBackend.cpp
index 9beeb51a..c1104832 100644
--- a/internal/frontend/bridge-gui/bridge-gui/QMLBackend.cpp
+++ b/internal/frontend/bridge-gui/bridge-gui/QMLBackend.cpp
@@ -863,6 +863,12 @@ void QMLBackend::login2FA(QString const &username, QString const &code) const {
)
}
+void QMLBackend::loginFido(const QString &username, QString const &pin) const {
+ HANDLE_EXCEPTION(
+ app().grpc().loginFido(username, pin);
+ )
+}
+
//****************************************************************************************************************************************************
/// \param[in] username The username.
@@ -884,6 +890,11 @@ void QMLBackend::loginAbort(QString const &username) const {
)
}
+void QMLBackend::abortFidoAssertion(QString const &username) const {
+ HANDLE_EXCEPTION(
+ app().grpc().abortFidoAssertion(username);
+ )
+}
//****************************************************************************************************************************************************
/// \param[in] active Should DoH be active.
@@ -1206,7 +1217,6 @@ void QMLBackend::onLoginAlreadyLoggedIn(QString const &userID) {
)
}
-
//****************************************************************************************************************************************************
/// \param[in] userID The userID.
//****************************************************************************************************************************************************
@@ -1347,11 +1357,19 @@ void QMLBackend::connectGrpcEvents() {
connect(client, &GRPCClient::login2FARequested, this, &QMLBackend::login2FARequested);
connect(client, &GRPCClient::login2FAError, this, &QMLBackend::login2FAError);
connect(client, &GRPCClient::login2FAErrorAbort, this, &QMLBackend::login2FAErrorAbort);
+ connect(client, &GRPCClient::loginFidoRequested, this, &QMLBackend::loginFidoRequested);
+ connect(client, &GRPCClient::login2FAOrFidoRequested, this, &QMLBackend::login2FAOrFidoRequested);
connect(client, &GRPCClient::login2PasswordRequested, this, &QMLBackend::login2PasswordRequested);
connect(client, &GRPCClient::login2PasswordError, this, &QMLBackend::login2PasswordError);
connect(client, &GRPCClient::login2PasswordErrorAbort, this, &QMLBackend::login2PasswordErrorAbort);
connect(client, &GRPCClient::loginFinished, this, &QMLBackend::onLoginFinished);
connect(client, &GRPCClient::loginAlreadyLoggedIn, this, &QMLBackend::onLoginAlreadyLoggedIn);
+ connect(client, &GRPCClient::loginFidoTouchRequested, this, &QMLBackend::loginFidoTouchRequested);
+ connect(client, &GRPCClient::loginFidoTouchCompleted, this, &QMLBackend::loginFidoTouchCompleted);
+ connect(client, &GRPCClient::loginFidoPinRequired, this, &QMLBackend::loginFidoPinRequired);
+ connect(client, &GRPCClient::loginFidoPinInvalid, this, &QMLBackend::loginFidoPinInvalid);
+ connect(client, &GRPCClient::loginFidoPinBlocked, this, &QMLBackend::loginFidoPinBlocked);
+ connect(client, &GRPCClient::loginFidoError, this, &QMLBackend::loginFidoError);
connect(client, &GRPCClient::loginHvRequested, this, &QMLBackend::loginHvRequested);
connect(client, &GRPCClient::loginHvError, this, &QMLBackend::loginHvError);
diff --git a/internal/frontend/bridge-gui/bridge-gui/QMLBackend.h b/internal/frontend/bridge-gui/bridge-gui/QMLBackend.h
index 8eea7a82..f0edd7c2 100644
--- a/internal/frontend/bridge-gui/bridge-gui/QMLBackend.h
+++ b/internal/frontend/bridge-gui/bridge-gui/QMLBackend.h
@@ -193,8 +193,10 @@ public slots: // slot for signals received from QML -> To be forwarded to Bridge
void login(QString const &username, QString const &password) const; ///< Slot for the login button (initial login).
void loginHv(QString const &username, QString const &password) const; ///< Slot for the login button (after HV challenge completed).
void login2FA(QString const &username, QString const &code) const; ///< Slot for the login button (2FA login).
+ void loginFido(QString const &username, QString const &pin) const; ///< Slot for the authenticate button (FIDO2/Security Key login).
void login2Password(QString const &username, QString const &password) const; ///< Slot for the login button (mailbox password login).
void loginAbort(QString const &username) const; ///< Slot for the login abort procedure.
+ void abortFidoAssertion(QString const &username) const; ///< Slot for aborting the FIDO login procedure.
void toggleDoH(bool active); ///, Slot for the DoH toggle.
void toggleAutomaticUpdate(bool makeItActive); ///< Slot for the automatic update toggle
void updateCurrentMailClient(); ///< Slot for the change of the current mail client.
@@ -242,11 +244,19 @@ signals: // Signals received from the Go backend, to be forwarded to QML
void login2FARequested(QString const &username); ///< Signal for the 'login2FARequested' gRPC stream event.
void login2FAError(QString const &errorMsg); ///< Signal for the 'login2FAError' gRPC stream event.
void login2FAErrorAbort(QString const &errorMsg); ///< Signal for the 'login2FAErrorAbort' gRPC stream event.
+ void loginFidoRequested(QString const &username); ///< Signal for the 'loginFidoRequested' gRPC stream event.
+ void login2FAOrFidoRequested(QString const &username); ///qml/icons/systray-mono-warn.png
qml/icons/systray.svg
qml/icons/ic-notification-bell.svg
+ qml/icons/fingerprint.svg
../../../../dist/bridge.svg
../../../../dist/bridgeMacOS.svg
qml/KeychainSettings.qml
@@ -112,6 +113,7 @@
qml/Proton/TextArea.qml
qml/Proton/TextField.qml
qml/Proton/Toggle.qml
+ qml/Proton/Spinner.qml
qml/Resources/bug_report_flow.json
qml/Resources/Help/Template.html
qml/Resources/Help/WhyBridge.html
diff --git a/internal/frontend/bridge-gui/bridge-gui/build.ps1 b/internal/frontend/bridge-gui/bridge-gui/build.ps1
index d88a73c2..749adcdd 100644
--- a/internal/frontend/bridge-gui/bridge-gui/build.ps1
+++ b/internal/frontend/bridge-gui/bridge-gui/build.ps1
@@ -22,6 +22,7 @@ Write-host "Bridge-gui directory is $scriptDir"
Write-host "Bridge repos root dir $bridgeRepoRootDir"
Push-Location $scriptDir
+
$ErrorActionPreference = "Stop"
$cmakeExe=$(Get-Command cmake).source
diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/NotificationDialog.qml b/internal/frontend/bridge-gui/bridge-gui/qml/NotificationDialog.qml
index 918f4143..d57ef8af 100644
--- a/internal/frontend/bridge-gui/bridge-gui/qml/NotificationDialog.qml
+++ b/internal/frontend/bridge-gui/bridge-gui/qml/NotificationDialog.qml
@@ -24,6 +24,9 @@ Dialog {
property var notification
property bool isUserNotification: false
+ // Placeholder for text input label text.
+ property string textFieldText: ""
+
modal: true
shouldShow: notification && notification.active && !notification.dismissed
@@ -53,6 +56,7 @@ Dialog {
sourceSize.width: 64
visible: source != ""
}
+
Label {
Layout.alignment: Qt.AlignHCenter
Layout.bottomMargin: 8
@@ -83,6 +87,43 @@ Dialog {
implicitWidth: additionalChildrenContainer.childrenRect.width
visible: children.length > 0
}
+
+ Image {
+ Layout.alignment: Qt.AlignHCenter
+ Layout.bottomMargin: 16
+ Layout.preferredHeight: 64
+ Layout.preferredWidth: 64
+ source: root.notification.additionalImageSrc
+ sourceSize.height: 64
+ sourceSize.width: 64
+ visible: root.notification.additionalImageSrc != ""
+ }
+
+ TextField {
+ id: textField
+ Layout.fillWidth: true
+ Layout.preferredWidth: 240
+ Layout.bottomMargin: 16
+ colorScheme: root.colorScheme
+ text: root.textFieldText
+ visible: root.notification && root.notification.useTextField
+
+ onTextChanged: root.notification.textFieldChanged(text)
+
+ Connections {
+ target: root.notification
+ function onClearTextFieldRequested() {
+ root.notification.textFieldChanged("")
+ textField.clear();
+ }
+
+ function onFocusTextField() {
+ textField.focus = true;
+ }
+ }
+ }
+
+
LinkLabel {
Layout.alignment: Qt.AlignHCenter
Layout.bottomMargin: 32
@@ -94,6 +135,18 @@ Dialog {
}
+ Spinner {
+ Layout.alignment: Qt.AlignHCenter
+ colorScheme: root.colorScheme
+ Layout.bottomMargin: 16
+ Layout.preferredHeight: 64
+ Layout.preferredWidth: 64
+ size: 64
+ running: true
+ visible: root.notification && root.notification.busyIndicator
+ }
+
+
ColumnLayout {
spacing: 8
@@ -105,8 +158,7 @@ Dialog {
action: modelData
colorScheme: root.colorScheme
loading: modelData.loading
- secondary: index > 0
- }
+ secondary: modelData.forceSecondary !== undefined ? modelData.forceSecondary : index > 0 }
}
}
}
diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/NotificationPopups.qml b/internal/frontend/bridge-gui/bridge-gui/qml/NotificationPopups.qml
index 5fc59fe6..761b7066 100644
--- a/internal/frontend/bridge-gui/bridge-gui/qml/NotificationPopups.qml
+++ b/internal/frontend/bridge-gui/bridge-gui/qml/NotificationPopups.qml
@@ -109,6 +109,18 @@ Item {
colorScheme: root.colorScheme
notification: root.notifications.repairBridge
}
+ NotificationDialog {
+ colorScheme: root.colorScheme
+ notification: root.notifications.touchFidoKey
+ }
+ NotificationDialog {
+ colorScheme: root.colorScheme
+ notification: root.notifications.fidoPinRequested
+ }
+ NotificationDialog {
+ colorScheme: root.colorScheme
+ notification: root.notifications.fidoPinBlocked
+ }
UserNotificationDialog {
colorScheme: root.colorScheme
notification: root.notifications.userNotification
diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notification.qml b/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notification.qml
index cf54cd8b..c3dfedcd 100644
--- a/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notification.qml
+++ b/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notification.qml
@@ -40,6 +40,19 @@ QtObject {
property string subtitle
property string username
+ // Whether to display a spinner.
+ property bool busyIndicator: false
+
+ // Whether to display a text input field.
+ property bool useTextField: false
+
+ // Source for an additional image, won't be displayed if empty.
+ property string additionalImageSrc: ""
+
+ // Text input field operations via signals.
+ signal clearTextFieldRequested()
+ signal textFieldChanged(string value)
+ signal focusTextField()
onActiveChanged: {
dismissed = false;
diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notifications.qml b/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notifications.qml
index 7cf30e21..dee87f2d 100644
--- a/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notifications.qml
+++ b/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notifications.qml
@@ -62,7 +62,7 @@ QtObject {
target: Backend
}
}
- property var all: [root.noInternet, root.imapPortStartupError, root.smtpPortStartupError, root.imapPortChangeError, root.smtpPortChangeError, root.imapConnectionModeChangeError, root.smtpConnectionModeChangeError, root.updateManualReady, root.updateManualRestartNeeded, root.updateManualError, root.updateForce, root.updateForceError, root.updateSilentRestartNeeded, root.updateSilentError, root.updateIsLatestVersion, root.loginConnectionError, root.onlyPaidUsers, root.alreadyLoggedIn, root.enableBeta, root.bugReportSendSuccess, root.bugReportSendError, root.bugReportSendFallback, root.cacheCantMove, root.cacheLocationChangeSuccess, root.enableSplitMode, root.resetBridge, root.changeAllMailVisibility, root.deleteAccount, root.noKeychain, root.rebuildKeychain, root.addressChanged, root.apiCertIssue, root.userBadEvent, root.imapLoginWhileSignedOut, root.genericError, root.genericQuestion, root.hvErrorEvent, root.repairBridge, root.userNotification]
+ property var all: [root.noInternet, root.imapPortStartupError, root.smtpPortStartupError, root.imapPortChangeError, root.smtpPortChangeError, root.imapConnectionModeChangeError, root.smtpConnectionModeChangeError, root.updateManualReady, root.updateManualRestartNeeded, root.updateManualError, root.updateForce, root.updateForceError, root.updateSilentRestartNeeded, root.updateSilentError, root.updateIsLatestVersion, root.loginConnectionError, root.onlyPaidUsers, root.alreadyLoggedIn, root.enableBeta, root.bugReportSendSuccess, root.bugReportSendError, root.bugReportSendFallback, root.cacheCantMove, root.cacheLocationChangeSuccess, root.enableSplitMode, root.resetBridge, root.changeAllMailVisibility, root.deleteAccount, root.noKeychain, root.rebuildKeychain, root.addressChanged, root.apiCertIssue, root.userBadEvent, root.imapLoginWhileSignedOut, root.genericError, root.genericQuestion, root.hvErrorEvent, root.repairBridge, root.userNotification, root.touchFidoKey, root.fidoPinRequested, root.fidoPinBlocked, root.fidoErrorEvent]
property Notification alreadyLoggedIn: Notification {
brief: qsTr("Already signed in")
description: qsTr("This account is already signed in.")
@@ -1229,6 +1229,170 @@ QtObject {
}
}
+
+ property Notification touchFidoKey: Notification {
+ title: qsTr("Touch your security key")
+ description: qsTr("To complete authentication, touch the button or sensor on your security key.")
+ group: Notifications.Group.Dialogs
+ icon: "./icons/ic-exclamation-circle-filled.svg"
+ type: Notification.NotificationType.Info
+ additionalImageSrc: "./icons/fingerprint.svg"
+
+ function reset() {
+ root.touchFidoKey.active = false;
+ root.touchFidoKey.busyIndicator = false;
+ root.touchFidoKey.additionalImageSrc = "./icons/fingerprint.svg";
+ }
+
+ action: [
+ Action {
+ id: touchFidoKey_cancel
+ text: qsTr("Cancel")
+ property bool forceSecondary: true
+
+ onTriggered: {
+ Backend.abortFidoAssertion(root.touchFidoKey.username);
+ root.touchFidoKey.reset();
+ }
+ }
+ ]
+
+ Connections {
+ function onLoginFidoTouchRequested(username) {
+ root.touchFidoKey.username = username;
+ root.touchFidoKey.active = true;
+ touchFidoKey_cancel.enabled = true;
+ }
+ function onLoginFidoTouchCompleted(_) {
+ root.touchFidoKey.additionalImageSrc = "";
+ root.touchFidoKey.busyIndicator = true;
+ touchFidoKey_cancel.enabled = false;
+ }
+ function onLoginFidoPinInvalid(_) {
+ root.touchFidoKey.reset();
+ }
+ function onLoginFinished(_) {
+ root.touchFidoKey.reset();
+ }
+ function onLoginFidoError(errorMsg) {
+ root.touchFidoKey.reset();
+ }
+ target: Backend
+ }
+ }
+
+ property Notification fidoPinRequested: Notification {
+ property string fidoPinInput: ""
+
+ title: qsTr("Enter security key PIN")
+ description: qsTr("To continue, enter the PIN for your security key.")
+ group: Notifications.Group.Dialogs
+ icon: "./icons/ic-exclamation-circle-filled.svg"
+ type: Notification.NotificationType.Info
+ useTextField: true
+
+ onTextFieldChanged: function(value) {
+ root.fidoPinRequested.fidoPinInput = value;
+ }
+
+ function reset() {
+ root.fidoPinRequested.active = false;
+ root.fidoPinRequested.clearTextFieldRequested();
+ root.fidoPinRequested.type = Notification.NotificationType.Info;
+ }
+ function clearAndFocusTextField() {
+ root.fidoPinRequested.clearTextFieldRequested();
+ root.fidoPinRequested.focusTextField()
+ }
+
+ action: [
+ Action {
+ text: qsTr("Continue")
+ onTriggered: {
+ Backend.loginFido("", Qt.btoa(root.fidoPinRequested.fidoPinInput));
+ root.fidoPinRequested.reset();
+ }
+ },
+ Action {
+ text: qsTr("Cancel")
+ onTriggered: {
+ root.fidoPinRequested.reset();
+ }
+ }
+ ]
+
+ Connections {
+ function onLoginFidoPinRequired(_) {
+ root.fidoPinRequested.clearAndFocusTextField();
+ root.fidoPinRequested.active = true;
+ }
+ function onLoginFidoPinInvalid(_) {
+ root.fidoPinRequested.clearAndFocusTextField();
+ root.fidoPinRequested.active = true;
+ root.fidoPinRequested.description = qsTr("The PIN you entered is incorrect. Try again.");
+ root.fidoPinRequested.type = Notification.NotificationType.Warning;
+ }
+ function onLoginFidoTouchRequested(_) {
+ root.fidoPinRequested.reset();
+ }
+ function onLoginFinished(_) {
+ root.fidoPinRequested.reset();
+ }
+ function onLoginFidoError(errorMsg) {
+ root.fidoPinRequested.reset();
+ }
+ target: Backend
+ }
+ }
+
+ property Notification fidoPinBlocked: Notification {
+ title: qsTr("Security key PIN blocked")
+ description: qsTr("Your security key PIN is blocked due to too many failed attempts. Try removing and re-inserting your key, or check your security key's documentation for unlock instructions.")
+ group: Notifications.Group.Dialogs
+ icon: "./icons/ic-exclamation-circle-filled.svg"
+ type: Notification.NotificationType.Danger
+
+ action: [
+ Action {
+ text: qsTr("OK")
+ onTriggered: {
+ root.fidoPinBlocked.active = false;
+ root.touchFidoKey.reset();
+ root.fidoPinRequested.reset();
+ }
+ }
+ ]
+
+ Connections {
+ function onLoginFidoPinBlocked(_) {
+ root.fidoPinBlocked.active = true;
+ }
+ target: Backend
+ }
+ }
+
+ property Notification fidoErrorEvent: Notification {
+ group: Notifications.Group.Configuration
+ icon: "./icons/ic-exclamation-circle-filled.svg"
+ type: Notification.NotificationType.Danger
+
+ action: Action {
+ text: qsTr("OK")
+ onTriggered: {
+ root.fidoErrorEvent.active = false;
+ }
+ }
+
+ Connections {
+ function onLoginFidoError(errorMsg) {
+ root.fidoErrorEvent.active = true;
+ root.fidoErrorEvent.description = errorMsg;
+ }
+ target: Backend
+ }
+
+ }
+
signal askChangeAllMailVisibility(var isVisibleNow)
signal askDeleteAccount(var user)
signal askEnableBeta
diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/Proton/Spinner.qml b/internal/frontend/bridge-gui/bridge-gui/qml/Proton/Spinner.qml
new file mode 100644
index 00000000..0051afa2
--- /dev/null
+++ b/internal/frontend/bridge-gui/bridge-gui/qml/Proton/Spinner.qml
@@ -0,0 +1,52 @@
+// Copyright (c) 2025 Proton AG
+// This file is part of Proton Mail Bridge.
+// Proton Mail Bridge is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+// Proton Mail Bridge is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+// You should have received a copy of the GNU General Public License
+// along with Proton Mail Bridge. If not, see .
+
+import QtQuick
+import QtQuick.Controls.impl
+
+Item {
+ id: root
+
+ property ColorScheme colorScheme: ProtonStyle.currentStyle
+ property color color: colorScheme.interaction_norm
+ property int size: 16
+ property bool running: true
+ property int duration: 1000
+ property string source: "/qml/icons/Loader_48.svg"
+
+ implicitWidth: size
+ implicitHeight: size
+
+ ColorImage {
+ id: spinnerImage
+ anchors.centerIn: parent
+ width: root.size
+ height: root.size
+ source: root.source
+ color: root.color
+ sourceSize.width: root.size
+ sourceSize.height: root.size
+ visible: root.running
+
+ RotationAnimation {
+ target: spinnerImage
+ property: "rotation"
+ from: 0
+ to: 360
+ duration: root.duration
+ loops: Animation.Infinite
+ running: root.running
+ direction: RotationAnimation.Clockwise
+ }
+ }
+}
\ No newline at end of file
diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/Proton/qmldir b/internal/frontend/bridge-gui/bridge-gui/qml/Proton/qmldir
index a00cb1b6..2a68ee00 100644
--- a/internal/frontend/bridge-gui/bridge-gui/qml/Proton/qmldir
+++ b/internal/frontend/bridge-gui/bridge-gui/qml/Proton/qmldir
@@ -40,3 +40,4 @@ TextField 4.0 TextField.qml
Toggle 4.0 Toggle.qml
WebFrame 4.0 WebFrame.qml
ContextMenu 4.0 ContextMenu.qml
+Spinner 1.0 Spinner.qml
\ No newline at end of file
diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/SetupWizard/Login.qml b/internal/frontend/bridge-gui/bridge-gui/qml/SetupWizard/Login.qml
index 2b5f0cb7..70d39959 100644
--- a/internal/frontend/bridge-gui/bridge-gui/qml/SetupWizard/Login.qml
+++ b/internal/frontend/bridge-gui/bridge-gui/qml/SetupWizard/Login.qml
@@ -21,6 +21,8 @@ FocusScope {
enum RootStack {
Login,
TOTP,
+ FIDO,
+ TOTPOrFIDO,
MailboxPassword,
HV
}
@@ -51,6 +53,7 @@ FocusScope {
passwordTextField.hidePassword();
secondPasswordTextField.hidePassword();
hvLinkClicked = false;
+ fidoLayout.reset();
}
function resetViaHv() {
usernameTextField.enabled = false;
@@ -93,6 +96,29 @@ FocusScope {
twoFactorUsernameLabel.text = username;
stackLayout.currentIndex = Login.RootStack.TOTP;
twoFactorPasswordTextField.focus = true;
+ switchToTotpButton.visible = false;
+ switchToFidoButton.visible = false;
+ }
+ function onLoginFidoRequested(username) {
+ fidoUsernameLabel.text = username;
+ stackLayout.currentIndex = Login.RootStack.FIDO;
+ switchToTotpButton.visible = false;
+ switchToFidoButton.visible = false;
+ }
+ function onLogin2FAOrFidoRequested(username) {
+ fidoUsernameLabel.text = username;
+ twoFactorUsernameLabel.text = username;
+ stackLayout.currentIndex = Login.RootStack.FIDO;
+ switchToTotpButton.visible = true;
+ switchToFidoButton.visible = true;
+ }
+ function onLoginFidoPinBlocked(_) {
+ console.assert(stackLayout.currentIndex === Login.RootStack.FIDO, "Unexpected onLoginFidoPinBlocked");
+ root.reset();
+ }
+ function onLoginFidoError(_) {
+ console.assert(stackLayout.currentIndex === Login.RootStack.FIDO || stackLayout.currentIndex === Login.RootStack.Login, "Unexpected loginFidoError");
+ root.reset();
}
function onLogin2PasswordError(_) {
console.assert(stackLayout.currentIndex === Login.RootStack.MailboxPassword, "Unexpected login2PasswordError");
@@ -352,7 +378,7 @@ FocusScope {
Layout.fillWidth: true
colorScheme: wizard.colorScheme
horizontalAlignment: Text.AlignHCenter
- text: qsTr("You have enabled two-factor authentication. Please enter the 6-digit code provided by your authenticator application.")
+ text: qsTr("You have enabled two-factor authentication. Enter the 6-digit code provided by your authenticator application.")
type: Label.LabelType.Body
wrapMode: Text.WordWrap
}
@@ -406,6 +432,117 @@ FocusScope {
root.abort();
}
}
+ Label {
+ id: switchToFidoButton
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignHCenter
+ colorScheme: wizard.colorScheme
+ horizontalAlignment: Text.AlignHCenter
+ text: "" + qsTr("Use security key instead") + ""
+
+ MouseArea {
+ anchors.fill: parent
+ cursorShape: Qt.PointingHandCursor
+ enabled: !twoFAButton.loading
+ onClicked: {
+ stackLayout.currentIndex = Login.RootStack.FIDO;
+ fidoLayout.reset();
+ totpLayout.reset();
+ }
+ }
+ }
+ }
+ }
+ Item {
+ ColumnLayout {
+ id: fidoLayout
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ spacing: ProtonStyle.wizard_spacing_medium
+
+ function reset() {
+ fidoButton.loading = false;
+ }
+
+ ColumnLayout {
+ Layout.fillWidth: true
+ spacing: ProtonStyle.wizard_spacing_small
+
+ Label {
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: true
+ colorScheme: wizard.colorScheme
+ horizontalAlignment: Text.AlignHCenter
+ text: qsTr("Security key authentication")
+ type: Label.LabelType.Title
+ }
+ Label {
+ id: fidoUsernameLabel
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: true
+ color: wizard.colorScheme.text_weak
+ colorScheme: wizard.colorScheme
+ horizontalAlignment: Text.AlignHCenter
+ text: ""
+ type: Label.LabelType.Body
+ }
+ }
+ Label {
+ id: fidoDescriptionLabel
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: true
+ colorScheme: wizard.colorScheme
+ horizontalAlignment: Text.AlignHCenter
+ text: qsTr("Security key authentication is enabled. Please connect your security key.")
+ type: Label.LabelType.Body
+ wrapMode: Text.WordWrap
+ }
+ Button {
+ id: fidoButton
+ Layout.fillWidth: true
+ colorScheme: wizard.colorScheme
+ enabled: !loading
+ text: loading ? qsTr("Authenticating") : qsTr("Authenticate")
+
+ onClicked: {
+ if (Backend.goos === "windows") {
+ fidoButton.loading = true;
+ }
+ Backend.loginFido(usernameTextField.text, "");
+ }
+ }
+ Button {
+ Layout.fillWidth: true
+ colorScheme: wizard.colorScheme
+ enabled: !fidoButton.loading
+ secondary: true
+ secondaryIsOpaque: true
+ text: qsTr("Cancel")
+
+ onClicked: {
+ root.abort();
+ }
+ }
+ Label {
+ id: switchToTotpButton
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignHCenter
+ colorScheme: wizard.colorScheme
+ horizontalAlignment: Text.AlignHCenter
+ text: "" + qsTr("Use authenticator app instead") + ""
+
+ MouseArea {
+ anchors.fill: parent
+ cursorShape: Qt.PointingHandCursor
+ enabled: !fidoButton.loading
+ onClicked: {
+ stackLayout.currentIndex = Login.RootStack.TOTP;
+ fidoLayout.reset();
+ totpLayout.reset();
+ }
+ }
+ }
}
}
Item {
@@ -499,7 +636,9 @@ FocusScope {
text: qsTr("Cancel")
onClicked: {
- root.abort();
+ stackLayout.currentIndex = Login.RootStack.TOTP;
+ twoFactorPasswordTextField.focus = true;
+
}
}
}
diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/icons/fingerprint.svg b/internal/frontend/bridge-gui/bridge-gui/qml/icons/fingerprint.svg
new file mode 100644
index 00000000..fe9c3f6c
--- /dev/null
+++ b/internal/frontend/bridge-gui/bridge-gui/qml/icons/fingerprint.svg
@@ -0,0 +1,4 @@
+
diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.cpp b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.cpp
index 0e05cf5b..51a410a2 100644
--- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.cpp
+++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.cpp
@@ -302,6 +302,32 @@ SPStreamEvent newLoginTfaRequestedEvent(QString const &username) {
}
+//****************************************************************************************************************************************************
+/// \param[in] username The username.
+/// \return The event.
+//****************************************************************************************************************************************************
+SPStreamEvent newLoginFidoRequestedEvent(QString const &username) {
+ auto event = new ::grpc::LoginFidoRequestedEvent;
+ event->set_username(username.toStdString());
+ auto loginEvent = new grpc::LoginEvent;
+ loginEvent->set_allocated_fidorequested(event);
+ return wrapLoginEvent(loginEvent);
+}
+
+
+//****************************************************************************************************************************************************
+/// \param[in] username The username.
+/// \return The event.
+//****************************************************************************************************************************************************
+SPStreamEvent newLoginTfaOrFidoRequestedEvent(QString const &username) {
+ auto event = new ::grpc::LoginTfaOrFidoRequestedEvent;
+ event->set_username(username.toStdString());
+ auto loginEvent = new grpc::LoginEvent;
+ loginEvent->set_allocated_tfaorfidorequested(event);
+ return wrapLoginEvent(loginEvent);
+ }
+
+
//****************************************************************************************************************************************************
/// \return The event.
//****************************************************************************************************************************************************
diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.h b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.h
index 90648467..e888fb41 100644
--- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.h
+++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/EventFactory.h
@@ -48,7 +48,9 @@ SPStreamEvent newLoginTfaRequestedEvent(QString const &username); ///< Create a
SPStreamEvent newLoginTwoPasswordsRequestedEvent(QString const &username); ///< Create a new LoginTwoPasswordsRequestedEvent event.
SPStreamEvent newLoginFinishedEvent(QString const &userID, bool wasSignedOut); ///< Create a new LoginFinishedEvent event.
SPStreamEvent newLoginAlreadyLoggedInEvent(QString const &userID); ///< Create a new LoginAlreadyLoggedInEvent event.
-SPStreamEvent newLoginHvRequestedEvent(); ///< Create a new LoginHvRequestedEvent
+SPStreamEvent newLoginHvRequestedEvent(); ///< Create a new LoginHvRequestedEvent.
+SPStreamEvent newLoginFidoRequestedEvent(QString const &username); ///< Create a new LoginFidoRequestedEvent.
+SPStreamEvent newLoginTfaOrFidoRequestedEvent(QString const &username); ///< Create a new LoginTfaOrFidoRequestedEvent.
// Update related events
SPStreamEvent newUpdateErrorEvent(grpc::UpdateErrorType errorType); ///< Create a new UpdateErrorEvent event.
diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.cpp b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.cpp
index e8d60d3e..19484bf9 100644
--- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.cpp
+++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.cpp
@@ -632,6 +632,28 @@ grpc::Status GRPCClient::login2FA(QString const &username, QString const &code)
return this->logGRPCCallStatus(stub_->Login2FA(this->clientContext().get(), request, &empty), __FUNCTION__);
}
+//****************************************************************************************************************************************************
+/// \param[in] username The username.
+/// \param[in] code The Security key PIN.
+/// \return the status for the gRPC call.
+//****************************************************************************************************************************************************
+grpc::Status GRPCClient::loginFido(const QString &username, const QString &pin) {
+ LoginRequest request;
+ request.set_username(username.toStdString());
+ request.set_password(pin.toStdString());
+ return this->logGRPCCallStatus(stub_->LoginFido(this->clientContext().get(), request, &empty), __FUNCTION__ );
+}
+
+//****************************************************************************************************************************************************
+/// \param[in] username The username.
+/// \return the status for the gRPC call.
+//****************************************************************************************************************************************************
+grpc::Status GRPCClient::abortFidoAssertion(const QString &username) {
+ LoginAbortRequest request;
+ request.set_username(username.toStdString());
+ return this->logGRPCCallStatus(stub_->FidoAssertionAbort(this->clientContext().get(), request, &empty), __FUNCTION__);
+}
+
//****************************************************************************************************************************************************
/// \param[in] username The username.
@@ -1256,6 +1278,15 @@ void GRPCClient::processLoginEvent(LoginEvent const &event) {
case HV_ERROR:
emit loginHvError(QString::fromStdString(error.message()));
break;
+ case FIDO_PIN_INVALID:
+ emit loginFidoPinInvalid(QString::fromStdString(error.message()));
+ break;
+ case FIDO_PIN_BLOCKED:
+ emit loginFidoPinBlocked(QString::fromStdString(error.message()));
+ break;
+ case FIDO_ERROR:
+ emit loginFidoError(QString::fromStdString(error.message()));
+ break;
default:
this->logError("Unknown login error event received.");
break;
@@ -1266,6 +1297,14 @@ void GRPCClient::processLoginEvent(LoginEvent const &event) {
this->logTrace("Login event received: TfaRequested.");
emit login2FARequested(QString::fromStdString(event.tfarequested().username()));
break;
+ case LoginEvent::kFidoRequested:
+ this->logTrace("Login event received: FidoRequested.");
+ emit loginFidoRequested(QString::fromStdString(event.fidorequested().username()));
+ break;
+ case LoginEvent::kTfaOrFidoRequested:
+ this->logTrace("Login event received: TfaOrFidoRequested.");
+ emit login2FAOrFidoRequested(QString::fromStdString(event.tfaorfidorequested().username()));
+ break;
case LoginEvent::kTwoPasswordRequested:
this->logTrace("Login event received: TwoPasswordRequested.");
emit login2PasswordRequested(QString::fromStdString(event.twopasswordrequested().username()));
@@ -1284,6 +1323,18 @@ void GRPCClient::processLoginEvent(LoginEvent const &event) {
this->logTrace("Login event Received: HvRequested");
emit loginHvRequested(QString::fromStdString(event.hvrequested().hvurl()));
break;
+ case LoginEvent::kLoginFidoTouchRequested:
+ this->logTrace("Login event received: FidoTouchRequested");
+ emit loginFidoTouchRequested(QString::fromStdString(event.loginfidotouchrequested().username()));
+ break;
+ case LoginEvent::kLoginFidoTouchCompleted:
+ this->logTrace("Login event received: FidoTouchCompleted");
+ emit loginFidoTouchCompleted(QString::fromStdString(event.loginfidotouchcompleted().username()));
+ break;
+ case LoginEvent::kLoginFidoPinRequired:
+ this->logTrace("Login event received: FidoPinRequired");
+ emit loginFidoPinRequired(QString::fromStdString(event.loginfidopinrequired().username()));
+ break;
default:
this->logError("Unknown Login event received.");
break;
diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.h b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.h
index 3a7e3d0f..eed9426f 100644
--- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.h
+++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.h
@@ -175,9 +175,11 @@ signals:
public: // login related calls
grpc::Status login(QString const &username, QString const &password); ///< Performs the 'login' call.
grpc::Status login2FA(QString const &username, QString const &code); ///< Performs the 'login2FA' call.
+ grpc::Status loginFido(QString const &username, QString const &pin); ///< Performs the 'loginFido' call.
grpc::Status login2Passwords(QString const &username, QString const &password); ///< Performs the 'login2Passwords' call.
grpc::Status loginAbort(QString const &username); ///< Performs the 'loginAbort' call.
- grpc::Status loginHv(QString const &username, QString const &password); ///< Performs the 'login' call with additional useHv flag
+ grpc::Status loginHv(QString const &username, QString const &password); ///< Performs the 'login' call with additional useHv flag.
+ grpc::Status abortFidoAssertion(const QString &username); ///< Performs the 'abortFidoAssertion' call.
signals:
void loginUsernamePasswordError(QString const &errMsg);
@@ -186,6 +188,8 @@ signals:
void login2FARequested(QString const &username);
void login2FAError(QString const &errMsg);
void login2FAErrorAbort(QString const &errMsg);
+ void loginFidoRequested(QString const &username);
+ void login2FAOrFidoRequested(QString const &username);
void login2PasswordRequested(QString const &username);
void login2PasswordError(QString const &errMsg);
void login2PasswordErrorAbort(QString const &errMsg);
@@ -193,6 +197,12 @@ signals:
void loginAlreadyLoggedIn(QString const &userID);
void loginHvRequested(QString const &hvUrl);
void loginHvError(QString const &errMsg);
+ void loginFidoTouchRequested(QString const &username);
+ void loginFidoTouchCompleted(QString const &username);
+ void loginFidoPinRequired(QString const &username);
+ void loginFidoPinInvalid(QString const &errMsg);
+ void loginFidoPinBlocked(QString const &errMsg);
+ void loginFidoError(QString const &errMsg);
public: // Update related calls
grpc::Status checkUpdate();
diff --git a/internal/frontend/cli/accounts.go b/internal/frontend/cli/accounts.go
index 83e38833..8e634d9d 100644
--- a/internal/frontend/cli/accounts.go
+++ b/internal/frontend/cli/accounts.go
@@ -19,6 +19,7 @@ package cli
import (
"context"
+ "errors"
"fmt"
"strings"
@@ -26,7 +27,9 @@ import (
"github.com/ProtonMail/proton-bridge/v3/internal/bridge"
"github.com/ProtonMail/proton-bridge/v3/internal/certs"
"github.com/ProtonMail/proton-bridge/v3/internal/constants"
+ "github.com/ProtonMail/proton-bridge/v3/internal/fido"
"github.com/ProtonMail/proton-bridge/v3/internal/hv"
+ "github.com/ProtonMail/proton-bridge/v3/internal/unleash"
"github.com/ProtonMail/proton-bridge/v3/internal/vault"
"github.com/abiosoft/ishell"
)
@@ -174,22 +177,39 @@ func (f *frontendCLI) loginAccount(c *ishell.Context) {
return
}
- if auth.TwoFA.Enabled&proton.HasTOTP != 0 {
- if len(auth.TwoFA.FIDO2.RegisteredKeys) > 0 && f.yesNoQuestion("Do you want to use a security key for Two-factor authentication") {
- if err := f.authWithHardwareKey(client, auth); err != nil {
- f.printAndLogError("Cannot login: ", err)
- return
- }
- } else {
- code := f.readStringInAttempts("Two factor code", c.ReadLine, isNotEmpty)
- if code == "" {
- f.printAndLogError("Cannot login: need two factor code")
- }
+ u2fLoginEnabled := f.bridge.GetFeatureFlagValue(unleash.InboxBridgeU2FLoginEnabled)
- if err := client.Auth2FA(context.Background(), proton.Auth2FAReq{TwoFactorCode: code}); err != nil {
+ switch auth.TwoFA.Enabled {
+ case proton.HasTOTP:
+ if err := f.loginTOTP(c, client); err != nil {
+ f.printAndLogError("Cannot login: ", err)
+ return
+ }
+
+ case proton.HasFIDO2:
+ if !u2fLoginEnabled {
+ // This case may only occur for internal users.
+ f.printAndLogError("Cannot login: Security key authentication required but not enabled in server configuration.")
+ return
+ }
+
+ if len(auth.TwoFA.FIDO2.RegisteredKeys) == 0 {
+ f.printAndLogError("Cannot login: Security key login is required, but no registered keys were provided.")
+ }
+ if err := fido.AuthWithHardwareKeyCLI(f, client, auth); err != nil {
+ f.printAndLogError("Cannot login: ", err)
+ return
+ }
+
+ case proton.HasFIDO2AndTOTP:
+ if u2fLoginEnabled && len(auth.TwoFA.FIDO2.RegisteredKeys) > 0 && f.yesNoQuestion("Do you want to use a security key for Two-factor authentication") {
+ if err := fido.AuthWithHardwareKeyCLI(f, client, auth); err != nil {
f.printAndLogError("Cannot login: ", err)
return
}
+ } else if err := f.loginTOTP(c, client); err != nil {
+ f.printAndLogError("Cannot login: ", err)
+ return
}
}
@@ -230,6 +250,15 @@ func (f *frontendCLI) loginAccount(c *ishell.Context) {
f.Printf("Account %s was added successfully.\n", bold(user.Username))
}
+func (f *frontendCLI) loginTOTP(c *ishell.Context, client *proton.Client) error {
+ code := f.readStringInAttempts("Two factor code", c.ReadLine, isNotEmpty)
+ if code == "" {
+ return errors.New("need two factor code")
+ }
+
+ return client.Auth2FA(context.Background(), proton.Auth2FAReq{TwoFactorCode: code})
+}
+
func (f *frontendCLI) loginAccountHv(c *ishell.Context, loginName string, password string, keyPass []byte, hvDetails *proton.APIHVDetails) {
f.promptHvURL(hvDetails)
client, auth, err := f.bridge.LoginAuth(context.Background(), loginName, []byte(password), hvDetails)
diff --git a/internal/frontend/cli/u2f.go b/internal/frontend/cli/u2f.go
deleted file mode 100644
index bcbeaf4c..00000000
--- a/internal/frontend/cli/u2f.go
+++ /dev/null
@@ -1,171 +0,0 @@
-//go:build linux || darwin
-
-package cli
-
-import (
- "context"
- "crypto/sha256"
- "encoding/base64"
- "encoding/json"
- "errors"
- "fmt"
-
- "github.com/ProtonMail/go-proton-api"
- "github.com/fxamacker/cbor/v2"
- "github.com/keys-pub/go-libfido2"
-)
-
-func (f *frontendCLI) authWithHardwareKey(client *proton.Client, auth proton.Auth) error {
- var fido2Device *libfido2.DeviceLocation
-
- retryCount := 0
- for {
- locs, err := libfido2.DeviceLocations()
- if err != nil {
- f.printAndLogError("Cannot retrieve security key list: ", err)
- }
- if len(locs) == 0 {
- fmt.Print("Please insert your security key and press enter to continue.")
- f.ReadLine()
- } else {
- fido2Device = locs[0]
- break
- }
-
- retryCount++
- if retryCount >= 3 {
- break
- }
- }
-
- if fido2Device == nil {
- return errors.New("no device found")
- }
-
- dev, err := libfido2.NewDevice(fido2Device.Path)
- if err != nil {
- return fmt.Errorf("cannot open security key: %w", err)
- }
-
- // Check if the key has a PIN set first
- var pin string
- info, err := dev.Info()
- if err != nil {
- return fmt.Errorf("cannot get device info: %w", err)
- }
-
- // Check if clientPin option is available and set
- pinSupported := false
- for _, option := range info.Options {
- if option.Name == "clientPin" && option.Value == libfido2.True {
- pinSupported = true
- break
- }
- }
-
- if pinSupported {
- pin = f.readStringInAttempts("Security key PIN", f.ReadPassword, isNotEmpty)
- if pin == "" {
- return errors.New("PIN is required for this security key")
- }
- }
-
- fmt.Println("Please touch your security key...")
-
- authOptions, ok := auth.TwoFA.FIDO2.AuthenticationOptions.(map[string]interface{})
- if !ok {
- return errors.New("invalid authentication options format")
- }
-
- publicKey, ok := authOptions["publicKey"].(map[string]interface{})
- if !ok {
- return errors.New("no publicKey found in authentication options")
- }
-
- allowCredentials, ok := publicKey["allowCredentials"].([]interface{})
- if !ok || len(allowCredentials) == 0 {
- return errors.New("no allowed credentials found in authentication options")
- }
-
- var credentialIDs [][]byte //nolint:prealloc
- for _, cred := range allowCredentials {
- credMap, ok := cred.(map[string]interface{})
- if !ok {
- continue
- }
- idArray, ok := credMap["id"].([]interface{})
- if !ok {
- continue
- }
- credID := sliceAnyToByteArray(idArray)
- credentialIDs = append(credentialIDs, credID)
- }
-
- if len(credentialIDs) == 0 {
- return errors.New("no valid credential IDs found")
- }
-
- challengeArray, ok := publicKey["challenge"].([]interface{})
- if !ok {
- return errors.New("no challenge found in authentication options")
- }
- challenge := sliceAnyToByteArray(challengeArray)
-
- rpID, ok := publicKey["rpId"].(string)
- if !ok {
- return errors.New("could not find rpId in authentication options")
- }
-
- clientDataJSON := map[string]interface{}{
- "type": "webauthn.get",
- "challenge": base64.URLEncoding.EncodeToString(challenge),
- "origin": "https://" + rpID,
- }
-
- clientDataJSONBytes, err := json.Marshal(clientDataJSON)
- if err != nil {
- return fmt.Errorf("cannot marshal client data: %w", err)
- }
-
- clientDataHash := sha256.Sum256(clientDataJSONBytes)
-
- assertion, err := dev.Assertion(
- rpID,
- clientDataHash[:],
- credentialIDs,
- pin,
- &libfido2.AssertionOpts{UP: libfido2.True},
- )
- if err != nil {
- return fmt.Errorf("FIDO2 assertion failed: %w", err)
- }
-
- // Decode CBOR to get raw authenticator data
- var authData []byte
- err = cbor.Unmarshal(assertion.AuthDataCBOR, &authData)
- if err != nil {
- return fmt.Errorf("failed to decode CBOR authenticator data: %w", err)
- }
-
- // Convert CredentialID bytes to array of integers
- credentialIDInts := make([]int, len(assertion.CredentialID))
- for i, b := range assertion.CredentialID {
- credentialIDInts[i] = int(b)
- }
-
- fido2Req := proton.FIDO2Req{
- AuthenticationOptions: auth.TwoFA.FIDO2.AuthenticationOptions,
- ClientData: base64.StdEncoding.EncodeToString(clientDataJSONBytes),
- AuthenticatorData: base64.StdEncoding.EncodeToString(authData),
- Signature: base64.StdEncoding.EncodeToString(assertion.Sig),
- CredentialID: credentialIDInts,
- }
-
- fmt.Println("Submitting FIDO2 authentication request.")
- if err := client.Auth2FA(context.Background(), proton.Auth2FAReq{FIDO2: fido2Req}); err != nil {
- return fmt.Errorf("FIDO2 authentication failed: %w", err)
- }
-
- fmt.Println("FIDO2 authentication succeeded")
- return nil
-}
diff --git a/internal/frontend/cli/u2f_windows.go b/internal/frontend/cli/u2f_windows.go
deleted file mode 100644
index a0307468..00000000
--- a/internal/frontend/cli/u2f_windows.go
+++ /dev/null
@@ -1,126 +0,0 @@
-//go:build windows
-
-package cli
-
-import (
- "context"
- "encoding/base64"
- "encoding/json"
- "fmt"
- "log/slog"
-
- "github.com/ProtonMail/go-proton-api"
- "github.com/go-ctap/ctaphid/pkg/webauthntypes"
- "github.com/go-ctap/winhello"
- "github.com/go-ctap/winhello/hiddenwindow"
-)
-
-func (f *frontendCLI) authWithHardwareKey(client *proton.Client, auth proton.Auth) error {
- // Windows Hello requires a window handle to work, as indicated by the docs of the lib.
- wnd, err := hiddenwindow.New(slog.New(slog.DiscardHandler), "Proton Bridge Auth")
- if err != nil {
- return fmt.Errorf("failed to create window for Windows Hello: %w", err)
- }
- defer wnd.Close()
-
- authOptions, ok := auth.TwoFA.FIDO2.AuthenticationOptions.(map[string]interface{})
- if !ok {
- return fmt.Errorf("invalid authentication options format")
- }
-
- publicKey, ok := authOptions["publicKey"].(map[string]interface{})
- if !ok {
- return fmt.Errorf("no publicKey found in authentication options")
- }
-
- rpId, ok := publicKey["rpId"].(string)
- if !ok {
- return fmt.Errorf("could not find rpId in authentication options")
- }
-
- challengeArray, ok := publicKey["challenge"].([]interface{})
- if !ok {
- return fmt.Errorf("no challenge found in authentication options")
- }
- challenge := sliceAnyToByteArray(challengeArray)
-
- allowCredentials, ok := publicKey["allowCredentials"].([]interface{})
- if !ok || len(allowCredentials) == 0 {
- return fmt.Errorf("no allowed credentials found in authentication options")
- }
-
- var credentialDescriptors []webauthntypes.PublicKeyCredentialDescriptor
- for _, cred := range allowCredentials {
- credMap, ok := cred.(map[string]interface{})
- if !ok {
- continue
- }
- idArray, ok := credMap["id"].([]interface{})
- if !ok {
- continue
- }
- credID := sliceAnyToByteArray(idArray)
-
- credentialDescriptors = append(credentialDescriptors, webauthntypes.PublicKeyCredentialDescriptor{
- ID: credID,
- Type: webauthntypes.PublicKeyCredentialTypePublicKey,
- })
- }
-
- if len(credentialDescriptors) == 0 {
- return fmt.Errorf("no valid credential descriptors found")
- }
-
- clientDataJSON := map[string]interface{}{
- "type": "webauthn.get",
- "challenge": base64.URLEncoding.WithPadding(base64.NoPadding).EncodeToString(challenge),
- "origin": "https://" + rpId,
- }
-
- clientDataJSONBytes, err := json.Marshal(clientDataJSON)
- if err != nil {
- return fmt.Errorf("failed to marshal client data JSON: %w", err)
- }
-
- fmt.Println("Please use Windows Hello to authenticate.")
-
- assertion, err := winhello.GetAssertion(
- wnd.WindowHandle(),
- rpId,
- clientDataJSONBytes,
- credentialDescriptors,
- nil,
- &winhello.AuthenticatorGetAssertionOptions{
- AuthenticatorAttachment: winhello.WinHelloAuthenticatorAttachmentCrossPlatform,
- UserVerificationRequirement: winhello.WinHelloUserVerificationRequirementDiscouraged,
- CredentialHints: []webauthntypes.PublicKeyCredentialHint{
- webauthntypes.PublicKeyCredentialHintSecurityKey,
- },
- },
- )
- if err != nil {
- return fmt.Errorf("windows Hello assertion failed: %w", err)
- }
-
- authData := assertion.AuthDataRaw
- credentialIDInts := make([]int, len(assertion.Credential.ID))
- for i, b := range assertion.Credential.ID {
- credentialIDInts[i] = int(b)
- }
-
- fido2Req := proton.FIDO2Req{
- AuthenticationOptions: auth.TwoFA.FIDO2.AuthenticationOptions,
- ClientData: base64.StdEncoding.EncodeToString(clientDataJSONBytes),
- AuthenticatorData: base64.StdEncoding.EncodeToString(authData),
- Signature: base64.StdEncoding.EncodeToString(assertion.Signature),
- CredentialID: credentialIDInts,
- }
-
- fmt.Println("Submitting FIDO2 authentication request.")
- if err := client.Auth2FA(context.Background(), proton.Auth2FAReq{FIDO2: fido2Req}); err != nil {
- return fmt.Errorf("FIDO2 authentication failed: %w", err)
- } else {
- fmt.Println("FIDO2 authentication succeeded")
- }
- return nil
-}
diff --git a/internal/frontend/cli/utils.go b/internal/frontend/cli/utils.go
index 608e635b..49cf7fc9 100644
--- a/internal/frontend/cli/utils.go
+++ b/internal/frontend/cli/utils.go
@@ -45,6 +45,11 @@ func (f *frontendCLI) yesNoQuestion(question string) bool {
return len(answer) > 0 // Empty is false.
}
+func (f *frontendCLI) PromptAndWaitReturn(prompt string) {
+ f.Print(prompt, ". Press Enter/Return to continue: ")
+ f.ReadLine()
+}
+
func (f *frontendCLI) readStringInAttempts(title string, readFunc func() string, isOK func(string) bool) (value string) {
f.Printf("%s: ", title)
value = readFunc()
@@ -60,6 +65,10 @@ func (f *frontendCLI) readStringInAttempts(title string, readFunc func() string,
return
}
+func (f *frontendCLI) ReadSecurityKeyPin() string {
+ return f.readStringInAttempts("Security key PIN", f.ReadPassword, isNotEmpty)
+}
+
func (f *frontendCLI) printAndLogError(args ...interface{}) {
log.Error(args...)
f.Println(args...)
@@ -110,15 +119,3 @@ Recommendation:
a different network to access Proton Mail.
`)
}
-
-func sliceAnyToByteArray(s []any) []byte {
- result := make([]byte, len(s))
- for i, val := range s {
- if intVal, ok := val.(float64); ok {
- result[i] = byte(intVal)
- } else {
- panic("boom")
- }
- }
- return result
-}
diff --git a/internal/frontend/grpc/bridge.pb.go b/internal/frontend/grpc/bridge.pb.go
index c1cb6498..197da181 100644
--- a/internal/frontend/grpc/bridge.pb.go
+++ b/internal/frontend/grpc/bridge.pb.go
@@ -17,8 +17,8 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.33.0
-// protoc v3.21.12
+// protoc-gen-go v1.36.6
+// protoc v5.29.5
// source: bridge.proto
package grpc
@@ -30,6 +30,7 @@ import (
wrapperspb "google.golang.org/protobuf/types/known/wrapperspb"
reflect "reflect"
sync "sync"
+ unsafe "unsafe"
)
const (
@@ -167,19 +168,25 @@ const (
LoginErrorType_TWO_PASSWORDS_ERROR LoginErrorType = 5
LoginErrorType_TWO_PASSWORDS_ABORT LoginErrorType = 6
LoginErrorType_HV_ERROR LoginErrorType = 7
+ LoginErrorType_FIDO_PIN_INVALID LoginErrorType = 8
+ LoginErrorType_FIDO_PIN_BLOCKED LoginErrorType = 9
+ LoginErrorType_FIDO_ERROR LoginErrorType = 10
)
// Enum value maps for LoginErrorType.
var (
LoginErrorType_name = map[int32]string{
- 0: "USERNAME_PASSWORD_ERROR",
- 1: "FREE_USER",
- 2: "CONNECTION_ERROR",
- 3: "TFA_ERROR",
- 4: "TFA_ABORT",
- 5: "TWO_PASSWORDS_ERROR",
- 6: "TWO_PASSWORDS_ABORT",
- 7: "HV_ERROR",
+ 0: "USERNAME_PASSWORD_ERROR",
+ 1: "FREE_USER",
+ 2: "CONNECTION_ERROR",
+ 3: "TFA_ERROR",
+ 4: "TFA_ABORT",
+ 5: "TWO_PASSWORDS_ERROR",
+ 6: "TWO_PASSWORDS_ABORT",
+ 7: "HV_ERROR",
+ 8: "FIDO_PIN_INVALID",
+ 9: "FIDO_PIN_BLOCKED",
+ 10: "FIDO_ERROR",
}
LoginErrorType_value = map[string]int32{
"USERNAME_PASSWORD_ERROR": 0,
@@ -190,6 +197,9 @@ var (
"TWO_PASSWORDS_ERROR": 5,
"TWO_PASSWORDS_ABORT": 6,
"HV_ERROR": 7,
+ "FIDO_PIN_INVALID": 8,
+ "FIDO_PIN_BLOCKED": 9,
+ "FIDO_ERROR": 10,
}
)
@@ -423,22 +433,19 @@ func (ErrorCode) EnumDescriptor() ([]byte, []int) {
}
type AddLogEntryRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Level LogLevel `protobuf:"varint,1,opt,name=level,proto3,enum=grpc.LogLevel" json:"level,omitempty"`
+ Package string `protobuf:"bytes,2,opt,name=package,proto3" json:"package,omitempty"` // package is Go lingo but it identifies the component responsible for the log entry
+ Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Level LogLevel `protobuf:"varint,1,opt,name=level,proto3,enum=grpc.LogLevel" json:"level,omitempty"`
- Package string `protobuf:"bytes,2,opt,name=package,proto3" json:"package,omitempty"` // package is Go lingo but it identifies the component responsible for the log entry
- Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *AddLogEntryRequest) Reset() {
*x = AddLogEntryRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *AddLogEntryRequest) String() string {
@@ -449,7 +456,7 @@ func (*AddLogEntryRequest) ProtoMessage() {}
func (x *AddLogEntryRequest) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -491,20 +498,17 @@ func (x *AddLogEntryRequest) GetMessage() string {
//
// **********************************************************
type GuiReadyResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- ShowSplashScreen bool `protobuf:"varint,1,opt,name=showSplashScreen,proto3" json:"showSplashScreen,omitempty"`
+ state protoimpl.MessageState `protogen:"open.v1"`
+ ShowSplashScreen bool `protobuf:"varint,1,opt,name=showSplashScreen,proto3" json:"showSplashScreen,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *GuiReadyResponse) Reset() {
*x = GuiReadyResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GuiReadyResponse) String() string {
@@ -515,7 +519,7 @@ func (*GuiReadyResponse) ProtoMessage() {}
func (x *GuiReadyResponse) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -543,26 +547,23 @@ func (x *GuiReadyResponse) GetShowSplashScreen() bool {
//
// **********************************************************
type ReportBugRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ OsType string `protobuf:"bytes,1,opt,name=osType,proto3" json:"osType,omitempty"`
+ OsVersion string `protobuf:"bytes,2,opt,name=osVersion,proto3" json:"osVersion,omitempty"`
+ Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
+ Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
+ Address string `protobuf:"bytes,5,opt,name=address,proto3" json:"address,omitempty"`
+ EmailClient string `protobuf:"bytes,6,opt,name=emailClient,proto3" json:"emailClient,omitempty"`
+ IncludeLogs bool `protobuf:"varint,7,opt,name=includeLogs,proto3" json:"includeLogs,omitempty"`
unknownFields protoimpl.UnknownFields
-
- OsType string `protobuf:"bytes,1,opt,name=osType,proto3" json:"osType,omitempty"`
- OsVersion string `protobuf:"bytes,2,opt,name=osVersion,proto3" json:"osVersion,omitempty"`
- Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
- Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
- Address string `protobuf:"bytes,5,opt,name=address,proto3" json:"address,omitempty"`
- EmailClient string `protobuf:"bytes,6,opt,name=emailClient,proto3" json:"emailClient,omitempty"`
- IncludeLogs bool `protobuf:"varint,7,opt,name=includeLogs,proto3" json:"includeLogs,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *ReportBugRequest) Reset() {
*x = ReportBugRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReportBugRequest) String() string {
@@ -573,7 +574,7 @@ func (*ReportBugRequest) ProtoMessage() {}
func (x *ReportBugRequest) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -638,22 +639,19 @@ func (x *ReportBugRequest) GetIncludeLogs() bool {
}
type LoginRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
+ Password []byte `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
+ UseHvDetails *bool `protobuf:"varint,3,opt,name=useHvDetails,proto3,oneof" json:"useHvDetails,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
- Password []byte `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
- UseHvDetails *bool `protobuf:"varint,3,opt,name=useHvDetails,proto3,oneof" json:"useHvDetails,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *LoginRequest) Reset() {
*x = LoginRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LoginRequest) String() string {
@@ -664,7 +662,7 @@ func (*LoginRequest) ProtoMessage() {}
func (x *LoginRequest) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -701,20 +699,17 @@ func (x *LoginRequest) GetUseHvDetails() bool {
}
type LoginAbortRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *LoginAbortRequest) Reset() {
*x = LoginAbortRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LoginAbortRequest) String() string {
@@ -725,7 +720,7 @@ func (*LoginAbortRequest) ProtoMessage() {}
func (x *LoginAbortRequest) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -751,23 +746,20 @@ func (x *LoginAbortRequest) GetUsername() string {
// IMAP/SMTP Mail Server settings
// **********************************************************
type ImapSmtpSettings struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ ImapPort int32 `protobuf:"varint,1,opt,name=imapPort,proto3" json:"imapPort,omitempty"`
+ SmtpPort int32 `protobuf:"varint,2,opt,name=smtpPort,proto3" json:"smtpPort,omitempty"`
+ UseSSLForImap bool `protobuf:"varint,3,opt,name=useSSLForImap,proto3" json:"useSSLForImap,omitempty"`
+ UseSSLForSmtp bool `protobuf:"varint,4,opt,name=useSSLForSmtp,proto3" json:"useSSLForSmtp,omitempty"`
unknownFields protoimpl.UnknownFields
-
- ImapPort int32 `protobuf:"varint,1,opt,name=imapPort,proto3" json:"imapPort,omitempty"`
- SmtpPort int32 `protobuf:"varint,2,opt,name=smtpPort,proto3" json:"smtpPort,omitempty"`
- UseSSLForImap bool `protobuf:"varint,3,opt,name=useSSLForImap,proto3" json:"useSSLForImap,omitempty"`
- UseSSLForSmtp bool `protobuf:"varint,4,opt,name=useSSLForSmtp,proto3" json:"useSSLForSmtp,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *ImapSmtpSettings) Reset() {
*x = ImapSmtpSettings{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ImapSmtpSettings) String() string {
@@ -778,7 +770,7 @@ func (*ImapSmtpSettings) ProtoMessage() {}
func (x *ImapSmtpSettings) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -825,20 +817,17 @@ func (x *ImapSmtpSettings) GetUseSSLForSmtp() bool {
// Keychain related message
// **********************************************************
type AvailableKeychainsResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Keychains []string `protobuf:"bytes,1,rep,name=keychains,proto3" json:"keychains,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Keychains []string `protobuf:"bytes,1,rep,name=keychains,proto3" json:"keychains,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *AvailableKeychainsResponse) Reset() {
*x = AvailableKeychainsResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *AvailableKeychainsResponse) String() string {
@@ -849,7 +838,7 @@ func (*AvailableKeychainsResponse) ProtoMessage() {}
func (x *AvailableKeychainsResponse) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -872,28 +861,25 @@ func (x *AvailableKeychainsResponse) GetKeychains() []string {
}
type User struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
+ AvatarText string `protobuf:"bytes,3,opt,name=avatarText,proto3" json:"avatarText,omitempty"`
+ State UserState `protobuf:"varint,4,opt,name=state,proto3,enum=grpc.UserState" json:"state,omitempty"`
+ SplitMode bool `protobuf:"varint,5,opt,name=splitMode,proto3" json:"splitMode,omitempty"`
+ UsedBytes int64 `protobuf:"varint,6,opt,name=usedBytes,proto3" json:"usedBytes,omitempty"`
+ TotalBytes int64 `protobuf:"varint,7,opt,name=totalBytes,proto3" json:"totalBytes,omitempty"`
+ Password []byte `protobuf:"bytes,8,opt,name=password,proto3" json:"password,omitempty"`
+ Addresses []string `protobuf:"bytes,9,rep,name=addresses,proto3" json:"addresses,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
- AvatarText string `protobuf:"bytes,3,opt,name=avatarText,proto3" json:"avatarText,omitempty"`
- State UserState `protobuf:"varint,4,opt,name=state,proto3,enum=grpc.UserState" json:"state,omitempty"`
- SplitMode bool `protobuf:"varint,5,opt,name=splitMode,proto3" json:"splitMode,omitempty"`
- UsedBytes int64 `protobuf:"varint,6,opt,name=usedBytes,proto3" json:"usedBytes,omitempty"`
- TotalBytes int64 `protobuf:"varint,7,opt,name=totalBytes,proto3" json:"totalBytes,omitempty"`
- Password []byte `protobuf:"bytes,8,opt,name=password,proto3" json:"password,omitempty"`
- Addresses []string `protobuf:"bytes,9,rep,name=addresses,proto3" json:"addresses,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *User) Reset() {
*x = User{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *User) String() string {
@@ -904,7 +890,7 @@ func (*User) ProtoMessage() {}
func (x *User) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -983,21 +969,18 @@ func (x *User) GetAddresses() []string {
}
type UserSplitModeRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
+ Active bool `protobuf:"varint,2,opt,name=active,proto3" json:"active,omitempty"`
unknownFields protoimpl.UnknownFields
-
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
- Active bool `protobuf:"varint,2,opt,name=active,proto3" json:"active,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *UserSplitModeRequest) Reset() {
*x = UserSplitModeRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UserSplitModeRequest) String() string {
@@ -1008,7 +991,7 @@ func (*UserSplitModeRequest) ProtoMessage() {}
func (x *UserSplitModeRequest) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1038,21 +1021,18 @@ func (x *UserSplitModeRequest) GetActive() bool {
}
type UserBadEventFeedbackRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
+ DoResync bool `protobuf:"varint,2,opt,name=doResync,proto3" json:"doResync,omitempty"`
unknownFields protoimpl.UnknownFields
-
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
- DoResync bool `protobuf:"varint,2,opt,name=doResync,proto3" json:"doResync,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *UserBadEventFeedbackRequest) Reset() {
*x = UserBadEventFeedbackRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UserBadEventFeedbackRequest) String() string {
@@ -1063,7 +1043,7 @@ func (*UserBadEventFeedbackRequest) ProtoMessage() {}
func (x *UserBadEventFeedbackRequest) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1093,20 +1073,17 @@ func (x *UserBadEventFeedbackRequest) GetDoResync() bool {
}
type UserListResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Users []*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Users []*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *UserListResponse) Reset() {
*x = UserListResponse{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[10]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UserListResponse) String() string {
@@ -1117,7 +1094,7 @@ func (*UserListResponse) ProtoMessage() {}
func (x *UserListResponse) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[10]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1140,21 +1117,18 @@ func (x *UserListResponse) GetUsers() []*User {
}
type ConfigureAppleMailRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
+ Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
unknownFields protoimpl.UnknownFields
-
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
- Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *ConfigureAppleMailRequest) Reset() {
*x = ConfigureAppleMailRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[11]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ConfigureAppleMailRequest) String() string {
@@ -1165,7 +1139,7 @@ func (*ConfigureAppleMailRequest) ProtoMessage() {}
func (x *ConfigureAppleMailRequest) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[11]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1195,20 +1169,17 @@ func (x *ConfigureAppleMailRequest) GetAddress() string {
}
type EventStreamRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- ClientPlatform string `protobuf:"bytes,1,opt,name=ClientPlatform,proto3" json:"ClientPlatform,omitempty"`
+ state protoimpl.MessageState `protogen:"open.v1"`
+ ClientPlatform string `protobuf:"bytes,1,opt,name=ClientPlatform,proto3" json:"ClientPlatform,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *EventStreamRequest) Reset() {
*x = EventStreamRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *EventStreamRequest) String() string {
@@ -1219,7 +1190,7 @@ func (*EventStreamRequest) ProtoMessage() {}
func (x *EventStreamRequest) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[12]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1242,11 +1213,8 @@ func (x *EventStreamRequest) GetClientPlatform() string {
}
type StreamEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Types that are assignable to Event:
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Types that are valid to be assigned to Event:
//
// *StreamEvent_App
// *StreamEvent_Login
@@ -1257,16 +1225,16 @@ type StreamEvent struct {
// *StreamEvent_Mail
// *StreamEvent_User
// *StreamEvent_GenericError
- Event isStreamEvent_Event `protobuf_oneof:"event"`
+ Event isStreamEvent_Event `protobuf_oneof:"event"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *StreamEvent) Reset() {
*x = StreamEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *StreamEvent) String() string {
@@ -1277,7 +1245,7 @@ func (*StreamEvent) ProtoMessage() {}
func (x *StreamEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[13]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1292,72 +1260,90 @@ func (*StreamEvent) Descriptor() ([]byte, []int) {
return file_bridge_proto_rawDescGZIP(), []int{13}
}
-func (m *StreamEvent) GetEvent() isStreamEvent_Event {
- if m != nil {
- return m.Event
+func (x *StreamEvent) GetEvent() isStreamEvent_Event {
+ if x != nil {
+ return x.Event
}
return nil
}
func (x *StreamEvent) GetApp() *AppEvent {
- if x, ok := x.GetEvent().(*StreamEvent_App); ok {
- return x.App
+ if x != nil {
+ if x, ok := x.Event.(*StreamEvent_App); ok {
+ return x.App
+ }
}
return nil
}
func (x *StreamEvent) GetLogin() *LoginEvent {
- if x, ok := x.GetEvent().(*StreamEvent_Login); ok {
- return x.Login
+ if x != nil {
+ if x, ok := x.Event.(*StreamEvent_Login); ok {
+ return x.Login
+ }
}
return nil
}
func (x *StreamEvent) GetUpdate() *UpdateEvent {
- if x, ok := x.GetEvent().(*StreamEvent_Update); ok {
- return x.Update
+ if x != nil {
+ if x, ok := x.Event.(*StreamEvent_Update); ok {
+ return x.Update
+ }
}
return nil
}
func (x *StreamEvent) GetCache() *DiskCacheEvent {
- if x, ok := x.GetEvent().(*StreamEvent_Cache); ok {
- return x.Cache
+ if x != nil {
+ if x, ok := x.Event.(*StreamEvent_Cache); ok {
+ return x.Cache
+ }
}
return nil
}
func (x *StreamEvent) GetMailServerSettings() *MailServerSettingsEvent {
- if x, ok := x.GetEvent().(*StreamEvent_MailServerSettings); ok {
- return x.MailServerSettings
+ if x != nil {
+ if x, ok := x.Event.(*StreamEvent_MailServerSettings); ok {
+ return x.MailServerSettings
+ }
}
return nil
}
func (x *StreamEvent) GetKeychain() *KeychainEvent {
- if x, ok := x.GetEvent().(*StreamEvent_Keychain); ok {
- return x.Keychain
+ if x != nil {
+ if x, ok := x.Event.(*StreamEvent_Keychain); ok {
+ return x.Keychain
+ }
}
return nil
}
func (x *StreamEvent) GetMail() *MailEvent {
- if x, ok := x.GetEvent().(*StreamEvent_Mail); ok {
- return x.Mail
+ if x != nil {
+ if x, ok := x.Event.(*StreamEvent_Mail); ok {
+ return x.Mail
+ }
}
return nil
}
func (x *StreamEvent) GetUser() *UserEvent {
- if x, ok := x.GetEvent().(*StreamEvent_User); ok {
- return x.User
+ if x != nil {
+ if x, ok := x.Event.(*StreamEvent_User); ok {
+ return x.User
+ }
}
return nil
}
func (x *StreamEvent) GetGenericError() *GenericErrorEvent {
- if x, ok := x.GetEvent().(*StreamEvent_GenericError); ok {
- return x.GenericError
+ if x != nil {
+ if x, ok := x.Event.(*StreamEvent_GenericError); ok {
+ return x.GenericError
+ }
}
return nil
}
@@ -1424,11 +1410,8 @@ func (*StreamEvent_GenericError) isStreamEvent_Event() {}
// App related events
// **********************************************************
type AppEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Types that are assignable to Event:
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Types that are valid to be assigned to Event:
//
// *AppEvent_InternetStatus
// *AppEvent_ToggleAutostartFinished
@@ -1445,16 +1428,16 @@ type AppEvent struct {
// *AppEvent_RepairStarted
// *AppEvent_AllUsersLoaded
// *AppEvent_UserNotification
- Event isAppEvent_Event `protobuf_oneof:"event"`
+ Event isAppEvent_Event `protobuf_oneof:"event"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *AppEvent) Reset() {
*x = AppEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[14]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *AppEvent) String() string {
@@ -1465,7 +1448,7 @@ func (*AppEvent) ProtoMessage() {}
func (x *AppEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[14]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1480,114 +1463,144 @@ func (*AppEvent) Descriptor() ([]byte, []int) {
return file_bridge_proto_rawDescGZIP(), []int{14}
}
-func (m *AppEvent) GetEvent() isAppEvent_Event {
- if m != nil {
- return m.Event
+func (x *AppEvent) GetEvent() isAppEvent_Event {
+ if x != nil {
+ return x.Event
}
return nil
}
func (x *AppEvent) GetInternetStatus() *InternetStatusEvent {
- if x, ok := x.GetEvent().(*AppEvent_InternetStatus); ok {
- return x.InternetStatus
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_InternetStatus); ok {
+ return x.InternetStatus
+ }
}
return nil
}
func (x *AppEvent) GetToggleAutostartFinished() *ToggleAutostartFinishedEvent {
- if x, ok := x.GetEvent().(*AppEvent_ToggleAutostartFinished); ok {
- return x.ToggleAutostartFinished
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_ToggleAutostartFinished); ok {
+ return x.ToggleAutostartFinished
+ }
}
return nil
}
func (x *AppEvent) GetResetFinished() *ResetFinishedEvent {
- if x, ok := x.GetEvent().(*AppEvent_ResetFinished); ok {
- return x.ResetFinished
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_ResetFinished); ok {
+ return x.ResetFinished
+ }
}
return nil
}
func (x *AppEvent) GetReportBugFinished() *ReportBugFinishedEvent {
- if x, ok := x.GetEvent().(*AppEvent_ReportBugFinished); ok {
- return x.ReportBugFinished
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_ReportBugFinished); ok {
+ return x.ReportBugFinished
+ }
}
return nil
}
func (x *AppEvent) GetReportBugSuccess() *ReportBugSuccessEvent {
- if x, ok := x.GetEvent().(*AppEvent_ReportBugSuccess); ok {
- return x.ReportBugSuccess
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_ReportBugSuccess); ok {
+ return x.ReportBugSuccess
+ }
}
return nil
}
func (x *AppEvent) GetReportBugError() *ReportBugErrorEvent {
- if x, ok := x.GetEvent().(*AppEvent_ReportBugError); ok {
- return x.ReportBugError
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_ReportBugError); ok {
+ return x.ReportBugError
+ }
}
return nil
}
func (x *AppEvent) GetShowMainWindow() *ShowMainWindowEvent {
- if x, ok := x.GetEvent().(*AppEvent_ShowMainWindow); ok {
- return x.ShowMainWindow
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_ShowMainWindow); ok {
+ return x.ShowMainWindow
+ }
}
return nil
}
func (x *AppEvent) GetReportBugFallback() *ReportBugFallbackEvent {
- if x, ok := x.GetEvent().(*AppEvent_ReportBugFallback); ok {
- return x.ReportBugFallback
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_ReportBugFallback); ok {
+ return x.ReportBugFallback
+ }
}
return nil
}
func (x *AppEvent) GetCertificateInstallSuccess() *CertificateInstallSuccessEvent {
- if x, ok := x.GetEvent().(*AppEvent_CertificateInstallSuccess); ok {
- return x.CertificateInstallSuccess
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_CertificateInstallSuccess); ok {
+ return x.CertificateInstallSuccess
+ }
}
return nil
}
func (x *AppEvent) GetCertificateInstallCanceled() *CertificateInstallCanceledEvent {
- if x, ok := x.GetEvent().(*AppEvent_CertificateInstallCanceled); ok {
- return x.CertificateInstallCanceled
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_CertificateInstallCanceled); ok {
+ return x.CertificateInstallCanceled
+ }
}
return nil
}
func (x *AppEvent) GetCertificateInstallFailed() *CertificateInstallFailedEvent {
- if x, ok := x.GetEvent().(*AppEvent_CertificateInstallFailed); ok {
- return x.CertificateInstallFailed
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_CertificateInstallFailed); ok {
+ return x.CertificateInstallFailed
+ }
}
return nil
}
func (x *AppEvent) GetKnowledgeBaseSuggestions() *KnowledgeBaseSuggestionsEvent {
- if x, ok := x.GetEvent().(*AppEvent_KnowledgeBaseSuggestions); ok {
- return x.KnowledgeBaseSuggestions
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_KnowledgeBaseSuggestions); ok {
+ return x.KnowledgeBaseSuggestions
+ }
}
return nil
}
func (x *AppEvent) GetRepairStarted() *RepairStartedEvent {
- if x, ok := x.GetEvent().(*AppEvent_RepairStarted); ok {
- return x.RepairStarted
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_RepairStarted); ok {
+ return x.RepairStarted
+ }
}
return nil
}
func (x *AppEvent) GetAllUsersLoaded() *AllUsersLoadedEvent {
- if x, ok := x.GetEvent().(*AppEvent_AllUsersLoaded); ok {
- return x.AllUsersLoaded
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_AllUsersLoaded); ok {
+ return x.AllUsersLoaded
+ }
}
return nil
}
func (x *AppEvent) GetUserNotification() *UserNotificationEvent {
- if x, ok := x.GetEvent().(*AppEvent_UserNotification); ok {
- return x.UserNotification
+ if x != nil {
+ if x, ok := x.Event.(*AppEvent_UserNotification); ok {
+ return x.UserNotification
+ }
}
return nil
}
@@ -1687,20 +1700,17 @@ func (*AppEvent_AllUsersLoaded) isAppEvent_Event() {}
func (*AppEvent_UserNotification) isAppEvent_Event() {}
type InternetStatusEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Connected bool `protobuf:"varint,1,opt,name=connected,proto3" json:"connected,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Connected bool `protobuf:"varint,1,opt,name=connected,proto3" json:"connected,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *InternetStatusEvent) Reset() {
*x = InternetStatusEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[15]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *InternetStatusEvent) String() string {
@@ -1711,7 +1721,7 @@ func (*InternetStatusEvent) ProtoMessage() {}
func (x *InternetStatusEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[15]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1734,18 +1744,16 @@ func (x *InternetStatusEvent) GetConnected() bool {
}
type ToggleAutostartFinishedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *ToggleAutostartFinishedEvent) Reset() {
*x = ToggleAutostartFinishedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[16]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ToggleAutostartFinishedEvent) String() string {
@@ -1756,7 +1764,7 @@ func (*ToggleAutostartFinishedEvent) ProtoMessage() {}
func (x *ToggleAutostartFinishedEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[16]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1772,18 +1780,16 @@ func (*ToggleAutostartFinishedEvent) Descriptor() ([]byte, []int) {
}
type ResetFinishedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *ResetFinishedEvent) Reset() {
*x = ResetFinishedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[17]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ResetFinishedEvent) String() string {
@@ -1794,7 +1800,7 @@ func (*ResetFinishedEvent) ProtoMessage() {}
func (x *ResetFinishedEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[17]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1810,18 +1816,16 @@ func (*ResetFinishedEvent) Descriptor() ([]byte, []int) {
}
type ReportBugFinishedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *ReportBugFinishedEvent) Reset() {
*x = ReportBugFinishedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[18]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReportBugFinishedEvent) String() string {
@@ -1832,7 +1836,7 @@ func (*ReportBugFinishedEvent) ProtoMessage() {}
func (x *ReportBugFinishedEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[18]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1848,18 +1852,16 @@ func (*ReportBugFinishedEvent) Descriptor() ([]byte, []int) {
}
type ReportBugSuccessEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *ReportBugSuccessEvent) Reset() {
*x = ReportBugSuccessEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[19]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReportBugSuccessEvent) String() string {
@@ -1870,7 +1872,7 @@ func (*ReportBugSuccessEvent) ProtoMessage() {}
func (x *ReportBugSuccessEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[19]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1886,18 +1888,16 @@ func (*ReportBugSuccessEvent) Descriptor() ([]byte, []int) {
}
type ReportBugErrorEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *ReportBugErrorEvent) Reset() {
*x = ReportBugErrorEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[20]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReportBugErrorEvent) String() string {
@@ -1908,7 +1908,7 @@ func (*ReportBugErrorEvent) ProtoMessage() {}
func (x *ReportBugErrorEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[20]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1924,18 +1924,16 @@ func (*ReportBugErrorEvent) Descriptor() ([]byte, []int) {
}
type ShowMainWindowEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *ShowMainWindowEvent) Reset() {
*x = ShowMainWindowEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[21]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ShowMainWindowEvent) String() string {
@@ -1946,7 +1944,7 @@ func (*ShowMainWindowEvent) ProtoMessage() {}
func (x *ShowMainWindowEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[21]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -1962,18 +1960,16 @@ func (*ShowMainWindowEvent) Descriptor() ([]byte, []int) {
}
type ReportBugFallbackEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *ReportBugFallbackEvent) Reset() {
*x = ReportBugFallbackEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[22]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[22]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ReportBugFallbackEvent) String() string {
@@ -1984,7 +1980,7 @@ func (*ReportBugFallbackEvent) ProtoMessage() {}
func (x *ReportBugFallbackEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[22]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2000,18 +1996,16 @@ func (*ReportBugFallbackEvent) Descriptor() ([]byte, []int) {
}
type CertificateInstallSuccessEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *CertificateInstallSuccessEvent) Reset() {
*x = CertificateInstallSuccessEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[23]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CertificateInstallSuccessEvent) String() string {
@@ -2022,7 +2016,7 @@ func (*CertificateInstallSuccessEvent) ProtoMessage() {}
func (x *CertificateInstallSuccessEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[23]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2038,18 +2032,16 @@ func (*CertificateInstallSuccessEvent) Descriptor() ([]byte, []int) {
}
type CertificateInstallCanceledEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *CertificateInstallCanceledEvent) Reset() {
*x = CertificateInstallCanceledEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[24]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[24]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CertificateInstallCanceledEvent) String() string {
@@ -2060,7 +2052,7 @@ func (*CertificateInstallCanceledEvent) ProtoMessage() {}
func (x *CertificateInstallCanceledEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[24]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2076,18 +2068,16 @@ func (*CertificateInstallCanceledEvent) Descriptor() ([]byte, []int) {
}
type CertificateInstallFailedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *CertificateInstallFailedEvent) Reset() {
*x = CertificateInstallFailedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[25]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[25]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *CertificateInstallFailedEvent) String() string {
@@ -2098,7 +2088,7 @@ func (*CertificateInstallFailedEvent) ProtoMessage() {}
func (x *CertificateInstallFailedEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[25]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2114,18 +2104,16 @@ func (*CertificateInstallFailedEvent) Descriptor() ([]byte, []int) {
}
type RepairStartedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *RepairStartedEvent) Reset() {
*x = RepairStartedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[26]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[26]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RepairStartedEvent) String() string {
@@ -2136,7 +2124,7 @@ func (*RepairStartedEvent) ProtoMessage() {}
func (x *RepairStartedEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[26]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2152,18 +2140,16 @@ func (*RepairStartedEvent) Descriptor() ([]byte, []int) {
}
type AllUsersLoadedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *AllUsersLoadedEvent) Reset() {
*x = AllUsersLoadedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[27]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[27]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *AllUsersLoadedEvent) String() string {
@@ -2174,7 +2160,7 @@ func (*AllUsersLoadedEvent) ProtoMessage() {}
func (x *AllUsersLoadedEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[27]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2190,21 +2176,18 @@ func (*AllUsersLoadedEvent) Descriptor() ([]byte, []int) {
}
type KnowledgeBaseSuggestion struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
+ Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
- Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *KnowledgeBaseSuggestion) Reset() {
*x = KnowledgeBaseSuggestion{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[28]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[28]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *KnowledgeBaseSuggestion) String() string {
@@ -2215,7 +2198,7 @@ func (*KnowledgeBaseSuggestion) ProtoMessage() {}
func (x *KnowledgeBaseSuggestion) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[28]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2245,20 +2228,17 @@ func (x *KnowledgeBaseSuggestion) GetTitle() string {
}
type KnowledgeBaseSuggestionsEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Suggestions []*KnowledgeBaseSuggestion `protobuf:"bytes,1,rep,name=suggestions,proto3" json:"suggestions,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Suggestions []*KnowledgeBaseSuggestion `protobuf:"bytes,1,rep,name=suggestions,proto3" json:"suggestions,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *KnowledgeBaseSuggestionsEvent) Reset() {
*x = KnowledgeBaseSuggestionsEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[29]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[29]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *KnowledgeBaseSuggestionsEvent) String() string {
@@ -2269,7 +2249,7 @@ func (*KnowledgeBaseSuggestionsEvent) ProtoMessage() {}
func (x *KnowledgeBaseSuggestionsEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[29]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2295,11 +2275,8 @@ func (x *KnowledgeBaseSuggestionsEvent) GetSuggestions() []*KnowledgeBaseSuggest
// Login related events
// **********************************************************
type LoginEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Types that are assignable to Event:
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Types that are valid to be assigned to Event:
//
// *LoginEvent_Error
// *LoginEvent_TfaRequested
@@ -2307,16 +2284,21 @@ type LoginEvent struct {
// *LoginEvent_Finished
// *LoginEvent_AlreadyLoggedIn
// *LoginEvent_HvRequested
- Event isLoginEvent_Event `protobuf_oneof:"event"`
+ // *LoginEvent_FidoRequested
+ // *LoginEvent_TfaOrFidoRequested
+ // *LoginEvent_LoginFidoTouchRequested
+ // *LoginEvent_LoginFidoTouchCompleted
+ // *LoginEvent_LoginFidoPinRequired
+ Event isLoginEvent_Event `protobuf_oneof:"event"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *LoginEvent) Reset() {
*x = LoginEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[30]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[30]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LoginEvent) String() string {
@@ -2327,7 +2309,7 @@ func (*LoginEvent) ProtoMessage() {}
func (x *LoginEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[30]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2342,51 +2324,108 @@ func (*LoginEvent) Descriptor() ([]byte, []int) {
return file_bridge_proto_rawDescGZIP(), []int{30}
}
-func (m *LoginEvent) GetEvent() isLoginEvent_Event {
- if m != nil {
- return m.Event
+func (x *LoginEvent) GetEvent() isLoginEvent_Event {
+ if x != nil {
+ return x.Event
}
return nil
}
func (x *LoginEvent) GetError() *LoginErrorEvent {
- if x, ok := x.GetEvent().(*LoginEvent_Error); ok {
- return x.Error
+ if x != nil {
+ if x, ok := x.Event.(*LoginEvent_Error); ok {
+ return x.Error
+ }
}
return nil
}
func (x *LoginEvent) GetTfaRequested() *LoginTfaRequestedEvent {
- if x, ok := x.GetEvent().(*LoginEvent_TfaRequested); ok {
- return x.TfaRequested
+ if x != nil {
+ if x, ok := x.Event.(*LoginEvent_TfaRequested); ok {
+ return x.TfaRequested
+ }
}
return nil
}
func (x *LoginEvent) GetTwoPasswordRequested() *LoginTwoPasswordsRequestedEvent {
- if x, ok := x.GetEvent().(*LoginEvent_TwoPasswordRequested); ok {
- return x.TwoPasswordRequested
+ if x != nil {
+ if x, ok := x.Event.(*LoginEvent_TwoPasswordRequested); ok {
+ return x.TwoPasswordRequested
+ }
}
return nil
}
func (x *LoginEvent) GetFinished() *LoginFinishedEvent {
- if x, ok := x.GetEvent().(*LoginEvent_Finished); ok {
- return x.Finished
+ if x != nil {
+ if x, ok := x.Event.(*LoginEvent_Finished); ok {
+ return x.Finished
+ }
}
return nil
}
func (x *LoginEvent) GetAlreadyLoggedIn() *LoginFinishedEvent {
- if x, ok := x.GetEvent().(*LoginEvent_AlreadyLoggedIn); ok {
- return x.AlreadyLoggedIn
+ if x != nil {
+ if x, ok := x.Event.(*LoginEvent_AlreadyLoggedIn); ok {
+ return x.AlreadyLoggedIn
+ }
}
return nil
}
func (x *LoginEvent) GetHvRequested() *LoginHvRequestedEvent {
- if x, ok := x.GetEvent().(*LoginEvent_HvRequested); ok {
- return x.HvRequested
+ if x != nil {
+ if x, ok := x.Event.(*LoginEvent_HvRequested); ok {
+ return x.HvRequested
+ }
+ }
+ return nil
+}
+
+func (x *LoginEvent) GetFidoRequested() *LoginFidoRequestedEvent {
+ if x != nil {
+ if x, ok := x.Event.(*LoginEvent_FidoRequested); ok {
+ return x.FidoRequested
+ }
+ }
+ return nil
+}
+
+func (x *LoginEvent) GetTfaOrFidoRequested() *LoginTfaOrFidoRequestedEvent {
+ if x != nil {
+ if x, ok := x.Event.(*LoginEvent_TfaOrFidoRequested); ok {
+ return x.TfaOrFidoRequested
+ }
+ }
+ return nil
+}
+
+func (x *LoginEvent) GetLoginFidoTouchRequested() *LoginFidoTouchEvent {
+ if x != nil {
+ if x, ok := x.Event.(*LoginEvent_LoginFidoTouchRequested); ok {
+ return x.LoginFidoTouchRequested
+ }
+ }
+ return nil
+}
+
+func (x *LoginEvent) GetLoginFidoTouchCompleted() *LoginFidoTouchEvent {
+ if x != nil {
+ if x, ok := x.Event.(*LoginEvent_LoginFidoTouchCompleted); ok {
+ return x.LoginFidoTouchCompleted
+ }
+ }
+ return nil
+}
+
+func (x *LoginEvent) GetLoginFidoPinRequired() *LoginFidoPinRequired {
+ if x != nil {
+ if x, ok := x.Event.(*LoginEvent_LoginFidoPinRequired); ok {
+ return x.LoginFidoPinRequired
+ }
}
return nil
}
@@ -2419,6 +2458,26 @@ type LoginEvent_HvRequested struct {
HvRequested *LoginHvRequestedEvent `protobuf:"bytes,6,opt,name=hvRequested,proto3,oneof"`
}
+type LoginEvent_FidoRequested struct {
+ FidoRequested *LoginFidoRequestedEvent `protobuf:"bytes,7,opt,name=fidoRequested,proto3,oneof"`
+}
+
+type LoginEvent_TfaOrFidoRequested struct {
+ TfaOrFidoRequested *LoginTfaOrFidoRequestedEvent `protobuf:"bytes,8,opt,name=tfaOrFidoRequested,proto3,oneof"`
+}
+
+type LoginEvent_LoginFidoTouchRequested struct {
+ LoginFidoTouchRequested *LoginFidoTouchEvent `protobuf:"bytes,9,opt,name=loginFidoTouchRequested,proto3,oneof"`
+}
+
+type LoginEvent_LoginFidoTouchCompleted struct {
+ LoginFidoTouchCompleted *LoginFidoTouchEvent `protobuf:"bytes,10,opt,name=loginFidoTouchCompleted,proto3,oneof"`
+}
+
+type LoginEvent_LoginFidoPinRequired struct {
+ LoginFidoPinRequired *LoginFidoPinRequired `protobuf:"bytes,11,opt,name=loginFidoPinRequired,proto3,oneof"`
+}
+
func (*LoginEvent_Error) isLoginEvent_Event() {}
func (*LoginEvent_TfaRequested) isLoginEvent_Event() {}
@@ -2431,22 +2490,29 @@ func (*LoginEvent_AlreadyLoggedIn) isLoginEvent_Event() {}
func (*LoginEvent_HvRequested) isLoginEvent_Event() {}
-type LoginErrorEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
+func (*LoginEvent_FidoRequested) isLoginEvent_Event() {}
- Type LoginErrorType `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.LoginErrorType" json:"type,omitempty"`
- Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+func (*LoginEvent_TfaOrFidoRequested) isLoginEvent_Event() {}
+
+func (*LoginEvent_LoginFidoTouchRequested) isLoginEvent_Event() {}
+
+func (*LoginEvent_LoginFidoTouchCompleted) isLoginEvent_Event() {}
+
+func (*LoginEvent_LoginFidoPinRequired) isLoginEvent_Event() {}
+
+type LoginErrorEvent struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Type LoginErrorType `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.LoginErrorType" json:"type,omitempty"`
+ Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *LoginErrorEvent) Reset() {
*x = LoginErrorEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[31]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[31]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LoginErrorEvent) String() string {
@@ -2457,7 +2523,7 @@ func (*LoginErrorEvent) ProtoMessage() {}
func (x *LoginErrorEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[31]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2487,20 +2553,17 @@ func (x *LoginErrorEvent) GetMessage() string {
}
type LoginTfaRequestedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *LoginTfaRequestedEvent) Reset() {
*x = LoginTfaRequestedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[32]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[32]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LoginTfaRequestedEvent) String() string {
@@ -2511,7 +2574,7 @@ func (*LoginTfaRequestedEvent) ProtoMessage() {}
func (x *LoginTfaRequestedEvent) ProtoReflect() protoreflect.Message {
mi := &file_bridge_proto_msgTypes[32]
- if protoimpl.UnsafeEnabled && x != nil {
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2533,21 +2596,194 @@ func (x *LoginTfaRequestedEvent) GetUsername() string {
return ""
}
-type LoginTwoPasswordsRequestedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+type LoginFidoRequestedEvent struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
- Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
+func (x *LoginFidoRequestedEvent) Reset() {
+ *x = LoginFidoRequestedEvent{}
+ mi := &file_bridge_proto_msgTypes[33]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *LoginFidoRequestedEvent) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LoginFidoRequestedEvent) ProtoMessage() {}
+
+func (x *LoginFidoRequestedEvent) ProtoReflect() protoreflect.Message {
+ mi := &file_bridge_proto_msgTypes[33]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LoginFidoRequestedEvent.ProtoReflect.Descriptor instead.
+func (*LoginFidoRequestedEvent) Descriptor() ([]byte, []int) {
+ return file_bridge_proto_rawDescGZIP(), []int{33}
+}
+
+func (x *LoginFidoRequestedEvent) GetUsername() string {
+ if x != nil {
+ return x.Username
+ }
+ return ""
+}
+
+type LoginTfaOrFidoRequestedEvent struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *LoginTfaOrFidoRequestedEvent) Reset() {
+ *x = LoginTfaOrFidoRequestedEvent{}
+ mi := &file_bridge_proto_msgTypes[34]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *LoginTfaOrFidoRequestedEvent) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LoginTfaOrFidoRequestedEvent) ProtoMessage() {}
+
+func (x *LoginTfaOrFidoRequestedEvent) ProtoReflect() protoreflect.Message {
+ mi := &file_bridge_proto_msgTypes[34]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LoginTfaOrFidoRequestedEvent.ProtoReflect.Descriptor instead.
+func (*LoginTfaOrFidoRequestedEvent) Descriptor() ([]byte, []int) {
+ return file_bridge_proto_rawDescGZIP(), []int{34}
+}
+
+func (x *LoginTfaOrFidoRequestedEvent) GetUsername() string {
+ if x != nil {
+ return x.Username
+ }
+ return ""
+}
+
+type LoginFidoTouchEvent struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *LoginFidoTouchEvent) Reset() {
+ *x = LoginFidoTouchEvent{}
+ mi := &file_bridge_proto_msgTypes[35]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *LoginFidoTouchEvent) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LoginFidoTouchEvent) ProtoMessage() {}
+
+func (x *LoginFidoTouchEvent) ProtoReflect() protoreflect.Message {
+ mi := &file_bridge_proto_msgTypes[35]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LoginFidoTouchEvent.ProtoReflect.Descriptor instead.
+func (*LoginFidoTouchEvent) Descriptor() ([]byte, []int) {
+ return file_bridge_proto_rawDescGZIP(), []int{35}
+}
+
+func (x *LoginFidoTouchEvent) GetUsername() string {
+ if x != nil {
+ return x.Username
+ }
+ return ""
+}
+
+type LoginFidoPinRequired struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *LoginFidoPinRequired) Reset() {
+ *x = LoginFidoPinRequired{}
+ mi := &file_bridge_proto_msgTypes[36]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *LoginFidoPinRequired) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LoginFidoPinRequired) ProtoMessage() {}
+
+func (x *LoginFidoPinRequired) ProtoReflect() protoreflect.Message {
+ mi := &file_bridge_proto_msgTypes[36]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LoginFidoPinRequired.ProtoReflect.Descriptor instead.
+func (*LoginFidoPinRequired) Descriptor() ([]byte, []int) {
+ return file_bridge_proto_rawDescGZIP(), []int{36}
+}
+
+func (x *LoginFidoPinRequired) GetUsername() string {
+ if x != nil {
+ return x.Username
+ }
+ return ""
+}
+
+type LoginTwoPasswordsRequestedEvent struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *LoginTwoPasswordsRequestedEvent) Reset() {
*x = LoginTwoPasswordsRequestedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[33]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[37]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LoginTwoPasswordsRequestedEvent) String() string {
@@ -2557,8 +2793,8 @@ func (x *LoginTwoPasswordsRequestedEvent) String() string {
func (*LoginTwoPasswordsRequestedEvent) ProtoMessage() {}
func (x *LoginTwoPasswordsRequestedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[33]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[37]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2570,7 +2806,7 @@ func (x *LoginTwoPasswordsRequestedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use LoginTwoPasswordsRequestedEvent.ProtoReflect.Descriptor instead.
func (*LoginTwoPasswordsRequestedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{33}
+ return file_bridge_proto_rawDescGZIP(), []int{37}
}
func (x *LoginTwoPasswordsRequestedEvent) GetUsername() string {
@@ -2581,21 +2817,18 @@ func (x *LoginTwoPasswordsRequestedEvent) GetUsername() string {
}
type LoginFinishedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
+ WasSignedOut bool `protobuf:"varint,2,opt,name=wasSignedOut,proto3" json:"wasSignedOut,omitempty"`
unknownFields protoimpl.UnknownFields
-
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
- WasSignedOut bool `protobuf:"varint,2,opt,name=wasSignedOut,proto3" json:"wasSignedOut,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *LoginFinishedEvent) Reset() {
*x = LoginFinishedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[34]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[38]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LoginFinishedEvent) String() string {
@@ -2605,8 +2838,8 @@ func (x *LoginFinishedEvent) String() string {
func (*LoginFinishedEvent) ProtoMessage() {}
func (x *LoginFinishedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[34]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[38]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2618,7 +2851,7 @@ func (x *LoginFinishedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use LoginFinishedEvent.ProtoReflect.Descriptor instead.
func (*LoginFinishedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{34}
+ return file_bridge_proto_rawDescGZIP(), []int{38}
}
func (x *LoginFinishedEvent) GetUserID() string {
@@ -2636,20 +2869,17 @@ func (x *LoginFinishedEvent) GetWasSignedOut() bool {
}
type LoginHvRequestedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ HvUrl string `protobuf:"bytes,1,opt,name=hvUrl,proto3" json:"hvUrl,omitempty"`
unknownFields protoimpl.UnknownFields
-
- HvUrl string `protobuf:"bytes,1,opt,name=hvUrl,proto3" json:"hvUrl,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *LoginHvRequestedEvent) Reset() {
*x = LoginHvRequestedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[35]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[39]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *LoginHvRequestedEvent) String() string {
@@ -2659,8 +2889,8 @@ func (x *LoginHvRequestedEvent) String() string {
func (*LoginHvRequestedEvent) ProtoMessage() {}
func (x *LoginHvRequestedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[35]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[39]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2672,7 +2902,7 @@ func (x *LoginHvRequestedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use LoginHvRequestedEvent.ProtoReflect.Descriptor instead.
func (*LoginHvRequestedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{35}
+ return file_bridge_proto_rawDescGZIP(), []int{39}
}
func (x *LoginHvRequestedEvent) GetHvUrl() string {
@@ -2686,11 +2916,8 @@ func (x *LoginHvRequestedEvent) GetHvUrl() string {
// Update related events
// **********************************************************
type UpdateEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Types that are assignable to Event:
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Types that are valid to be assigned to Event:
//
// *UpdateEvent_Error
// *UpdateEvent_ManualReady
@@ -2700,16 +2927,16 @@ type UpdateEvent struct {
// *UpdateEvent_IsLatestVersion
// *UpdateEvent_CheckFinished
// *UpdateEvent_VersionChanged
- Event isUpdateEvent_Event `protobuf_oneof:"event"`
+ Event isUpdateEvent_Event `protobuf_oneof:"event"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *UpdateEvent) Reset() {
*x = UpdateEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[36]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[40]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateEvent) String() string {
@@ -2719,8 +2946,8 @@ func (x *UpdateEvent) String() string {
func (*UpdateEvent) ProtoMessage() {}
func (x *UpdateEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[36]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[40]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2732,68 +2959,84 @@ func (x *UpdateEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateEvent.ProtoReflect.Descriptor instead.
func (*UpdateEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{36}
+ return file_bridge_proto_rawDescGZIP(), []int{40}
}
-func (m *UpdateEvent) GetEvent() isUpdateEvent_Event {
- if m != nil {
- return m.Event
+func (x *UpdateEvent) GetEvent() isUpdateEvent_Event {
+ if x != nil {
+ return x.Event
}
return nil
}
func (x *UpdateEvent) GetError() *UpdateErrorEvent {
- if x, ok := x.GetEvent().(*UpdateEvent_Error); ok {
- return x.Error
+ if x != nil {
+ if x, ok := x.Event.(*UpdateEvent_Error); ok {
+ return x.Error
+ }
}
return nil
}
func (x *UpdateEvent) GetManualReady() *UpdateManualReadyEvent {
- if x, ok := x.GetEvent().(*UpdateEvent_ManualReady); ok {
- return x.ManualReady
+ if x != nil {
+ if x, ok := x.Event.(*UpdateEvent_ManualReady); ok {
+ return x.ManualReady
+ }
}
return nil
}
func (x *UpdateEvent) GetManualRestartNeeded() *UpdateManualRestartNeededEvent {
- if x, ok := x.GetEvent().(*UpdateEvent_ManualRestartNeeded); ok {
- return x.ManualRestartNeeded
+ if x != nil {
+ if x, ok := x.Event.(*UpdateEvent_ManualRestartNeeded); ok {
+ return x.ManualRestartNeeded
+ }
}
return nil
}
func (x *UpdateEvent) GetForce() *UpdateForceEvent {
- if x, ok := x.GetEvent().(*UpdateEvent_Force); ok {
- return x.Force
+ if x != nil {
+ if x, ok := x.Event.(*UpdateEvent_Force); ok {
+ return x.Force
+ }
}
return nil
}
func (x *UpdateEvent) GetSilentRestartNeeded() *UpdateSilentRestartNeeded {
- if x, ok := x.GetEvent().(*UpdateEvent_SilentRestartNeeded); ok {
- return x.SilentRestartNeeded
+ if x != nil {
+ if x, ok := x.Event.(*UpdateEvent_SilentRestartNeeded); ok {
+ return x.SilentRestartNeeded
+ }
}
return nil
}
func (x *UpdateEvent) GetIsLatestVersion() *UpdateIsLatestVersion {
- if x, ok := x.GetEvent().(*UpdateEvent_IsLatestVersion); ok {
- return x.IsLatestVersion
+ if x != nil {
+ if x, ok := x.Event.(*UpdateEvent_IsLatestVersion); ok {
+ return x.IsLatestVersion
+ }
}
return nil
}
func (x *UpdateEvent) GetCheckFinished() *UpdateCheckFinished {
- if x, ok := x.GetEvent().(*UpdateEvent_CheckFinished); ok {
- return x.CheckFinished
+ if x != nil {
+ if x, ok := x.Event.(*UpdateEvent_CheckFinished); ok {
+ return x.CheckFinished
+ }
}
return nil
}
func (x *UpdateEvent) GetVersionChanged() *UpdateVersionChanged {
- if x, ok := x.GetEvent().(*UpdateEvent_VersionChanged); ok {
- return x.VersionChanged
+ if x != nil {
+ if x, ok := x.Event.(*UpdateEvent_VersionChanged); ok {
+ return x.VersionChanged
+ }
}
return nil
}
@@ -2851,20 +3094,17 @@ func (*UpdateEvent_CheckFinished) isUpdateEvent_Event() {}
func (*UpdateEvent_VersionChanged) isUpdateEvent_Event() {}
type UpdateErrorEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Type UpdateErrorType `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.UpdateErrorType" json:"type,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Type UpdateErrorType `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.UpdateErrorType" json:"type,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *UpdateErrorEvent) Reset() {
*x = UpdateErrorEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[37]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[41]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateErrorEvent) String() string {
@@ -2874,8 +3114,8 @@ func (x *UpdateErrorEvent) String() string {
func (*UpdateErrorEvent) ProtoMessage() {}
func (x *UpdateErrorEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[37]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[41]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2887,7 +3127,7 @@ func (x *UpdateErrorEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateErrorEvent.ProtoReflect.Descriptor instead.
func (*UpdateErrorEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{37}
+ return file_bridge_proto_rawDescGZIP(), []int{41}
}
func (x *UpdateErrorEvent) GetType() UpdateErrorType {
@@ -2898,20 +3138,17 @@ func (x *UpdateErrorEvent) GetType() UpdateErrorType {
}
type UpdateManualReadyEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *UpdateManualReadyEvent) Reset() {
*x = UpdateManualReadyEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[38]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[42]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateManualReadyEvent) String() string {
@@ -2921,8 +3158,8 @@ func (x *UpdateManualReadyEvent) String() string {
func (*UpdateManualReadyEvent) ProtoMessage() {}
func (x *UpdateManualReadyEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[38]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[42]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2934,7 +3171,7 @@ func (x *UpdateManualReadyEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateManualReadyEvent.ProtoReflect.Descriptor instead.
func (*UpdateManualReadyEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{38}
+ return file_bridge_proto_rawDescGZIP(), []int{42}
}
func (x *UpdateManualReadyEvent) GetVersion() string {
@@ -2945,18 +3182,16 @@ func (x *UpdateManualReadyEvent) GetVersion() string {
}
type UpdateManualRestartNeededEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *UpdateManualRestartNeededEvent) Reset() {
*x = UpdateManualRestartNeededEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[39]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[43]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateManualRestartNeededEvent) String() string {
@@ -2966,8 +3201,8 @@ func (x *UpdateManualRestartNeededEvent) String() string {
func (*UpdateManualRestartNeededEvent) ProtoMessage() {}
func (x *UpdateManualRestartNeededEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[39]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[43]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -2979,24 +3214,21 @@ func (x *UpdateManualRestartNeededEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateManualRestartNeededEvent.ProtoReflect.Descriptor instead.
func (*UpdateManualRestartNeededEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{39}
+ return file_bridge_proto_rawDescGZIP(), []int{43}
}
type UpdateForceEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *UpdateForceEvent) Reset() {
*x = UpdateForceEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[40]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[44]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateForceEvent) String() string {
@@ -3006,8 +3238,8 @@ func (x *UpdateForceEvent) String() string {
func (*UpdateForceEvent) ProtoMessage() {}
func (x *UpdateForceEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[40]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[44]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3019,7 +3251,7 @@ func (x *UpdateForceEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateForceEvent.ProtoReflect.Descriptor instead.
func (*UpdateForceEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{40}
+ return file_bridge_proto_rawDescGZIP(), []int{44}
}
func (x *UpdateForceEvent) GetVersion() string {
@@ -3030,18 +3262,16 @@ func (x *UpdateForceEvent) GetVersion() string {
}
type UpdateSilentRestartNeeded struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *UpdateSilentRestartNeeded) Reset() {
*x = UpdateSilentRestartNeeded{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[41]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[45]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateSilentRestartNeeded) String() string {
@@ -3051,8 +3281,8 @@ func (x *UpdateSilentRestartNeeded) String() string {
func (*UpdateSilentRestartNeeded) ProtoMessage() {}
func (x *UpdateSilentRestartNeeded) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[41]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[45]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3064,22 +3294,20 @@ func (x *UpdateSilentRestartNeeded) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateSilentRestartNeeded.ProtoReflect.Descriptor instead.
func (*UpdateSilentRestartNeeded) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{41}
+ return file_bridge_proto_rawDescGZIP(), []int{45}
}
type UpdateIsLatestVersion struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *UpdateIsLatestVersion) Reset() {
*x = UpdateIsLatestVersion{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[42]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[46]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateIsLatestVersion) String() string {
@@ -3089,8 +3317,8 @@ func (x *UpdateIsLatestVersion) String() string {
func (*UpdateIsLatestVersion) ProtoMessage() {}
func (x *UpdateIsLatestVersion) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[42]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[46]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3102,22 +3330,20 @@ func (x *UpdateIsLatestVersion) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateIsLatestVersion.ProtoReflect.Descriptor instead.
func (*UpdateIsLatestVersion) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{42}
+ return file_bridge_proto_rawDescGZIP(), []int{46}
}
type UpdateCheckFinished struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *UpdateCheckFinished) Reset() {
*x = UpdateCheckFinished{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[43]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[47]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateCheckFinished) String() string {
@@ -3127,8 +3353,8 @@ func (x *UpdateCheckFinished) String() string {
func (*UpdateCheckFinished) ProtoMessage() {}
func (x *UpdateCheckFinished) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[43]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[47]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3140,22 +3366,20 @@ func (x *UpdateCheckFinished) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateCheckFinished.ProtoReflect.Descriptor instead.
func (*UpdateCheckFinished) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{43}
+ return file_bridge_proto_rawDescGZIP(), []int{47}
}
type UpdateVersionChanged struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *UpdateVersionChanged) Reset() {
*x = UpdateVersionChanged{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[44]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[48]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UpdateVersionChanged) String() string {
@@ -3165,8 +3389,8 @@ func (x *UpdateVersionChanged) String() string {
func (*UpdateVersionChanged) ProtoMessage() {}
func (x *UpdateVersionChanged) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[44]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[48]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3178,32 +3402,29 @@ func (x *UpdateVersionChanged) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateVersionChanged.ProtoReflect.Descriptor instead.
func (*UpdateVersionChanged) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{44}
+ return file_bridge_proto_rawDescGZIP(), []int{48}
}
// **********************************************************
// Cache on disk related events
// **********************************************************
type DiskCacheEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Types that are assignable to Event:
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Types that are valid to be assigned to Event:
//
// *DiskCacheEvent_Error
// *DiskCacheEvent_PathChanged
// *DiskCacheEvent_PathChangeFinished
- Event isDiskCacheEvent_Event `protobuf_oneof:"event"`
+ Event isDiskCacheEvent_Event `protobuf_oneof:"event"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *DiskCacheEvent) Reset() {
*x = DiskCacheEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[45]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[49]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DiskCacheEvent) String() string {
@@ -3213,8 +3434,8 @@ func (x *DiskCacheEvent) String() string {
func (*DiskCacheEvent) ProtoMessage() {}
func (x *DiskCacheEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[45]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[49]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3226,33 +3447,39 @@ func (x *DiskCacheEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use DiskCacheEvent.ProtoReflect.Descriptor instead.
func (*DiskCacheEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{45}
+ return file_bridge_proto_rawDescGZIP(), []int{49}
}
-func (m *DiskCacheEvent) GetEvent() isDiskCacheEvent_Event {
- if m != nil {
- return m.Event
+func (x *DiskCacheEvent) GetEvent() isDiskCacheEvent_Event {
+ if x != nil {
+ return x.Event
}
return nil
}
func (x *DiskCacheEvent) GetError() *DiskCacheErrorEvent {
- if x, ok := x.GetEvent().(*DiskCacheEvent_Error); ok {
- return x.Error
+ if x != nil {
+ if x, ok := x.Event.(*DiskCacheEvent_Error); ok {
+ return x.Error
+ }
}
return nil
}
func (x *DiskCacheEvent) GetPathChanged() *DiskCachePathChangedEvent {
- if x, ok := x.GetEvent().(*DiskCacheEvent_PathChanged); ok {
- return x.PathChanged
+ if x != nil {
+ if x, ok := x.Event.(*DiskCacheEvent_PathChanged); ok {
+ return x.PathChanged
+ }
}
return nil
}
func (x *DiskCacheEvent) GetPathChangeFinished() *DiskCachePathChangeFinishedEvent {
- if x, ok := x.GetEvent().(*DiskCacheEvent_PathChangeFinished); ok {
- return x.PathChangeFinished
+ if x != nil {
+ if x, ok := x.Event.(*DiskCacheEvent_PathChangeFinished); ok {
+ return x.PathChangeFinished
+ }
}
return nil
}
@@ -3280,20 +3507,17 @@ func (*DiskCacheEvent_PathChanged) isDiskCacheEvent_Event() {}
func (*DiskCacheEvent_PathChangeFinished) isDiskCacheEvent_Event() {}
type DiskCacheErrorEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Type DiskCacheErrorType `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.DiskCacheErrorType" json:"type,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Type DiskCacheErrorType `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.DiskCacheErrorType" json:"type,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *DiskCacheErrorEvent) Reset() {
*x = DiskCacheErrorEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[46]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[50]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DiskCacheErrorEvent) String() string {
@@ -3303,8 +3527,8 @@ func (x *DiskCacheErrorEvent) String() string {
func (*DiskCacheErrorEvent) ProtoMessage() {}
func (x *DiskCacheErrorEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[46]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[50]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3316,7 +3540,7 @@ func (x *DiskCacheErrorEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use DiskCacheErrorEvent.ProtoReflect.Descriptor instead.
func (*DiskCacheErrorEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{46}
+ return file_bridge_proto_rawDescGZIP(), []int{50}
}
func (x *DiskCacheErrorEvent) GetType() DiskCacheErrorType {
@@ -3327,20 +3551,17 @@ func (x *DiskCacheErrorEvent) GetType() DiskCacheErrorType {
}
type DiskCachePathChangedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *DiskCachePathChangedEvent) Reset() {
*x = DiskCachePathChangedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[47]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[51]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DiskCachePathChangedEvent) String() string {
@@ -3350,8 +3571,8 @@ func (x *DiskCachePathChangedEvent) String() string {
func (*DiskCachePathChangedEvent) ProtoMessage() {}
func (x *DiskCachePathChangedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[47]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[51]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3363,7 +3584,7 @@ func (x *DiskCachePathChangedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use DiskCachePathChangedEvent.ProtoReflect.Descriptor instead.
func (*DiskCachePathChangedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{47}
+ return file_bridge_proto_rawDescGZIP(), []int{51}
}
func (x *DiskCachePathChangedEvent) GetPath() string {
@@ -3374,18 +3595,16 @@ func (x *DiskCachePathChangedEvent) GetPath() string {
}
type DiskCachePathChangeFinishedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *DiskCachePathChangeFinishedEvent) Reset() {
*x = DiskCachePathChangeFinishedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[48]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[52]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *DiskCachePathChangeFinishedEvent) String() string {
@@ -3395,8 +3614,8 @@ func (x *DiskCachePathChangeFinishedEvent) String() string {
func (*DiskCachePathChangeFinishedEvent) ProtoMessage() {}
func (x *DiskCachePathChangeFinishedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[48]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[52]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3408,32 +3627,29 @@ func (x *DiskCachePathChangeFinishedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use DiskCachePathChangeFinishedEvent.ProtoReflect.Descriptor instead.
func (*DiskCachePathChangeFinishedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{48}
+ return file_bridge_proto_rawDescGZIP(), []int{52}
}
// **********************************************************
// Mail server settings related events
// **********************************************************
type MailServerSettingsEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Types that are assignable to Event:
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Types that are valid to be assigned to Event:
//
// *MailServerSettingsEvent_Error
// *MailServerSettingsEvent_MailServerSettingsChanged
// *MailServerSettingsEvent_ChangeMailServerSettingsFinished
- Event isMailServerSettingsEvent_Event `protobuf_oneof:"event"`
+ Event isMailServerSettingsEvent_Event `protobuf_oneof:"event"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *MailServerSettingsEvent) Reset() {
*x = MailServerSettingsEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[49]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[53]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MailServerSettingsEvent) String() string {
@@ -3443,8 +3659,8 @@ func (x *MailServerSettingsEvent) String() string {
func (*MailServerSettingsEvent) ProtoMessage() {}
func (x *MailServerSettingsEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[49]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[53]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3456,33 +3672,39 @@ func (x *MailServerSettingsEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use MailServerSettingsEvent.ProtoReflect.Descriptor instead.
func (*MailServerSettingsEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{49}
+ return file_bridge_proto_rawDescGZIP(), []int{53}
}
-func (m *MailServerSettingsEvent) GetEvent() isMailServerSettingsEvent_Event {
- if m != nil {
- return m.Event
+func (x *MailServerSettingsEvent) GetEvent() isMailServerSettingsEvent_Event {
+ if x != nil {
+ return x.Event
}
return nil
}
func (x *MailServerSettingsEvent) GetError() *MailServerSettingsErrorEvent {
- if x, ok := x.GetEvent().(*MailServerSettingsEvent_Error); ok {
- return x.Error
+ if x != nil {
+ if x, ok := x.Event.(*MailServerSettingsEvent_Error); ok {
+ return x.Error
+ }
}
return nil
}
func (x *MailServerSettingsEvent) GetMailServerSettingsChanged() *MailServerSettingsChangedEvent {
- if x, ok := x.GetEvent().(*MailServerSettingsEvent_MailServerSettingsChanged); ok {
- return x.MailServerSettingsChanged
+ if x != nil {
+ if x, ok := x.Event.(*MailServerSettingsEvent_MailServerSettingsChanged); ok {
+ return x.MailServerSettingsChanged
+ }
}
return nil
}
func (x *MailServerSettingsEvent) GetChangeMailServerSettingsFinished() *ChangeMailServerSettingsFinishedEvent {
- if x, ok := x.GetEvent().(*MailServerSettingsEvent_ChangeMailServerSettingsFinished); ok {
- return x.ChangeMailServerSettingsFinished
+ if x != nil {
+ if x, ok := x.Event.(*MailServerSettingsEvent_ChangeMailServerSettingsFinished); ok {
+ return x.ChangeMailServerSettingsFinished
+ }
}
return nil
}
@@ -3510,20 +3732,17 @@ func (*MailServerSettingsEvent_MailServerSettingsChanged) isMailServerSettingsEv
func (*MailServerSettingsEvent_ChangeMailServerSettingsFinished) isMailServerSettingsEvent_Event() {}
type MailServerSettingsErrorEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Type MailServerSettingsErrorType `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.MailServerSettingsErrorType" json:"type,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Type MailServerSettingsErrorType `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.MailServerSettingsErrorType" json:"type,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *MailServerSettingsErrorEvent) Reset() {
*x = MailServerSettingsErrorEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[50]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[54]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MailServerSettingsErrorEvent) String() string {
@@ -3533,8 +3752,8 @@ func (x *MailServerSettingsErrorEvent) String() string {
func (*MailServerSettingsErrorEvent) ProtoMessage() {}
func (x *MailServerSettingsErrorEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[50]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[54]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3546,7 +3765,7 @@ func (x *MailServerSettingsErrorEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use MailServerSettingsErrorEvent.ProtoReflect.Descriptor instead.
func (*MailServerSettingsErrorEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{50}
+ return file_bridge_proto_rawDescGZIP(), []int{54}
}
func (x *MailServerSettingsErrorEvent) GetType() MailServerSettingsErrorType {
@@ -3557,20 +3776,17 @@ func (x *MailServerSettingsErrorEvent) GetType() MailServerSettingsErrorType {
}
type MailServerSettingsChangedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Settings *ImapSmtpSettings `protobuf:"bytes,1,opt,name=settings,proto3" json:"settings,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Settings *ImapSmtpSettings `protobuf:"bytes,1,opt,name=settings,proto3" json:"settings,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *MailServerSettingsChangedEvent) Reset() {
*x = MailServerSettingsChangedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[51]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[55]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MailServerSettingsChangedEvent) String() string {
@@ -3580,8 +3796,8 @@ func (x *MailServerSettingsChangedEvent) String() string {
func (*MailServerSettingsChangedEvent) ProtoMessage() {}
func (x *MailServerSettingsChangedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[51]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[55]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3593,7 +3809,7 @@ func (x *MailServerSettingsChangedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use MailServerSettingsChangedEvent.ProtoReflect.Descriptor instead.
func (*MailServerSettingsChangedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{51}
+ return file_bridge_proto_rawDescGZIP(), []int{55}
}
func (x *MailServerSettingsChangedEvent) GetSettings() *ImapSmtpSettings {
@@ -3604,18 +3820,16 @@ func (x *MailServerSettingsChangedEvent) GetSettings() *ImapSmtpSettings {
}
type ChangeMailServerSettingsFinishedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *ChangeMailServerSettingsFinishedEvent) Reset() {
*x = ChangeMailServerSettingsFinishedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[52]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[56]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ChangeMailServerSettingsFinishedEvent) String() string {
@@ -3625,8 +3839,8 @@ func (x *ChangeMailServerSettingsFinishedEvent) String() string {
func (*ChangeMailServerSettingsFinishedEvent) ProtoMessage() {}
func (x *ChangeMailServerSettingsFinishedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[52]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[56]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3638,32 +3852,29 @@ func (x *ChangeMailServerSettingsFinishedEvent) ProtoReflect() protoreflect.Mess
// Deprecated: Use ChangeMailServerSettingsFinishedEvent.ProtoReflect.Descriptor instead.
func (*ChangeMailServerSettingsFinishedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{52}
+ return file_bridge_proto_rawDescGZIP(), []int{56}
}
// **********************************************************
// keychain related events
// **********************************************************
type KeychainEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Types that are assignable to Event:
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Types that are valid to be assigned to Event:
//
// *KeychainEvent_ChangeKeychainFinished
// *KeychainEvent_HasNoKeychain
// *KeychainEvent_RebuildKeychain
- Event isKeychainEvent_Event `protobuf_oneof:"event"`
+ Event isKeychainEvent_Event `protobuf_oneof:"event"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *KeychainEvent) Reset() {
*x = KeychainEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[53]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[57]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *KeychainEvent) String() string {
@@ -3673,8 +3884,8 @@ func (x *KeychainEvent) String() string {
func (*KeychainEvent) ProtoMessage() {}
func (x *KeychainEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[53]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[57]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3686,33 +3897,39 @@ func (x *KeychainEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use KeychainEvent.ProtoReflect.Descriptor instead.
func (*KeychainEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{53}
+ return file_bridge_proto_rawDescGZIP(), []int{57}
}
-func (m *KeychainEvent) GetEvent() isKeychainEvent_Event {
- if m != nil {
- return m.Event
+func (x *KeychainEvent) GetEvent() isKeychainEvent_Event {
+ if x != nil {
+ return x.Event
}
return nil
}
func (x *KeychainEvent) GetChangeKeychainFinished() *ChangeKeychainFinishedEvent {
- if x, ok := x.GetEvent().(*KeychainEvent_ChangeKeychainFinished); ok {
- return x.ChangeKeychainFinished
+ if x != nil {
+ if x, ok := x.Event.(*KeychainEvent_ChangeKeychainFinished); ok {
+ return x.ChangeKeychainFinished
+ }
}
return nil
}
func (x *KeychainEvent) GetHasNoKeychain() *HasNoKeychainEvent {
- if x, ok := x.GetEvent().(*KeychainEvent_HasNoKeychain); ok {
- return x.HasNoKeychain
+ if x != nil {
+ if x, ok := x.Event.(*KeychainEvent_HasNoKeychain); ok {
+ return x.HasNoKeychain
+ }
}
return nil
}
func (x *KeychainEvent) GetRebuildKeychain() *RebuildKeychainEvent {
- if x, ok := x.GetEvent().(*KeychainEvent_RebuildKeychain); ok {
- return x.RebuildKeychain
+ if x != nil {
+ if x, ok := x.Event.(*KeychainEvent_RebuildKeychain); ok {
+ return x.RebuildKeychain
+ }
}
return nil
}
@@ -3740,18 +3957,16 @@ func (*KeychainEvent_HasNoKeychain) isKeychainEvent_Event() {}
func (*KeychainEvent_RebuildKeychain) isKeychainEvent_Event() {}
type ChangeKeychainFinishedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *ChangeKeychainFinishedEvent) Reset() {
*x = ChangeKeychainFinishedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[54]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[58]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ChangeKeychainFinishedEvent) String() string {
@@ -3761,8 +3976,8 @@ func (x *ChangeKeychainFinishedEvent) String() string {
func (*ChangeKeychainFinishedEvent) ProtoMessage() {}
func (x *ChangeKeychainFinishedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[54]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[58]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3774,22 +3989,20 @@ func (x *ChangeKeychainFinishedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use ChangeKeychainFinishedEvent.ProtoReflect.Descriptor instead.
func (*ChangeKeychainFinishedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{54}
+ return file_bridge_proto_rawDescGZIP(), []int{58}
}
type HasNoKeychainEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *HasNoKeychainEvent) Reset() {
*x = HasNoKeychainEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[55]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[59]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *HasNoKeychainEvent) String() string {
@@ -3799,8 +4012,8 @@ func (x *HasNoKeychainEvent) String() string {
func (*HasNoKeychainEvent) ProtoMessage() {}
func (x *HasNoKeychainEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[55]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[59]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3812,22 +4025,20 @@ func (x *HasNoKeychainEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use HasNoKeychainEvent.ProtoReflect.Descriptor instead.
func (*HasNoKeychainEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{55}
+ return file_bridge_proto_rawDescGZIP(), []int{59}
}
type RebuildKeychainEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *RebuildKeychainEvent) Reset() {
*x = RebuildKeychainEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[56]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[60]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *RebuildKeychainEvent) String() string {
@@ -3837,8 +4048,8 @@ func (x *RebuildKeychainEvent) String() string {
func (*RebuildKeychainEvent) ProtoMessage() {}
func (x *RebuildKeychainEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[56]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[60]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3850,32 +4061,29 @@ func (x *RebuildKeychainEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use RebuildKeychainEvent.ProtoReflect.Descriptor instead.
func (*RebuildKeychainEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{56}
+ return file_bridge_proto_rawDescGZIP(), []int{60}
}
// **********************************************************
// Mail related events
// **********************************************************
type MailEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Types that are assignable to Event:
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Types that are valid to be assigned to Event:
//
// *MailEvent_AddressChanged
// *MailEvent_AddressChangedLogout
// *MailEvent_ApiCertIssue
- Event isMailEvent_Event `protobuf_oneof:"event"`
+ Event isMailEvent_Event `protobuf_oneof:"event"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *MailEvent) Reset() {
*x = MailEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[57]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[61]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *MailEvent) String() string {
@@ -3885,8 +4093,8 @@ func (x *MailEvent) String() string {
func (*MailEvent) ProtoMessage() {}
func (x *MailEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[57]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[61]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3898,33 +4106,39 @@ func (x *MailEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use MailEvent.ProtoReflect.Descriptor instead.
func (*MailEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{57}
+ return file_bridge_proto_rawDescGZIP(), []int{61}
}
-func (m *MailEvent) GetEvent() isMailEvent_Event {
- if m != nil {
- return m.Event
+func (x *MailEvent) GetEvent() isMailEvent_Event {
+ if x != nil {
+ return x.Event
}
return nil
}
func (x *MailEvent) GetAddressChanged() *AddressChangedEvent {
- if x, ok := x.GetEvent().(*MailEvent_AddressChanged); ok {
- return x.AddressChanged
+ if x != nil {
+ if x, ok := x.Event.(*MailEvent_AddressChanged); ok {
+ return x.AddressChanged
+ }
}
return nil
}
func (x *MailEvent) GetAddressChangedLogout() *AddressChangedLogoutEvent {
- if x, ok := x.GetEvent().(*MailEvent_AddressChangedLogout); ok {
- return x.AddressChangedLogout
+ if x != nil {
+ if x, ok := x.Event.(*MailEvent_AddressChangedLogout); ok {
+ return x.AddressChangedLogout
+ }
}
return nil
}
func (x *MailEvent) GetApiCertIssue() *ApiCertIssueEvent {
- if x, ok := x.GetEvent().(*MailEvent_ApiCertIssue); ok {
- return x.ApiCertIssue
+ if x != nil {
+ if x, ok := x.Event.(*MailEvent_ApiCertIssue); ok {
+ return x.ApiCertIssue
+ }
}
return nil
}
@@ -3952,20 +4166,17 @@ func (*MailEvent_AddressChangedLogout) isMailEvent_Event() {}
func (*MailEvent_ApiCertIssue) isMailEvent_Event() {}
type AddressChangedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *AddressChangedEvent) Reset() {
*x = AddressChangedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[58]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[62]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *AddressChangedEvent) String() string {
@@ -3975,8 +4186,8 @@ func (x *AddressChangedEvent) String() string {
func (*AddressChangedEvent) ProtoMessage() {}
func (x *AddressChangedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[58]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[62]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -3988,7 +4199,7 @@ func (x *AddressChangedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use AddressChangedEvent.ProtoReflect.Descriptor instead.
func (*AddressChangedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{58}
+ return file_bridge_proto_rawDescGZIP(), []int{62}
}
func (x *AddressChangedEvent) GetAddress() string {
@@ -3999,20 +4210,17 @@ func (x *AddressChangedEvent) GetAddress() string {
}
type AddressChangedLogoutEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *AddressChangedLogoutEvent) Reset() {
*x = AddressChangedLogoutEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[59]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[63]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *AddressChangedLogoutEvent) String() string {
@@ -4022,8 +4230,8 @@ func (x *AddressChangedLogoutEvent) String() string {
func (*AddressChangedLogoutEvent) ProtoMessage() {}
func (x *AddressChangedLogoutEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[59]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[63]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4035,7 +4243,7 @@ func (x *AddressChangedLogoutEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use AddressChangedLogoutEvent.ProtoReflect.Descriptor instead.
func (*AddressChangedLogoutEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{59}
+ return file_bridge_proto_rawDescGZIP(), []int{63}
}
func (x *AddressChangedLogoutEvent) GetAddress() string {
@@ -4046,18 +4254,16 @@ func (x *AddressChangedLogoutEvent) GetAddress() string {
}
type ApiCertIssueEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *ApiCertIssueEvent) Reset() {
*x = ApiCertIssueEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[60]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[64]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ApiCertIssueEvent) String() string {
@@ -4067,8 +4273,8 @@ func (x *ApiCertIssueEvent) String() string {
func (*ApiCertIssueEvent) ProtoMessage() {}
func (x *ApiCertIssueEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[60]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[64]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4080,15 +4286,12 @@ func (x *ApiCertIssueEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use ApiCertIssueEvent.ProtoReflect.Descriptor instead.
func (*ApiCertIssueEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{60}
+ return file_bridge_proto_rawDescGZIP(), []int{64}
}
type UserEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Types that are assignable to Event:
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Types that are valid to be assigned to Event:
//
// *UserEvent_ToggleSplitModeFinished
// *UserEvent_UserDisconnected
@@ -4099,16 +4302,16 @@ type UserEvent struct {
// *UserEvent_SyncStartedEvent
// *UserEvent_SyncFinishedEvent
// *UserEvent_SyncProgressEvent
- Event isUserEvent_Event `protobuf_oneof:"event"`
+ Event isUserEvent_Event `protobuf_oneof:"event"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *UserEvent) Reset() {
*x = UserEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[61]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[65]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UserEvent) String() string {
@@ -4118,8 +4321,8 @@ func (x *UserEvent) String() string {
func (*UserEvent) ProtoMessage() {}
func (x *UserEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[61]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[65]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4131,75 +4334,93 @@ func (x *UserEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserEvent.ProtoReflect.Descriptor instead.
func (*UserEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{61}
+ return file_bridge_proto_rawDescGZIP(), []int{65}
}
-func (m *UserEvent) GetEvent() isUserEvent_Event {
- if m != nil {
- return m.Event
+func (x *UserEvent) GetEvent() isUserEvent_Event {
+ if x != nil {
+ return x.Event
}
return nil
}
func (x *UserEvent) GetToggleSplitModeFinished() *ToggleSplitModeFinishedEvent {
- if x, ok := x.GetEvent().(*UserEvent_ToggleSplitModeFinished); ok {
- return x.ToggleSplitModeFinished
+ if x != nil {
+ if x, ok := x.Event.(*UserEvent_ToggleSplitModeFinished); ok {
+ return x.ToggleSplitModeFinished
+ }
}
return nil
}
func (x *UserEvent) GetUserDisconnected() *UserDisconnectedEvent {
- if x, ok := x.GetEvent().(*UserEvent_UserDisconnected); ok {
- return x.UserDisconnected
+ if x != nil {
+ if x, ok := x.Event.(*UserEvent_UserDisconnected); ok {
+ return x.UserDisconnected
+ }
}
return nil
}
func (x *UserEvent) GetUserChanged() *UserChangedEvent {
- if x, ok := x.GetEvent().(*UserEvent_UserChanged); ok {
- return x.UserChanged
+ if x != nil {
+ if x, ok := x.Event.(*UserEvent_UserChanged); ok {
+ return x.UserChanged
+ }
}
return nil
}
func (x *UserEvent) GetUserBadEvent() *UserBadEvent {
- if x, ok := x.GetEvent().(*UserEvent_UserBadEvent); ok {
- return x.UserBadEvent
+ if x != nil {
+ if x, ok := x.Event.(*UserEvent_UserBadEvent); ok {
+ return x.UserBadEvent
+ }
}
return nil
}
func (x *UserEvent) GetUsedBytesChangedEvent() *UsedBytesChangedEvent {
- if x, ok := x.GetEvent().(*UserEvent_UsedBytesChangedEvent); ok {
- return x.UsedBytesChangedEvent
+ if x != nil {
+ if x, ok := x.Event.(*UserEvent_UsedBytesChangedEvent); ok {
+ return x.UsedBytesChangedEvent
+ }
}
return nil
}
func (x *UserEvent) GetImapLoginFailedEvent() *ImapLoginFailedEvent {
- if x, ok := x.GetEvent().(*UserEvent_ImapLoginFailedEvent); ok {
- return x.ImapLoginFailedEvent
+ if x != nil {
+ if x, ok := x.Event.(*UserEvent_ImapLoginFailedEvent); ok {
+ return x.ImapLoginFailedEvent
+ }
}
return nil
}
func (x *UserEvent) GetSyncStartedEvent() *SyncStartedEvent {
- if x, ok := x.GetEvent().(*UserEvent_SyncStartedEvent); ok {
- return x.SyncStartedEvent
+ if x != nil {
+ if x, ok := x.Event.(*UserEvent_SyncStartedEvent); ok {
+ return x.SyncStartedEvent
+ }
}
return nil
}
func (x *UserEvent) GetSyncFinishedEvent() *SyncFinishedEvent {
- if x, ok := x.GetEvent().(*UserEvent_SyncFinishedEvent); ok {
- return x.SyncFinishedEvent
+ if x != nil {
+ if x, ok := x.Event.(*UserEvent_SyncFinishedEvent); ok {
+ return x.SyncFinishedEvent
+ }
}
return nil
}
func (x *UserEvent) GetSyncProgressEvent() *SyncProgressEvent {
- if x, ok := x.GetEvent().(*UserEvent_SyncProgressEvent); ok {
- return x.SyncProgressEvent
+ if x != nil {
+ if x, ok := x.Event.(*UserEvent_SyncProgressEvent); ok {
+ return x.SyncProgressEvent
+ }
}
return nil
}
@@ -4263,20 +4484,17 @@ func (*UserEvent_SyncFinishedEvent) isUserEvent_Event() {}
func (*UserEvent_SyncProgressEvent) isUserEvent_Event() {}
type ToggleSplitModeFinishedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
unknownFields protoimpl.UnknownFields
-
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *ToggleSplitModeFinishedEvent) Reset() {
*x = ToggleSplitModeFinishedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[62]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[66]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ToggleSplitModeFinishedEvent) String() string {
@@ -4286,8 +4504,8 @@ func (x *ToggleSplitModeFinishedEvent) String() string {
func (*ToggleSplitModeFinishedEvent) ProtoMessage() {}
func (x *ToggleSplitModeFinishedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[62]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[66]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4299,7 +4517,7 @@ func (x *ToggleSplitModeFinishedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use ToggleSplitModeFinishedEvent.ProtoReflect.Descriptor instead.
func (*ToggleSplitModeFinishedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{62}
+ return file_bridge_proto_rawDescGZIP(), []int{66}
}
func (x *ToggleSplitModeFinishedEvent) GetUserID() string {
@@ -4310,20 +4528,17 @@ func (x *ToggleSplitModeFinishedEvent) GetUserID() string {
}
type UserDisconnectedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *UserDisconnectedEvent) Reset() {
*x = UserDisconnectedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[63]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[67]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UserDisconnectedEvent) String() string {
@@ -4333,8 +4548,8 @@ func (x *UserDisconnectedEvent) String() string {
func (*UserDisconnectedEvent) ProtoMessage() {}
func (x *UserDisconnectedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[63]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[67]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4346,7 +4561,7 @@ func (x *UserDisconnectedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserDisconnectedEvent.ProtoReflect.Descriptor instead.
func (*UserDisconnectedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{63}
+ return file_bridge_proto_rawDescGZIP(), []int{67}
}
func (x *UserDisconnectedEvent) GetUsername() string {
@@ -4357,20 +4572,17 @@ func (x *UserDisconnectedEvent) GetUsername() string {
}
type UserChangedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
unknownFields protoimpl.UnknownFields
-
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *UserChangedEvent) Reset() {
*x = UserChangedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[64]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[68]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UserChangedEvent) String() string {
@@ -4380,8 +4592,8 @@ func (x *UserChangedEvent) String() string {
func (*UserChangedEvent) ProtoMessage() {}
func (x *UserChangedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[64]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[68]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4393,7 +4605,7 @@ func (x *UserChangedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserChangedEvent.ProtoReflect.Descriptor instead.
func (*UserChangedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{64}
+ return file_bridge_proto_rawDescGZIP(), []int{68}
}
func (x *UserChangedEvent) GetUserID() string {
@@ -4404,21 +4616,18 @@ func (x *UserChangedEvent) GetUserID() string {
}
type UserBadEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
+ ErrorMessage string `protobuf:"bytes,2,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"`
unknownFields protoimpl.UnknownFields
-
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
- ErrorMessage string `protobuf:"bytes,2,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *UserBadEvent) Reset() {
*x = UserBadEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[65]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[69]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UserBadEvent) String() string {
@@ -4428,8 +4637,8 @@ func (x *UserBadEvent) String() string {
func (*UserBadEvent) ProtoMessage() {}
func (x *UserBadEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[65]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[69]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4441,7 +4650,7 @@ func (x *UserBadEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserBadEvent.ProtoReflect.Descriptor instead.
func (*UserBadEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{65}
+ return file_bridge_proto_rawDescGZIP(), []int{69}
}
func (x *UserBadEvent) GetUserID() string {
@@ -4459,21 +4668,18 @@ func (x *UserBadEvent) GetErrorMessage() string {
}
type UsedBytesChangedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
+ UsedBytes int64 `protobuf:"varint,2,opt,name=usedBytes,proto3" json:"usedBytes,omitempty"`
unknownFields protoimpl.UnknownFields
-
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
- UsedBytes int64 `protobuf:"varint,2,opt,name=usedBytes,proto3" json:"usedBytes,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *UsedBytesChangedEvent) Reset() {
*x = UsedBytesChangedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[66]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[70]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UsedBytesChangedEvent) String() string {
@@ -4483,8 +4689,8 @@ func (x *UsedBytesChangedEvent) String() string {
func (*UsedBytesChangedEvent) ProtoMessage() {}
func (x *UsedBytesChangedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[66]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[70]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4496,7 +4702,7 @@ func (x *UsedBytesChangedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use UsedBytesChangedEvent.ProtoReflect.Descriptor instead.
func (*UsedBytesChangedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{66}
+ return file_bridge_proto_rawDescGZIP(), []int{70}
}
func (x *UsedBytesChangedEvent) GetUserID() string {
@@ -4514,20 +4720,17 @@ func (x *UsedBytesChangedEvent) GetUsedBytes() int64 {
}
type ImapLoginFailedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *ImapLoginFailedEvent) Reset() {
*x = ImapLoginFailedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[67]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[71]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *ImapLoginFailedEvent) String() string {
@@ -4537,8 +4740,8 @@ func (x *ImapLoginFailedEvent) String() string {
func (*ImapLoginFailedEvent) ProtoMessage() {}
func (x *ImapLoginFailedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[67]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[71]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4550,7 +4753,7 @@ func (x *ImapLoginFailedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use ImapLoginFailedEvent.ProtoReflect.Descriptor instead.
func (*ImapLoginFailedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{67}
+ return file_bridge_proto_rawDescGZIP(), []int{71}
}
func (x *ImapLoginFailedEvent) GetUsername() string {
@@ -4561,20 +4764,17 @@ func (x *ImapLoginFailedEvent) GetUsername() string {
}
type SyncStartedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
unknownFields protoimpl.UnknownFields
-
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *SyncStartedEvent) Reset() {
*x = SyncStartedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[68]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[72]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SyncStartedEvent) String() string {
@@ -4584,8 +4784,8 @@ func (x *SyncStartedEvent) String() string {
func (*SyncStartedEvent) ProtoMessage() {}
func (x *SyncStartedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[68]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[72]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4597,7 +4797,7 @@ func (x *SyncStartedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use SyncStartedEvent.ProtoReflect.Descriptor instead.
func (*SyncStartedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{68}
+ return file_bridge_proto_rawDescGZIP(), []int{72}
}
func (x *SyncStartedEvent) GetUserID() string {
@@ -4608,20 +4808,17 @@ func (x *SyncStartedEvent) GetUserID() string {
}
type SyncFinishedEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
unknownFields protoimpl.UnknownFields
-
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *SyncFinishedEvent) Reset() {
*x = SyncFinishedEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[69]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[73]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SyncFinishedEvent) String() string {
@@ -4631,8 +4828,8 @@ func (x *SyncFinishedEvent) String() string {
func (*SyncFinishedEvent) ProtoMessage() {}
func (x *SyncFinishedEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[69]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[73]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4644,7 +4841,7 @@ func (x *SyncFinishedEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use SyncFinishedEvent.ProtoReflect.Descriptor instead.
func (*SyncFinishedEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{69}
+ return file_bridge_proto_rawDescGZIP(), []int{73}
}
func (x *SyncFinishedEvent) GetUserID() string {
@@ -4655,23 +4852,20 @@ func (x *SyncFinishedEvent) GetUserID() string {
}
type SyncProgressEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
+ Progress float64 `protobuf:"fixed64,2,opt,name=progress,proto3" json:"progress,omitempty"`
+ ElapsedMs int64 `protobuf:"varint,3,opt,name=elapsedMs,proto3" json:"elapsedMs,omitempty"`
+ RemainingMs int64 `protobuf:"varint,4,opt,name=remainingMs,proto3" json:"remainingMs,omitempty"`
unknownFields protoimpl.UnknownFields
-
- UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID,omitempty"`
- Progress float64 `protobuf:"fixed64,2,opt,name=progress,proto3" json:"progress,omitempty"`
- ElapsedMs int64 `protobuf:"varint,3,opt,name=elapsedMs,proto3" json:"elapsedMs,omitempty"`
- RemainingMs int64 `protobuf:"varint,4,opt,name=remainingMs,proto3" json:"remainingMs,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *SyncProgressEvent) Reset() {
*x = SyncProgressEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[70]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[74]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *SyncProgressEvent) String() string {
@@ -4681,8 +4875,8 @@ func (x *SyncProgressEvent) String() string {
func (*SyncProgressEvent) ProtoMessage() {}
func (x *SyncProgressEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[70]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[74]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4694,7 +4888,7 @@ func (x *SyncProgressEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use SyncProgressEvent.ProtoReflect.Descriptor instead.
func (*SyncProgressEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{70}
+ return file_bridge_proto_rawDescGZIP(), []int{74}
}
func (x *SyncProgressEvent) GetUserID() string {
@@ -4726,23 +4920,20 @@ func (x *SyncProgressEvent) GetRemainingMs() int64 {
}
type UserNotificationEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
+ Subtitle string `protobuf:"bytes,2,opt,name=subtitle,proto3" json:"subtitle,omitempty"`
+ Body string `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"`
+ UserID string `protobuf:"bytes,4,opt,name=userID,proto3" json:"userID,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
- Subtitle string `protobuf:"bytes,2,opt,name=subtitle,proto3" json:"subtitle,omitempty"`
- Body string `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"`
- UserID string `protobuf:"bytes,4,opt,name=userID,proto3" json:"userID,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *UserNotificationEvent) Reset() {
*x = UserNotificationEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[71]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[75]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *UserNotificationEvent) String() string {
@@ -4752,8 +4943,8 @@ func (x *UserNotificationEvent) String() string {
func (*UserNotificationEvent) ProtoMessage() {}
func (x *UserNotificationEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[71]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[75]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4765,7 +4956,7 @@ func (x *UserNotificationEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserNotificationEvent.ProtoReflect.Descriptor instead.
func (*UserNotificationEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{71}
+ return file_bridge_proto_rawDescGZIP(), []int{75}
}
func (x *UserNotificationEvent) GetTitle() string {
@@ -4797,20 +4988,17 @@ func (x *UserNotificationEvent) GetUserID() string {
}
type GenericErrorEvent struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Code ErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=grpc.ErrorCode" json:"code,omitempty"`
unknownFields protoimpl.UnknownFields
-
- Code ErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=grpc.ErrorCode" json:"code,omitempty"`
+ sizeCache protoimpl.SizeCache
}
func (x *GenericErrorEvent) Reset() {
*x = GenericErrorEvent{}
- if protoimpl.UnsafeEnabled {
- mi := &file_bridge_proto_msgTypes[72]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
+ mi := &file_bridge_proto_msgTypes[76]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
func (x *GenericErrorEvent) String() string {
@@ -4820,8 +5008,8 @@ func (x *GenericErrorEvent) String() string {
func (*GenericErrorEvent) ProtoMessage() {}
func (x *GenericErrorEvent) ProtoReflect() protoreflect.Message {
- mi := &file_bridge_proto_msgTypes[72]
- if protoimpl.UnsafeEnabled && x != nil {
+ mi := &file_bridge_proto_msgTypes[76]
+ if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
@@ -4833,7 +5021,7 @@ func (x *GenericErrorEvent) ProtoReflect() protoreflect.Message {
// Deprecated: Use GenericErrorEvent.ProtoReflect.Descriptor instead.
func (*GenericErrorEvent) Descriptor() ([]byte, []int) {
- return file_bridge_proto_rawDescGZIP(), []int{72}
+ return file_bridge_proto_rawDescGZIP(), []int{76}
}
func (x *GenericErrorEvent) GetCode() ErrorCode {
@@ -4845,875 +5033,378 @@ func (x *GenericErrorEvent) GetCode() ErrorCode {
var File_bridge_proto protoreflect.FileDescriptor
-var file_bridge_proto_rawDesc = []byte{
- 0x0a, 0x0c, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04,
- 0x67, 0x72, 0x70, 0x63, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
- 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x22, 0x6e, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f,
- 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x18, 0x0a,
- 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
- 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
- 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
- 0x65, 0x22, 0x3e, 0x0a, 0x10, 0x47, 0x75, 0x69, 0x52, 0x65, 0x61, 0x64, 0x79, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x68, 0x6f, 0x77, 0x53, 0x70, 0x6c,
- 0x61, 0x73, 0x68, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x10, 0x73, 0x68, 0x6f, 0x77, 0x53, 0x70, 0x6c, 0x61, 0x73, 0x68, 0x53, 0x63, 0x72, 0x65, 0x65,
- 0x6e, 0x22, 0xde, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c,
- 0x0a, 0x09, 0x6f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x09, 0x6f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05,
- 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74,
- 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
- 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
- 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x20,
- 0x0a, 0x0b, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74,
- 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x18,
- 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x6f,
- 0x67, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x0c, 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,
- 0x0c, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x27, 0x0a, 0x0c, 0x75,
- 0x73, 0x65, 0x48, 0x76, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x08, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x48, 0x76, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c,
- 0x73, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x75, 0x73, 0x65, 0x48, 0x76, 0x44, 0x65,
- 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x2f, 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x41, 0x62,
- 0x6f, 0x72, 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, 0x22, 0x96, 0x01, 0x0a, 0x10, 0x49, 0x6d, 0x61, 0x70, 0x53,
- 0x6d, 0x74, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x69,
- 0x6d, 0x61, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x69,
- 0x6d, 0x61, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6d, 0x74, 0x70, 0x50,
- 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x6d, 0x74, 0x70, 0x50,
- 0x6f, 0x72, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x53, 0x53, 0x4c, 0x46, 0x6f, 0x72,
- 0x49, 0x6d, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x53,
- 0x53, 0x4c, 0x46, 0x6f, 0x72, 0x49, 0x6d, 0x61, 0x70, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65,
- 0x53, 0x53, 0x4c, 0x46, 0x6f, 0x72, 0x53, 0x6d, 0x74, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x0d, 0x75, 0x73, 0x65, 0x53, 0x53, 0x4c, 0x46, 0x6f, 0x72, 0x53, 0x6d, 0x74, 0x70, 0x22,
- 0x3a, 0x0a, 0x1a, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x63,
- 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a,
- 0x09, 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
- 0x52, 0x09, 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x22, 0x8f, 0x02, 0x0a, 0x04,
- 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65,
- 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x54, 0x65, 0x78, 0x74, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x54, 0x65, 0x78, 0x74,
- 0x12, 0x25, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32,
- 0x0f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65,
- 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x70, 0x6c, 0x69, 0x74,
- 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x70, 0x6c, 0x69,
- 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74,
- 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, 0x42, 0x79,
- 0x74, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65,
- 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79,
- 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18,
- 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12,
- 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03,
- 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x46, 0x0a,
- 0x14, 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x16, 0x0a,
- 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61,
- 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x51, 0x0a, 0x1b, 0x55, 0x73, 0x65, 0x72, 0x42, 0x61, 0x64,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08,
- 0x64, 0x6f, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08,
- 0x64, 0x6f, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x22, 0x34, 0x0a, 0x10, 0x55, 0x73, 0x65, 0x72,
- 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x05,
- 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x67, 0x72,
- 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x4d,
- 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65,
- 0x4d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75,
- 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65,
- 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3c, 0x0a,
- 0x12, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61,
- 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x43, 0x6c, 0x69,
- 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xd0, 0x03, 0x0a, 0x0b,
- 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x03, 0x61,
- 0x70, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,
- 0x41, 0x70, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12,
- 0x28, 0x0a, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
- 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74,
- 0x48, 0x00, 0x52, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x2b, 0x0a, 0x06, 0x75, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x72, 0x70, 0x63,
- 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x06,
- 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73,
- 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x63,
- 0x61, 0x63, 0x68, 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48,
- 0x00, 0x52, 0x12, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x74,
- 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x31, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69,
- 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4b,
- 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08,
- 0x6b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x04, 0x6d, 0x61, 0x69, 0x6c,
- 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61,
- 0x69, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x12,
- 0x25, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e,
- 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00,
- 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69,
- 0x63, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67,
- 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x45, 0x72, 0x72, 0x6f, 0x72,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63,
- 0x45, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xd2,
- 0x09, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0e, 0x69,
- 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72,
- 0x6e, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00,
- 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x12, 0x5e, 0x0a, 0x17, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x74,
- 0x61, 0x72, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x41,
- 0x75, 0x74, 0x6f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x41,
- 0x75, 0x74, 0x6f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64,
- 0x12, 0x40, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65,
- 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52,
- 0x65, 0x73, 0x65, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e,
- 0x74, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68,
- 0x65, 0x64, 0x12, 0x4c, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x46,
- 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
- 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x46, 0x69,
- 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x72,
- 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64,
- 0x12, 0x49, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x53, 0x75, 0x63,
- 0x63, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70,
- 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x53, 0x75, 0x63, 0x63, 0x65,
- 0x73, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6f, 0x72,
- 0x74, 0x42, 0x75, 0x67, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x43, 0x0a, 0x0e, 0x72,
- 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x06, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72,
- 0x74, 0x42, 0x75, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00,
- 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72,
- 0x12, 0x43, 0x0a, 0x0e, 0x73, 0x68, 0x6f, 0x77, 0x4d, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64,
- 0x6f, 0x77, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,
- 0x53, 0x68, 0x6f, 0x77, 0x4d, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x45, 0x76,
- 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x68, 0x6f, 0x77, 0x4d, 0x61, 0x69, 0x6e, 0x57,
- 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x4c, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42,
- 0x75, 0x67, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75,
- 0x67, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00,
- 0x52, 0x11, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x46, 0x61, 0x6c, 0x6c, 0x62,
- 0x61, 0x63, 0x6b, 0x12, 0x64, 0x0a, 0x19, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
- 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73,
- 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x65,
- 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
- 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x19,
- 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61,
- 0x6c, 0x6c, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x67, 0x0a, 0x1a, 0x63, 0x65, 0x72,
- 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x43,
- 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e,
- 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65,
- 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x45,
- 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
- 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c,
- 0x65, 0x64, 0x12, 0x61, 0x0a, 0x18, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
- 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x0b,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x65, 0x72, 0x74,
- 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x46, 0x61,
- 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x63, 0x65, 0x72,
- 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x46,
- 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x61, 0x0a, 0x18, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64,
- 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4b,
- 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x53, 0x75, 0x67, 0x67,
- 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18,
- 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x53, 0x75, 0x67,
- 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x61,
- 0x69, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x61, 0x69, 0x72, 0x53, 0x74, 0x61,
- 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x65, 0x70,
- 0x61, 0x69, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x43, 0x0a, 0x0e, 0x61, 0x6c,
- 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65,
- 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52,
- 0x0e, 0x61, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12,
- 0x49, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63,
- 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f,
- 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76,
- 0x65, 0x6e, 0x74, 0x22, 0x33, 0x0a, 0x13, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x53,
- 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f,
- 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63,
- 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0x1e, 0x0a, 0x1c, 0x54, 0x6f, 0x67, 0x67,
- 0x6c, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73,
- 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x65,
- 0x74, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x18,
- 0x0a, 0x16, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x46, 0x69, 0x6e, 0x69, 0x73,
- 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6f,
- 0x72, 0x74, 0x42, 0x75, 0x67, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x45, 0x76, 0x65, 0x6e,
- 0x74, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x45, 0x72,
- 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x68, 0x6f, 0x77,
- 0x4d, 0x61, 0x69, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22,
- 0x18, 0x0a, 0x16, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x46, 0x61, 0x6c, 0x6c,
- 0x62, 0x61, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x20, 0x0a, 0x1e, 0x43, 0x65, 0x72,
- 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x53,
- 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x21, 0x0a, 0x1f, 0x43,
- 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c,
- 0x6c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1f,
- 0x0a, 0x1d, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73,
- 0x74, 0x61, 0x6c, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22,
- 0x14, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x61, 0x69, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x15, 0x0a, 0x13, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72,
- 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x41, 0x0a, 0x17,
- 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x53, 0x75, 0x67,
- 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74,
- 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22,
- 0x60, 0x0a, 0x1d, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65,
- 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74,
- 0x12, 0x3f, 0x0a, 0x0b, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
- 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4b, 0x6e, 0x6f,
- 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x22, 0xa4, 0x03, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74,
- 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x15, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f,
- 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12,
- 0x42, 0x0a, 0x0c, 0x74, 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67,
- 0x69, 0x6e, 0x54, 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x76,
- 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x65, 0x64, 0x12, 0x5b, 0x0a, 0x14, 0x74, 0x77, 0x6f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f,
- 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x77,
- 0x6f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x74, 0x77, 0x6f, 0x50,
- 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64,
- 0x12, 0x36, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46,
- 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08,
- 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x0f, 0x61, 0x6c, 0x72, 0x65,
- 0x61, 0x64, 0x79, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x69,
- 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x61,
- 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x12, 0x3f,
- 0x0a, 0x0b, 0x68, 0x76, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e,
- 0x48, 0x76, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74,
- 0x48, 0x00, 0x52, 0x0b, 0x68, 0x76, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42,
- 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x0f, 0x4c, 0x6f, 0x67, 0x69,
- 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x74,
- 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x70, 0x63,
- 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52,
- 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22,
- 0x34, 0x0a, 0x16, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 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, 0x22, 0x3d, 0x0a, 0x1f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x77,
- 0x6f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 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, 0x22, 0x50, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x69, 0x6e,
- 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73,
- 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72,
- 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x61, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x4f,
- 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x77, 0x61, 0x73, 0x53, 0x69, 0x67,
- 0x6e, 0x65, 0x64, 0x4f, 0x75, 0x74, 0x22, 0x2d, 0x0a, 0x15, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x48,
- 0x76, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12,
- 0x14, 0x0a, 0x05, 0x68, 0x76, 0x55, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
- 0x68, 0x76, 0x55, 0x72, 0x6c, 0x22, 0xb9, 0x04, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05,
- 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x0b, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52,
- 0x65, 0x61, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70,
- 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65,
- 0x61, 0x64, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x61, 0x6e, 0x75,
- 0x61, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x58, 0x0a, 0x13, 0x6d, 0x61, 0x6e, 0x75, 0x61,
- 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e,
- 0x65, 0x65, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x6d, 0x61,
- 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65,
- 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f,
- 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63,
- 0x65, 0x12, 0x53, 0x0a, 0x13, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x74, 0x61,
- 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f,
- 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x69, 0x6c, 0x65,
- 0x6e, 0x74, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x48,
- 0x00, 0x52, 0x13, 0x73, 0x69, 0x6c, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74,
- 0x4e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x0f, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65,
- 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x73, 0x4c,
- 0x61, 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0f,
- 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
- 0x41, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64,
- 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65,
- 0x64, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68,
- 0x65, 0x64, 0x12, 0x44, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61,
- 0x6e, 0x67, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70,
- 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43,
- 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
- 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e,
- 0x74, 0x22, 0x3d, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65,
- 0x22, 0x32, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c,
- 0x52, 0x65, 0x61, 0x64, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65,
- 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72,
- 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61,
- 0x6e, 0x75, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65,
- 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x46, 0x6f, 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65,
- 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72,
- 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x1b, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x69,
- 0x6c, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x65,
- 0x64, 0x22, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x73, 0x4c, 0x61, 0x74,
- 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x15, 0x0a, 0x13, 0x55, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65,
- 0x64, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69,
- 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0xeb, 0x01, 0x0a, 0x0e, 0x44, 0x69,
- 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x05,
- 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72,
- 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x72, 0x72, 0x6f,
- 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12,
- 0x43, 0x0a, 0x0b, 0x70, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73, 0x6b,
- 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61,
- 0x6e, 0x67, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x12, 0x70, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e,
- 0x67, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x26, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68,
- 0x65, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73,
- 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x70, 0x61, 0x74, 0x68,
- 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x42, 0x07,
- 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x43, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x6b, 0x43,
- 0x61, 0x63, 0x68, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2c,
- 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67,
- 0x72, 0x70, 0x63, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x72, 0x72,
- 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2f, 0x0a, 0x19,
- 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61,
- 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74,
- 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x22, 0x0a,
- 0x20, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68,
- 0x61, 0x6e, 0x67, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e,
- 0x74, 0x22, 0xbf, 0x02, 0x0a, 0x17, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x0a,
- 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67,
- 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65,
- 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74,
- 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x64, 0x0a, 0x19, 0x6d, 0x61, 0x69,
- 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x43,
- 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67,
- 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65,
- 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65,
- 0x6e, 0x74, 0x48, 0x00, 0x52, 0x19, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12,
- 0x79, 0x0a, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73,
- 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x72, 0x70, 0x63,
- 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65,
- 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
- 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
- 0x67, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76,
- 0x65, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x1c, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x76,
- 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0e, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72,
- 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x54, 0x0a, 0x1e, 0x4d, 0x61,
- 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
- 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x08,
- 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,
- 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6d, 0x61, 0x70, 0x53, 0x6d, 0x74, 0x70, 0x53, 0x65,
- 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
- 0x22, 0x27, 0x0a, 0x25, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x46, 0x69, 0x6e, 0x69,
- 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xff, 0x01, 0x0a, 0x0d, 0x4b, 0x65,
- 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5b, 0x0a, 0x16, 0x63,
- 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e,
- 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x72,
- 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69,
- 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00,
- 0x52, 0x16, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e,
- 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x4e,
- 0x6f, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x61, 0x73, 0x4e, 0x6f, 0x4b, 0x65, 0x79, 0x63,
- 0x68, 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x68, 0x61, 0x73,
- 0x4e, 0x6f, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x46, 0x0a, 0x0f, 0x72, 0x65,
- 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69,
- 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48,
- 0x00, 0x52, 0x0f, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61,
- 0x69, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x1d, 0x0a, 0x1b, 0x43,
- 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e,
- 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x48, 0x61,
- 0x73, 0x4e, 0x6f, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74,
- 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x63, 0x68,
- 0x61, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xef, 0x01, 0x0a, 0x09, 0x4d, 0x61, 0x69,
- 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
- 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
- 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61,
- 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x61, 0x64, 0x64,
- 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x55, 0x0a, 0x14, 0x61,
- 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4c, 0x6f, 0x67,
- 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63,
- 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4c,
- 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x61, 0x64,
- 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x6f,
- 0x75, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x70, 0x69, 0x43, 0x65, 0x72, 0x74, 0x49, 0x73, 0x73,
- 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,
- 0x41, 0x70, 0x69, 0x43, 0x65, 0x72, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, 0x45, 0x76, 0x65, 0x6e,
- 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x70, 0x69, 0x43, 0x65, 0x72, 0x74, 0x49, 0x73, 0x73, 0x75,
- 0x65, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x2f, 0x0a, 0x13, 0x41, 0x64,
- 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e,
- 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x35, 0x0a, 0x19, 0x41,
- 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4c, 0x6f, 0x67,
- 0x6f, 0x75, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72,
- 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65,
- 0x73, 0x73, 0x22, 0x13, 0x0a, 0x11, 0x41, 0x70, 0x69, 0x43, 0x65, 0x72, 0x74, 0x49, 0x73, 0x73,
- 0x75, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xb4, 0x05, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5e, 0x0a, 0x17, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x53,
- 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x6f,
- 0x67, 0x67, 0x6c, 0x65, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6e,
- 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x74, 0x6f,
- 0x67, 0x67, 0x6c, 0x65, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6e,
- 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73,
- 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f,
- 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10,
- 0x75, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64,
- 0x12, 0x3a, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65,
- 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52,
- 0x0b, 0x75, 0x73, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x38, 0x0a, 0x0c,
- 0x75, 0x73, 0x65, 0x72, 0x42, 0x61, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x42, 0x61,
- 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x42, 0x61,
- 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x64, 0x42, 0x79,
- 0x74, 0x65, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65,
- 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65,
- 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x43,
- 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x50, 0x0a, 0x14, 0x69,
- 0x6d, 0x61, 0x70, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76,
- 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63,
- 0x2e, 0x49, 0x6d, 0x61, 0x70, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x69, 0x6d, 0x61, 0x70, 0x4c, 0x6f, 0x67,
- 0x69, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x44, 0x0a,
- 0x10, 0x73, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e,
- 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53,
- 0x79, 0x6e, 0x63, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48,
- 0x00, 0x52, 0x10, 0x73, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76,
- 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x11, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x69, 0x6e, 0x69, 0x73,
- 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
- 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68,
- 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x73, 0x79, 0x6e, 0x63, 0x46,
- 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x11,
- 0x73, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x45, 0x76, 0x65, 0x6e,
- 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53,
- 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74,
- 0x48, 0x00, 0x52, 0x11, 0x73, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x36,
- 0x0a, 0x1c, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64,
- 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16,
- 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
- 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x33, 0x0a, 0x15, 0x55, 0x73, 0x65, 0x72, 0x44, 0x69,
- 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 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, 0x22, 0x2a, 0x0a, 0x10, 0x55,
- 0x73, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12,
- 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0x4a, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x42,
- 0x61, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
- 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12,
- 0x22, 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73,
- 0x61, 0x67, 0x65, 0x22, 0x4d, 0x0a, 0x15, 0x55, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73,
- 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06,
- 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73,
- 0x65, 0x72, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65,
- 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74,
- 0x65, 0x73, 0x22, 0x32, 0x0a, 0x14, 0x49, 0x6d, 0x61, 0x70, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46,
- 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 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, 0x22, 0x2a, 0x0a, 0x10, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x74,
- 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73,
- 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72,
- 0x49, 0x44, 0x22, 0x2b, 0x0a, 0x11, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68,
- 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
- 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22,
- 0x87, 0x01, 0x0a, 0x11, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1a, 0x0a,
- 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52,
- 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6c, 0x61,
- 0x70, 0x73, 0x65, 0x64, 0x4d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x6c,
- 0x61, 0x70, 0x73, 0x65, 0x64, 0x4d, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x61, 0x69,
- 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65,
- 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x73, 0x22, 0x75, 0x0a, 0x15, 0x55, 0x73, 0x65,
- 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65,
- 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x74,
- 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, 0x62, 0x74,
- 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72,
- 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44,
- 0x22, 0x38, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x45, 0x72, 0x72, 0x6f, 0x72,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72,
- 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x2a, 0x71, 0x0a, 0x08, 0x4c, 0x6f,
- 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x47, 0x5f, 0x50, 0x41,
- 0x4e, 0x49, 0x43, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x47, 0x5f, 0x46, 0x41, 0x54,
- 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x47, 0x5f, 0x45, 0x52, 0x52, 0x4f,
- 0x52, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x4f, 0x47, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10,
- 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x4f, 0x47, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x04, 0x12,
- 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x47, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x05, 0x12, 0x0d,
- 0x0a, 0x09, 0x4c, 0x4f, 0x47, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x06, 0x2a, 0x36, 0x0a,
- 0x09, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x49,
- 0x47, 0x4e, 0x45, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x4f,
- 0x43, 0x4b, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43,
- 0x54, 0x45, 0x44, 0x10, 0x02, 0x2a, 0xb0, 0x01, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45,
- 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x55, 0x53, 0x45, 0x52,
- 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x5f, 0x45, 0x52,
- 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x52, 0x45, 0x45, 0x5f, 0x55, 0x53,
- 0x45, 0x52, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49,
- 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x46,
- 0x41, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x46, 0x41,
- 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x57, 0x4f, 0x5f,
- 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10,
- 0x05, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x57, 0x4f, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52,
- 0x44, 0x53, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x48, 0x56,
- 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x07, 0x2a, 0x5b, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x55,
- 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52,
- 0x4f, 0x52, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46,
- 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13,
- 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x49, 0x4c, 0x45, 0x4e, 0x54, 0x5f, 0x45, 0x52,
- 0x52, 0x4f, 0x52, 0x10, 0x02, 0x2a, 0x34, 0x0a, 0x12, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63,
- 0x68, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x43,
- 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x5f, 0x43, 0x41,
- 0x43, 0x48, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x2a, 0xdd, 0x01, 0x0a, 0x1b,
- 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
- 0x67, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x49,
- 0x4d, 0x41, 0x50, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x55, 0x50,
- 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x4d, 0x54, 0x50,
- 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x55, 0x50, 0x5f, 0x45, 0x52,
- 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4d, 0x41, 0x50, 0x5f, 0x50, 0x4f,
- 0x52, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10,
- 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x4d, 0x54, 0x50, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x43,
- 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x25, 0x0a,
- 0x21, 0x49, 0x4d, 0x41, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e,
- 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x45, 0x52, 0x52,
- 0x4f, 0x52, 0x10, 0x04, 0x12, 0x25, 0x0a, 0x21, 0x53, 0x4d, 0x54, 0x50, 0x5f, 0x43, 0x4f, 0x4e,
- 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x48, 0x41,
- 0x4e, 0x47, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x2a, 0x53, 0x0a, 0x09, 0x45,
- 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x4b, 0x4e,
- 0x4f, 0x57, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x54,
- 0x4c, 0x53, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x5f, 0x45, 0x58, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x45,
- 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x54, 0x4c, 0x53, 0x5f, 0x4b, 0x45,
- 0x59, 0x5f, 0x45, 0x58, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02,
- 0x32, 0xbd, 0x21, 0x0a, 0x06, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x12, 0x49, 0x0a, 0x0b, 0x43,
- 0x68, 0x65, 0x63, 0x6b, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72,
- 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e,
- 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x4c, 0x6f, 0x67,
- 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64,
- 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3a, 0x0a, 0x08, 0x47, 0x75, 0x69, 0x52, 0x65,
- 0x61, 0x64, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x72,
- 0x70, 0x63, 0x2e, 0x47, 0x75, 0x69, 0x52, 0x65, 0x61, 0x64, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x51, 0x75, 0x69, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f,
- 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
- 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x07, 0x52,
- 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16,
- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x77, 0x4f, 0x6e,
- 0x53, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a,
- 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x46, 0x0a, 0x10, 0x53,
- 0x65, 0x74, 0x49, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x6e, 0x12,
- 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
- 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
- 0x70, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x0d, 0x49, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x74, 0x61,
- 0x72, 0x74, 0x4f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42,
- 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x46, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x49,
- 0x73, 0x42, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1a, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42,
- 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
- 0x12, 0x43, 0x0a, 0x0d, 0x49, 0x73, 0x42, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65,
- 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
- 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x49, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x49, 0x73, 0x41, 0x6c,
- 0x6c, 0x4d, 0x61, 0x69, 0x6c, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x1a, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42,
- 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
- 0x12, 0x46, 0x0a, 0x10, 0x49, 0x73, 0x41, 0x6c, 0x6c, 0x4d, 0x61, 0x69, 0x6c, 0x56, 0x69, 0x73,
- 0x69, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42,
- 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4c, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x49,
- 0x73, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c,
- 0x65, 0x64, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16,
- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x49, 0x0a, 0x13, 0x49, 0x73, 0x54, 0x65, 0x6c, 0x65,
- 0x6d, 0x65, 0x74, 0x72, 0x79, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x2e,
- 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
- 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75,
- 0x65, 0x12, 0x3c, 0x0a, 0x04, 0x47, 0x6f, 0x4f, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
- 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
- 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
- 0x3e, 0x0a, 0x0c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12,
- 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12,
- 0x3f, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
- 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x12, 0x40, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x73, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
- 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x74,
- 0x68, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
- 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69,
- 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4c, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x65, 0x61,
- 0x73, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x50, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x12,
- 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4e, 0x0a, 0x16, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65,
- 0x6e, 0x63, 0x79, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x12,
- 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x47, 0x0a, 0x0f, 0x4c, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67,
- 0x50, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
- 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
- 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4a,
- 0x0a, 0x12, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65,
- 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x0f, 0x43, 0x6f,
- 0x6c, 0x6f, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x2e,
- 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
- 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x12, 0x4a, 0x0a, 0x12, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x45, 0x6d,
- 0x61, 0x69, 0x6c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
- 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
- 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
- 0x3b, 0x0a, 0x09, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x12, 0x16, 0x2e, 0x67,
- 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x75, 0x67, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x45, 0x0a, 0x0d,
- 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x72, 0x12, 0x1c, 0x2e,
- 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
- 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
- 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
- 0x70, 0x74, 0x79, 0x12, 0x49, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x45, 0x78,
- 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e,
- 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x57,
- 0x0a, 0x1f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64,
- 0x67, 0x65, 0x42, 0x61, 0x73, 0x65, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a,
- 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e,
- 0x12, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x36, 0x0a, 0x08,
- 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x32, 0x46, 0x41, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,
- 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
- 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x0f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x32, 0x50, 0x61,
- 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c,
- 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
- 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
- 0x70, 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x41, 0x62, 0x6f, 0x72,
- 0x74, 0x12, 0x17, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x41, 0x62,
- 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
- 0x74, 0x79, 0x12, 0x3d, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
- 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
- 0x79, 0x12, 0x3f, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x55, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
- 0x74, 0x79, 0x12, 0x4c, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x49, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x6d,
- 0x61, 0x74, 0x69, 0x63, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x12, 0x1a, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42,
- 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
- 0x12, 0x49, 0x0a, 0x13, 0x49, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a,
- 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x44,
- 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
- 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x12, 0x48, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x44, 0x69, 0x73, 0x6b, 0x43, 0x61, 0x63,
- 0x68, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x45, 0x0a, 0x0f,
- 0x53, 0x65, 0x74, 0x49, 0x73, 0x44, 0x6f, 0x48, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12,
- 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
- 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
- 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0c, 0x49, 0x73, 0x44, 0x6f, 0x48, 0x45, 0x6e, 0x61, 0x62,
- 0x6c, 0x65, 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f,
- 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f,
- 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x44, 0x0a, 0x12, 0x4d, 0x61, 0x69, 0x6c, 0x53,
- 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e,
- 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
- 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6d, 0x61,
- 0x70, 0x53, 0x6d, 0x74, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x47, 0x0a,
- 0x15, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65,
- 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6d,
- 0x61, 0x70, 0x53, 0x6d, 0x74, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x16,
- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x40, 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61,
- 0x6d, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72,
- 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x49, 0x73, 0x50, 0x6f,
- 0x72, 0x74, 0x46, 0x72, 0x65, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
- 0x4e, 0x0a, 0x12, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x63,
- 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e,
- 0x67, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4b, 0x65,
- 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x4a, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79,
- 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x0f, 0x43,
- 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x16,
- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c,
- 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x72,
- 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c,
- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x0a, 0x2e, 0x67,
- 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x55,
- 0x73, 0x65, 0x72, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x2e, 0x67,
- 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x6f, 0x64,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
- 0x12, 0x55, 0x0a, 0x18, 0x53, 0x65, 0x6e, 0x64, 0x42, 0x61, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74,
- 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x21, 0x2e, 0x67,
- 0x72, 0x70, 0x63, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x42, 0x61, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74,
- 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x6f, 0x75,
- 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0a, 0x52,
- 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
- 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69,
- 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12,
- 0x51, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x55, 0x73, 0x65, 0x72,
- 0x41, 0x70, 0x70, 0x6c, 0x65, 0x4d, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63,
- 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x4d,
- 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
- 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x19, 0x49, 0x73, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x69,
- 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12,
- 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x12, 0x47, 0x0a, 0x15, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x54, 0x4c,
- 0x53, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
- 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4d, 0x0a, 0x15,
- 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69,
- 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x0e, 0x52,
- 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e,
- 0x67, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x53,
- 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x41, 0x0a, 0x0f,
- 0x53, 0x74, 0x6f, 0x70, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12,
- 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12,
- 0x3f, 0x0a, 0x0d, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x70, 0x61, 0x69, 0x72,
- 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
- 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
- 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50,
- 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x4d, 0x61, 0x69, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e,
- 0x2d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2f, 0x76, 0x33, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,
- 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
+const file_bridge_proto_rawDesc = "" +
+ "\n" +
+ "\fbridge.proto\x12\x04grpc\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1egoogle/protobuf/wrappers.proto\"n\n" +
+ "\x12AddLogEntryRequest\x12$\n" +
+ "\x05level\x18\x01 \x01(\x0e2\x0e.grpc.LogLevelR\x05level\x12\x18\n" +
+ "\apackage\x18\x02 \x01(\tR\apackage\x12\x18\n" +
+ "\amessage\x18\x03 \x01(\tR\amessage\">\n" +
+ "\x10GuiReadyResponse\x12*\n" +
+ "\x10showSplashScreen\x18\x01 \x01(\bR\x10showSplashScreen\"\xde\x01\n" +
+ "\x10ReportBugRequest\x12\x16\n" +
+ "\x06osType\x18\x01 \x01(\tR\x06osType\x12\x1c\n" +
+ "\tosVersion\x18\x02 \x01(\tR\tosVersion\x12\x14\n" +
+ "\x05title\x18\x03 \x01(\tR\x05title\x12 \n" +
+ "\vdescription\x18\x04 \x01(\tR\vdescription\x12\x18\n" +
+ "\aaddress\x18\x05 \x01(\tR\aaddress\x12 \n" +
+ "\vemailClient\x18\x06 \x01(\tR\vemailClient\x12 \n" +
+ "\vincludeLogs\x18\a \x01(\bR\vincludeLogs\"\x80\x01\n" +
+ "\fLoginRequest\x12\x1a\n" +
+ "\busername\x18\x01 \x01(\tR\busername\x12\x1a\n" +
+ "\bpassword\x18\x02 \x01(\fR\bpassword\x12'\n" +
+ "\fuseHvDetails\x18\x03 \x01(\bH\x00R\fuseHvDetails\x88\x01\x01B\x0f\n" +
+ "\r_useHvDetails\"/\n" +
+ "\x11LoginAbortRequest\x12\x1a\n" +
+ "\busername\x18\x01 \x01(\tR\busername\"\x96\x01\n" +
+ "\x10ImapSmtpSettings\x12\x1a\n" +
+ "\bimapPort\x18\x01 \x01(\x05R\bimapPort\x12\x1a\n" +
+ "\bsmtpPort\x18\x02 \x01(\x05R\bsmtpPort\x12$\n" +
+ "\ruseSSLForImap\x18\x03 \x01(\bR\ruseSSLForImap\x12$\n" +
+ "\ruseSSLForSmtp\x18\x04 \x01(\bR\ruseSSLForSmtp\":\n" +
+ "\x1aAvailableKeychainsResponse\x12\x1c\n" +
+ "\tkeychains\x18\x01 \x03(\tR\tkeychains\"\x8f\x02\n" +
+ "\x04User\x12\x0e\n" +
+ "\x02id\x18\x01 \x01(\tR\x02id\x12\x1a\n" +
+ "\busername\x18\x02 \x01(\tR\busername\x12\x1e\n" +
+ "\n" +
+ "avatarText\x18\x03 \x01(\tR\n" +
+ "avatarText\x12%\n" +
+ "\x05state\x18\x04 \x01(\x0e2\x0f.grpc.UserStateR\x05state\x12\x1c\n" +
+ "\tsplitMode\x18\x05 \x01(\bR\tsplitMode\x12\x1c\n" +
+ "\tusedBytes\x18\x06 \x01(\x03R\tusedBytes\x12\x1e\n" +
+ "\n" +
+ "totalBytes\x18\a \x01(\x03R\n" +
+ "totalBytes\x12\x1a\n" +
+ "\bpassword\x18\b \x01(\fR\bpassword\x12\x1c\n" +
+ "\taddresses\x18\t \x03(\tR\taddresses\"F\n" +
+ "\x14UserSplitModeRequest\x12\x16\n" +
+ "\x06userID\x18\x01 \x01(\tR\x06userID\x12\x16\n" +
+ "\x06active\x18\x02 \x01(\bR\x06active\"Q\n" +
+ "\x1bUserBadEventFeedbackRequest\x12\x16\n" +
+ "\x06userID\x18\x01 \x01(\tR\x06userID\x12\x1a\n" +
+ "\bdoResync\x18\x02 \x01(\bR\bdoResync\"4\n" +
+ "\x10UserListResponse\x12 \n" +
+ "\x05users\x18\x01 \x03(\v2\n" +
+ ".grpc.UserR\x05users\"M\n" +
+ "\x19ConfigureAppleMailRequest\x12\x16\n" +
+ "\x06userID\x18\x01 \x01(\tR\x06userID\x12\x18\n" +
+ "\aaddress\x18\x02 \x01(\tR\aaddress\"<\n" +
+ "\x12EventStreamRequest\x12&\n" +
+ "\x0eClientPlatform\x18\x01 \x01(\tR\x0eClientPlatform\"\xd0\x03\n" +
+ "\vStreamEvent\x12\"\n" +
+ "\x03app\x18\x01 \x01(\v2\x0e.grpc.AppEventH\x00R\x03app\x12(\n" +
+ "\x05login\x18\x02 \x01(\v2\x10.grpc.LoginEventH\x00R\x05login\x12+\n" +
+ "\x06update\x18\x03 \x01(\v2\x11.grpc.UpdateEventH\x00R\x06update\x12,\n" +
+ "\x05cache\x18\x04 \x01(\v2\x14.grpc.DiskCacheEventH\x00R\x05cache\x12O\n" +
+ "\x12mailServerSettings\x18\x05 \x01(\v2\x1d.grpc.MailServerSettingsEventH\x00R\x12mailServerSettings\x121\n" +
+ "\bkeychain\x18\x06 \x01(\v2\x13.grpc.KeychainEventH\x00R\bkeychain\x12%\n" +
+ "\x04mail\x18\a \x01(\v2\x0f.grpc.MailEventH\x00R\x04mail\x12%\n" +
+ "\x04user\x18\b \x01(\v2\x0f.grpc.UserEventH\x00R\x04user\x12=\n" +
+ "\fgenericError\x18\t \x01(\v2\x17.grpc.GenericErrorEventH\x00R\fgenericErrorB\a\n" +
+ "\x05event\"\xd2\t\n" +
+ "\bAppEvent\x12C\n" +
+ "\x0einternetStatus\x18\x01 \x01(\v2\x19.grpc.InternetStatusEventH\x00R\x0einternetStatus\x12^\n" +
+ "\x17toggleAutostartFinished\x18\x02 \x01(\v2\".grpc.ToggleAutostartFinishedEventH\x00R\x17toggleAutostartFinished\x12@\n" +
+ "\rresetFinished\x18\x03 \x01(\v2\x18.grpc.ResetFinishedEventH\x00R\rresetFinished\x12L\n" +
+ "\x11reportBugFinished\x18\x04 \x01(\v2\x1c.grpc.ReportBugFinishedEventH\x00R\x11reportBugFinished\x12I\n" +
+ "\x10reportBugSuccess\x18\x05 \x01(\v2\x1b.grpc.ReportBugSuccessEventH\x00R\x10reportBugSuccess\x12C\n" +
+ "\x0ereportBugError\x18\x06 \x01(\v2\x19.grpc.ReportBugErrorEventH\x00R\x0ereportBugError\x12C\n" +
+ "\x0eshowMainWindow\x18\a \x01(\v2\x19.grpc.ShowMainWindowEventH\x00R\x0eshowMainWindow\x12L\n" +
+ "\x11reportBugFallback\x18\b \x01(\v2\x1c.grpc.ReportBugFallbackEventH\x00R\x11reportBugFallback\x12d\n" +
+ "\x19certificateInstallSuccess\x18\t \x01(\v2$.grpc.CertificateInstallSuccessEventH\x00R\x19certificateInstallSuccess\x12g\n" +
+ "\x1acertificateInstallCanceled\x18\n" +
+ " \x01(\v2%.grpc.CertificateInstallCanceledEventH\x00R\x1acertificateInstallCanceled\x12a\n" +
+ "\x18certificateInstallFailed\x18\v \x01(\v2#.grpc.CertificateInstallFailedEventH\x00R\x18certificateInstallFailed\x12a\n" +
+ "\x18knowledgeBaseSuggestions\x18\f \x01(\v2#.grpc.KnowledgeBaseSuggestionsEventH\x00R\x18knowledgeBaseSuggestions\x12@\n" +
+ "\rrepairStarted\x18\r \x01(\v2\x18.grpc.RepairStartedEventH\x00R\rrepairStarted\x12C\n" +
+ "\x0eallUsersLoaded\x18\x0e \x01(\v2\x19.grpc.AllUsersLoadedEventH\x00R\x0eallUsersLoaded\x12I\n" +
+ "\x10userNotification\x18\x0f \x01(\v2\x1b.grpc.UserNotificationEventH\x00R\x10userNotificationB\a\n" +
+ "\x05event\"3\n" +
+ "\x13InternetStatusEvent\x12\x1c\n" +
+ "\tconnected\x18\x01 \x01(\bR\tconnected\"\x1e\n" +
+ "\x1cToggleAutostartFinishedEvent\"\x14\n" +
+ "\x12ResetFinishedEvent\"\x18\n" +
+ "\x16ReportBugFinishedEvent\"\x17\n" +
+ "\x15ReportBugSuccessEvent\"\x15\n" +
+ "\x13ReportBugErrorEvent\"\x15\n" +
+ "\x13ShowMainWindowEvent\"\x18\n" +
+ "\x16ReportBugFallbackEvent\" \n" +
+ "\x1eCertificateInstallSuccessEvent\"!\n" +
+ "\x1fCertificateInstallCanceledEvent\"\x1f\n" +
+ "\x1dCertificateInstallFailedEvent\"\x14\n" +
+ "\x12RepairStartedEvent\"\x15\n" +
+ "\x13AllUsersLoadedEvent\"A\n" +
+ "\x17KnowledgeBaseSuggestion\x12\x10\n" +
+ "\x03url\x18\x01 \x01(\tR\x03url\x12\x14\n" +
+ "\x05title\x18\x02 \x01(\tR\x05title\"`\n" +
+ "\x1dKnowledgeBaseSuggestionsEvent\x12?\n" +
+ "\vsuggestions\x18\x01 \x03(\v2\x1d.grpc.KnowledgeBaseSuggestionR\vsuggestions\"\xc1\x06\n" +
+ "\n" +
+ "LoginEvent\x12-\n" +
+ "\x05error\x18\x01 \x01(\v2\x15.grpc.LoginErrorEventH\x00R\x05error\x12B\n" +
+ "\ftfaRequested\x18\x02 \x01(\v2\x1c.grpc.LoginTfaRequestedEventH\x00R\ftfaRequested\x12[\n" +
+ "\x14twoPasswordRequested\x18\x03 \x01(\v2%.grpc.LoginTwoPasswordsRequestedEventH\x00R\x14twoPasswordRequested\x126\n" +
+ "\bfinished\x18\x04 \x01(\v2\x18.grpc.LoginFinishedEventH\x00R\bfinished\x12D\n" +
+ "\x0falreadyLoggedIn\x18\x05 \x01(\v2\x18.grpc.LoginFinishedEventH\x00R\x0falreadyLoggedIn\x12?\n" +
+ "\vhvRequested\x18\x06 \x01(\v2\x1b.grpc.LoginHvRequestedEventH\x00R\vhvRequested\x12E\n" +
+ "\rfidoRequested\x18\a \x01(\v2\x1d.grpc.LoginFidoRequestedEventH\x00R\rfidoRequested\x12T\n" +
+ "\x12tfaOrFidoRequested\x18\b \x01(\v2\".grpc.LoginTfaOrFidoRequestedEventH\x00R\x12tfaOrFidoRequested\x12U\n" +
+ "\x17loginFidoTouchRequested\x18\t \x01(\v2\x19.grpc.LoginFidoTouchEventH\x00R\x17loginFidoTouchRequested\x12U\n" +
+ "\x17loginFidoTouchCompleted\x18\n" +
+ " \x01(\v2\x19.grpc.LoginFidoTouchEventH\x00R\x17loginFidoTouchCompleted\x12P\n" +
+ "\x14loginFidoPinRequired\x18\v \x01(\v2\x1a.grpc.LoginFidoPinRequiredH\x00R\x14loginFidoPinRequiredB\a\n" +
+ "\x05event\"U\n" +
+ "\x0fLoginErrorEvent\x12(\n" +
+ "\x04type\x18\x01 \x01(\x0e2\x14.grpc.LoginErrorTypeR\x04type\x12\x18\n" +
+ "\amessage\x18\x02 \x01(\tR\amessage\"4\n" +
+ "\x16LoginTfaRequestedEvent\x12\x1a\n" +
+ "\busername\x18\x01 \x01(\tR\busername\"5\n" +
+ "\x17LoginFidoRequestedEvent\x12\x1a\n" +
+ "\busername\x18\x01 \x01(\tR\busername\":\n" +
+ "\x1cLoginTfaOrFidoRequestedEvent\x12\x1a\n" +
+ "\busername\x18\x01 \x01(\tR\busername\"1\n" +
+ "\x13LoginFidoTouchEvent\x12\x1a\n" +
+ "\busername\x18\x01 \x01(\tR\busername\"2\n" +
+ "\x14LoginFidoPinRequired\x12\x1a\n" +
+ "\busername\x18\x01 \x01(\tR\busername\"=\n" +
+ "\x1fLoginTwoPasswordsRequestedEvent\x12\x1a\n" +
+ "\busername\x18\x01 \x01(\tR\busername\"P\n" +
+ "\x12LoginFinishedEvent\x12\x16\n" +
+ "\x06userID\x18\x01 \x01(\tR\x06userID\x12\"\n" +
+ "\fwasSignedOut\x18\x02 \x01(\bR\fwasSignedOut\"-\n" +
+ "\x15LoginHvRequestedEvent\x12\x14\n" +
+ "\x05hvUrl\x18\x01 \x01(\tR\x05hvUrl\"\xb9\x04\n" +
+ "\vUpdateEvent\x12.\n" +
+ "\x05error\x18\x01 \x01(\v2\x16.grpc.UpdateErrorEventH\x00R\x05error\x12@\n" +
+ "\vmanualReady\x18\x02 \x01(\v2\x1c.grpc.UpdateManualReadyEventH\x00R\vmanualReady\x12X\n" +
+ "\x13manualRestartNeeded\x18\x03 \x01(\v2$.grpc.UpdateManualRestartNeededEventH\x00R\x13manualRestartNeeded\x12.\n" +
+ "\x05force\x18\x04 \x01(\v2\x16.grpc.UpdateForceEventH\x00R\x05force\x12S\n" +
+ "\x13silentRestartNeeded\x18\x05 \x01(\v2\x1f.grpc.UpdateSilentRestartNeededH\x00R\x13silentRestartNeeded\x12G\n" +
+ "\x0fisLatestVersion\x18\x06 \x01(\v2\x1b.grpc.UpdateIsLatestVersionH\x00R\x0fisLatestVersion\x12A\n" +
+ "\rcheckFinished\x18\a \x01(\v2\x19.grpc.UpdateCheckFinishedH\x00R\rcheckFinished\x12D\n" +
+ "\x0eversionChanged\x18\b \x01(\v2\x1a.grpc.UpdateVersionChangedH\x00R\x0eversionChangedB\a\n" +
+ "\x05event\"=\n" +
+ "\x10UpdateErrorEvent\x12)\n" +
+ "\x04type\x18\x01 \x01(\x0e2\x15.grpc.UpdateErrorTypeR\x04type\"2\n" +
+ "\x16UpdateManualReadyEvent\x12\x18\n" +
+ "\aversion\x18\x01 \x01(\tR\aversion\" \n" +
+ "\x1eUpdateManualRestartNeededEvent\",\n" +
+ "\x10UpdateForceEvent\x12\x18\n" +
+ "\aversion\x18\x01 \x01(\tR\aversion\"\x1b\n" +
+ "\x19UpdateSilentRestartNeeded\"\x17\n" +
+ "\x15UpdateIsLatestVersion\"\x15\n" +
+ "\x13UpdateCheckFinished\"\x16\n" +
+ "\x14UpdateVersionChanged\"\xeb\x01\n" +
+ "\x0eDiskCacheEvent\x121\n" +
+ "\x05error\x18\x01 \x01(\v2\x19.grpc.DiskCacheErrorEventH\x00R\x05error\x12C\n" +
+ "\vpathChanged\x18\x02 \x01(\v2\x1f.grpc.DiskCachePathChangedEventH\x00R\vpathChanged\x12X\n" +
+ "\x12pathChangeFinished\x18\x03 \x01(\v2&.grpc.DiskCachePathChangeFinishedEventH\x00R\x12pathChangeFinishedB\a\n" +
+ "\x05event\"C\n" +
+ "\x13DiskCacheErrorEvent\x12,\n" +
+ "\x04type\x18\x01 \x01(\x0e2\x18.grpc.DiskCacheErrorTypeR\x04type\"/\n" +
+ "\x19DiskCachePathChangedEvent\x12\x12\n" +
+ "\x04path\x18\x01 \x01(\tR\x04path\"\"\n" +
+ " DiskCachePathChangeFinishedEvent\"\xbf\x02\n" +
+ "\x17MailServerSettingsEvent\x12:\n" +
+ "\x05error\x18\x01 \x01(\v2\".grpc.MailServerSettingsErrorEventH\x00R\x05error\x12d\n" +
+ "\x19mailServerSettingsChanged\x18\x02 \x01(\v2$.grpc.MailServerSettingsChangedEventH\x00R\x19mailServerSettingsChanged\x12y\n" +
+ " changeMailServerSettingsFinished\x18\x03 \x01(\v2+.grpc.ChangeMailServerSettingsFinishedEventH\x00R changeMailServerSettingsFinishedB\a\n" +
+ "\x05event\"U\n" +
+ "\x1cMailServerSettingsErrorEvent\x125\n" +
+ "\x04type\x18\x01 \x01(\x0e2!.grpc.MailServerSettingsErrorTypeR\x04type\"T\n" +
+ "\x1eMailServerSettingsChangedEvent\x122\n" +
+ "\bsettings\x18\x01 \x01(\v2\x16.grpc.ImapSmtpSettingsR\bsettings\"'\n" +
+ "%ChangeMailServerSettingsFinishedEvent\"\xff\x01\n" +
+ "\rKeychainEvent\x12[\n" +
+ "\x16changeKeychainFinished\x18\x01 \x01(\v2!.grpc.ChangeKeychainFinishedEventH\x00R\x16changeKeychainFinished\x12@\n" +
+ "\rhasNoKeychain\x18\x02 \x01(\v2\x18.grpc.HasNoKeychainEventH\x00R\rhasNoKeychain\x12F\n" +
+ "\x0frebuildKeychain\x18\x03 \x01(\v2\x1a.grpc.RebuildKeychainEventH\x00R\x0frebuildKeychainB\a\n" +
+ "\x05event\"\x1d\n" +
+ "\x1bChangeKeychainFinishedEvent\"\x14\n" +
+ "\x12HasNoKeychainEvent\"\x16\n" +
+ "\x14RebuildKeychainEvent\"\xef\x01\n" +
+ "\tMailEvent\x12C\n" +
+ "\x0eaddressChanged\x18\x01 \x01(\v2\x19.grpc.AddressChangedEventH\x00R\x0eaddressChanged\x12U\n" +
+ "\x14addressChangedLogout\x18\x02 \x01(\v2\x1f.grpc.AddressChangedLogoutEventH\x00R\x14addressChangedLogout\x12=\n" +
+ "\fapiCertIssue\x18\x03 \x01(\v2\x17.grpc.ApiCertIssueEventH\x00R\fapiCertIssueB\a\n" +
+ "\x05event\"/\n" +
+ "\x13AddressChangedEvent\x12\x18\n" +
+ "\aaddress\x18\x01 \x01(\tR\aaddress\"5\n" +
+ "\x19AddressChangedLogoutEvent\x12\x18\n" +
+ "\aaddress\x18\x01 \x01(\tR\aaddress\"\x13\n" +
+ "\x11ApiCertIssueEvent\"\xb4\x05\n" +
+ "\tUserEvent\x12^\n" +
+ "\x17toggleSplitModeFinished\x18\x01 \x01(\v2\".grpc.ToggleSplitModeFinishedEventH\x00R\x17toggleSplitModeFinished\x12I\n" +
+ "\x10userDisconnected\x18\x02 \x01(\v2\x1b.grpc.UserDisconnectedEventH\x00R\x10userDisconnected\x12:\n" +
+ "\vuserChanged\x18\x03 \x01(\v2\x16.grpc.UserChangedEventH\x00R\vuserChanged\x128\n" +
+ "\fuserBadEvent\x18\x04 \x01(\v2\x12.grpc.UserBadEventH\x00R\fuserBadEvent\x12S\n" +
+ "\x15usedBytesChangedEvent\x18\x05 \x01(\v2\x1b.grpc.UsedBytesChangedEventH\x00R\x15usedBytesChangedEvent\x12P\n" +
+ "\x14imapLoginFailedEvent\x18\x06 \x01(\v2\x1a.grpc.ImapLoginFailedEventH\x00R\x14imapLoginFailedEvent\x12D\n" +
+ "\x10syncStartedEvent\x18\a \x01(\v2\x16.grpc.SyncStartedEventH\x00R\x10syncStartedEvent\x12G\n" +
+ "\x11syncFinishedEvent\x18\b \x01(\v2\x17.grpc.SyncFinishedEventH\x00R\x11syncFinishedEvent\x12G\n" +
+ "\x11syncProgressEvent\x18\t \x01(\v2\x17.grpc.SyncProgressEventH\x00R\x11syncProgressEventB\a\n" +
+ "\x05event\"6\n" +
+ "\x1cToggleSplitModeFinishedEvent\x12\x16\n" +
+ "\x06userID\x18\x01 \x01(\tR\x06userID\"3\n" +
+ "\x15UserDisconnectedEvent\x12\x1a\n" +
+ "\busername\x18\x01 \x01(\tR\busername\"*\n" +
+ "\x10UserChangedEvent\x12\x16\n" +
+ "\x06userID\x18\x01 \x01(\tR\x06userID\"J\n" +
+ "\fUserBadEvent\x12\x16\n" +
+ "\x06userID\x18\x01 \x01(\tR\x06userID\x12\"\n" +
+ "\ferrorMessage\x18\x02 \x01(\tR\ferrorMessage\"M\n" +
+ "\x15UsedBytesChangedEvent\x12\x16\n" +
+ "\x06userID\x18\x01 \x01(\tR\x06userID\x12\x1c\n" +
+ "\tusedBytes\x18\x02 \x01(\x03R\tusedBytes\"2\n" +
+ "\x14ImapLoginFailedEvent\x12\x1a\n" +
+ "\busername\x18\x01 \x01(\tR\busername\"*\n" +
+ "\x10SyncStartedEvent\x12\x16\n" +
+ "\x06userID\x18\x01 \x01(\tR\x06userID\"+\n" +
+ "\x11SyncFinishedEvent\x12\x16\n" +
+ "\x06userID\x18\x01 \x01(\tR\x06userID\"\x87\x01\n" +
+ "\x11SyncProgressEvent\x12\x16\n" +
+ "\x06userID\x18\x01 \x01(\tR\x06userID\x12\x1a\n" +
+ "\bprogress\x18\x02 \x01(\x01R\bprogress\x12\x1c\n" +
+ "\telapsedMs\x18\x03 \x01(\x03R\telapsedMs\x12 \n" +
+ "\vremainingMs\x18\x04 \x01(\x03R\vremainingMs\"u\n" +
+ "\x15UserNotificationEvent\x12\x14\n" +
+ "\x05title\x18\x01 \x01(\tR\x05title\x12\x1a\n" +
+ "\bsubtitle\x18\x02 \x01(\tR\bsubtitle\x12\x12\n" +
+ "\x04body\x18\x03 \x01(\tR\x04body\x12\x16\n" +
+ "\x06userID\x18\x04 \x01(\tR\x06userID\"8\n" +
+ "\x11GenericErrorEvent\x12#\n" +
+ "\x04code\x18\x01 \x01(\x0e2\x0f.grpc.ErrorCodeR\x04code*q\n" +
+ "\bLogLevel\x12\r\n" +
+ "\tLOG_PANIC\x10\x00\x12\r\n" +
+ "\tLOG_FATAL\x10\x01\x12\r\n" +
+ "\tLOG_ERROR\x10\x02\x12\f\n" +
+ "\bLOG_WARN\x10\x03\x12\f\n" +
+ "\bLOG_INFO\x10\x04\x12\r\n" +
+ "\tLOG_DEBUG\x10\x05\x12\r\n" +
+ "\tLOG_TRACE\x10\x06*6\n" +
+ "\tUserState\x12\x0e\n" +
+ "\n" +
+ "SIGNED_OUT\x10\x00\x12\n" +
+ "\n" +
+ "\x06LOCKED\x10\x01\x12\r\n" +
+ "\tCONNECTED\x10\x02*\xec\x01\n" +
+ "\x0eLoginErrorType\x12\x1b\n" +
+ "\x17USERNAME_PASSWORD_ERROR\x10\x00\x12\r\n" +
+ "\tFREE_USER\x10\x01\x12\x14\n" +
+ "\x10CONNECTION_ERROR\x10\x02\x12\r\n" +
+ "\tTFA_ERROR\x10\x03\x12\r\n" +
+ "\tTFA_ABORT\x10\x04\x12\x17\n" +
+ "\x13TWO_PASSWORDS_ERROR\x10\x05\x12\x17\n" +
+ "\x13TWO_PASSWORDS_ABORT\x10\x06\x12\f\n" +
+ "\bHV_ERROR\x10\a\x12\x14\n" +
+ "\x10FIDO_PIN_INVALID\x10\b\x12\x14\n" +
+ "\x10FIDO_PIN_BLOCKED\x10\t\x12\x0e\n" +
+ "\n" +
+ "FIDO_ERROR\x10\n" +
+ "*[\n" +
+ "\x0fUpdateErrorType\x12\x17\n" +
+ "\x13UPDATE_MANUAL_ERROR\x10\x00\x12\x16\n" +
+ "\x12UPDATE_FORCE_ERROR\x10\x01\x12\x17\n" +
+ "\x13UPDATE_SILENT_ERROR\x10\x02*4\n" +
+ "\x12DiskCacheErrorType\x12\x1e\n" +
+ "\x1aCANT_MOVE_DISK_CACHE_ERROR\x10\x00*\xdd\x01\n" +
+ "\x1bMailServerSettingsErrorType\x12\x1b\n" +
+ "\x17IMAP_PORT_STARTUP_ERROR\x10\x00\x12\x1b\n" +
+ "\x17SMTP_PORT_STARTUP_ERROR\x10\x01\x12\x1a\n" +
+ "\x16IMAP_PORT_CHANGE_ERROR\x10\x02\x12\x1a\n" +
+ "\x16SMTP_PORT_CHANGE_ERROR\x10\x03\x12%\n" +
+ "!IMAP_CONNECTION_MODE_CHANGE_ERROR\x10\x04\x12%\n" +
+ "!SMTP_CONNECTION_MODE_CHANGE_ERROR\x10\x05*S\n" +
+ "\tErrorCode\x12\x11\n" +
+ "\rUNKNOWN_ERROR\x10\x00\x12\x19\n" +
+ "\x15TLS_CERT_EXPORT_ERROR\x10\x01\x12\x18\n" +
+ "\x14TLS_KEY_EXPORT_ERROR\x10\x022\xbd\"\n" +
+ "\x06Bridge\x12I\n" +
+ "\vCheckTokens\x12\x1c.google.protobuf.StringValue\x1a\x1c.google.protobuf.StringValue\x12?\n" +
+ "\vAddLogEntry\x12\x18.grpc.AddLogEntryRequest\x1a\x16.google.protobuf.Empty\x12:\n" +
+ "\bGuiReady\x12\x16.google.protobuf.Empty\x1a\x16.grpc.GuiReadyResponse\x126\n" +
+ "\x04Quit\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\x129\n" +
+ "\aRestart\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\x12C\n" +
+ "\rShowOnStartup\x12\x16.google.protobuf.Empty\x1a\x1a.google.protobuf.BoolValue\x12F\n" +
+ "\x10SetIsAutostartOn\x12\x1a.google.protobuf.BoolValue\x1a\x16.google.protobuf.Empty\x12C\n" +
+ "\rIsAutostartOn\x12\x16.google.protobuf.Empty\x1a\x1a.google.protobuf.BoolValue\x12F\n" +
+ "\x10SetIsBetaEnabled\x12\x1a.google.protobuf.BoolValue\x1a\x16.google.protobuf.Empty\x12C\n" +
+ "\rIsBetaEnabled\x12\x16.google.protobuf.Empty\x1a\x1a.google.protobuf.BoolValue\x12I\n" +
+ "\x13SetIsAllMailVisible\x12\x1a.google.protobuf.BoolValue\x1a\x16.google.protobuf.Empty\x12F\n" +
+ "\x10IsAllMailVisible\x12\x16.google.protobuf.Empty\x1a\x1a.google.protobuf.BoolValue\x12L\n" +
+ "\x16SetIsTelemetryDisabled\x12\x1a.google.protobuf.BoolValue\x1a\x16.google.protobuf.Empty\x12I\n" +
+ "\x13IsTelemetryDisabled\x12\x16.google.protobuf.Empty\x1a\x1a.google.protobuf.BoolValue\x12<\n" +
+ "\x04GoOs\x12\x16.google.protobuf.Empty\x1a\x1c.google.protobuf.StringValue\x12>\n" +
+ "\fTriggerReset\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\x12?\n" +
+ "\aVersion\x12\x16.google.protobuf.Empty\x1a\x1c.google.protobuf.StringValue\x12@\n" +
+ "\bLogsPath\x12\x16.google.protobuf.Empty\x1a\x1c.google.protobuf.StringValue\x12C\n" +
+ "\vLicensePath\x12\x16.google.protobuf.Empty\x1a\x1c.google.protobuf.StringValue\x12L\n" +
+ "\x14ReleaseNotesPageLink\x12\x16.google.protobuf.Empty\x1a\x1c.google.protobuf.StringValue\x12N\n" +
+ "\x16DependencyLicensesLink\x12\x16.google.protobuf.Empty\x1a\x1c.google.protobuf.StringValue\x12G\n" +
+ "\x0fLandingPageLink\x12\x16.google.protobuf.Empty\x1a\x1c.google.protobuf.StringValue\x12J\n" +
+ "\x12SetColorSchemeName\x12\x1c.google.protobuf.StringValue\x1a\x16.google.protobuf.Empty\x12G\n" +
+ "\x0fColorSchemeName\x12\x16.google.protobuf.Empty\x1a\x1c.google.protobuf.StringValue\x12J\n" +
+ "\x12CurrentEmailClient\x12\x16.google.protobuf.Empty\x1a\x1c.google.protobuf.StringValue\x12;\n" +
+ "\tReportBug\x12\x16.grpc.ReportBugRequest\x1a\x16.google.protobuf.Empty\x12E\n" +
+ "\rForceLauncher\x12\x1c.google.protobuf.StringValue\x1a\x16.google.protobuf.Empty\x12I\n" +
+ "\x11SetMainExecutable\x12\x1c.google.protobuf.StringValue\x1a\x16.google.protobuf.Empty\x12W\n" +
+ "\x1fRequestKnowledgeBaseSuggestions\x12\x1c.google.protobuf.StringValue\x1a\x16.google.protobuf.Empty\x123\n" +
+ "\x05Login\x12\x12.grpc.LoginRequest\x1a\x16.google.protobuf.Empty\x126\n" +
+ "\bLogin2FA\x12\x12.grpc.LoginRequest\x1a\x16.google.protobuf.Empty\x127\n" +
+ "\tLoginFido\x12\x12.grpc.LoginRequest\x1a\x16.google.protobuf.Empty\x12=\n" +
+ "\x0fLogin2Passwords\x12\x12.grpc.LoginRequest\x1a\x16.google.protobuf.Empty\x12=\n" +
+ "\n" +
+ "LoginAbort\x12\x17.grpc.LoginAbortRequest\x1a\x16.google.protobuf.Empty\x12E\n" +
+ "\x12FidoAssertionAbort\x12\x17.grpc.LoginAbortRequest\x1a\x16.google.protobuf.Empty\x12=\n" +
+ "\vCheckUpdate\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\x12?\n" +
+ "\rInstallUpdate\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\x12L\n" +
+ "\x16SetIsAutomaticUpdateOn\x12\x1a.google.protobuf.BoolValue\x1a\x16.google.protobuf.Empty\x12I\n" +
+ "\x13IsAutomaticUpdateOn\x12\x16.google.protobuf.Empty\x1a\x1a.google.protobuf.BoolValue\x12E\n" +
+ "\rDiskCachePath\x12\x16.google.protobuf.Empty\x1a\x1c.google.protobuf.StringValue\x12H\n" +
+ "\x10SetDiskCachePath\x12\x1c.google.protobuf.StringValue\x1a\x16.google.protobuf.Empty\x12E\n" +
+ "\x0fSetIsDoHEnabled\x12\x1a.google.protobuf.BoolValue\x1a\x16.google.protobuf.Empty\x12B\n" +
+ "\fIsDoHEnabled\x12\x16.google.protobuf.Empty\x1a\x1a.google.protobuf.BoolValue\x12D\n" +
+ "\x12MailServerSettings\x12\x16.google.protobuf.Empty\x1a\x16.grpc.ImapSmtpSettings\x12G\n" +
+ "\x15SetMailServerSettings\x12\x16.grpc.ImapSmtpSettings\x1a\x16.google.protobuf.Empty\x12@\n" +
+ "\bHostname\x12\x16.google.protobuf.Empty\x1a\x1c.google.protobuf.StringValue\x12E\n" +
+ "\n" +
+ "IsPortFree\x12\x1b.google.protobuf.Int32Value\x1a\x1a.google.protobuf.BoolValue\x12N\n" +
+ "\x12AvailableKeychains\x12\x16.google.protobuf.Empty\x1a .grpc.AvailableKeychainsResponse\x12J\n" +
+ "\x12SetCurrentKeychain\x12\x1c.google.protobuf.StringValue\x1a\x16.google.protobuf.Empty\x12G\n" +
+ "\x0fCurrentKeychain\x12\x16.google.protobuf.Empty\x1a\x1c.google.protobuf.StringValue\x12=\n" +
+ "\vGetUserList\x12\x16.google.protobuf.Empty\x1a\x16.grpc.UserListResponse\x123\n" +
+ "\aGetUser\x12\x1c.google.protobuf.StringValue\x1a\n" +
+ ".grpc.User\x12F\n" +
+ "\x10SetUserSplitMode\x12\x1a.grpc.UserSplitModeRequest\x1a\x16.google.protobuf.Empty\x12U\n" +
+ "\x18SendBadEventUserFeedback\x12!.grpc.UserBadEventFeedbackRequest\x1a\x16.google.protobuf.Empty\x12B\n" +
+ "\n" +
+ "LogoutUser\x12\x1c.google.protobuf.StringValue\x1a\x16.google.protobuf.Empty\x12B\n" +
+ "\n" +
+ "RemoveUser\x12\x1c.google.protobuf.StringValue\x1a\x16.google.protobuf.Empty\x12Q\n" +
+ "\x16ConfigureUserAppleMail\x12\x1f.grpc.ConfigureAppleMailRequest\x1a\x16.google.protobuf.Empty\x12O\n" +
+ "\x19IsTLSCertificateInstalled\x12\x16.google.protobuf.Empty\x1a\x1a.google.protobuf.BoolValue\x12G\n" +
+ "\x15InstallTLSCertificate\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\x12M\n" +
+ "\x15ExportTLSCertificates\x12\x1c.google.protobuf.StringValue\x1a\x16.google.protobuf.Empty\x12?\n" +
+ "\x0eRunEventStream\x12\x18.grpc.EventStreamRequest\x1a\x11.grpc.StreamEvent0\x01\x12A\n" +
+ "\x0fStopEventStream\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\x12?\n" +
+ "\rTriggerRepair\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.EmptyB6Z4github.com/ProtonMail/proton-bridge/v3/internal/grpcb\x06proto3"
var (
file_bridge_proto_rawDescOnce sync.Once
- file_bridge_proto_rawDescData = file_bridge_proto_rawDesc
+ file_bridge_proto_rawDescData []byte
)
func file_bridge_proto_rawDescGZIP() []byte {
file_bridge_proto_rawDescOnce.Do(func() {
- file_bridge_proto_rawDescData = protoimpl.X.CompressGZIP(file_bridge_proto_rawDescData)
+ file_bridge_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_bridge_proto_rawDesc), len(file_bridge_proto_rawDesc)))
})
return file_bridge_proto_rawDescData
}
var file_bridge_proto_enumTypes = make([]protoimpl.EnumInfo, 7)
-var file_bridge_proto_msgTypes = make([]protoimpl.MessageInfo, 73)
-var file_bridge_proto_goTypes = []interface{}{
+var file_bridge_proto_msgTypes = make([]protoimpl.MessageInfo, 77)
+var file_bridge_proto_goTypes = []any{
(LogLevel)(0), // 0: grpc.LogLevel
(UserState)(0), // 1: grpc.UserState
(LoginErrorType)(0), // 2: grpc.LoginErrorType
@@ -5754,50 +5445,54 @@ var file_bridge_proto_goTypes = []interface{}{
(*LoginEvent)(nil), // 37: grpc.LoginEvent
(*LoginErrorEvent)(nil), // 38: grpc.LoginErrorEvent
(*LoginTfaRequestedEvent)(nil), // 39: grpc.LoginTfaRequestedEvent
- (*LoginTwoPasswordsRequestedEvent)(nil), // 40: grpc.LoginTwoPasswordsRequestedEvent
- (*LoginFinishedEvent)(nil), // 41: grpc.LoginFinishedEvent
- (*LoginHvRequestedEvent)(nil), // 42: grpc.LoginHvRequestedEvent
- (*UpdateEvent)(nil), // 43: grpc.UpdateEvent
- (*UpdateErrorEvent)(nil), // 44: grpc.UpdateErrorEvent
- (*UpdateManualReadyEvent)(nil), // 45: grpc.UpdateManualReadyEvent
- (*UpdateManualRestartNeededEvent)(nil), // 46: grpc.UpdateManualRestartNeededEvent
- (*UpdateForceEvent)(nil), // 47: grpc.UpdateForceEvent
- (*UpdateSilentRestartNeeded)(nil), // 48: grpc.UpdateSilentRestartNeeded
- (*UpdateIsLatestVersion)(nil), // 49: grpc.UpdateIsLatestVersion
- (*UpdateCheckFinished)(nil), // 50: grpc.UpdateCheckFinished
- (*UpdateVersionChanged)(nil), // 51: grpc.UpdateVersionChanged
- (*DiskCacheEvent)(nil), // 52: grpc.DiskCacheEvent
- (*DiskCacheErrorEvent)(nil), // 53: grpc.DiskCacheErrorEvent
- (*DiskCachePathChangedEvent)(nil), // 54: grpc.DiskCachePathChangedEvent
- (*DiskCachePathChangeFinishedEvent)(nil), // 55: grpc.DiskCachePathChangeFinishedEvent
- (*MailServerSettingsEvent)(nil), // 56: grpc.MailServerSettingsEvent
- (*MailServerSettingsErrorEvent)(nil), // 57: grpc.MailServerSettingsErrorEvent
- (*MailServerSettingsChangedEvent)(nil), // 58: grpc.MailServerSettingsChangedEvent
- (*ChangeMailServerSettingsFinishedEvent)(nil), // 59: grpc.ChangeMailServerSettingsFinishedEvent
- (*KeychainEvent)(nil), // 60: grpc.KeychainEvent
- (*ChangeKeychainFinishedEvent)(nil), // 61: grpc.ChangeKeychainFinishedEvent
- (*HasNoKeychainEvent)(nil), // 62: grpc.HasNoKeychainEvent
- (*RebuildKeychainEvent)(nil), // 63: grpc.RebuildKeychainEvent
- (*MailEvent)(nil), // 64: grpc.MailEvent
- (*AddressChangedEvent)(nil), // 65: grpc.AddressChangedEvent
- (*AddressChangedLogoutEvent)(nil), // 66: grpc.AddressChangedLogoutEvent
- (*ApiCertIssueEvent)(nil), // 67: grpc.ApiCertIssueEvent
- (*UserEvent)(nil), // 68: grpc.UserEvent
- (*ToggleSplitModeFinishedEvent)(nil), // 69: grpc.ToggleSplitModeFinishedEvent
- (*UserDisconnectedEvent)(nil), // 70: grpc.UserDisconnectedEvent
- (*UserChangedEvent)(nil), // 71: grpc.UserChangedEvent
- (*UserBadEvent)(nil), // 72: grpc.UserBadEvent
- (*UsedBytesChangedEvent)(nil), // 73: grpc.UsedBytesChangedEvent
- (*ImapLoginFailedEvent)(nil), // 74: grpc.ImapLoginFailedEvent
- (*SyncStartedEvent)(nil), // 75: grpc.SyncStartedEvent
- (*SyncFinishedEvent)(nil), // 76: grpc.SyncFinishedEvent
- (*SyncProgressEvent)(nil), // 77: grpc.SyncProgressEvent
- (*UserNotificationEvent)(nil), // 78: grpc.UserNotificationEvent
- (*GenericErrorEvent)(nil), // 79: grpc.GenericErrorEvent
- (*wrapperspb.StringValue)(nil), // 80: google.protobuf.StringValue
- (*emptypb.Empty)(nil), // 81: google.protobuf.Empty
- (*wrapperspb.BoolValue)(nil), // 82: google.protobuf.BoolValue
- (*wrapperspb.Int32Value)(nil), // 83: google.protobuf.Int32Value
+ (*LoginFidoRequestedEvent)(nil), // 40: grpc.LoginFidoRequestedEvent
+ (*LoginTfaOrFidoRequestedEvent)(nil), // 41: grpc.LoginTfaOrFidoRequestedEvent
+ (*LoginFidoTouchEvent)(nil), // 42: grpc.LoginFidoTouchEvent
+ (*LoginFidoPinRequired)(nil), // 43: grpc.LoginFidoPinRequired
+ (*LoginTwoPasswordsRequestedEvent)(nil), // 44: grpc.LoginTwoPasswordsRequestedEvent
+ (*LoginFinishedEvent)(nil), // 45: grpc.LoginFinishedEvent
+ (*LoginHvRequestedEvent)(nil), // 46: grpc.LoginHvRequestedEvent
+ (*UpdateEvent)(nil), // 47: grpc.UpdateEvent
+ (*UpdateErrorEvent)(nil), // 48: grpc.UpdateErrorEvent
+ (*UpdateManualReadyEvent)(nil), // 49: grpc.UpdateManualReadyEvent
+ (*UpdateManualRestartNeededEvent)(nil), // 50: grpc.UpdateManualRestartNeededEvent
+ (*UpdateForceEvent)(nil), // 51: grpc.UpdateForceEvent
+ (*UpdateSilentRestartNeeded)(nil), // 52: grpc.UpdateSilentRestartNeeded
+ (*UpdateIsLatestVersion)(nil), // 53: grpc.UpdateIsLatestVersion
+ (*UpdateCheckFinished)(nil), // 54: grpc.UpdateCheckFinished
+ (*UpdateVersionChanged)(nil), // 55: grpc.UpdateVersionChanged
+ (*DiskCacheEvent)(nil), // 56: grpc.DiskCacheEvent
+ (*DiskCacheErrorEvent)(nil), // 57: grpc.DiskCacheErrorEvent
+ (*DiskCachePathChangedEvent)(nil), // 58: grpc.DiskCachePathChangedEvent
+ (*DiskCachePathChangeFinishedEvent)(nil), // 59: grpc.DiskCachePathChangeFinishedEvent
+ (*MailServerSettingsEvent)(nil), // 60: grpc.MailServerSettingsEvent
+ (*MailServerSettingsErrorEvent)(nil), // 61: grpc.MailServerSettingsErrorEvent
+ (*MailServerSettingsChangedEvent)(nil), // 62: grpc.MailServerSettingsChangedEvent
+ (*ChangeMailServerSettingsFinishedEvent)(nil), // 63: grpc.ChangeMailServerSettingsFinishedEvent
+ (*KeychainEvent)(nil), // 64: grpc.KeychainEvent
+ (*ChangeKeychainFinishedEvent)(nil), // 65: grpc.ChangeKeychainFinishedEvent
+ (*HasNoKeychainEvent)(nil), // 66: grpc.HasNoKeychainEvent
+ (*RebuildKeychainEvent)(nil), // 67: grpc.RebuildKeychainEvent
+ (*MailEvent)(nil), // 68: grpc.MailEvent
+ (*AddressChangedEvent)(nil), // 69: grpc.AddressChangedEvent
+ (*AddressChangedLogoutEvent)(nil), // 70: grpc.AddressChangedLogoutEvent
+ (*ApiCertIssueEvent)(nil), // 71: grpc.ApiCertIssueEvent
+ (*UserEvent)(nil), // 72: grpc.UserEvent
+ (*ToggleSplitModeFinishedEvent)(nil), // 73: grpc.ToggleSplitModeFinishedEvent
+ (*UserDisconnectedEvent)(nil), // 74: grpc.UserDisconnectedEvent
+ (*UserChangedEvent)(nil), // 75: grpc.UserChangedEvent
+ (*UserBadEvent)(nil), // 76: grpc.UserBadEvent
+ (*UsedBytesChangedEvent)(nil), // 77: grpc.UsedBytesChangedEvent
+ (*ImapLoginFailedEvent)(nil), // 78: grpc.ImapLoginFailedEvent
+ (*SyncStartedEvent)(nil), // 79: grpc.SyncStartedEvent
+ (*SyncFinishedEvent)(nil), // 80: grpc.SyncFinishedEvent
+ (*SyncProgressEvent)(nil), // 81: grpc.SyncProgressEvent
+ (*UserNotificationEvent)(nil), // 82: grpc.UserNotificationEvent
+ (*GenericErrorEvent)(nil), // 83: grpc.GenericErrorEvent
+ (*wrapperspb.StringValue)(nil), // 84: google.protobuf.StringValue
+ (*emptypb.Empty)(nil), // 85: google.protobuf.Empty
+ (*wrapperspb.BoolValue)(nil), // 86: google.protobuf.BoolValue
+ (*wrapperspb.Int32Value)(nil), // 87: google.protobuf.Int32Value
}
var file_bridge_proto_depIdxs = []int32{
0, // 0: grpc.AddLogEntryRequest.level:type_name -> grpc.LogLevel
@@ -5805,13 +5500,13 @@ var file_bridge_proto_depIdxs = []int32{
14, // 2: grpc.UserListResponse.users:type_name -> grpc.User
21, // 3: grpc.StreamEvent.app:type_name -> grpc.AppEvent
37, // 4: grpc.StreamEvent.login:type_name -> grpc.LoginEvent
- 43, // 5: grpc.StreamEvent.update:type_name -> grpc.UpdateEvent
- 52, // 6: grpc.StreamEvent.cache:type_name -> grpc.DiskCacheEvent
- 56, // 7: grpc.StreamEvent.mailServerSettings:type_name -> grpc.MailServerSettingsEvent
- 60, // 8: grpc.StreamEvent.keychain:type_name -> grpc.KeychainEvent
- 64, // 9: grpc.StreamEvent.mail:type_name -> grpc.MailEvent
- 68, // 10: grpc.StreamEvent.user:type_name -> grpc.UserEvent
- 79, // 11: grpc.StreamEvent.genericError:type_name -> grpc.GenericErrorEvent
+ 47, // 5: grpc.StreamEvent.update:type_name -> grpc.UpdateEvent
+ 56, // 6: grpc.StreamEvent.cache:type_name -> grpc.DiskCacheEvent
+ 60, // 7: grpc.StreamEvent.mailServerSettings:type_name -> grpc.MailServerSettingsEvent
+ 64, // 8: grpc.StreamEvent.keychain:type_name -> grpc.KeychainEvent
+ 68, // 9: grpc.StreamEvent.mail:type_name -> grpc.MailEvent
+ 72, // 10: grpc.StreamEvent.user:type_name -> grpc.UserEvent
+ 83, // 11: grpc.StreamEvent.genericError:type_name -> grpc.GenericErrorEvent
22, // 12: grpc.AppEvent.internetStatus:type_name -> grpc.InternetStatusEvent
23, // 13: grpc.AppEvent.toggleAutostartFinished:type_name -> grpc.ToggleAutostartFinishedEvent
24, // 14: grpc.AppEvent.resetFinished:type_name -> grpc.ResetFinishedEvent
@@ -5826,176 +5521,185 @@ var file_bridge_proto_depIdxs = []int32{
36, // 23: grpc.AppEvent.knowledgeBaseSuggestions:type_name -> grpc.KnowledgeBaseSuggestionsEvent
33, // 24: grpc.AppEvent.repairStarted:type_name -> grpc.RepairStartedEvent
34, // 25: grpc.AppEvent.allUsersLoaded:type_name -> grpc.AllUsersLoadedEvent
- 78, // 26: grpc.AppEvent.userNotification:type_name -> grpc.UserNotificationEvent
+ 82, // 26: grpc.AppEvent.userNotification:type_name -> grpc.UserNotificationEvent
35, // 27: grpc.KnowledgeBaseSuggestionsEvent.suggestions:type_name -> grpc.KnowledgeBaseSuggestion
38, // 28: grpc.LoginEvent.error:type_name -> grpc.LoginErrorEvent
39, // 29: grpc.LoginEvent.tfaRequested:type_name -> grpc.LoginTfaRequestedEvent
- 40, // 30: grpc.LoginEvent.twoPasswordRequested:type_name -> grpc.LoginTwoPasswordsRequestedEvent
- 41, // 31: grpc.LoginEvent.finished:type_name -> grpc.LoginFinishedEvent
- 41, // 32: grpc.LoginEvent.alreadyLoggedIn:type_name -> grpc.LoginFinishedEvent
- 42, // 33: grpc.LoginEvent.hvRequested:type_name -> grpc.LoginHvRequestedEvent
- 2, // 34: grpc.LoginErrorEvent.type:type_name -> grpc.LoginErrorType
- 44, // 35: grpc.UpdateEvent.error:type_name -> grpc.UpdateErrorEvent
- 45, // 36: grpc.UpdateEvent.manualReady:type_name -> grpc.UpdateManualReadyEvent
- 46, // 37: grpc.UpdateEvent.manualRestartNeeded:type_name -> grpc.UpdateManualRestartNeededEvent
- 47, // 38: grpc.UpdateEvent.force:type_name -> grpc.UpdateForceEvent
- 48, // 39: grpc.UpdateEvent.silentRestartNeeded:type_name -> grpc.UpdateSilentRestartNeeded
- 49, // 40: grpc.UpdateEvent.isLatestVersion:type_name -> grpc.UpdateIsLatestVersion
- 50, // 41: grpc.UpdateEvent.checkFinished:type_name -> grpc.UpdateCheckFinished
- 51, // 42: grpc.UpdateEvent.versionChanged:type_name -> grpc.UpdateVersionChanged
- 3, // 43: grpc.UpdateErrorEvent.type:type_name -> grpc.UpdateErrorType
- 53, // 44: grpc.DiskCacheEvent.error:type_name -> grpc.DiskCacheErrorEvent
- 54, // 45: grpc.DiskCacheEvent.pathChanged:type_name -> grpc.DiskCachePathChangedEvent
- 55, // 46: grpc.DiskCacheEvent.pathChangeFinished:type_name -> grpc.DiskCachePathChangeFinishedEvent
- 4, // 47: grpc.DiskCacheErrorEvent.type:type_name -> grpc.DiskCacheErrorType
- 57, // 48: grpc.MailServerSettingsEvent.error:type_name -> grpc.MailServerSettingsErrorEvent
- 58, // 49: grpc.MailServerSettingsEvent.mailServerSettingsChanged:type_name -> grpc.MailServerSettingsChangedEvent
- 59, // 50: grpc.MailServerSettingsEvent.changeMailServerSettingsFinished:type_name -> grpc.ChangeMailServerSettingsFinishedEvent
- 5, // 51: grpc.MailServerSettingsErrorEvent.type:type_name -> grpc.MailServerSettingsErrorType
- 12, // 52: grpc.MailServerSettingsChangedEvent.settings:type_name -> grpc.ImapSmtpSettings
- 61, // 53: grpc.KeychainEvent.changeKeychainFinished:type_name -> grpc.ChangeKeychainFinishedEvent
- 62, // 54: grpc.KeychainEvent.hasNoKeychain:type_name -> grpc.HasNoKeychainEvent
- 63, // 55: grpc.KeychainEvent.rebuildKeychain:type_name -> grpc.RebuildKeychainEvent
- 65, // 56: grpc.MailEvent.addressChanged:type_name -> grpc.AddressChangedEvent
- 66, // 57: grpc.MailEvent.addressChangedLogout:type_name -> grpc.AddressChangedLogoutEvent
- 67, // 58: grpc.MailEvent.apiCertIssue:type_name -> grpc.ApiCertIssueEvent
- 69, // 59: grpc.UserEvent.toggleSplitModeFinished:type_name -> grpc.ToggleSplitModeFinishedEvent
- 70, // 60: grpc.UserEvent.userDisconnected:type_name -> grpc.UserDisconnectedEvent
- 71, // 61: grpc.UserEvent.userChanged:type_name -> grpc.UserChangedEvent
- 72, // 62: grpc.UserEvent.userBadEvent:type_name -> grpc.UserBadEvent
- 73, // 63: grpc.UserEvent.usedBytesChangedEvent:type_name -> grpc.UsedBytesChangedEvent
- 74, // 64: grpc.UserEvent.imapLoginFailedEvent:type_name -> grpc.ImapLoginFailedEvent
- 75, // 65: grpc.UserEvent.syncStartedEvent:type_name -> grpc.SyncStartedEvent
- 76, // 66: grpc.UserEvent.syncFinishedEvent:type_name -> grpc.SyncFinishedEvent
- 77, // 67: grpc.UserEvent.syncProgressEvent:type_name -> grpc.SyncProgressEvent
- 6, // 68: grpc.GenericErrorEvent.code:type_name -> grpc.ErrorCode
- 80, // 69: grpc.Bridge.CheckTokens:input_type -> google.protobuf.StringValue
- 7, // 70: grpc.Bridge.AddLogEntry:input_type -> grpc.AddLogEntryRequest
- 81, // 71: grpc.Bridge.GuiReady:input_type -> google.protobuf.Empty
- 81, // 72: grpc.Bridge.Quit:input_type -> google.protobuf.Empty
- 81, // 73: grpc.Bridge.Restart:input_type -> google.protobuf.Empty
- 81, // 74: grpc.Bridge.ShowOnStartup:input_type -> google.protobuf.Empty
- 82, // 75: grpc.Bridge.SetIsAutostartOn:input_type -> google.protobuf.BoolValue
- 81, // 76: grpc.Bridge.IsAutostartOn:input_type -> google.protobuf.Empty
- 82, // 77: grpc.Bridge.SetIsBetaEnabled:input_type -> google.protobuf.BoolValue
- 81, // 78: grpc.Bridge.IsBetaEnabled:input_type -> google.protobuf.Empty
- 82, // 79: grpc.Bridge.SetIsAllMailVisible:input_type -> google.protobuf.BoolValue
- 81, // 80: grpc.Bridge.IsAllMailVisible:input_type -> google.protobuf.Empty
- 82, // 81: grpc.Bridge.SetIsTelemetryDisabled:input_type -> google.protobuf.BoolValue
- 81, // 82: grpc.Bridge.IsTelemetryDisabled:input_type -> google.protobuf.Empty
- 81, // 83: grpc.Bridge.GoOs:input_type -> google.protobuf.Empty
- 81, // 84: grpc.Bridge.TriggerReset:input_type -> google.protobuf.Empty
- 81, // 85: grpc.Bridge.Version:input_type -> google.protobuf.Empty
- 81, // 86: grpc.Bridge.LogsPath:input_type -> google.protobuf.Empty
- 81, // 87: grpc.Bridge.LicensePath:input_type -> google.protobuf.Empty
- 81, // 88: grpc.Bridge.ReleaseNotesPageLink:input_type -> google.protobuf.Empty
- 81, // 89: grpc.Bridge.DependencyLicensesLink:input_type -> google.protobuf.Empty
- 81, // 90: grpc.Bridge.LandingPageLink:input_type -> google.protobuf.Empty
- 80, // 91: grpc.Bridge.SetColorSchemeName:input_type -> google.protobuf.StringValue
- 81, // 92: grpc.Bridge.ColorSchemeName:input_type -> google.protobuf.Empty
- 81, // 93: grpc.Bridge.CurrentEmailClient:input_type -> google.protobuf.Empty
- 9, // 94: grpc.Bridge.ReportBug:input_type -> grpc.ReportBugRequest
- 80, // 95: grpc.Bridge.ForceLauncher:input_type -> google.protobuf.StringValue
- 80, // 96: grpc.Bridge.SetMainExecutable:input_type -> google.protobuf.StringValue
- 80, // 97: grpc.Bridge.RequestKnowledgeBaseSuggestions:input_type -> google.protobuf.StringValue
- 10, // 98: grpc.Bridge.Login:input_type -> grpc.LoginRequest
- 10, // 99: grpc.Bridge.Login2FA:input_type -> grpc.LoginRequest
- 10, // 100: grpc.Bridge.Login2Passwords:input_type -> grpc.LoginRequest
- 11, // 101: grpc.Bridge.LoginAbort:input_type -> grpc.LoginAbortRequest
- 81, // 102: grpc.Bridge.CheckUpdate:input_type -> google.protobuf.Empty
- 81, // 103: grpc.Bridge.InstallUpdate:input_type -> google.protobuf.Empty
- 82, // 104: grpc.Bridge.SetIsAutomaticUpdateOn:input_type -> google.protobuf.BoolValue
- 81, // 105: grpc.Bridge.IsAutomaticUpdateOn:input_type -> google.protobuf.Empty
- 81, // 106: grpc.Bridge.DiskCachePath:input_type -> google.protobuf.Empty
- 80, // 107: grpc.Bridge.SetDiskCachePath:input_type -> google.protobuf.StringValue
- 82, // 108: grpc.Bridge.SetIsDoHEnabled:input_type -> google.protobuf.BoolValue
- 81, // 109: grpc.Bridge.IsDoHEnabled:input_type -> google.protobuf.Empty
- 81, // 110: grpc.Bridge.MailServerSettings:input_type -> google.protobuf.Empty
- 12, // 111: grpc.Bridge.SetMailServerSettings:input_type -> grpc.ImapSmtpSettings
- 81, // 112: grpc.Bridge.Hostname:input_type -> google.protobuf.Empty
- 83, // 113: grpc.Bridge.IsPortFree:input_type -> google.protobuf.Int32Value
- 81, // 114: grpc.Bridge.AvailableKeychains:input_type -> google.protobuf.Empty
- 80, // 115: grpc.Bridge.SetCurrentKeychain:input_type -> google.protobuf.StringValue
- 81, // 116: grpc.Bridge.CurrentKeychain:input_type -> google.protobuf.Empty
- 81, // 117: grpc.Bridge.GetUserList:input_type -> google.protobuf.Empty
- 80, // 118: grpc.Bridge.GetUser:input_type -> google.protobuf.StringValue
- 15, // 119: grpc.Bridge.SetUserSplitMode:input_type -> grpc.UserSplitModeRequest
- 16, // 120: grpc.Bridge.SendBadEventUserFeedback:input_type -> grpc.UserBadEventFeedbackRequest
- 80, // 121: grpc.Bridge.LogoutUser:input_type -> google.protobuf.StringValue
- 80, // 122: grpc.Bridge.RemoveUser:input_type -> google.protobuf.StringValue
- 18, // 123: grpc.Bridge.ConfigureUserAppleMail:input_type -> grpc.ConfigureAppleMailRequest
- 81, // 124: grpc.Bridge.IsTLSCertificateInstalled:input_type -> google.protobuf.Empty
- 81, // 125: grpc.Bridge.InstallTLSCertificate:input_type -> google.protobuf.Empty
- 80, // 126: grpc.Bridge.ExportTLSCertificates:input_type -> google.protobuf.StringValue
- 19, // 127: grpc.Bridge.RunEventStream:input_type -> grpc.EventStreamRequest
- 81, // 128: grpc.Bridge.StopEventStream:input_type -> google.protobuf.Empty
- 81, // 129: grpc.Bridge.TriggerRepair:input_type -> google.protobuf.Empty
- 80, // 130: grpc.Bridge.CheckTokens:output_type -> google.protobuf.StringValue
- 81, // 131: grpc.Bridge.AddLogEntry:output_type -> google.protobuf.Empty
- 8, // 132: grpc.Bridge.GuiReady:output_type -> grpc.GuiReadyResponse
- 81, // 133: grpc.Bridge.Quit:output_type -> google.protobuf.Empty
- 81, // 134: grpc.Bridge.Restart:output_type -> google.protobuf.Empty
- 82, // 135: grpc.Bridge.ShowOnStartup:output_type -> google.protobuf.BoolValue
- 81, // 136: grpc.Bridge.SetIsAutostartOn:output_type -> google.protobuf.Empty
- 82, // 137: grpc.Bridge.IsAutostartOn:output_type -> google.protobuf.BoolValue
- 81, // 138: grpc.Bridge.SetIsBetaEnabled:output_type -> google.protobuf.Empty
- 82, // 139: grpc.Bridge.IsBetaEnabled:output_type -> google.protobuf.BoolValue
- 81, // 140: grpc.Bridge.SetIsAllMailVisible:output_type -> google.protobuf.Empty
- 82, // 141: grpc.Bridge.IsAllMailVisible:output_type -> google.protobuf.BoolValue
- 81, // 142: grpc.Bridge.SetIsTelemetryDisabled:output_type -> google.protobuf.Empty
- 82, // 143: grpc.Bridge.IsTelemetryDisabled:output_type -> google.protobuf.BoolValue
- 80, // 144: grpc.Bridge.GoOs:output_type -> google.protobuf.StringValue
- 81, // 145: grpc.Bridge.TriggerReset:output_type -> google.protobuf.Empty
- 80, // 146: grpc.Bridge.Version:output_type -> google.protobuf.StringValue
- 80, // 147: grpc.Bridge.LogsPath:output_type -> google.protobuf.StringValue
- 80, // 148: grpc.Bridge.LicensePath:output_type -> google.protobuf.StringValue
- 80, // 149: grpc.Bridge.ReleaseNotesPageLink:output_type -> google.protobuf.StringValue
- 80, // 150: grpc.Bridge.DependencyLicensesLink:output_type -> google.protobuf.StringValue
- 80, // 151: grpc.Bridge.LandingPageLink:output_type -> google.protobuf.StringValue
- 81, // 152: grpc.Bridge.SetColorSchemeName:output_type -> google.protobuf.Empty
- 80, // 153: grpc.Bridge.ColorSchemeName:output_type -> google.protobuf.StringValue
- 80, // 154: grpc.Bridge.CurrentEmailClient:output_type -> google.protobuf.StringValue
- 81, // 155: grpc.Bridge.ReportBug:output_type -> google.protobuf.Empty
- 81, // 156: grpc.Bridge.ForceLauncher:output_type -> google.protobuf.Empty
- 81, // 157: grpc.Bridge.SetMainExecutable:output_type -> google.protobuf.Empty
- 81, // 158: grpc.Bridge.RequestKnowledgeBaseSuggestions:output_type -> google.protobuf.Empty
- 81, // 159: grpc.Bridge.Login:output_type -> google.protobuf.Empty
- 81, // 160: grpc.Bridge.Login2FA:output_type -> google.protobuf.Empty
- 81, // 161: grpc.Bridge.Login2Passwords:output_type -> google.protobuf.Empty
- 81, // 162: grpc.Bridge.LoginAbort:output_type -> google.protobuf.Empty
- 81, // 163: grpc.Bridge.CheckUpdate:output_type -> google.protobuf.Empty
- 81, // 164: grpc.Bridge.InstallUpdate:output_type -> google.protobuf.Empty
- 81, // 165: grpc.Bridge.SetIsAutomaticUpdateOn:output_type -> google.protobuf.Empty
- 82, // 166: grpc.Bridge.IsAutomaticUpdateOn:output_type -> google.protobuf.BoolValue
- 80, // 167: grpc.Bridge.DiskCachePath:output_type -> google.protobuf.StringValue
- 81, // 168: grpc.Bridge.SetDiskCachePath:output_type -> google.protobuf.Empty
- 81, // 169: grpc.Bridge.SetIsDoHEnabled:output_type -> google.protobuf.Empty
- 82, // 170: grpc.Bridge.IsDoHEnabled:output_type -> google.protobuf.BoolValue
- 12, // 171: grpc.Bridge.MailServerSettings:output_type -> grpc.ImapSmtpSettings
- 81, // 172: grpc.Bridge.SetMailServerSettings:output_type -> google.protobuf.Empty
- 80, // 173: grpc.Bridge.Hostname:output_type -> google.protobuf.StringValue
- 82, // 174: grpc.Bridge.IsPortFree:output_type -> google.protobuf.BoolValue
- 13, // 175: grpc.Bridge.AvailableKeychains:output_type -> grpc.AvailableKeychainsResponse
- 81, // 176: grpc.Bridge.SetCurrentKeychain:output_type -> google.protobuf.Empty
- 80, // 177: grpc.Bridge.CurrentKeychain:output_type -> google.protobuf.StringValue
- 17, // 178: grpc.Bridge.GetUserList:output_type -> grpc.UserListResponse
- 14, // 179: grpc.Bridge.GetUser:output_type -> grpc.User
- 81, // 180: grpc.Bridge.SetUserSplitMode:output_type -> google.protobuf.Empty
- 81, // 181: grpc.Bridge.SendBadEventUserFeedback:output_type -> google.protobuf.Empty
- 81, // 182: grpc.Bridge.LogoutUser:output_type -> google.protobuf.Empty
- 81, // 183: grpc.Bridge.RemoveUser:output_type -> google.protobuf.Empty
- 81, // 184: grpc.Bridge.ConfigureUserAppleMail:output_type -> google.protobuf.Empty
- 82, // 185: grpc.Bridge.IsTLSCertificateInstalled:output_type -> google.protobuf.BoolValue
- 81, // 186: grpc.Bridge.InstallTLSCertificate:output_type -> google.protobuf.Empty
- 81, // 187: grpc.Bridge.ExportTLSCertificates:output_type -> google.protobuf.Empty
- 20, // 188: grpc.Bridge.RunEventStream:output_type -> grpc.StreamEvent
- 81, // 189: grpc.Bridge.StopEventStream:output_type -> google.protobuf.Empty
- 81, // 190: grpc.Bridge.TriggerRepair:output_type -> google.protobuf.Empty
- 130, // [130:191] is the sub-list for method output_type
- 69, // [69:130] is the sub-list for method input_type
- 69, // [69:69] is the sub-list for extension type_name
- 69, // [69:69] is the sub-list for extension extendee
- 0, // [0:69] is the sub-list for field type_name
+ 44, // 30: grpc.LoginEvent.twoPasswordRequested:type_name -> grpc.LoginTwoPasswordsRequestedEvent
+ 45, // 31: grpc.LoginEvent.finished:type_name -> grpc.LoginFinishedEvent
+ 45, // 32: grpc.LoginEvent.alreadyLoggedIn:type_name -> grpc.LoginFinishedEvent
+ 46, // 33: grpc.LoginEvent.hvRequested:type_name -> grpc.LoginHvRequestedEvent
+ 40, // 34: grpc.LoginEvent.fidoRequested:type_name -> grpc.LoginFidoRequestedEvent
+ 41, // 35: grpc.LoginEvent.tfaOrFidoRequested:type_name -> grpc.LoginTfaOrFidoRequestedEvent
+ 42, // 36: grpc.LoginEvent.loginFidoTouchRequested:type_name -> grpc.LoginFidoTouchEvent
+ 42, // 37: grpc.LoginEvent.loginFidoTouchCompleted:type_name -> grpc.LoginFidoTouchEvent
+ 43, // 38: grpc.LoginEvent.loginFidoPinRequired:type_name -> grpc.LoginFidoPinRequired
+ 2, // 39: grpc.LoginErrorEvent.type:type_name -> grpc.LoginErrorType
+ 48, // 40: grpc.UpdateEvent.error:type_name -> grpc.UpdateErrorEvent
+ 49, // 41: grpc.UpdateEvent.manualReady:type_name -> grpc.UpdateManualReadyEvent
+ 50, // 42: grpc.UpdateEvent.manualRestartNeeded:type_name -> grpc.UpdateManualRestartNeededEvent
+ 51, // 43: grpc.UpdateEvent.force:type_name -> grpc.UpdateForceEvent
+ 52, // 44: grpc.UpdateEvent.silentRestartNeeded:type_name -> grpc.UpdateSilentRestartNeeded
+ 53, // 45: grpc.UpdateEvent.isLatestVersion:type_name -> grpc.UpdateIsLatestVersion
+ 54, // 46: grpc.UpdateEvent.checkFinished:type_name -> grpc.UpdateCheckFinished
+ 55, // 47: grpc.UpdateEvent.versionChanged:type_name -> grpc.UpdateVersionChanged
+ 3, // 48: grpc.UpdateErrorEvent.type:type_name -> grpc.UpdateErrorType
+ 57, // 49: grpc.DiskCacheEvent.error:type_name -> grpc.DiskCacheErrorEvent
+ 58, // 50: grpc.DiskCacheEvent.pathChanged:type_name -> grpc.DiskCachePathChangedEvent
+ 59, // 51: grpc.DiskCacheEvent.pathChangeFinished:type_name -> grpc.DiskCachePathChangeFinishedEvent
+ 4, // 52: grpc.DiskCacheErrorEvent.type:type_name -> grpc.DiskCacheErrorType
+ 61, // 53: grpc.MailServerSettingsEvent.error:type_name -> grpc.MailServerSettingsErrorEvent
+ 62, // 54: grpc.MailServerSettingsEvent.mailServerSettingsChanged:type_name -> grpc.MailServerSettingsChangedEvent
+ 63, // 55: grpc.MailServerSettingsEvent.changeMailServerSettingsFinished:type_name -> grpc.ChangeMailServerSettingsFinishedEvent
+ 5, // 56: grpc.MailServerSettingsErrorEvent.type:type_name -> grpc.MailServerSettingsErrorType
+ 12, // 57: grpc.MailServerSettingsChangedEvent.settings:type_name -> grpc.ImapSmtpSettings
+ 65, // 58: grpc.KeychainEvent.changeKeychainFinished:type_name -> grpc.ChangeKeychainFinishedEvent
+ 66, // 59: grpc.KeychainEvent.hasNoKeychain:type_name -> grpc.HasNoKeychainEvent
+ 67, // 60: grpc.KeychainEvent.rebuildKeychain:type_name -> grpc.RebuildKeychainEvent
+ 69, // 61: grpc.MailEvent.addressChanged:type_name -> grpc.AddressChangedEvent
+ 70, // 62: grpc.MailEvent.addressChangedLogout:type_name -> grpc.AddressChangedLogoutEvent
+ 71, // 63: grpc.MailEvent.apiCertIssue:type_name -> grpc.ApiCertIssueEvent
+ 73, // 64: grpc.UserEvent.toggleSplitModeFinished:type_name -> grpc.ToggleSplitModeFinishedEvent
+ 74, // 65: grpc.UserEvent.userDisconnected:type_name -> grpc.UserDisconnectedEvent
+ 75, // 66: grpc.UserEvent.userChanged:type_name -> grpc.UserChangedEvent
+ 76, // 67: grpc.UserEvent.userBadEvent:type_name -> grpc.UserBadEvent
+ 77, // 68: grpc.UserEvent.usedBytesChangedEvent:type_name -> grpc.UsedBytesChangedEvent
+ 78, // 69: grpc.UserEvent.imapLoginFailedEvent:type_name -> grpc.ImapLoginFailedEvent
+ 79, // 70: grpc.UserEvent.syncStartedEvent:type_name -> grpc.SyncStartedEvent
+ 80, // 71: grpc.UserEvent.syncFinishedEvent:type_name -> grpc.SyncFinishedEvent
+ 81, // 72: grpc.UserEvent.syncProgressEvent:type_name -> grpc.SyncProgressEvent
+ 6, // 73: grpc.GenericErrorEvent.code:type_name -> grpc.ErrorCode
+ 84, // 74: grpc.Bridge.CheckTokens:input_type -> google.protobuf.StringValue
+ 7, // 75: grpc.Bridge.AddLogEntry:input_type -> grpc.AddLogEntryRequest
+ 85, // 76: grpc.Bridge.GuiReady:input_type -> google.protobuf.Empty
+ 85, // 77: grpc.Bridge.Quit:input_type -> google.protobuf.Empty
+ 85, // 78: grpc.Bridge.Restart:input_type -> google.protobuf.Empty
+ 85, // 79: grpc.Bridge.ShowOnStartup:input_type -> google.protobuf.Empty
+ 86, // 80: grpc.Bridge.SetIsAutostartOn:input_type -> google.protobuf.BoolValue
+ 85, // 81: grpc.Bridge.IsAutostartOn:input_type -> google.protobuf.Empty
+ 86, // 82: grpc.Bridge.SetIsBetaEnabled:input_type -> google.protobuf.BoolValue
+ 85, // 83: grpc.Bridge.IsBetaEnabled:input_type -> google.protobuf.Empty
+ 86, // 84: grpc.Bridge.SetIsAllMailVisible:input_type -> google.protobuf.BoolValue
+ 85, // 85: grpc.Bridge.IsAllMailVisible:input_type -> google.protobuf.Empty
+ 86, // 86: grpc.Bridge.SetIsTelemetryDisabled:input_type -> google.protobuf.BoolValue
+ 85, // 87: grpc.Bridge.IsTelemetryDisabled:input_type -> google.protobuf.Empty
+ 85, // 88: grpc.Bridge.GoOs:input_type -> google.protobuf.Empty
+ 85, // 89: grpc.Bridge.TriggerReset:input_type -> google.protobuf.Empty
+ 85, // 90: grpc.Bridge.Version:input_type -> google.protobuf.Empty
+ 85, // 91: grpc.Bridge.LogsPath:input_type -> google.protobuf.Empty
+ 85, // 92: grpc.Bridge.LicensePath:input_type -> google.protobuf.Empty
+ 85, // 93: grpc.Bridge.ReleaseNotesPageLink:input_type -> google.protobuf.Empty
+ 85, // 94: grpc.Bridge.DependencyLicensesLink:input_type -> google.protobuf.Empty
+ 85, // 95: grpc.Bridge.LandingPageLink:input_type -> google.protobuf.Empty
+ 84, // 96: grpc.Bridge.SetColorSchemeName:input_type -> google.protobuf.StringValue
+ 85, // 97: grpc.Bridge.ColorSchemeName:input_type -> google.protobuf.Empty
+ 85, // 98: grpc.Bridge.CurrentEmailClient:input_type -> google.protobuf.Empty
+ 9, // 99: grpc.Bridge.ReportBug:input_type -> grpc.ReportBugRequest
+ 84, // 100: grpc.Bridge.ForceLauncher:input_type -> google.protobuf.StringValue
+ 84, // 101: grpc.Bridge.SetMainExecutable:input_type -> google.protobuf.StringValue
+ 84, // 102: grpc.Bridge.RequestKnowledgeBaseSuggestions:input_type -> google.protobuf.StringValue
+ 10, // 103: grpc.Bridge.Login:input_type -> grpc.LoginRequest
+ 10, // 104: grpc.Bridge.Login2FA:input_type -> grpc.LoginRequest
+ 10, // 105: grpc.Bridge.LoginFido:input_type -> grpc.LoginRequest
+ 10, // 106: grpc.Bridge.Login2Passwords:input_type -> grpc.LoginRequest
+ 11, // 107: grpc.Bridge.LoginAbort:input_type -> grpc.LoginAbortRequest
+ 11, // 108: grpc.Bridge.FidoAssertionAbort:input_type -> grpc.LoginAbortRequest
+ 85, // 109: grpc.Bridge.CheckUpdate:input_type -> google.protobuf.Empty
+ 85, // 110: grpc.Bridge.InstallUpdate:input_type -> google.protobuf.Empty
+ 86, // 111: grpc.Bridge.SetIsAutomaticUpdateOn:input_type -> google.protobuf.BoolValue
+ 85, // 112: grpc.Bridge.IsAutomaticUpdateOn:input_type -> google.protobuf.Empty
+ 85, // 113: grpc.Bridge.DiskCachePath:input_type -> google.protobuf.Empty
+ 84, // 114: grpc.Bridge.SetDiskCachePath:input_type -> google.protobuf.StringValue
+ 86, // 115: grpc.Bridge.SetIsDoHEnabled:input_type -> google.protobuf.BoolValue
+ 85, // 116: grpc.Bridge.IsDoHEnabled:input_type -> google.protobuf.Empty
+ 85, // 117: grpc.Bridge.MailServerSettings:input_type -> google.protobuf.Empty
+ 12, // 118: grpc.Bridge.SetMailServerSettings:input_type -> grpc.ImapSmtpSettings
+ 85, // 119: grpc.Bridge.Hostname:input_type -> google.protobuf.Empty
+ 87, // 120: grpc.Bridge.IsPortFree:input_type -> google.protobuf.Int32Value
+ 85, // 121: grpc.Bridge.AvailableKeychains:input_type -> google.protobuf.Empty
+ 84, // 122: grpc.Bridge.SetCurrentKeychain:input_type -> google.protobuf.StringValue
+ 85, // 123: grpc.Bridge.CurrentKeychain:input_type -> google.protobuf.Empty
+ 85, // 124: grpc.Bridge.GetUserList:input_type -> google.protobuf.Empty
+ 84, // 125: grpc.Bridge.GetUser:input_type -> google.protobuf.StringValue
+ 15, // 126: grpc.Bridge.SetUserSplitMode:input_type -> grpc.UserSplitModeRequest
+ 16, // 127: grpc.Bridge.SendBadEventUserFeedback:input_type -> grpc.UserBadEventFeedbackRequest
+ 84, // 128: grpc.Bridge.LogoutUser:input_type -> google.protobuf.StringValue
+ 84, // 129: grpc.Bridge.RemoveUser:input_type -> google.protobuf.StringValue
+ 18, // 130: grpc.Bridge.ConfigureUserAppleMail:input_type -> grpc.ConfigureAppleMailRequest
+ 85, // 131: grpc.Bridge.IsTLSCertificateInstalled:input_type -> google.protobuf.Empty
+ 85, // 132: grpc.Bridge.InstallTLSCertificate:input_type -> google.protobuf.Empty
+ 84, // 133: grpc.Bridge.ExportTLSCertificates:input_type -> google.protobuf.StringValue
+ 19, // 134: grpc.Bridge.RunEventStream:input_type -> grpc.EventStreamRequest
+ 85, // 135: grpc.Bridge.StopEventStream:input_type -> google.protobuf.Empty
+ 85, // 136: grpc.Bridge.TriggerRepair:input_type -> google.protobuf.Empty
+ 84, // 137: grpc.Bridge.CheckTokens:output_type -> google.protobuf.StringValue
+ 85, // 138: grpc.Bridge.AddLogEntry:output_type -> google.protobuf.Empty
+ 8, // 139: grpc.Bridge.GuiReady:output_type -> grpc.GuiReadyResponse
+ 85, // 140: grpc.Bridge.Quit:output_type -> google.protobuf.Empty
+ 85, // 141: grpc.Bridge.Restart:output_type -> google.protobuf.Empty
+ 86, // 142: grpc.Bridge.ShowOnStartup:output_type -> google.protobuf.BoolValue
+ 85, // 143: grpc.Bridge.SetIsAutostartOn:output_type -> google.protobuf.Empty
+ 86, // 144: grpc.Bridge.IsAutostartOn:output_type -> google.protobuf.BoolValue
+ 85, // 145: grpc.Bridge.SetIsBetaEnabled:output_type -> google.protobuf.Empty
+ 86, // 146: grpc.Bridge.IsBetaEnabled:output_type -> google.protobuf.BoolValue
+ 85, // 147: grpc.Bridge.SetIsAllMailVisible:output_type -> google.protobuf.Empty
+ 86, // 148: grpc.Bridge.IsAllMailVisible:output_type -> google.protobuf.BoolValue
+ 85, // 149: grpc.Bridge.SetIsTelemetryDisabled:output_type -> google.protobuf.Empty
+ 86, // 150: grpc.Bridge.IsTelemetryDisabled:output_type -> google.protobuf.BoolValue
+ 84, // 151: grpc.Bridge.GoOs:output_type -> google.protobuf.StringValue
+ 85, // 152: grpc.Bridge.TriggerReset:output_type -> google.protobuf.Empty
+ 84, // 153: grpc.Bridge.Version:output_type -> google.protobuf.StringValue
+ 84, // 154: grpc.Bridge.LogsPath:output_type -> google.protobuf.StringValue
+ 84, // 155: grpc.Bridge.LicensePath:output_type -> google.protobuf.StringValue
+ 84, // 156: grpc.Bridge.ReleaseNotesPageLink:output_type -> google.protobuf.StringValue
+ 84, // 157: grpc.Bridge.DependencyLicensesLink:output_type -> google.protobuf.StringValue
+ 84, // 158: grpc.Bridge.LandingPageLink:output_type -> google.protobuf.StringValue
+ 85, // 159: grpc.Bridge.SetColorSchemeName:output_type -> google.protobuf.Empty
+ 84, // 160: grpc.Bridge.ColorSchemeName:output_type -> google.protobuf.StringValue
+ 84, // 161: grpc.Bridge.CurrentEmailClient:output_type -> google.protobuf.StringValue
+ 85, // 162: grpc.Bridge.ReportBug:output_type -> google.protobuf.Empty
+ 85, // 163: grpc.Bridge.ForceLauncher:output_type -> google.protobuf.Empty
+ 85, // 164: grpc.Bridge.SetMainExecutable:output_type -> google.protobuf.Empty
+ 85, // 165: grpc.Bridge.RequestKnowledgeBaseSuggestions:output_type -> google.protobuf.Empty
+ 85, // 166: grpc.Bridge.Login:output_type -> google.protobuf.Empty
+ 85, // 167: grpc.Bridge.Login2FA:output_type -> google.protobuf.Empty
+ 85, // 168: grpc.Bridge.LoginFido:output_type -> google.protobuf.Empty
+ 85, // 169: grpc.Bridge.Login2Passwords:output_type -> google.protobuf.Empty
+ 85, // 170: grpc.Bridge.LoginAbort:output_type -> google.protobuf.Empty
+ 85, // 171: grpc.Bridge.FidoAssertionAbort:output_type -> google.protobuf.Empty
+ 85, // 172: grpc.Bridge.CheckUpdate:output_type -> google.protobuf.Empty
+ 85, // 173: grpc.Bridge.InstallUpdate:output_type -> google.protobuf.Empty
+ 85, // 174: grpc.Bridge.SetIsAutomaticUpdateOn:output_type -> google.protobuf.Empty
+ 86, // 175: grpc.Bridge.IsAutomaticUpdateOn:output_type -> google.protobuf.BoolValue
+ 84, // 176: grpc.Bridge.DiskCachePath:output_type -> google.protobuf.StringValue
+ 85, // 177: grpc.Bridge.SetDiskCachePath:output_type -> google.protobuf.Empty
+ 85, // 178: grpc.Bridge.SetIsDoHEnabled:output_type -> google.protobuf.Empty
+ 86, // 179: grpc.Bridge.IsDoHEnabled:output_type -> google.protobuf.BoolValue
+ 12, // 180: grpc.Bridge.MailServerSettings:output_type -> grpc.ImapSmtpSettings
+ 85, // 181: grpc.Bridge.SetMailServerSettings:output_type -> google.protobuf.Empty
+ 84, // 182: grpc.Bridge.Hostname:output_type -> google.protobuf.StringValue
+ 86, // 183: grpc.Bridge.IsPortFree:output_type -> google.protobuf.BoolValue
+ 13, // 184: grpc.Bridge.AvailableKeychains:output_type -> grpc.AvailableKeychainsResponse
+ 85, // 185: grpc.Bridge.SetCurrentKeychain:output_type -> google.protobuf.Empty
+ 84, // 186: grpc.Bridge.CurrentKeychain:output_type -> google.protobuf.StringValue
+ 17, // 187: grpc.Bridge.GetUserList:output_type -> grpc.UserListResponse
+ 14, // 188: grpc.Bridge.GetUser:output_type -> grpc.User
+ 85, // 189: grpc.Bridge.SetUserSplitMode:output_type -> google.protobuf.Empty
+ 85, // 190: grpc.Bridge.SendBadEventUserFeedback:output_type -> google.protobuf.Empty
+ 85, // 191: grpc.Bridge.LogoutUser:output_type -> google.protobuf.Empty
+ 85, // 192: grpc.Bridge.RemoveUser:output_type -> google.protobuf.Empty
+ 85, // 193: grpc.Bridge.ConfigureUserAppleMail:output_type -> google.protobuf.Empty
+ 86, // 194: grpc.Bridge.IsTLSCertificateInstalled:output_type -> google.protobuf.BoolValue
+ 85, // 195: grpc.Bridge.InstallTLSCertificate:output_type -> google.protobuf.Empty
+ 85, // 196: grpc.Bridge.ExportTLSCertificates:output_type -> google.protobuf.Empty
+ 20, // 197: grpc.Bridge.RunEventStream:output_type -> grpc.StreamEvent
+ 85, // 198: grpc.Bridge.StopEventStream:output_type -> google.protobuf.Empty
+ 85, // 199: grpc.Bridge.TriggerRepair:output_type -> google.protobuf.Empty
+ 137, // [137:200] is the sub-list for method output_type
+ 74, // [74:137] is the sub-list for method input_type
+ 74, // [74:74] is the sub-list for extension type_name
+ 74, // [74:74] is the sub-list for extension extendee
+ 0, // [0:74] is the sub-list for field type_name
}
func init() { file_bridge_proto_init() }
@@ -6003,886 +5707,8 @@ func file_bridge_proto_init() {
if File_bridge_proto != nil {
return
}
- if !protoimpl.UnsafeEnabled {
- file_bridge_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AddLogEntryRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GuiReadyResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ReportBugRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*LoginRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*LoginAbortRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ImapSmtpSettings); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AvailableKeychainsResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*User); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UserSplitModeRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UserBadEventFeedbackRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UserListResponse); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ConfigureAppleMailRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*EventStreamRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*StreamEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AppEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*InternetStatusEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ToggleAutostartFinishedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ResetFinishedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ReportBugFinishedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ReportBugSuccessEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ReportBugErrorEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ShowMainWindowEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ReportBugFallbackEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CertificateInstallSuccessEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CertificateInstallCanceledEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CertificateInstallFailedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RepairStartedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AllUsersLoadedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*KnowledgeBaseSuggestion); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*KnowledgeBaseSuggestionsEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*LoginEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*LoginErrorEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*LoginTfaRequestedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*LoginTwoPasswordsRequestedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*LoginFinishedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*LoginHvRequestedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateErrorEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateManualReadyEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateManualRestartNeededEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateForceEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateSilentRestartNeeded); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateIsLatestVersion); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateCheckFinished); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateVersionChanged); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DiskCacheEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DiskCacheErrorEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DiskCachePathChangedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DiskCachePathChangeFinishedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MailServerSettingsEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MailServerSettingsErrorEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MailServerSettingsChangedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ChangeMailServerSettingsFinishedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*KeychainEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ChangeKeychainFinishedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*HasNoKeychainEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RebuildKeychainEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MailEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AddressChangedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AddressChangedLogoutEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ApiCertIssueEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UserEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ToggleSplitModeFinishedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UserDisconnectedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UserChangedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UserBadEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UsedBytesChangedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ImapLoginFailedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SyncStartedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SyncFinishedEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SyncProgressEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UserNotificationEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_bridge_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GenericErrorEvent); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
- file_bridge_proto_msgTypes[3].OneofWrappers = []interface{}{}
- file_bridge_proto_msgTypes[13].OneofWrappers = []interface{}{
+ file_bridge_proto_msgTypes[3].OneofWrappers = []any{}
+ file_bridge_proto_msgTypes[13].OneofWrappers = []any{
(*StreamEvent_App)(nil),
(*StreamEvent_Login)(nil),
(*StreamEvent_Update)(nil),
@@ -6893,7 +5719,7 @@ func file_bridge_proto_init() {
(*StreamEvent_User)(nil),
(*StreamEvent_GenericError)(nil),
}
- file_bridge_proto_msgTypes[14].OneofWrappers = []interface{}{
+ file_bridge_proto_msgTypes[14].OneofWrappers = []any{
(*AppEvent_InternetStatus)(nil),
(*AppEvent_ToggleAutostartFinished)(nil),
(*AppEvent_ResetFinished)(nil),
@@ -6910,15 +5736,20 @@ func file_bridge_proto_init() {
(*AppEvent_AllUsersLoaded)(nil),
(*AppEvent_UserNotification)(nil),
}
- file_bridge_proto_msgTypes[30].OneofWrappers = []interface{}{
+ file_bridge_proto_msgTypes[30].OneofWrappers = []any{
(*LoginEvent_Error)(nil),
(*LoginEvent_TfaRequested)(nil),
(*LoginEvent_TwoPasswordRequested)(nil),
(*LoginEvent_Finished)(nil),
(*LoginEvent_AlreadyLoggedIn)(nil),
(*LoginEvent_HvRequested)(nil),
+ (*LoginEvent_FidoRequested)(nil),
+ (*LoginEvent_TfaOrFidoRequested)(nil),
+ (*LoginEvent_LoginFidoTouchRequested)(nil),
+ (*LoginEvent_LoginFidoTouchCompleted)(nil),
+ (*LoginEvent_LoginFidoPinRequired)(nil),
}
- file_bridge_proto_msgTypes[36].OneofWrappers = []interface{}{
+ file_bridge_proto_msgTypes[40].OneofWrappers = []any{
(*UpdateEvent_Error)(nil),
(*UpdateEvent_ManualReady)(nil),
(*UpdateEvent_ManualRestartNeeded)(nil),
@@ -6928,27 +5759,27 @@ func file_bridge_proto_init() {
(*UpdateEvent_CheckFinished)(nil),
(*UpdateEvent_VersionChanged)(nil),
}
- file_bridge_proto_msgTypes[45].OneofWrappers = []interface{}{
+ file_bridge_proto_msgTypes[49].OneofWrappers = []any{
(*DiskCacheEvent_Error)(nil),
(*DiskCacheEvent_PathChanged)(nil),
(*DiskCacheEvent_PathChangeFinished)(nil),
}
- file_bridge_proto_msgTypes[49].OneofWrappers = []interface{}{
+ file_bridge_proto_msgTypes[53].OneofWrappers = []any{
(*MailServerSettingsEvent_Error)(nil),
(*MailServerSettingsEvent_MailServerSettingsChanged)(nil),
(*MailServerSettingsEvent_ChangeMailServerSettingsFinished)(nil),
}
- file_bridge_proto_msgTypes[53].OneofWrappers = []interface{}{
+ file_bridge_proto_msgTypes[57].OneofWrappers = []any{
(*KeychainEvent_ChangeKeychainFinished)(nil),
(*KeychainEvent_HasNoKeychain)(nil),
(*KeychainEvent_RebuildKeychain)(nil),
}
- file_bridge_proto_msgTypes[57].OneofWrappers = []interface{}{
+ file_bridge_proto_msgTypes[61].OneofWrappers = []any{
(*MailEvent_AddressChanged)(nil),
(*MailEvent_AddressChangedLogout)(nil),
(*MailEvent_ApiCertIssue)(nil),
}
- file_bridge_proto_msgTypes[61].OneofWrappers = []interface{}{
+ file_bridge_proto_msgTypes[65].OneofWrappers = []any{
(*UserEvent_ToggleSplitModeFinished)(nil),
(*UserEvent_UserDisconnected)(nil),
(*UserEvent_UserChanged)(nil),
@@ -6963,9 +5794,9 @@ func file_bridge_proto_init() {
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_bridge_proto_rawDesc,
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_bridge_proto_rawDesc), len(file_bridge_proto_rawDesc)),
NumEnums: 7,
- NumMessages: 73,
+ NumMessages: 77,
NumExtensions: 0,
NumServices: 1,
},
@@ -6975,7 +5806,6 @@ func file_bridge_proto_init() {
MessageInfos: file_bridge_proto_msgTypes,
}.Build()
File_bridge_proto = out.File
- file_bridge_proto_rawDesc = nil
file_bridge_proto_goTypes = nil
file_bridge_proto_depIdxs = nil
}
diff --git a/internal/frontend/grpc/bridge.proto b/internal/frontend/grpc/bridge.proto
index 2161487f..0561d998 100644
--- a/internal/frontend/grpc/bridge.proto
+++ b/internal/frontend/grpc/bridge.proto
@@ -63,8 +63,10 @@ service Bridge {
// login
rpc Login(LoginRequest) returns (google.protobuf.Empty);
rpc Login2FA(LoginRequest) returns (google.protobuf.Empty);
+ rpc LoginFido(LoginRequest) returns (google.protobuf.Empty);
rpc Login2Passwords(LoginRequest) returns (google.protobuf.Empty);
rpc LoginAbort(LoginAbortRequest) returns (google.protobuf.Empty);
+ rpc FidoAssertionAbort(LoginAbortRequest) returns (google.protobuf.Empty);
// update
rpc CheckUpdate(google.protobuf.Empty) returns (google.protobuf.Empty);
@@ -313,6 +315,11 @@ message LoginEvent {
LoginFinishedEvent finished = 4;
LoginFinishedEvent alreadyLoggedIn = 5;
LoginHvRequestedEvent hvRequested = 6;
+ LoginFidoRequestedEvent fidoRequested = 7;
+ LoginTfaOrFidoRequestedEvent tfaOrFidoRequested = 8;
+ LoginFidoTouchEvent loginFidoTouchRequested = 9;
+ LoginFidoTouchEvent loginFidoTouchCompleted = 10;
+ LoginFidoPinRequired loginFidoPinRequired = 11;
}
}
@@ -325,6 +332,9 @@ enum LoginErrorType {
TWO_PASSWORDS_ERROR = 5;
TWO_PASSWORDS_ABORT = 6;
HV_ERROR = 7;
+ FIDO_PIN_INVALID = 8;
+ FIDO_PIN_BLOCKED = 9;
+ FIDO_ERROR = 10;
}
message LoginErrorEvent {
@@ -336,6 +346,22 @@ message LoginTfaRequestedEvent {
string username = 1;
}
+message LoginFidoRequestedEvent {
+ string username = 1;
+}
+
+message LoginTfaOrFidoRequestedEvent {
+ string username = 1;
+}
+
+message LoginFidoTouchEvent {
+ string username = 1;
+}
+
+message LoginFidoPinRequired {
+ string username = 1;
+}
+
message LoginTwoPasswordsRequestedEvent {
string username = 1;
}
diff --git a/internal/frontend/grpc/bridge_grpc.pb.go b/internal/frontend/grpc/bridge_grpc.pb.go
index 8573e9d5..1bfbd703 100644
--- a/internal/frontend/grpc/bridge_grpc.pb.go
+++ b/internal/frontend/grpc/bridge_grpc.pb.go
@@ -17,8 +17,8 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
-// - protoc-gen-go-grpc v1.3.0
-// - protoc v3.21.12
+// - protoc-gen-go-grpc v1.5.1
+// - protoc v5.29.5
// source: bridge.proto
package grpc
@@ -34,8 +34,8 @@ import (
// 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
+// Requires gRPC-Go v1.64.0 or later.
+const _ = grpc.SupportPackageIsVersion9
const (
Bridge_CheckTokens_FullMethodName = "/grpc.Bridge/CheckTokens"
@@ -69,8 +69,10 @@ const (
Bridge_RequestKnowledgeBaseSuggestions_FullMethodName = "/grpc.Bridge/RequestKnowledgeBaseSuggestions"
Bridge_Login_FullMethodName = "/grpc.Bridge/Login"
Bridge_Login2FA_FullMethodName = "/grpc.Bridge/Login2FA"
+ Bridge_LoginFido_FullMethodName = "/grpc.Bridge/LoginFido"
Bridge_Login2Passwords_FullMethodName = "/grpc.Bridge/Login2Passwords"
Bridge_LoginAbort_FullMethodName = "/grpc.Bridge/LoginAbort"
+ Bridge_FidoAssertionAbort_FullMethodName = "/grpc.Bridge/FidoAssertionAbort"
Bridge_CheckUpdate_FullMethodName = "/grpc.Bridge/CheckUpdate"
Bridge_InstallUpdate_FullMethodName = "/grpc.Bridge/InstallUpdate"
Bridge_SetIsAutomaticUpdateOn_FullMethodName = "/grpc.Bridge/SetIsAutomaticUpdateOn"
@@ -104,6 +106,12 @@ const (
// BridgeClient is the client API for Bridge 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.
+//
+// **********************************************************************************************************************
+//
+// Service Declaration
+//
+// **********************************************************************************************************************≠––
type BridgeClient interface {
// App related calls
CheckTokens(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*wrapperspb.StringValue, error)
@@ -138,8 +146,10 @@ type BridgeClient interface {
// login
Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
Login2FA(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
+ LoginFido(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
Login2Passwords(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
LoginAbort(ctx context.Context, in *LoginAbortRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
+ FidoAssertionAbort(ctx context.Context, in *LoginAbortRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
// update
CheckUpdate(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)
InstallUpdate(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)
@@ -172,7 +182,7 @@ type BridgeClient interface {
InstallTLSCertificate(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)
ExportTLSCertificates(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error)
// Server -> Client event stream
- RunEventStream(ctx context.Context, in *EventStreamRequest, opts ...grpc.CallOption) (Bridge_RunEventStreamClient, error)
+ RunEventStream(ctx context.Context, in *EventStreamRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[StreamEvent], error)
StopEventStream(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)
// Repair
TriggerRepair(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error)
@@ -187,8 +197,9 @@ func NewBridgeClient(cc grpc.ClientConnInterface) BridgeClient {
}
func (c *bridgeClient) CheckTokens(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_CheckTokens_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_CheckTokens_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -196,8 +207,9 @@ func (c *bridgeClient) CheckTokens(ctx context.Context, in *wrapperspb.StringVal
}
func (c *bridgeClient) AddLogEntry(ctx context.Context, in *AddLogEntryRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_AddLogEntry_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_AddLogEntry_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -205,8 +217,9 @@ func (c *bridgeClient) AddLogEntry(ctx context.Context, in *AddLogEntryRequest,
}
func (c *bridgeClient) GuiReady(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GuiReadyResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(GuiReadyResponse)
- err := c.cc.Invoke(ctx, Bridge_GuiReady_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_GuiReady_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -214,8 +227,9 @@ func (c *bridgeClient) GuiReady(ctx context.Context, in *emptypb.Empty, opts ...
}
func (c *bridgeClient) Quit(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_Quit_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_Quit_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -223,8 +237,9 @@ func (c *bridgeClient) Quit(ctx context.Context, in *emptypb.Empty, opts ...grpc
}
func (c *bridgeClient) Restart(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_Restart_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_Restart_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -232,8 +247,9 @@ func (c *bridgeClient) Restart(ctx context.Context, in *emptypb.Empty, opts ...g
}
func (c *bridgeClient) ShowOnStartup(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.BoolValue)
- err := c.cc.Invoke(ctx, Bridge_ShowOnStartup_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_ShowOnStartup_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -241,8 +257,9 @@ func (c *bridgeClient) ShowOnStartup(ctx context.Context, in *emptypb.Empty, opt
}
func (c *bridgeClient) SetIsAutostartOn(ctx context.Context, in *wrapperspb.BoolValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SetIsAutostartOn_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SetIsAutostartOn_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -250,8 +267,9 @@ func (c *bridgeClient) SetIsAutostartOn(ctx context.Context, in *wrapperspb.Bool
}
func (c *bridgeClient) IsAutostartOn(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.BoolValue)
- err := c.cc.Invoke(ctx, Bridge_IsAutostartOn_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_IsAutostartOn_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -259,8 +277,9 @@ func (c *bridgeClient) IsAutostartOn(ctx context.Context, in *emptypb.Empty, opt
}
func (c *bridgeClient) SetIsBetaEnabled(ctx context.Context, in *wrapperspb.BoolValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SetIsBetaEnabled_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SetIsBetaEnabled_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -268,8 +287,9 @@ func (c *bridgeClient) SetIsBetaEnabled(ctx context.Context, in *wrapperspb.Bool
}
func (c *bridgeClient) IsBetaEnabled(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.BoolValue)
- err := c.cc.Invoke(ctx, Bridge_IsBetaEnabled_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_IsBetaEnabled_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -277,8 +297,9 @@ func (c *bridgeClient) IsBetaEnabled(ctx context.Context, in *emptypb.Empty, opt
}
func (c *bridgeClient) SetIsAllMailVisible(ctx context.Context, in *wrapperspb.BoolValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SetIsAllMailVisible_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SetIsAllMailVisible_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -286,8 +307,9 @@ func (c *bridgeClient) SetIsAllMailVisible(ctx context.Context, in *wrapperspb.B
}
func (c *bridgeClient) IsAllMailVisible(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.BoolValue)
- err := c.cc.Invoke(ctx, Bridge_IsAllMailVisible_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_IsAllMailVisible_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -295,8 +317,9 @@ func (c *bridgeClient) IsAllMailVisible(ctx context.Context, in *emptypb.Empty,
}
func (c *bridgeClient) SetIsTelemetryDisabled(ctx context.Context, in *wrapperspb.BoolValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SetIsTelemetryDisabled_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SetIsTelemetryDisabled_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -304,8 +327,9 @@ func (c *bridgeClient) SetIsTelemetryDisabled(ctx context.Context, in *wrappersp
}
func (c *bridgeClient) IsTelemetryDisabled(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.BoolValue)
- err := c.cc.Invoke(ctx, Bridge_IsTelemetryDisabled_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_IsTelemetryDisabled_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -313,8 +337,9 @@ func (c *bridgeClient) IsTelemetryDisabled(ctx context.Context, in *emptypb.Empt
}
func (c *bridgeClient) GoOs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_GoOs_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_GoOs_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -322,8 +347,9 @@ func (c *bridgeClient) GoOs(ctx context.Context, in *emptypb.Empty, opts ...grpc
}
func (c *bridgeClient) TriggerReset(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_TriggerReset_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_TriggerReset_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -331,8 +357,9 @@ func (c *bridgeClient) TriggerReset(ctx context.Context, in *emptypb.Empty, opts
}
func (c *bridgeClient) Version(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_Version_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_Version_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -340,8 +367,9 @@ func (c *bridgeClient) Version(ctx context.Context, in *emptypb.Empty, opts ...g
}
func (c *bridgeClient) LogsPath(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_LogsPath_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_LogsPath_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -349,8 +377,9 @@ func (c *bridgeClient) LogsPath(ctx context.Context, in *emptypb.Empty, opts ...
}
func (c *bridgeClient) LicensePath(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_LicensePath_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_LicensePath_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -358,8 +387,9 @@ func (c *bridgeClient) LicensePath(ctx context.Context, in *emptypb.Empty, opts
}
func (c *bridgeClient) ReleaseNotesPageLink(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_ReleaseNotesPageLink_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_ReleaseNotesPageLink_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -367,8 +397,9 @@ func (c *bridgeClient) ReleaseNotesPageLink(ctx context.Context, in *emptypb.Emp
}
func (c *bridgeClient) DependencyLicensesLink(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_DependencyLicensesLink_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_DependencyLicensesLink_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -376,8 +407,9 @@ func (c *bridgeClient) DependencyLicensesLink(ctx context.Context, in *emptypb.E
}
func (c *bridgeClient) LandingPageLink(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_LandingPageLink_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_LandingPageLink_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -385,8 +417,9 @@ func (c *bridgeClient) LandingPageLink(ctx context.Context, in *emptypb.Empty, o
}
func (c *bridgeClient) SetColorSchemeName(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SetColorSchemeName_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SetColorSchemeName_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -394,8 +427,9 @@ func (c *bridgeClient) SetColorSchemeName(ctx context.Context, in *wrapperspb.St
}
func (c *bridgeClient) ColorSchemeName(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_ColorSchemeName_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_ColorSchemeName_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -403,8 +437,9 @@ func (c *bridgeClient) ColorSchemeName(ctx context.Context, in *emptypb.Empty, o
}
func (c *bridgeClient) CurrentEmailClient(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_CurrentEmailClient_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_CurrentEmailClient_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -412,8 +447,9 @@ func (c *bridgeClient) CurrentEmailClient(ctx context.Context, in *emptypb.Empty
}
func (c *bridgeClient) ReportBug(ctx context.Context, in *ReportBugRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_ReportBug_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_ReportBug_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -421,8 +457,9 @@ func (c *bridgeClient) ReportBug(ctx context.Context, in *ReportBugRequest, opts
}
func (c *bridgeClient) ForceLauncher(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_ForceLauncher_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_ForceLauncher_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -430,8 +467,9 @@ func (c *bridgeClient) ForceLauncher(ctx context.Context, in *wrapperspb.StringV
}
func (c *bridgeClient) SetMainExecutable(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SetMainExecutable_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SetMainExecutable_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -439,8 +477,9 @@ func (c *bridgeClient) SetMainExecutable(ctx context.Context, in *wrapperspb.Str
}
func (c *bridgeClient) RequestKnowledgeBaseSuggestions(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_RequestKnowledgeBaseSuggestions_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_RequestKnowledgeBaseSuggestions_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -448,8 +487,9 @@ func (c *bridgeClient) RequestKnowledgeBaseSuggestions(ctx context.Context, in *
}
func (c *bridgeClient) Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_Login_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_Login_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -457,8 +497,19 @@ func (c *bridgeClient) Login(ctx context.Context, in *LoginRequest, opts ...grpc
}
func (c *bridgeClient) Login2FA(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_Login2FA_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_Login2FA_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *bridgeClient) LoginFido(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(emptypb.Empty)
+ err := c.cc.Invoke(ctx, Bridge_LoginFido_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -466,8 +517,9 @@ func (c *bridgeClient) Login2FA(ctx context.Context, in *LoginRequest, opts ...g
}
func (c *bridgeClient) Login2Passwords(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_Login2Passwords_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_Login2Passwords_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -475,8 +527,19 @@ func (c *bridgeClient) Login2Passwords(ctx context.Context, in *LoginRequest, op
}
func (c *bridgeClient) LoginAbort(ctx context.Context, in *LoginAbortRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_LoginAbort_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_LoginAbort_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *bridgeClient) FidoAssertionAbort(ctx context.Context, in *LoginAbortRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(emptypb.Empty)
+ err := c.cc.Invoke(ctx, Bridge_FidoAssertionAbort_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -484,8 +547,9 @@ func (c *bridgeClient) LoginAbort(ctx context.Context, in *LoginAbortRequest, op
}
func (c *bridgeClient) CheckUpdate(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_CheckUpdate_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_CheckUpdate_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -493,8 +557,9 @@ func (c *bridgeClient) CheckUpdate(ctx context.Context, in *emptypb.Empty, opts
}
func (c *bridgeClient) InstallUpdate(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_InstallUpdate_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_InstallUpdate_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -502,8 +567,9 @@ func (c *bridgeClient) InstallUpdate(ctx context.Context, in *emptypb.Empty, opt
}
func (c *bridgeClient) SetIsAutomaticUpdateOn(ctx context.Context, in *wrapperspb.BoolValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SetIsAutomaticUpdateOn_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SetIsAutomaticUpdateOn_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -511,8 +577,9 @@ func (c *bridgeClient) SetIsAutomaticUpdateOn(ctx context.Context, in *wrappersp
}
func (c *bridgeClient) IsAutomaticUpdateOn(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.BoolValue)
- err := c.cc.Invoke(ctx, Bridge_IsAutomaticUpdateOn_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_IsAutomaticUpdateOn_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -520,8 +587,9 @@ func (c *bridgeClient) IsAutomaticUpdateOn(ctx context.Context, in *emptypb.Empt
}
func (c *bridgeClient) DiskCachePath(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_DiskCachePath_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_DiskCachePath_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -529,8 +597,9 @@ func (c *bridgeClient) DiskCachePath(ctx context.Context, in *emptypb.Empty, opt
}
func (c *bridgeClient) SetDiskCachePath(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SetDiskCachePath_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SetDiskCachePath_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -538,8 +607,9 @@ func (c *bridgeClient) SetDiskCachePath(ctx context.Context, in *wrapperspb.Stri
}
func (c *bridgeClient) SetIsDoHEnabled(ctx context.Context, in *wrapperspb.BoolValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SetIsDoHEnabled_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SetIsDoHEnabled_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -547,8 +617,9 @@ func (c *bridgeClient) SetIsDoHEnabled(ctx context.Context, in *wrapperspb.BoolV
}
func (c *bridgeClient) IsDoHEnabled(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.BoolValue)
- err := c.cc.Invoke(ctx, Bridge_IsDoHEnabled_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_IsDoHEnabled_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -556,8 +627,9 @@ func (c *bridgeClient) IsDoHEnabled(ctx context.Context, in *emptypb.Empty, opts
}
func (c *bridgeClient) MailServerSettings(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ImapSmtpSettings, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(ImapSmtpSettings)
- err := c.cc.Invoke(ctx, Bridge_MailServerSettings_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_MailServerSettings_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -565,8 +637,9 @@ func (c *bridgeClient) MailServerSettings(ctx context.Context, in *emptypb.Empty
}
func (c *bridgeClient) SetMailServerSettings(ctx context.Context, in *ImapSmtpSettings, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SetMailServerSettings_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SetMailServerSettings_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -574,8 +647,9 @@ func (c *bridgeClient) SetMailServerSettings(ctx context.Context, in *ImapSmtpSe
}
func (c *bridgeClient) Hostname(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_Hostname_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_Hostname_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -583,8 +657,9 @@ func (c *bridgeClient) Hostname(ctx context.Context, in *emptypb.Empty, opts ...
}
func (c *bridgeClient) IsPortFree(ctx context.Context, in *wrapperspb.Int32Value, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.BoolValue)
- err := c.cc.Invoke(ctx, Bridge_IsPortFree_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_IsPortFree_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -592,8 +667,9 @@ func (c *bridgeClient) IsPortFree(ctx context.Context, in *wrapperspb.Int32Value
}
func (c *bridgeClient) AvailableKeychains(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*AvailableKeychainsResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(AvailableKeychainsResponse)
- err := c.cc.Invoke(ctx, Bridge_AvailableKeychains_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_AvailableKeychains_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -601,8 +677,9 @@ func (c *bridgeClient) AvailableKeychains(ctx context.Context, in *emptypb.Empty
}
func (c *bridgeClient) SetCurrentKeychain(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SetCurrentKeychain_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SetCurrentKeychain_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -610,8 +687,9 @@ func (c *bridgeClient) SetCurrentKeychain(ctx context.Context, in *wrapperspb.St
}
func (c *bridgeClient) CurrentKeychain(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.StringValue)
- err := c.cc.Invoke(ctx, Bridge_CurrentKeychain_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_CurrentKeychain_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -619,8 +697,9 @@ func (c *bridgeClient) CurrentKeychain(ctx context.Context, in *emptypb.Empty, o
}
func (c *bridgeClient) GetUserList(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*UserListResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(UserListResponse)
- err := c.cc.Invoke(ctx, Bridge_GetUserList_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_GetUserList_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -628,8 +707,9 @@ func (c *bridgeClient) GetUserList(ctx context.Context, in *emptypb.Empty, opts
}
func (c *bridgeClient) GetUser(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*User, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(User)
- err := c.cc.Invoke(ctx, Bridge_GetUser_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_GetUser_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -637,8 +717,9 @@ func (c *bridgeClient) GetUser(ctx context.Context, in *wrapperspb.StringValue,
}
func (c *bridgeClient) SetUserSplitMode(ctx context.Context, in *UserSplitModeRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SetUserSplitMode_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SetUserSplitMode_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -646,8 +727,9 @@ func (c *bridgeClient) SetUserSplitMode(ctx context.Context, in *UserSplitModeRe
}
func (c *bridgeClient) SendBadEventUserFeedback(ctx context.Context, in *UserBadEventFeedbackRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_SendBadEventUserFeedback_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_SendBadEventUserFeedback_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -655,8 +737,9 @@ func (c *bridgeClient) SendBadEventUserFeedback(ctx context.Context, in *UserBad
}
func (c *bridgeClient) LogoutUser(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_LogoutUser_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_LogoutUser_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -664,8 +747,9 @@ func (c *bridgeClient) LogoutUser(ctx context.Context, in *wrapperspb.StringValu
}
func (c *bridgeClient) RemoveUser(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_RemoveUser_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_RemoveUser_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -673,8 +757,9 @@ func (c *bridgeClient) RemoveUser(ctx context.Context, in *wrapperspb.StringValu
}
func (c *bridgeClient) ConfigureUserAppleMail(ctx context.Context, in *ConfigureAppleMailRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_ConfigureUserAppleMail_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_ConfigureUserAppleMail_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -682,8 +767,9 @@ func (c *bridgeClient) ConfigureUserAppleMail(ctx context.Context, in *Configure
}
func (c *bridgeClient) IsTLSCertificateInstalled(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(wrapperspb.BoolValue)
- err := c.cc.Invoke(ctx, Bridge_IsTLSCertificateInstalled_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_IsTLSCertificateInstalled_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -691,8 +777,9 @@ func (c *bridgeClient) IsTLSCertificateInstalled(ctx context.Context, in *emptyp
}
func (c *bridgeClient) InstallTLSCertificate(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_InstallTLSCertificate_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_InstallTLSCertificate_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -700,20 +787,22 @@ func (c *bridgeClient) InstallTLSCertificate(ctx context.Context, in *emptypb.Em
}
func (c *bridgeClient) ExportTLSCertificates(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_ExportTLSCertificates_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_ExportTLSCertificates_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
-func (c *bridgeClient) RunEventStream(ctx context.Context, in *EventStreamRequest, opts ...grpc.CallOption) (Bridge_RunEventStreamClient, error) {
- stream, err := c.cc.NewStream(ctx, &Bridge_ServiceDesc.Streams[0], Bridge_RunEventStream_FullMethodName, opts...)
+func (c *bridgeClient) RunEventStream(ctx context.Context, in *EventStreamRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[StreamEvent], error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ stream, err := c.cc.NewStream(ctx, &Bridge_ServiceDesc.Streams[0], Bridge_RunEventStream_FullMethodName, cOpts...)
if err != nil {
return nil, err
}
- x := &bridgeRunEventStreamClient{stream}
+ x := &grpc.GenericClientStream[EventStreamRequest, StreamEvent]{ClientStream: stream}
if err := x.ClientStream.SendMsg(in); err != nil {
return nil, err
}
@@ -723,26 +812,13 @@ func (c *bridgeClient) RunEventStream(ctx context.Context, in *EventStreamReques
return x, nil
}
-type Bridge_RunEventStreamClient interface {
- Recv() (*StreamEvent, error)
- grpc.ClientStream
-}
-
-type bridgeRunEventStreamClient struct {
- grpc.ClientStream
-}
-
-func (x *bridgeRunEventStreamClient) Recv() (*StreamEvent, error) {
- m := new(StreamEvent)
- if err := x.ClientStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
+// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
+type Bridge_RunEventStreamClient = grpc.ServerStreamingClient[StreamEvent]
func (c *bridgeClient) StopEventStream(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_StopEventStream_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_StopEventStream_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -750,8 +826,9 @@ func (c *bridgeClient) StopEventStream(ctx context.Context, in *emptypb.Empty, o
}
func (c *bridgeClient) TriggerRepair(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(emptypb.Empty)
- err := c.cc.Invoke(ctx, Bridge_TriggerRepair_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bridge_TriggerRepair_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -760,7 +837,13 @@ func (c *bridgeClient) TriggerRepair(ctx context.Context, in *emptypb.Empty, opt
// BridgeServer is the server API for Bridge service.
// All implementations must embed UnimplementedBridgeServer
-// for forward compatibility
+// for forward compatibility.
+//
+// **********************************************************************************************************************
+//
+// Service Declaration
+//
+// **********************************************************************************************************************≠––
type BridgeServer interface {
// App related calls
CheckTokens(context.Context, *wrapperspb.StringValue) (*wrapperspb.StringValue, error)
@@ -795,8 +878,10 @@ type BridgeServer interface {
// login
Login(context.Context, *LoginRequest) (*emptypb.Empty, error)
Login2FA(context.Context, *LoginRequest) (*emptypb.Empty, error)
+ LoginFido(context.Context, *LoginRequest) (*emptypb.Empty, error)
Login2Passwords(context.Context, *LoginRequest) (*emptypb.Empty, error)
LoginAbort(context.Context, *LoginAbortRequest) (*emptypb.Empty, error)
+ FidoAssertionAbort(context.Context, *LoginAbortRequest) (*emptypb.Empty, error)
// update
CheckUpdate(context.Context, *emptypb.Empty) (*emptypb.Empty, error)
InstallUpdate(context.Context, *emptypb.Empty) (*emptypb.Empty, error)
@@ -829,16 +914,19 @@ type BridgeServer interface {
InstallTLSCertificate(context.Context, *emptypb.Empty) (*emptypb.Empty, error)
ExportTLSCertificates(context.Context, *wrapperspb.StringValue) (*emptypb.Empty, error)
// Server -> Client event stream
- RunEventStream(*EventStreamRequest, Bridge_RunEventStreamServer) error
+ RunEventStream(*EventStreamRequest, grpc.ServerStreamingServer[StreamEvent]) error
StopEventStream(context.Context, *emptypb.Empty) (*emptypb.Empty, error)
// Repair
TriggerRepair(context.Context, *emptypb.Empty) (*emptypb.Empty, error)
mustEmbedUnimplementedBridgeServer()
}
-// UnimplementedBridgeServer must be embedded to have forward compatible implementations.
-type UnimplementedBridgeServer struct {
-}
+// UnimplementedBridgeServer must be embedded to have
+// forward compatible implementations.
+//
+// NOTE: this should be embedded by value instead of pointer to avoid a nil
+// pointer dereference when methods are called.
+type UnimplementedBridgeServer struct{}
func (UnimplementedBridgeServer) CheckTokens(context.Context, *wrapperspb.StringValue) (*wrapperspb.StringValue, error) {
return nil, status.Errorf(codes.Unimplemented, "method CheckTokens not implemented")
@@ -933,12 +1021,18 @@ func (UnimplementedBridgeServer) Login(context.Context, *LoginRequest) (*emptypb
func (UnimplementedBridgeServer) Login2FA(context.Context, *LoginRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method Login2FA not implemented")
}
+func (UnimplementedBridgeServer) LoginFido(context.Context, *LoginRequest) (*emptypb.Empty, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method LoginFido not implemented")
+}
func (UnimplementedBridgeServer) Login2Passwords(context.Context, *LoginRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method Login2Passwords not implemented")
}
func (UnimplementedBridgeServer) LoginAbort(context.Context, *LoginAbortRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method LoginAbort not implemented")
}
+func (UnimplementedBridgeServer) FidoAssertionAbort(context.Context, *LoginAbortRequest) (*emptypb.Empty, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method FidoAssertionAbort not implemented")
+}
func (UnimplementedBridgeServer) CheckUpdate(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method CheckUpdate not implemented")
}
@@ -1014,7 +1108,7 @@ func (UnimplementedBridgeServer) InstallTLSCertificate(context.Context, *emptypb
func (UnimplementedBridgeServer) ExportTLSCertificates(context.Context, *wrapperspb.StringValue) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method ExportTLSCertificates not implemented")
}
-func (UnimplementedBridgeServer) RunEventStream(*EventStreamRequest, Bridge_RunEventStreamServer) error {
+func (UnimplementedBridgeServer) RunEventStream(*EventStreamRequest, grpc.ServerStreamingServer[StreamEvent]) error {
return status.Errorf(codes.Unimplemented, "method RunEventStream not implemented")
}
func (UnimplementedBridgeServer) StopEventStream(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {
@@ -1024,6 +1118,7 @@ func (UnimplementedBridgeServer) TriggerRepair(context.Context, *emptypb.Empty)
return nil, status.Errorf(codes.Unimplemented, "method TriggerRepair not implemented")
}
func (UnimplementedBridgeServer) mustEmbedUnimplementedBridgeServer() {}
+func (UnimplementedBridgeServer) testEmbeddedByValue() {}
// UnsafeBridgeServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to BridgeServer will
@@ -1033,6 +1128,13 @@ type UnsafeBridgeServer interface {
}
func RegisterBridgeServer(s grpc.ServiceRegistrar, srv BridgeServer) {
+ // If the following call pancis, it indicates UnimplementedBridgeServer was
+ // embedded by pointer and is nil. This will cause panics if an
+ // unimplemented method is ever invoked, so we test this at initialization
+ // time to prevent it from happening at runtime later due to I/O.
+ if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
+ t.testEmbeddedByValue()
+ }
s.RegisterService(&Bridge_ServiceDesc, srv)
}
@@ -1594,6 +1696,24 @@ func _Bridge_Login2FA_Handler(srv interface{}, ctx context.Context, dec func(int
return interceptor(ctx, in, info, handler)
}
+func _Bridge_LoginFido_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(LoginRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(BridgeServer).LoginFido(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: Bridge_LoginFido_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(BridgeServer).LoginFido(ctx, req.(*LoginRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _Bridge_Login2Passwords_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(LoginRequest)
if err := dec(in); err != nil {
@@ -1630,6 +1750,24 @@ func _Bridge_LoginAbort_Handler(srv interface{}, ctx context.Context, dec func(i
return interceptor(ctx, in, info, handler)
}
+func _Bridge_FidoAssertionAbort_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(LoginAbortRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(BridgeServer).FidoAssertionAbort(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: Bridge_FidoAssertionAbort_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(BridgeServer).FidoAssertionAbort(ctx, req.(*LoginAbortRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _Bridge_CheckUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(emptypb.Empty)
if err := dec(in); err != nil {
@@ -2085,21 +2223,11 @@ func _Bridge_RunEventStream_Handler(srv interface{}, stream grpc.ServerStream) e
if err := stream.RecvMsg(m); err != nil {
return err
}
- return srv.(BridgeServer).RunEventStream(m, &bridgeRunEventStreamServer{stream})
+ return srv.(BridgeServer).RunEventStream(m, &grpc.GenericServerStream[EventStreamRequest, StreamEvent]{ServerStream: stream})
}
-type Bridge_RunEventStreamServer interface {
- Send(*StreamEvent) error
- grpc.ServerStream
-}
-
-type bridgeRunEventStreamServer struct {
- grpc.ServerStream
-}
-
-func (x *bridgeRunEventStreamServer) Send(m *StreamEvent) error {
- return x.ServerStream.SendMsg(m)
-}
+// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
+type Bridge_RunEventStreamServer = grpc.ServerStreamingServer[StreamEvent]
func _Bridge_StopEventStream_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(emptypb.Empty)
@@ -2268,6 +2396,10 @@ var Bridge_ServiceDesc = grpc.ServiceDesc{
MethodName: "Login2FA",
Handler: _Bridge_Login2FA_Handler,
},
+ {
+ MethodName: "LoginFido",
+ Handler: _Bridge_LoginFido_Handler,
+ },
{
MethodName: "Login2Passwords",
Handler: _Bridge_Login2Passwords_Handler,
@@ -2276,6 +2408,10 @@ var Bridge_ServiceDesc = grpc.ServiceDesc{
MethodName: "LoginAbort",
Handler: _Bridge_LoginAbort_Handler,
},
+ {
+ MethodName: "FidoAssertionAbort",
+ Handler: _Bridge_FidoAssertionAbort_Handler,
+ },
{
MethodName: "CheckUpdate",
Handler: _Bridge_CheckUpdate_Handler,
diff --git a/internal/frontend/grpc/event_factory.go b/internal/frontend/grpc/event_factory.go
index 2d563836..f5ea2703 100644
--- a/internal/frontend/grpc/event_factory.go
+++ b/internal/frontend/grpc/event_factory.go
@@ -89,6 +89,26 @@ func NewLoginTfaRequestedEvent(username string) *StreamEvent {
return loginEvent(&LoginEvent{Event: &LoginEvent_TfaRequested{TfaRequested: &LoginTfaRequestedEvent{Username: username}}})
}
+func NewLoginFidoRequestedEvent(username string) *StreamEvent {
+ return loginEvent(&LoginEvent{Event: &LoginEvent_FidoRequested{FidoRequested: &LoginFidoRequestedEvent{Username: username}}})
+}
+
+func NewLoginTfaOrFidoRequestedEvent(username string) *StreamEvent {
+ return loginEvent(&LoginEvent{Event: &LoginEvent_TfaOrFidoRequested{TfaOrFidoRequested: &LoginTfaOrFidoRequestedEvent{Username: username}}})
+}
+
+func NewLoginFidoTouchRequested(username string) *StreamEvent {
+ return loginEvent(&LoginEvent{Event: &LoginEvent_LoginFidoTouchRequested{LoginFidoTouchRequested: &LoginFidoTouchEvent{Username: username}}})
+}
+
+func NewLoginFidoTouchCompleted(username string) *StreamEvent {
+ return loginEvent(&LoginEvent{Event: &LoginEvent_LoginFidoTouchCompleted{LoginFidoTouchCompleted: &LoginFidoTouchEvent{Username: username}}})
+}
+
+func NewLoginFidoPinRequired(username string) *StreamEvent {
+ return loginEvent(&LoginEvent{Event: &LoginEvent_LoginFidoPinRequired{LoginFidoPinRequired: &LoginFidoPinRequired{Username: username}}})
+}
+
func NewLoginTwoPasswordsRequestedEvent(username string) *StreamEvent {
return loginEvent(&LoginEvent{Event: &LoginEvent_TwoPasswordRequested{TwoPasswordRequested: &LoginTwoPasswordsRequestedEvent{Username: username}}})
}
diff --git a/internal/frontend/grpc/fido.go b/internal/frontend/grpc/fido.go
new file mode 100644
index 00000000..4c505ecb
--- /dev/null
+++ b/internal/frontend/grpc/fido.go
@@ -0,0 +1,111 @@
+// Copyright (c) 2025 Proton AG
+//
+// This file is part of Proton Mail Bridge.
+//
+// Proton Mail Bridge is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Proton Mail Bridge is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Proton Mail Bridge. If not, see .
+
+//go:build linux || darwin
+
+package grpc
+
+import (
+ "context"
+ "errors"
+ "fmt"
+
+ "github.com/ProtonMail/gluon/async"
+ "github.com/ProtonMail/proton-bridge/v3/internal/fido"
+ "github.com/keys-pub/go-libfido2"
+ "google.golang.org/protobuf/types/known/emptypb"
+)
+
+func (s *Service) LoginFido(_ context.Context, login *LoginRequest) (*emptypb.Empty, error) {
+ s.log.WithField("username", login.Username).Debug("LoginFido")
+
+ go func() {
+ defer async.HandlePanic(s.panicHandler)
+
+ fidoCtx, cancelFido := context.WithCancel(context.Background())
+ s.fidoManager.SetCancel(cancelFido)
+ defer s.fidoManager.Clear()
+
+ if s.auth.UID == "" || s.authClient == nil {
+ s.log.Errorf("Login FIDO: authentication incomplete %s %p", s.auth.UID, s.authClient)
+ _ = s.SendEvent(NewLoginError(LoginErrorType_FIDO_ERROR, "Missing authentication, try again."))
+ s.loginClean()
+ return
+ }
+
+ pinSupported, err := fido.IsPinSupported()
+ if err != nil {
+ s.log.WithError(err).Warn("could not determine security key PIN requirements")
+ _ = s.SendEvent(NewLoginError(LoginErrorType_FIDO_ERROR, fmt.Sprintf("Could not obtain security key pin requirements: %s", err)))
+ s.loginClean()
+ return
+ }
+
+ if pinSupported && len(login.Password) == 0 {
+ _ = s.SendEvent(NewLoginFidoPinRequired(login.Username))
+ return
+ }
+
+ pin, err := base64Decode(login.Password)
+ if err != nil {
+ s.log.WithError(err).Error("cannot decode security key device pin")
+ _ = s.SendEvent(NewLoginError(LoginErrorType_FIDO_PIN_INVALID, "Could not decode security key PIN"))
+ return
+ }
+
+ touchCh := make(chan struct{})
+ touchConfirmCh := make(chan struct{})
+
+ defer func() {
+ close(touchCh)
+ close(touchConfirmCh)
+ }()
+
+ go func() {
+ if _, ok := <-touchCh; ok {
+ _ = s.SendEvent(NewLoginFidoTouchRequested(login.Username))
+ if _, ok := <-touchConfirmCh; ok {
+ _ = s.SendEvent(NewLoginFidoTouchCompleted(login.Username))
+ }
+ }
+ }()
+
+ if err := fido.AuthWithHardwareKeyGUI(fidoCtx, s.authClient, s.auth, touchCh, touchConfirmCh, string(pin)); err != nil {
+ s.log.WithError(err).Warn("Login FIDO: failed")
+ switch {
+ case errors.Is(err, libfido2.ErrPinAuthBlocked):
+ _ = s.SendEvent(NewLoginError(LoginErrorType_FIDO_PIN_BLOCKED, "Security key PIN code is blocked"))
+
+ case errors.Is(err, libfido2.ErrPinInvalid):
+ _ = s.SendEvent(NewLoginError(LoginErrorType_FIDO_PIN_INVALID, "Security key PIN code is incorrect"))
+
+ case errors.Is(err, fido.ErrAssertionCancelled): // User cancellation, they can click re-auth again.
+ return
+
+ default:
+ _ = s.SendEvent(NewLoginError(LoginErrorType_FIDO_ERROR, fmt.Sprintf("Security key authentication failed: %s", err)))
+ s.loginClean()
+ }
+
+ return
+ }
+
+ s.finishLogin()
+ }()
+
+ return &emptypb.Empty{}, nil
+}
diff --git a/internal/frontend/grpc/fido/manager.go b/internal/frontend/grpc/fido/manager.go
new file mode 100644
index 00000000..a27cbfd8
--- /dev/null
+++ b/internal/frontend/grpc/fido/manager.go
@@ -0,0 +1,55 @@
+// Copyright (c) 2025 Proton AG
+//
+// This file is part of Proton Mail Bridge.
+//
+// Proton Mail Bridge is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Proton Mail Bridge is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Proton Mail Bridge. If not, see .
+
+package fido
+
+import (
+ "context"
+ "sync"
+)
+
+type Manager struct {
+ mu sync.Mutex
+ cancel context.CancelFunc
+}
+
+func (fm *Manager) withLock(fn func()) {
+ fm.mu.Lock()
+ defer fm.mu.Unlock()
+ fn()
+}
+
+func (fm *Manager) SetCancel(cancel context.CancelFunc) {
+ fm.withLock(func() {
+ fm.cancel = cancel
+ })
+}
+
+func (fm *Manager) Cancel() {
+ fm.withLock(func() {
+ if fm.cancel != nil {
+ fm.cancel()
+ fm.cancel = nil
+ }
+ })
+}
+
+func (fm *Manager) Clear() {
+ fm.withLock(func() {
+ fm.cancel = nil
+ })
+}
diff --git a/internal/frontend/grpc/fido_windows.go b/internal/frontend/grpc/fido_windows.go
new file mode 100644
index 00000000..183b7f73
--- /dev/null
+++ b/internal/frontend/grpc/fido_windows.go
@@ -0,0 +1,53 @@
+// Copyright (c) 2025 Proton AG
+//
+// This file is part of Proton Mail Bridge.
+//
+// Proton Mail Bridge is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Proton Mail Bridge is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Proton Mail Bridge. If not, see .
+
+//go:build windows
+
+package grpc
+
+import (
+ "context"
+ "fmt"
+
+ "github.com/ProtonMail/gluon/async"
+ "github.com/ProtonMail/proton-bridge/v3/internal/fido"
+ "google.golang.org/protobuf/types/known/emptypb"
+)
+
+func (s *Service) LoginFido(_ context.Context, login *LoginRequest) (*emptypb.Empty, error) {
+ s.log.WithField("username", login.Username).Debug("LoginFido")
+ go func() {
+ defer async.HandlePanic(s.panicHandler)
+
+ if s.auth.UID == "" || s.authClient == nil {
+ s.log.Errorf("Login FIDO: authentication incomplete %s %p", s.auth.UID, s.authClient)
+ _ = s.SendEvent(NewLoginError(LoginErrorType_TFA_ABORT, "Missing authentication, try again."))
+ s.loginClean()
+ return
+ }
+
+ if err := fido.AuthWithHardwareKeyGUI(s.authClient, s.auth, false); err != nil {
+ _ = s.SendEvent(NewLoginError(LoginErrorType_FIDO_ERROR, fmt.Sprintf("Security key authentication failed: %s", err)))
+ s.loginClean()
+ return
+ }
+
+ s.finishLogin()
+ }()
+
+ return &emptypb.Empty{}, nil
+}
diff --git a/internal/frontend/grpc/service.go b/internal/frontend/grpc/service.go
index 29aa8890..612cddb6 100644
--- a/internal/frontend/grpc/service.go
+++ b/internal/frontend/grpc/service.go
@@ -38,6 +38,7 @@ import (
"github.com/ProtonMail/proton-bridge/v3/internal/bridge"
"github.com/ProtonMail/proton-bridge/v3/internal/certs"
"github.com/ProtonMail/proton-bridge/v3/internal/events"
+ "github.com/ProtonMail/proton-bridge/v3/internal/frontend/grpc/fido"
"github.com/ProtonMail/proton-bridge/v3/internal/hv"
"github.com/ProtonMail/proton-bridge/v3/internal/platform"
"github.com/ProtonMail/proton-bridge/v3/internal/safe"
@@ -102,6 +103,8 @@ type Service struct { // nolint:structcheck
hvDetails *proton.APIHVDetails
useHvDetails bool
+
+ fidoManager *fido.Manager
}
// NewService returns a new instance of the service.
@@ -187,6 +190,8 @@ func NewService(
parentPID: parentPID,
parentPIDDoneCh: make(chan struct{}),
showOnStartup: showOnStartup,
+
+ fidoManager: &fido.Manager{},
}
// Initializing.Done is only called sync.Once. Please keep the increment set to 1
diff --git a/internal/frontend/grpc/service_methods.go b/internal/frontend/grpc/service_methods.go
index c1b721c9..e602f52f 100644
--- a/internal/frontend/grpc/service_methods.go
+++ b/internal/frontend/grpc/service_methods.go
@@ -35,6 +35,7 @@ import (
"github.com/ProtonMail/proton-bridge/v3/internal/platform"
"github.com/ProtonMail/proton-bridge/v3/internal/safe"
"github.com/ProtonMail/proton-bridge/v3/internal/service"
+ "github.com/ProtonMail/proton-bridge/v3/internal/unleash"
"github.com/ProtonMail/proton-bridge/v3/internal/updater"
"github.com/ProtonMail/proton-bridge/v3/pkg/ports"
"github.com/sirupsen/logrus"
@@ -500,10 +501,27 @@ func (s *Service) Login(_ context.Context, login *LoginRequest) (*emptypb.Empty,
s.authClient = client
s.auth = auth
+ u2fLoginEnabled := s.bridge.GetFeatureFlagValue(unleash.InboxBridgeU2FLoginEnabled)
+
switch {
- case auth.TwoFA.Enabled&proton.HasTOTP != 0:
+ case auth.TwoFA.Enabled == proton.HasTOTP:
_ = s.SendEvent(NewLoginTfaRequestedEvent(login.Username))
+ case auth.TwoFA.Enabled == proton.HasFIDO2:
+ if !u2fLoginEnabled {
+ // Such a case may only occur to internal users.
+ _ = s.SendEvent(NewLoginError(LoginErrorType_FIDO_ERROR, "Security key authentication required but not enabled in server configuration."))
+ return
+ }
+ _ = s.SendEvent(NewLoginFidoRequestedEvent(login.Username))
+
+ case auth.TwoFA.Enabled == proton.HasFIDO2AndTOTP:
+ if u2fLoginEnabled {
+ _ = s.SendEvent(NewLoginTfaOrFidoRequestedEvent(login.Username))
+ } else {
+ _ = s.SendEvent(NewLoginTfaRequestedEvent(login.Username))
+ }
+
case auth.PasswordMode == proton.TwoPasswordMode:
_ = s.SendEvent(NewLoginTwoPasswordsRequestedEvent(login.Username))
@@ -582,6 +600,17 @@ func (s *Service) Login2Passwords(_ context.Context, login *LoginRequest) (*empt
return &emptypb.Empty{}, nil
}
+func (s *Service) FidoAssertionAbort(_ context.Context, loginAbort *LoginAbortRequest) (*emptypb.Empty, error) {
+ s.log.WithField("username", loginAbort.Username).Debug("FidoAssertionAbort")
+
+ go func() {
+ defer async.HandlePanic(s.panicHandler)
+ s.fidoManager.Cancel()
+ }()
+
+ return &emptypb.Empty{}, nil
+}
+
func (s *Service) LoginAbort(_ context.Context, loginAbort *LoginAbortRequest) (*emptypb.Empty, error) {
s.log.WithField("username", loginAbort.Username).Debug("LoginAbort")
diff --git a/internal/unleash/service.go b/internal/unleash/service.go
index 3046d73a..e432507c 100644
--- a/internal/unleash/service.go
+++ b/internal/unleash/service.go
@@ -47,6 +47,7 @@ const (
InternalLabelConflictResolverDisabled = "InboxBridgeUnexpectedFoldersLabelsStartupFixupDisabled"
InternalLabelConflictNonEmptyMailboxDeletion = "InboxBridgeUnknownNonEmptyMailboxDeletion"
LinuxVaultPreferredKeychainNotAvailableRetryDisabled = "InboxBridgeLinuxVaultPreferredKeychainNotAvailableRetryDisabled"
+ InboxBridgeU2FLoginEnabled = "InboxBridgeU2FLogin"
)
type FeatureFlagValueProvider interface {
diff --git a/tests/ctx_bridge_test.go b/tests/ctx_bridge_test.go
index b0752c41..a304319a 100644
--- a/tests/ctx_bridge_test.go
+++ b/tests/ctx_bridge_test.go
@@ -306,8 +306,7 @@ func (t *testCtx) initFrontendClient() error {
target = fmt.Sprintf("%v:%d", constants.Host, cfg.Port)
}
- conn, err := grpc.DialContext(
- context.Background(),
+ conn, err := grpc.NewClient(
target,
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{RootCAs: cp, ServerName: "127.0.0.1"})),
grpc.WithUnaryInterceptor(func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {