mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-09-30 03:01:21 +02:00
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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user