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