syntax = "proto3";
option go_package = "./pb";

package pb;

import "models/model_server.proto";
import "models/model_dns_domain.proto";
import "models/model_server_name_auditing_result.proto";
import "models/rpc_messages.proto";
import "models/model_user_plan.proto";

// 网站服务相关服务
service ServerService {
	// 创建网站
	rpc createServer (CreateServerRequest) returns (CreateServerResponse);

	// 快速创建基本的HTTP网站
	rpc createBasicHTTPServer(CreateBasicHTTPServerRequest) returns (CreateBasicHTTPServerResponse);

	// 快速创建基本的TCP网站
	rpc createBasicTCPServer(CreateBasicTCPServerRequest) returns (CreateBasicTCPServerResponse);

	// 为网站添加源站
	rpc addServerOrigin(AddServerOriginRequest) returns (RPCSuccess);

	// 从网站中删除某个源站
	rpc deleteServerOrigin(DeleteServerOriginRequest) returns (RPCSuccess);

	// 修改网站基本信息
	rpc updateServerBasic (UpdateServerBasicRequest) returns (RPCSuccess);

	// 修改网站所在分组
	rpc updateServerGroupIds(UpdateServerGroupIdsRequest) returns (RPCSuccess);

	// 修改网站是否启用
	rpc updateServerIsOn (UpdateServerIsOnRequest) returns (RPCSuccess);

	// 修改网站的HTTP设置
	rpc updateServerHTTP (UpdateServerHTTPRequest) returns (RPCSuccess);

	// 修改网站的HTTPS设置
	rpc updateServerHTTPS (UpdateServerHTTPSRequest) returns (RPCSuccess);

	// 修改网站的TCP设置
	rpc updateServerTCP (UpdateServerTCPRequest) returns (RPCSuccess);

	// 修改网站的TLS设置
	rpc updateServerTLS (UpdateServerTLSRequest) returns (RPCSuccess);

	// 修改网站的UDP设置
	rpc updateServerUDP (UpdateServerUDPRequest) returns (RPCSuccess);

	// 修改网站的Web设置
	rpc updateServerWeb (UpdateServerWebRequest) returns (RPCSuccess);

	// 修改网站的反向代理设置
	rpc updateServerReverseProxy (UpdateServerReverseProxyRequest) returns (RPCSuccess);

	// 查找网站的域名设置
	rpc findServerNames (FindServerNamesRequest) returns (FindServerNamesResponse);

	// 修改网站的域名设置
	rpc updateServerNames (UpdateServerNamesRequest) returns (RPCSuccess);

	// 审核网站的域名设置
	rpc updateServerNamesAuditing (UpdateServerNamesAuditingRequest) returns (RPCSuccess);

	// 修改网站的DNS相关设置
	rpc updateServerDNS(UpdateServerDNSRequest) returns (RPCSuccess);

	// 重新生成CNAME
	rpc regenerateServerDNSName(RegenerateServerDNSNameRequest) returns (RPCSuccess);

	// 修改网站的CNAME
	rpc updateServerDNSName(UpdateServerDNSNameRequest) returns (RPCSuccess);

	// 使用CNAME查找网站
	rpc findServerIdWithDNSName(FindServerIdWithDNSNameRequest) returns (FindServerIdWithDNSNameResponse);

	// 计算匹配的网站数量
	rpc countAllEnabledServersMatch (CountAllEnabledServersMatchRequest) returns (RPCCountResponse);

	// 列出单页网站
	rpc listEnabledServersMatch (ListEnabledServersMatchRequest) returns (ListEnabledServersMatchResponse);

	// 删除某网站
	rpc deleteServer (DeleteServerRequest) returns (RPCSuccess);

	// 删除一组网站
	rpc deleteServers(DeleteServersRequest) returns (RPCSuccess);

	// 查找单个网站
	rpc findEnabledServer (FindEnabledServerRequest) returns (FindEnabledServerResponse);

	// 查找网站配置
	rpc findEnabledServerConfig (FindEnabledServerConfigRequest) returns (FindEnabledServerConfigResponse);

	// 查找网站的网站类型
	rpc findEnabledServerType (FindEnabledServerTypeRequest) returns (FindEnabledServerTypeResponse);

	// 查找反向代理设置
	rpc findAndInitServerReverseProxyConfig (FindAndInitServerReverseProxyConfigRequest) returns (FindAndInitServerReverseProxyConfigResponse);

	// 初始化Web设置
	rpc findAndInitServerWebConfig (FindAndInitServerWebConfigRequest) returns (FindAndInitServerWebConfigResponse);

	// 计算使用某个SSL证书的网站数量
	rpc countAllEnabledServersWithSSLCertId (CountAllEnabledServersWithSSLCertIdRequest) returns (RPCCountResponse);

	// 查找使用某个SSL证书的所有网站
	rpc findAllEnabledServersWithSSLCertId (FindAllEnabledServersWithSSLCertIdRequest) returns (FindAllEnabledServersWithSSLCertIdResponse);

	// 计算运行在某个集群上的所有网站数量
	rpc countAllEnabledServersWithNodeClusterId (CountAllEnabledServersWithNodeClusterIdRequest) returns (RPCCountResponse);

	// 计算使用某个分组的网站数量
	rpc countAllEnabledServersWithServerGroupId (CountAllEnabledServersWithServerGroupIdRequest) returns (RPCCountResponse);

	// 通知更新
	rpc notifyServersChange (NotifyServersChangeRequest) returns (NotifyServersChangeResponse);

	// 取得某个集群下的所有网站相关的DNS
	rpc findAllEnabledServersDNSWithNodeClusterId (FindAllEnabledServersDNSWithNodeClusterIdRequest) returns (FindAllEnabledServersDNSWithNodeClusterIdResponse);

	// 查找单个网站的DNS信息
	rpc findEnabledServerDNS (FindEnabledServerDNSRequest) returns (FindEnabledServerDNSResponse);

	// 检查网站是否属于某个用户
	rpc checkUserServer (CheckUserServerRequest) returns (RPCSuccess);

	// 查找一个用户下的所有域名列表
	rpc findAllEnabledServerNamesWithUserId (FindAllEnabledServerNamesWithUserIdRequest) returns (FindAllEnabledServerNamesWithUserIdResponse);

	// 计算一个用户下的所有域名数量
	rpc countAllServerNamesWithUserId (CountAllServerNamesWithUserIdRequest) returns (RPCCountResponse);

	// 计算某个网站下的域名数量
	rpc countServerNames(CountServerNamesRequest) returns (RPCCountResponse);

	// 查找一个用户下的所有网站
	rpc findAllUserServers(FindAllUserServersRequest) returns (FindAllUserServersResponse);

	// 计算一个用户下的所有网站数量
	rpc countAllUserServers(CountAllUserServersRequest) returns (RPCCountResponse);

	// 查找某个用户下的网站配置
	rpc composeAllUserServersConfig(ComposeAllUserServersConfigRequest) returns (ComposeAllUserServersConfigResponse);

	// 查找用户网站基本信息
	rpc findEnabledUserServerBasic (FindEnabledUserServerBasicRequest) returns (FindEnabledUserServerBasicResponse);

	// 修改用户网站基本信息
	rpc updateEnabledUserServerBasic (UpdateEnabledUserServerBasicRequest) returns (RPCSuccess);

	// 上传HTTP请求待统计数据
	rpc uploadServerHTTPRequestStat (UploadServerHTTPRequestStatRequest) returns (RPCSuccess);

	// 检查域名是否在集群中已经存在
	rpc checkServerNameDuplicationInNodeCluster (CheckServerNameDuplicationInNodeClusterRequest) returns (CheckServerNameDuplicationInNodeClusterResponse);

	// 检查域名是否在网站中已经绑定
	rpc checkServerNameInServer(CheckServerNameInServerRequest) returns (CheckServerNameInServerResponse);

	// 查找最近访问的网站
	rpc findLatestServers (FindLatestServersRequest) returns (FindLatestServersResponse);

	// 查找某个网站附近的网站
	rpc findNearbyServers(FindNearbyServersRequest) returns (FindNearbyServersResponse);

	// 清除缓存
	rpc purgeServerCache(PurgeServerCacheRequest) returns (PurgeServerCacheResponse);

	// 查找流量限制
	rpc findEnabledServerTrafficLimit(FindEnabledServerTrafficLimitRequest) returns (FindEnabledServerTrafficLimitResponse);

	// 设置流量限制
	rpc updateServerTrafficLimit(UpdateServerTrafficLimitRequest) returns (RPCSuccess);

	// 修改网站套餐
	rpc updateServerUserPlan(UpdateServerUserPlanRequest) returns (RPCSuccess);

	// 获取网站套餐信息
	rpc findServerUserPlan(FindServerUserPlanRequest) returns (FindServerUserPlanResponse);

	// 获取网站配置
	rpc composeServerConfig(ComposeServerConfigRequest) returns (ComposeServerConfigResponse);

	// 修改网站UAM设置
	rpc updateServerUAM(UpdateServerUAMRequest) returns (RPCSuccess);

	// 查找网站UAM设置
	rpc findEnabledServerUAM(FindEnabledServerUAMRequest) returns (FindEnabledServerUAMResponse);

	// 修改网站所属用户
	rpc updateServerUser(UpdateServerUserRequest) returns (RPCSuccess);

	// 修改网站名称
	rpc updateServerName(UpdateServerNameRequest) returns (RPCSuccess);

	// 在网站之间复制配置
	rpc copyServerConfig(CopyServerConfigRequest) returns (RPCSuccess);

	// 获取域名审核时的提示文字
	rpc findServerAuditingPrompt(FindServerAuditingPromptRequest) returns (FindServerAuditingPromptResponse);
}

