diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 7ee6f511..fbae0bec 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -116,20 +116,6 @@ builds: binary: plugins/failtoban tags: - full - - id: plugin_totp - env: - - CGO_ENABLED=0 - goos: - - linux - - windows - # - darwin - goarch: - - amd64 - - arm64 - main: ./plugin/totp - binary: plugins/totp - tags: - - full archives: - format: tar.gz @@ -154,8 +140,6 @@ archives: - plugin_failtoban - plugin_docker - plugin_kubernetes - - plugin_workingdirbykey - - plugin_totp dockers: - image_templates: - "farmer1992/sshpiperd:v{{ .Version }}-amd64" @@ -271,8 +255,6 @@ snapcrafts: - plugin_yaml - plugin_fixed - plugin_failtoban - - plugin_workingdirbykey - - plugin_totp name: sshpiperd name_template: "sshpiperd_{{ .Version }}_{{ .Os }}_{{ .Arch }}" summary: The missing reverse proxy for ssh scp diff --git a/README.md b/README.md index ba501c89..d222c59c 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,6 @@ Plugin list * [yaml](plugin/yaml/) 🔀: config routing with a single yaml file. * [docker](plugin/docker/) 🔀: pipe into docker containers. * [kubernetes](plugin/kubernetes/) 🔀: manage pipes via Kubernetes CRD. - * [totp](plugin/totp/) 🔒: TOTP 2FA plugin. compatible with all [RFC6238](https://datatracker.ietf.org/doc/html/rfc6238) authenticator, for example: `google authenticator`, `azure authenticator`. * [azdevicecode](https://github.com/tg123/sshpiper-plugins/tree/main/azdevicecode) 🔒: ask user to enter [azure device code](https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-device-code) before login * [fixed](plugin/fixed/) 🔀: fixed targeting the dummy sshd server * [simplemath](plugin/simplemath/) 🔒: ask for very simple math question before login, demo purpose diff --git a/cmd/sshpiperd/internal/plugin/grpc.go b/cmd/sshpiperd/internal/plugin/grpc.go index 9997bbcd..d31c9c0e 100644 --- a/cmd/sshpiperd/internal/plugin/grpc.go +++ b/cmd/sshpiperd/internal/plugin/grpc.go @@ -56,9 +56,6 @@ func (g *GrpcPlugin) InstallPiperConfig(config *GrpcPluginConfig) error { return err } - // config.NextAuthMethods = g.NextAuthMethodsLocal - // config.UpstreamAuthFailureCallback = g.UpstreamAuthFailureCallbackLocal - config.CreateChallengeContext = func(conn ssh.ConnMetadata) (ssh.ChallengeContext, error) { ctx, err := g.CreateChallengeContext(conn) if err != nil { @@ -191,18 +188,6 @@ func (g *GrpcPlugin) NewConnection(meta *connMeta) error { return nil } -func (g *GrpcPlugin) NextAuthMethodsLocal(conn ssh.ConnMetadata, challengeCtx ssh.ChallengeContext) ([]string, error) { - var allow []string - - for k, v := range g.allowedMethod { - if v { - allow = append(allow, k) - } - } - - return allow, nil -} - func toMeta(challengeCtx ssh.ChallengeContext, conn ssh.ConnMetadata) *libplugin.ConnMeta { switch meta := challengeCtx.(type) { case *connMeta: @@ -284,6 +269,19 @@ func (g *GrpcPlugin) createUpstream(conn ssh.ConnMetadata, challengeCtx ssh.Chal meta := toMeta(challengeCtx, conn) + // ugly way to support meta set + if retry := upstream.GetRetryCurrentPlugin(); retry != nil { + if meta.Metadata == nil { + meta.Metadata = make(map[string]string) + } + + for k, v := range retry.Meta { + meta.Metadata[k] = v + } + + return nil, fmt.Errorf("client retry requested") + } + port := upstream.Port if port <= 0 { port = 22 diff --git a/libplugin/plugin.pb.go b/libplugin/plugin.pb.go index 42f7e2eb..e0aa1250 100644 --- a/libplugin/plugin.pb.go +++ b/libplugin/plugin.pb.go @@ -159,6 +159,7 @@ type Upstream struct { // *Upstream_PrivateKey // *Upstream_RemoteSigner // *Upstream_NextPlugin + // *Upstream_RetryCurrentPlugin Auth isUpstream_Auth `protobuf_oneof:"auth"` } @@ -264,6 +265,13 @@ func (x *Upstream) GetNextPlugin() *UpstreamNextPluginAuth { return nil } +func (x *Upstream) GetRetryCurrentPlugin() *UpstreamRetryCurrentPluginAuth { + if x, ok := x.GetAuth().(*Upstream_RetryCurrentPlugin); ok { + return x.RetryCurrentPlugin + } + return nil +} + type isUpstream_Auth interface { isUpstream_Auth() } @@ -288,6 +296,10 @@ type Upstream_NextPlugin struct { NextPlugin *UpstreamNextPluginAuth `protobuf:"bytes,200,opt,name=next_plugin,json=nextPlugin,proto3,oneof"` } +type Upstream_RetryCurrentPlugin struct { + RetryCurrentPlugin *UpstreamRetryCurrentPluginAuth `protobuf:"bytes,201,opt,name=retry_current_plugin,json=retryCurrentPlugin,proto3,oneof"` +} + func (*Upstream_None) isUpstream_Auth() {} func (*Upstream_Password) isUpstream_Auth() {} @@ -298,6 +310,8 @@ func (*Upstream_RemoteSigner) isUpstream_Auth() {} func (*Upstream_NextPlugin) isUpstream_Auth() {} +func (*Upstream_RetryCurrentPlugin) isUpstream_Auth() {} + type UpstreamNoneAuth struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -532,6 +546,53 @@ func (x *UpstreamNextPluginAuth) GetMeta() map[string]string { return nil } +type UpstreamRetryCurrentPluginAuth struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Meta map[string]string `protobuf:"bytes,1,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *UpstreamRetryCurrentPluginAuth) Reset() { + *x = UpstreamRetryCurrentPluginAuth{} + if protoimpl.UnsafeEnabled { + mi := &file_plugin_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpstreamRetryCurrentPluginAuth) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpstreamRetryCurrentPluginAuth) ProtoMessage() {} + +func (x *UpstreamRetryCurrentPluginAuth) ProtoReflect() protoreflect.Message { + mi := &file_plugin_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpstreamRetryCurrentPluginAuth.ProtoReflect.Descriptor instead. +func (*UpstreamRetryCurrentPluginAuth) Descriptor() ([]byte, []int) { + return file_plugin_proto_rawDescGZIP(), []int{7} +} + +func (x *UpstreamRetryCurrentPluginAuth) GetMeta() map[string]string { + if x != nil { + return x.Meta + } + return nil +} + type StartLogRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -545,7 +606,7 @@ type StartLogRequest struct { func (x *StartLogRequest) Reset() { *x = StartLogRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[7] + mi := &file_plugin_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -558,7 +619,7 @@ func (x *StartLogRequest) String() string { func (*StartLogRequest) ProtoMessage() {} func (x *StartLogRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[7] + mi := &file_plugin_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -571,7 +632,7 @@ func (x *StartLogRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartLogRequest.ProtoReflect.Descriptor instead. func (*StartLogRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{7} + return file_plugin_proto_rawDescGZIP(), []int{8} } func (x *StartLogRequest) GetUniqId() string { @@ -606,7 +667,7 @@ type Log struct { func (x *Log) Reset() { *x = Log{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[8] + mi := &file_plugin_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -619,7 +680,7 @@ func (x *Log) String() string { func (*Log) ProtoMessage() {} func (x *Log) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[8] + mi := &file_plugin_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -632,7 +693,7 @@ func (x *Log) ProtoReflect() protoreflect.Message { // Deprecated: Use Log.ProtoReflect.Descriptor instead. func (*Log) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{8} + return file_plugin_proto_rawDescGZIP(), []int{9} } func (x *Log) GetMessage() string { @@ -651,7 +712,7 @@ type ListCallbackRequest struct { func (x *ListCallbackRequest) Reset() { *x = ListCallbackRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[9] + mi := &file_plugin_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -664,7 +725,7 @@ func (x *ListCallbackRequest) String() string { func (*ListCallbackRequest) ProtoMessage() {} func (x *ListCallbackRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[9] + mi := &file_plugin_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -677,7 +738,7 @@ func (x *ListCallbackRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListCallbackRequest.ProtoReflect.Descriptor instead. func (*ListCallbackRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{9} + return file_plugin_proto_rawDescGZIP(), []int{10} } type ListCallbackResponse struct { @@ -691,7 +752,7 @@ type ListCallbackResponse struct { func (x *ListCallbackResponse) Reset() { *x = ListCallbackResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[10] + mi := &file_plugin_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -704,7 +765,7 @@ func (x *ListCallbackResponse) String() string { func (*ListCallbackResponse) ProtoMessage() {} func (x *ListCallbackResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[10] + mi := &file_plugin_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -717,7 +778,7 @@ func (x *ListCallbackResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListCallbackResponse.ProtoReflect.Descriptor instead. func (*ListCallbackResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{10} + return file_plugin_proto_rawDescGZIP(), []int{11} } func (x *ListCallbackResponse) GetCallbacks() []string { @@ -738,7 +799,7 @@ type NewConnectionRequest struct { func (x *NewConnectionRequest) Reset() { *x = NewConnectionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[11] + mi := &file_plugin_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -751,7 +812,7 @@ func (x *NewConnectionRequest) String() string { func (*NewConnectionRequest) ProtoMessage() {} func (x *NewConnectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[11] + mi := &file_plugin_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -764,7 +825,7 @@ func (x *NewConnectionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NewConnectionRequest.ProtoReflect.Descriptor instead. func (*NewConnectionRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{11} + return file_plugin_proto_rawDescGZIP(), []int{12} } func (x *NewConnectionRequest) GetMeta() *ConnMeta { @@ -783,7 +844,7 @@ type NewConnectionResponse struct { func (x *NewConnectionResponse) Reset() { *x = NewConnectionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[12] + mi := &file_plugin_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -796,7 +857,7 @@ func (x *NewConnectionResponse) String() string { func (*NewConnectionResponse) ProtoMessage() {} func (x *NewConnectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[12] + mi := &file_plugin_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -809,7 +870,7 @@ func (x *NewConnectionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NewConnectionResponse.ProtoReflect.Descriptor instead. func (*NewConnectionResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{12} + return file_plugin_proto_rawDescGZIP(), []int{13} } type NextAuthMethodsRequest struct { @@ -823,7 +884,7 @@ type NextAuthMethodsRequest struct { func (x *NextAuthMethodsRequest) Reset() { *x = NextAuthMethodsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[13] + mi := &file_plugin_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -836,7 +897,7 @@ func (x *NextAuthMethodsRequest) String() string { func (*NextAuthMethodsRequest) ProtoMessage() {} func (x *NextAuthMethodsRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[13] + mi := &file_plugin_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -849,7 +910,7 @@ func (x *NextAuthMethodsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NextAuthMethodsRequest.ProtoReflect.Descriptor instead. func (*NextAuthMethodsRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{13} + return file_plugin_proto_rawDescGZIP(), []int{14} } func (x *NextAuthMethodsRequest) GetMeta() *ConnMeta { @@ -870,7 +931,7 @@ type NextAuthMethodsResponse struct { func (x *NextAuthMethodsResponse) Reset() { *x = NextAuthMethodsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[14] + mi := &file_plugin_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -883,7 +944,7 @@ func (x *NextAuthMethodsResponse) String() string { func (*NextAuthMethodsResponse) ProtoMessage() {} func (x *NextAuthMethodsResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[14] + mi := &file_plugin_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -896,7 +957,7 @@ func (x *NextAuthMethodsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NextAuthMethodsResponse.ProtoReflect.Descriptor instead. func (*NextAuthMethodsResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{14} + return file_plugin_proto_rawDescGZIP(), []int{15} } func (x *NextAuthMethodsResponse) GetMethods() []AuthMethod { @@ -917,7 +978,7 @@ type NoneAuthRequest struct { func (x *NoneAuthRequest) Reset() { *x = NoneAuthRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[15] + mi := &file_plugin_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -930,7 +991,7 @@ func (x *NoneAuthRequest) String() string { func (*NoneAuthRequest) ProtoMessage() {} func (x *NoneAuthRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[15] + mi := &file_plugin_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -943,7 +1004,7 @@ func (x *NoneAuthRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NoneAuthRequest.ProtoReflect.Descriptor instead. func (*NoneAuthRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{15} + return file_plugin_proto_rawDescGZIP(), []int{16} } func (x *NoneAuthRequest) GetMeta() *ConnMeta { @@ -964,7 +1025,7 @@ type NoneAuthResponse struct { func (x *NoneAuthResponse) Reset() { *x = NoneAuthResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[16] + mi := &file_plugin_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -977,7 +1038,7 @@ func (x *NoneAuthResponse) String() string { func (*NoneAuthResponse) ProtoMessage() {} func (x *NoneAuthResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[16] + mi := &file_plugin_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -990,7 +1051,7 @@ func (x *NoneAuthResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NoneAuthResponse.ProtoReflect.Descriptor instead. func (*NoneAuthResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{16} + return file_plugin_proto_rawDescGZIP(), []int{17} } func (x *NoneAuthResponse) GetUpstream() *Upstream { @@ -1012,7 +1073,7 @@ type PasswordAuthRequest struct { func (x *PasswordAuthRequest) Reset() { *x = PasswordAuthRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[17] + mi := &file_plugin_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1025,7 +1086,7 @@ func (x *PasswordAuthRequest) String() string { func (*PasswordAuthRequest) ProtoMessage() {} func (x *PasswordAuthRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[17] + mi := &file_plugin_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1038,7 +1099,7 @@ func (x *PasswordAuthRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PasswordAuthRequest.ProtoReflect.Descriptor instead. func (*PasswordAuthRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{17} + return file_plugin_proto_rawDescGZIP(), []int{18} } func (x *PasswordAuthRequest) GetMeta() *ConnMeta { @@ -1066,7 +1127,7 @@ type PasswordAuthResponse struct { func (x *PasswordAuthResponse) Reset() { *x = PasswordAuthResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[18] + mi := &file_plugin_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1079,7 +1140,7 @@ func (x *PasswordAuthResponse) String() string { func (*PasswordAuthResponse) ProtoMessage() {} func (x *PasswordAuthResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[18] + mi := &file_plugin_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1092,7 +1153,7 @@ func (x *PasswordAuthResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PasswordAuthResponse.ProtoReflect.Descriptor instead. func (*PasswordAuthResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{18} + return file_plugin_proto_rawDescGZIP(), []int{19} } func (x *PasswordAuthResponse) GetUpstream() *Upstream { @@ -1114,7 +1175,7 @@ type PublicKeyAuthRequest struct { func (x *PublicKeyAuthRequest) Reset() { *x = PublicKeyAuthRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[19] + mi := &file_plugin_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1127,7 +1188,7 @@ func (x *PublicKeyAuthRequest) String() string { func (*PublicKeyAuthRequest) ProtoMessage() {} func (x *PublicKeyAuthRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[19] + mi := &file_plugin_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1140,7 +1201,7 @@ func (x *PublicKeyAuthRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PublicKeyAuthRequest.ProtoReflect.Descriptor instead. func (*PublicKeyAuthRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{19} + return file_plugin_proto_rawDescGZIP(), []int{20} } func (x *PublicKeyAuthRequest) GetMeta() *ConnMeta { @@ -1168,7 +1229,7 @@ type PublicKeyAuthResponse struct { func (x *PublicKeyAuthResponse) Reset() { *x = PublicKeyAuthResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[20] + mi := &file_plugin_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1181,7 +1242,7 @@ func (x *PublicKeyAuthResponse) String() string { func (*PublicKeyAuthResponse) ProtoMessage() {} func (x *PublicKeyAuthResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[20] + mi := &file_plugin_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1194,7 +1255,7 @@ func (x *PublicKeyAuthResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PublicKeyAuthResponse.ProtoReflect.Descriptor instead. func (*PublicKeyAuthResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{20} + return file_plugin_proto_rawDescGZIP(), []int{21} } func (x *PublicKeyAuthResponse) GetUpstream() *Upstream { @@ -1215,7 +1276,7 @@ type KeyboardInteractiveUserResponse struct { func (x *KeyboardInteractiveUserResponse) Reset() { *x = KeyboardInteractiveUserResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[21] + mi := &file_plugin_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1228,7 +1289,7 @@ func (x *KeyboardInteractiveUserResponse) String() string { func (*KeyboardInteractiveUserResponse) ProtoMessage() {} func (x *KeyboardInteractiveUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[21] + mi := &file_plugin_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1241,7 +1302,7 @@ func (x *KeyboardInteractiveUserResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyboardInteractiveUserResponse.ProtoReflect.Descriptor instead. func (*KeyboardInteractiveUserResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{21} + return file_plugin_proto_rawDescGZIP(), []int{22} } func (x *KeyboardInteractiveUserResponse) GetAnswers() []string { @@ -1264,7 +1325,7 @@ type KeyboardInteractivePromptRequest struct { func (x *KeyboardInteractivePromptRequest) Reset() { *x = KeyboardInteractivePromptRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[22] + mi := &file_plugin_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1277,7 +1338,7 @@ func (x *KeyboardInteractivePromptRequest) String() string { func (*KeyboardInteractivePromptRequest) ProtoMessage() {} func (x *KeyboardInteractivePromptRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[22] + mi := &file_plugin_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1290,7 +1351,7 @@ func (x *KeyboardInteractivePromptRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyboardInteractivePromptRequest.ProtoReflect.Descriptor instead. func (*KeyboardInteractivePromptRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{22} + return file_plugin_proto_rawDescGZIP(), []int{23} } func (x *KeyboardInteractivePromptRequest) GetName() string { @@ -1323,7 +1384,7 @@ type KeyboardInteractiveMetaRequest struct { func (x *KeyboardInteractiveMetaRequest) Reset() { *x = KeyboardInteractiveMetaRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[23] + mi := &file_plugin_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1336,7 +1397,7 @@ func (x *KeyboardInteractiveMetaRequest) String() string { func (*KeyboardInteractiveMetaRequest) ProtoMessage() {} func (x *KeyboardInteractiveMetaRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[23] + mi := &file_plugin_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1349,7 +1410,7 @@ func (x *KeyboardInteractiveMetaRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyboardInteractiveMetaRequest.ProtoReflect.Descriptor instead. func (*KeyboardInteractiveMetaRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{23} + return file_plugin_proto_rawDescGZIP(), []int{24} } type KeyboardInteractiveMetaResponse struct { @@ -1363,7 +1424,7 @@ type KeyboardInteractiveMetaResponse struct { func (x *KeyboardInteractiveMetaResponse) Reset() { *x = KeyboardInteractiveMetaResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[24] + mi := &file_plugin_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1376,7 +1437,7 @@ func (x *KeyboardInteractiveMetaResponse) String() string { func (*KeyboardInteractiveMetaResponse) ProtoMessage() {} func (x *KeyboardInteractiveMetaResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[24] + mi := &file_plugin_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1389,7 +1450,7 @@ func (x *KeyboardInteractiveMetaResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyboardInteractiveMetaResponse.ProtoReflect.Descriptor instead. func (*KeyboardInteractiveMetaResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{24} + return file_plugin_proto_rawDescGZIP(), []int{25} } func (x *KeyboardInteractiveMetaResponse) GetMeta() *ConnMeta { @@ -1410,7 +1471,7 @@ type KeyboardInteractiveFinishRequest struct { func (x *KeyboardInteractiveFinishRequest) Reset() { *x = KeyboardInteractiveFinishRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[25] + mi := &file_plugin_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1423,7 +1484,7 @@ func (x *KeyboardInteractiveFinishRequest) String() string { func (*KeyboardInteractiveFinishRequest) ProtoMessage() {} func (x *KeyboardInteractiveFinishRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[25] + mi := &file_plugin_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1436,7 +1497,7 @@ func (x *KeyboardInteractiveFinishRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyboardInteractiveFinishRequest.ProtoReflect.Descriptor instead. func (*KeyboardInteractiveFinishRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{25} + return file_plugin_proto_rawDescGZIP(), []int{26} } func (x *KeyboardInteractiveFinishRequest) GetUpstream() *Upstream { @@ -1464,7 +1525,7 @@ type KeyboardInteractiveAuthMessage struct { func (x *KeyboardInteractiveAuthMessage) Reset() { *x = KeyboardInteractiveAuthMessage{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[26] + mi := &file_plugin_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1477,7 +1538,7 @@ func (x *KeyboardInteractiveAuthMessage) String() string { func (*KeyboardInteractiveAuthMessage) ProtoMessage() {} func (x *KeyboardInteractiveAuthMessage) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[26] + mi := &file_plugin_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1490,7 +1551,7 @@ func (x *KeyboardInteractiveAuthMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyboardInteractiveAuthMessage.ProtoReflect.Descriptor instead. func (*KeyboardInteractiveAuthMessage) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{26} + return file_plugin_proto_rawDescGZIP(), []int{27} } func (m *KeyboardInteractiveAuthMessage) GetMessage() isKeyboardInteractiveAuthMessage_Message { @@ -1583,7 +1644,7 @@ type UpstreamAuthFailureNoticeRequest struct { func (x *UpstreamAuthFailureNoticeRequest) Reset() { *x = UpstreamAuthFailureNoticeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[27] + mi := &file_plugin_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1596,7 +1657,7 @@ func (x *UpstreamAuthFailureNoticeRequest) String() string { func (*UpstreamAuthFailureNoticeRequest) ProtoMessage() {} func (x *UpstreamAuthFailureNoticeRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[27] + mi := &file_plugin_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1609,7 +1670,7 @@ func (x *UpstreamAuthFailureNoticeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpstreamAuthFailureNoticeRequest.ProtoReflect.Descriptor instead. func (*UpstreamAuthFailureNoticeRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{27} + return file_plugin_proto_rawDescGZIP(), []int{28} } func (x *UpstreamAuthFailureNoticeRequest) GetMeta() *ConnMeta { @@ -1649,7 +1710,7 @@ type UpstreamAuthFailureNoticeResponse struct { func (x *UpstreamAuthFailureNoticeResponse) Reset() { *x = UpstreamAuthFailureNoticeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[28] + mi := &file_plugin_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1662,7 +1723,7 @@ func (x *UpstreamAuthFailureNoticeResponse) String() string { func (*UpstreamAuthFailureNoticeResponse) ProtoMessage() {} func (x *UpstreamAuthFailureNoticeResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[28] + mi := &file_plugin_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1675,7 +1736,7 @@ func (x *UpstreamAuthFailureNoticeResponse) ProtoReflect() protoreflect.Message // Deprecated: Use UpstreamAuthFailureNoticeResponse.ProtoReflect.Descriptor instead. func (*UpstreamAuthFailureNoticeResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{28} + return file_plugin_proto_rawDescGZIP(), []int{29} } type BannerRequest struct { @@ -1689,7 +1750,7 @@ type BannerRequest struct { func (x *BannerRequest) Reset() { *x = BannerRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[29] + mi := &file_plugin_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1702,7 +1763,7 @@ func (x *BannerRequest) String() string { func (*BannerRequest) ProtoMessage() {} func (x *BannerRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[29] + mi := &file_plugin_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1715,7 +1776,7 @@ func (x *BannerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BannerRequest.ProtoReflect.Descriptor instead. func (*BannerRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{29} + return file_plugin_proto_rawDescGZIP(), []int{30} } func (x *BannerRequest) GetMeta() *ConnMeta { @@ -1736,7 +1797,7 @@ type BannerResponse struct { func (x *BannerResponse) Reset() { *x = BannerResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[30] + mi := &file_plugin_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1749,7 +1810,7 @@ func (x *BannerResponse) String() string { func (*BannerResponse) ProtoMessage() {} func (x *BannerResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[30] + mi := &file_plugin_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1762,7 +1823,7 @@ func (x *BannerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BannerResponse.ProtoReflect.Descriptor instead. func (*BannerResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{30} + return file_plugin_proto_rawDescGZIP(), []int{31} } func (x *BannerResponse) GetMessage() string { @@ -1786,7 +1847,7 @@ type VerifyHostKeyRequest struct { func (x *VerifyHostKeyRequest) Reset() { *x = VerifyHostKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[31] + mi := &file_plugin_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1799,7 +1860,7 @@ func (x *VerifyHostKeyRequest) String() string { func (*VerifyHostKeyRequest) ProtoMessage() {} func (x *VerifyHostKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[31] + mi := &file_plugin_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1812,7 +1873,7 @@ func (x *VerifyHostKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyHostKeyRequest.ProtoReflect.Descriptor instead. func (*VerifyHostKeyRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{31} + return file_plugin_proto_rawDescGZIP(), []int{32} } func (x *VerifyHostKeyRequest) GetMeta() *ConnMeta { @@ -1854,7 +1915,7 @@ type VerifyHostKeyResponse struct { func (x *VerifyHostKeyResponse) Reset() { *x = VerifyHostKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[32] + mi := &file_plugin_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1867,7 +1928,7 @@ func (x *VerifyHostKeyResponse) String() string { func (*VerifyHostKeyResponse) ProtoMessage() {} func (x *VerifyHostKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[32] + mi := &file_plugin_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1880,7 +1941,7 @@ func (x *VerifyHostKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyHostKeyResponse.ProtoReflect.Descriptor instead. func (*VerifyHostKeyResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{32} + return file_plugin_proto_rawDescGZIP(), []int{33} } func (x *VerifyHostKeyResponse) GetVerified() bool { @@ -1901,7 +1962,7 @@ type PipeStartNoticeRequest struct { func (x *PipeStartNoticeRequest) Reset() { *x = PipeStartNoticeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[33] + mi := &file_plugin_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1914,7 +1975,7 @@ func (x *PipeStartNoticeRequest) String() string { func (*PipeStartNoticeRequest) ProtoMessage() {} func (x *PipeStartNoticeRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[33] + mi := &file_plugin_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1927,7 +1988,7 @@ func (x *PipeStartNoticeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PipeStartNoticeRequest.ProtoReflect.Descriptor instead. func (*PipeStartNoticeRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{33} + return file_plugin_proto_rawDescGZIP(), []int{34} } func (x *PipeStartNoticeRequest) GetMeta() *ConnMeta { @@ -1946,7 +2007,7 @@ type PipeStartNoticeResponse struct { func (x *PipeStartNoticeResponse) Reset() { *x = PipeStartNoticeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[34] + mi := &file_plugin_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1959,7 +2020,7 @@ func (x *PipeStartNoticeResponse) String() string { func (*PipeStartNoticeResponse) ProtoMessage() {} func (x *PipeStartNoticeResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[34] + mi := &file_plugin_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1972,7 +2033,7 @@ func (x *PipeStartNoticeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PipeStartNoticeResponse.ProtoReflect.Descriptor instead. func (*PipeStartNoticeResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{34} + return file_plugin_proto_rawDescGZIP(), []int{35} } type PipeErrorNoticeRequest struct { @@ -1987,7 +2048,7 @@ type PipeErrorNoticeRequest struct { func (x *PipeErrorNoticeRequest) Reset() { *x = PipeErrorNoticeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[35] + mi := &file_plugin_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2000,7 +2061,7 @@ func (x *PipeErrorNoticeRequest) String() string { func (*PipeErrorNoticeRequest) ProtoMessage() {} func (x *PipeErrorNoticeRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[35] + mi := &file_plugin_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2013,7 +2074,7 @@ func (x *PipeErrorNoticeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PipeErrorNoticeRequest.ProtoReflect.Descriptor instead. func (*PipeErrorNoticeRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{35} + return file_plugin_proto_rawDescGZIP(), []int{36} } func (x *PipeErrorNoticeRequest) GetMeta() *ConnMeta { @@ -2039,7 +2100,7 @@ type PipeErrorNoticeResponse struct { func (x *PipeErrorNoticeResponse) Reset() { *x = PipeErrorNoticeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[36] + mi := &file_plugin_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2052,7 +2113,7 @@ func (x *PipeErrorNoticeResponse) String() string { func (*PipeErrorNoticeResponse) ProtoMessage() {} func (x *PipeErrorNoticeResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[36] + mi := &file_plugin_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2065,7 +2126,7 @@ func (x *PipeErrorNoticeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PipeErrorNoticeResponse.ProtoReflect.Descriptor instead. func (*PipeErrorNoticeResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{36} + return file_plugin_proto_rawDescGZIP(), []int{37} } type PipeCreateErrorNoticeRequest struct { @@ -2080,7 +2141,7 @@ type PipeCreateErrorNoticeRequest struct { func (x *PipeCreateErrorNoticeRequest) Reset() { *x = PipeCreateErrorNoticeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[37] + mi := &file_plugin_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2093,7 +2154,7 @@ func (x *PipeCreateErrorNoticeRequest) String() string { func (*PipeCreateErrorNoticeRequest) ProtoMessage() {} func (x *PipeCreateErrorNoticeRequest) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[37] + mi := &file_plugin_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2106,7 +2167,7 @@ func (x *PipeCreateErrorNoticeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PipeCreateErrorNoticeRequest.ProtoReflect.Descriptor instead. func (*PipeCreateErrorNoticeRequest) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{37} + return file_plugin_proto_rawDescGZIP(), []int{38} } func (x *PipeCreateErrorNoticeRequest) GetFromAddr() string { @@ -2132,7 +2193,7 @@ type PipeCreateErrorNoticeResponse struct { func (x *PipeCreateErrorNoticeResponse) Reset() { *x = PipeCreateErrorNoticeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[38] + mi := &file_plugin_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2145,7 +2206,7 @@ func (x *PipeCreateErrorNoticeResponse) String() string { func (*PipeCreateErrorNoticeResponse) ProtoMessage() {} func (x *PipeCreateErrorNoticeResponse) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[38] + mi := &file_plugin_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2158,7 +2219,7 @@ func (x *PipeCreateErrorNoticeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PipeCreateErrorNoticeResponse.ProtoReflect.Descriptor instead. func (*PipeCreateErrorNoticeResponse) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{38} + return file_plugin_proto_rawDescGZIP(), []int{39} } type KeyboardInteractivePromptRequest_Question struct { @@ -2173,7 +2234,7 @@ type KeyboardInteractivePromptRequest_Question struct { func (x *KeyboardInteractivePromptRequest_Question) Reset() { *x = KeyboardInteractivePromptRequest_Question{} if protoimpl.UnsafeEnabled { - mi := &file_plugin_proto_msgTypes[41] + mi := &file_plugin_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2186,7 +2247,7 @@ func (x *KeyboardInteractivePromptRequest_Question) String() string { func (*KeyboardInteractivePromptRequest_Question) ProtoMessage() {} func (x *KeyboardInteractivePromptRequest_Question) ProtoReflect() protoreflect.Message { - mi := &file_plugin_proto_msgTypes[41] + mi := &file_plugin_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2199,7 +2260,7 @@ func (x *KeyboardInteractivePromptRequest_Question) ProtoReflect() protoreflect. // Deprecated: Use KeyboardInteractivePromptRequest_Question.ProtoReflect.Descriptor instead. func (*KeyboardInteractivePromptRequest_Question) Descriptor() ([]byte, []int) { - return file_plugin_proto_rawDescGZIP(), []int{22, 0} + return file_plugin_proto_rawDescGZIP(), []int{23, 0} } func (x *KeyboardInteractivePromptRequest_Question) GetText() string { @@ -2234,7 +2295,7 @@ var file_plugin_proto_rawDesc = []byte{ 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xca, 0x03, 0x0a, 0x08, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xaa, 0x04, 0x0a, 0x08, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, @@ -2262,7 +2323,13 @@ var file_plugin_proto_rawDesc = []byte{ 0x69, 0x6e, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x48, 0x00, 0x52, 0x0a, - 0x6e, 0x65, 0x78, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x61, 0x75, + 0x6e, 0x65, 0x78, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x5e, 0x0a, 0x14, 0x72, 0x65, + 0x74, 0x72, 0x79, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6c, 0x69, 0x62, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, + 0x74, 0x72, 0x79, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x41, 0x75, 0x74, 0x68, 0x48, 0x00, 0x52, 0x12, 0x72, 0x65, 0x74, 0x72, 0x79, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x22, 0x12, 0x0a, 0x10, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x6f, 0x6e, 0x65, 0x41, 0x75, 0x74, 0x68, 0x22, 0x32, 0x0a, 0x14, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x75, 0x74, 0x68, 0x12, 0x1a, @@ -2285,262 +2352,272 @@ var file_plugin_proto_rawDesc = []byte{ 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x52, - 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x71, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x74, - 0x74, 0x79, 0x22, 0x1f, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, - 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x34, 0x0a, 0x14, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, - 0x22, 0x3f, 0x0a, 0x14, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x22, 0x17, 0x0a, 0x15, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x0a, 0x16, 0x4e, 0x65, - 0x78, 0x74, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, - 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x4a, 0x0a, - 0x17, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x62, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x52, 0x07, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x22, 0x3a, 0x0a, 0x0f, 0x4e, 0x6f, 0x6e, - 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x43, 0x0a, 0x10, 0x4e, 0x6f, 0x6e, 0x65, 0x41, 0x75, 0x74, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x75, 0x70, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, - 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x52, 0x08, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x5a, 0x0a, 0x13, 0x50, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa2, + 0x01, 0x0a, 0x1e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x74, 0x72, 0x79, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x75, 0x74, + 0x68, 0x12, 0x47, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x52, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4c, 0x6f, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x71, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x49, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x03, 0x74, 0x74, 0x79, 0x22, 0x1f, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x34, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x62, + 0x61, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x6c, 0x6c, + 0x62, 0x61, 0x63, 0x6b, 0x73, 0x22, 0x3f, 0x0a, 0x14, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, + 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, + 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, + 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x17, 0x0a, 0x15, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x41, 0x0a, 0x16, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, + 0x74, 0x61, 0x22, 0x4a, 0x0a, 0x17, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, + 0x07, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x15, + 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x22, 0x3a, + 0x0a, 0x0f, 0x4e, 0x6f, 0x6e, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 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, 0x22, 0x47, 0x0a, 0x14, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, + 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x43, 0x0a, 0x10, 0x4e, 0x6f, + 0x6e, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x08, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, - 0x5e, 0x0a, 0x14, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, + 0x5a, 0x0a, 0x13, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x75, 0x74, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 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, 0x22, 0x47, 0x0a, 0x14, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x08, 0x75, 0x70, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x22, 0x5e, 0x0a, 0x14, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, + 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, + 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x22, 0x48, 0x0a, 0x15, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, + 0x08, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x52, 0x08, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x3b, + 0x0a, 0x1f, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x73, 0x22, 0xe0, 0x01, 0x0a, 0x20, + 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6c, 0x69, 0x62, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x09, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x32, 0x0a, 0x08, 0x51, 0x75, + 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x63, + 0x68, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x65, 0x63, 0x68, 0x6f, 0x22, 0x20, + 0x0a, 0x1e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x4a, 0x0a, 0x1f, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, + 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x53, 0x0a, 0x20, + 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2f, 0x0a, 0x08, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, + 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x08, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x22, 0xcd, 0x03, 0x0a, 0x1e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x54, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, + 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6d, + 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x72, 0x6f, + 0x6d, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x0d, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4b, 0x65, + 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x0c, 0x75, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, + 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, + 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, + 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x48, 0x00, 0x52, 0x0c, 0x6d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x54, 0x0a, 0x0e, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0xb9, 0x01, 0x0a, 0x20, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x75, + 0x74, 0x68, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, + 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3e, 0x0a, + 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x0e, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x22, 0x23, 0x0a, + 0x21, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x46, 0x61, 0x69, + 0x6c, 0x75, 0x72, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x38, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, + 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x2a, 0x0a, 0x0e, + 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x14, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, + 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, + 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x33, 0x0a, 0x15, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x22, 0x41, 0x0a, + 0x16, 0x50, 0x69, 0x70, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, - 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, - 0x48, 0x0a, 0x15, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x75, 0x70, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, - 0x08, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x3b, 0x0a, 0x1f, 0x4b, 0x65, 0x79, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x61, - 0x6e, 0x73, 0x77, 0x65, 0x72, 0x73, 0x22, 0xe0, 0x01, 0x0a, 0x20, 0x4b, 0x65, 0x79, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x72, - 0x6f, 0x6d, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x52, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x32, 0x0a, 0x08, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x63, 0x68, 0x6f, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x04, 0x65, 0x63, 0x68, 0x6f, 0x22, 0x20, 0x0a, 0x1e, 0x4b, 0x65, 0x79, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4a, 0x0a, 0x1f, 0x4b, - 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, - 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x53, 0x0a, 0x20, 0x4b, 0x65, 0x79, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x08, 0x75, - 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x52, 0x08, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0xcd, 0x03, 0x0a, - 0x1e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x54, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6c, - 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x61, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x22, 0x19, 0x0a, 0x17, 0x50, 0x69, 0x70, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x0a, 0x16, 0x50, + 0x69, 0x70, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, + 0x43, 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x19, 0x0a, 0x17, 0x50, 0x69, 0x70, 0x65, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x51, 0x0a, 0x1c, 0x50, 0x69, 0x70, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1b, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x41, 0x64, 0x64, 0x72, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x1f, 0x0a, 0x1d, 0x50, 0x69, 0x70, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2a, 0x4d, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, + 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x42, + 0x4c, 0x49, 0x43, 0x4b, 0x45, 0x59, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x45, 0x59, 0x42, + 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, + 0x10, 0x03, 0x32, 0xec, 0x09, 0x0a, 0x0e, 0x53, 0x73, 0x68, 0x50, 0x69, 0x70, 0x65, 0x72, 0x50, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x36, 0x0a, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x1a, 0x2e, + 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4c, + 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6c, 0x69, 0x62, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4c, 0x6f, 0x67, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, + 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x1e, + 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, + 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4e, + 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, + 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x4e, 0x65, 0x78, 0x74, 0x41, + 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x12, 0x21, 0x2e, 0x6c, 0x69, 0x62, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x74, 0x68, 0x4d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, + 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x75, + 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x08, 0x4e, 0x6f, 0x6e, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x1a, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4e, 0x6f, 0x6e, 0x65, + 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x69, + 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4e, 0x6f, 0x6e, 0x65, 0x41, 0x75, 0x74, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x75, 0x74, 0x68, 0x12, 0x1e, 0x2e, 0x6c, 0x69, 0x62, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, + 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6c, 0x69, 0x62, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, + 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, + 0x0d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x1f, + 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x20, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x17, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, 0x29, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x65, 0x74, - 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x61, - 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x6d, - 0x65, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x0e, 0x66, - 0x69, 0x6e, 0x69, 0x73, 0x68, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x48, 0x00, 0x52, 0x0d, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xb9, 0x01, 0x0a, - 0x20, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x46, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3e, 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x41, 0x75, - 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x22, 0x23, 0x0a, 0x21, 0x55, 0x70, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x4e, - 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x0a, - 0x0d, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, - 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, - 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x2a, 0x0a, 0x0e, 0x42, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x14, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x48, 0x6f, - 0x73, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, 0x74, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x22, 0x33, 0x0a, 0x15, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x48, 0x6f, 0x73, - 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x22, 0x41, 0x0a, 0x16, 0x50, 0x69, 0x70, 0x65, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, - 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x19, 0x0a, 0x17, 0x50, - 0x69, 0x70, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x0a, 0x16, 0x50, 0x69, 0x70, 0x65, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x27, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x19, 0x0a, 0x17, 0x50, 0x69, 0x70, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x0a, 0x1c, 0x50, 0x69, - 0x70, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, - 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x72, - 0x6f, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, - 0x72, 0x6f, 0x6d, 0x41, 0x64, 0x64, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1f, 0x0a, - 0x1d, 0x50, 0x69, 0x70, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x4d, - 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x08, 0x0a, 0x04, - 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, - 0x52, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x4b, 0x45, - 0x59, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x45, 0x59, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, - 0x49, 0x4e, 0x54, 0x45, 0x52, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x03, 0x32, 0xec, 0x09, - 0x0a, 0x0e, 0x53, 0x73, 0x68, 0x50, 0x69, 0x70, 0x65, 0x72, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x12, 0x36, 0x0a, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x1a, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2e, 0x4c, 0x6f, 0x67, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x1e, 0x2e, 0x6c, 0x69, 0x62, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, - 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6c, 0x69, 0x62, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, - 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, - 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x73, 0x12, 0x21, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, - 0x0a, 0x08, 0x4e, 0x6f, 0x6e, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, 0x1a, 0x2e, 0x6c, 0x69, 0x62, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4e, 0x6f, 0x6e, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2e, 0x4e, 0x6f, 0x6e, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0c, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x41, 0x75, 0x74, 0x68, 0x12, 0x1e, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x1f, 0x2e, 0x6c, 0x69, 0x62, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, - 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x69, 0x62, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, - 0x0a, 0x17, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, 0x29, 0x2e, 0x6c, 0x69, 0x62, 0x70, + 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x75, + 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x29, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x1a, 0x29, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2e, 0x4b, 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x78, 0x0a, 0x19, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x41, 0x75, 0x74, 0x68, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x4e, 0x6f, 0x74, 0x69, - 0x63, 0x65, 0x12, 0x2b, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, - 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x46, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2c, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x4e, - 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x3f, 0x0a, 0x06, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x6c, 0x69, 0x62, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x54, 0x0a, 0x0d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x4b, 0x65, - 0x79, 0x12, 0x1f, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x56, 0x65, - 0x72, 0x69, 0x66, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x50, 0x69, 0x70, 0x65, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, - 0x27, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x70, 0x65, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x50, 0x69, 0x70, 0x65, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, - 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6c, 0x69, 0x62, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x5a, 0x0a, 0x0f, 0x50, 0x69, 0x70, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, - 0x69, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x50, 0x69, 0x70, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x25, 0x5a, 0x23, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x67, 0x31, 0x32, 0x33, - 0x2f, 0x73, 0x73, 0x68, 0x70, 0x69, 0x70, 0x65, 0x72, 0x2f, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x78, 0x0a, 0x19, 0x55, 0x70, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, + 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x2b, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, + 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x46, 0x61, 0x69, + 0x6c, 0x75, 0x72, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x06, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x18, + 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x42, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x48, + 0x6f, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x4b, 0x65, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x48, 0x6f, 0x73, 0x74, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x15, 0x50, + 0x69, 0x70, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, + 0x74, 0x69, 0x63, 0x65, 0x12, 0x27, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x50, 0x69, 0x70, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, + 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x50, 0x69, 0x70, + 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x6c, + 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x22, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x70, 0x65, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0f, 0x50, 0x69, 0x70, 0x65, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, + 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6c, 0x69, + 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x69, 0x70, 0x65, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x42, 0x25, 0x5a, 0x23, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x74, 0x67, 0x31, 0x32, 0x33, 0x2f, 0x73, 0x73, 0x68, 0x70, 0x69, 0x70, 0x65, 0x72, 0x2f, 0x6c, + 0x69, 0x62, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2556,7 +2633,7 @@ func file_plugin_proto_rawDescGZIP() []byte { } var file_plugin_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_plugin_proto_msgTypes = make([]protoimpl.MessageInfo, 42) +var file_plugin_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_plugin_proto_goTypes = []interface{}{ (AuthMethod)(0), // 0: libplugin.AuthMethod (*ConnMeta)(nil), // 1: libplugin.ConnMeta @@ -2566,106 +2643,110 @@ var file_plugin_proto_goTypes = []interface{}{ (*UpstreamPrivateKeyAuth)(nil), // 5: libplugin.UpstreamPrivateKeyAuth (*UpstreamRemoteSignerAuth)(nil), // 6: libplugin.UpstreamRemoteSignerAuth (*UpstreamNextPluginAuth)(nil), // 7: libplugin.UpstreamNextPluginAuth - (*StartLogRequest)(nil), // 8: libplugin.StartLogRequest - (*Log)(nil), // 9: libplugin.Log - (*ListCallbackRequest)(nil), // 10: libplugin.ListCallbackRequest - (*ListCallbackResponse)(nil), // 11: libplugin.ListCallbackResponse - (*NewConnectionRequest)(nil), // 12: libplugin.NewConnectionRequest - (*NewConnectionResponse)(nil), // 13: libplugin.NewConnectionResponse - (*NextAuthMethodsRequest)(nil), // 14: libplugin.NextAuthMethodsRequest - (*NextAuthMethodsResponse)(nil), // 15: libplugin.NextAuthMethodsResponse - (*NoneAuthRequest)(nil), // 16: libplugin.NoneAuthRequest - (*NoneAuthResponse)(nil), // 17: libplugin.NoneAuthResponse - (*PasswordAuthRequest)(nil), // 18: libplugin.PasswordAuthRequest - (*PasswordAuthResponse)(nil), // 19: libplugin.PasswordAuthResponse - (*PublicKeyAuthRequest)(nil), // 20: libplugin.PublicKeyAuthRequest - (*PublicKeyAuthResponse)(nil), // 21: libplugin.PublicKeyAuthResponse - (*KeyboardInteractiveUserResponse)(nil), // 22: libplugin.KeyboardInteractiveUserResponse - (*KeyboardInteractivePromptRequest)(nil), // 23: libplugin.KeyboardInteractivePromptRequest - (*KeyboardInteractiveMetaRequest)(nil), // 24: libplugin.KeyboardInteractiveMetaRequest - (*KeyboardInteractiveMetaResponse)(nil), // 25: libplugin.KeyboardInteractiveMetaResponse - (*KeyboardInteractiveFinishRequest)(nil), // 26: libplugin.KeyboardInteractiveFinishRequest - (*KeyboardInteractiveAuthMessage)(nil), // 27: libplugin.KeyboardInteractiveAuthMessage - (*UpstreamAuthFailureNoticeRequest)(nil), // 28: libplugin.UpstreamAuthFailureNoticeRequest - (*UpstreamAuthFailureNoticeResponse)(nil), // 29: libplugin.UpstreamAuthFailureNoticeResponse - (*BannerRequest)(nil), // 30: libplugin.BannerRequest - (*BannerResponse)(nil), // 31: libplugin.BannerResponse - (*VerifyHostKeyRequest)(nil), // 32: libplugin.VerifyHostKeyRequest - (*VerifyHostKeyResponse)(nil), // 33: libplugin.VerifyHostKeyResponse - (*PipeStartNoticeRequest)(nil), // 34: libplugin.PipeStartNoticeRequest - (*PipeStartNoticeResponse)(nil), // 35: libplugin.PipeStartNoticeResponse - (*PipeErrorNoticeRequest)(nil), // 36: libplugin.PipeErrorNoticeRequest - (*PipeErrorNoticeResponse)(nil), // 37: libplugin.PipeErrorNoticeResponse - (*PipeCreateErrorNoticeRequest)(nil), // 38: libplugin.PipeCreateErrorNoticeRequest - (*PipeCreateErrorNoticeResponse)(nil), // 39: libplugin.PipeCreateErrorNoticeResponse - nil, // 40: libplugin.ConnMeta.MetadataEntry - nil, // 41: libplugin.UpstreamNextPluginAuth.MetaEntry - (*KeyboardInteractivePromptRequest_Question)(nil), // 42: libplugin.KeyboardInteractivePromptRequest.Question + (*UpstreamRetryCurrentPluginAuth)(nil), // 8: libplugin.UpstreamRetryCurrentPluginAuth + (*StartLogRequest)(nil), // 9: libplugin.StartLogRequest + (*Log)(nil), // 10: libplugin.Log + (*ListCallbackRequest)(nil), // 11: libplugin.ListCallbackRequest + (*ListCallbackResponse)(nil), // 12: libplugin.ListCallbackResponse + (*NewConnectionRequest)(nil), // 13: libplugin.NewConnectionRequest + (*NewConnectionResponse)(nil), // 14: libplugin.NewConnectionResponse + (*NextAuthMethodsRequest)(nil), // 15: libplugin.NextAuthMethodsRequest + (*NextAuthMethodsResponse)(nil), // 16: libplugin.NextAuthMethodsResponse + (*NoneAuthRequest)(nil), // 17: libplugin.NoneAuthRequest + (*NoneAuthResponse)(nil), // 18: libplugin.NoneAuthResponse + (*PasswordAuthRequest)(nil), // 19: libplugin.PasswordAuthRequest + (*PasswordAuthResponse)(nil), // 20: libplugin.PasswordAuthResponse + (*PublicKeyAuthRequest)(nil), // 21: libplugin.PublicKeyAuthRequest + (*PublicKeyAuthResponse)(nil), // 22: libplugin.PublicKeyAuthResponse + (*KeyboardInteractiveUserResponse)(nil), // 23: libplugin.KeyboardInteractiveUserResponse + (*KeyboardInteractivePromptRequest)(nil), // 24: libplugin.KeyboardInteractivePromptRequest + (*KeyboardInteractiveMetaRequest)(nil), // 25: libplugin.KeyboardInteractiveMetaRequest + (*KeyboardInteractiveMetaResponse)(nil), // 26: libplugin.KeyboardInteractiveMetaResponse + (*KeyboardInteractiveFinishRequest)(nil), // 27: libplugin.KeyboardInteractiveFinishRequest + (*KeyboardInteractiveAuthMessage)(nil), // 28: libplugin.KeyboardInteractiveAuthMessage + (*UpstreamAuthFailureNoticeRequest)(nil), // 29: libplugin.UpstreamAuthFailureNoticeRequest + (*UpstreamAuthFailureNoticeResponse)(nil), // 30: libplugin.UpstreamAuthFailureNoticeResponse + (*BannerRequest)(nil), // 31: libplugin.BannerRequest + (*BannerResponse)(nil), // 32: libplugin.BannerResponse + (*VerifyHostKeyRequest)(nil), // 33: libplugin.VerifyHostKeyRequest + (*VerifyHostKeyResponse)(nil), // 34: libplugin.VerifyHostKeyResponse + (*PipeStartNoticeRequest)(nil), // 35: libplugin.PipeStartNoticeRequest + (*PipeStartNoticeResponse)(nil), // 36: libplugin.PipeStartNoticeResponse + (*PipeErrorNoticeRequest)(nil), // 37: libplugin.PipeErrorNoticeRequest + (*PipeErrorNoticeResponse)(nil), // 38: libplugin.PipeErrorNoticeResponse + (*PipeCreateErrorNoticeRequest)(nil), // 39: libplugin.PipeCreateErrorNoticeRequest + (*PipeCreateErrorNoticeResponse)(nil), // 40: libplugin.PipeCreateErrorNoticeResponse + nil, // 41: libplugin.ConnMeta.MetadataEntry + nil, // 42: libplugin.UpstreamNextPluginAuth.MetaEntry + nil, // 43: libplugin.UpstreamRetryCurrentPluginAuth.MetaEntry + (*KeyboardInteractivePromptRequest_Question)(nil), // 44: libplugin.KeyboardInteractivePromptRequest.Question } var file_plugin_proto_depIdxs = []int32{ - 40, // 0: libplugin.ConnMeta.metadata:type_name -> libplugin.ConnMeta.MetadataEntry + 41, // 0: libplugin.ConnMeta.metadata:type_name -> libplugin.ConnMeta.MetadataEntry 3, // 1: libplugin.Upstream.none:type_name -> libplugin.UpstreamNoneAuth 4, // 2: libplugin.Upstream.password:type_name -> libplugin.UpstreamPasswordAuth 5, // 3: libplugin.Upstream.private_key:type_name -> libplugin.UpstreamPrivateKeyAuth 6, // 4: libplugin.Upstream.remote_signer:type_name -> libplugin.UpstreamRemoteSignerAuth 7, // 5: libplugin.Upstream.next_plugin:type_name -> libplugin.UpstreamNextPluginAuth - 41, // 6: libplugin.UpstreamNextPluginAuth.meta:type_name -> libplugin.UpstreamNextPluginAuth.MetaEntry - 1, // 7: libplugin.NewConnectionRequest.meta:type_name -> libplugin.ConnMeta - 1, // 8: libplugin.NextAuthMethodsRequest.meta:type_name -> libplugin.ConnMeta - 0, // 9: libplugin.NextAuthMethodsResponse.methods:type_name -> libplugin.AuthMethod - 1, // 10: libplugin.NoneAuthRequest.meta:type_name -> libplugin.ConnMeta - 2, // 11: libplugin.NoneAuthResponse.upstream:type_name -> libplugin.Upstream - 1, // 12: libplugin.PasswordAuthRequest.meta:type_name -> libplugin.ConnMeta - 2, // 13: libplugin.PasswordAuthResponse.upstream:type_name -> libplugin.Upstream - 1, // 14: libplugin.PublicKeyAuthRequest.meta:type_name -> libplugin.ConnMeta - 2, // 15: libplugin.PublicKeyAuthResponse.upstream:type_name -> libplugin.Upstream - 42, // 16: libplugin.KeyboardInteractivePromptRequest.questions:type_name -> libplugin.KeyboardInteractivePromptRequest.Question - 1, // 17: libplugin.KeyboardInteractiveMetaResponse.meta:type_name -> libplugin.ConnMeta - 2, // 18: libplugin.KeyboardInteractiveFinishRequest.upstream:type_name -> libplugin.Upstream - 23, // 19: libplugin.KeyboardInteractiveAuthMessage.prompt_request:type_name -> libplugin.KeyboardInteractivePromptRequest - 22, // 20: libplugin.KeyboardInteractiveAuthMessage.user_response:type_name -> libplugin.KeyboardInteractiveUserResponse - 24, // 21: libplugin.KeyboardInteractiveAuthMessage.meta_request:type_name -> libplugin.KeyboardInteractiveMetaRequest - 25, // 22: libplugin.KeyboardInteractiveAuthMessage.meta_response:type_name -> libplugin.KeyboardInteractiveMetaResponse - 26, // 23: libplugin.KeyboardInteractiveAuthMessage.finish_request:type_name -> libplugin.KeyboardInteractiveFinishRequest - 1, // 24: libplugin.UpstreamAuthFailureNoticeRequest.meta:type_name -> libplugin.ConnMeta - 0, // 25: libplugin.UpstreamAuthFailureNoticeRequest.allowed_methods:type_name -> libplugin.AuthMethod - 1, // 26: libplugin.BannerRequest.meta:type_name -> libplugin.ConnMeta - 1, // 27: libplugin.VerifyHostKeyRequest.meta:type_name -> libplugin.ConnMeta - 1, // 28: libplugin.PipeStartNoticeRequest.meta:type_name -> libplugin.ConnMeta - 1, // 29: libplugin.PipeErrorNoticeRequest.meta:type_name -> libplugin.ConnMeta - 8, // 30: libplugin.SshPiperPlugin.Logs:input_type -> libplugin.StartLogRequest - 10, // 31: libplugin.SshPiperPlugin.ListCallbacks:input_type -> libplugin.ListCallbackRequest - 12, // 32: libplugin.SshPiperPlugin.NewConnection:input_type -> libplugin.NewConnectionRequest - 14, // 33: libplugin.SshPiperPlugin.NextAuthMethods:input_type -> libplugin.NextAuthMethodsRequest - 16, // 34: libplugin.SshPiperPlugin.NoneAuth:input_type -> libplugin.NoneAuthRequest - 18, // 35: libplugin.SshPiperPlugin.PasswordAuth:input_type -> libplugin.PasswordAuthRequest - 20, // 36: libplugin.SshPiperPlugin.PublicKeyAuth:input_type -> libplugin.PublicKeyAuthRequest - 27, // 37: libplugin.SshPiperPlugin.KeyboardInteractiveAuth:input_type -> libplugin.KeyboardInteractiveAuthMessage - 28, // 38: libplugin.SshPiperPlugin.UpstreamAuthFailureNotice:input_type -> libplugin.UpstreamAuthFailureNoticeRequest - 30, // 39: libplugin.SshPiperPlugin.Banner:input_type -> libplugin.BannerRequest - 32, // 40: libplugin.SshPiperPlugin.VerifyHostKey:input_type -> libplugin.VerifyHostKeyRequest - 38, // 41: libplugin.SshPiperPlugin.PipeCreateErrorNotice:input_type -> libplugin.PipeCreateErrorNoticeRequest - 34, // 42: libplugin.SshPiperPlugin.PipeStartNotice:input_type -> libplugin.PipeStartNoticeRequest - 36, // 43: libplugin.SshPiperPlugin.PipeErrorNotice:input_type -> libplugin.PipeErrorNoticeRequest - 9, // 44: libplugin.SshPiperPlugin.Logs:output_type -> libplugin.Log - 11, // 45: libplugin.SshPiperPlugin.ListCallbacks:output_type -> libplugin.ListCallbackResponse - 13, // 46: libplugin.SshPiperPlugin.NewConnection:output_type -> libplugin.NewConnectionResponse - 15, // 47: libplugin.SshPiperPlugin.NextAuthMethods:output_type -> libplugin.NextAuthMethodsResponse - 17, // 48: libplugin.SshPiperPlugin.NoneAuth:output_type -> libplugin.NoneAuthResponse - 19, // 49: libplugin.SshPiperPlugin.PasswordAuth:output_type -> libplugin.PasswordAuthResponse - 21, // 50: libplugin.SshPiperPlugin.PublicKeyAuth:output_type -> libplugin.PublicKeyAuthResponse - 27, // 51: libplugin.SshPiperPlugin.KeyboardInteractiveAuth:output_type -> libplugin.KeyboardInteractiveAuthMessage - 29, // 52: libplugin.SshPiperPlugin.UpstreamAuthFailureNotice:output_type -> libplugin.UpstreamAuthFailureNoticeResponse - 31, // 53: libplugin.SshPiperPlugin.Banner:output_type -> libplugin.BannerResponse - 33, // 54: libplugin.SshPiperPlugin.VerifyHostKey:output_type -> libplugin.VerifyHostKeyResponse - 39, // 55: libplugin.SshPiperPlugin.PipeCreateErrorNotice:output_type -> libplugin.PipeCreateErrorNoticeResponse - 35, // 56: libplugin.SshPiperPlugin.PipeStartNotice:output_type -> libplugin.PipeStartNoticeResponse - 37, // 57: libplugin.SshPiperPlugin.PipeErrorNotice:output_type -> libplugin.PipeErrorNoticeResponse - 44, // [44:58] is the sub-list for method output_type - 30, // [30:44] is the sub-list for method input_type - 30, // [30:30] is the sub-list for extension type_name - 30, // [30:30] is the sub-list for extension extendee - 0, // [0:30] is the sub-list for field type_name + 8, // 6: libplugin.Upstream.retry_current_plugin:type_name -> libplugin.UpstreamRetryCurrentPluginAuth + 42, // 7: libplugin.UpstreamNextPluginAuth.meta:type_name -> libplugin.UpstreamNextPluginAuth.MetaEntry + 43, // 8: libplugin.UpstreamRetryCurrentPluginAuth.meta:type_name -> libplugin.UpstreamRetryCurrentPluginAuth.MetaEntry + 1, // 9: libplugin.NewConnectionRequest.meta:type_name -> libplugin.ConnMeta + 1, // 10: libplugin.NextAuthMethodsRequest.meta:type_name -> libplugin.ConnMeta + 0, // 11: libplugin.NextAuthMethodsResponse.methods:type_name -> libplugin.AuthMethod + 1, // 12: libplugin.NoneAuthRequest.meta:type_name -> libplugin.ConnMeta + 2, // 13: libplugin.NoneAuthResponse.upstream:type_name -> libplugin.Upstream + 1, // 14: libplugin.PasswordAuthRequest.meta:type_name -> libplugin.ConnMeta + 2, // 15: libplugin.PasswordAuthResponse.upstream:type_name -> libplugin.Upstream + 1, // 16: libplugin.PublicKeyAuthRequest.meta:type_name -> libplugin.ConnMeta + 2, // 17: libplugin.PublicKeyAuthResponse.upstream:type_name -> libplugin.Upstream + 44, // 18: libplugin.KeyboardInteractivePromptRequest.questions:type_name -> libplugin.KeyboardInteractivePromptRequest.Question + 1, // 19: libplugin.KeyboardInteractiveMetaResponse.meta:type_name -> libplugin.ConnMeta + 2, // 20: libplugin.KeyboardInteractiveFinishRequest.upstream:type_name -> libplugin.Upstream + 24, // 21: libplugin.KeyboardInteractiveAuthMessage.prompt_request:type_name -> libplugin.KeyboardInteractivePromptRequest + 23, // 22: libplugin.KeyboardInteractiveAuthMessage.user_response:type_name -> libplugin.KeyboardInteractiveUserResponse + 25, // 23: libplugin.KeyboardInteractiveAuthMessage.meta_request:type_name -> libplugin.KeyboardInteractiveMetaRequest + 26, // 24: libplugin.KeyboardInteractiveAuthMessage.meta_response:type_name -> libplugin.KeyboardInteractiveMetaResponse + 27, // 25: libplugin.KeyboardInteractiveAuthMessage.finish_request:type_name -> libplugin.KeyboardInteractiveFinishRequest + 1, // 26: libplugin.UpstreamAuthFailureNoticeRequest.meta:type_name -> libplugin.ConnMeta + 0, // 27: libplugin.UpstreamAuthFailureNoticeRequest.allowed_methods:type_name -> libplugin.AuthMethod + 1, // 28: libplugin.BannerRequest.meta:type_name -> libplugin.ConnMeta + 1, // 29: libplugin.VerifyHostKeyRequest.meta:type_name -> libplugin.ConnMeta + 1, // 30: libplugin.PipeStartNoticeRequest.meta:type_name -> libplugin.ConnMeta + 1, // 31: libplugin.PipeErrorNoticeRequest.meta:type_name -> libplugin.ConnMeta + 9, // 32: libplugin.SshPiperPlugin.Logs:input_type -> libplugin.StartLogRequest + 11, // 33: libplugin.SshPiperPlugin.ListCallbacks:input_type -> libplugin.ListCallbackRequest + 13, // 34: libplugin.SshPiperPlugin.NewConnection:input_type -> libplugin.NewConnectionRequest + 15, // 35: libplugin.SshPiperPlugin.NextAuthMethods:input_type -> libplugin.NextAuthMethodsRequest + 17, // 36: libplugin.SshPiperPlugin.NoneAuth:input_type -> libplugin.NoneAuthRequest + 19, // 37: libplugin.SshPiperPlugin.PasswordAuth:input_type -> libplugin.PasswordAuthRequest + 21, // 38: libplugin.SshPiperPlugin.PublicKeyAuth:input_type -> libplugin.PublicKeyAuthRequest + 28, // 39: libplugin.SshPiperPlugin.KeyboardInteractiveAuth:input_type -> libplugin.KeyboardInteractiveAuthMessage + 29, // 40: libplugin.SshPiperPlugin.UpstreamAuthFailureNotice:input_type -> libplugin.UpstreamAuthFailureNoticeRequest + 31, // 41: libplugin.SshPiperPlugin.Banner:input_type -> libplugin.BannerRequest + 33, // 42: libplugin.SshPiperPlugin.VerifyHostKey:input_type -> libplugin.VerifyHostKeyRequest + 39, // 43: libplugin.SshPiperPlugin.PipeCreateErrorNotice:input_type -> libplugin.PipeCreateErrorNoticeRequest + 35, // 44: libplugin.SshPiperPlugin.PipeStartNotice:input_type -> libplugin.PipeStartNoticeRequest + 37, // 45: libplugin.SshPiperPlugin.PipeErrorNotice:input_type -> libplugin.PipeErrorNoticeRequest + 10, // 46: libplugin.SshPiperPlugin.Logs:output_type -> libplugin.Log + 12, // 47: libplugin.SshPiperPlugin.ListCallbacks:output_type -> libplugin.ListCallbackResponse + 14, // 48: libplugin.SshPiperPlugin.NewConnection:output_type -> libplugin.NewConnectionResponse + 16, // 49: libplugin.SshPiperPlugin.NextAuthMethods:output_type -> libplugin.NextAuthMethodsResponse + 18, // 50: libplugin.SshPiperPlugin.NoneAuth:output_type -> libplugin.NoneAuthResponse + 20, // 51: libplugin.SshPiperPlugin.PasswordAuth:output_type -> libplugin.PasswordAuthResponse + 22, // 52: libplugin.SshPiperPlugin.PublicKeyAuth:output_type -> libplugin.PublicKeyAuthResponse + 28, // 53: libplugin.SshPiperPlugin.KeyboardInteractiveAuth:output_type -> libplugin.KeyboardInteractiveAuthMessage + 30, // 54: libplugin.SshPiperPlugin.UpstreamAuthFailureNotice:output_type -> libplugin.UpstreamAuthFailureNoticeResponse + 32, // 55: libplugin.SshPiperPlugin.Banner:output_type -> libplugin.BannerResponse + 34, // 56: libplugin.SshPiperPlugin.VerifyHostKey:output_type -> libplugin.VerifyHostKeyResponse + 40, // 57: libplugin.SshPiperPlugin.PipeCreateErrorNotice:output_type -> libplugin.PipeCreateErrorNoticeResponse + 36, // 58: libplugin.SshPiperPlugin.PipeStartNotice:output_type -> libplugin.PipeStartNoticeResponse + 38, // 59: libplugin.SshPiperPlugin.PipeErrorNotice:output_type -> libplugin.PipeErrorNoticeResponse + 46, // [46:60] is the sub-list for method output_type + 32, // [32:46] is the sub-list for method input_type + 32, // [32:32] is the sub-list for extension type_name + 32, // [32:32] is the sub-list for extension extendee + 0, // [0:32] is the sub-list for field type_name } func init() { file_plugin_proto_init() } @@ -2759,7 +2840,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartLogRequest); i { + switch v := v.(*UpstreamRetryCurrentPluginAuth); i { case 0: return &v.state case 1: @@ -2771,7 +2852,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Log); i { + switch v := v.(*StartLogRequest); i { case 0: return &v.state case 1: @@ -2783,7 +2864,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCallbackRequest); i { + switch v := v.(*Log); i { case 0: return &v.state case 1: @@ -2795,7 +2876,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCallbackResponse); i { + switch v := v.(*ListCallbackRequest); i { case 0: return &v.state case 1: @@ -2807,7 +2888,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewConnectionRequest); i { + switch v := v.(*ListCallbackResponse); i { case 0: return &v.state case 1: @@ -2819,7 +2900,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewConnectionResponse); i { + switch v := v.(*NewConnectionRequest); i { case 0: return &v.state case 1: @@ -2831,7 +2912,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NextAuthMethodsRequest); i { + switch v := v.(*NewConnectionResponse); i { case 0: return &v.state case 1: @@ -2843,7 +2924,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NextAuthMethodsResponse); i { + switch v := v.(*NextAuthMethodsRequest); i { case 0: return &v.state case 1: @@ -2855,7 +2936,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NoneAuthRequest); i { + switch v := v.(*NextAuthMethodsResponse); i { case 0: return &v.state case 1: @@ -2867,7 +2948,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NoneAuthResponse); i { + switch v := v.(*NoneAuthRequest); i { case 0: return &v.state case 1: @@ -2879,7 +2960,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordAuthRequest); i { + switch v := v.(*NoneAuthResponse); i { case 0: return &v.state case 1: @@ -2891,7 +2972,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordAuthResponse); i { + switch v := v.(*PasswordAuthRequest); i { case 0: return &v.state case 1: @@ -2903,7 +2984,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublicKeyAuthRequest); i { + switch v := v.(*PasswordAuthResponse); i { case 0: return &v.state case 1: @@ -2915,7 +2996,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublicKeyAuthResponse); i { + switch v := v.(*PublicKeyAuthRequest); i { case 0: return &v.state case 1: @@ -2927,7 +3008,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyboardInteractiveUserResponse); i { + switch v := v.(*PublicKeyAuthResponse); i { case 0: return &v.state case 1: @@ -2939,7 +3020,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyboardInteractivePromptRequest); i { + switch v := v.(*KeyboardInteractiveUserResponse); i { case 0: return &v.state case 1: @@ -2951,7 +3032,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyboardInteractiveMetaRequest); i { + switch v := v.(*KeyboardInteractivePromptRequest); i { case 0: return &v.state case 1: @@ -2963,7 +3044,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyboardInteractiveMetaResponse); i { + switch v := v.(*KeyboardInteractiveMetaRequest); i { case 0: return &v.state case 1: @@ -2975,7 +3056,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyboardInteractiveFinishRequest); i { + switch v := v.(*KeyboardInteractiveMetaResponse); i { case 0: return &v.state case 1: @@ -2987,7 +3068,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyboardInteractiveAuthMessage); i { + switch v := v.(*KeyboardInteractiveFinishRequest); i { case 0: return &v.state case 1: @@ -2999,7 +3080,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpstreamAuthFailureNoticeRequest); i { + switch v := v.(*KeyboardInteractiveAuthMessage); i { case 0: return &v.state case 1: @@ -3011,7 +3092,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpstreamAuthFailureNoticeResponse); i { + switch v := v.(*UpstreamAuthFailureNoticeRequest); i { case 0: return &v.state case 1: @@ -3023,7 +3104,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BannerRequest); i { + switch v := v.(*UpstreamAuthFailureNoticeResponse); i { case 0: return &v.state case 1: @@ -3035,7 +3116,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BannerResponse); i { + switch v := v.(*BannerRequest); i { case 0: return &v.state case 1: @@ -3047,7 +3128,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VerifyHostKeyRequest); i { + switch v := v.(*BannerResponse); i { case 0: return &v.state case 1: @@ -3059,7 +3140,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VerifyHostKeyResponse); i { + switch v := v.(*VerifyHostKeyRequest); i { case 0: return &v.state case 1: @@ -3071,7 +3152,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipeStartNoticeRequest); i { + switch v := v.(*VerifyHostKeyResponse); i { case 0: return &v.state case 1: @@ -3083,7 +3164,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipeStartNoticeResponse); i { + switch v := v.(*PipeStartNoticeRequest); i { case 0: return &v.state case 1: @@ -3095,7 +3176,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipeErrorNoticeRequest); i { + switch v := v.(*PipeStartNoticeResponse); i { case 0: return &v.state case 1: @@ -3107,7 +3188,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipeErrorNoticeResponse); i { + switch v := v.(*PipeErrorNoticeRequest); i { case 0: return &v.state case 1: @@ -3119,7 +3200,7 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PipeCreateErrorNoticeRequest); i { + switch v := v.(*PipeErrorNoticeResponse); i { case 0: return &v.state case 1: @@ -3131,6 +3212,18 @@ func file_plugin_proto_init() { } } file_plugin_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PipeCreateErrorNoticeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_plugin_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PipeCreateErrorNoticeResponse); i { case 0: return &v.state @@ -3142,7 +3235,7 @@ func file_plugin_proto_init() { return nil } } - file_plugin_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_plugin_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KeyboardInteractivePromptRequest_Question); i { case 0: return &v.state @@ -3161,8 +3254,9 @@ func file_plugin_proto_init() { (*Upstream_PrivateKey)(nil), (*Upstream_RemoteSigner)(nil), (*Upstream_NextPlugin)(nil), + (*Upstream_RetryCurrentPlugin)(nil), } - file_plugin_proto_msgTypes[26].OneofWrappers = []interface{}{ + file_plugin_proto_msgTypes[27].OneofWrappers = []interface{}{ (*KeyboardInteractiveAuthMessage_PromptRequest)(nil), (*KeyboardInteractiveAuthMessage_UserResponse)(nil), (*KeyboardInteractiveAuthMessage_MetaRequest)(nil), @@ -3175,7 +3269,7 @@ func file_plugin_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_plugin_proto_rawDesc, NumEnums: 1, - NumMessages: 42, + NumMessages: 44, NumExtensions: 0, NumServices: 1, }, diff --git a/libplugin/plugin.proto b/libplugin/plugin.proto index 990ffbec..82814a6b 100644 --- a/libplugin/plugin.proto +++ b/libplugin/plugin.proto @@ -23,6 +23,7 @@ message Upstream { UpstreamPrivateKeyAuth private_key = 102; UpstreamRemoteSignerAuth remote_signer = 103; UpstreamNextPluginAuth next_plugin = 200; + UpstreamRetryCurrentPluginAuth retry_current_plugin = 201; } } @@ -47,6 +48,10 @@ message UpstreamNextPluginAuth { map meta = 1; } +message UpstreamRetryCurrentPluginAuth { + map meta = 1; +} + service SshPiperPlugin { rpc Logs(StartLogRequest) returns (stream Log) {} rpc ListCallbacks(ListCallbackRequest) returns (ListCallbackResponse) {} diff --git a/libplugin/util.go b/libplugin/util.go index c931c9a8..1710d5b1 100644 --- a/libplugin/util.go +++ b/libplugin/util.go @@ -147,6 +147,14 @@ func CreateNextPluginAuth(meta map[string]string) *Upstream_NextPlugin { } } +func CreateRetryCurrentPluginAuth(meta map[string]string) *Upstream_RetryCurrentPlugin { + return &Upstream_RetryCurrentPlugin{ + RetryCurrentPlugin: &UpstreamRetryCurrentPluginAuth{ + Meta: meta, + }, + } +} + func VerifyHostKeyFromKnownHosts(knownhostsData io.Reader, hostname, netaddr string, key []byte) error { hostKeyCallback, err := knownhosts.NewFromReader(knownhostsData) if err != nil { diff --git a/plugin/internal/workingdir/workingdir.go b/plugin/internal/workingdir/workingdir.go deleted file mode 100644 index 93c4d4d0..00000000 --- a/plugin/internal/workingdir/workingdir.go +++ /dev/null @@ -1,166 +0,0 @@ -package workingdir - -import ( - "bufio" - "crypto/subtle" - "fmt" - "os" - "path" - "regexp" - "strings" - - "github.com/tg123/sshpiper/libplugin" - "golang.org/x/crypto/ssh" - - log "github.com/sirupsen/logrus" -) - -type Workingdir struct { - Path string - NoCheckPerm bool - Strict bool -} - -var ( - usernameRule *regexp.Regexp -) - -const ( - userAuthorizedKeysFile = "authorized_keys" - userKeyFile = "id_rsa" - userUpstreamFile = "sshpiper_upstream" - userKnownHosts = "known_hosts" -) - -func init() { - // Base username validation on Debians default: https://sources.debian.net/src/adduser/3.113%2Bnmu3/adduser.conf/#L85 - // -> NAME_REGEX="^[a-z][-a-z0-9_]*\$" - // The length is limited to 32 characters. See man 8 useradd: https://linux.die.net/man/8/useradd - usernameRule, _ = regexp.Compile("^[a-z_][-a-z0-9_]{0,31}$") -} - -func IsUsernameSecure(user string) bool { - return usernameRule.MatchString(user) -} - -func (w *Workingdir) Mapkey(pub []byte) ([]byte, error) { - - var rest []byte - rest, err := w.Readfile(userAuthorizedKeysFile) - if err != nil { - return nil, err - } - - var authedPubkey ssh.PublicKey - - for len(rest) > 0 { - authedPubkey, _, _, rest, err = ssh.ParseAuthorizedKey(rest) - - if err != nil { - return nil, err - } - - if subtle.ConstantTimeCompare(authedPubkey.Marshal(), pub) == 1 { - log.Infof("found mapping key %v", w.fullpath(userKeyFile)) - return w.Readfile(userKeyFile) - } - } - - return nil, fmt.Errorf("no matching key found") -} - -func (w *Workingdir) CreateUpstream() (*libplugin.Upstream, error) { - - data, err := w.Readfile(userUpstreamFile) - if err != nil { - return nil, err - } - - host, port, user, err := parseUpstreamFile(string(data)) - if err != nil { - return nil, err - } - - return &libplugin.Upstream{ - Host: host, - Port: int32(port), - UserName: user, - IgnoreHostKey: !w.Strict, - }, nil -} - -func (w *Workingdir) VerifyHostKey(hostname, netaddr string, key []byte) error { - if !w.Strict { - return nil - } - - f, err := os.Open(w.fullpath(userKnownHosts)) - if err != nil { - return err - } - defer f.Close() - - return libplugin.VerifyHostKeyFromKnownHosts(f, hostname, netaddr, key) -} - -func (w *Workingdir) checkPerm(file string) error { - filename := path.Join(w.Path, file) - f, err := os.Open(filename) - if err != nil { - return err - } - defer f.Close() - - fi, err := f.Stat() - if err != nil { - return err - } - - if w.NoCheckPerm { - return nil - } - - if fi.Mode().Perm()&0077 != 0 { - return fmt.Errorf("%v's perm is too open", filename) - } - - return nil -} - -func (w *Workingdir) fullpath(file string) string { - return path.Join(w.Path, file) -} - -func (w *Workingdir) Readfile(file string) ([]byte, error) { - if err := w.checkPerm(file); err != nil { - return nil, err - } - - return os.ReadFile(w.fullpath(file)) -} - -func parseUpstreamFile(data string) (host string, port int, user string, err error) { - r := bufio.NewReader(strings.NewReader(data)) - for { - host, err = r.ReadString('\n') - if err != nil { - break - } - - host = strings.TrimSpace(host) - - if host != "" && host[0] != '#' { - break - } - } - - t := strings.SplitN(host, "@", 2) - - if len(t) > 1 { - user = t[0] - host = t[1] - } - - host, port, err = libplugin.SplitHostPortForSSH(host) - return -} diff --git a/plugin/totp/README.md b/plugin/totp/README.md deleted file mode 100644 index a0913afa..00000000 --- a/plugin/totp/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# TOTP Working Directory plugin for sshpiperd - -Add TOTP 2FA to ssh, compatible with all [RFC6238](https://datatracker.ietf.org/doc/html/rfc6238) authenticator, for example: `google authenticator`, `azure authenticator`. - -the plugin is load `totp` in working directory defined in [workingdir](../workingdir/) plugin. - -## Usage - -``` -./sshpiperd ./totp -- ./workingdir -``` - -the secret should be stored in `totp` file in working directory. -for example: - -``` -/var/sshpiper/username/totp -``` \ No newline at end of file diff --git a/plugin/totp/main.go b/plugin/totp/main.go deleted file mode 100644 index 563c430e..00000000 --- a/plugin/totp/main.go +++ /dev/null @@ -1,95 +0,0 @@ -//go:build full - -package main - -import ( - "fmt" - "path" - "strings" - - "github.com/pquerna/otp/totp" - "github.com/tg123/sshpiper/libplugin" - "github.com/tg123/sshpiper/plugin/internal/workingdir" - "github.com/urfave/cli/v2" -) - -// type secretLoader struct { -// } - -// func (s *secretLoader) Load(user string) (string, error) { -// return "", nil -// } - -// TODO remove dup code -func createWorkingdir(c *cli.Context, user string) (*workingdir.Workingdir, error) { - if !c.Bool("allow-baduser-name") { - if !workingdir.IsUsernameSecure(user) { - return nil, fmt.Errorf("bad username: %s", user) - } - } - - root := c.String("root") - - return &workingdir.Workingdir{ - Path: path.Join(root, user), - NoCheckPerm: c.Bool("no-check-perm"), - Strict: c.Bool("strict-hostkey"), - }, nil -} - -func main() { - libplugin.CreateAndRunPluginTemplate(&libplugin.PluginTemplate{ - Name: "totp", - Usage: "sshpiperd totp 2FA authentication, workingdir based", - Flags: []cli.Flag{ - &cli.StringFlag{ - Name: "root", - Usage: "path to root working directory", - Value: "/var/sshpiper", - EnvVars: []string{"SSHPIPERD_WORKINGDIR_ROOT"}, - }, - &cli.BoolFlag{ - Name: "allow-baduser-name", - Usage: "allow bad username", - EnvVars: []string{"SSHPIPERD_WORKINGDIR_ALLOWBADUSERNAME"}, - }, - &cli.BoolFlag{ - Name: "no-check-perm", - Usage: "disable 0400 checking", - EnvVars: []string{"SSHPIPERD_WORKINGDIR_NOCHECKPERM"}, - }, - }, - CreateConfig: func(c *cli.Context) (*libplugin.SshPiperPluginConfig, error) { - return &libplugin.SshPiperPluginConfig{ - KeyboardInteractiveCallback: func(conn libplugin.ConnMetadata, client libplugin.KeyboardInteractiveChallenge) (*libplugin.Upstream, error) { - - w, err := createWorkingdir(c, conn.User()) - if err != nil { - return nil, err - } - - secret, err := w.Readfile("totp") - if err != nil { - return nil, err - } - - for { - - passcode, err := client("", "", "Authentication code:", true) - if err != nil { - return nil, err - } - - if totp.Validate(passcode, strings.TrimSpace(string(secret))) { - return &libplugin.Upstream{ - Auth: libplugin.CreateNextPluginAuth(nil), - }, nil - } - - _, _ = client("", "Wrong code, please try again", "", false) - } - }, - }, nil - }, - }) -} diff --git a/plugin/workingdir/README.md b/plugin/workingdir/README.md index f629bbc2..8d8b3a4f 100644 --- a/plugin/workingdir/README.md +++ b/plugin/workingdir/README.md @@ -89,6 +89,16 @@ google.com:12345 ├── linode.... ``` +## TOTP + +`--check-totp` will check the TOTP 2FA before connecting to the upstream, compatible with all [RFC6238](https://datatracker.ietf.org/doc/html/rfc6238) authenticator, for example: `google authenticator`, `azure authenticator`. + +the secret should be stored in `totp` file in working directory. +for example: + +``` +/var/sshpiper/username/totp +``` ## FAQ * Q: why sshpiperd still asks for password even I disabled password auth in upstream (different behavior from `v0`) diff --git a/plugin/workingdir/main.go b/plugin/workingdir/main.go index 94cffed2..9259cff5 100644 --- a/plugin/workingdir/main.go +++ b/plugin/workingdir/main.go @@ -1,6 +1,11 @@ package main import ( + "fmt" + "path" + "strings" + + "github.com/pquerna/otp/totp" "github.com/tg123/sshpiper/libplugin" "github.com/urfave/cli/v2" ) @@ -42,6 +47,11 @@ func main() { Usage: "search subdirectories under user directory for upsteam", EnvVars: []string{"SSHPIPERD_WORKINGDIR_RECURSIVESEARCH"}, }, + &cli.BoolFlag{ + Name: "check-totp", + Usage: "check totp code for 2FA, totp file should be in user directory named `totp`", + EnvVars: []string{"SSHPIPERD_WORKINGDIR_CHECKTOTP"}, + }, }, CreateConfig: func(c *cli.Context) (*libplugin.SshPiperPluginConfig, error) { @@ -54,15 +64,66 @@ func main() { recursiveSearch: c.Bool("recursive-search"), } + checktotp := c.Bool("check-totp") + skel := libplugin.NewSkelPlugin(fac.listPipe) config := skel.CreateConfig() - config.NextAuthMethodsCallback = func(_ libplugin.ConnMetadata) ([]string, error) { - if fac.noPasswordAuth { - return []string{"publickey"}, nil + config.NextAuthMethodsCallback = func(conn libplugin.ConnMetadata) ([]string, error) { + + auth := []string{"publickey"} + + if !fac.noPasswordAuth { + auth = append(auth, "password") } - return []string{"password", "publickey"}, nil + if checktotp { + if conn.GetMeta("totp") != "checked" { + auth = []string{"keyboard-interactive"} + } + + } + + return auth, nil } + + config.KeyboardInteractiveCallback = func(conn libplugin.ConnMetadata, client libplugin.KeyboardInteractiveChallenge) (*libplugin.Upstream, error) { + user := conn.User() + + if !fac.allowBadUsername { + if !isUsernameSecure(user) { + return nil, fmt.Errorf("bad username: %s", user) + } + } + + w := &workingdir{ + Path: path.Join(fac.root, conn.User()), + NoCheckPerm: fac.noCheckPerm, + } + + secret, err := w.Readfile("totp") + if err != nil { + return nil, err + } + + for { + + passcode, err := client("", "", "Authentication code:", true) + if err != nil { + return nil, err + } + + if totp.Validate(passcode, strings.TrimSpace(string(secret))) { + return &libplugin.Upstream{ + Auth: libplugin.CreateRetryCurrentPluginAuth(map[string]string{ + "totp": "checked", + }), + }, nil + } + + _, _ = client("", "Wrong code, please try again", "", false) + } + } + return config, nil }, })