umbau 1.0
This commit is contained in:
@ -190,9 +190,36 @@ async def test_password_change_invalidates_old_session_everywhere(client):
|
||||
|
||||
# Altes Cookie (vor dem Passwortwechsel ausgestellt) erneut einspielen --
|
||||
# muss durch die session_version-Pruefung invalidiert sein (Konzept 6.2).
|
||||
client.cookies.set("jh_session", old_cookie)
|
||||
resp = await client.get("/auth/me")
|
||||
assert resp.status_code == 401
|
||||
#
|
||||
# Bewusst NICHT ueber client.cookies.set(...)/cookies=<...> auf dem
|
||||
# GETEILTEN `client`-Fixture: dessen Jar traegt an dieser Stelle bereits
|
||||
# die NEUE, gueltige Sitzung aus der change-password-Antwort oben.
|
||||
# client.cookies.set() kann je nach httpx-Version einen zweiten,
|
||||
# mehrdeutigen Jar-Eintrag statt eines Ersatzes erzeugen: der Request
|
||||
# wuerde dann weiterhin (auch) die noch gueltige NEUE Sitzung
|
||||
# mitschicken. Der per-Request-Parameter `cookies=` ist fuer genau
|
||||
# diesen Fall (Ueberschreiben einer bereits im Jar vorhandenen Cookie)
|
||||
# KEINE zuverlaessige Abhilfe: httpx warnt selbst per
|
||||
# DeprecationWarning, dass das Zusammenspiel mit einem bereits
|
||||
# gesetzten Jar-Eintrag "ambiguous" ist -- ein eigener Testlauf hat das
|
||||
# bestaetigt (der alte Cookie wurde NICHT wirksam, der Request nutzte
|
||||
# weiterhin die neue Sitzung aus dem Jar, Test schlug trotz korrektem
|
||||
# Server faelschlich fehl). Ein voellig frischer, jar-loser Client hat
|
||||
# dagegen zuverlaessig funktioniert (siehe FORTSETZUNG_Teil_C.md
|
||||
# Abschnitt 3 Punkt 6 fuer die vollstaendige Untersuchung) -- deshalb
|
||||
# hier bewusst ein zweiter, eigener AsyncClient nur fuer diesen einen
|
||||
# Replay-Request, unabhaengig vom Jar-Zustand des Fixture-Clients.
|
||||
from httpx import ASGITransport, AsyncClient
|
||||
from app.main import app as fastapi_app
|
||||
|
||||
async with AsyncClient(transport=ASGITransport(app=fastapi_app), base_url="https://testserver") as replay_client:
|
||||
# .set() auf dem LEEREN Jar dieses frischen Clients ist eindeutig
|
||||
# (kein vorhandener Eintrag, der ueberschrieben werden muesste) --
|
||||
# folgt damit auch httpx' eigener Empfehlung in der oben erklaerten
|
||||
# DeprecationWarning ("Set cookies directly on the client instance").
|
||||
replay_client.cookies.set("jh_session", old_cookie)
|
||||
resp = await replay_client.get("/auth/me")
|
||||
assert resp.status_code == 401, resp.text
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@ -266,10 +293,15 @@ async def test_user_cannot_access_host_outside_granted_hostgroup(client):
|
||||
"INSERT INTO hosts (id, host_group_id, hostname, address, protocol, port, os_type, "
|
||||
"file_transfer_enabled) VALUES (2, 2, 'b01', '10.0.0.2', 'ssh', 22, 'linux', 1)"
|
||||
)
|
||||
# judy bekommt file_transfer NUR auf Hostgruppe 1 (role_id 3 = file_transfer, siehe Migration 0001).
|
||||
# judy bekommt file_transfer NUR auf Hostgruppe 1 (role_id 3 = file_transfer,
|
||||
# siehe Migration 0001) -- seit Teil D Schritt 4 ausschliesslich ueber
|
||||
# eine Benutzergruppe moeglich (direkte Vergabe an einzelne Benutzer ist
|
||||
# entfallen, siehe app/rbac.py-Modul-Docstring).
|
||||
await conn.execute("INSERT INTO user_groups (id, name) VALUES (101, 'judy-team')")
|
||||
await conn.execute("INSERT INTO user_group_members (user_group_id, user_id) VALUES (101, ?)", (user_id,))
|
||||
await conn.execute(
|
||||
"INSERT INTO user_hostgroup_roles (user_id, host_group_id, role_id, granted_by) VALUES (?, 1, 3, ?)",
|
||||
(user_id, admin_id),
|
||||
"INSERT INTO group_hostgroup_roles (user_group_id, host_group_id, role_id, granted_by) VALUES (101, 1, 3, ?)",
|
||||
(admin_id,),
|
||||
)
|
||||
await conn.commit()
|
||||
|
||||
@ -308,10 +340,15 @@ async def test_role_on_one_hostgroup_does_not_grant_different_permission_type(cl
|
||||
"INSERT INTO hosts (id, host_group_id, hostname, address, protocol, port, os_type, "
|
||||
"file_transfer_enabled) VALUES (1, 1, 'c01', '10.0.0.3', 'ssh', 22, 'linux', 1)"
|
||||
)
|
||||
# role_id 1 = ssh_connect (siehe Migration 0001) -- explizit KEIN file_transfer.
|
||||
# role_id 1 = ssh_connect (siehe Migration 0001) -- explizit KEIN
|
||||
# file_transfer. Seit Teil D Schritt 4 ausschliesslich ueber eine
|
||||
# Benutzergruppe moeglich (siehe Kommentar in
|
||||
# test_user_cannot_access_host_outside_granted_hostgroup oben).
|
||||
await conn.execute("INSERT INTO user_groups (id, name) VALUES (102, 'mallory-team')")
|
||||
await conn.execute("INSERT INTO user_group_members (user_group_id, user_id) VALUES (102, ?)", (user_id,))
|
||||
await conn.execute(
|
||||
"INSERT INTO user_hostgroup_roles (user_id, host_group_id, role_id, granted_by) VALUES (?, 1, 1, ?)",
|
||||
(user_id, admin_id),
|
||||
"INSERT INTO group_hostgroup_roles (user_group_id, host_group_id, role_id, granted_by) VALUES (102, 1, 1, ?)",
|
||||
(admin_id,),
|
||||
)
|
||||
await conn.commit()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user