test_admin_security.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from __future__ import annotations
  2. from datetime import UTC, datetime, timedelta
  3. async def test_password_hash_and_session_lifecycle(app_modules):
  4. security = app_modules.load("wbb.admin.security")
  5. admin_db = app_modules.load("wbb.utils.dbadmin")
  6. encoded = security.hash_password("qwe0.123456")
  7. assert encoded.startswith("scrypt$")
  8. assert security.verify_password("qwe0.123456", encoded)
  9. assert not security.verify_password("wrong-password", encoded)
  10. user = await admin_db.ensure_default_admin(username="admin", password_hash=encoded)
  11. assert user["must_change_password"] is True
  12. raw_token = security.generate_session_token()
  13. token_hash = security.hash_token(raw_token)
  14. await admin_db.create_admin_session(
  15. username="admin",
  16. token_hash=token_hash,
  17. csrf_token="csrf-token",
  18. expires_at=datetime.now(UTC) + timedelta(hours=1),
  19. remote_address="127.0.0.1",
  20. user_agent="pytest",
  21. )
  22. session = await admin_db.get_admin_session(token_hash)
  23. assert session is not None
  24. assert session["user"]["username"] == "admin"
  25. await admin_db.update_admin_password("admin", security.hash_password("new-pass-123"))
  26. assert await admin_db.get_admin_session(token_hash) is None
  27. updated = await admin_db.get_admin_user("admin")
  28. assert updated["must_change_password"] is False
  29. def test_new_password_validation(app_modules):
  30. security = app_modules.load("wbb.admin.security")
  31. assert security.validate_new_password("short")
  32. assert security.validate_new_password("onlyletters")
  33. assert security.validate_new_password("1234567890")
  34. assert security.validate_new_password("valid-pass-123") == []