From 6acfbb7d66973896fb56e65655a1747733e82221 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Fri, 2 Apr 2021 17:09:30 +0200 Subject: [PATCH] policies/reputation: migrate to web Signed-off-by: Jens Langhammer --- authentik/policies/reputation/forms.py | 22 ----- authentik/policies/reputation/models.py | 6 +- .../reputation/ReputationPolicyForm.ts | 95 +++++++++++++++++++ 3 files changed, 97 insertions(+), 26 deletions(-) delete mode 100644 authentik/policies/reputation/forms.py create mode 100644 web/src/pages/policies/reputation/ReputationPolicyForm.ts diff --git a/authentik/policies/reputation/forms.py b/authentik/policies/reputation/forms.py deleted file mode 100644 index c3adecb16..000000000 --- a/authentik/policies/reputation/forms.py +++ /dev/null @@ -1,22 +0,0 @@ -"""authentik reputation request forms""" -from django import forms -from django.utils.translation import gettext_lazy as _ - -from authentik.policies.forms import PolicyForm -from authentik.policies.reputation.models import ReputationPolicy - - -class ReputationPolicyForm(PolicyForm): - """Form to edit ReputationPolicy""" - - class Meta: - - model = ReputationPolicy - fields = PolicyForm.Meta.fields + ["check_ip", "check_username", "threshold"] - widgets = { - "name": forms.TextInput(), - "value": forms.TextInput(), - } - labels = { - "check_ip": _("Check IP"), - } diff --git a/authentik/policies/reputation/models.py b/authentik/policies/reputation/models.py index 2dfaa834e..8d0004f3e 100644 --- a/authentik/policies/reputation/models.py +++ b/authentik/policies/reputation/models.py @@ -30,10 +30,8 @@ class ReputationPolicy(Policy): return ReputationPolicySerializer @property - def form(self) -> Type[ModelForm]: - from authentik.policies.reputation.forms import ReputationPolicyForm - - return ReputationPolicyForm + def component(self) -> str: + return "ak-policy-reputation-form" def passes(self, request: PolicyRequest) -> PolicyResult: remote_ip = get_client_ip(request.http_request) or "255.255.255.255" diff --git a/web/src/pages/policies/reputation/ReputationPolicyForm.ts b/web/src/pages/policies/reputation/ReputationPolicyForm.ts new file mode 100644 index 000000000..18c6248d8 --- /dev/null +++ b/web/src/pages/policies/reputation/ReputationPolicyForm.ts @@ -0,0 +1,95 @@ +import { ReputationPolicy, PoliciesApi } 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"; +import "../../../elements/forms/FormGroup"; + +@customElement("ak-policy-reputation-form") +export class ReputationPolicyForm extends Form { + + set policyUUID(value: string) { + new PoliciesApi(DEFAULT_CONFIG).policiesReputationRead({ + policyUuid: value, + }).then(policy => { + this.policy = policy; + }); + } + + @property({attribute: false}) + policy?: ReputationPolicy; + + getSuccessMessage(): string { + if (this.policy) { + return gettext("Successfully updated policy."); + } else { + return gettext("Successfully created policy."); + } + } + + send = (data: ReputationPolicy): Promise => { + if (this.policy) { + return new PoliciesApi(DEFAULT_CONFIG).policiesReputationUpdate({ + policyUuid: this.policy.pk || "", + data: data + }); + } else { + return new PoliciesApi(DEFAULT_CONFIG).policiesReputationCreate({ + data: data + }); + } + }; + + renderForm(): TemplateResult { + return html`
+ + + + +
+ + +
+

${gettext("When this option is enabled, all executions of this policy will be logged. By default, only execution errors are logged.")}

+
+ + + ${gettext("Policy-specific settings")} + +
+ +
+ + +
+
+ +
+ + +
+
+ + + +
+
+
`; + } + +}