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)