// 创建网站
message CreateServerRequest {
	int64 userId = 1; // 可选项，用户ID，如果不想指定用户，此值可以为0
	int64 adminId = 2; // 可选项，管理员ID
	string type = 3; // 类型：httpProxy（HTTP反向代理，一般CDN服务都选这个）、httpWeb（静态文件服务，只会从服务器上读取文件内容，不会转发到源站）、tcpProxy（TCP反向代理）、udpProxy（UDP反向代理）
	string name = 4; // 网站名称，通常可以是一个域名
	string description = 5; // 可选项，网站描述

	// 配置相关
	bytes serverNamesJSON = 8; // 域名列表 @link json:server_names
	bytes serverNamesJON = 19 [deprecated = true]; // 已过期，请使用 serverNamesJSON 代替
	bytes httpJSON = 9; // HTTP协议设置，当type为httpProxy或者httpWeb时填写 @link json:http_protocol
	bytes httpsJSON = 10;  // HTTPS协议设置，当type为httpProxy或者httpWeb时填写 @link json:https_protocol
	bytes tcpJSON = 11;  // TCP协议设置，当type为tcpProxy时填写 @link json:tcp_protocol
	bytes tlsJSON = 12;  // TLS协议设置，当type为tcpProxy时填写 @link json:tls_protocol
	bytes udpJSON = 14; // UDP协议设置，当type为udpProxy时填写 @link json:udp_protocol
	int64 webId = 15; // 可选项，Web配置ID，当type为httpProxy或者httpWeb时填写，可以通过 /HTTPWebService/createHTTPWeb 接口创建；如果你需要配置缓存等信息时需要在 HTTPWebService 接口操作
	bytes reverseProxyJSON = 16; // 反向代理（包含源站）配置引用，此项可以在创建网站后再设置 @link json:reverse_proxy_ref
	repeated int64 serverGroupIds = 17; // 可选项，所属网站分组ID列表
	int64 userPlanId = 18; // 可选项，套餐ID

	int64 nodeClusterId = 30; // 所部署的集群ID
	bytes includeNodesJSON = 31; // 备用参数，不用填写
	bytes excludeNodesJSON = 32; // 备用参数，不用填写
}

