diff --git a/build/rpc.json b/build/rpc.json index 569258b..111f40a 100644 --- a/build/rpc.json +++ b/build/rpc.json @@ -11542,6 +11542,24 @@ "filename": "service_server_stat_board_chart.proto", "doc": "统计看板条目" }, + { + "name": "SMSSenderService", + "methods": [ + { + "name": "sendSMS", + "requestMessageName": "SendSMSRequest", + "responseMessageName": "SendSMSResponse", + "code": "rpc sendSMS(SendSMSRequest) returns (SendSMSResponse);", + "doc": "发送短信", + "roles": [ + "admin" + ], + "isDeprecated": false + } + ], + "filename": "service_sms_sender.proto", + "doc": "短信发送服务" + }, { "name": "SSLCertService", "methods": [ @@ -12342,6 +12360,15 @@ "roles": [], "isDeprecated": false }, + { + "name": "checkUserMobile", + "requestMessageName": "CheckUserMobileRequest", + "responseMessageName": "CheckUserMobileResponse", + "code": "rpc checkUserMobile(CheckUserMobileRequest) returns (CheckUserMobileResponse);", + "doc": "检查手机号码是否已被使用", + "roles": [], + "isDeprecated": false + }, { "name": "findUserVerifiedEmailWithUsername", "requestMessageName": "FindUserVerifiedEmailWithUsernameRequest", @@ -12872,6 +12899,40 @@ "filename": "service_user_identity.proto", "doc": "用户实名认证服务" }, + { + "name": "UserMobileVerificationService", + "methods": [ + { + "name": "verifyUserMobile", + "requestMessageName": "VerifyUserMobileRequest", + "responseMessageName": "VerifyUserMobileResponse", + "code": "rpc verifyUserMobile(VerifyUserMobileRequest) returns (VerifyUserMobileResponse);", + "doc": "认证手机号码", + "roles": [], + "isDeprecated": false + }, + { + "name": "sendUserMobileVerification", + "requestMessageName": "SendUserMobileVerificationRequest", + "responseMessageName": "SendUserMobileVerificationResponse", + "code": "rpc sendUserMobileVerification(SendUserMobileVerificationRequest) returns (SendUserMobileVerificationResponse);", + "doc": "发送手机号码认证", + "roles": [], + "isDeprecated": false + }, + { + "name": "findLatestUserMobileVerification", + "requestMessageName": "FindLatestUserMobileVerificationRequest", + "responseMessageName": "FindLatestUserMobileVerificationResponse", + "code": "rpc findLatestUserMobileVerification(FindLatestUserMobileVerificationRequest) returns (FindLatestUserMobileVerificationResponse);", + "doc": "查找用户正在等待激活的认证", + "roles": [], + "isDeprecated": false + } + ], + "filename": "service_user_mobile_verification.proto", + "doc": "用户手机号码认证服务" + }, { "name": "UserNodeService", "methods": [ @@ -13856,6 +13917,16 @@ "code": "message CheckUserIdentityIsSubmittedResponse {\n\tbool isSubmitted = 1;\n}", "doc": "" }, + { + "name": "CheckUserMobileRequest", + "code": "message CheckUserMobileRequest {\n\tstring mobile = 1; // 手机号码\n}", + "doc": "检查手机号码是否已被验证" + }, + { + "name": "CheckUserMobileResponse", + "code": "message CheckUserMobileResponse {\n\tbool exists = 1; // 是否已被使用\n}", + "doc": "" + }, { "name": "CheckUserOTPWithUsernameRequest", "code": "message CheckUserOTPWithUsernameRequest {\n\tstring username = 1;\n}", @@ -18786,6 +18857,16 @@ "code": "message FindLatestUserEmailVerificationResponse {\n\tUserEmailVerification userEmailVerification = 1;\n}", "doc": "" }, + { + "name": "FindLatestUserMobileVerificationRequest", + "code": "message FindLatestUserMobileVerificationRequest {\n\n}", + "doc": "查找用户正在等待激活的认证" + }, + { + "name": "FindLatestUserMobileVerificationResponse", + "code": "message FindLatestUserMobileVerificationResponse {\n\tUserMobileVerification userMobileVerification = 1;\n}", + "doc": "" + }, { "name": "FindLoginSessionRequest", "code": "message FindLoginSessionRequest {\n\tstring sid = 1;\n}", @@ -21236,11 +21317,31 @@ "code": "message SendMessageTaskResponse {\n\tbool isOk = 1; // 是否成功\n\tstring error = 2; // 失败时的提示信息\n\tstring response = 3; // 发送成功后响应内容\n}", "doc": "" }, + { + "name": "SendSMSRequest", + "code": "message SendSMSRequest {\n\tstring mobile = 1; // 手机号\n\tstring body = 2; // 内容\n\tstring type = 3; // 渠道类型:webHook ...\n\tbytes paramsJSON = 4; // 参数\n}", + "doc": "发送短信" + }, + { + "name": "SendSMSResponse", + "code": "message SendSMSResponse {\n\tbool isOk = 1; // 是否成功\n\tstring result = 2; // 发送返回内容,只有失败时才会有数据\n}", + "doc": "" + }, { "name": "SendUserEmailVerificationRequest", "code": "message SendUserEmailVerificationRequest {\n\tstring email = 1; // 待验证邮箱\n}", "doc": "发送邮箱认证" }, + { + "name": "SendUserMobileVerificationRequest", + "code": "message SendUserMobileVerificationRequest {\n\tstring mobile = 1; // 待验证手机号码\n}", + "doc": "发送手机号码认证" + }, + { + "name": "SendUserMobileVerificationResponse", + "code": "message SendUserMobileVerificationResponse {\n\tbool isOk = 1; // 是否发送成功\n\tstring errorCode = 2; // 错误代号\n}", + "doc": "" + }, { "name": "SendUserVerifyCodeRequest", "code": "message SendUserVerifyCodeRequest {\n\tstring type = 1; // 类型:重置密码(resetPassword)\n\tstring email = 2; // 已验证邮箱地址\n\tstring mobile = 3; // 已验证手机号\n}", @@ -22743,7 +22844,7 @@ }, { "name": "User", - "code": "message User {\n\tint64 id = 1; // 用户ID\n\tstring username = 2; // 用户名\n\tstring fullname = 3; // 全称\n\tstring mobile = 4;\n\tstring tel = 5;\n\tstring email = 6;\n\tstring verifiedEmail = 20;\n\tstring remark = 7;\n\tbool isOn = 8;\n\tint64 createdAt = 9;\n\tstring registeredIP = 12;\n\tbool isVerified = 13;\n\tbool isRejected = 14;\n\tstring rejectReason = 15;\n\tbool isDeleted = 16;\n\tbool isIndividualIdentified = 17;\n\tbool isEnterpriseIdentified = 18;\n\tstring bandwidthAlgo = 21; // 带宽算法\n\tstring lang = 22; // 语言代号\n\n\tLogin otpLogin = 19; // OTP认证\n\n\tNodeCluster nodeCluster = 10;\n\trepeated UserFeature features = 11;\n}", + "code": "message User {\n\tint64 id = 1; // 用户ID\n\tstring username = 2; // 用户名\n\tstring fullname = 3; // 全称\n\tstring mobile = 4; // 手机号码\n\tstring tel = 5; // 联系电话\n\tstring email = 6; // 联系邮箱\n\tstring verifiedEmail = 20; // 已验证邮箱\n\tstring verifiedMobile = 23; // 已验证手机号码\n\tstring remark = 7;\n\tbool isOn = 8;\n\tint64 createdAt = 9;\n\tstring registeredIP = 12;\n\tbool isVerified = 13;\n\tbool isRejected = 14;\n\tstring rejectReason = 15;\n\tbool isDeleted = 16;\n\tbool isIndividualIdentified = 17; // 是否已通过个人验证\n\tbool isEnterpriseIdentified = 18; // 是否已通过企业验证\n\tstring bandwidthAlgo = 21; // 带宽算法\n\tstring lang = 22; // 语言代号\n\n\tLogin otpLogin = 19; // OTP认证\n\n\tNodeCluster nodeCluster = 10;\n\trepeated UserFeature features = 11;\n}", "doc": "" }, { @@ -22796,6 +22897,11 @@ "code": "message UserIdentity {\n\tint64 id = 1;\n\tstring orgType = 2;\n\tstring type = 3;\n\tstring realName = 4;\n\tstring number = 5;\n\trepeated int64 fileIds = 6;\n\tstring status = 7;\n\tint64 createdAt = 8;\n\tint64 updatedAt = 9;\n\tint64 submittedAt = 10;\n\tint64 rejectedAt = 11;\n\tint64 verifiedAt = 12;\n\tstring rejectReason = 13;\n}", "doc": "" }, + { + "name": "UserMobileVerification", + "code": "message UserMobileVerification {\n\tint64 id = 1; // ID\n\tstring mobile = 2; // 手机号码\n\tint64 userId = 3; // 用户ID\n\tstring code = 4; // 代号\n\tint64 createdAt = 5; // 创建时间\n\tbool isSent = 6; // 已发送\n\tbool isVerified = 7; // 已激活\n\tint64 expiresAt = 8; // 过期时间,动态计算而来\n}", + "doc": "手机号码认证" + }, { "name": "UserNode", "code": "message UserNode {\n\tint64 id = 1;\n\tbool isOn = 2;\n\tstring uniqueId = 3;\n\tstring secret = 4;\n\tstring name = 5;\n\tstring description = 6;\n\tbytes httpJSON = 7;\n\tbytes httpsJSON = 8;\n\tbytes accessAddrsJSON = 9;\n\trepeated string accessAddrs = 10;\n\tbytes statusJSON = 11;\n}", @@ -22881,6 +22987,16 @@ "code": "message VerifyUserIdentityRequest {\n\tint64 userIdentityId = 1;\n}", "doc": "通过用户实名认证信息" }, + { + "name": "VerifyUserMobileRequest", + "code": "message VerifyUserMobileRequest {\n\tstring mobile = 1; // 手机号\n\tstring code = 2; // 激活码\n}", + "doc": "认证手机号码" + }, + { + "name": "VerifyUserMobileResponse", + "code": "message VerifyUserMobileResponse {\n\tint64 userId = 1; // 手机号码对应的用户ID\n\tstring mobile = 2; // 手机号码\n\tstring errorCode = 3; // 错误代号,如果为空,说明没有错误\n\tstring errorMessage = 4; // 错误信息\n}", + "doc": "" + }, { "name": "VerifyUserRequest", "code": "message VerifyUserRequest {\n\tint64 userId = 1;\n\tbool isRejected = 2;\n\tstring rejectReason = 3;\n}", diff --git a/pkg/langs/codes/codes.go b/pkg/langs/codes/codes.go index 63db7c4..0b9318e 100644 --- a/pkg/langs/codes/codes.go +++ b/pkg/langs/codes/codes.go @@ -651,6 +651,7 @@ const ( User_LogUpdateUserPricePeriod langs.MessageCode = "user@log_update_user_price_period" // 修改计费周期为 %s User_LogUpdateUserPriceType langs.MessageCode = "user@log_update_user_price_type" // 修改计费类型为 %s User_LogUpdateUserProfile langs.MessageCode = "user@log_update_user_profile" // 修改个人资料 + User_LogUpdateUserSmsSettings langs.MessageCode = "user@log_update_user_sms_settings" // 修改用户短信设置 User_LogVerifyUser langs.MessageCode = "user@log_verify_user" // 审核用户:%d 结果:%s UserAccessKey_LogCreateUserAccessKey langs.MessageCode = "user_access_key@log_create_user_access_key" // 创建AccessKey %d UserAccessKey_LogDeleteUserAccessKey langs.MessageCode = "user_access_key@log_delete_user_access_key" // 删除AccessKey %d diff --git a/pkg/langs/messages/messages_zh_cn.go b/pkg/langs/messages/messages_zh_cn.go index 67e1313..e1ab514 100644 --- a/pkg/langs/messages/messages_zh_cn.go +++ b/pkg/langs/messages/messages_zh_cn.go @@ -652,6 +652,7 @@ func init() { "user@log_update_user_price_period": "修改计费周期为 %s", "user@log_update_user_price_type": "修改计费类型为 %s", "user@log_update_user_profile": "修改个人资料", + "user@log_update_user_sms_settings": "修改用户短信设置", "user@log_verify_user": "审核用户:%d 结果:%s", "user_access_key@log_create_user_access_key": "创建AccessKey %d", "user_access_key@log_delete_user_access_key": "删除AccessKey %d", diff --git a/pkg/langs/protos/zh-cn/user.json b/pkg/langs/protos/zh-cn/user.json index 3c347e9..3ee682b 100644 --- a/pkg/langs/protos/zh-cn/user.json +++ b/pkg/langs/protos/zh-cn/user.json @@ -1,5 +1,6 @@ { "log_update_user_email_settings": "修改用户邮件设置", + "log_update_user_sms_settings": "修改用户短信设置", "log_update_user_global_settings": "修改用户设置", "log_create_user": "创建用户 %d", "log_delete_user": "删除用户 %d", diff --git a/pkg/rpc/pb/model_user.pb.go b/pkg/rpc/pb/model_user.pb.go index 27bbe18..7313c2c 100644 --- a/pkg/rpc/pb/model_user.pb.go +++ b/pkg/rpc/pb/model_user.pb.go @@ -25,13 +25,14 @@ type User struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // 用户ID - Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` // 用户名 - Fullname string `protobuf:"bytes,3,opt,name=fullname,proto3" json:"fullname,omitempty"` // 全称 - Mobile string `protobuf:"bytes,4,opt,name=mobile,proto3" json:"mobile,omitempty"` - Tel string `protobuf:"bytes,5,opt,name=tel,proto3" json:"tel,omitempty"` - Email string `protobuf:"bytes,6,opt,name=email,proto3" json:"email,omitempty"` - VerifiedEmail string `protobuf:"bytes,20,opt,name=verifiedEmail,proto3" json:"verifiedEmail,omitempty"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // 用户ID + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` // 用户名 + Fullname string `protobuf:"bytes,3,opt,name=fullname,proto3" json:"fullname,omitempty"` // 全称 + Mobile string `protobuf:"bytes,4,opt,name=mobile,proto3" json:"mobile,omitempty"` // 手机号码 + Tel string `protobuf:"bytes,5,opt,name=tel,proto3" json:"tel,omitempty"` // 联系电话 + Email string `protobuf:"bytes,6,opt,name=email,proto3" json:"email,omitempty"` // 联系邮箱 + VerifiedEmail string `protobuf:"bytes,20,opt,name=verifiedEmail,proto3" json:"verifiedEmail,omitempty"` // 已验证邮箱 + VerifiedMobile string `protobuf:"bytes,23,opt,name=verifiedMobile,proto3" json:"verifiedMobile,omitempty"` // 已验证手机号码 Remark string `protobuf:"bytes,7,opt,name=remark,proto3" json:"remark,omitempty"` IsOn bool `protobuf:"varint,8,opt,name=isOn,proto3" json:"isOn,omitempty"` CreatedAt int64 `protobuf:"varint,9,opt,name=createdAt,proto3" json:"createdAt,omitempty"` @@ -40,11 +41,11 @@ type User struct { IsRejected bool `protobuf:"varint,14,opt,name=isRejected,proto3" json:"isRejected,omitempty"` RejectReason string `protobuf:"bytes,15,opt,name=rejectReason,proto3" json:"rejectReason,omitempty"` IsDeleted bool `protobuf:"varint,16,opt,name=isDeleted,proto3" json:"isDeleted,omitempty"` - IsIndividualIdentified bool `protobuf:"varint,17,opt,name=isIndividualIdentified,proto3" json:"isIndividualIdentified,omitempty"` - IsEnterpriseIdentified bool `protobuf:"varint,18,opt,name=isEnterpriseIdentified,proto3" json:"isEnterpriseIdentified,omitempty"` - BandwidthAlgo string `protobuf:"bytes,21,opt,name=bandwidthAlgo,proto3" json:"bandwidthAlgo,omitempty"` // 带宽算法 - Lang string `protobuf:"bytes,22,opt,name=lang,proto3" json:"lang,omitempty"` // 语言代号 - OtpLogin *Login `protobuf:"bytes,19,opt,name=otpLogin,proto3" json:"otpLogin,omitempty"` // OTP认证 + IsIndividualIdentified bool `protobuf:"varint,17,opt,name=isIndividualIdentified,proto3" json:"isIndividualIdentified,omitempty"` // 是否已通过个人验证 + IsEnterpriseIdentified bool `protobuf:"varint,18,opt,name=isEnterpriseIdentified,proto3" json:"isEnterpriseIdentified,omitempty"` // 是否已通过企业验证 + BandwidthAlgo string `protobuf:"bytes,21,opt,name=bandwidthAlgo,proto3" json:"bandwidthAlgo,omitempty"` // 带宽算法 + Lang string `protobuf:"bytes,22,opt,name=lang,proto3" json:"lang,omitempty"` // 语言代号 + OtpLogin *Login `protobuf:"bytes,19,opt,name=otpLogin,proto3" json:"otpLogin,omitempty"` // OTP认证 NodeCluster *NodeCluster `protobuf:"bytes,10,opt,name=nodeCluster,proto3" json:"nodeCluster,omitempty"` Features []*UserFeature `protobuf:"bytes,11,rep,name=features,proto3" json:"features,omitempty"` } @@ -130,6 +131,13 @@ func (x *User) GetVerifiedEmail() string { return "" } +func (x *User) GetVerifiedMobile() string { + if x != nil { + return x.VerifiedMobile + } + return "" +} + func (x *User) GetRemark() string { if x != nil { return x.Remark @@ -245,7 +253,7 @@ var file_models_model_user_proto_rawDesc = []byte{ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6c, 0x6f, - 0x67, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd5, 0x05, 0x0a, 0x04, 0x55, 0x73, + 0x67, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfd, 0x05, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, @@ -257,42 +265,44 @@ var file_models_model_user_proto_rawDesc = []byte{ 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, - 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x73, 0x4f, 0x6e, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x4f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, 0x50, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, 0x50, 0x12, 0x1e, - 0x0a, 0x0a, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x1e, - 0x0a, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x22, - 0x0a, 0x0c, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x12, 0x36, 0x0a, 0x16, 0x69, 0x73, 0x49, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x16, 0x69, 0x73, 0x49, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x69, 0x73, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, 0x73, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x41, 0x6c, 0x67, - 0x6f, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x41, 0x6c, 0x67, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x08, 0x6f, 0x74, - 0x70, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x70, - 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x08, 0x6f, 0x74, 0x70, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x12, 0x31, 0x0a, 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, - 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x4d, 0x6f, 0x62, 0x69, + 0x6c, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x61, + 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, + 0x12, 0x12, 0x0a, 0x04, 0x69, 0x73, 0x4f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, + 0x69, 0x73, 0x4f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, + 0x49, 0x50, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x65, 0x64, 0x49, 0x50, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x6a, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x52, 0x65, + 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, + 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x69, 0x73, 0x49, 0x6e, + 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, 0x73, 0x49, 0x6e, 0x64, 0x69, + 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, + 0x12, 0x36, 0x0a, 0x16, 0x69, 0x73, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x16, 0x69, 0x73, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x61, 0x6e, 0x64, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x41, 0x6c, 0x67, 0x6f, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x41, 0x6c, 0x67, 0x6f, 0x12, 0x12, + 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x61, + 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x08, 0x6f, 0x74, 0x70, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, + 0x08, 0x6f, 0x74, 0x70, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x31, 0x0a, 0x0b, 0x6e, 0x6f, 0x64, + 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, + 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x08, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, + 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, + 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/rpc/pb/model_user_mobile_verification.pb.go b/pkg/rpc/pb/model_user_mobile_verification.pb.go new file mode 100644 index 0000000..aeff4b4 --- /dev/null +++ b/pkg/rpc/pb/model_user_mobile_verification.pb.go @@ -0,0 +1,212 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v3.19.4 +// source: models/model_user_mobile_verification.proto + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// 手机号码认证 +type UserMobileVerification struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // ID + Mobile string `protobuf:"bytes,2,opt,name=mobile,proto3" json:"mobile,omitempty"` // 手机号码 + UserId int64 `protobuf:"varint,3,opt,name=userId,proto3" json:"userId,omitempty"` // 用户ID + Code string `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"` // 代号 + CreatedAt int64 `protobuf:"varint,5,opt,name=createdAt,proto3" json:"createdAt,omitempty"` // 创建时间 + IsSent bool `protobuf:"varint,6,opt,name=isSent,proto3" json:"isSent,omitempty"` // 已发送 + IsVerified bool `protobuf:"varint,7,opt,name=isVerified,proto3" json:"isVerified,omitempty"` // 已激活 + ExpiresAt int64 `protobuf:"varint,8,opt,name=expiresAt,proto3" json:"expiresAt,omitempty"` // 过期时间,动态计算而来 +} + +func (x *UserMobileVerification) Reset() { + *x = UserMobileVerification{} + if protoimpl.UnsafeEnabled { + mi := &file_models_model_user_mobile_verification_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserMobileVerification) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserMobileVerification) ProtoMessage() {} + +func (x *UserMobileVerification) ProtoReflect() protoreflect.Message { + mi := &file_models_model_user_mobile_verification_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 UserMobileVerification.ProtoReflect.Descriptor instead. +func (*UserMobileVerification) Descriptor() ([]byte, []int) { + return file_models_model_user_mobile_verification_proto_rawDescGZIP(), []int{0} +} + +func (x *UserMobileVerification) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *UserMobileVerification) GetMobile() string { + if x != nil { + return x.Mobile + } + return "" +} + +func (x *UserMobileVerification) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *UserMobileVerification) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *UserMobileVerification) GetCreatedAt() int64 { + if x != nil { + return x.CreatedAt + } + return 0 +} + +func (x *UserMobileVerification) GetIsSent() bool { + if x != nil { + return x.IsSent + } + return false +} + +func (x *UserMobileVerification) GetIsVerified() bool { + if x != nil { + return x.IsVerified + } + return false +} + +func (x *UserMobileVerification) GetExpiresAt() int64 { + if x != nil { + return x.ExpiresAt + } + return 0 +} + +var File_models_model_user_mobile_verification_proto protoreflect.FileDescriptor + +var file_models_model_user_mobile_verification_proto_rawDesc = []byte{ + 0x0a, 0x2b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, + 0x62, 0x22, 0xe0, 0x01, 0x0a, 0x16, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, + 0x62, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x69, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, + 0x73, 0x41, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, + 0x65, 0x73, 0x41, 0x74, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_models_model_user_mobile_verification_proto_rawDescOnce sync.Once + file_models_model_user_mobile_verification_proto_rawDescData = file_models_model_user_mobile_verification_proto_rawDesc +) + +func file_models_model_user_mobile_verification_proto_rawDescGZIP() []byte { + file_models_model_user_mobile_verification_proto_rawDescOnce.Do(func() { + file_models_model_user_mobile_verification_proto_rawDescData = protoimpl.X.CompressGZIP(file_models_model_user_mobile_verification_proto_rawDescData) + }) + return file_models_model_user_mobile_verification_proto_rawDescData +} + +var file_models_model_user_mobile_verification_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_models_model_user_mobile_verification_proto_goTypes = []interface{}{ + (*UserMobileVerification)(nil), // 0: pb.UserMobileVerification +} +var file_models_model_user_mobile_verification_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] 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_models_model_user_mobile_verification_proto_init() } +func file_models_model_user_mobile_verification_proto_init() { + if File_models_model_user_mobile_verification_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_models_model_user_mobile_verification_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserMobileVerification); 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_models_model_user_mobile_verification_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_models_model_user_mobile_verification_proto_goTypes, + DependencyIndexes: file_models_model_user_mobile_verification_proto_depIdxs, + MessageInfos: file_models_model_user_mobile_verification_proto_msgTypes, + }.Build() + File_models_model_user_mobile_verification_proto = out.File + file_models_model_user_mobile_verification_proto_rawDesc = nil + file_models_model_user_mobile_verification_proto_goTypes = nil + file_models_model_user_mobile_verification_proto_depIdxs = nil +} diff --git a/pkg/rpc/pb/service_sms_sender.pb.go b/pkg/rpc/pb/service_sms_sender.pb.go new file mode 100644 index 0000000..4dd70fc --- /dev/null +++ b/pkg/rpc/pb/service_sms_sender.pb.go @@ -0,0 +1,250 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v3.19.4 +// source: service_sms_sender.proto + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// 发送短信 +type SendSMSRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Mobile string `protobuf:"bytes,1,opt,name=mobile,proto3" json:"mobile,omitempty"` // 手机号 + Body string `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"` // 内容 + Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` // 渠道类型:webHook ... + ParamsJSON []byte `protobuf:"bytes,4,opt,name=paramsJSON,proto3" json:"paramsJSON,omitempty"` // 参数 +} + +func (x *SendSMSRequest) Reset() { + *x = SendSMSRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_sms_sender_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendSMSRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendSMSRequest) ProtoMessage() {} + +func (x *SendSMSRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_sms_sender_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 SendSMSRequest.ProtoReflect.Descriptor instead. +func (*SendSMSRequest) Descriptor() ([]byte, []int) { + return file_service_sms_sender_proto_rawDescGZIP(), []int{0} +} + +func (x *SendSMSRequest) GetMobile() string { + if x != nil { + return x.Mobile + } + return "" +} + +func (x *SendSMSRequest) GetBody() string { + if x != nil { + return x.Body + } + return "" +} + +func (x *SendSMSRequest) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *SendSMSRequest) GetParamsJSON() []byte { + if x != nil { + return x.ParamsJSON + } + return nil +} + +type SendSMSResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsOk bool `protobuf:"varint,1,opt,name=isOk,proto3" json:"isOk,omitempty"` // 是否成功 + Result string `protobuf:"bytes,2,opt,name=result,proto3" json:"result,omitempty"` // 发送返回内容,只有失败时才会有数据 +} + +func (x *SendSMSResponse) Reset() { + *x = SendSMSResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_sms_sender_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendSMSResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendSMSResponse) ProtoMessage() {} + +func (x *SendSMSResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_sms_sender_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 SendSMSResponse.ProtoReflect.Descriptor instead. +func (*SendSMSResponse) Descriptor() ([]byte, []int) { + return file_service_sms_sender_proto_rawDescGZIP(), []int{1} +} + +func (x *SendSMSResponse) GetIsOk() bool { + if x != nil { + return x.IsOk + } + return false +} + +func (x *SendSMSResponse) GetResult() string { + if x != nil { + return x.Result + } + return "" +} + +var File_service_sms_sender_proto protoreflect.FileDescriptor + +var file_service_sms_sender_proto_rawDesc = []byte{ + 0x0a, 0x18, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x6d, 0x73, 0x5f, 0x73, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x22, 0x70, + 0x0a, 0x0e, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x4d, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x4a, 0x53, 0x4f, 0x4e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x4a, 0x53, 0x4f, 0x4e, + 0x22, 0x3d, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x4d, 0x53, 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, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x32, + 0x46, 0x0a, 0x10, 0x53, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x53, 0x4d, 0x53, 0x12, 0x12, + 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x4d, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x4d, 0x53, 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_sms_sender_proto_rawDescOnce sync.Once + file_service_sms_sender_proto_rawDescData = file_service_sms_sender_proto_rawDesc +) + +func file_service_sms_sender_proto_rawDescGZIP() []byte { + file_service_sms_sender_proto_rawDescOnce.Do(func() { + file_service_sms_sender_proto_rawDescData = protoimpl.X.CompressGZIP(file_service_sms_sender_proto_rawDescData) + }) + return file_service_sms_sender_proto_rawDescData +} + +var file_service_sms_sender_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_service_sms_sender_proto_goTypes = []interface{}{ + (*SendSMSRequest)(nil), // 0: pb.SendSMSRequest + (*SendSMSResponse)(nil), // 1: pb.SendSMSResponse +} +var file_service_sms_sender_proto_depIdxs = []int32{ + 0, // 0: pb.SMSSenderService.sendSMS:input_type -> pb.SendSMSRequest + 1, // 1: pb.SMSSenderService.sendSMS:output_type -> pb.SendSMSResponse + 1, // [1:2] is the sub-list for method output_type + 0, // [0:1] 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_sms_sender_proto_init() } +func file_service_sms_sender_proto_init() { + if File_service_sms_sender_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_service_sms_sender_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendSMSRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_sms_sender_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendSMSResponse); 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_sms_sender_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_service_sms_sender_proto_goTypes, + DependencyIndexes: file_service_sms_sender_proto_depIdxs, + MessageInfos: file_service_sms_sender_proto_msgTypes, + }.Build() + File_service_sms_sender_proto = out.File + file_service_sms_sender_proto_rawDesc = nil + file_service_sms_sender_proto_goTypes = nil + file_service_sms_sender_proto_depIdxs = nil +} diff --git a/pkg/rpc/pb/service_sms_sender_grpc.pb.go b/pkg/rpc/pb/service_sms_sender_grpc.pb.go new file mode 100644 index 0000000..9cf237e --- /dev/null +++ b/pkg/rpc/pb/service_sms_sender_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.19.4 +// source: service_sms_sender.proto + +package pb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + SMSSenderService_SendSMS_FullMethodName = "/pb.SMSSenderService/sendSMS" +) + +// SMSSenderServiceClient is the client API for SMSSenderService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SMSSenderServiceClient interface { + // 发送短信 + SendSMS(ctx context.Context, in *SendSMSRequest, opts ...grpc.CallOption) (*SendSMSResponse, error) +} + +type sMSSenderServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewSMSSenderServiceClient(cc grpc.ClientConnInterface) SMSSenderServiceClient { + return &sMSSenderServiceClient{cc} +} + +func (c *sMSSenderServiceClient) SendSMS(ctx context.Context, in *SendSMSRequest, opts ...grpc.CallOption) (*SendSMSResponse, error) { + out := new(SendSMSResponse) + err := c.cc.Invoke(ctx, SMSSenderService_SendSMS_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SMSSenderServiceServer is the server API for SMSSenderService service. +// All implementations should embed UnimplementedSMSSenderServiceServer +// for forward compatibility +type SMSSenderServiceServer interface { + // 发送短信 + SendSMS(context.Context, *SendSMSRequest) (*SendSMSResponse, error) +} + +// UnimplementedSMSSenderServiceServer should be embedded to have forward compatible implementations. +type UnimplementedSMSSenderServiceServer struct { +} + +func (UnimplementedSMSSenderServiceServer) SendSMS(context.Context, *SendSMSRequest) (*SendSMSResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendSMS not implemented") +} + +// UnsafeSMSSenderServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SMSSenderServiceServer will +// result in compilation errors. +type UnsafeSMSSenderServiceServer interface { + mustEmbedUnimplementedSMSSenderServiceServer() +} + +func RegisterSMSSenderServiceServer(s grpc.ServiceRegistrar, srv SMSSenderServiceServer) { + s.RegisterService(&SMSSenderService_ServiceDesc, srv) +} + +func _SMSSenderService_SendSMS_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendSMSRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SMSSenderServiceServer).SendSMS(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SMSSenderService_SendSMS_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SMSSenderServiceServer).SendSMS(ctx, req.(*SendSMSRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// SMSSenderService_ServiceDesc is the grpc.ServiceDesc for SMSSenderService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var SMSSenderService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "pb.SMSSenderService", + HandlerType: (*SMSSenderServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "sendSMS", + Handler: _SMSSenderService_SendSMS_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "service_sms_sender.proto", +} diff --git a/pkg/rpc/pb/service_user.pb.go b/pkg/rpc/pb/service_user.pb.go index 1760370..6f27e69 100644 --- a/pkg/rpc/pb/service_user.pb.go +++ b/pkg/rpc/pb/service_user.pb.go @@ -2506,6 +2506,101 @@ func (x *CheckUserEmailResponse) GetExists() bool { return false } +// 检查手机号码是否已被验证 +type CheckUserMobileRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Mobile string `protobuf:"bytes,1,opt,name=mobile,proto3" json:"mobile,omitempty"` // 手机号码 +} + +func (x *CheckUserMobileRequest) Reset() { + *x = CheckUserMobileRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckUserMobileRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckUserMobileRequest) ProtoMessage() {} + +func (x *CheckUserMobileRequest) 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 CheckUserMobileRequest.ProtoReflect.Descriptor instead. +func (*CheckUserMobileRequest) Descriptor() ([]byte, []int) { + return file_service_user_proto_rawDescGZIP(), []int{42} +} + +func (x *CheckUserMobileRequest) GetMobile() string { + if x != nil { + return x.Mobile + } + return "" +} + +type CheckUserMobileResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Exists bool `protobuf:"varint,1,opt,name=exists,proto3" json:"exists,omitempty"` // 是否已被使用 +} + +func (x *CheckUserMobileResponse) Reset() { + *x = CheckUserMobileResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckUserMobileResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckUserMobileResponse) ProtoMessage() {} + +func (x *CheckUserMobileResponse) 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 CheckUserMobileResponse.ProtoReflect.Descriptor instead. +func (*CheckUserMobileResponse) Descriptor() ([]byte, []int) { + return file_service_user_proto_rawDescGZIP(), []int{43} +} + +func (x *CheckUserMobileResponse) GetExists() bool { + if x != nil { + return x.Exists + } + return false +} + // 根据用户名查询用户绑定的邮箱 type FindUserVerifiedEmailWithUsernameRequest struct { state protoimpl.MessageState @@ -2518,7 +2613,7 @@ type FindUserVerifiedEmailWithUsernameRequest struct { func (x *FindUserVerifiedEmailWithUsernameRequest) Reset() { *x = FindUserVerifiedEmailWithUsernameRequest{} 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) } @@ -2531,7 +2626,7 @@ func (x *FindUserVerifiedEmailWithUsernameRequest) String() string { func (*FindUserVerifiedEmailWithUsernameRequest) ProtoMessage() {} func (x *FindUserVerifiedEmailWithUsernameRequest) 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 { @@ -2544,7 +2639,7 @@ func (x *FindUserVerifiedEmailWithUsernameRequest) ProtoReflect() protoreflect.M // Deprecated: Use FindUserVerifiedEmailWithUsernameRequest.ProtoReflect.Descriptor instead. func (*FindUserVerifiedEmailWithUsernameRequest) Descriptor() ([]byte, []int) { - return file_service_user_proto_rawDescGZIP(), []int{42} + return file_service_user_proto_rawDescGZIP(), []int{44} } func (x *FindUserVerifiedEmailWithUsernameRequest) GetUsername() string { @@ -2565,7 +2660,7 @@ type FindUserVerifiedEmailWithUsernameResponse struct { func (x *FindUserVerifiedEmailWithUsernameResponse) Reset() { *x = FindUserVerifiedEmailWithUsernameResponse{} 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) } @@ -2578,7 +2673,7 @@ func (x *FindUserVerifiedEmailWithUsernameResponse) String() string { func (*FindUserVerifiedEmailWithUsernameResponse) ProtoMessage() {} func (x *FindUserVerifiedEmailWithUsernameResponse) 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 { @@ -2591,7 +2686,7 @@ func (x *FindUserVerifiedEmailWithUsernameResponse) ProtoReflect() protoreflect. // Deprecated: Use FindUserVerifiedEmailWithUsernameResponse.ProtoReflect.Descriptor instead. func (*FindUserVerifiedEmailWithUsernameResponse) Descriptor() ([]byte, []int) { - return file_service_user_proto_rawDescGZIP(), []int{43} + return file_service_user_proto_rawDescGZIP(), []int{45} } func (x *FindUserVerifiedEmailWithUsernameResponse) GetEmail() string { @@ -2618,7 +2713,7 @@ type ComposeUserDashboardResponse_DailyTrafficStat struct { func (x *ComposeUserDashboardResponse_DailyTrafficStat) Reset() { *x = ComposeUserDashboardResponse_DailyTrafficStat{} 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) } @@ -2631,7 +2726,7 @@ func (x *ComposeUserDashboardResponse_DailyTrafficStat) String() string { func (*ComposeUserDashboardResponse_DailyTrafficStat) ProtoMessage() {} func (x *ComposeUserDashboardResponse_DailyTrafficStat) 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 { @@ -2708,7 +2803,7 @@ type ComposeUserDashboardResponse_DailyPeekBandwidthStat struct { func (x *ComposeUserDashboardResponse_DailyPeekBandwidthStat) Reset() { *x = ComposeUserDashboardResponse_DailyPeekBandwidthStat{} 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) } @@ -2721,7 +2816,7 @@ func (x *ComposeUserDashboardResponse_DailyPeekBandwidthStat) String() string { func (*ComposeUserDashboardResponse_DailyPeekBandwidthStat) ProtoMessage() {} func (x *ComposeUserDashboardResponse_DailyPeekBandwidthStat) 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 { @@ -2763,7 +2858,7 @@ type ComposeUserGlobalBoardResponse_DailyStat struct { func (x *ComposeUserGlobalBoardResponse_DailyStat) Reset() { *x = ComposeUserGlobalBoardResponse_DailyStat{} if protoimpl.UnsafeEnabled { - mi := &file_service_user_proto_msgTypes[46] + mi := &file_service_user_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2776,7 +2871,7 @@ func (x *ComposeUserGlobalBoardResponse_DailyStat) String() string { func (*ComposeUserGlobalBoardResponse_DailyStat) ProtoMessage() {} func (x *ComposeUserGlobalBoardResponse_DailyStat) ProtoReflect() protoreflect.Message { - mi := &file_service_user_proto_msgTypes[46] + mi := &file_service_user_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2820,7 +2915,7 @@ type ComposeUserGlobalBoardResponse_TrafficStat struct { func (x *ComposeUserGlobalBoardResponse_TrafficStat) Reset() { *x = ComposeUserGlobalBoardResponse_TrafficStat{} if protoimpl.UnsafeEnabled { - mi := &file_service_user_proto_msgTypes[47] + mi := &file_service_user_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2833,7 +2928,7 @@ func (x *ComposeUserGlobalBoardResponse_TrafficStat) String() string { func (*ComposeUserGlobalBoardResponse_TrafficStat) ProtoMessage() {} func (x *ComposeUserGlobalBoardResponse_TrafficStat) ProtoReflect() protoreflect.Message { - mi := &file_service_user_proto_msgTypes[47] + mi := &file_service_user_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3212,151 +3307,162 @@ var file_service_user_proto_rawDesc = []byte{ 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, 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, - 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, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x30, 0x0a, 0x16, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x22, 0x31, 0x0a, + 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, + 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, 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, + 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, 0xae, 0x11, 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, 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, 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, 0x4a, 0x0a, + 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, + 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4d, + 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, + 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, + 0x65, 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 ( @@ -3371,7 +3477,7 @@ func file_service_user_proto_rawDescGZIP() []byte { return file_service_user_proto_rawDescData } -var file_service_user_proto_msgTypes = make([]protoimpl.MessageInfo, 48) +var file_service_user_proto_msgTypes = make([]protoimpl.MessageInfo, 50) var file_service_user_proto_goTypes = []interface{}{ (*CreateUserRequest)(nil), // 0: pb.CreateUserRequest (*CreateUserResponse)(nil), // 1: pb.CreateUserResponse @@ -3415,30 +3521,32 @@ var file_service_user_proto_goTypes = []interface{}{ (*RenewUserServersStateResponse)(nil), // 39: pb.RenewUserServersStateResponse (*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 + (*CheckUserMobileRequest)(nil), // 42: pb.CheckUserMobileRequest + (*CheckUserMobileResponse)(nil), // 43: pb.CheckUserMobileResponse + (*FindUserVerifiedEmailWithUsernameRequest)(nil), // 44: pb.FindUserVerifiedEmailWithUsernameRequest + (*FindUserVerifiedEmailWithUsernameResponse)(nil), // 45: pb.FindUserVerifiedEmailWithUsernameResponse + (*ComposeUserDashboardResponse_DailyTrafficStat)(nil), // 46: pb.ComposeUserDashboardResponse.DailyTrafficStat + (*ComposeUserDashboardResponse_DailyPeekBandwidthStat)(nil), // 47: pb.ComposeUserDashboardResponse.DailyPeekBandwidthStat + (*ComposeUserGlobalBoardResponse_DailyStat)(nil), // 48: pb.ComposeUserGlobalBoardResponse.DailyStat + (*ComposeUserGlobalBoardResponse_TrafficStat)(nil), // 49: pb.ComposeUserGlobalBoardResponse.TrafficStat + (*User)(nil), // 50: pb.User + (*UserFeature)(nil), // 51: pb.UserFeature + (*NodeValue)(nil), // 52: pb.NodeValue + (*RPCSuccess)(nil), // 53: pb.RPCSuccess + (*RPCCountResponse)(nil), // 54: pb.RPCCountResponse } var file_service_user_proto_depIdxs = []int32{ - 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 + 50, // 0: pb.ListEnabledUsersResponse.users:type_name -> pb.User + 50, // 1: pb.FindEnabledUserResponse.user:type_name -> pb.User + 46, // 2: pb.ComposeUserDashboardResponse.dailyTrafficStats:type_name -> pb.ComposeUserDashboardResponse.DailyTrafficStat + 47, // 3: pb.ComposeUserDashboardResponse.dailyPeekBandwidthStats:type_name -> pb.ComposeUserDashboardResponse.DailyPeekBandwidthStat + 51, // 4: pb.FindUserFeaturesResponse.features:type_name -> pb.UserFeature + 51, // 5: pb.FindAllUserFeatureDefinitionsResponse.features:type_name -> pb.UserFeature + 48, // 6: pb.ComposeUserGlobalBoardResponse.dailyStats:type_name -> pb.ComposeUserGlobalBoardResponse.DailyStat + 52, // 7: pb.ComposeUserGlobalBoardResponse.cpuNodeValues:type_name -> pb.NodeValue + 52, // 8: pb.ComposeUserGlobalBoardResponse.memoryNodeValues:type_name -> pb.NodeValue + 52, // 9: pb.ComposeUserGlobalBoardResponse.loadNodeValues:type_name -> pb.NodeValue + 49, // 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 @@ -3465,36 +3573,38 @@ var file_service_user_proto_depIdxs = []int32{ 36, // 34: pb.UserService.checkUserServersState:input_type -> pb.CheckUserServersStateRequest 38, // 35: pb.UserService.renewUserServersState:input_type -> pb.RenewUserServersStateRequest 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 + 42, // 37: pb.UserService.checkUserMobile:input_type -> pb.CheckUserMobileRequest + 44, // 38: pb.UserService.findUserVerifiedEmailWithUsername:input_type -> pb.FindUserVerifiedEmailWithUsernameRequest + 1, // 39: pb.UserService.createUser:output_type -> pb.CreateUserResponse + 3, // 40: pb.UserService.registerUser:output_type -> pb.RegisterUserResponse + 53, // 41: pb.UserService.verifyUser:output_type -> pb.RPCSuccess + 53, // 42: pb.UserService.updateUser:output_type -> pb.RPCSuccess + 53, // 43: pb.UserService.deleteUser:output_type -> pb.RPCSuccess + 54, // 44: pb.UserService.countAllEnabledUsers:output_type -> pb.RPCCountResponse + 9, // 45: pb.UserService.listEnabledUsers:output_type -> pb.ListEnabledUsersResponse + 11, // 46: pb.UserService.findEnabledUser:output_type -> pb.FindEnabledUserResponse + 13, // 47: pb.UserService.checkUserUsername:output_type -> pb.CheckUserUsernameResponse + 15, // 48: pb.UserService.loginUser:output_type -> pb.LoginUserResponse + 53, // 49: pb.UserService.updateUserInfo:output_type -> pb.RPCSuccess + 53, // 50: pb.UserService.updateUserLogin:output_type -> pb.RPCSuccess + 19, // 51: pb.UserService.composeUserDashboard:output_type -> pb.ComposeUserDashboardResponse + 21, // 52: pb.UserService.findUserNodeClusterId:output_type -> pb.FindUserNodeClusterIdResponse + 53, // 53: pb.UserService.updateUserFeatures:output_type -> pb.RPCSuccess + 53, // 54: pb.UserService.updateAllUsersFeatures:output_type -> pb.RPCSuccess + 25, // 55: pb.UserService.findUserFeatures:output_type -> pb.FindUserFeaturesResponse + 27, // 56: pb.UserService.findAllUserFeatureDefinitions:output_type -> pb.FindAllUserFeatureDefinitionsResponse + 29, // 57: pb.UserService.composeUserGlobalBoard:output_type -> pb.ComposeUserGlobalBoardResponse + 31, // 58: pb.UserService.checkUserOTPWithUsername:output_type -> pb.CheckUserOTPWithUsernameResponse + 33, // 59: pb.UserService.findUserPriceInfo:output_type -> pb.FindUserPriceInfoResponse + 53, // 60: pb.UserService.updateUserPriceType:output_type -> pb.RPCSuccess + 53, // 61: pb.UserService.updateUserPricePeriod:output_type -> pb.RPCSuccess + 37, // 62: pb.UserService.checkUserServersState:output_type -> pb.CheckUserServersStateResponse + 39, // 63: pb.UserService.renewUserServersState:output_type -> pb.RenewUserServersStateResponse + 41, // 64: pb.UserService.checkUserEmail:output_type -> pb.CheckUserEmailResponse + 43, // 65: pb.UserService.checkUserMobile:output_type -> pb.CheckUserMobileResponse + 45, // 66: pb.UserService.findUserVerifiedEmailWithUsername:output_type -> pb.FindUserVerifiedEmailWithUsernameResponse + 39, // [39:67] is the sub-list for method output_type + 11, // [11:39] 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 @@ -4015,7 +4125,7 @@ func file_service_user_proto_init() { } } file_service_user_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindUserVerifiedEmailWithUsernameRequest); i { + switch v := v.(*CheckUserMobileRequest); i { case 0: return &v.state case 1: @@ -4027,7 +4137,7 @@ func file_service_user_proto_init() { } } file_service_user_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FindUserVerifiedEmailWithUsernameResponse); i { + switch v := v.(*CheckUserMobileResponse); i { case 0: return &v.state case 1: @@ -4039,7 +4149,7 @@ func file_service_user_proto_init() { } } file_service_user_proto_msgTypes[44].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: @@ -4051,7 +4161,7 @@ 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 { + switch v := v.(*FindUserVerifiedEmailWithUsernameResponse); i { case 0: return &v.state case 1: @@ -4063,7 +4173,7 @@ func file_service_user_proto_init() { } } file_service_user_proto_msgTypes[46].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: @@ -4075,6 +4185,30 @@ func file_service_user_proto_init() { } } file_service_user_proto_msgTypes[47].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[48].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[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ComposeUserGlobalBoardResponse_TrafficStat); i { case 0: return &v.state @@ -4093,7 +4227,7 @@ func file_service_user_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_service_user_proto_rawDesc, NumEnums: 0, - NumMessages: 48, + NumMessages: 50, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/rpc/pb/service_user_grpc.pb.go b/pkg/rpc/pb/service_user_grpc.pb.go index 5d4900a..3855635 100644 --- a/pkg/rpc/pb/service_user_grpc.pb.go +++ b/pkg/rpc/pb/service_user_grpc.pb.go @@ -45,6 +45,7 @@ const ( UserService_CheckUserServersState_FullMethodName = "/pb.UserService/checkUserServersState" UserService_RenewUserServersState_FullMethodName = "/pb.UserService/renewUserServersState" UserService_CheckUserEmail_FullMethodName = "/pb.UserService/checkUserEmail" + UserService_CheckUserMobile_FullMethodName = "/pb.UserService/checkUserMobile" UserService_FindUserVerifiedEmailWithUsername_FullMethodName = "/pb.UserService/findUserVerifiedEmailWithUsername" ) @@ -104,6 +105,8 @@ type UserServiceClient interface { RenewUserServersState(ctx context.Context, in *RenewUserServersStateRequest, opts ...grpc.CallOption) (*RenewUserServersStateResponse, error) // 检查邮箱是否已被使用 CheckUserEmail(ctx context.Context, in *CheckUserEmailRequest, opts ...grpc.CallOption) (*CheckUserEmailResponse, error) + // 检查手机号码是否已被使用 + CheckUserMobile(ctx context.Context, in *CheckUserMobileRequest, opts ...grpc.CallOption) (*CheckUserMobileResponse, error) // 根据用户名查询用户绑定的邮箱 FindUserVerifiedEmailWithUsername(ctx context.Context, in *FindUserVerifiedEmailWithUsernameRequest, opts ...grpc.CallOption) (*FindUserVerifiedEmailWithUsernameResponse, error) } @@ -350,6 +353,15 @@ func (c *userServiceClient) CheckUserEmail(ctx context.Context, in *CheckUserEma return out, nil } +func (c *userServiceClient) CheckUserMobile(ctx context.Context, in *CheckUserMobileRequest, opts ...grpc.CallOption) (*CheckUserMobileResponse, error) { + out := new(CheckUserMobileResponse) + err := c.cc.Invoke(ctx, UserService_CheckUserMobile_FullMethodName, 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, UserService_FindUserVerifiedEmailWithUsername_FullMethodName, in, out, opts...) @@ -415,6 +427,8 @@ type UserServiceServer interface { RenewUserServersState(context.Context, *RenewUserServersStateRequest) (*RenewUserServersStateResponse, error) // 检查邮箱是否已被使用 CheckUserEmail(context.Context, *CheckUserEmailRequest) (*CheckUserEmailResponse, error) + // 检查手机号码是否已被使用 + CheckUserMobile(context.Context, *CheckUserMobileRequest) (*CheckUserMobileResponse, error) // 根据用户名查询用户绑定的邮箱 FindUserVerifiedEmailWithUsername(context.Context, *FindUserVerifiedEmailWithUsernameRequest) (*FindUserVerifiedEmailWithUsernameResponse, error) } @@ -501,6 +515,9 @@ func (UnimplementedUserServiceServer) RenewUserServersState(context.Context, *Re func (UnimplementedUserServiceServer) CheckUserEmail(context.Context, *CheckUserEmailRequest) (*CheckUserEmailResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckUserEmail not implemented") } +func (UnimplementedUserServiceServer) CheckUserMobile(context.Context, *CheckUserMobileRequest) (*CheckUserMobileResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CheckUserMobile not implemented") +} func (UnimplementedUserServiceServer) FindUserVerifiedEmailWithUsername(context.Context, *FindUserVerifiedEmailWithUsernameRequest) (*FindUserVerifiedEmailWithUsernameResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FindUserVerifiedEmailWithUsername not implemented") } @@ -984,6 +1001,24 @@ func _UserService_CheckUserEmail_Handler(srv interface{}, ctx context.Context, d return interceptor(ctx, in, info, handler) } +func _UserService_CheckUserMobile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckUserMobileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserServiceServer).CheckUserMobile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: UserService_CheckUserMobile_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserServiceServer).CheckUserMobile(ctx, req.(*CheckUserMobileRequest)) + } + 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 { @@ -1113,6 +1148,10 @@ var UserService_ServiceDesc = grpc.ServiceDesc{ MethodName: "checkUserEmail", Handler: _UserService_CheckUserEmail_Handler, }, + { + MethodName: "checkUserMobile", + Handler: _UserService_CheckUserMobile_Handler, + }, { MethodName: "findUserVerifiedEmailWithUsername", Handler: _UserService_FindUserVerifiedEmailWithUsername_Handler, diff --git a/pkg/rpc/pb/service_user_mobile_verification.pb.go b/pkg/rpc/pb/service_user_mobile_verification.pb.go new file mode 100644 index 0000000..c381689 --- /dev/null +++ b/pkg/rpc/pb/service_user_mobile_verification.pb.go @@ -0,0 +1,541 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v3.19.4 +// source: service_user_mobile_verification.proto + +package pb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// 认证手机号码 +type VerifyUserMobileRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Mobile string `protobuf:"bytes,1,opt,name=mobile,proto3" json:"mobile,omitempty"` // 手机号 + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 激活码 +} + +func (x *VerifyUserMobileRequest) Reset() { + *x = VerifyUserMobileRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_mobile_verification_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VerifyUserMobileRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyUserMobileRequest) ProtoMessage() {} + +func (x *VerifyUserMobileRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_user_mobile_verification_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 VerifyUserMobileRequest.ProtoReflect.Descriptor instead. +func (*VerifyUserMobileRequest) Descriptor() ([]byte, []int) { + return file_service_user_mobile_verification_proto_rawDescGZIP(), []int{0} +} + +func (x *VerifyUserMobileRequest) GetMobile() string { + if x != nil { + return x.Mobile + } + return "" +} + +func (x *VerifyUserMobileRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +type VerifyUserMobileResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId int64 `protobuf:"varint,1,opt,name=userId,proto3" json:"userId,omitempty"` // 手机号码对应的用户ID + Mobile string `protobuf:"bytes,2,opt,name=mobile,proto3" json:"mobile,omitempty"` // 手机号码 + ErrorCode string `protobuf:"bytes,3,opt,name=errorCode,proto3" json:"errorCode,omitempty"` // 错误代号,如果为空,说明没有错误 + ErrorMessage string `protobuf:"bytes,4,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"` // 错误信息 +} + +func (x *VerifyUserMobileResponse) Reset() { + *x = VerifyUserMobileResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_mobile_verification_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VerifyUserMobileResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyUserMobileResponse) ProtoMessage() {} + +func (x *VerifyUserMobileResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_user_mobile_verification_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 VerifyUserMobileResponse.ProtoReflect.Descriptor instead. +func (*VerifyUserMobileResponse) Descriptor() ([]byte, []int) { + return file_service_user_mobile_verification_proto_rawDescGZIP(), []int{1} +} + +func (x *VerifyUserMobileResponse) GetUserId() int64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *VerifyUserMobileResponse) GetMobile() string { + if x != nil { + return x.Mobile + } + return "" +} + +func (x *VerifyUserMobileResponse) GetErrorCode() string { + if x != nil { + return x.ErrorCode + } + return "" +} + +func (x *VerifyUserMobileResponse) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +// 发送手机号码认证 +type SendUserMobileVerificationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Mobile string `protobuf:"bytes,1,opt,name=mobile,proto3" json:"mobile,omitempty"` // 待验证手机号码 +} + +func (x *SendUserMobileVerificationRequest) Reset() { + *x = SendUserMobileVerificationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_mobile_verification_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendUserMobileVerificationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendUserMobileVerificationRequest) ProtoMessage() {} + +func (x *SendUserMobileVerificationRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_user_mobile_verification_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 SendUserMobileVerificationRequest.ProtoReflect.Descriptor instead. +func (*SendUserMobileVerificationRequest) Descriptor() ([]byte, []int) { + return file_service_user_mobile_verification_proto_rawDescGZIP(), []int{2} +} + +func (x *SendUserMobileVerificationRequest) GetMobile() string { + if x != nil { + return x.Mobile + } + return "" +} + +type SendUserMobileVerificationResponse 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"` // 错误代号 +} + +func (x *SendUserMobileVerificationResponse) Reset() { + *x = SendUserMobileVerificationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_mobile_verification_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendUserMobileVerificationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendUserMobileVerificationResponse) ProtoMessage() {} + +func (x *SendUserMobileVerificationResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_user_mobile_verification_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 SendUserMobileVerificationResponse.ProtoReflect.Descriptor instead. +func (*SendUserMobileVerificationResponse) Descriptor() ([]byte, []int) { + return file_service_user_mobile_verification_proto_rawDescGZIP(), []int{3} +} + +func (x *SendUserMobileVerificationResponse) GetIsOk() bool { + if x != nil { + return x.IsOk + } + return false +} + +func (x *SendUserMobileVerificationResponse) GetErrorCode() string { + if x != nil { + return x.ErrorCode + } + return "" +} + +// 查找用户正在等待激活的认证 +type FindLatestUserMobileVerificationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *FindLatestUserMobileVerificationRequest) Reset() { + *x = FindLatestUserMobileVerificationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_mobile_verification_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindLatestUserMobileVerificationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindLatestUserMobileVerificationRequest) ProtoMessage() {} + +func (x *FindLatestUserMobileVerificationRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_user_mobile_verification_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FindLatestUserMobileVerificationRequest.ProtoReflect.Descriptor instead. +func (*FindLatestUserMobileVerificationRequest) Descriptor() ([]byte, []int) { + return file_service_user_mobile_verification_proto_rawDescGZIP(), []int{4} +} + +type FindLatestUserMobileVerificationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserMobileVerification *UserMobileVerification `protobuf:"bytes,1,opt,name=userMobileVerification,proto3" json:"userMobileVerification,omitempty"` +} + +func (x *FindLatestUserMobileVerificationResponse) Reset() { + *x = FindLatestUserMobileVerificationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_user_mobile_verification_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FindLatestUserMobileVerificationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FindLatestUserMobileVerificationResponse) ProtoMessage() {} + +func (x *FindLatestUserMobileVerificationResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_user_mobile_verification_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FindLatestUserMobileVerificationResponse.ProtoReflect.Descriptor instead. +func (*FindLatestUserMobileVerificationResponse) Descriptor() ([]byte, []int) { + return file_service_user_mobile_verification_proto_rawDescGZIP(), []int{5} +} + +func (x *FindLatestUserMobileVerificationResponse) GetUserMobileVerification() *UserMobileVerification { + if x != nil { + return x.UserMobileVerification + } + return nil +} + +var File_service_user_mobile_verification_proto protoreflect.FileDescriptor + +var file_service_user_mobile_verification_proto_rawDesc = []byte{ + 0x0a, 0x26, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6d, + 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x2b, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x45, 0x0a, 0x17, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x22, 0x8c, 0x01, 0x0a, 0x18, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4d, + 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 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, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x3b, 0x0a, 0x21, 0x53, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, + 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x22, 0x56, 0x0a, 0x22, + 0x53, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x22, 0x29, 0x0a, 0x27, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x7e, 0x0a, 0x28, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x16, 0x75, + 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, + 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, + 0xda, 0x02, 0x0a, 0x1d, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4d, + 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x79, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x55, 0x73, + 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6b, 0x0a, 0x1a, 0x73, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, + 0x6c, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, + 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, + 0x6c, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x55, + 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, + 0x20, 0x66, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, + 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x2b, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, + 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 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_mobile_verification_proto_rawDescOnce sync.Once + file_service_user_mobile_verification_proto_rawDescData = file_service_user_mobile_verification_proto_rawDesc +) + +func file_service_user_mobile_verification_proto_rawDescGZIP() []byte { + file_service_user_mobile_verification_proto_rawDescOnce.Do(func() { + file_service_user_mobile_verification_proto_rawDescData = protoimpl.X.CompressGZIP(file_service_user_mobile_verification_proto_rawDescData) + }) + return file_service_user_mobile_verification_proto_rawDescData +} + +var file_service_user_mobile_verification_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_service_user_mobile_verification_proto_goTypes = []interface{}{ + (*VerifyUserMobileRequest)(nil), // 0: pb.VerifyUserMobileRequest + (*VerifyUserMobileResponse)(nil), // 1: pb.VerifyUserMobileResponse + (*SendUserMobileVerificationRequest)(nil), // 2: pb.SendUserMobileVerificationRequest + (*SendUserMobileVerificationResponse)(nil), // 3: pb.SendUserMobileVerificationResponse + (*FindLatestUserMobileVerificationRequest)(nil), // 4: pb.FindLatestUserMobileVerificationRequest + (*FindLatestUserMobileVerificationResponse)(nil), // 5: pb.FindLatestUserMobileVerificationResponse + (*UserMobileVerification)(nil), // 6: pb.UserMobileVerification +} +var file_service_user_mobile_verification_proto_depIdxs = []int32{ + 6, // 0: pb.FindLatestUserMobileVerificationResponse.userMobileVerification:type_name -> pb.UserMobileVerification + 0, // 1: pb.UserMobileVerificationService.verifyUserMobile:input_type -> pb.VerifyUserMobileRequest + 2, // 2: pb.UserMobileVerificationService.sendUserMobileVerification:input_type -> pb.SendUserMobileVerificationRequest + 4, // 3: pb.UserMobileVerificationService.findLatestUserMobileVerification:input_type -> pb.FindLatestUserMobileVerificationRequest + 1, // 4: pb.UserMobileVerificationService.verifyUserMobile:output_type -> pb.VerifyUserMobileResponse + 3, // 5: pb.UserMobileVerificationService.sendUserMobileVerification:output_type -> pb.SendUserMobileVerificationResponse + 5, // 6: pb.UserMobileVerificationService.findLatestUserMobileVerification:output_type -> pb.FindLatestUserMobileVerificationResponse + 4, // [4:7] is the sub-list for method output_type + 1, // [1:4] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_service_user_mobile_verification_proto_init() } +func file_service_user_mobile_verification_proto_init() { + if File_service_user_mobile_verification_proto != nil { + return + } + file_models_model_user_mobile_verification_proto_init() + if !protoimpl.UnsafeEnabled { + file_service_user_mobile_verification_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifyUserMobileRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_user_mobile_verification_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifyUserMobileResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_user_mobile_verification_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendUserMobileVerificationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_user_mobile_verification_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendUserMobileVerificationResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_user_mobile_verification_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FindLatestUserMobileVerificationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_user_mobile_verification_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FindLatestUserMobileVerificationResponse); 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_mobile_verification_proto_rawDesc, + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_service_user_mobile_verification_proto_goTypes, + DependencyIndexes: file_service_user_mobile_verification_proto_depIdxs, + MessageInfos: file_service_user_mobile_verification_proto_msgTypes, + }.Build() + File_service_user_mobile_verification_proto = out.File + file_service_user_mobile_verification_proto_rawDesc = nil + file_service_user_mobile_verification_proto_goTypes = nil + file_service_user_mobile_verification_proto_depIdxs = nil +} diff --git a/pkg/rpc/pb/service_user_mobile_verification_grpc.pb.go b/pkg/rpc/pb/service_user_mobile_verification_grpc.pb.go new file mode 100644 index 0000000..c03f408 --- /dev/null +++ b/pkg/rpc/pb/service_user_mobile_verification_grpc.pb.go @@ -0,0 +1,187 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.19.4 +// source: service_user_mobile_verification.proto + +package pb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + UserMobileVerificationService_VerifyUserMobile_FullMethodName = "/pb.UserMobileVerificationService/verifyUserMobile" + UserMobileVerificationService_SendUserMobileVerification_FullMethodName = "/pb.UserMobileVerificationService/sendUserMobileVerification" + UserMobileVerificationService_FindLatestUserMobileVerification_FullMethodName = "/pb.UserMobileVerificationService/findLatestUserMobileVerification" +) + +// UserMobileVerificationServiceClient is the client API for UserMobileVerificationService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type UserMobileVerificationServiceClient interface { + // 认证手机号码 + VerifyUserMobile(ctx context.Context, in *VerifyUserMobileRequest, opts ...grpc.CallOption) (*VerifyUserMobileResponse, error) + // 发送手机号码认证 + SendUserMobileVerification(ctx context.Context, in *SendUserMobileVerificationRequest, opts ...grpc.CallOption) (*SendUserMobileVerificationResponse, error) + // 查找用户正在等待激活的认证 + FindLatestUserMobileVerification(ctx context.Context, in *FindLatestUserMobileVerificationRequest, opts ...grpc.CallOption) (*FindLatestUserMobileVerificationResponse, error) +} + +type userMobileVerificationServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewUserMobileVerificationServiceClient(cc grpc.ClientConnInterface) UserMobileVerificationServiceClient { + return &userMobileVerificationServiceClient{cc} +} + +func (c *userMobileVerificationServiceClient) VerifyUserMobile(ctx context.Context, in *VerifyUserMobileRequest, opts ...grpc.CallOption) (*VerifyUserMobileResponse, error) { + out := new(VerifyUserMobileResponse) + err := c.cc.Invoke(ctx, UserMobileVerificationService_VerifyUserMobile_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *userMobileVerificationServiceClient) SendUserMobileVerification(ctx context.Context, in *SendUserMobileVerificationRequest, opts ...grpc.CallOption) (*SendUserMobileVerificationResponse, error) { + out := new(SendUserMobileVerificationResponse) + err := c.cc.Invoke(ctx, UserMobileVerificationService_SendUserMobileVerification_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *userMobileVerificationServiceClient) FindLatestUserMobileVerification(ctx context.Context, in *FindLatestUserMobileVerificationRequest, opts ...grpc.CallOption) (*FindLatestUserMobileVerificationResponse, error) { + out := new(FindLatestUserMobileVerificationResponse) + err := c.cc.Invoke(ctx, UserMobileVerificationService_FindLatestUserMobileVerification_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// UserMobileVerificationServiceServer is the server API for UserMobileVerificationService service. +// All implementations should embed UnimplementedUserMobileVerificationServiceServer +// for forward compatibility +type UserMobileVerificationServiceServer interface { + // 认证手机号码 + VerifyUserMobile(context.Context, *VerifyUserMobileRequest) (*VerifyUserMobileResponse, error) + // 发送手机号码认证 + SendUserMobileVerification(context.Context, *SendUserMobileVerificationRequest) (*SendUserMobileVerificationResponse, error) + // 查找用户正在等待激活的认证 + FindLatestUserMobileVerification(context.Context, *FindLatestUserMobileVerificationRequest) (*FindLatestUserMobileVerificationResponse, error) +} + +// UnimplementedUserMobileVerificationServiceServer should be embedded to have forward compatible implementations. +type UnimplementedUserMobileVerificationServiceServer struct { +} + +func (UnimplementedUserMobileVerificationServiceServer) VerifyUserMobile(context.Context, *VerifyUserMobileRequest) (*VerifyUserMobileResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method VerifyUserMobile not implemented") +} +func (UnimplementedUserMobileVerificationServiceServer) SendUserMobileVerification(context.Context, *SendUserMobileVerificationRequest) (*SendUserMobileVerificationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendUserMobileVerification not implemented") +} +func (UnimplementedUserMobileVerificationServiceServer) FindLatestUserMobileVerification(context.Context, *FindLatestUserMobileVerificationRequest) (*FindLatestUserMobileVerificationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FindLatestUserMobileVerification not implemented") +} + +// UnsafeUserMobileVerificationServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to UserMobileVerificationServiceServer will +// result in compilation errors. +type UnsafeUserMobileVerificationServiceServer interface { + mustEmbedUnimplementedUserMobileVerificationServiceServer() +} + +func RegisterUserMobileVerificationServiceServer(s grpc.ServiceRegistrar, srv UserMobileVerificationServiceServer) { + s.RegisterService(&UserMobileVerificationService_ServiceDesc, srv) +} + +func _UserMobileVerificationService_VerifyUserMobile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VerifyUserMobileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserMobileVerificationServiceServer).VerifyUserMobile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: UserMobileVerificationService_VerifyUserMobile_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserMobileVerificationServiceServer).VerifyUserMobile(ctx, req.(*VerifyUserMobileRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UserMobileVerificationService_SendUserMobileVerification_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendUserMobileVerificationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserMobileVerificationServiceServer).SendUserMobileVerification(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: UserMobileVerificationService_SendUserMobileVerification_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserMobileVerificationServiceServer).SendUserMobileVerification(ctx, req.(*SendUserMobileVerificationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UserMobileVerificationService_FindLatestUserMobileVerification_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FindLatestUserMobileVerificationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UserMobileVerificationServiceServer).FindLatestUserMobileVerification(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: UserMobileVerificationService_FindLatestUserMobileVerification_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UserMobileVerificationServiceServer).FindLatestUserMobileVerification(ctx, req.(*FindLatestUserMobileVerificationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// UserMobileVerificationService_ServiceDesc is the grpc.ServiceDesc for UserMobileVerificationService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var UserMobileVerificationService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "pb.UserMobileVerificationService", + HandlerType: (*UserMobileVerificationServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "verifyUserMobile", + Handler: _UserMobileVerificationService_VerifyUserMobile_Handler, + }, + { + MethodName: "sendUserMobileVerification", + Handler: _UserMobileVerificationService_SendUserMobileVerification_Handler, + }, + { + MethodName: "findLatestUserMobileVerification", + Handler: _UserMobileVerificationService_FindLatestUserMobileVerification_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "service_user_mobile_verification.proto", +} diff --git a/pkg/rpc/protos/models/model_user.proto b/pkg/rpc/protos/models/model_user.proto index 30712a8..e960ce6 100644 --- a/pkg/rpc/protos/models/model_user.proto +++ b/pkg/rpc/protos/models/model_user.proto @@ -11,10 +11,11 @@ message User { int64 id = 1; // 用户ID string username = 2; // 用户名 string fullname = 3; // 全称 - string mobile = 4; - string tel = 5; - string email = 6; - string verifiedEmail = 20; + string mobile = 4; // 手机号码 + string tel = 5; // 联系电话 + string email = 6; // 联系邮箱 + string verifiedEmail = 20; // 已验证邮箱 + string verifiedMobile = 23; // 已验证手机号码 string remark = 7; bool isOn = 8; int64 createdAt = 9; @@ -23,8 +24,8 @@ message User { bool isRejected = 14; string rejectReason = 15; bool isDeleted = 16; - bool isIndividualIdentified = 17; - bool isEnterpriseIdentified = 18; + bool isIndividualIdentified = 17; // 是否已通过个人验证 + bool isEnterpriseIdentified = 18; // 是否已通过企业验证 string bandwidthAlgo = 21; // 带宽算法 string lang = 22; // 语言代号 diff --git a/pkg/rpc/protos/models/model_user_mobile_verification.proto b/pkg/rpc/protos/models/model_user_mobile_verification.proto new file mode 100644 index 0000000..9f6a916 --- /dev/null +++ b/pkg/rpc/protos/models/model_user_mobile_verification.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +option go_package = "./pb"; + +package pb; + +// 手机号码认证 +message UserMobileVerification { + int64 id = 1; // ID + string mobile = 2; // 手机号码 + int64 userId = 3; // 用户ID + string code = 4; // 代号 + int64 createdAt = 5; // 创建时间 + bool isSent = 6; // 已发送 + bool isVerified = 7; // 已激活 + int64 expiresAt = 8; // 过期时间,动态计算而来 +} \ No newline at end of file diff --git a/pkg/rpc/protos/service_sms_sender.proto b/pkg/rpc/protos/service_sms_sender.proto new file mode 100644 index 0000000..e2cc29f --- /dev/null +++ b/pkg/rpc/protos/service_sms_sender.proto @@ -0,0 +1,23 @@ +syntax = "proto3"; +option go_package = "./pb"; + +package pb; + +// 短信发送服务 +service SMSSenderService { + // 发送短信 + rpc sendSMS(SendSMSRequest) returns (SendSMSResponse); +} + +// 发送短信 +message SendSMSRequest { + string mobile = 1; // 手机号 + string body = 2; // 内容 + string type = 3; // 渠道类型:webHook ... + bytes paramsJSON = 4; // 参数 +} + +message SendSMSResponse { + bool isOk = 1; // 是否成功 + string result = 2; // 发送返回内容,只有失败时才会有数据 +} \ No newline at end of file diff --git a/pkg/rpc/protos/service_user.proto b/pkg/rpc/protos/service_user.proto index d733a84..280dd23 100644 --- a/pkg/rpc/protos/service_user.proto +++ b/pkg/rpc/protos/service_user.proto @@ -88,6 +88,9 @@ service UserService { // 检查邮箱是否已被使用 rpc checkUserEmail(CheckUserEmailRequest) returns (CheckUserEmailResponse); + // 检查手机号码是否已被使用 + rpc checkUserMobile(CheckUserMobileRequest) returns (CheckUserMobileResponse); + // 根据用户名查询用户绑定的邮箱 rpc findUserVerifiedEmailWithUsername(FindUserVerifiedEmailWithUsernameRequest) returns (FindUserVerifiedEmailWithUsernameResponse); } @@ -378,6 +381,15 @@ message CheckUserEmailResponse { bool exists = 1; // 是否已被使用 } +// 检查手机号码是否已被验证 +message CheckUserMobileRequest { + string mobile = 1; // 手机号码 +} + +message CheckUserMobileResponse { + bool exists = 1; // 是否已被使用 +} + // 根据用户名查询用户绑定的邮箱 message FindUserVerifiedEmailWithUsernameRequest { string username = 1; // 用户名 diff --git a/pkg/rpc/protos/service_user_mobile_verification.proto b/pkg/rpc/protos/service_user_mobile_verification.proto new file mode 100644 index 0000000..55e9f3e --- /dev/null +++ b/pkg/rpc/protos/service_user_mobile_verification.proto @@ -0,0 +1,50 @@ +syntax = "proto3"; +option go_package = "./pb"; + +package pb; + +import "models/model_user_mobile_verification.proto"; + +// 用户手机号码认证服务 +service UserMobileVerificationService { + // 认证手机号码 + rpc verifyUserMobile(VerifyUserMobileRequest) returns (VerifyUserMobileResponse); + + // 发送手机号码认证 + rpc sendUserMobileVerification(SendUserMobileVerificationRequest) returns (SendUserMobileVerificationResponse); + + // 查找用户正在等待激活的认证 + rpc findLatestUserMobileVerification(FindLatestUserMobileVerificationRequest) returns (FindLatestUserMobileVerificationResponse); +} + +// 认证手机号码 +message VerifyUserMobileRequest { + string mobile = 1; // 手机号 + string code = 2; // 激活码 +} + +message VerifyUserMobileResponse { + int64 userId = 1; // 手机号码对应的用户ID + string mobile = 2; // 手机号码 + string errorCode = 3; // 错误代号,如果为空,说明没有错误 + string errorMessage = 4; // 错误信息 +} + +// 发送手机号码认证 +message SendUserMobileVerificationRequest { + string mobile = 1; // 待验证手机号码 +} + +message SendUserMobileVerificationResponse { + bool isOk = 1; // 是否发送成功 + string errorCode = 2; // 错误代号 +} + +// 查找用户正在等待激活的认证 +message FindLatestUserMobileVerificationRequest { + +} + +message FindLatestUserMobileVerificationResponse { + UserMobileVerification userMobileVerification = 1; +} \ No newline at end of file diff --git a/pkg/userconfigs/user_register_config.go b/pkg/userconfigs/user_register_config.go index 8d754ea..c728fbb 100644 --- a/pkg/userconfigs/user_register_config.go +++ b/pkg/userconfigs/user_register_config.go @@ -5,6 +5,9 @@ package userconfigs const ( EmailVerificationDefaultLife = 86400 * 2 // 2 days EmailResetPasswordDefaultLife = 3600 // 1 hour + + MobileVerificationDefaultLife = 1800 // 30 minutes + MobileResetPasswordDefaultLife = 1800 // 30 minutes ) type UserRegisterConfig struct { @@ -32,6 +35,15 @@ type UserRegisterConfig struct { Life int32 `yaml:"life" json:"life"` // 有效期 } `yaml:"emailResetPassword" json:"emailResetPassword"` + // 手机号码激活设置 + MobileVerification struct { + IsOn bool `yaml:"isOn" json:"isOn"` // 是否启用 + ShowNotice bool `yaml:"showNotice" json:"showNotice"` // 提示用户未绑定 + CanLogin bool `yaml:"canLogin" json:"canLogin"` // 是否可以使用激活的邮箱登录 + Body string `yaml:"body" json:"body"` // 内容 + Life int32 `yaml:"life" json:"life"` // 有效期 + } `yaml:"mobileVerification" json:"mobileVerification"` + // CDN CDNIsOn bool `json:"cdnIsOn"` // 是否开启CDN服务 ClusterId int64 `yaml:"clusterId" json:"clusterId"` // 用户创建服务集群 @@ -81,6 +93,8 @@ func DefaultUserRegisterConfig() *UserRegisterConfig {

${product.name} 管理团队

${url.home}

` + // 短信验证码 + config.MobileVerification.Body = "你的短信验证码${code}" return config }