application.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import enum
  2. from sqlalchemy import Column, Integer, String, Enum, Text, DateTime, ForeignKey, Boolean
  3. from sqlalchemy.sql import func
  4. from sqlalchemy.orm import relationship
  5. from app.core.database import Base
  6. class ProtocolType(str, enum.Enum):
  7. OIDC = "OIDC"
  8. SIMPLE_API = "SIMPLE_API"
  9. class Application(Base):
  10. __tablename__ = "applications"
  11. id = Column(Integer, primary_key=True, index=True)
  12. app_id = Column(String(32), unique=True, index=True, nullable=False)
  13. # Changed: Store plain secret for HMAC verification capability
  14. # In production, use Fernet encryption (symmetric) to store this.
  15. app_secret = Column(String(128), nullable=False)
  16. app_name = Column(String(100), nullable=True)
  17. icon_url = Column(String(255), nullable=True)
  18. protocol_type = Column(Enum(ProtocolType), default=ProtocolType.SIMPLE_API, nullable=False)
  19. # Stores JSON list of redirect URIs
  20. redirect_uris = Column(Text, nullable=True)
  21. notification_url = Column(String(255), nullable=True)
  22. # Permanent Access Token for M2M operations (User Mapping Sync)
  23. access_token = Column(String(128), unique=True, index=True, nullable=True)
  24. # Ownership & Logic Delete
  25. owner_id = Column(Integer, ForeignKey("users.id"), nullable=True)
  26. is_deleted = Column(Boolean, default=False, nullable=False)
  27. owner = relationship("User") # Link to User model
  28. created_at = Column(DateTime(timezone=True), server_default=func.now())
  29. updated_at = Column(DateTime(timezone=True), onupdate=func.now(), server_default=func.now())