From d2943972e5dee8f35cc4e28ace6ed0e7857eee93 Mon Sep 17 00:00:00 2001 From: Herman Snevajs Date: Mon, 5 Oct 2026 15:13:33 +0200 Subject: [PATCH] Add target_email field for new superadmin audit event --- server/mergin/auth/listeners.py | 2 ++ server/mergin/tests/test_audit_events.py | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/server/mergin/auth/listeners.py b/server/mergin/auth/listeners.py index 6f4d3172..14a5093a 100644 --- a/server/mergin/auth/listeners.py +++ b/server/mergin/auth/listeners.py @@ -62,6 +62,7 @@ def _on_user_created(_mapper: Any, _connection: Any, target: User) -> None: AuthEventType.USER_ADMIN_PANEL_ACCESS_CHANGED, **ctx, target_user_id=target.id, + target_email=target.email, old_is_admin=None, new_is_admin=True, ) @@ -89,6 +90,7 @@ def _on_user_updated(_mapper, _connection, target): AuthEventType.USER_ADMIN_PANEL_ACCESS_CHANGED, **actor_context(), target_user_id=target.id, + target_email=target.email, old_is_admin=old, new_is_admin=new, ) diff --git a/server/mergin/tests/test_audit_events.py b/server/mergin/tests/test_audit_events.py index f9340955..b93fe1d8 100644 --- a/server/mergin/tests/test_audit_events.py +++ b/server/mergin/tests/test_audit_events.py @@ -231,6 +231,28 @@ def test_user_unlocked(app, client, audit_capture): assert len(audit_capture.of_type(AuthEventType.USER_UPDATED)) == 0 +def test_user_admin_panel_access_changed(audit_capture): + user = add_user("promoteme", "pass123") + db.session.refresh(user) + user.is_admin = True + db.session.commit() + + e = audit_capture.one(AuthEventType.USER_ADMIN_PANEL_ACCESS_CHANGED) + assert e.target_user_id == user.id + assert e.metadata["target_email"] == "promoteme@mergin.com" + assert e.metadata["old_is_admin"] is False + assert e.metadata["new_is_admin"] is True + + +def test_user_admin_panel_access_changed_on_create(audit_capture): + user = add_user("newadmin", "pass123", is_admin=True) + + e = audit_capture.one(AuthEventType.USER_ADMIN_PANEL_ACCESS_CHANGED) + assert e.target_user_id == user.id + assert e.metadata["target_email"] == "newadmin@mergin.com" + assert e.metadata["new_is_admin"] is True + + # --------------------------------------------------------------------------- # Sync / project events # ---------------------------------------------------------------------------