dynamic_hmac_key.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. """
  2. 动态HMAC密钥模型
  3. 用于存储用户特定的动态HMAC密钥
  4. """
  5. from datetime import datetime
  6. from sqlalchemy import Column, Integer, String, DateTime, Boolean, Text
  7. from app.database import Base
  8. from app.utils.timezone import beijing_now_naive
  9. class DynamicHmacKey(Base):
  10. """动态HMAC密钥表
  11. 用于存储用户登录后获取的动态HMAC密钥,
  12. 该密钥用于后续请求的签名验证。
  13. """
  14. __tablename__ = "dynamic_hmac_keys"
  15. id = Column(Integer, primary_key=True, autoincrement=True, comment="主键ID")
  16. user_id = Column(Integer, nullable=False, comment="用户ID")
  17. hmac_key = Column(Text, nullable=False, comment="HMAC密钥(Base64编码)")
  18. machine_code = Column(String(128), nullable=False, comment="机器码")
  19. key_version = Column(Integer, default=1, comment="密钥版本")
  20. is_active = Column(Boolean, default=True, comment="是否激活")
  21. is_deleted = Column(Boolean, default=False, comment="是否删除")
  22. created_at = Column(DateTime, default=beijing_now_naive, comment="创建时间")
  23. updated_at = Column(DateTime, nullable=True, comment="更新时间")
  24. expired_at = Column(DateTime, nullable=True, comment="过期时间")
  25. def __repr__(self):
  26. return f"<DynamicHmacKey(id={self.id}, user_id={self.user_id}, key_version={self.key_version})>"
  27. def is_expired(self) -> bool:
  28. """检查密钥是否过期"""
  29. if self.expired_at:
  30. return beijing_now_naive() > self.expired_at
  31. return False