leftovers
Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
This commit is contained in:
		| @ -114,14 +114,14 @@ def on_password_changed(sender, user: User, password: str, request: HttpRequest | |||||||
| @receiver(post_save, sender=Event) | @receiver(post_save, sender=Event) | ||||||
| def event_post_save_notification(sender, instance: Event, **_): | def event_post_save_notification(sender, instance: Event, **_): | ||||||
|     """Start task to check if any policies trigger an notification on this event""" |     """Start task to check if any policies trigger an notification on this event""" | ||||||
|     event_notification_handler.delay(instance.event_uuid.hex) |     event_notification_handler.send(instance.event_uuid.hex) | ||||||
|  |  | ||||||
|  |  | ||||||
| @receiver(pre_delete, sender=User) | @receiver(pre_delete, sender=User) | ||||||
| def event_user_pre_delete_cleanup(sender, instance: User, **_): | def event_user_pre_delete_cleanup(sender, instance: User, **_): | ||||||
|     """If gdpr_compliance is enabled, remove all the user's events""" |     """If gdpr_compliance is enabled, remove all the user's events""" | ||||||
|     if get_current_tenant().gdpr_compliance: |     if get_current_tenant().gdpr_compliance: | ||||||
|         gdpr_cleanup.delay(instance.pk) |         gdpr_cleanup.send(instance.pk) | ||||||
|  |  | ||||||
|  |  | ||||||
| @receiver(monitoring_set) | @receiver(monitoring_set) | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| """Event notification tasks""" | """Event notification tasks""" | ||||||
|  |  | ||||||
| from django.db.models.query_utils import Q | from django.db.models.query_utils import Q | ||||||
|  | from dramatiq.actor import actor | ||||||
| from guardian.shortcuts import get_anonymous_user | from guardian.shortcuts import get_anonymous_user | ||||||
| from structlog.stdlib import get_logger | from structlog.stdlib import get_logger | ||||||
|  |  | ||||||
| @ -12,24 +13,23 @@ from authentik.events.models import ( | |||||||
|     NotificationRule, |     NotificationRule, | ||||||
|     NotificationTransport, |     NotificationTransport, | ||||||
|     NotificationTransportError, |     NotificationTransportError, | ||||||
|     TaskStatus, |  | ||||||
| ) | ) | ||||||
| from authentik.events.system_tasks import SystemTask, prefill_task |  | ||||||
| from authentik.policies.engine import PolicyEngine | from authentik.policies.engine import PolicyEngine | ||||||
| from authentik.policies.models import PolicyBinding, PolicyEngineMode | from authentik.policies.models import PolicyBinding, PolicyEngineMode | ||||||
| from authentik.root.celery import CELERY_APP | from authentik.tasks.middleware import CurrentTask | ||||||
|  | from authentik.tasks.models import Task, TaskStatus | ||||||
|  |  | ||||||
| LOGGER = get_logger() | LOGGER = get_logger() | ||||||
|  |  | ||||||
|  |  | ||||||
| @CELERY_APP.task() | @actor | ||||||
| def event_notification_handler(event_uuid: str): | def event_notification_handler(event_uuid: str): | ||||||
|     """Start task for each trigger definition""" |     """Start task for each trigger definition""" | ||||||
|     for trigger in NotificationRule.objects.all(): |     for trigger in NotificationRule.objects.all(): | ||||||
|         event_trigger_handler.apply_async(args=[event_uuid, trigger.name], queue="authentik_events") |         event_trigger_handler.send(event_uuid, trigger.name) | ||||||
|  |  | ||||||
|  |  | ||||||
| @CELERY_APP.task() | @actor | ||||||
| def event_trigger_handler(event_uuid: str, trigger_name: str): | def event_trigger_handler(event_uuid: str, trigger_name: str): | ||||||
|     """Check if policies attached to NotificationRule match event""" |     """Check if policies attached to NotificationRule match event""" | ||||||
|     event: Event = Event.objects.filter(event_uuid=event_uuid).first() |     event: Event = Event.objects.filter(event_uuid=event_uuid).first() | ||||||
| @ -77,30 +77,22 @@ def event_trigger_handler(event_uuid: str, trigger_name: str): | |||||||
|     for transport in trigger.transports.all(): |     for transport in trigger.transports.all(): | ||||||
|         for user in trigger.group.users.all(): |         for user in trigger.group.users.all(): | ||||||
|             LOGGER.debug("created notification") |             LOGGER.debug("created notification") | ||||||
|             notification_transport.apply_async( |             notification_transport.send( | ||||||
|                 args=[ |  | ||||||
|                 transport.pk, |                 transport.pk, | ||||||
|                     str(event.pk), |                 event.pk, | ||||||
|                 user.pk, |                 user.pk, | ||||||
|                     str(trigger.pk), |                 trigger.pk, | ||||||
|                 ], |  | ||||||
|                 queue="authentik_events", |  | ||||||
|             ) |             ) | ||||||
|             if transport.send_once: |             if transport.send_once: | ||||||
|                 break |                 break | ||||||
|  |  | ||||||
|  |  | ||||||
| @CELERY_APP.task( | @actor | ||||||
|     bind=True, | def notification_transport(transport_pk: int, event_pk: str, user_pk: int, trigger_pk: str): | ||||||
|     autoretry_for=(NotificationTransportError,), |  | ||||||
|     retry_backoff=True, |  | ||||||
|     base=SystemTask, |  | ||||||
| ) |  | ||||||
| def notification_transport( |  | ||||||
|     self: SystemTask, transport_pk: int, event_pk: str, user_pk: int, trigger_pk: str |  | ||||||
| ): |  | ||||||
|     """Send notification over specified transport""" |     """Send notification over specified transport""" | ||||||
|     self.save_on_success = False |     self: Task = CurrentTask.get_task() | ||||||
|  |     # TODO: fixme | ||||||
|  |     # self.save_on_success = False | ||||||
|     try: |     try: | ||||||
|         event = Event.objects.filter(pk=event_pk).first() |         event = Event.objects.filter(pk=event_pk).first() | ||||||
|         if not event: |         if not event: | ||||||
| @ -124,7 +116,7 @@ def notification_transport( | |||||||
|         raise exc |         raise exc | ||||||
|  |  | ||||||
|  |  | ||||||
| @CELERY_APP.task() | @actor | ||||||
| def gdpr_cleanup(user_pk: int): | def gdpr_cleanup(user_pk: int): | ||||||
|     """cleanup events from gdpr_compliance""" |     """cleanup events from gdpr_compliance""" | ||||||
|     events = Event.objects.filter(user__pk=user_pk) |     events = Event.objects.filter(user__pk=user_pk) | ||||||
| @ -132,10 +124,10 @@ def gdpr_cleanup(user_pk: int): | |||||||
|     events.delete() |     events.delete() | ||||||
|  |  | ||||||
|  |  | ||||||
| @CELERY_APP.task(bind=True, base=SystemTask) | @actor | ||||||
| @prefill_task | def notification_cleanup(): | ||||||
| def notification_cleanup(self: SystemTask): |  | ||||||
|     """Cleanup seen notifications and notifications whose event expired.""" |     """Cleanup seen notifications and notifications whose event expired.""" | ||||||
|  |     self: Task = CurrentTask.get_task() | ||||||
|     notifications = Notification.objects.filter(Q(event=None) | Q(seen=True)) |     notifications = Notification.objects.filter(Q(event=None) | Q(seen=True)) | ||||||
|     amount = notifications.count() |     amount = notifications.count() | ||||||
|     notifications.delete() |     notifications.delete() | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| from celery import Task |  | ||||||
| from django.utils.text import slugify | from django.utils.text import slugify | ||||||
|  | from dramatiq.actor import Actor | ||||||
| from drf_spectacular.utils import OpenApiResponse, extend_schema | from drf_spectacular.utils import OpenApiResponse, extend_schema | ||||||
| from guardian.shortcuts import get_objects_for_user | from guardian.shortcuts import get_objects_for_user | ||||||
| from rest_framework.decorators import action | from rest_framework.decorators import action | ||||||
| @ -45,8 +45,8 @@ class SyncObjectResultSerializer(PassiveSerializer): | |||||||
| class OutgoingSyncProviderStatusMixin: | class OutgoingSyncProviderStatusMixin: | ||||||
|     """Common API Endpoints for Outgoing sync providers""" |     """Common API Endpoints for Outgoing sync providers""" | ||||||
|  |  | ||||||
|     sync_single_task: type[Task] = None |     sync_single_task: type[Actor] = None | ||||||
|     sync_objects_task: type[Task] = None |     sync_objects_task: type[Actor] = None | ||||||
|  |  | ||||||
|     @extend_schema( |     @extend_schema( | ||||||
|         responses={ |         responses={ | ||||||
| @ -94,7 +94,7 @@ class OutgoingSyncProviderStatusMixin: | |||||||
|         provider: OutgoingSyncProvider = self.get_object() |         provider: OutgoingSyncProvider = self.get_object() | ||||||
|         params = SyncObjectSerializer(data=request.data) |         params = SyncObjectSerializer(data=request.data) | ||||||
|         params.is_valid(raise_exception=True) |         params.is_valid(raise_exception=True) | ||||||
|         res: list[LogEvent] = self.sync_objects_task.delay( |         res: list[LogEvent] = self.sync_objects_task.send( | ||||||
|             params.validated_data["sync_object_model"], |             params.validated_data["sync_object_model"], | ||||||
|             page=1, |             page=1, | ||||||
|             provider_pk=provider.pk, |             provider_pk=provider.pk, | ||||||
|  | |||||||
| @ -128,7 +128,7 @@ class AuthenticatorValidateStageWebAuthnTests(FlowTestCase): | |||||||
|     def test_device_challenge_webauthn_restricted(self): |     def test_device_challenge_webauthn_restricted(self): | ||||||
|         """Test webauthn (getting device challenges with a webauthn |         """Test webauthn (getting device challenges with a webauthn | ||||||
|         device that is not allowed due to aaguid restrictions)""" |         device that is not allowed due to aaguid restrictions)""" | ||||||
|         webauthn_mds_import.delay(force=True).get() |         webauthn_mds_import.send(force=True).get_result() | ||||||
|         request = get_request("/") |         request = get_request("/") | ||||||
|         request.user = self.user |         request.user = self.user | ||||||
|  |  | ||||||
| @ -245,7 +245,7 @@ class AuthenticatorValidateStageWebAuthnTests(FlowTestCase): | |||||||
|  |  | ||||||
|     def test_validate_challenge_unrestricted(self): |     def test_validate_challenge_unrestricted(self): | ||||||
|         """Test webauthn authentication (unrestricted webauthn device)""" |         """Test webauthn authentication (unrestricted webauthn device)""" | ||||||
|         webauthn_mds_import.delay(force=True).get() |         webauthn_mds_import.send(force=True).get_result() | ||||||
|         device = WebAuthnDevice.objects.create( |         device = WebAuthnDevice.objects.create( | ||||||
|             user=self.user, |             user=self.user, | ||||||
|             public_key=( |             public_key=( | ||||||
| @ -319,7 +319,7 @@ class AuthenticatorValidateStageWebAuthnTests(FlowTestCase): | |||||||
|  |  | ||||||
|     def test_validate_challenge_restricted(self): |     def test_validate_challenge_restricted(self): | ||||||
|         """Test webauthn authentication (restricted device type, failure)""" |         """Test webauthn authentication (restricted device type, failure)""" | ||||||
|         webauthn_mds_import.delay(force=True).get() |         webauthn_mds_import.send(force=True).get_result() | ||||||
|         device = WebAuthnDevice.objects.create( |         device = WebAuthnDevice.objects.create( | ||||||
|             user=self.user, |             user=self.user, | ||||||
|             public_key=( |             public_key=( | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Marc 'risson' Schmitt
					Marc 'risson' Schmitt