import datetime import uuid import base64 from sqlalchemy import Column, String, DateTime, Text, Boolean, LargeBinary from sqlalchemy.sql import func from app.db.base import Base class Secret(Base): __tablename__ = "secrets" id = Column(String(36), primary_key=True, index=True, default=lambda: str(uuid.uuid4())) content = Column(Text, nullable=False) # This will be encrypted salt = Column(LargeBinary, nullable=False) # For encryption access_key = Column(String(64), unique=True, index=True, nullable=False) is_accessed = Column(Boolean, default=False) expires_at = Column(DateTime, nullable=False) created_at = Column(DateTime, default=func.now(), nullable=False) updated_at = Column(DateTime, default=func.now(), onupdate=func.now(), nullable=False) @property def is_expired(self): """Check if the secret has expired.""" return datetime.datetime.utcnow() > self.expires_at @property def salt_b64(self): """Return the salt as a base64 encoded string.""" return base64.b64encode(self.salt).decode() if self.salt else None