auth.py 895 B

1234567891011121314151617181920212223242526272829303132333435
  1. import secrets
  2. import time
  3. from typing import Optional
  4. from .config import settings
  5. # 内存 token 存储:token -> 过期时间(monotonic 秒)。服务重启后失效,需重新登录。
  6. _tokens: dict[str, float] = {}
  7. def create_token() -> str:
  8. token = secrets.token_hex(32)
  9. _tokens[token] = time.monotonic() + settings.auth_token_ttl_seconds
  10. return token
  11. def validate_token(token: Optional[str]) -> bool:
  12. if not token:
  13. return False
  14. expires = _tokens.get(token)
  15. if expires is None:
  16. return False
  17. if time.monotonic() > expires:
  18. _tokens.pop(token, None)
  19. return False
  20. return True
  21. def revoke_token(token: Optional[str]) -> None:
  22. if token:
  23. _tokens.pop(token, None)
  24. def verify_credentials(username: str, password: str) -> bool:
  25. return username == settings.auth_user and password == settings.auth_password