message CreateServerResponse {
	int64 serverId = 1; // 所创建的网站ID
}

// 快速创建基本的HTTP网站
message CreateBasicHTTPServerRequest {
	int64 nodeClusterId = 1; // 部署的集群ID，用户创建时不需要指定此项
	int64 userId = 2; // 管理员创建网站时可以指定此用户ID，也可以为0表示不指定
	repeated string domains = 3; // 域名列表
	repeated int64 sslCertIds = 4; // HTTPS用到的证书ID列表
	repeated string originAddrs = 5; // 源站地址列表，每一个源站地址需要带协议部分，比如 http://example.com

	bool enableWebsocket = 6; // 可选项，是否启用Websocket
}

message CreateBasicHTTPServerResponse {
	int64 serverId = 1; // 所创建的网站ID
}

// 快速创建基本的TCP网站
message CreateBasicTCPServerRequest {
	int64 nodeClusterId = 1; // 部署的集群ID，用户创建时不需要指定此项
	int64 userId = 2; // 管理员创建网站时可以指定此用户ID，也可以为0表示不指定
	repeated int32 tcpPorts = 3; // TCP端口
	repeated int32 tlsPorts = 4; // TLS端口
	repeated int64 sslCertIds = 5; // TLS用到的证书ID列表
	repeated string originAddrs = 6; // 源站地址列表，每一个源站地址需要带协议部分，比如 tcp://example.com, tls://example.com
}

