From fcdc064cac03bdadc756b2849b3ae216273a36f6 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Fri, 2 Apr 2021 17:09:19 +0200 Subject: [PATCH] policies/password: migrate to web Signed-off-by: Jens Langhammer --- authentik/policies/password/forms.py | 36 ----- authentik/policies/password/models.py | 8 +- .../policies/password/PasswordPolicyForm.ts | 125 ++++++++++++++++++ 3 files changed, 127 insertions(+), 42 deletions(-) delete mode 100644 authentik/policies/password/forms.py create mode 100644 web/src/pages/policies/password/PasswordPolicyForm.ts diff --git a/authentik/policies/password/forms.py b/authentik/policies/password/forms.py deleted file mode 100644 index df2de293f..000000000 --- a/authentik/policies/password/forms.py +++ /dev/null @@ -1,36 +0,0 @@ -"""authentik Policy forms""" - -from django import forms -from django.utils.translation import gettext as _ - -from authentik.policies.forms import PolicyForm -from authentik.policies.password.models import PasswordPolicy - - -class PasswordPolicyForm(PolicyForm): - """PasswordPolicy Form""" - - class Meta: - - model = PasswordPolicy - fields = PolicyForm.Meta.fields + [ - "password_field", - "amount_uppercase", - "amount_lowercase", - "amount_symbols", - "length_min", - "symbol_charset", - "error_message", - ] - widgets = { - "name": forms.TextInput(), - "password_field": forms.TextInput(), - "symbol_charset": forms.TextInput(), - "error_message": forms.TextInput(), - } - labels = { - "amount_uppercase": _("Minimum amount of Uppercase Characters"), - "amount_lowercase": _("Minimum amount of Lowercase Characters"), - "amount_symbols": _("Minimum amount of Symbols Characters"), - "length_min": _("Minimum Length"), - } diff --git a/authentik/policies/password/models.py b/authentik/policies/password/models.py index e66957cfe..286033eec 100644 --- a/authentik/policies/password/models.py +++ b/authentik/policies/password/models.py @@ -1,9 +1,7 @@ """user field matcher models""" import re -from typing import Type from django.db import models -from django.forms import ModelForm from django.utils.translation import gettext as _ from rest_framework.serializers import BaseSerializer from structlog.stdlib import get_logger @@ -38,10 +36,8 @@ class PasswordPolicy(Policy): return PasswordPolicySerializer @property - def form(self) -> Type[ModelForm]: - from authentik.policies.password.forms import PasswordPolicyForm - - return PasswordPolicyForm + def component(self) -> str: + return "ak-policy-password-form" def passes(self, request: PolicyRequest) -> PolicyResult: if self.password_field not in request.context: diff --git a/web/src/pages/policies/password/PasswordPolicyForm.ts b/web/src/pages/policies/password/PasswordPolicyForm.ts new file mode 100644 index 000000000..466bac18f --- /dev/null +++ b/web/src/pages/policies/password/PasswordPolicyForm.ts @@ -0,0 +1,125 @@ +import { PasswordPolicy, 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-password-form") +export class PasswordPolicyForm extends Form { + + set policyUUID(value: string) { + new PoliciesApi(DEFAULT_CONFIG).policiesPasswordRead({ + policyUuid: value, + }).then(policy => { + this.policy = policy; + }); + } + + @property({attribute: false}) + policy?: PasswordPolicy; + + getSuccessMessage(): string { + if (this.policy) { + return gettext("Successfully updated policy."); + } else { + return gettext("Successfully created policy."); + } + } + + send = (data: PasswordPolicy): Promise => { + if (this.policy) { + return new PoliciesApi(DEFAULT_CONFIG).policiesPasswordUpdate({ + policyUuid: this.policy.pk || "", + data: data + }); + } else { + return new PoliciesApi(DEFAULT_CONFIG).policiesPasswordCreate({ + 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")} + +
+ + +

${gettext("Field key to check, field keys defined in Prompt stages are available.")}

+
+ + + + + + + + + + + + + + + + +
+
+ + + ${gettext("Advanced settings")} + +
+ + ?@[\]^_`{|}~ ")}" class="pf-c-form-control" required> +

${gettext("Characters which are considered as symbols.")}

+
+
+
+
`; + } + +}