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

package pb;

import "models/rpc_messages.proto";

// SSL/TLS策略管理服务
service SSLPolicyService {
	// 创建策略
	rpc createSSLPolicy (CreateSSLPolicyRequest) returns (CreateSSLPolicyResponse);

	// 修改策略
	rpc updateSSLPolicy (UpdateSSLPolicyRequest) returns (RPCSuccess);

	// 查找策略
	rpc findEnabledSSLPolicyConfig (FindEnabledSSLPolicyConfigRequest) returns (FindEnabledSSLPolicyConfigResponse);
}

// 创建策略
message CreateSSLPolicyRequest {
	bool http2Enabled = 1; // 可选项，是否启用HTTP/2
	bool http3Enabled = 10; // 可选项，是否启用HTTP/3（在满足条件的基础上）
	string minVersion = 2; // 支持的最低SSL版本，可选择值： SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3
	bytes sslCertsJSON = 3; // 可选项，关联的证书信息，可以在创建后再通过修改策略来配置 @link json:ssl_cert_refs
	bytes hstsJSON = 4; // 可选项，HSTS配置 @link json:hsts
	int32 clientAuthType = 5; // 可选项，客户端校验类型：0 无需证书，1 需要客户端证书，2 需要任一客户端证书，3 如果客户端上传了证书才校验，4 需要客户端证书而且需要校验
	bytes clientCACertsJSON = 6; // 可选项，CA证书内容
	repeated string cipherSuites = 7; // 可选项，自定义加密套件
	bool cipherSuitesIsOn = 8; // 可选项，是否启用自定义加密套件
	bool ocspIsOn = 9; // 可选项，是否启用OCSP
}

message CreateSSLPolicyResponse {
	int64 sslPolicyId = 1; // 创建的策略ID
}

// 修改策略
message UpdateSSLPolicyRequest {
	int64 sslPolicyId = 1; // 策略ID
	bool http2Enabled = 2; // 可选项，是否启用HTTP/2
	bool http3Enabled = 11; // 可选项，是否启用HTTP/3（在满足条件的基础上）
	string minVersion = 3; // 支持的最低SSL版本，可选择值： SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3
	bytes sslCertsJSON = 4; // 关联的证书信息 @link json:ssl_cert_refs
	bytes hstsJSON = 5; // 可选项，HSTS配置 @link json:hsts
	int32 clientAuthType = 6; // 可选项，客户端校验类型：0 无需证书，1 需要客户端证书，2 需要任一客户端证书，3 如果客户端上传了证书才校验，4 需要客户端证书而且需要校验
	bytes clientCACertsJSON = 7; // 可选项，CA证书内容
	repeated string cipherSuites = 8; // 可选项，自定义加密套件
	bool cipherSuitesIsOn = 9; // 可选项，是否启用自定义加密套件
	bool ocspIsOn = 10; // 可选项，是否启用OCSP
}

// 查找策略
message FindEnabledSSLPolicyConfigRequest {
	int64 sslPolicyId = 1; // SSL策略ID
	bool ignoreData = 2; // 是否忽略证书内容数据
}

message FindEnabledSSLPolicyConfigResponse {
	bytes sslPolicyJSON = 1; // 策略配置信息
}