实现用户通过邮件重置密码功能

This commit is contained in:
GoEdgeLab
2022-12-10 15:54:39 +08:00
parent 4d5d85cced
commit bbbc546ec5
6 changed files with 1121 additions and 249 deletions

View File

@@ -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}",

View File

@@ -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{},

View File

@@ -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",
}

View File

@@ -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; // 已绑定邮箱地址
}

View File

@@ -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; // 错误消息
}

View File

@@ -4,6 +4,7 @@ package userconfigs
const (
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 {
<p>此致</p>
<p>${product.name} 管理团队</p>
<p><a href="${url.home}" target="_blank">${url.home}</a></p>
`
// 通过邮件重置密码相关
config.EmailResetPassword.IsOn = true
config.EmailResetPassword.Subject = "【${product.name}】找回密码"
config.EmailResetPassword.Body = `<p>你正在使用 ${product.name} 提供的找回密码功能,你需要将以下的数字验证码输入到找回密码页面中:</p>
<p><strong>验证码:${code}</strong></p>
<p></p>
<p>${product.name} 管理团队</p>
<p><a href="${url.home}" target="_blank">${url.home}</a></p>
`
return config