authentik.events.tests.test_middleware
Event Middleware tests
1"""Event Middleware tests""" 2 3from django.urls import reverse 4from rest_framework.test import APITestCase 5 6from authentik.core.models import Application, Token, TokenIntents 7from authentik.core.tests.utils import create_test_admin_user 8from authentik.events.middleware import audit_ignore, audit_overwrite_user 9from authentik.events.models import Event, EventAction 10from authentik.lib.generators import generate_id 11 12 13class TestEventsMiddleware(APITestCase): 14 """Test Event Middleware""" 15 16 def setUp(self) -> None: 17 super().setUp() 18 self.user = create_test_admin_user() 19 self.client.force_login(self.user) 20 Event.objects.all().delete() 21 22 def test_create(self): 23 """Test model creation event""" 24 uid = generate_id() 25 self.client.post( 26 reverse("authentik_api:application-list"), 27 data={"name": uid, "slug": uid}, 28 ) 29 self.assertTrue(Application.objects.filter(name=uid).exists()) 30 event = Event.objects.filter( 31 action=EventAction.MODEL_CREATED, 32 context__model__model_name="application", 33 context__model__app="authentik_core", 34 context__model__name=uid, 35 ).first() 36 self.assertIsNotNone(event) 37 38 def test_delete(self): 39 """Test model creation event""" 40 uid = generate_id() 41 Application.objects.create(name=uid, slug=uid) 42 self.client.delete(reverse("authentik_api:application-detail", kwargs={"slug": uid})) 43 self.assertFalse(Application.objects.filter(name="test").exists()) 44 self.assertTrue( 45 Event.objects.filter( 46 action=EventAction.MODEL_DELETED, 47 context__model__model_name="application", 48 context__model__app="authentik_core", 49 context__model__name=uid, 50 ).exists() 51 ) 52 53 def test_audit_ignore(self): 54 """Test audit_ignore context manager""" 55 uid = generate_id() 56 with audit_ignore(): 57 self.client.post( 58 reverse("authentik_api:application-list"), 59 data={"name": uid, "slug": uid}, 60 ) 61 self.assertTrue(Application.objects.filter(name=uid).exists()) 62 self.assertFalse( 63 Event.objects.filter( 64 action=EventAction.MODEL_CREATED, 65 context__model__model_name="application", 66 context__model__app="authentik_core", 67 context__model__name=uid, 68 ).exists() 69 ) 70 71 def test_audit_overwrite_user(self): 72 """Test audit_overwrite_user context manager""" 73 uid = generate_id() 74 new_user = create_test_admin_user() 75 with audit_overwrite_user(new_user): 76 self.client.post( 77 reverse("authentik_api:application-list"), 78 data={"name": uid, "slug": uid}, 79 ) 80 self.assertTrue(Application.objects.filter(name=uid).exists()) 81 self.assertTrue( 82 Event.objects.filter( 83 action=EventAction.MODEL_CREATED, 84 context__model__model_name="application", 85 context__model__app="authentik_core", 86 context__model__name=uid, 87 user__username=new_user.username, 88 ).exists() 89 ) 90 91 def test_create_with_api(self): 92 """Test model creation event (with API token auth)""" 93 self.client.logout() 94 token = Token.objects.create(user=self.user, intent=TokenIntents.INTENT_API, expiring=False) 95 uid = generate_id() 96 self.client.post( 97 reverse("authentik_api:application-list"), 98 data={"name": uid, "slug": uid}, 99 HTTP_AUTHORIZATION=f"Bearer {token.key}", 100 ) 101 self.assertTrue(Application.objects.filter(name=uid).exists()) 102 event = Event.objects.filter( 103 action=EventAction.MODEL_CREATED, 104 context__model__model_name="application", 105 context__model__app="authentik_core", 106 context__model__name=uid, 107 ).first() 108 self.assertIsNotNone(event) 109 self.assertEqual( 110 event.user, 111 { 112 "pk": self.user.pk, 113 "email": self.user.email, 114 "username": self.user.username, 115 }, 116 )
class
TestEventsMiddleware(rest_framework.test.APITestCase):
14class TestEventsMiddleware(APITestCase): 15 """Test Event Middleware""" 16 17 def setUp(self) -> None: 18 super().setUp() 19 self.user = create_test_admin_user() 20 self.client.force_login(self.user) 21 Event.objects.all().delete() 22 23 def test_create(self): 24 """Test model creation event""" 25 uid = generate_id() 26 self.client.post( 27 reverse("authentik_api:application-list"), 28 data={"name": uid, "slug": uid}, 29 ) 30 self.assertTrue(Application.objects.filter(name=uid).exists()) 31 event = Event.objects.filter( 32 action=EventAction.MODEL_CREATED, 33 context__model__model_name="application", 34 context__model__app="authentik_core", 35 context__model__name=uid, 36 ).first() 37 self.assertIsNotNone(event) 38 39 def test_delete(self): 40 """Test model creation event""" 41 uid = generate_id() 42 Application.objects.create(name=uid, slug=uid) 43 self.client.delete(reverse("authentik_api:application-detail", kwargs={"slug": uid})) 44 self.assertFalse(Application.objects.filter(name="test").exists()) 45 self.assertTrue( 46 Event.objects.filter( 47 action=EventAction.MODEL_DELETED, 48 context__model__model_name="application", 49 context__model__app="authentik_core", 50 context__model__name=uid, 51 ).exists() 52 ) 53 54 def test_audit_ignore(self): 55 """Test audit_ignore context manager""" 56 uid = generate_id() 57 with audit_ignore(): 58 self.client.post( 59 reverse("authentik_api:application-list"), 60 data={"name": uid, "slug": uid}, 61 ) 62 self.assertTrue(Application.objects.filter(name=uid).exists()) 63 self.assertFalse( 64 Event.objects.filter( 65 action=EventAction.MODEL_CREATED, 66 context__model__model_name="application", 67 context__model__app="authentik_core", 68 context__model__name=uid, 69 ).exists() 70 ) 71 72 def test_audit_overwrite_user(self): 73 """Test audit_overwrite_user context manager""" 74 uid = generate_id() 75 new_user = create_test_admin_user() 76 with audit_overwrite_user(new_user): 77 self.client.post( 78 reverse("authentik_api:application-list"), 79 data={"name": uid, "slug": uid}, 80 ) 81 self.assertTrue(Application.objects.filter(name=uid).exists()) 82 self.assertTrue( 83 Event.objects.filter( 84 action=EventAction.MODEL_CREATED, 85 context__model__model_name="application", 86 context__model__app="authentik_core", 87 context__model__name=uid, 88 user__username=new_user.username, 89 ).exists() 90 ) 91 92 def test_create_with_api(self): 93 """Test model creation event (with API token auth)""" 94 self.client.logout() 95 token = Token.objects.create(user=self.user, intent=TokenIntents.INTENT_API, expiring=False) 96 uid = generate_id() 97 self.client.post( 98 reverse("authentik_api:application-list"), 99 data={"name": uid, "slug": uid}, 100 HTTP_AUTHORIZATION=f"Bearer {token.key}", 101 ) 102 self.assertTrue(Application.objects.filter(name=uid).exists()) 103 event = Event.objects.filter( 104 action=EventAction.MODEL_CREATED, 105 context__model__model_name="application", 106 context__model__app="authentik_core", 107 context__model__name=uid, 108 ).first() 109 self.assertIsNotNone(event) 110 self.assertEqual( 111 event.user, 112 { 113 "pk": self.user.pk, 114 "email": self.user.email, 115 "username": self.user.username, 116 }, 117 )
Test Event Middleware
def
setUp(self) -> None:
17 def setUp(self) -> None: 18 super().setUp() 19 self.user = create_test_admin_user() 20 self.client.force_login(self.user) 21 Event.objects.all().delete()
Hook method for setting up the test fixture before exercising it.
def
test_create(self):
23 def test_create(self): 24 """Test model creation event""" 25 uid = generate_id() 26 self.client.post( 27 reverse("authentik_api:application-list"), 28 data={"name": uid, "slug": uid}, 29 ) 30 self.assertTrue(Application.objects.filter(name=uid).exists()) 31 event = Event.objects.filter( 32 action=EventAction.MODEL_CREATED, 33 context__model__model_name="application", 34 context__model__app="authentik_core", 35 context__model__name=uid, 36 ).first() 37 self.assertIsNotNone(event)
Test model creation event
def
test_delete(self):
39 def test_delete(self): 40 """Test model creation event""" 41 uid = generate_id() 42 Application.objects.create(name=uid, slug=uid) 43 self.client.delete(reverse("authentik_api:application-detail", kwargs={"slug": uid})) 44 self.assertFalse(Application.objects.filter(name="test").exists()) 45 self.assertTrue( 46 Event.objects.filter( 47 action=EventAction.MODEL_DELETED, 48 context__model__model_name="application", 49 context__model__app="authentik_core", 50 context__model__name=uid, 51 ).exists() 52 )
Test model creation event
def
test_audit_ignore(self):
54 def test_audit_ignore(self): 55 """Test audit_ignore context manager""" 56 uid = generate_id() 57 with audit_ignore(): 58 self.client.post( 59 reverse("authentik_api:application-list"), 60 data={"name": uid, "slug": uid}, 61 ) 62 self.assertTrue(Application.objects.filter(name=uid).exists()) 63 self.assertFalse( 64 Event.objects.filter( 65 action=EventAction.MODEL_CREATED, 66 context__model__model_name="application", 67 context__model__app="authentik_core", 68 context__model__name=uid, 69 ).exists() 70 )
Test audit_ignore context manager
def
test_audit_overwrite_user(self):
72 def test_audit_overwrite_user(self): 73 """Test audit_overwrite_user context manager""" 74 uid = generate_id() 75 new_user = create_test_admin_user() 76 with audit_overwrite_user(new_user): 77 self.client.post( 78 reverse("authentik_api:application-list"), 79 data={"name": uid, "slug": uid}, 80 ) 81 self.assertTrue(Application.objects.filter(name=uid).exists()) 82 self.assertTrue( 83 Event.objects.filter( 84 action=EventAction.MODEL_CREATED, 85 context__model__model_name="application", 86 context__model__app="authentik_core", 87 context__model__name=uid, 88 user__username=new_user.username, 89 ).exists() 90 )
Test audit_overwrite_user context manager
def
test_create_with_api(self):
92 def test_create_with_api(self): 93 """Test model creation event (with API token auth)""" 94 self.client.logout() 95 token = Token.objects.create(user=self.user, intent=TokenIntents.INTENT_API, expiring=False) 96 uid = generate_id() 97 self.client.post( 98 reverse("authentik_api:application-list"), 99 data={"name": uid, "slug": uid}, 100 HTTP_AUTHORIZATION=f"Bearer {token.key}", 101 ) 102 self.assertTrue(Application.objects.filter(name=uid).exists()) 103 event = Event.objects.filter( 104 action=EventAction.MODEL_CREATED, 105 context__model__model_name="application", 106 context__model__app="authentik_core", 107 context__model__name=uid, 108 ).first() 109 self.assertIsNotNone(event) 110 self.assertEqual( 111 event.user, 112 { 113 "pk": self.user.pk, 114 "email": self.user.email, 115 "username": self.user.username, 116 }, 117 )
Test model creation event (with API token auth)