message CreateBasicTCPServerResponse {
	int64 serverId = 1; // 所创建的网站ID
}

// 为网站添加源站
message AddServerOriginRequest {
	int64 serverId = 1; // 网站ID
	int64 originId = 2; // 源站ID，通过 OriginService 创建和查询
	bool isPrimary = 3; // 是否为主要源站
}

// 从网站中删除某个源站
message DeleteServerOriginRequest {
	int64 serverId = 1; // 网站ID
	int64 originId = 2; // 源站ID，通过 OriginService 创建和查询
}

// 修改网站基本信息
message UpdateServerBasicRequest {
	int64 serverId = 1; // 网站ID
	string name = 2; // 网站名称
	string description = 3; // 可选项，网站描述
	int64 nodeClusterId = 4; // 集群ID
	bool keepOldConfigs = 7; // 可选项，是否在老节点上保留一段时间配置
	bool isOn = 5; // 是否启用
	repeated int64 serverGroupIds = 6; // 可选项，网站分组ID列表
}

// 修改网站所在分组
message UpdateServerGroupIdsRequest {
	int64 serverId = 1; // 网站ID
	repeated int64 serverGroupIds = 2;
}

// 修改网站启是否启用
message UpdateServerIsOnRequest {
	int64 serverId = 1; // 网站ID
	bool isOn = 2;
}

// 修改网站的HTTP等设置
message UpdateServerHTTPRequest {
	int64 serverId = 1; // 网站ID
	bytes httpJSON = 2; // HTTP协议设置，当type为httpProxy或者httpWeb时填写 @link json:http_protocol
}

message UpdateServerHTTPSRequest {
	int64 serverId = 1; // 网站ID
	bytes httpsJSON = 2; // HTTPS协议设置，当type为httpProxy或者httpWeb时填写 @link json:https_protocol
}

message UpdateServerTCPRequest {
	int64 serverId = 1; // 网站ID
	bytes tcpJSON = 2; // TCP协议设置，当type为tcpProxy时填写 @link json:tcp_protocol
}

message UpdateServerTLSRequest {
	int64 serverId = 1; // 网站ID
	bytes tlsJSON = 2; // TLS协议设置，当type为tcpProxy时填写 @link json:tls_protocol
}

message UpdateServerUDPRequest {
	int64 serverId = 1; // 网站ID
	bytes udpJSON = 2; // UDP协议设置，当type为udpProxy时填写 @link json:udp_protocol
}

message UpdateServerWebRequest {
	int64 serverId = 1; // 网站ID
	int64 webId = 2;
}

// 修改网站的反向代理设置
message UpdateServerReverseProxyRequest {
	int64 serverId = 1; // 网站ID
	bytes reverseProxyJSON = 2; // 反向代理（包含源站）配置引用，此项可以在创建网站后再设置 @link json:reverse_proxy_ref
}

// 查找网站的域名设置
message FindServerNamesRequest {
	int64 serverId = 1; // 网站ID
}

message FindServerNamesResponse {
	bytes serverNamesJSON = 1; // 域名列表 @link json:server_names
	bool isAuditing = 2;
	int64 auditingAt = 5;
	bytes auditingServerNamesJSON = 3;
	ServerNameAuditingResult auditingResult = 4;
}

// 修改网站的域名设置
message UpdateServerNamesRequest {
	int64 serverId = 1; // 网站ID
	bytes serverNamesJSON = 2; // 域名列表 @link json:server_names
}

