events: add mode_verbose to transport, return string on send error
This commit is contained in:
		| @ -2,6 +2,7 @@ | ||||
| from django.http.response import Http404 | ||||
| from guardian.shortcuts import get_objects_for_user | ||||
| from rest_framework.decorators import action | ||||
| from rest_framework.fields import SerializerMethodField | ||||
| from rest_framework.request import Request | ||||
| from rest_framework.response import Response | ||||
| from rest_framework.serializers import ModelSerializer | ||||
| @ -11,12 +12,20 @@ from authentik.events.models import ( | ||||
|     Notification, | ||||
|     NotificationSeverity, | ||||
|     NotificationTransport, | ||||
|     NotificationTransportError, | ||||
|     TransportMode, | ||||
| ) | ||||
|  | ||||
|  | ||||
| class NotificationTransportSerializer(ModelSerializer): | ||||
|     """NotificationTransport Serializer""" | ||||
|  | ||||
|     mode_verbose = SerializerMethodField() | ||||
|  | ||||
|     def get_mode_verbose(self, instance: NotificationTransport): | ||||
|         """Return selected mode with a UI Label""" | ||||
|         return TransportMode(instance.mode).label | ||||
|  | ||||
|     class Meta: | ||||
|  | ||||
|         model = NotificationTransport | ||||
| @ -24,6 +33,7 @@ class NotificationTransportSerializer(ModelSerializer): | ||||
|             "pk", | ||||
|             "name", | ||||
|             "mode", | ||||
|             "mode_verbose", | ||||
|             "webhook_url", | ||||
|         ] | ||||
|  | ||||
| @ -44,10 +54,13 @@ class NotificationTransportViewSet(ModelViewSet): | ||||
|         ).filter(pk=pk) | ||||
|         if not transports.exists(): | ||||
|             raise Http404 | ||||
|         transport = transports.first() | ||||
|         transport: NotificationTransport = transports.first() | ||||
|         notification = Notification( | ||||
|             severity=NotificationSeverity.NOTICE, | ||||
|             body=f"Test Notification from transport {transport.name}", | ||||
|             user=request.user, | ||||
|         ) | ||||
|         return Response(transport.send(notification)) | ||||
|         try: | ||||
|             return Response(transport.send(notification)) | ||||
|         except NotificationTransportError as exc: | ||||
|             return Response(str(exc.__cause__ or None), status=503) | ||||
|  | ||||
| @ -67,7 +67,7 @@ def event_trigger_handler(event_uuid: str, trigger_name: str): | ||||
|  | ||||
| @CELERY_APP.task( | ||||
|     bind=True, | ||||
|     autoretry_for=(NotificationTransportError), | ||||
|     autoretry_for=(NotificationTransportError,), | ||||
|     retry_backoff=True, | ||||
|     base=MonitoredTask, | ||||
| ) | ||||
|  | ||||
| @ -7676,6 +7676,10 @@ definitions: | ||||
|           - webhook | ||||
|           - webhook_slack | ||||
|           - email | ||||
|       mode_verbose: | ||||
|         title: Mode verbose | ||||
|         type: string | ||||
|         readOnly: true | ||||
|       webhook_url: | ||||
|         title: Webhook url | ||||
|         type: string | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Jens Langhammer
					Jens Langhammer