feat: isolate external application conversations

This commit is contained in:
2026-08-03 18:57:19 +08:00
parent 26109648af
commit cd3c875106
26 changed files with 843 additions and 110 deletions

View File

@@ -2,7 +2,7 @@ from __future__ import annotations
from datetime import datetime
from pydantic import BaseModel, Field, field_validator
from pydantic import BaseModel, Field, field_validator, model_validator
class SsoTicketRequest(BaseModel):
@@ -20,6 +20,8 @@ class SsoClientSaveRequest(BaseModel):
appId: str = Field(min_length=3, max_length=80, pattern=r"^[A-Za-z0-9][A-Za-z0-9._-]+$")
name: str = Field(min_length=1, max_length=100)
redirectUris: list[str] = Field(default_factory=list, max_length=20)
allowAutoRegister: bool = False
defaultEntitlementPlanId: int | None = Field(default=None, gt=0)
status: int = Field(default=1, ge=0, le=1)
@field_validator("redirectUris")
@@ -36,10 +38,18 @@ class SsoClientSaveRequest(BaseModel):
cleaned.append(value)
return cleaned
@model_validator(mode="after")
def validate_auto_register_plan(self):
if self.allowAutoRegister and self.defaultEntitlementPlanId is None:
raise ValueError("允许自动注册时必须选择默认权益版本")
return self
class SsoClientUpdateRequest(BaseModel):
name: str = Field(min_length=1, max_length=100)
redirectUris: list[str] = Field(default_factory=list, max_length=20)
allowAutoRegister: bool = False
defaultEntitlementPlanId: int | None = Field(default=None, gt=0)
status: int = Field(default=1, ge=0, le=1)
@field_validator("redirectUris")
@@ -47,6 +57,10 @@ class SsoClientUpdateRequest(BaseModel):
def validate_redirect_uris(cls, values: list[str]) -> list[str]:
return SsoClientSaveRequest.validate_redirect_uris(values)
@model_validator(mode="after")
def validate_auto_register_plan(self):
return SsoClientSaveRequest.validate_auto_register_plan(self)
class SsoPublicConfigRequest(BaseModel):
userClientUrl: str = Field(default="", max_length=1000)
@@ -65,6 +79,9 @@ class SsoClientItem(BaseModel):
appId: str
name: str
redirectUris: list[str]
allowAutoRegister: bool
defaultEntitlementPlanId: int | None = None
defaultEntitlementPlanName: str | None = None
status: int
identityCount: int
lastUsedAt: datetime | None = None