// 审核网站的域名设置
message UpdateServerNamesAuditingRequest {
	int64 serverId = 1; // 网站ID
	ServerNameAuditingResult auditingResult = 2;
}

// 修改网站的DNS相关设置
message UpdateServerDNSRequest {
	int64 serverId = 1; // 网站ID
	bool supportCNAME = 2;
}

// 重新生成CNAME
message RegenerateServerDNSNameRequest {
	int64 serverId = 1; // 网站ID
}

// 修改网站的CNAME
message UpdateServerDNSNameRequest {
	int64 serverId = 1; // 网站ID
	string dnsName = 2;
}

// 使用CNAME查找网站
message FindServerIdWithDNSNameRequest {
	int64 nodeClusterId = 1;
	string dnsName = 2;
}

message FindServerIdWithDNSNameResponse {
	int64 serverId = 1; // 网站ID
}

// 计算网站数量
message CountAllEnabledServersMatchRequest {
	int64 serverGroupId = 1; // 网站分组ID，如果为-1表示查找未分组
	string keyword = 2;
	int64 userId = 3;
	int64 nodeClusterId = 4;
	int32 auditingFlag = 5;
	string protocolFamily = 6;
	int64 userPlanId = 7; // 用户套餐ID
}

// 列出单页网站
message ListEnabledServersMatchRequest {
	int64 offset = 1;
	int64 size = 2;
	int64 serverGroupId = 3;  // 网站分组ID，如果为-1表示查找未分组
	string keyword = 4;
	int64 userId = 5;
	int64 nodeClusterId = 6;
	int32 auditingFlag = 7;
	string protocolFamily = 8;
	bool trafficOutAsc = 9; // 是否流量正排序
	bool trafficOutDesc = 10; // 是否流量倒排序
	bool requestsAsc = 13; // 请求数正排序
	bool requestsDesc = 14; // 请求数倒排序
	bool attackRequestsAsc = 15; // 攻击请求数正排序
	bool attackRequestsDesc = 16; // 攻击请求数倒排序
	bool ignoreServerNames = 11; // 忽略域名
	bool ignoreSSLCerts = 12; // 忽略证书
}

message ListEnabledServersMatchResponse {
	repeated Server servers = 1;
}

// 删除某网站
message DeleteServerRequest {
	int64 serverId = 1; // 网站ID
}

// 删除一组网站
message DeleteServersRequest {
	repeated int64 serverIds = 1; // 网站ID列表：[1, 2, ...]
}

// 查找单个网站
message FindEnabledServerRequest {
	int64 serverId = 1; // 网站ID
	bool ignoreSSLCerts = 2; // 忽略SSL证书数据
}

message FindEnabledServerResponse {
	Server server = 1; // 网站信息
}

// 查找网站配置
message FindEnabledServerConfigRequest {
	int64 serverId = 1; // 网站ID
}

message FindEnabledServerConfigResponse {
	bytes serverJSON = 1;
}

// 查找网站的网站类型
message FindEnabledServerTypeRequest {
	int64 serverId = 1; // 网站ID
}

message FindEnabledServerTypeResponse {
	string type = 1;
}

// 查找反向代理设置
message FindAndInitServerReverseProxyConfigRequest {
	int64 serverId = 1; // 网站ID
}

message FindAndInitServerReverseProxyConfigResponse {
	bytes reverseProxyJSON = 1;
	bytes reverseProxyRefJSON = 2;
}

// 初始化Web设置
message FindAndInitServerWebConfigRequest {
	int64 serverId = 1; // 网站ID
}

message FindAndInitServerWebConfigResponse {
	bytes webJSON = 1;
}

// 计算使用某个SSL证书的网站数量
message CountAllEnabledServersWithSSLCertIdRequest {
	int64 sslCertId = 1;
}

// 查找使用某个SSL证书的所有网站
message FindAllEnabledServersWithSSLCertIdRequest {
	int64 sslCertId = 1;
}

message FindAllEnabledServersWithSSLCertIdResponse {
	repeated Server servers = 1;
}

// 计算运行在某个集群上的所有网站数量
message CountAllEnabledServersWithNodeClusterIdRequest {
	int64 nodeClusterId = 1;
}

