diff --git a/authentik/admin/urls.py b/authentik/admin/urls.py index 59c29d726b..2cd19b829d 100644 --- a/authentik/admin/urls.py +++ b/authentik/admin/urls.py @@ -4,7 +4,6 @@ from django.urls import path from authentik.admin.views import ( applications, events_notifications_rules, - events_notifications_transports, flows, outposts, outposts_service_connections, @@ -172,17 +171,6 @@ urlpatterns = [ outposts_service_connections.OutpostServiceConnectionUpdateView.as_view(), name="outpost-service-connection-update", ), - # Event Notification Transpots - path( - "events/transports/create/", - events_notifications_transports.NotificationTransportCreateView.as_view(), - name="notification-transport-create", - ), - path( - "events/transports//update/", - events_notifications_transports.NotificationTransportUpdateView.as_view(), - name="notification-transport-update", - ), # Event Notification Rules path( "events/rules/create/", diff --git a/authentik/admin/views/events_notifications_transports.py b/authentik/admin/views/events_notifications_transports.py deleted file mode 100644 index 14d84ba5a4..0000000000 --- a/authentik/admin/views/events_notifications_transports.py +++ /dev/null @@ -1,45 +0,0 @@ -"""authentik NotificationTransport administration""" -from django.contrib.auth.mixins import LoginRequiredMixin -from django.contrib.auth.mixins import ( - PermissionRequiredMixin as DjangoPermissionRequiredMixin, -) -from django.contrib.messages.views import SuccessMessageMixin -from django.utils.translation import gettext as _ -from django.views.generic import UpdateView -from guardian.mixins import PermissionRequiredMixin - -from authentik.events.forms import NotificationTransportForm -from authentik.events.models import NotificationTransport -from authentik.lib.views import CreateAssignPermView - - -class NotificationTransportCreateView( - SuccessMessageMixin, - LoginRequiredMixin, - DjangoPermissionRequiredMixin, - CreateAssignPermView, -): - """Create new NotificationTransport""" - - model = NotificationTransport - form_class = NotificationTransportForm - permission_required = "authentik_events.add_notificationtransport" - success_url = "/" - template_name = "generic/create.html" - success_message = _("Successfully created Notification Transport") - - -class NotificationTransportUpdateView( - SuccessMessageMixin, - LoginRequiredMixin, - PermissionRequiredMixin, - UpdateView, -): - """Update application""" - - model = NotificationTransport - form_class = NotificationTransportForm - permission_required = "authentik_events.change_notificationtransport" - success_url = "/" - template_name = "generic/update.html" - success_message = _("Successfully updated Notification Transport") diff --git a/authentik/events/forms.py b/authentik/events/forms.py index 6b2e7acbab..c657406508 100644 --- a/authentik/events/forms.py +++ b/authentik/events/forms.py @@ -1,34 +1,7 @@ """authentik events NotificationTransport forms""" from django import forms -from django.utils.translation import gettext_lazy as _ -from authentik.events.models import NotificationRule, NotificationTransport - - -class NotificationTransportForm(forms.ModelForm): - """NotificationTransport Form""" - - class Meta: - - model = NotificationTransport - fields = [ - "name", - "mode", - "webhook_url", - "send_once", - ] - widgets = { - "name": forms.TextInput(), - "webhook_url": forms.TextInput(), - } - labels = { - "webhook_url": _("Webhook URL"), - } - help_texts = { - "webhook_url": _( - ("Only required when the Generic or Slack Webhook is used.") - ), - } +from authentik.events.models import NotificationRule class NotificationRuleForm(forms.ModelForm): diff --git a/web/src/api/legacy.ts b/web/src/api/legacy.ts index 76dbcd62b8..f433d0b6ed 100644 --- a/web/src/api/legacy.ts +++ b/web/src/api/legacy.ts @@ -60,10 +60,6 @@ export class AdminURLManager { return `/administration/events/rules/${rest}`; } - static eventTransports(rest: string): string { - return `/administration/events/transports/${rest}`; - } - } export class UserURLManager { diff --git a/web/src/pages/events/TransportForm.ts b/web/src/pages/events/TransportForm.ts new file mode 100644 index 0000000000..4c255dc6d9 --- /dev/null +++ b/web/src/pages/events/TransportForm.ts @@ -0,0 +1,105 @@ +import { EventsApi, NotificationTransport, NotificationTransportModeEnum } from "authentik-api"; +import { gettext } from "django"; +import { customElement, property } from "lit-element"; +import { html, TemplateResult } from "lit-html"; +import { DEFAULT_CONFIG } from "../../api/Config"; +import { Form } from "../../elements/forms/Form"; +import { ifDefined } from "lit-html/directives/if-defined"; +import "../../elements/forms/HorizontalFormElement"; + +@customElement("ak-event-transport-form") +export class TransportForm extends Form { + + @property({attribute: false}) + transport?: NotificationTransport; + + @property({type: Boolean}) + showWebhook = false; + + getSuccessMessage(): string { + if (this.transport) { + return gettext("Successfully updated transport."); + } else { + return gettext("Successfully created transport."); + } + } + + send = (data: NotificationTransport): Promise => { + if (this.transport) { + return new EventsApi(DEFAULT_CONFIG).eventsTransportsUpdate({ + uuid: this.transport.pk || "", + data: data + }); + } else { + return new EventsApi(DEFAULT_CONFIG).eventsTransportsCreate({ + data: data + }); + } + }; + + renderTransportModes(): TemplateResult { + return html` + + + + `; + } + + firstUpdated(): void { + if (this.transport) { + this.onModeChange(this.transport.mode); + } + } + + onModeChange(mode: string): void { + if (mode === NotificationTransportModeEnum.Webhook || mode === NotificationTransportModeEnum.WebhookSlack) { + this.showWebhook = true; + } else { + this.showWebhook = false; + } + } + + renderForm(): TemplateResult { + return html`
+ + + + + + + + + + +
+ + +
+

${gettext("Only send notification once, for example when sending a webhook into a chat channel.")}

+
+
`; + } + +} diff --git a/web/src/pages/events/TransportListPage.ts b/web/src/pages/events/TransportListPage.ts index 52b7768831..a05afa785e 100644 --- a/web/src/pages/events/TransportListPage.ts +++ b/web/src/pages/events/TransportListPage.ts @@ -4,14 +4,14 @@ import { AKResponse } from "../../api/Client"; import { TablePage } from "../../elements/table/TablePage"; import "../../elements/buttons/ActionButton"; -import "../../elements/buttons/ModalButton"; +import "../../elements/forms/ModalForm"; import "../../elements/buttons/SpinnerButton"; import { TableColumn } from "../../elements/table/Table"; import { PAGE_SIZE } from "../../constants"; import { EventsApi, NotificationTransport } from "authentik-api"; import { DEFAULT_CONFIG } from "../../api/Config"; -import { AdminURLManager } from "../../api/legacy"; import "../../elements/forms/DeleteForm"; +import "./TransportForm"; @customElement("ak-event-transport-list") export class TransportListPage extends TablePage { @@ -61,12 +61,19 @@ export class TransportListPage extends TablePage { }}> ${gettext("Test")} - - + + + ${gettext("Update")} + + + ${gettext("Update Notification Transport")} + + + + + { renderToolbar(): TemplateResult { return html` - - + + ${gettext("Create")} - -
-
+ + + ${gettext("Create Notification Transport")} + + + + + ${super.renderToolbar()} `; }