| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- from __future__ import annotations
- from datetime import UTC, datetime, timedelta
- async def test_password_hash_and_session_lifecycle(app_modules):
- security = app_modules.load("wbb.admin.security")
- admin_db = app_modules.load("wbb.utils.dbadmin")
- encoded = security.hash_password("qwe0.123456")
- assert encoded.startswith("scrypt$")
- assert security.verify_password("qwe0.123456", encoded)
- assert not security.verify_password("wrong-password", encoded)
- user = await admin_db.ensure_default_admin(username="admin", password_hash=encoded)
- assert user["must_change_password"] is True
- raw_token = security.generate_session_token()
- token_hash = security.hash_token(raw_token)
- await admin_db.create_admin_session(
- username="admin",
- token_hash=token_hash,
- csrf_token="csrf-token",
- expires_at=datetime.now(UTC) + timedelta(hours=1),
- remote_address="127.0.0.1",
- user_agent="pytest",
- )
- session = await admin_db.get_admin_session(token_hash)
- assert session is not None
- assert session["user"]["username"] == "admin"
- await admin_db.update_admin_password("admin", security.hash_password("new-pass-123"))
- assert await admin_db.get_admin_session(token_hash) is None
- updated = await admin_db.get_admin_user("admin")
- assert updated["must_change_password"] is False
- def test_new_password_validation(app_modules):
- security = app_modules.load("wbb.admin.security")
- assert security.validate_new_password("short")
- assert security.validate_new_password("onlyletters")
- assert security.validate_new_password("1234567890")
- assert security.validate_new_password("valid-pass-123") == []
|