FluxIP/app/integrations/schemas.py

45 lines
1.4 KiB
Python

from __future__ import annotations
from pydantic import BaseModel, Field, field_validator, model_validator
class IntegrationUpdate(BaseModel):
use_default_aws_credentials: bool = False
aws_access_key_id: str | None = Field(default=None, max_length=128)
aws_secret_access_key: str | None = Field(default=None, max_length=256)
aws_session_token: str | None = Field(default=None, max_length=4096)
cloudflare_api_token: str | None = Field(default=None, max_length=2048)
@field_validator(
"aws_access_key_id",
"aws_secret_access_key",
"aws_session_token",
"cloudflare_api_token",
mode="before",
)
@classmethod
def normalize_secret(cls, value: object) -> object:
if value is None:
return None
normalized = str(value).strip()
return normalized or None
@model_validator(mode="after")
def validate_aws_pair(self) -> IntegrationUpdate:
if bool(self.aws_access_key_id) != bool(self.aws_secret_access_key):
raise ValueError("AWS Access Key ID 和 Secret Access Key 需要同时填写")
return self
class SecretFlags(BaseModel):
aws_access_key_id: bool
aws_secret_access_key: bool
aws_session_token: bool
cloudflare_api_token: bool
class IntegrationView(BaseModel):
config_version: int
use_default_aws_credentials: bool
secrets_configured: SecretFlags