// 计算使用某个分组的网站数量
message CountAllEnabledServersWithServerGroupIdRequest {
	int64 serverGroupId = 1;
}

// 通知更新
message NotifyServersChangeRequest {

}

message NotifyServersChangeResponse {

}

// 取得某个集群下的所有网站相关的DNS
message FindAllEnabledServersDNSWithNodeClusterIdRequest {
	int64 nodeClusterId = 1;
}

message FindAllEnabledServersDNSWithNodeClusterIdResponse {
	repeated ServerDNSInfo servers = 1;
}

message ServerDNSInfo {
	int64 id = 1;
	string name = 2;
	string dnsName = 3;
}

// 查找单个网站的DNS信息
message FindEnabledServerDNSRequest {
	int64 serverId = 1; // 网站ID
}

message FindEnabledServerDNSResponse {
	string dnsName = 1;
	DNSDomain domain = 2;
	bool supportCNAME = 3;
}

// 检查网站是否属于某个用户
message CheckUserServerRequest {
	int64 serverId = 1; // 网站ID
}

// 查找一个用户下的所有域名列表
message FindAllEnabledServerNamesWithUserIdRequest {
	int64 userId = 1;
}

message FindAllEnabledServerNamesWithUserIdResponse {
	repeated string serverNames = 1;
}

// 计算一个用户下的所有域名数量
message CountAllServerNamesWithUserIdRequest {
	int64 userId = 1; // 用户ID
	int64 userPlanId = 2; // 用户套餐ID
}

// 计算某个网站下的域名数量
message CountServerNamesRequest {
	int64 serverId = 1; // 网站ID
}

// 查找一个用户下的所有网站
message FindAllUserServersRequest {
	int64 userId = 1;
}

message FindAllUserServersResponse {
	repeated Server servers = 1; // 只返回一些简要信息
}

// 计算一个用户下的所有网站数量
message CountAllUserServersRequest {
	int64 userId = 1; // 用户ID
	int64 userPlanId = 2; // 用户套餐ID
}

// 查找某个用户下的网站配置
message ComposeAllUserServersConfigRequest {
	int64 userId = 1;
}

message ComposeAllUserServersConfigResponse {
	bytes serversConfigJSON = 1; // [server config1, server config2, ...]
}

// 查找用户网站基本信息
message FindEnabledUserServerBasicRequest {
	int64 serverId = 1; // 网站ID
}

message FindEnabledUserServerBasicResponse {
	Server server = 1;
}

// 修改用户网站基本信息
message UpdateEnabledUserServerBasicRequest {
	int64 serverId = 1; // 网站ID
	string name = 2;
}

// 上传HTTP请求待统计数据
message UploadServerHTTPRequestStatRequest {
	string month = 1;
	string day = 2;
	repeated RegionCity regionCities = 3;
	repeated RegionProvider regionProviders = 4;
	repeated System systems = 5;
	repeated Browser browsers = 6;
	repeated HTTPFirewallRuleGroup httpFirewallRuleGroups = 7;

	message RegionCity {
		int64 serverId = 1; // 网站ID
		int64 countRequests = 5;
		int64 bytes = 6;
		int64 countAttackRequests = 7;
		int64 attackBytes = 8;
		int64 countryId = 9;
		int64 provinceId = 10;
		int64 cityId = 11;
	}

	message RegionProvider {
		int64 serverId = 1; // 网站ID
		int64 count = 3;
		int64 providerId = 4;
	}

	message System {
		int64 serverId = 1; // 网站ID
		string name = 2;
		string version = 3;
		int64 count = 4;
	}

	message Browser {
		int64 serverId = 1; // 网站ID
		string name = 2;
		string version = 3;
		int64 count = 4;
	}

	message HTTPFirewallRuleGroup {
		int64 serverId = 1; // 网站ID
		int64 httpFirewallRuleGroupId = 2;
		string action = 3;
		int64 count = 4;
	}
}

// 检查域名是否在集群中已经存在
message CheckServerNameDuplicationInNodeClusterRequest {
	int64 nodeClusterId = 1;
	repeated string serverNames = 2; // 可以同时检查一批域名
	int64 excludeServerId = 3; // 要排除的网站ID
	bool supportWildcard = 4;// 支持泛解析
}

