application.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from typing import Optional, List
  2. from pydantic import BaseModel, HttpUrl
  3. from enum import Enum
  4. from datetime import datetime
  5. class ProtocolType(str, Enum):
  6. OIDC = "OIDC"
  7. SIMPLE_API = "SIMPLE_API"
  8. class ApplicationBase(BaseModel):
  9. app_name: str
  10. icon_url: Optional[str] = None
  11. protocol_type: ProtocolType = ProtocolType.SIMPLE_API
  12. redirect_uris: Optional[str] = None # Stored as JSON string or comma-separated for simplicity in MVP, or validate as list
  13. notification_url: Optional[str] = None
  14. class ApplicationCreate(ApplicationBase):
  15. sync_all_users: bool = False
  16. sync_email: bool = False
  17. email_domain: Optional[str] = None
  18. class ApplicationUpdate(BaseModel):
  19. app_name: Optional[str] = None
  20. icon_url: Optional[str] = None
  21. protocol_type: Optional[ProtocolType] = None
  22. redirect_uris: Optional[str] = None
  23. notification_url: Optional[str] = None
  24. password: Optional[str] = None
  25. verification_code: Optional[str] = None
  26. class ApplicationTransferRequest(BaseModel):
  27. target_mobile: str
  28. password: str
  29. verification_code: str
  30. class RegenerateSecretRequest(BaseModel):
  31. password: str
  32. verification_code: str
  33. class ApplicationResponse(ApplicationBase):
  34. id: int
  35. app_id: str
  36. owner_id: int
  37. # We do NOT return app_secret_hash
  38. created_at: datetime
  39. updated_at: datetime
  40. class Config:
  41. from_attributes = True
  42. class ApplicationList(BaseModel):
  43. total: int
  44. items: List[ApplicationResponse]
  45. class ApplicationSecretDisplay(BaseModel):
  46. app_id: str
  47. app_secret: str
  48. access_token: Optional[str] = None
  49. class ViewSecretRequest(BaseModel):
  50. password: str