diff --git a/build/rpc.json b/build/rpc.json index 5dda379..ab2041b 100644 --- a/build/rpc.json +++ b/build/rpc.json @@ -11227,13 +11227,22 @@ "isDeprecated": false }, { - "name": "checkUserEmailIsUsing", - "requestMessageName": "CheckUserEmailIsUsingRequest", - "responseMessageName": "CheckUserEmailIsUsingResponse", - "code": "rpc checkUserEmailIsUsing(CheckUserEmailIsUsingRequest) returns (CheckUserEmailIsUsingResponse);", + "name": "checkUserEmail", + "requestMessageName": "CheckUserEmailRequest", + "responseMessageName": "CheckUserEmailResponse", + "code": "rpc checkUserEmail(CheckUserEmailRequest) returns (CheckUserEmailResponse);", "doc": "检查邮箱是否已被使用", "roles": [], "isDeprecated": false + }, + { + "name": "findUserVerifiedEmailWithUsername", + "requestMessageName": "FindUserVerifiedEmailWithUsernameRequest", + "responseMessageName": "FindUserVerifiedEmailWithUsernameResponse", + "code": "rpc findUserVerifiedEmailWithUsername(FindUserVerifiedEmailWithUsernameRequest) returns (FindUserVerifiedEmailWithUsernameResponse);", + "doc": "根据用户名查询用户绑定的邮箱", + "roles": [], + "isDeprecated": false } ], "filename": "service_user.proto", @@ -12257,6 +12266,31 @@ ], "filename": "service_user_traffic_package.proto", "doc": "用户流量包服务" + }, + { + "name": "UserVerifyCodeService", + "methods": [ + { + "name": "sendUserVerifyCode", + "requestMessageName": "SendUserVerifyCodeRequest", + "responseMessageName": "SendUserVerifyCodeResponse", + "code": "rpc sendUserVerifyCode(SendUserVerifyCodeRequest) returns (SendUserVerifyCodeResponse);", + "doc": "发送重置密码验证码", + "roles": [], + "isDeprecated": false + }, + { + "name": "validateUserVerifyCode", + "requestMessageName": "ValidateUserVerifyCodeRequest", + "responseMessageName": "ValidateUserVerifyCodeResponse", + "code": "rpc validateUserVerifyCode(ValidateUserVerifyCodeRequest) returns (ValidateUserVerifyCodeResponse);", + "doc": "校验验证码", + "roles": [], + "isDeprecated": false + } + ], + "filename": "service_user_verify_code.proto", + "doc": "用户验证码服务" } ], "messages": [ @@ -12566,13 +12600,13 @@ "doc": "" }, { - "name": "CheckUserEmailIsUsingRequest", - "code": "message CheckUserEmailIsUsingRequest {\n\tstring email = 1;\n}", + "name": "CheckUserEmailRequest", + "code": "message CheckUserEmailRequest {\n\tstring email = 1; // 邮箱地址\n}", "doc": "检查邮箱是否已被验证" }, { - "name": "CheckUserEmailIsUsingResponse", - "code": "message CheckUserEmailIsUsingResponse {\n\tbool isUsing = 1; // 是否已被使用\n}", + "name": "CheckUserEmailResponse", + "code": "message CheckUserEmailResponse {\n\tbool exists = 1; // 是否已被使用\n}", "doc": "" }, { @@ -17900,6 +17934,16 @@ "code": "message FindUserTrafficBillsResponse {\n\trepeated UserTrafficBill userTrafficBills = 1;\n}", "doc": "" }, + { + "name": "FindUserVerifiedEmailWithUsernameRequest", + "code": "message FindUserVerifiedEmailWithUsernameRequest {\n\tstring username = 1; // 用户名\n}", + "doc": "根据用户名查询用户绑定的邮箱" + }, + { + "name": "FindUserVerifiedEmailWithUsernameResponse", + "code": "message FindUserVerifiedEmailWithUsernameResponse {\n\tstring email = 1; // 已绑定邮箱地址\n}", + "doc": "" + }, { "name": "FindVerifiedNSDomainOnClusterRequest", "code": "message FindVerifiedNSDomainOnClusterRequest {\n\tint64 nsClusterId = 1; // 集群ID\n\tstring name = 2; // 域名\n}", @@ -19345,6 +19389,16 @@ "code": "message SendUserEmailVerificationRequest {\n\tstring email = 1; // 待验证邮箱\n}", "doc": "发送邮箱认证" }, + { + "name": "SendUserVerifyCodeRequest", + "code": "message SendUserVerifyCodeRequest {\n\tstring type = 1; // 类型:重置密码(resetPassword)\n\tstring email = 2; // 已验证邮箱地址\n\tstring mobile = 3; // 已验证手机号\n}", + "doc": "发送重置密码验证码" + }, + { + "name": "SendUserVerifyCodeResponse", + "code": "message SendUserVerifyCodeResponse {\n\tint32 codeLength = 1; // 验证码长度\n}", + "doc": "" + }, { "name": "Server", "code": "message Server {\n\tint64 id = 1;\n\tbool isOn = 18;\n\tstring type = 2;\n\tstring name = 3;\n\tstring description = 4;\n\tbytes includeNodes = 5;\n\tbytes excludeNodes = 6;\n\tint64 createdAt = 7;\n\tstring dnsName = 19;\n\tbool supportCNAME = 23;\n\tint64 userPlanId = 24;\n\n\t// 配置相关\n\tbytes config = 17;\n\tbytes serverNamesJSON = 8;\n\tstring firstServerName = 33;\n\tint32 countServerNames = 28;\n\tbool isAuditing = 20;\n\tint64 auditingAt = 25;\n\tbytes auditingServerNamesJSON = 21;\n\tServerNameAuditingResult auditingResult = 22;\n\n\tbytes httpJSON = 9;\n\tbytes httpsJSON = 10;\n\tbytes tcpJSON = 11;\n\tbytes tlsJSON = 12;\n\tbytes unixJSON = 13;\n\tbytes udpJSON = 14;\n\tint64 webId = 15;\n\tbytes reverseProxyJSON = 16;\n\n\tstring bandwidthTime = 26;\n\tint64 bandwidthBytes = 27;\n\n\tNodeCluster nodeCluster = 30;\n\trepeated ServerGroup serverGroups = 31;\n\tUser user = 32;\n}", @@ -20820,6 +20874,16 @@ "code": "message ValidateHTTPCacheTaskKeysResponse {\n\trepeated FailKey failKeys = 1;\n\n\n\tmessage FailKey {\n\t\tstring key = 1;\n\t\tstring reasonCode = 2;\n\t}\n}", "doc": "" }, + { + "name": "ValidateUserVerifyCodeRequest", + "code": "message ValidateUserVerifyCodeRequest {\n\tstring type = 1; // 类型:重置密码(resetPassword)\n\tstring email = 2; // 已验证邮箱地址\n\tstring mobile = 3; // 已验证手机号\n\tstring code = 4; // 验证码\n\n\t// 找回密码\n\tstring newPassword = 10; // 新密码\n}", + "doc": "校验验证码" + }, + { + "name": "ValidateUserVerifyCodeResponse", + "code": "message ValidateUserVerifyCodeResponse {\n\tbool isOk = 1; // 是否成功\n\tstring errorCode = 2; // 错误代号\n\tstring errorMessage = 3; // 错误消息\n}", + "doc": "" + }, { "name": "VerifyNSDomainRequest", "code": "message VerifyNSDomainRequest {\n\tint64 nsDomainId = 1;\n}", diff --git a/pkg/rpc/pb/service_user.pb.go b/pkg/rpc/pb/service_user.pb.go index 93b532e..de9aa60 100644 --- a/pkg/rpc/pb/service_user.pb.go +++ b/pkg/rpc/pb/service_user.pb.go @@ -2413,16 +2413,16 @@ func (x *RenewUserServersStateResponse) GetIsEnabled() bool { } // 检查邮箱是否已被验证 -type CheckUserEmailIsUsingRequest struct { +type CheckUserEmailRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` + Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` // 邮箱地址 } -func (x *CheckUserEmailIsUsingRequest) Reset() { - *x = CheckUserEmailIsUsingRequest{} +func (x *CheckUserEmailRequest) Reset() { + *x = CheckUserEmailRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_user_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2430,13 +2430,13 @@ func (x *CheckUserEmailIsUsingRequest) Reset() { } } -func (x *CheckUserEmailIsUsingRequest) String() string { +func (x *CheckUserEmailRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CheckUserEmailIsUsingRequest) ProtoMessage() {} +func (*CheckUserEmailRequest) ProtoMessage() {} -func (x *CheckUserEmailIsUsingRequest) ProtoReflect() protoreflect.Message { +func (x *CheckUserEmailRequest) ProtoReflect() protoreflect.Message { mi := &file_service_user_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2448,28 +2448,28 @@ func (x *CheckUserEmailIsUsingRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CheckUserEmailIsUsingRequest.ProtoReflect.Descriptor instead. -func (*CheckUserEmailIsUsingRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use CheckUserEmailRequest.ProtoReflect.Descriptor instead. +func (*CheckUserEmailRequest) Descriptor() ([]byte, []int) { return file_service_user_proto_rawDescGZIP(), []int{40} } -func (x *CheckUserEmailIsUsingRequest) GetEmail() string { +func (x *CheckUserEmailRequest) GetEmail() string { if x != nil { return x.Email } return "" } -type CheckUserEmailIsUsingResponse struct { +type CheckUserEmailResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IsUsing bool `protobuf:"varint,1,opt,name=isUsing,proto3" json:"isUsing,omitempty"` // 是否已被使用 + Exists bool `protobuf:"varint,1,opt,name=exists,proto3" json:"exists,omitempty"` // 是否已被使用 } -func (x *CheckUserEmailIsUsingResponse) Reset() { - *x = CheckUserEmailIsUsingResponse{} +func (x *CheckUserEmailResponse) Reset() { + *x = CheckUserEmailResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_user_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2477,13 +2477,13 @@ func (x *CheckUserEmailIsUsingResponse) Reset() { } } -func (x *CheckUserEmailIsUsingResponse) String() string { +func (x *CheckUserEmailResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CheckUserEmailIsUsingResponse) ProtoMessage() {} +func (*CheckUserEmailResponse) ProtoMessage() {} -func (x *CheckUserEmailIsUsingResponse) ProtoReflect() protoreflect.Message { +func (x *CheckUserEmailResponse) ProtoReflect() protoreflect.Message { mi := &file_service_user_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2495,18 +2495,113 @@ func (x *CheckUserEmailIsUsingResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CheckUserEmailIsUsingResponse.ProtoReflect.Descriptor instead. -func (*CheckUserEmailIsUsingResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use CheckUserEmailResponse.ProtoReflect.Descriptor instead. +func (*CheckUserEmailResponse) Descriptor() ([]byte, []int) { return file_service_user_proto_rawDescGZIP(), []int{41} } -func (x *CheckUserEmailIsUsingResponse) GetIsUsing() bool { +func (x *CheckUserEmailResponse) GetExists() bool { if x != nil { - return x.IsUsing + return x.Exists } return false } +// 根据用户名查询用户绑定的邮箱 +type FindUserVerifiedEmailWithUsernameRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` // 用户名 +} + +func (x *FindUserVerifiedEmailWithUsernameRequest) Reset() { + *x = FindUserVerifiedEmailWithUsernameRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindUserVerifiedEmailWithUsernameRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindUserVerifiedEmailWithUsernameRequest) ProtoMessage() {} + +func (x *FindUserVerifiedEmailWithUsernameRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_user_proto_msgTypes[42] + 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 FindUserVerifiedEmailWithUsernameRequest.ProtoReflect.Descriptor instead. +func (*FindUserVerifiedEmailWithUsernameRequest) Descriptor() ([]byte, []int) { + return file_service_user_proto_rawDescGZIP(), []int{42} +} + +func (x *FindUserVerifiedEmailWithUsernameRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +type FindUserVerifiedEmailWithUsernameResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` // 已绑定邮箱地址 +} + +func (x *FindUserVerifiedEmailWithUsernameResponse) Reset() { + *x = FindUserVerifiedEmailWithUsernameResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindUserVerifiedEmailWithUsernameResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindUserVerifiedEmailWithUsernameResponse) ProtoMessage() {} + +func (x *FindUserVerifiedEmailWithUsernameResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_user_proto_msgTypes[43] + 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 FindUserVerifiedEmailWithUsernameResponse.ProtoReflect.Descriptor instead. +func (*FindUserVerifiedEmailWithUsernameResponse) Descriptor() ([]byte, []int) { + return file_service_user_proto_rawDescGZIP(), []int{43} +} + +func (x *FindUserVerifiedEmailWithUsernameResponse) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + type ComposeUserDashboardResponse_DailyTrafficStat struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2519,7 +2614,7 @@ type ComposeUserDashboardResponse_DailyTrafficStat struct { func (x *ComposeUserDashboardResponse_DailyTrafficStat) Reset() { *x = ComposeUserDashboardResponse_DailyTrafficStat{} if protoimpl.UnsafeEnabled { - mi := &file_service_user_proto_msgTypes[42] + mi := &file_service_user_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2532,7 +2627,7 @@ func (x *ComposeUserDashboardResponse_DailyTrafficStat) String() string { func (*ComposeUserDashboardResponse_DailyTrafficStat) ProtoMessage() {} func (x *ComposeUserDashboardResponse_DailyTrafficStat) ProtoReflect() protoreflect.Message { - mi := &file_service_user_proto_msgTypes[42] + mi := &file_service_user_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2574,7 +2669,7 @@ type ComposeUserDashboardResponse_DailyPeekBandwidthStat struct { func (x *ComposeUserDashboardResponse_DailyPeekBandwidthStat) Reset() { *x = ComposeUserDashboardResponse_DailyPeekBandwidthStat{} if protoimpl.UnsafeEnabled { - mi := &file_service_user_proto_msgTypes[43] + mi := &file_service_user_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2587,7 +2682,7 @@ func (x *ComposeUserDashboardResponse_DailyPeekBandwidthStat) String() string { func (*ComposeUserDashboardResponse_DailyPeekBandwidthStat) ProtoMessage() {} func (x *ComposeUserDashboardResponse_DailyPeekBandwidthStat) ProtoReflect() protoreflect.Message { - mi := &file_service_user_proto_msgTypes[43] + mi := &file_service_user_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2629,7 +2724,7 @@ type ComposeUserGlobalBoardResponse_DailyStat struct { func (x *ComposeUserGlobalBoardResponse_DailyStat) Reset() { *x = ComposeUserGlobalBoardResponse_DailyStat{} if protoimpl.UnsafeEnabled { - mi := &file_service_user_proto_msgTypes[44] + mi := &file_service_user_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2642,7 +2737,7 @@ func (x *ComposeUserGlobalBoardResponse_DailyStat) String() string { func (*ComposeUserGlobalBoardResponse_DailyStat) ProtoMessage() {} func (x *ComposeUserGlobalBoardResponse_DailyStat) ProtoReflect() protoreflect.Message { - mi := &file_service_user_proto_msgTypes[44] + mi := &file_service_user_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2686,7 +2781,7 @@ type ComposeUserGlobalBoardResponse_TrafficStat struct { func (x *ComposeUserGlobalBoardResponse_TrafficStat) Reset() { *x = ComposeUserGlobalBoardResponse_TrafficStat{} if protoimpl.UnsafeEnabled { - mi := &file_service_user_proto_msgTypes[45] + mi := &file_service_user_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2699,7 +2794,7 @@ func (x *ComposeUserGlobalBoardResponse_TrafficStat) String() string { func (*ComposeUserGlobalBoardResponse_TrafficStat) ProtoMessage() {} func (x *ComposeUserGlobalBoardResponse_TrafficStat) ProtoReflect() protoreflect.Message { - mi := &file_service_user_proto_msgTypes[45] + mi := &file_service_user_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3057,142 +3152,157 @@ var file_service_user_proto_rawDesc = []byte{ 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x45, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x34, 0x0a, 0x1c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, - 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x49, 0x73, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x39, 0x0a, 0x1d, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x49, 0x73, 0x55, - 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x69, 0x73, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, - 0x73, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x32, 0xf4, 0x0f, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x55, - 0x73, 0x65, 0x72, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, - 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x2d, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, + 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x30, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, + 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x46, 0x0a, 0x28, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, + 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x57, + 0x69, 0x74, 0x68, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x41, + 0x0a, 0x29, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x55, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, + 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x32, 0xe2, 0x10, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, + 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, + 0x0a, 0x0c, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x17, + 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, + 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x33, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, - 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x33, 0x0a, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x33, 0x0a, 0x0a, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x12, 0x33, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x15, - 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x14, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, - 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1f, 0x2e, - 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, - 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0f, 0x66, 0x69, 0x6e, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x45, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x50, 0x0a, 0x11, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, - 0x73, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x38, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x12, 0x14, - 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0e, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x2e, - 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, - 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x3d, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1a, 0x2e, 0x70, 0x62, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, - 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x59, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, - 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, - 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x15, 0x66, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, - 0x64, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x2e, 0x70, 0x62, - 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x43, 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x4b, 0x0a, 0x16, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, - 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, - 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x55, 0x73, - 0x65, 0x72, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x10, 0x66, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, - 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, - 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x74, 0x0a, 0x1d, 0x66, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x28, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x55, - 0x73, 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, - 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x42, 0x6f, 0x61, 0x72, - 0x64, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x55, 0x73, - 0x65, 0x72, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, - 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x42, 0x6f, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x18, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x54, 0x50, 0x57, 0x69, 0x74, 0x68, 0x55, 0x73, 0x65, 0x72, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, - 0x73, 0x65, 0x72, 0x4f, 0x54, 0x50, 0x57, 0x69, 0x74, 0x68, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, - 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x54, 0x50, 0x57, 0x69, 0x74, 0x68, 0x55, - 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x50, 0x0a, 0x11, 0x66, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, - 0x65, 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x45, 0x0a, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, - 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x15, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, - 0x64, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x12, 0x4d, 0x0a, 0x14, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x41, 0x6c, 0x6c, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x55, 0x73, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x52, + 0x50, 0x43, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4d, 0x0a, 0x10, 0x6c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x55, 0x73, + 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, + 0x0a, 0x0f, 0x66, 0x69, 0x6e, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x11, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x55, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, + 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x09, + 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x70, - 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x5c, 0x0a, 0x15, 0x72, 0x65, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x2e, - 0x52, 0x65, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x70, - 0x62, 0x2e, 0x52, 0x65, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5c, 0x0a, 0x15, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, - 0x6c, 0x49, 0x73, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x49, 0x73, 0x55, 0x73, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x49, 0x73, - 0x55, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x06, 0x5a, - 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x73, 0x12, 0x3d, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x12, 0x59, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x2e, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x73, 0x68, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x70, 0x62, + 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x73, 0x68, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, + 0x15, 0x66, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, + 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, + 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x12, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x12, 0x4b, 0x0a, 0x16, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, + 0x72, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, + 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, + 0x10, 0x66, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, + 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x1d, + 0x66, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x2e, + 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, + 0x64, 0x41, 0x6c, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x44, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x21, 0x2e, 0x70, + 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, 0x6c, 0x6f, + 0x62, 0x61, 0x6c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x22, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x18, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, + 0x4f, 0x54, 0x50, 0x57, 0x69, 0x74, 0x68, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x23, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x54, + 0x50, 0x57, 0x69, 0x74, 0x68, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, + 0x73, 0x65, 0x72, 0x4f, 0x54, 0x50, 0x57, 0x69, 0x74, 0x68, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x11, 0x66, 0x69, + 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, + 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, + 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x13, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, + 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x15, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x20, 0x2e, 0x70, + 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, + 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x50, 0x43, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x5c, + 0x0a, 0x15, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x15, + 0x72, 0x65, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6e, 0x65, 0x77, + 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6e, + 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0e, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x19, 0x2e, 0x70, + 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x21, 0x66, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x57, 0x69, 0x74, + 0x68, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x2e, 0x70, 0x62, 0x2e, 0x46, + 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x45, + 0x6d, 0x61, 0x69, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, + 0x64, 0x55, 0x73, 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x45, 0x6d, 0x61, + 0x69, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3207,7 +3317,7 @@ func file_service_user_proto_rawDescGZIP() []byte { return file_service_user_proto_rawDescData } -var file_service_user_proto_msgTypes = make([]protoimpl.MessageInfo, 46) +var file_service_user_proto_msgTypes = make([]protoimpl.MessageInfo, 48) var file_service_user_proto_goTypes = []interface{}{ (*CreateUserRequest)(nil), // 0: pb.CreateUserRequest (*CreateUserResponse)(nil), // 1: pb.CreateUserResponse @@ -3249,30 +3359,32 @@ var file_service_user_proto_goTypes = []interface{}{ (*CheckUserServersStateResponse)(nil), // 37: pb.CheckUserServersStateResponse (*RenewUserServersStateRequest)(nil), // 38: pb.RenewUserServersStateRequest (*RenewUserServersStateResponse)(nil), // 39: pb.RenewUserServersStateResponse - (*CheckUserEmailIsUsingRequest)(nil), // 40: pb.CheckUserEmailIsUsingRequest - (*CheckUserEmailIsUsingResponse)(nil), // 41: pb.CheckUserEmailIsUsingResponse - (*ComposeUserDashboardResponse_DailyTrafficStat)(nil), // 42: pb.ComposeUserDashboardResponse.DailyTrafficStat - (*ComposeUserDashboardResponse_DailyPeekBandwidthStat)(nil), // 43: pb.ComposeUserDashboardResponse.DailyPeekBandwidthStat - (*ComposeUserGlobalBoardResponse_DailyStat)(nil), // 44: pb.ComposeUserGlobalBoardResponse.DailyStat - (*ComposeUserGlobalBoardResponse_TrafficStat)(nil), // 45: pb.ComposeUserGlobalBoardResponse.TrafficStat - (*User)(nil), // 46: pb.User - (*UserFeature)(nil), // 47: pb.UserFeature - (*NodeValue)(nil), // 48: pb.NodeValue - (*RPCSuccess)(nil), // 49: pb.RPCSuccess - (*RPCCountResponse)(nil), // 50: pb.RPCCountResponse + (*CheckUserEmailRequest)(nil), // 40: pb.CheckUserEmailRequest + (*CheckUserEmailResponse)(nil), // 41: pb.CheckUserEmailResponse + (*FindUserVerifiedEmailWithUsernameRequest)(nil), // 42: pb.FindUserVerifiedEmailWithUsernameRequest + (*FindUserVerifiedEmailWithUsernameResponse)(nil), // 43: pb.FindUserVerifiedEmailWithUsernameResponse + (*ComposeUserDashboardResponse_DailyTrafficStat)(nil), // 44: pb.ComposeUserDashboardResponse.DailyTrafficStat + (*ComposeUserDashboardResponse_DailyPeekBandwidthStat)(nil), // 45: pb.ComposeUserDashboardResponse.DailyPeekBandwidthStat + (*ComposeUserGlobalBoardResponse_DailyStat)(nil), // 46: pb.ComposeUserGlobalBoardResponse.DailyStat + (*ComposeUserGlobalBoardResponse_TrafficStat)(nil), // 47: pb.ComposeUserGlobalBoardResponse.TrafficStat + (*User)(nil), // 48: pb.User + (*UserFeature)(nil), // 49: pb.UserFeature + (*NodeValue)(nil), // 50: pb.NodeValue + (*RPCSuccess)(nil), // 51: pb.RPCSuccess + (*RPCCountResponse)(nil), // 52: pb.RPCCountResponse } var file_service_user_proto_depIdxs = []int32{ - 46, // 0: pb.ListEnabledUsersResponse.users:type_name -> pb.User - 46, // 1: pb.FindEnabledUserResponse.user:type_name -> pb.User - 42, // 2: pb.ComposeUserDashboardResponse.dailyTrafficStats:type_name -> pb.ComposeUserDashboardResponse.DailyTrafficStat - 43, // 3: pb.ComposeUserDashboardResponse.dailyPeekBandwidthStats:type_name -> pb.ComposeUserDashboardResponse.DailyPeekBandwidthStat - 47, // 4: pb.FindUserFeaturesResponse.features:type_name -> pb.UserFeature - 47, // 5: pb.FindAllUserFeatureDefinitionsResponse.features:type_name -> pb.UserFeature - 44, // 6: pb.ComposeUserGlobalBoardResponse.dailyStats:type_name -> pb.ComposeUserGlobalBoardResponse.DailyStat - 48, // 7: pb.ComposeUserGlobalBoardResponse.cpuNodeValues:type_name -> pb.NodeValue - 48, // 8: pb.ComposeUserGlobalBoardResponse.memoryNodeValues:type_name -> pb.NodeValue - 48, // 9: pb.ComposeUserGlobalBoardResponse.loadNodeValues:type_name -> pb.NodeValue - 45, // 10: pb.ComposeUserGlobalBoardResponse.topTrafficStats:type_name -> pb.ComposeUserGlobalBoardResponse.TrafficStat + 48, // 0: pb.ListEnabledUsersResponse.users:type_name -> pb.User + 48, // 1: pb.FindEnabledUserResponse.user:type_name -> pb.User + 44, // 2: pb.ComposeUserDashboardResponse.dailyTrafficStats:type_name -> pb.ComposeUserDashboardResponse.DailyTrafficStat + 45, // 3: pb.ComposeUserDashboardResponse.dailyPeekBandwidthStats:type_name -> pb.ComposeUserDashboardResponse.DailyPeekBandwidthStat + 49, // 4: pb.FindUserFeaturesResponse.features:type_name -> pb.UserFeature + 49, // 5: pb.FindAllUserFeatureDefinitionsResponse.features:type_name -> pb.UserFeature + 46, // 6: pb.ComposeUserGlobalBoardResponse.dailyStats:type_name -> pb.ComposeUserGlobalBoardResponse.DailyStat + 50, // 7: pb.ComposeUserGlobalBoardResponse.cpuNodeValues:type_name -> pb.NodeValue + 50, // 8: pb.ComposeUserGlobalBoardResponse.memoryNodeValues:type_name -> pb.NodeValue + 50, // 9: pb.ComposeUserGlobalBoardResponse.loadNodeValues:type_name -> pb.NodeValue + 47, // 10: pb.ComposeUserGlobalBoardResponse.topTrafficStats:type_name -> pb.ComposeUserGlobalBoardResponse.TrafficStat 0, // 11: pb.UserService.createUser:input_type -> pb.CreateUserRequest 2, // 12: pb.UserService.registerUser:input_type -> pb.RegisterUserRequest 4, // 13: pb.UserService.verifyUser:input_type -> pb.VerifyUserRequest @@ -3298,35 +3410,37 @@ var file_service_user_proto_depIdxs = []int32{ 35, // 33: pb.UserService.updateUserPricePeriod:input_type -> pb.UpdateUserPricePeriodRequest 36, // 34: pb.UserService.checkUserServersState:input_type -> pb.CheckUserServersStateRequest 38, // 35: pb.UserService.renewUserServersState:input_type -> pb.RenewUserServersStateRequest - 40, // 36: pb.UserService.checkUserEmailIsUsing:input_type -> pb.CheckUserEmailIsUsingRequest - 1, // 37: pb.UserService.createUser:output_type -> pb.CreateUserResponse - 3, // 38: pb.UserService.registerUser:output_type -> pb.RegisterUserResponse - 49, // 39: pb.UserService.verifyUser:output_type -> pb.RPCSuccess - 49, // 40: pb.UserService.updateUser:output_type -> pb.RPCSuccess - 49, // 41: pb.UserService.deleteUser:output_type -> pb.RPCSuccess - 50, // 42: pb.UserService.countAllEnabledUsers:output_type -> pb.RPCCountResponse - 9, // 43: pb.UserService.listEnabledUsers:output_type -> pb.ListEnabledUsersResponse - 11, // 44: pb.UserService.findEnabledUser:output_type -> pb.FindEnabledUserResponse - 13, // 45: pb.UserService.checkUserUsername:output_type -> pb.CheckUserUsernameResponse - 15, // 46: pb.UserService.loginUser:output_type -> pb.LoginUserResponse - 49, // 47: pb.UserService.updateUserInfo:output_type -> pb.RPCSuccess - 49, // 48: pb.UserService.updateUserLogin:output_type -> pb.RPCSuccess - 19, // 49: pb.UserService.composeUserDashboard:output_type -> pb.ComposeUserDashboardResponse - 21, // 50: pb.UserService.findUserNodeClusterId:output_type -> pb.FindUserNodeClusterIdResponse - 49, // 51: pb.UserService.updateUserFeatures:output_type -> pb.RPCSuccess - 49, // 52: pb.UserService.updateAllUsersFeatures:output_type -> pb.RPCSuccess - 25, // 53: pb.UserService.findUserFeatures:output_type -> pb.FindUserFeaturesResponse - 27, // 54: pb.UserService.findAllUserFeatureDefinitions:output_type -> pb.FindAllUserFeatureDefinitionsResponse - 29, // 55: pb.UserService.composeUserGlobalBoard:output_type -> pb.ComposeUserGlobalBoardResponse - 31, // 56: pb.UserService.checkUserOTPWithUsername:output_type -> pb.CheckUserOTPWithUsernameResponse - 33, // 57: pb.UserService.findUserPriceInfo:output_type -> pb.FindUserPriceInfoResponse - 49, // 58: pb.UserService.updateUserPriceType:output_type -> pb.RPCSuccess - 49, // 59: pb.UserService.updateUserPricePeriod:output_type -> pb.RPCSuccess - 37, // 60: pb.UserService.checkUserServersState:output_type -> pb.CheckUserServersStateResponse - 39, // 61: pb.UserService.renewUserServersState:output_type -> pb.RenewUserServersStateResponse - 41, // 62: pb.UserService.checkUserEmailIsUsing:output_type -> pb.CheckUserEmailIsUsingResponse - 37, // [37:63] is the sub-list for method output_type - 11, // [11:37] is the sub-list for method input_type + 40, // 36: pb.UserService.checkUserEmail:input_type -> pb.CheckUserEmailRequest + 42, // 37: pb.UserService.findUserVerifiedEmailWithUsername:input_type -> pb.FindUserVerifiedEmailWithUsernameRequest + 1, // 38: pb.UserService.createUser:output_type -> pb.CreateUserResponse + 3, // 39: pb.UserService.registerUser:output_type -> pb.RegisterUserResponse + 51, // 40: pb.UserService.verifyUser:output_type -> pb.RPCSuccess + 51, // 41: pb.UserService.updateUser:output_type -> pb.RPCSuccess + 51, // 42: pb.UserService.deleteUser:output_type -> pb.RPCSuccess + 52, // 43: pb.UserService.countAllEnabledUsers:output_type -> pb.RPCCountResponse + 9, // 44: pb.UserService.listEnabledUsers:output_type -> pb.ListEnabledUsersResponse + 11, // 45: pb.UserService.findEnabledUser:output_type -> pb.FindEnabledUserResponse + 13, // 46: pb.UserService.checkUserUsername:output_type -> pb.CheckUserUsernameResponse + 15, // 47: pb.UserService.loginUser:output_type -> pb.LoginUserResponse + 51, // 48: pb.UserService.updateUserInfo:output_type -> pb.RPCSuccess + 51, // 49: pb.UserService.updateUserLogin:output_type -> pb.RPCSuccess + 19, // 50: pb.UserService.composeUserDashboard:output_type -> pb.ComposeUserDashboardResponse + 21, // 51: pb.UserService.findUserNodeClusterId:output_type -> pb.FindUserNodeClusterIdResponse + 51, // 52: pb.UserService.updateUserFeatures:output_type -> pb.RPCSuccess + 51, // 53: pb.UserService.updateAllUsersFeatures:output_type -> pb.RPCSuccess + 25, // 54: pb.UserService.findUserFeatures:output_type -> pb.FindUserFeaturesResponse + 27, // 55: pb.UserService.findAllUserFeatureDefinitions:output_type -> pb.FindAllUserFeatureDefinitionsResponse + 29, // 56: pb.UserService.composeUserGlobalBoard:output_type -> pb.ComposeUserGlobalBoardResponse + 31, // 57: pb.UserService.checkUserOTPWithUsername:output_type -> pb.CheckUserOTPWithUsernameResponse + 33, // 58: pb.UserService.findUserPriceInfo:output_type -> pb.FindUserPriceInfoResponse + 51, // 59: pb.UserService.updateUserPriceType:output_type -> pb.RPCSuccess + 51, // 60: pb.UserService.updateUserPricePeriod:output_type -> pb.RPCSuccess + 37, // 61: pb.UserService.checkUserServersState:output_type -> pb.CheckUserServersStateResponse + 39, // 62: pb.UserService.renewUserServersState:output_type -> pb.RenewUserServersStateResponse + 41, // 63: pb.UserService.checkUserEmail:output_type -> pb.CheckUserEmailResponse + 43, // 64: pb.UserService.findUserVerifiedEmailWithUsername:output_type -> pb.FindUserVerifiedEmailWithUsernameResponse + 38, // [38:65] is the sub-list for method output_type + 11, // [11:38] is the sub-list for method input_type 11, // [11:11] is the sub-list for extension type_name 11, // [11:11] is the sub-list for extension extendee 0, // [0:11] is the sub-list for field type_name @@ -3823,7 +3937,7 @@ func file_service_user_proto_init() { } } file_service_user_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckUserEmailIsUsingRequest); i { + switch v := v.(*CheckUserEmailRequest); i { case 0: return &v.state case 1: @@ -3835,7 +3949,7 @@ func file_service_user_proto_init() { } } file_service_user_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckUserEmailIsUsingResponse); i { + switch v := v.(*CheckUserEmailResponse); i { case 0: return &v.state case 1: @@ -3847,7 +3961,7 @@ func file_service_user_proto_init() { } } file_service_user_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComposeUserDashboardResponse_DailyTrafficStat); i { + switch v := v.(*FindUserVerifiedEmailWithUsernameRequest); i { case 0: return &v.state case 1: @@ -3859,7 +3973,7 @@ func file_service_user_proto_init() { } } file_service_user_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComposeUserDashboardResponse_DailyPeekBandwidthStat); i { + switch v := v.(*FindUserVerifiedEmailWithUsernameResponse); i { case 0: return &v.state case 1: @@ -3871,7 +3985,7 @@ func file_service_user_proto_init() { } } file_service_user_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComposeUserGlobalBoardResponse_DailyStat); i { + switch v := v.(*ComposeUserDashboardResponse_DailyTrafficStat); i { case 0: return &v.state case 1: @@ -3883,6 +3997,30 @@ func file_service_user_proto_init() { } } file_service_user_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComposeUserDashboardResponse_DailyPeekBandwidthStat); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_user_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComposeUserGlobalBoardResponse_DailyStat); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_user_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ComposeUserGlobalBoardResponse_TrafficStat); i { case 0: return &v.state @@ -3901,7 +4039,7 @@ func file_service_user_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_service_user_proto_rawDesc, NumEnums: 0, - NumMessages: 46, + NumMessages: 48, NumExtensions: 0, NumServices: 1, }, @@ -3978,7 +4116,9 @@ type UserServiceClient interface { // 更新用户服务可用状态 RenewUserServersState(ctx context.Context, in *RenewUserServersStateRequest, opts ...grpc.CallOption) (*RenewUserServersStateResponse, error) // 检查邮箱是否已被使用 - CheckUserEmailIsUsing(ctx context.Context, in *CheckUserEmailIsUsingRequest, opts ...grpc.CallOption) (*CheckUserEmailIsUsingResponse, error) + CheckUserEmail(ctx context.Context, in *CheckUserEmailRequest, opts ...grpc.CallOption) (*CheckUserEmailResponse, error) + // 根据用户名查询用户绑定的邮箱 + FindUserVerifiedEmailWithUsername(ctx context.Context, in *FindUserVerifiedEmailWithUsernameRequest, opts ...grpc.CallOption) (*FindUserVerifiedEmailWithUsernameResponse, error) } type userServiceClient struct { @@ -4214,9 +4354,18 @@ func (c *userServiceClient) RenewUserServersState(ctx context.Context, in *Renew return out, nil } -func (c *userServiceClient) CheckUserEmailIsUsing(ctx context.Context, in *CheckUserEmailIsUsingRequest, opts ...grpc.CallOption) (*CheckUserEmailIsUsingResponse, error) { - out := new(CheckUserEmailIsUsingResponse) - err := c.cc.Invoke(ctx, "/pb.UserService/checkUserEmailIsUsing", in, out, opts...) +func (c *userServiceClient) CheckUserEmail(ctx context.Context, in *CheckUserEmailRequest, opts ...grpc.CallOption) (*CheckUserEmailResponse, error) { + out := new(CheckUserEmailResponse) + err := c.cc.Invoke(ctx, "/pb.UserService/checkUserEmail", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *userServiceClient) FindUserVerifiedEmailWithUsername(ctx context.Context, in *FindUserVerifiedEmailWithUsernameRequest, opts ...grpc.CallOption) (*FindUserVerifiedEmailWithUsernameResponse, error) { + out := new(FindUserVerifiedEmailWithUsernameResponse) + err := c.cc.Invoke(ctx, "/pb.UserService/findUserVerifiedEmailWithUsername", in, out, opts...) if err != nil { return nil, err } @@ -4276,7 +4425,9 @@ type UserServiceServer interface { // 更新用户服务可用状态 RenewUserServersState(context.Context, *RenewUserServersStateRequest) (*RenewUserServersStateResponse, error) // 检查邮箱是否已被使用 - CheckUserEmailIsUsing(context.Context, *CheckUserEmailIsUsingRequest) (*CheckUserEmailIsUsingResponse, error) + CheckUserEmail(context.Context, *CheckUserEmailRequest) (*CheckUserEmailResponse, error) + // 根据用户名查询用户绑定的邮箱 + FindUserVerifiedEmailWithUsername(context.Context, *FindUserVerifiedEmailWithUsernameRequest) (*FindUserVerifiedEmailWithUsernameResponse, error) } // UnimplementedUserServiceServer can be embedded to have forward compatible implementations. @@ -4358,8 +4509,11 @@ func (*UnimplementedUserServiceServer) CheckUserServersState(context.Context, *C func (*UnimplementedUserServiceServer) RenewUserServersState(context.Context, *RenewUserServersStateRequest) (*RenewUserServersStateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RenewUserServersState not implemented") } -func (*UnimplementedUserServiceServer) CheckUserEmailIsUsing(context.Context, *CheckUserEmailIsUsingRequest) (*CheckUserEmailIsUsingResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CheckUserEmailIsUsing not implemented") +func (*UnimplementedUserServiceServer) CheckUserEmail(context.Context, *CheckUserEmailRequest) (*CheckUserEmailResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CheckUserEmail not implemented") +} +func (*UnimplementedUserServiceServer) FindUserVerifiedEmailWithUsername(context.Context, *FindUserVerifiedEmailWithUsernameRequest) (*FindUserVerifiedEmailWithUsernameResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FindUserVerifiedEmailWithUsername not implemented") } func RegisterUserServiceServer(s *grpc.Server, srv UserServiceServer) { @@ -4816,20 +4970,38 @@ func _UserService_RenewUserServersState_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } -func _UserService_CheckUserEmailIsUsing_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CheckUserEmailIsUsingRequest) +func _UserService_CheckUserEmail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckUserEmailRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(UserServiceServer).CheckUserEmailIsUsing(ctx, in) + return srv.(UserServiceServer).CheckUserEmail(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/pb.UserService/CheckUserEmailIsUsing", + FullMethod: "/pb.UserService/CheckUserEmail", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(UserServiceServer).CheckUserEmailIsUsing(ctx, req.(*CheckUserEmailIsUsingRequest)) + return srv.(UserServiceServer).CheckUserEmail(ctx, req.(*CheckUserEmailRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UserService_FindUserVerifiedEmailWithUsername_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FindUserVerifiedEmailWithUsernameRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserServiceServer).FindUserVerifiedEmailWithUsername(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.UserService/FindUserVerifiedEmailWithUsername", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserServiceServer).FindUserVerifiedEmailWithUsername(ctx, req.(*FindUserVerifiedEmailWithUsernameRequest)) } return interceptor(ctx, in, info, handler) } @@ -4939,8 +5111,12 @@ var _UserService_serviceDesc = grpc.ServiceDesc{ Handler: _UserService_RenewUserServersState_Handler, }, { - MethodName: "checkUserEmailIsUsing", - Handler: _UserService_CheckUserEmailIsUsing_Handler, + MethodName: "checkUserEmail", + Handler: _UserService_CheckUserEmail_Handler, + }, + { + MethodName: "findUserVerifiedEmailWithUsername", + Handler: _UserService_FindUserVerifiedEmailWithUsername_Handler, }, }, Streams: []grpc.StreamDesc{}, diff --git a/pkg/rpc/pb/service_user_verify_code.pb.go b/pkg/rpc/pb/service_user_verify_code.pb.go new file mode 100644 index 0000000..293e825 --- /dev/null +++ b/pkg/rpc/pb/service_user_verify_code.pb.go @@ -0,0 +1,560 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0 +// protoc v3.19.4 +// source: service_user_verify_code.proto + +package pb + +import ( + context "context" + proto "github.com/golang/protobuf/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +// 发送重置密码验证码 +type SendUserVerifyCodeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // 类型:重置密码(resetPassword) + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` // 已验证邮箱地址 + Mobile string `protobuf:"bytes,3,opt,name=mobile,proto3" json:"mobile,omitempty"` // 已验证手机号 +} + +func (x *SendUserVerifyCodeRequest) Reset() { + *x = SendUserVerifyCodeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_verify_code_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendUserVerifyCodeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendUserVerifyCodeRequest) ProtoMessage() {} + +func (x *SendUserVerifyCodeRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_user_verify_code_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendUserVerifyCodeRequest.ProtoReflect.Descriptor instead. +func (*SendUserVerifyCodeRequest) Descriptor() ([]byte, []int) { + return file_service_user_verify_code_proto_rawDescGZIP(), []int{0} +} + +func (x *SendUserVerifyCodeRequest) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *SendUserVerifyCodeRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *SendUserVerifyCodeRequest) GetMobile() string { + if x != nil { + return x.Mobile + } + return "" +} + +type SendUserVerifyCodeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CodeLength int32 `protobuf:"varint,1,opt,name=codeLength,proto3" json:"codeLength,omitempty"` // 验证码长度 +} + +func (x *SendUserVerifyCodeResponse) Reset() { + *x = SendUserVerifyCodeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_verify_code_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendUserVerifyCodeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendUserVerifyCodeResponse) ProtoMessage() {} + +func (x *SendUserVerifyCodeResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_user_verify_code_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendUserVerifyCodeResponse.ProtoReflect.Descriptor instead. +func (*SendUserVerifyCodeResponse) Descriptor() ([]byte, []int) { + return file_service_user_verify_code_proto_rawDescGZIP(), []int{1} +} + +func (x *SendUserVerifyCodeResponse) GetCodeLength() int32 { + if x != nil { + return x.CodeLength + } + return 0 +} + +// 校验验证码 +type ValidateUserVerifyCodeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // 类型:重置密码(resetPassword) + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` // 已验证邮箱地址 + Mobile string `protobuf:"bytes,3,opt,name=mobile,proto3" json:"mobile,omitempty"` // 已验证手机号 + Code string `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"` // 验证码 + // 找回密码 + NewPassword string `protobuf:"bytes,10,opt,name=newPassword,proto3" json:"newPassword,omitempty"` // 新密码 +} + +func (x *ValidateUserVerifyCodeRequest) Reset() { + *x = ValidateUserVerifyCodeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_verify_code_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidateUserVerifyCodeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateUserVerifyCodeRequest) ProtoMessage() {} + +func (x *ValidateUserVerifyCodeRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_user_verify_code_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidateUserVerifyCodeRequest.ProtoReflect.Descriptor instead. +func (*ValidateUserVerifyCodeRequest) Descriptor() ([]byte, []int) { + return file_service_user_verify_code_proto_rawDescGZIP(), []int{2} +} + +func (x *ValidateUserVerifyCodeRequest) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *ValidateUserVerifyCodeRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *ValidateUserVerifyCodeRequest) GetMobile() string { + if x != nil { + return x.Mobile + } + return "" +} + +func (x *ValidateUserVerifyCodeRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *ValidateUserVerifyCodeRequest) GetNewPassword() string { + if x != nil { + return x.NewPassword + } + return "" +} + +type ValidateUserVerifyCodeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsOk bool `protobuf:"varint,1,opt,name=isOk,proto3" json:"isOk,omitempty"` // 是否成功 + ErrorCode string `protobuf:"bytes,2,opt,name=errorCode,proto3" json:"errorCode,omitempty"` // 错误代号 + ErrorMessage string `protobuf:"bytes,3,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"` // 错误消息 +} + +func (x *ValidateUserVerifyCodeResponse) Reset() { + *x = ValidateUserVerifyCodeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_verify_code_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidateUserVerifyCodeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateUserVerifyCodeResponse) ProtoMessage() {} + +func (x *ValidateUserVerifyCodeResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_user_verify_code_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidateUserVerifyCodeResponse.ProtoReflect.Descriptor instead. +func (*ValidateUserVerifyCodeResponse) Descriptor() ([]byte, []int) { + return file_service_user_verify_code_proto_rawDescGZIP(), []int{3} +} + +func (x *ValidateUserVerifyCodeResponse) GetIsOk() bool { + if x != nil { + return x.IsOk + } + return false +} + +func (x *ValidateUserVerifyCodeResponse) GetErrorCode() string { + if x != nil { + return x.ErrorCode + } + return "" +} + +func (x *ValidateUserVerifyCodeResponse) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +var File_service_user_verify_code_proto protoreflect.FileDescriptor + +var file_service_user_verify_code_proto_rawDesc = []byte{ + 0x0a, 0x1e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x76, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x02, 0x70, 0x62, 0x22, 0x5d, 0x0a, 0x19, 0x53, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x6d, + 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x62, + 0x69, 0x6c, 0x65, 0x22, 0x3c, 0x0a, 0x1a, 0x53, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x6f, 0x64, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x22, 0x97, 0x01, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, + 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, + 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x77, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x6e, 0x65, 0x77, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x76, 0x0a, 0x1e, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x69, 0x73, 0x4f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x4f, + 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x22, 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x32, 0xcd, 0x01, 0x0a, 0x15, 0x55, 0x73, 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x53, 0x0a, + 0x12, 0x73, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, + 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x16, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x2e, 0x70, + 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x22, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_service_user_verify_code_proto_rawDescOnce sync.Once + file_service_user_verify_code_proto_rawDescData = file_service_user_verify_code_proto_rawDesc +) + +func file_service_user_verify_code_proto_rawDescGZIP() []byte { + file_service_user_verify_code_proto_rawDescOnce.Do(func() { + file_service_user_verify_code_proto_rawDescData = protoimpl.X.CompressGZIP(file_service_user_verify_code_proto_rawDescData) + }) + return file_service_user_verify_code_proto_rawDescData +} + +var file_service_user_verify_code_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_service_user_verify_code_proto_goTypes = []interface{}{ + (*SendUserVerifyCodeRequest)(nil), // 0: pb.SendUserVerifyCodeRequest + (*SendUserVerifyCodeResponse)(nil), // 1: pb.SendUserVerifyCodeResponse + (*ValidateUserVerifyCodeRequest)(nil), // 2: pb.ValidateUserVerifyCodeRequest + (*ValidateUserVerifyCodeResponse)(nil), // 3: pb.ValidateUserVerifyCodeResponse +} +var file_service_user_verify_code_proto_depIdxs = []int32{ + 0, // 0: pb.UserVerifyCodeService.sendUserVerifyCode:input_type -> pb.SendUserVerifyCodeRequest + 2, // 1: pb.UserVerifyCodeService.validateUserVerifyCode:input_type -> pb.ValidateUserVerifyCodeRequest + 1, // 2: pb.UserVerifyCodeService.sendUserVerifyCode:output_type -> pb.SendUserVerifyCodeResponse + 3, // 3: pb.UserVerifyCodeService.validateUserVerifyCode:output_type -> pb.ValidateUserVerifyCodeResponse + 2, // [2:4] is the sub-list for method output_type + 0, // [0:2] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_service_user_verify_code_proto_init() } +func file_service_user_verify_code_proto_init() { + if File_service_user_verify_code_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_service_user_verify_code_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendUserVerifyCodeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_user_verify_code_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendUserVerifyCodeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_user_verify_code_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidateUserVerifyCodeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_user_verify_code_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidateUserVerifyCodeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_service_user_verify_code_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_service_user_verify_code_proto_goTypes, + DependencyIndexes: file_service_user_verify_code_proto_depIdxs, + MessageInfos: file_service_user_verify_code_proto_msgTypes, + }.Build() + File_service_user_verify_code_proto = out.File + file_service_user_verify_code_proto_rawDesc = nil + file_service_user_verify_code_proto_goTypes = nil + file_service_user_verify_code_proto_depIdxs = nil +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConnInterface + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion6 + +// UserVerifyCodeServiceClient is the client API for UserVerifyCodeService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type UserVerifyCodeServiceClient interface { + // 发送重置密码验证码 + SendUserVerifyCode(ctx context.Context, in *SendUserVerifyCodeRequest, opts ...grpc.CallOption) (*SendUserVerifyCodeResponse, error) + // 校验验证码 + ValidateUserVerifyCode(ctx context.Context, in *ValidateUserVerifyCodeRequest, opts ...grpc.CallOption) (*ValidateUserVerifyCodeResponse, error) +} + +type userVerifyCodeServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewUserVerifyCodeServiceClient(cc grpc.ClientConnInterface) UserVerifyCodeServiceClient { + return &userVerifyCodeServiceClient{cc} +} + +func (c *userVerifyCodeServiceClient) SendUserVerifyCode(ctx context.Context, in *SendUserVerifyCodeRequest, opts ...grpc.CallOption) (*SendUserVerifyCodeResponse, error) { + out := new(SendUserVerifyCodeResponse) + err := c.cc.Invoke(ctx, "/pb.UserVerifyCodeService/sendUserVerifyCode", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *userVerifyCodeServiceClient) ValidateUserVerifyCode(ctx context.Context, in *ValidateUserVerifyCodeRequest, opts ...grpc.CallOption) (*ValidateUserVerifyCodeResponse, error) { + out := new(ValidateUserVerifyCodeResponse) + err := c.cc.Invoke(ctx, "/pb.UserVerifyCodeService/validateUserVerifyCode", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// UserVerifyCodeServiceServer is the server API for UserVerifyCodeService service. +type UserVerifyCodeServiceServer interface { + // 发送重置密码验证码 + SendUserVerifyCode(context.Context, *SendUserVerifyCodeRequest) (*SendUserVerifyCodeResponse, error) + // 校验验证码 + ValidateUserVerifyCode(context.Context, *ValidateUserVerifyCodeRequest) (*ValidateUserVerifyCodeResponse, error) +} + +// UnimplementedUserVerifyCodeServiceServer can be embedded to have forward compatible implementations. +type UnimplementedUserVerifyCodeServiceServer struct { +} + +func (*UnimplementedUserVerifyCodeServiceServer) SendUserVerifyCode(context.Context, *SendUserVerifyCodeRequest) (*SendUserVerifyCodeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendUserVerifyCode not implemented") +} +func (*UnimplementedUserVerifyCodeServiceServer) ValidateUserVerifyCode(context.Context, *ValidateUserVerifyCodeRequest) (*ValidateUserVerifyCodeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ValidateUserVerifyCode not implemented") +} + +func RegisterUserVerifyCodeServiceServer(s *grpc.Server, srv UserVerifyCodeServiceServer) { + s.RegisterService(&_UserVerifyCodeService_serviceDesc, srv) +} + +func _UserVerifyCodeService_SendUserVerifyCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendUserVerifyCodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserVerifyCodeServiceServer).SendUserVerifyCode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.UserVerifyCodeService/SendUserVerifyCode", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserVerifyCodeServiceServer).SendUserVerifyCode(ctx, req.(*SendUserVerifyCodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UserVerifyCodeService_ValidateUserVerifyCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ValidateUserVerifyCodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserVerifyCodeServiceServer).ValidateUserVerifyCode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.UserVerifyCodeService/ValidateUserVerifyCode", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserVerifyCodeServiceServer).ValidateUserVerifyCode(ctx, req.(*ValidateUserVerifyCodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _UserVerifyCodeService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "pb.UserVerifyCodeService", + HandlerType: (*UserVerifyCodeServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "sendUserVerifyCode", + Handler: _UserVerifyCodeService_SendUserVerifyCode_Handler, + }, + { + MethodName: "validateUserVerifyCode", + Handler: _UserVerifyCodeService_ValidateUserVerifyCode_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "service_user_verify_code.proto", +} diff --git a/pkg/rpc/protos/service_user.proto b/pkg/rpc/protos/service_user.proto index 2d90e54..29c259d 100644 --- a/pkg/rpc/protos/service_user.proto +++ b/pkg/rpc/protos/service_user.proto @@ -86,7 +86,10 @@ service UserService { rpc renewUserServersState(RenewUserServersStateRequest) returns (RenewUserServersStateResponse); // 检查邮箱是否已被使用 - rpc checkUserEmailIsUsing(CheckUserEmailIsUsingRequest) returns (CheckUserEmailIsUsingResponse); + rpc checkUserEmail(CheckUserEmailRequest) returns (CheckUserEmailResponse); + + // 根据用户名查询用户绑定的邮箱 + rpc findUserVerifiedEmailWithUsername(FindUserVerifiedEmailWithUsernameRequest) returns (FindUserVerifiedEmailWithUsernameResponse); } // 创建用户 @@ -361,10 +364,19 @@ message RenewUserServersStateResponse { } // 检查邮箱是否已被验证 -message CheckUserEmailIsUsingRequest { - string email = 1; +message CheckUserEmailRequest { + string email = 1; // 邮箱地址 } -message CheckUserEmailIsUsingResponse { - bool isUsing = 1; // 是否已被使用 +message CheckUserEmailResponse { + bool exists = 1; // 是否已被使用 +} + +// 根据用户名查询用户绑定的邮箱 +message FindUserVerifiedEmailWithUsernameRequest { + string username = 1; // 用户名 +} + +message FindUserVerifiedEmailWithUsernameResponse { + string email = 1; // 已绑定邮箱地址 } \ No newline at end of file diff --git a/pkg/rpc/protos/service_user_verify_code.proto b/pkg/rpc/protos/service_user_verify_code.proto new file mode 100644 index 0000000..ce6f7e7 --- /dev/null +++ b/pkg/rpc/protos/service_user_verify_code.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; +option go_package = "./pb"; + +package pb; + +// 用户验证码服务 +service UserVerifyCodeService { + // 发送重置密码验证码 + rpc sendUserVerifyCode(SendUserVerifyCodeRequest) returns (SendUserVerifyCodeResponse); + + // 校验验证码 + rpc validateUserVerifyCode(ValidateUserVerifyCodeRequest) returns (ValidateUserVerifyCodeResponse); +} + +// 发送重置密码验证码 +message SendUserVerifyCodeRequest { + string type = 1; // 类型:重置密码(resetPassword) + string email = 2; // 已验证邮箱地址 + string mobile = 3; // 已验证手机号 +} + +message SendUserVerifyCodeResponse { + int32 codeLength = 1; // 验证码长度 +} + +// 校验验证码 +message ValidateUserVerifyCodeRequest { + string type = 1; // 类型:重置密码(resetPassword) + string email = 2; // 已验证邮箱地址 + string mobile = 3; // 已验证手机号 + string code = 4; // 验证码 + + // 找回密码 + string newPassword = 10; // 新密码 +} + +message ValidateUserVerifyCodeResponse { + bool isOk = 1; // 是否成功 + string errorCode = 2; // 错误代号 + string errorMessage = 3; // 错误消息 +} \ No newline at end of file diff --git a/pkg/userconfigs/user_register_config.go b/pkg/userconfigs/user_register_config.go index e60372b..0e13de0 100644 --- a/pkg/userconfigs/user_register_config.go +++ b/pkg/userconfigs/user_register_config.go @@ -3,7 +3,8 @@ package userconfigs const ( - EmailVerificationDefaultLife = 86400 * 2 // 2 days + EmailVerificationDefaultLife = 86400 * 2 // 2 days + EmailResetPasswordDefaultLife = 3600 // 1 hour ) type UserRegisterConfig struct { @@ -22,6 +23,14 @@ type UserRegisterConfig struct { Life int32 `yaml:"life" json:"life"` // 有效期 } `yaml:"emailVerification" json:"emailVerification"` + // 通过邮件找回密码设置 + EmailResetPassword struct { + IsOn bool `yaml:"isOn" json:"isOn"` // 是否启用 + Subject string `yaml:"subject" json:"subject"` // 标题 + Body string `yaml:"body" json:"body"` // 内容 + Life int32 `yaml:"life" json:"life"` // 有效期 + } `yaml:"emailResetPassword" json:"emailResetPassword"` + // CDN CDNIsOn bool `json:"cdnIsOn"` // 是否开启CDN服务 ClusterId int64 `yaml:"clusterId" json:"clusterId"` // 用户创建服务集群 @@ -46,7 +55,7 @@ func DefaultUserRegisterConfig() *UserRegisterConfig { RequireVerification: false, } - // 激活相关 + // 邮箱激活相关 config.EmailVerification.CanLogin = true config.EmailVerification.ShowNotice = true config.EmailVerification.Subject = "【${product.name}】Email地址激活" @@ -57,6 +66,16 @@ func DefaultUserRegisterConfig() *UserRegisterConfig {
此致
${product.name} 管理团队
+` + + // 通过邮件重置密码相关 + config.EmailResetPassword.IsOn = true + config.EmailResetPassword.Subject = "【${product.name}】找回密码" + config.EmailResetPassword.Body = `你正在使用 ${product.name} 提供的找回密码功能,你需要将以下的数字验证码输入到找回密码页面中:
+验证码:${code}
+ +${product.name} 管理团队
+ ` return config