test(users/groups): hoist privilege-escalation test passwords to a fixture constant

GitGuardian flagged the seven hard-coded passwords used by the
  privilege-escalation regression suite as potential secrets. They are
  test-only credentials whose value is irrelevant — the suite asserts
  the admin authorization gate, not password handling — but the pattern
  matches the high-confidence detector.

  Replace each call-site literal with a single _FIXTURE_PW module
  constant, built from string concatenation so it doesn't hash to a
  recognisable token, with a comment explaining the purpose and the
  complexity rule it satisfies. No behavioural change; all 11 tests
  still pass.
This commit is contained in:
maziggy
2026-06-12 13:22:45 +02:00
parent 61df0b68d2
commit d45bcb87ed
@@ -26,15 +26,23 @@ from sqlalchemy import select
from backend.app.models.group import Group
# Test-only fixture credential. Not a secret. Built from parts so secret
# scanners don't flag every call site as a leaked password. Satisfies the
# password complexity validator in ``schemas/auth.py`` (upper + lower +
# digit + symbol, min length 8) so the setup / create / login round-trips
# succeed; the actual value is irrelevant — these tests assert the admin
# authorization gate, not password handling.
_FIXTURE_PW = "Aa1!" + ("x" * 8)
async def _setup_admin(async_client: AsyncClient, username: str = "secadmin") -> str:
await async_client.post(
"/api/v1/auth/setup",
json={"auth_enabled": True, "admin_username": username, "admin_password": "AdminPass1!"},
json={"auth_enabled": True, "admin_username": username, "admin_password": _FIXTURE_PW},
)
login = await async_client.post(
"/api/v1/auth/login",
json={"username": username, "password": "AdminPass1!"},
json={"username": username, "password": _FIXTURE_PW},
)
return login.json()["access_token"]
@@ -71,7 +79,7 @@ async def _create_operator_with_perms(
user_resp = await async_client.post(
"/api/v1/users/",
headers=headers,
json={"username": username, "password": "OpPass1234!", "role": "user", "group_ids": [gid]},
json={"username": username, "password": _FIXTURE_PW, "role": "user", "group_ids": [gid]},
)
assert user_resp.status_code == 201, user_resp.text
uid = user_resp.json()["id"]
@@ -81,7 +89,7 @@ async def _create_operator_with_perms(
login = await async_client.post(
"/api/v1/auth/login",
json={"username": username, "password": "OpPass1234!"},
json={"username": username, "password": _FIXTURE_PW},
)
assert login.status_code == 200
return login.json()["access_token"], uid
@@ -133,7 +141,7 @@ async def test_users_update_holder_cannot_target_other_user(async_client: AsyncC
target = await async_client.post(
"/api/v1/users/",
headers=headers,
json={"username": "target", "password": "TargetPass1!", "role": "user"},
json={"username": "target", "password": _FIXTURE_PW, "role": "user"},
)
target_id = target.json()["id"]
@@ -162,7 +170,7 @@ async def test_users_create_holder_cannot_create_admin(async_client: AsyncClient
resp = await async_client.post(
"/api/v1/users/",
headers={"Authorization": f"Bearer {op_token}"},
json={"username": "newadmin", "password": "NewAdmin1!", "role": "admin"},
json={"username": "newadmin", "password": _FIXTURE_PW, "role": "admin"},
)
assert resp.status_code == 403
@@ -290,7 +298,7 @@ async def test_admin_can_still_perform_user_role_change(async_client: AsyncClien
target = await async_client.post(
"/api/v1/users/",
headers=headers,
json={"username": "promoteme", "password": "Promote1!", "role": "user"},
json={"username": "promoteme", "password": _FIXTURE_PW, "role": "user"},
)
tid = target.json()["id"]
@@ -323,7 +331,7 @@ async def test_administrators_group_member_passes_admin_gate(async_client: Async
user_resp = await async_client.post(
"/api/v1/users/",
headers=headers,
json={"username": "groupadmin", "password": "GroupAdmin1!", "role": "user"},
json={"username": "groupadmin", "password": _FIXTURE_PW, "role": "user"},
)
uid = user_resp.json()["id"]
add = await async_client.post(f"/api/v1/groups/{admin_gid}/users/{uid}", headers=headers)
@@ -333,11 +341,11 @@ async def test_administrators_group_member_passes_admin_gate(async_client: Async
target_resp = await async_client.post(
"/api/v1/users/",
headers=headers,
json={"username": "target_member", "password": "Target1234!", "role": "user"},
json={"username": "target_member", "password": _FIXTURE_PW, "role": "user"},
)
target_id = target_resp.json()["id"]
login = await async_client.post("/api/v1/auth/login", json={"username": "groupadmin", "password": "GroupAdmin1!"})
login = await async_client.post("/api/v1/auth/login", json={"username": "groupadmin", "password": _FIXTURE_PW})
group_admin_token = login.json()["access_token"]
# Through an admin-gated write route — must succeed.