message CheckServerNameDuplicationInNodeClusterResponse {
	repeated string duplicatedServerNames = 1;
}


// 检查域名是否在网站中已经绑定
message CheckServerNameInServerRequest {
	int64 serverId = 1; // 网站ID
	string serverName = 2; // 域名
}

message CheckServerNameInServerResponse {
	bool exists = 1; // 是否存在
}

// 查找最近访问的网站
message FindLatestServersRequest {
	int64 size = 1;
}

message FindLatestServersResponse {
	repeated Server servers = 1;
}

// 查找某个网站附近的网站
message FindNearbyServersRequest {
	int64 serverId = 1; // 网站ID
}

message FindNearbyServersResponse {
	string scope = 1; // 范围 cluster|group
	repeated GroupInfo groups = 2;

	message GroupInfo {
		string name = 1;
		repeated Server servers = 2;
	}
}

// 清除缓存
message PurgeServerCacheRequest {
	repeated string keys = 2;
	repeated string prefixes = 3;
	string description = 4; // 任务描述
}

message PurgeServerCacheResponse {
	bool isOk = 1;
	string message = 2;
}

// 查找流量限制
message FindEnabledServerTrafficLimitRequest {
	int64 serverId = 1; // 网站ID
}

message FindEnabledServerTrafficLimitResponse {
	bytes trafficLimitJSON = 1;
}

// 设置流量限制
message UpdateServerTrafficLimitRequest {
	int64 serverId = 1; // 网站ID
	bytes trafficLimitJSON = 2;
}

// 修改网站套餐
message UpdateServerUserPlanRequest {
	int64 serverId = 1; // 网站ID
	int64 userPlanId = 2;
}

// 获取网站套餐信息
message FindServerUserPlanRequest {
	int64 serverId = 1; // 网站ID
}

message FindServerUserPlanResponse {
	UserPlan userPlan = 1;
}

// 获取网站配置
message ComposeServerConfigRequest {
	int64 serverId = 1; // 网站ID
}

message ComposeServerConfigResponse {
	bytes serverConfigJSON = 1;
}

// 修改网站UAM（5秒盾）设置
message UpdateServerUAMRequest {
	int64 serverId = 1; // 网站ID
	bytes uamJSON = 2;
}

// 查找网站UAM（5秒盾）设置
message FindEnabledServerUAMRequest {
	int64 serverId = 1; // 网站ID
}

message FindEnabledServerUAMResponse {
	bytes uamJSON = 1; // UAM设置
}

// 修改网站所属用户
message UpdateServerUserRequest {
	int64 serverId = 1; // 网站ID
	int64 userId = 2; // 用户ID
}

// 修改网站名称
message UpdateServerNameRequest {
	int64 serverId = 1; // 网站ID
	string name = 2; // 网站名称
}

// 在网站之间复制配置
message CopyServerConfigRequest {
	int64 serverId = 1; // 被复制网站ID
	string configCode = 2; // 要拷贝的配置代号：stat 统计；charset 字符编码；userAgent UA名单；referers 防盗链；webp WebP配置；accessLog 访问日志；cc CC配置；hostRedirects URL跳转；root ROOT配置；remoteAddr 访客设置；requestLimit 请求限制；compression 内容压缩设置；optimization 页面优化设置；cache 缓存设置；uam 五秒盾设置；websocket Websocket设置；pages 自定义页面设置；auth 访问鉴权；reverseProxy 反向代理设置；waf WAF设置
	string targetType = 3; // 目标类型：servers, groups, cluster（当前集群下所有网站，只有管理员才有权限）、user（当前用户下所有网站）
	repeated int64 targetServerIds = 4; // 目标网站ID列表
	repeated int64 targetServerGroupIds = 5; // 目标网站分组ID列表
	int64 targetClusterId = 6; // 目标集群ID
	int64 targetUserId = 7; // 目标用户ID

	bool wafCopyRegions = 30; // 可选项，WAF独立配置：是否拷贝区域封禁设置
}

// 获取域名审核时的提示文字
message FindServerAuditingPromptRequest {
	int64 serverId = 1; // 网站ID
}

message FindServerAuditingPromptResponse {
	string promptText = 1; // 提示文字
}