application.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. pass
  16. class ApplicationUpdate(BaseModel):
  17. app_name: Optional[str] = None
  18. icon_url: Optional[str] = None
  19. protocol_type: Optional[ProtocolType] = None
  20. redirect_uris: Optional[str] = None
  21. notification_url: Optional[str] = None
  22. password: Optional[str] = None
  23. verification_code: Optional[str] = None
  24. class ApplicationTransferRequest(BaseModel):
  25. target_mobile: str
  26. password: str
  27. verification_code: str
  28. class RegenerateSecretRequest(BaseModel):
  29. password: str
  30. verification_code: str
  31. class ApplicationResponse(ApplicationBase):
  32. id: int
  33. app_id: str
  34. owner_id: int
  35. # We do NOT return app_secret_hash
  36. created_at: datetime
  37. updated_at: datetime
  38. class Config:
  39. from_attributes = True
  40. class ApplicationList(BaseModel):
  41. total: int
  42. items: List[ApplicationResponse]
  43. class ApplicationSecretDisplay(BaseModel):
  44. app_id: str
  45. app_secret: str
  46. access_token: Optional[str] = None
  47. class ViewSecretRequest(BaseModel):
  48. password: str
  49. class AppSyncRequest(BaseModel):
  50. mode: str = "ALL" # "ALL" or "SELECTED"
  51. user_ids: Optional[List[int]] = []
  52. init_email: bool = False
  53. email_domain: Optional[str] = None
  54. verification_code: str