100 lines
5.5 KiB
Python
100 lines
5.5 KiB
Python
from datetime import datetime
|
||
|
||
from pydantic import BaseModel, ConfigDict, Field
|
||
from pydantic.alias_generators import to_camel
|
||
|
||
|
||
class TransportCryptoFrontendConfigModel(BaseModel):
|
||
"""
|
||
传输层加解密前端运行配置模型
|
||
"""
|
||
|
||
model_config = ConfigDict(alias_generator=to_camel)
|
||
|
||
transport_crypto_enabled: bool = Field(description='后端是否启用传输层加解密')
|
||
transport_crypto_mode: str = Field(description='当前传输层加解密模式')
|
||
transport_crypto_active: bool = Field(description='前端当前是否应启用传输层加解密')
|
||
envelope_version: str = Field(description='当前传输层加密信封协议版本')
|
||
public_key_url: str = Field(description='传输层公钥接口路径')
|
||
request_envelope_algorithm: str = Field(description='前端请求信封算法标识')
|
||
response_envelope_algorithm: str = Field(description='前端响应信封算法标识')
|
||
enabled_paths: list[str] = Field(description='启用传输层加解密的路径列表')
|
||
required_paths: list[str] = Field(description='强制要求加密传输的路径列表')
|
||
exclude_paths: list[str] = Field(description='排除传输层加解密的路径列表')
|
||
max_encrypted_get_url_length: int = Field(description='前端执行加密GET/DELETE请求时允许的最大URL长度')
|
||
config_expire_at: int = Field(description='前端配置建议刷新时间戳')
|
||
|
||
|
||
class TransportCryptoPublicKeyModel(BaseModel):
|
||
"""
|
||
传输层加解密公钥下发模型
|
||
"""
|
||
|
||
model_config = ConfigDict(alias_generator=to_camel)
|
||
|
||
kid: str = Field(description='当前启用的密钥版本标识')
|
||
envelope_version: str = Field(description='当前传输层加密信封协议版本')
|
||
alg: str = Field(description='当前传输层加密算法标识')
|
||
public_key: str = Field(description='当前可用的传输层公钥')
|
||
supported_kids: list[str] = Field(description='当前支持解密的密钥版本列表')
|
||
expire_at: int = Field(description='当前公钥建议刷新时间戳')
|
||
|
||
|
||
class TransportCryptoKidStatModel(BaseModel):
|
||
"""
|
||
传输层加解密按密钥版本统计模型
|
||
"""
|
||
|
||
model_config = ConfigDict(alias_generator=to_camel)
|
||
|
||
kid: str | None = Field(default=None, description='密钥版本标识')
|
||
encrypted_requests: int | None = Field(default=0, description='加密请求次数')
|
||
decrypt_success: int | None = Field(default=0, description='请求解密成功次数')
|
||
decrypt_failure: int | None = Field(default=0, description='请求解密失败次数')
|
||
encrypted_responses: int | None = Field(default=0, description='加密响应次数')
|
||
|
||
|
||
class TransportCryptoFailureRecordModel(BaseModel):
|
||
"""
|
||
传输层加解密最近失败记录模型
|
||
"""
|
||
|
||
model_config = ConfigDict(alias_generator=to_camel)
|
||
|
||
time: datetime | None = Field(default=None, description='失败时间')
|
||
method: str | None = Field(default=None, description='请求方法')
|
||
path: str | None = Field(default=None, description='请求路径')
|
||
reason: str | None = Field(default=None, description='失败原因分类')
|
||
kid: str | None = Field(default=None, description='密钥版本标识')
|
||
|
||
|
||
class TransportCryptoMonitorModel(BaseModel):
|
||
"""
|
||
传输层加解密监控模型
|
||
"""
|
||
|
||
model_config = ConfigDict(alias_generator=to_camel)
|
||
|
||
monitor_scope: str | None = Field(default=None, description='监控统计范围,默认基于Redis聚合')
|
||
started_at: datetime | None = Field(default=None, description='当前监控统计起始时间')
|
||
app_env: str | None = Field(default=None, description='当前应用环境')
|
||
transport_crypto_enabled: bool | None = Field(default=None, description='是否启用传输层加解密')
|
||
transport_crypto_mode: str | None = Field(default=None, description='当前传输层加解密模式')
|
||
current_kid: str | None = Field(default=None, description='当前启用的密钥版本')
|
||
supported_kids: list[str] | None = Field(default=[], description='当前支持的密钥版本列表')
|
||
enabled_paths: list[str] | None = Field(default=[], description='启用传输层加解密的路径列表')
|
||
required_paths: list[str] | None = Field(default=[], description='强制要求加密传输的路径列表')
|
||
exclude_paths: list[str] | None = Field(default=[], description='排除传输层加解密的路径列表')
|
||
requests_total: int | None = Field(default=0, description='命中传输层加解密规则的请求总数')
|
||
plain_requests_total: int | None = Field(default=0, description='明文请求总数')
|
||
encrypted_requests_total: int | None = Field(default=0, description='加密请求总数')
|
||
required_rejected_total: int | None = Field(default=0, description='强制加密接口被拒绝的次数')
|
||
decrypt_success_total: int | None = Field(default=0, description='请求解密成功次数')
|
||
decrypt_failure_total: int | None = Field(default=0, description='请求解密失败次数')
|
||
plain_responses_total: int | None = Field(default=0, description='明文响应次数')
|
||
encrypted_responses_total: int | None = Field(default=0, description='加密响应次数')
|
||
encrypted_error_responses_total: int | None = Field(default=0, description='加密错误响应次数')
|
||
failure_reasons: dict[str, int] | None = Field(default={}, description='按失败原因归类的次数统计')
|
||
kid_stats: list[TransportCryptoKidStatModel] | None = Field(default=[], description='按密钥版本归类的统计信息')
|
||
recent_failures: list[TransportCryptoFailureRecordModel] | None = Field(default=[], description='最近失败事件列表')
|