diff --git a/.github/workflows/ghcr-retention.yml b/.github/workflows/ghcr-retention.yml
index 8dc32f5f7..f1543820f 100644
--- a/.github/workflows/ghcr-retention.yml
+++ b/.github/workflows/ghcr-retention.yml
@@ -1,8 +1,8 @@
name: ghcr-retention
on:
- schedule:
- - cron: "0 0 * * *" # every day at midnight
+ # schedule:
+ # - cron: "0 0 * * *" # every day at midnight
workflow_dispatch:
jobs:
diff --git a/authentik/root/test_runner.py b/authentik/root/test_runner.py
index 02425f016..b2bf7a3d7 100644
--- a/authentik/root/test_runner.py
+++ b/authentik/root/test_runner.py
@@ -17,8 +17,8 @@ TestCase.maxDiff = None
class PytestTestRunner(DiscoverRunner): # pragma: no cover
"""Runs pytest to discover and run tests."""
- def __init__(self, verbosity=1, failfast=False, keepdb=False, **kwargs):
- super().__init__(verbosity, failfast, keepdb, **kwargs)
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
self.args = []
if self.failfast:
@@ -47,6 +47,7 @@ class PytestTestRunner(DiscoverRunner): # pragma: no cover
@classmethod
def add_arguments(cls, parser: ArgumentParser):
"""Add more pytest-specific arguments"""
+ DiscoverRunner.add_arguments(parser)
parser.add_argument(
"--randomly-seed",
type=int,
@@ -55,9 +56,6 @@ class PytestTestRunner(DiscoverRunner): # pragma: no cover
"Default behaviour: use random.Random().getrandbits(32), so the seed is"
"different on each run.",
)
- parser.add_argument(
- "--keepdb", action="store_true", help="Preserves the test DB between runs."
- )
def run_tests(self, test_labels, extra_tests=None, **kwargs):
"""Run pytest and return the exitcode.
diff --git a/go.mod b/go.mod
index d6c711af0..0b26945b5 100644
--- a/go.mod
+++ b/go.mod
@@ -73,7 +73,7 @@ require (
go.opentelemetry.io/otel v1.14.0 // indirect
go.opentelemetry.io/otel/trace v1.14.0 // indirect
golang.org/x/crypto v0.14.0 // indirect
- golang.org/x/net v0.16.0 // indirect
+ golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
diff --git a/go.sum b/go.sum
index daa0c0f10..d9899e759 100644
--- a/go.sum
+++ b/go.sum
@@ -437,8 +437,8 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.16.0 h1:7eBu7KsSvFDtSXUIDbh3aqlK4DPsZ1rByC8PFfBThos=
-golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po
index ffafc6784..df4c59200 100644
--- a/locale/de/LC_MESSAGES/django.po
+++ b/locale/de/LC_MESSAGES/django.po
@@ -4,96 +4,189 @@
# FIRST AUTHOR , YEAR.
#
# Translators:
-# Lars Lehmann , 2021
-# Johannes —/—, 2021
-# flip yksflip, 2021
-# Rhea Alleen, 2021
-# David , 2021
-# Steve Oswald, 2022
+# Rhea Alleen, 2022
+# Jens L. , 2022
# 97cce0ae0cad2a2cc552d3165d04643e_de3d740, 2022
-# 8d4895d1a97955a09df504bfbc4402b0_584b927, 2022
+# Benjamin Böhmke, 2022
+# Thomas Liske, 2023
+# Lars Lehmann , 2023
+# Johannes —/—, 2023
+# Sven S , 2023
+# Dominic Wagner , 2023
+# David , 2023
+# 8d4895d1a97955a09df504bfbc4402b0_584b927, 2023
+# itxworks, 2023
+# Christian Foellmann , 2023
+# kidhab, 2023
+# L Petersen , 2023
+# Marcel Patzsch, 2023
+# Ben, 2023
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-03 12:29+0000\n"
-"PO-Revision-Date: 2021-10-09 18:10+0000\n"
-"Last-Translator: 8d4895d1a97955a09df504bfbc4402b0_584b927, 2022\n"
-"Language-Team: German (https://www.transifex.com/authentik/teams/119923/de/)\n"
+"POT-Creation-Date: 2023-10-02 12:46+0000\n"
+"PO-Revision-Date: 2022-09-26 16:47+0000\n"
+"Last-Translator: Ben, 2023\n"
+"Language-Team: German (https://app.transifex.com/authentik/teams/119923/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: authentik/admin/api/tasks.py:95
+#: authentik/admin/api/tasks.py:125
#, python-format
msgid "Successfully re-scheduled Task %(name)s!"
msgstr "Erfolgreich neu geplante Aufgabe: %(name)s"
-#: authentik/api/schema.py:21
+#: authentik/api/schema.py:25
msgid "Generic API Error"
msgstr "Allgemeiner API Fehler"
-#: authentik/api/schema.py:29
+#: authentik/api/schema.py:33
msgid "Validation Error"
msgstr "Validierungsfehler"
-#: authentik/core/api/providers.py:89
+#: authentik/blueprints/api.py:44
+msgid "Blueprint file does not exist"
+msgstr "Blaupausen-Datei existiert nicht"
+
+#: authentik/blueprints/api.py:55
+#, python-format
+msgid "Failed to validate blueprint: %(logs)s"
+msgstr "Blaupause konnte nicht validiert werden: %(logs)s"
+
+#: authentik/blueprints/api.py:60
+msgid "Either path or content must be set."
+msgstr "Entweder Pfad oder Inhalt muss angegeben sein."
+
+#: authentik/blueprints/models.py:30
+msgid "Managed by authentik"
+msgstr "Verwaltet durch Authentik"
+
+#: authentik/blueprints/models.py:32
+msgid ""
+"Objects that are managed by authentik. These objects are created and updated"
+" automatically. This flag only indicates that an object can be overwritten "
+"by migrations. You can still modify the objects via the API, but expect "
+"changes to be overwritten in a later update."
+msgstr ""
+"Objekte, die von Authentik verwaltet werden. Diese Objekte werden "
+"automatisch erstellt und aktualisiert. Dieses Flag zeigt nur an, dass ein "
+"Objekt durch Migrationen überschrieben werden kann. Sie können die Objekte "
+"weiterhin über die API ändern, müssen aber damit rechnen, dass die "
+"Änderungen bei einer späteren Aktualisierung überschrieben werden."
+
+#: authentik/blueprints/models.py:112
+msgid "Blueprint Instance"
+msgstr "Blaupause-Instanz"
+
+#: authentik/blueprints/models.py:113
+msgid "Blueprint Instances"
+msgstr "Blaupause-Instanzen"
+
+#: authentik/blueprints/v1/exporter.py:62
+#, python-format
+msgid "authentik Export - %(date)s"
+msgstr "Authentik Export - %(date)s"
+
+#: authentik/blueprints/v1/tasks.py:150 authentik/crypto/tasks.py:93
+#, python-format
+msgid "Successfully imported %(count)d files."
+msgstr "%(count)d Dateien wurden erfolgreich importiert."
+
+#: authentik/core/api/providers.py:120
msgid "SAML Provider from Metadata"
msgstr "SAML Anbieter aus Metadaten"
-#: authentik/core/api/providers.py:90
+#: authentik/core/api/providers.py:121
msgid "Create a SAML Provider by importing its Metadata."
msgstr "Erstelle eine SAML Anbieter durch Import seiner Metadaten"
-#: authentik/core/models.py:69
+#: authentik/core/api/users.py:158
+msgid "No leading or trailing slashes allowed."
+msgstr "Es sind keine führenden oder abschließenden Schrägstriche erlaubt."
+
+#: authentik/core/api/users.py:161
+msgid "No empty segments in user path allowed."
+msgstr "Im Benutzerpfad sind keine leeren Segmente erlaubt."
+
+#: authentik/core/models.py:86
msgid "name"
msgstr "Name"
-#: authentik/core/models.py:71
+#: authentik/core/models.py:88
msgid "Users added to this group will be superusers."
msgstr "Benutzer dieser Gruppe werden als Superuser hinzugefügt."
-#: authentik/core/models.py:129
+#: authentik/core/models.py:142
msgid "User's display name."
msgstr "Anzeigename"
-#: authentik/core/models.py:212 authentik/providers/oauth2/models.py:299
+#: authentik/core/models.py:268 authentik/providers/oauth2/models.py:295
msgid "User"
msgstr "Benutzer"
-#: authentik/core/models.py:213
+#: authentik/core/models.py:269
msgid "Users"
msgstr "Benutzer"
-#: authentik/core/models.py:224
+#: authentik/core/models.py:282
+msgid ""
+"Flow used for authentication when the associated application is accessed by "
+"an un-authenticated user."
+msgstr ""
+"Ablauf, welcher für die Authentifizierung verwendet wird, wenn ein nicht-"
+"authentifizierter Benutzer auf die zugehörige Anwendung zugreift."
+
+#: authentik/core/models.py:292
msgid "Flow used when authorizing this provider."
msgstr "Flow der zur Authorisierung des Anbieter verwendet wird."
-#: authentik/core/models.py:257
+#: authentik/core/models.py:304
+msgid ""
+"Accessed from applications; optional backchannel providers for protocols "
+"like LDAP and SCIM."
+msgstr ""
+"Zugriff aus Anwendungen; optionale Rückkanalanbieter für Protokolle wie LDAP"
+" und SCIM."
+
+#: authentik/core/models.py:359
msgid "Application's display Name."
-msgstr "Anzeigename der Anwendung"
+msgstr "Anzeigename der Applikation"
-#: authentik/core/models.py:258
+#: authentik/core/models.py:360
msgid "Internal application name, used in URLs."
-msgstr "Interner Anwendungsname; wird in URLs verwendet."
+msgstr "Interner Applikationsname, wird in URLs verwendet."
-#: authentik/core/models.py:311
+#: authentik/core/models.py:372
+msgid "Open launch URL in a new browser tab or window."
+msgstr "Start-URL in einem neuen Browser-Fenster öffnen."
+
+#: authentik/core/models.py:436
msgid "Application"
msgstr "Anwendung"
-#: authentik/core/models.py:312
+#: authentik/core/models.py:437
msgid "Applications"
msgstr "Anwendungen"
-#: authentik/core/models.py:318
+#: authentik/core/models.py:443
msgid "Use the source-specific identifier"
msgstr "Verwenden Sie die quellenspezifische Kennung"
-#: authentik/core/models.py:326
+#: authentik/core/models.py:445
+msgid ""
+"Link to a user with identical email address. Can have security implications "
+"when a source doesn't validate email addresses."
+msgstr ""
+"Link zu einem Benutzer mit identischer E-Mail-Adresse. Kann Auswirkungen auf"
+" die Sicherheit haben, wenn eine Quelle E-Mail-Adressen nicht validiert"
+
+#: authentik/core/models.py:449
msgid ""
"Use the user's email address, but deny enrollment when the email address "
"already exists."
@@ -101,7 +194,16 @@ msgstr ""
"Verwenden Sie die E-Mail-Adresse des Benutzers, aber verweigern Sie die "
"Registrierung, wenn die E-Mail-Adresse bereits existiert."
-#: authentik/core/models.py:335
+#: authentik/core/models.py:452
+msgid ""
+"Link to a user with identical username. Can have security implications when "
+"a username is used with another source."
+msgstr ""
+"Link zu einem Benutzer mit identischem Benutzernamen. Kann Auswirkungen auf "
+"die Sicherheit haben, wenn ein Benutzername mit einer anderen Quelle "
+"verwendet wird."
+
+#: authentik/core/models.py:456
msgid ""
"Use the user's username, but deny enrollment when the username already "
"exists."
@@ -109,73 +211,82 @@ msgstr ""
"Verwenden Sie Benutzernamen des Benutzers, aber verweigern Sie die "
"Registrierung, wenn der Benutzername bereits existiert."
-#: authentik/core/models.py:342
+#: authentik/core/models.py:463
msgid "Source's display Name."
msgstr "Quellname"
-#: authentik/core/models.py:343
+#: authentik/core/models.py:464
msgid "Internal source name, used in URLs."
msgstr "Interner Quellname, genutzt für URLs"
-#: authentik/core/models.py:354
+#: authentik/core/models.py:483
msgid "Flow to use when authenticating existing users."
msgstr "Flow der zur Authorisierung bereits ersteller Nutzer verwendet wird"
-#: authentik/core/models.py:363
+#: authentik/core/models.py:492
msgid "Flow to use when enrolling new users."
-msgstr "Flow der zum Anlegen neuer Nutzer verwendet wird"
+msgstr "Flow der zum Anlegen bereits neuer Nutzer verwendet wird"
-#: authentik/core/models.py:501
+#: authentik/core/models.py:500
+msgid ""
+"How the source determines if an existing user should be authenticated or a "
+"new user enrolled."
+msgstr ""
+"Wie die Quelle bestimmt, ob ein existierender Benutzer angemeldet oder ein "
+"neuer Benutzer registriert werden soll."
+
+#: authentik/core/models.py:672
msgid "Token"
msgstr "Token"
-#: authentik/core/models.py:502
+#: authentik/core/models.py:673
msgid "Tokens"
msgstr "Tokens"
-#: authentik/core/models.py:545
+#: authentik/core/models.py:714
msgid "Property Mapping"
msgstr "Eigenschaft"
-#: authentik/core/models.py:546
+#: authentik/core/models.py:715
msgid "Property Mappings"
msgstr "Eigenschaften"
-#: authentik/core/models.py:582
+#: authentik/core/models.py:750
msgid "Authenticated Session"
msgstr "Authentifizierte Sitzung"
-#: authentik/core/models.py:583
+#: authentik/core/models.py:751
msgid "Authenticated Sessions"
msgstr "Authentifizierte Sitzungen"
-#: authentik/core/sources/flow_manager.py:166
-msgid "source"
-msgstr "Quelle"
+#: authentik/core/sources/flow_manager.py:189
+#, python-format
+msgid ""
+"Request to authenticate with %(source)s has been denied. Please authenticate"
+" with the source you've previously signed up with."
+msgstr ""
+"Die Anfrage zur Benutzeranmeldung mit %(source)s wurde verweigert. Bitte "
+"melden Sie sich mit der Quelle an, mit der Sie sich zuvor registriert "
+"hatten."
-#: authentik/core/sources/flow_manager.py:220
-#: authentik/core/sources/flow_manager.py:258
+#: authentik/core/sources/flow_manager.py:241
+msgid "Configured flow does not exist."
+msgstr "Der konfigurierte Flow ist nicht vorhanden."
+
+#: authentik/core/sources/flow_manager.py:271
+#: authentik/core/sources/flow_manager.py:323
#, python-format
msgid "Successfully authenticated with %(source)s!"
msgstr "Erfolgreich authentifiziert mit %(source)s"
-#: authentik/core/sources/flow_manager.py:239
+#: authentik/core/sources/flow_manager.py:295
#, python-format
msgid "Successfully linked %(source)s!"
msgstr "Erfolgreich verlinkt mit %(source)s"
-#: authentik/core/templates/error/generic.html:27
-msgid "Go to home"
-msgstr "Zur Startseite"
-
-#: authentik/core/templates/if/admin.html:18
-#: authentik/core/templates/if/admin.html:24
-#: authentik/core/templates/if/flow.html:28
-#: authentik/core/templates/if/flow.html:34
-#: authentik/core/templates/if/user.html:18
-#: authentik/core/templates/if/user.html:24
-msgid "Loading..."
-msgstr "Laden..."
+#: authentik/core/sources/flow_manager.py:314
+msgid "Source is not configured for enrollment."
+msgstr "Die Quelle ist nicht zur Benutzerregistrierung eingerichtet."
#: authentik/core/templates/if/end_session.html:7
msgid "End session"
@@ -188,7 +299,7 @@ msgid ""
"You've logged out of %(application)s.\n"
msgstr ""
"\n"
-"Ausgeloggt aus %(application)s.\n"
+"Abgemeldet von %(application)s.\n"
#: authentik/core/templates/if/end_session.html:19
#, python-format
@@ -198,17 +309,25 @@ msgid ""
" "
msgstr ""
"\n"
-"Sie haben sich von %(application)s abgemeldet. Sie können zurück zur Übersicht gehen, um eine andere Anwendung zu starten, oder sich von Ihrem Authentik-Konto abmelden."
+" Sie haben sich von %(application)s abgemeldet. Sie können zurück zur Übersicht gehen, um eine andere Anwendung zu starten, oder sich von Ihrem Authentik-Konto abmelden.\n"
+" "
-#: authentik/core/templates/if/end_session.html:24
+#: authentik/core/templates/if/end_session.html:25
msgid "Go back to overview"
msgstr "Zurück zur Übersicht"
-#: authentik/core/templates/if/end_session.html:26
-msgid "Log out of authentik"
-msgstr "Aus Authentik ausloggen"
+#: authentik/core/templates/if/end_session.html:29
+#, python-format
+msgid ""
+"\n"
+" Log out of %(branding_title)s\n"
+" "
+msgstr ""
+"\n"
+" Abmelden von %(branding_title)s\n"
+" "
-#: authentik/core/templates/if/end_session.html:30
+#: authentik/core/templates/if/end_session.html:36
#, python-format
msgid ""
"\n"
@@ -218,19 +337,31 @@ msgstr ""
"\n"
"Wieder anmelden bei %(application)s"
-#: authentik/core/templates/login/base_full.html:65
-msgid "Powered by authentik"
-msgstr "Mit Authentik erstellt"
+#: authentik/core/templates/if/error.html:18
+msgid "Go home"
+msgstr "Zur Startseite"
-#: authentik/crypto/api.py:132
+#: authentik/core/templates/login/base_full.html:89
+msgid "Powered by authentik"
+msgstr "Erstellt durch Authentik"
+
+#: authentik/core/views/apps.py:53
+#: authentik/providers/oauth2/views/authorize.py:393
+#: authentik/providers/oauth2/views/device_init.py:70
+#: authentik/providers/saml/views/sso.py:70
+#, python-format
+msgid "You're about to sign into %(application)s."
+msgstr "Sie sind dabei, sich bei %(application)s anzumelden."
+
+#: authentik/crypto/api.py:179
msgid "Subject-alt name"
msgstr "SAN"
-#: authentik/crypto/models.py:34
+#: authentik/crypto/models.py:30
msgid "PEM-encoded Certificate data"
msgstr "PEM-verschlüsselte Zertifikatsdaten"
-#: authentik/crypto/models.py:37
+#: authentik/crypto/models.py:33
msgid ""
"Optional Private Key. If this is set, you can use this keypair for "
"encryption."
@@ -238,40 +369,47 @@ msgstr ""
"Optionaler privater Schlüssel. Wenn dies eingestellt ist, können Sie dieses "
"Schlüsselpaar für die Verschlüsselung verwenden."
-#: authentik/crypto/models.py:100
+#: authentik/crypto/models.py:101
msgid "Certificate-Key Pair"
msgstr "Zertifikat-Schlüssel Paar"
-#: authentik/crypto/models.py:101
+#: authentik/crypto/models.py:102
msgid "Certificate-Key Pairs"
msgstr "Zertifikat-Schlüsselpaare"
-#: authentik/crypto/tasks.py:93
-#, python-format
-msgid "Successfully imported %(count)d files."
-msgstr "%(count)d Dateien wurden erfolgreich importiert."
+#: authentik/enterprise/models.py:193
+msgid "License Usage"
+msgstr "Lizenzverwendung"
-#: authentik/events/models.py:285
+#: authentik/enterprise/models.py:194
+msgid "License Usage Records"
+msgstr "Lizenzverwendung Aufzeichnungen"
+
+#: authentik/events/models.py:290
msgid "Event"
msgstr "Event"
-#: authentik/events/models.py:286
+#: authentik/events/models.py:291
msgid "Events"
msgstr "Events"
-#: authentik/events/models.py:292
+#: authentik/events/models.py:297
+msgid "authentik inbuilt notifications"
+msgstr "Von Authentik vordefinierte Benachrichtigungen"
+
+#: authentik/events/models.py:298
msgid "Generic Webhook"
msgstr "Generischer Webhook"
-#: authentik/events/models.py:293
+#: authentik/events/models.py:299
msgid "Slack Webhook (Slack/Discord)"
msgstr "Slack Webhook (Slack/Discord)"
-#: authentik/events/models.py:294
+#: authentik/events/models.py:300
msgid "Email"
msgstr "E-Mail"
-#: authentik/events/models.py:312
+#: authentik/events/models.py:318
msgid ""
"Only send notification once, for example when sending a webhook into a chat "
"channel."
@@ -279,86 +417,178 @@ msgstr ""
"Benachrichtigung nur einmal senden, z. B. beim Senden eines Webhooks in "
"einen Chat-Kanal"
-#: authentik/events/models.py:357
+#: authentik/events/models.py:383
msgid "Severity"
msgstr "Schweregrad"
-#: authentik/events/models.py:362
+#: authentik/events/models.py:388
msgid "Dispatched for user"
msgstr "Versendet für Benutzer"
-#: authentik/events/models.py:439
+#: authentik/events/models.py:397
+msgid "Event user"
+msgstr "Event Benutzer"
+
+#: authentik/events/models.py:491
msgid "Notification Transport"
msgstr "Mitteilungszustellungsart"
-#: authentik/events/models.py:440
+#: authentik/events/models.py:492
msgid "Notification Transports"
msgstr "Mitteilungszustellungsarten"
-#: authentik/events/models.py:446
+#: authentik/events/models.py:498
msgid "Notice"
msgstr "Hinweis"
-#: authentik/events/models.py:447
+#: authentik/events/models.py:499
msgid "Warning"
msgstr "Warnung"
-#: authentik/events/models.py:448
+#: authentik/events/models.py:500
msgid "Alert"
msgstr "Alarm"
-#: authentik/events/models.py:468
+#: authentik/events/models.py:525
msgid "Notification"
msgstr "Benachrichtigung"
-#: authentik/events/models.py:469
+#: authentik/events/models.py:526
msgid "Notifications"
msgstr "Benachrichtigungen"
-#: authentik/events/models.py:488
+#: authentik/events/models.py:536
+msgid ""
+"Select which transports should be used to notify the user. If none are "
+"selected, the notification will only be shown in the authentik UI."
+msgstr ""
+"Wählen Sie, welche Zustellungsart genutzt werden soll um Benutzer zu "
+"benachrichtigen. Wenn keine gewählt wurde, werden Benachrichtigungen nur in "
+"der Authentik-Oberfläche angezeigt."
+
+#: authentik/events/models.py:544
msgid "Controls which severity level the created notifications will have."
msgstr ""
"Legt fest, welchen Schweregrad die erstellten Benachrichtigungen haben "
"sollen."
-#: authentik/events/models.py:508
+#: authentik/events/models.py:549
+msgid ""
+"Define which group of users this notification should be sent and shown to. "
+"If left empty, Notification won't ben sent."
+msgstr ""
+"Legt fest, welcher Benutzergruppe diese Benachrichtigung zugesandt und "
+"angezeigt werden soll. Ohne diese Angabe wird die Benachrichtigung nicht "
+"versandt."
+
+#: authentik/events/models.py:567
msgid "Notification Rule"
msgstr "Benachrichtigungsregel"
-#: authentik/events/models.py:509
+#: authentik/events/models.py:568
msgid "Notification Rules"
msgstr "Benachrichtigungsregeln"
-#: authentik/events/models.py:530
-msgid "Notification Webhook Mapping"
-msgstr "Benachrichtigungs-Webhook Zuordnung"
+#: authentik/events/models.py:588
+msgid "Webhook Mapping"
+msgstr "Webhook Zuordnung"
-#: authentik/events/models.py:531
-msgid "Notification Webhook Mappings"
-msgstr "Benachrichtigungs-Webhook Zuordnungen"
+#: authentik/events/models.py:589
+msgid "Webhook Mappings"
+msgstr "Webhook Zuordnungen"
-#: authentik/events/monitored_tasks.py:197
+#: authentik/events/monitored_tasks.py:205
msgid "Task has not been run yet."
msgstr "Die Aufgabe wurde noch nicht ausgeführt"
-#: authentik/flows/api/flows.py:350
+#: authentik/flows/api/flows.py:295
#, python-format
msgid "Flow not applicable to current user/request: %(messages)s"
msgstr "Flow nicht anwendbar auf aktuellen Benutzer/Anfrage: %(messages)s"
-#: authentik/flows/models.py:107
+#: authentik/flows/api/flows_diagram.py:68
+#: authentik/flows/api/flows_diagram.py:94
+#, python-format
+msgid "Policy (%(type)s)"
+msgstr "Richtlinie (%(type)s)"
+
+#: authentik/flows/api/flows_diagram.py:71
+#, python-format
+msgid "Binding %(order)d"
+msgstr "Bindung %(order)d"
+
+#: authentik/flows/api/flows_diagram.py:118
+msgid "Policy passed"
+msgstr "Richtlinie erfüllt"
+
+#: authentik/flows/api/flows_diagram.py:122
+#, python-format
+msgid "Stage (%(type)s)"
+msgstr "Stufe (%(type)s)"
+
+#: authentik/flows/api/flows_diagram.py:146
+#: authentik/flows/api/flows_diagram.py:206
+msgid "Policy denied"
+msgstr "Richtlinie verweigert"
+
+#: authentik/flows/api/flows_diagram.py:156
+#: authentik/flows/api/flows_diagram.py:168
+#: authentik/flows/api/flows_diagram.py:205
+#: authentik/flows/api/flows_diagram.py:227
+msgid "End of the flow"
+msgstr "Ende des Flow"
+
+#: authentik/flows/api/flows_diagram.py:169
+msgid "Requirement not fulfilled"
+msgstr "Voraussetzung ist nicht erfüllt"
+
+#: authentik/flows/api/flows_diagram.py:177
+msgid "Flow authentication requirement"
+msgstr "Authentifizierungsablauf Anforderung"
+
+#: authentik/flows/api/flows_diagram.py:183
+msgid "Requirement fulfilled"
+msgstr "Voraussetzung erfüllt"
+
+#: authentik/flows/api/flows_diagram.py:196
+msgid "Pre-flow policies"
+msgstr "Pre-Flow Richtlinien"
+
+#: authentik/flows/api/flows_diagram.py:214 authentik/flows/models.py:193
+msgid "Flow"
+msgstr "Ablauf"
+
+#: authentik/flows/exceptions.py:19
+msgid "Flow does not apply to current user."
+msgstr "Der Flow gilt nicht für den aktuellen Nutzer."
+
+#: authentik/flows/models.py:114
+#, python-format
+msgid "Dynamic In-memory stage: %(doc)s"
+msgstr "Dynamische In-Speicher-Stufe: %(doc)s"
+
+#: authentik/flows/models.py:129
msgid "Visible in the URL."
msgstr "Sichtbar in der URL"
-#: authentik/flows/models.py:109
+#: authentik/flows/models.py:131
msgid "Shown as the Title in Flow pages."
msgstr "Wird als Titel auf den Ablaufseiten angezeigt."
-#: authentik/flows/models.py:126
+#: authentik/flows/models.py:138
+msgid ""
+"Decides what this Flow is used for. For example, the Authentication flow is "
+"redirect to when an un-authenticated user visits authentik."
+msgstr ""
+"Entscheidet, wofür dieser Flow verwendet wird. Beispielsweise wird der "
+"Authentifizierungsablauf umgeleitet, wenn ein nicht authentifizierter "
+"Benutzer Authentik besucht."
+
+#: authentik/flows/models.py:147
msgid "Background shown during execution"
msgstr "Während der Ausführung angezeigter Hintergrund"
-#: authentik/flows/models.py:133
+#: authentik/flows/models.py:154
msgid ""
"Enable compatibility mode, increases compatibility with password managers on"
" mobile devices."
@@ -366,20 +596,33 @@ msgstr ""
"Aktivieren Sie den Kompatibilitätsmodus, um die Kompatibilität mit "
"Passwortmanagern auf mobilen Geräten zu erhöhen."
-#: authentik/flows/models.py:178
-msgid "Flow"
-msgstr "Ablauf"
+#: authentik/flows/models.py:162
+msgid "Configure what should happen when a flow denies access to a user."
+msgstr ""
+"Konfiguration, was geschehen soll, wenn ein Flow den Zugriff eines Benutzers"
+" verbietet."
-#: authentik/flows/models.py:179
+#: authentik/flows/models.py:168
+msgid "Required level of authentication and authorization to access a flow."
+msgstr ""
+"Erforderliche Stufe von Authentifizierung und Autorisierung für den Zugriff "
+"auf einen Ablauf."
+
+#: authentik/flows/models.py:194
msgid "Flows"
msgstr "Abläufe"
-#: authentik/flows/models.py:209
+#: authentik/flows/models.py:215
+msgid "Evaluate policies during the Flow planning process."
+msgstr ""
+"Evaluierung der Richtlinien während des Planungsprozesses für den Ablauf."
+
+#: authentik/flows/models.py:219
msgid "Evaluate policies when the Stage is present to the user."
msgstr ""
"Bewerten Sie die Richtlinien, wenn die Stufe für den Benutzer sichtbar ist."
-#: authentik/flows/models.py:216
+#: authentik/flows/models.py:226
msgid ""
"Configure how the flow executor should handle an invalid response to a "
"challenge. RETRY returns the error message and a similar challenge to the "
@@ -392,59 +635,81 @@ msgstr ""
"an neu, und RESTART_WITH_CONTEXT startet den Ablauf unter Beibehaltung des "
"aktuellen Kontexts neu."
-#: authentik/flows/models.py:240
+#: authentik/flows/models.py:249
msgid "Flow Stage Binding"
msgstr "Ablaufsstufe Bindung"
-#: authentik/flows/models.py:241
+#: authentik/flows/models.py:250
msgid "Flow Stage Bindings"
msgstr "Ablaufsstufe Bindungen"
-#: authentik/flows/models.py:291
+#: authentik/flows/models.py:265
+msgid ""
+"Flow used by an authenticated user to configure this Stage. If empty, user "
+"will not be able to configure this stage."
+msgstr ""
+"Ablauf der von einem authentifizierten Benutzer verwendet wird, um diese "
+"Phase zu konfigurieren. Wenn leer, kann der Benutzer diese Phase nicht "
+"konfigurieren."
+
+#: authentik/flows/models.py:305
msgid "Flow Token"
msgstr "Ablauf-Token"
-#: authentik/flows/models.py:292
+#: authentik/flows/models.py:306
msgid "Flow Tokens"
msgstr "Ablauf-Token"
-#: authentik/flows/templates/flows/error.html:12
-msgid "Whoops!"
-msgstr "Whoops!"
-
-#: authentik/flows/templates/flows/error.html:17
-msgid "Something went wrong! Please try again later."
-msgstr "Etwas ist schiefgelaufen. Bitte probiere es später wieder"
-
-#: authentik/lib/utils/time.py:24
+#: authentik/lib/utils/time.py:27
#, python-format
msgid "%(value)s is not in the correct format of 'hours=3;minutes=1'."
msgstr "%(value)s hat nicht das korrekte Format von \"hours=3;minutes=1\"."
-#: authentik/managed/models.py:12
-msgid "Managed by authentik"
-msgstr "Verwaltet durch Authentik"
-
-#: authentik/outposts/api/service_connections.py:131
+#: authentik/outposts/api/service_connections.py:127
msgid ""
"You can only use an empty kubeconfig when connecting to a local cluster."
msgstr ""
"Sie können nur eine leere kubeconfig verwenden, wenn Sie sich mit einem "
"lokalen Cluster verbinden."
-#: authentik/outposts/api/service_connections.py:139
+#: authentik/outposts/api/service_connections.py:135
msgid "Invalid kubeconfig"
msgstr "Ungültige Kube Konfiguration"
-#: authentik/outposts/models.py:151
+#: authentik/outposts/models.py:122
+msgid ""
+"If enabled, use the local connection. Required Docker socket/Kubernetes "
+"Integration"
+msgstr ""
+"Wenn aktiviert, benutze die lokale Verbindung. Benötigt Docker Socket-/ "
+"Kubernetes-Integration"
+
+#: authentik/outposts/models.py:152
msgid "Outpost Service-Connection"
msgstr "Outpost Service-Verbindung"
-#: authentik/outposts/models.py:152
+#: authentik/outposts/models.py:153
msgid "Outpost Service-Connections"
msgstr "Outpost Service-Verbindungen"
-#: authentik/outposts/models.py:188
+#: authentik/outposts/models.py:161
+msgid ""
+"Can be in the format of 'unix://' when connecting to a local docker "
+"daemon, or 'https://:2376' when connecting to a remote system."
+msgstr ""
+"Entweder im Format 'unix://' für eine Verbindung zu einem lokalen "
+"Docker-Daemon oder im Format 'https://:2376' für eine Verbindung "
+"zu einem entfernten System."
+
+#: authentik/outposts/models.py:173
+msgid ""
+"CA which the endpoint's Certificate is verified against. Can be left empty "
+"for no validation."
+msgstr ""
+"CA, anhand derer das Zertifikat des Endpunkts überprüft wird. Kann leer "
+"gelassen werden, um keine Validierung durchzuführen."
+
+#: authentik/outposts/models.py:185
msgid ""
"Certificate/Key used for authentication. Can be left empty for no "
"authentication."
@@ -452,167 +717,267 @@ msgstr ""
"Zertifikat/Schlüssel für die Authentifizierung. Kann leer gelassen werden, "
"wenn keine Authentifizierung erfolgt."
-#: authentik/outposts/models.py:201
+#: authentik/outposts/models.py:203
msgid "Docker Service-Connection"
msgstr "Docker Service-Verbindung"
-#: authentik/outposts/models.py:202
+#: authentik/outposts/models.py:204
msgid "Docker Service-Connections"
msgstr "Docker Service-Verbindungen"
-#: authentik/outposts/models.py:227
+#: authentik/outposts/models.py:212
+msgid ""
+"Paste your kubeconfig here. authentik will automatically use the currently "
+"selected context."
+msgstr ""
+"Fügen Sie Ihre kubeconfig hier ein. Authentik wird automatisch den aktuell "
+"ausgewählten Kontext verwenden."
+
+#: authentik/outposts/models.py:218
+msgid "Verify SSL Certificates of the Kubernetes API endpoint"
+msgstr "SSL-Zertifikate des Kubernetes API-Endpunkts überprüfen"
+
+#: authentik/outposts/models.py:235
msgid "Kubernetes Service-Connection"
msgstr "Kubernetes Service-Verbindung"
-#: authentik/outposts/models.py:228
+#: authentik/outposts/models.py:236
msgid "Kubernetes Service-Connections"
msgstr "Kubernetes Service-Verbindungen"
+#: authentik/outposts/models.py:252
+msgid ""
+"Select Service-Connection authentik should use to manage this outpost. Leave"
+" empty if authentik should not handle the deployment."
+msgstr ""
+"Wählen Sie die Service-Verbindung, die Authentik benutzen soll, um diesen "
+"Outpost zu verwalten. Leer lassen, um die Installation nicht von Authentik "
+"verwalten zu lassen."
+
#: authentik/policies/denied.py:24
msgid "Access denied"
msgstr "Zugriff verweigert"
-#: authentik/policies/dummy/models.py:45
+#: authentik/policies/dummy/models.py:44
msgid "Dummy Policy"
msgstr "Dummy Richtlinie"
-#: authentik/policies/dummy/models.py:46
+#: authentik/policies/dummy/models.py:45
msgid "Dummy Policies"
msgstr "Dummy Richtlinien"
-#: authentik/policies/event_matcher/models.py:80
+#: authentik/policies/event_matcher/api.py:20
+#: authentik/policies/event_matcher/models.py:56
+msgid ""
+"Match events created by selected application. When left empty, all "
+"applications are matched."
+msgstr ""
+"Übereinstimmungsereignisse, die von der ausgewählten Anwendung erstellt "
+"wurden. Wenn es leer gelassen wird, werden alle Anwendungen abgeglichen."
+
+#: authentik/policies/event_matcher/api.py:29
+#: authentik/policies/event_matcher/models.py:64
+msgid ""
+"Match events created by selected model. When left empty, all models are "
+"matched. When an app is selected, all the application's models are matched."
+msgstr ""
+"Stimmt mit Ereignissen überein, die vom ausgewählten Modell erstellt wurden."
+" Bleibt sie leer, werden alle Modelle abgeglichen. Wenn eine Anwendung "
+"ausgewählt ist, werden alle Modelle der Anwendung abgeglichen."
+
+#: authentik/policies/event_matcher/api.py:42
+msgid "At least one criteria must be set."
+msgstr "Es muss mindestens ein Kriterium festgelegt werden."
+
+#: authentik/policies/event_matcher/models.py:48
+msgid ""
+"Match created events with this action type. When left empty, all action "
+"types will be matched."
+msgstr ""
+"Ordnen Sie erstellte Ereignisse diesem Aktionstyp zu. Wenn es leer gelassen "
+"wird, werden alle Aktionstypen abgeglichen."
+
+#: authentik/policies/event_matcher/models.py:73
+msgid ""
+"Matches Event's Client IP (strict matching, for network matching use an "
+"Expression Policy)"
+msgstr ""
+"Stimmt mit der Client-IP des Ereignisses überein (strenge Übereinstimmung, "
+"verwenden Sie für die Netzwerkübereinstimmung eine Ausdrucksrichtlinie)."
+
+#: authentik/policies/event_matcher/models.py:143
msgid "Event Matcher Policy"
msgstr "Regelwerk für Ereignisabgleich"
-#: authentik/policies/event_matcher/models.py:81
+#: authentik/policies/event_matcher/models.py:144
msgid "Event Matcher Policies"
-msgstr "Regelwerk für Ereignisabgleicher"
+msgstr "Richtlinie für den Ereignisvergleich"
-#: authentik/policies/expiry/models.py:46
-msgid "days"
-msgstr "Tage"
+#: authentik/policies/expiry/models.py:45
+#, python-format
+msgid "Password expired %(days)d days ago. Please update your password."
+msgstr ""
+"Das Passwort ist vor %(days)d Tagen abgelaufen. Bitte aktualisieren Sie Ihr "
+"Passwort."
#: authentik/policies/expiry/models.py:49
msgid "Password has expired."
msgstr "Passwort ist abgelaufen"
-#: authentik/policies/expiry/models.py:54
+#: authentik/policies/expiry/models.py:53
msgid "Password Expiry Policy"
msgstr "Passwort-Ablauf Richtlinie"
-#: authentik/policies/expiry/models.py:55
+#: authentik/policies/expiry/models.py:54
msgid "Password Expiry Policies"
msgstr "Passwort-Ablauf Richtlinien"
-#: authentik/policies/expression/models.py:41
+#: authentik/policies/expression/models.py:40
msgid "Expression Policy"
-msgstr "Bezeichnungsregelwerk"
+msgstr "Bezeichnungsrichtlinie"
-#: authentik/policies/expression/models.py:42
+#: authentik/policies/expression/models.py:41
msgid "Expression Policies"
msgstr "Bezeichnungsregelwerke"
-#: authentik/policies/hibp/models.py:22
-#: authentik/policies/password/models.py:24
+#: authentik/policies/models.py:22
+msgid "all, all policies must pass"
+msgstr "Alle, Alle Richtlinien müssen erfüllt werden"
+
+#: authentik/policies/models.py:23
+msgid "any, any policy must pass"
+msgstr "Beliebig, Beliebige Richtlinien muss erfüllt werden"
+
+#: authentik/policies/models.py:46
+msgid "Policy Binding Model"
+msgstr "Richtlinienbindungsmodell"
+
+#: authentik/policies/models.py:47
+msgid "Policy Binding Models"
+msgstr "Modell der Regelwerksbindungen"
+
+#: authentik/policies/models.py:86
+msgid "Negates the outcome of the policy. Messages are unaffected."
+msgstr ""
+"Negiert das Ergebnis der Richtlinie. Nachrichten sind davon nicht betroffen."
+
+#: authentik/policies/models.py:89
+msgid "Timeout after which Policy execution is terminated."
+msgstr ""
+"Zeitüberschreitung, nach der die Ausführung der Richtlinie abgebrochen wird."
+
+#: authentik/policies/models.py:92
+msgid "Result if the Policy execution fails."
+msgstr "Ergebnis, wenn die Ausführung der Richtlinie fehlschlägt."
+
+#: authentik/policies/models.py:145
+msgid "Policy Binding"
+msgstr "Richtlinienbindung"
+
+#: authentik/policies/models.py:146
+msgid "Policy Bindings"
+msgstr "Regelwerk Bindungen"
+
+#: authentik/policies/models.py:167
+msgid ""
+"When this option is enabled, all executions of this policy will be logged. "
+"By default, only execution errors are logged."
+msgstr ""
+"Wenn diese Option aktiviert ist, werden alle Ausführungen dieser Richtlinie "
+"protokolliert. Standardmäßig werden nur Ausführungsfehler protokolliert."
+
+#: authentik/policies/models.py:189
+msgid "Policy"
+msgstr "Richtlinie"
+
+#: authentik/policies/models.py:190
+msgid "Policies"
+msgstr "Richtlinien"
+
+#: authentik/policies/password/models.py:27
msgid "Field key to check, field keys defined in Prompt stages are available."
msgstr ""
"Zu prüfender Feldschlüssel, die in den Aufforderungsstufen definierten "
"Feldschlüssel sind verfügbar."
-#: authentik/policies/hibp/models.py:47
-#: authentik/policies/password/models.py:57
+#: authentik/policies/password/models.py:44
+msgid "How many times the password hash is allowed to be on haveibeenpwned"
+msgstr "Wie häufig der Passwort-Hash auf haveibeenpwned vertreten sein darf"
+
+#: authentik/policies/password/models.py:49
+msgid ""
+"If the zxcvbn score is equal or less than this value, the policy will fail."
+msgstr ""
+"Die Richtlinie wird verweigert, wenn die zxcvbn-Bewertung gleich oder "
+"kleiner diesem Wert ist."
+
+#: authentik/policies/password/models.py:72
msgid "Password not set in context"
msgstr "Passwort nicht im Kontext festgelegt"
-#: authentik/policies/hibp/models.py:60
+#: authentik/policies/password/models.py:134
#, python-format
msgid "Password exists on %(count)d online lists."
msgstr "Passwort existiert auf %(count)d Listen."
-#: authentik/policies/hibp/models.py:66
-msgid "Have I Been Pwned Policy"
-msgstr "Have I Been Pwned Richtlinie"
+#: authentik/policies/password/models.py:154
+msgid "Password is too weak."
+msgstr "Das Passwort ist zu schwach."
-#: authentik/policies/hibp/models.py:67
-msgid "Have I Been Pwned Policies"
-msgstr "Have I Been Pwned Richtlinien"
-
-#: authentik/policies/models.py:23
-msgid "ALL, all policies must pass"
-msgstr "ALLE, alle Regelwerke müssen erfüllt sein"
-
-#: authentik/policies/models.py:25
-msgid "ANY, any policy must pass"
-msgstr "BELIEBIG, beliebige Regelwerke müssen erfüllt sein"
-
-#: authentik/policies/models.py:45
-msgid "Policy Binding Model"
-msgstr "Modell der Regelwerksbindung"
-
-#: authentik/policies/models.py:46
-msgid "Policy Binding Models"
-msgstr "Modell der Regelwerksbindungen"
-
-#: authentik/policies/models.py:85
-msgid "Negates the outcome of the policy. Messages are unaffected."
-msgstr ""
-"Negiert das Ergebnis der Richtlinie. Nachrichten sind davon nicht betroffen."
-
-#: authentik/policies/models.py:88
-msgid "Timeout after which Policy execution is terminated."
-msgstr ""
-"Zeitüberschreitung, nach der die Ausführung der Richtlinie abgebrochen wird."
-
-#: authentik/policies/models.py:141
-msgid "Policy Binding"
-msgstr "Regelwerk Bindung"
-
-#: authentik/policies/models.py:142
-msgid "Policy Bindings"
-msgstr "Regelwerk Bindungen"
-
-#: authentik/policies/models.py:181
-msgid "Policy"
-msgstr "Richtlinie"
-
-#: authentik/policies/models.py:182
-msgid "Policies"
-msgstr "Richtlinien"
-
-#: authentik/policies/password/models.py:89
+#: authentik/policies/password/models.py:162
msgid "Password Policy"
msgstr "Passwort Richtlinie"
-#: authentik/policies/password/models.py:90
+#: authentik/policies/password/models.py:163
msgid "Password Policies"
msgstr "Passwort Richtlinien"
-#: authentik/policies/reputation/models.py:54
-msgid "Reputation Policy"
-msgstr "Reputations Regelwerk"
+#: authentik/policies/reputation/api.py:18
+msgid "Either IP or Username must be checked"
+msgstr "Entweder IP oder Benutzername muss ausgewählt werden"
-#: authentik/policies/reputation/models.py:55
+#: authentik/policies/reputation/models.py:67
+msgid "Reputation Policy"
+msgstr "Reputationsrichtlinie"
+
+#: authentik/policies/reputation/models.py:68
msgid "Reputation Policies"
msgstr "Reputations Regelwerke"
+#: authentik/policies/reputation/models.py:95
+msgid "Reputation Score"
+msgstr "Reputationswert"
+
+#: authentik/policies/reputation/models.py:96
+msgid "Reputation Scores"
+msgstr "Reputationswert"
+
#: authentik/policies/templates/policies/denied.html:7
#: authentik/policies/templates/policies/denied.html:11
msgid "Permission denied"
msgstr "Erlaubnis verweigert"
-#: authentik/policies/templates/policies/denied.html:20
+#: authentik/policies/templates/policies/denied.html:21
+msgid "User's avatar"
+msgstr "Avatar des Benutzers"
+
+#: authentik/policies/templates/policies/denied.html:25
+msgid "Not you?"
+msgstr "Nicht Sie?"
+
+#: authentik/policies/templates/policies/denied.html:33
msgid "Request has been denied."
msgstr "Anfrage wurde verweigert"
-#: authentik/policies/templates/policies/denied.html:31
+#: authentik/policies/templates/policies/denied.html:44
msgid "Messages:"
msgstr "Nachrichten:"
-#: authentik/policies/templates/policies/denied.html:41
+#: authentik/policies/templates/policies/denied.html:54
msgid "Explanation:"
msgstr "Erklärung:"
-#: authentik/policies/templates/policies/denied.html:45
+#: authentik/policies/templates/policies/denied.html:58
#, python-format
msgid ""
"\n"
@@ -640,145 +1005,233 @@ msgstr ""
#: authentik/providers/ldap/models.py:53
msgid ""
-"The start for uidNumbers, this number is added to the user.Pk to make sure "
+"The start for uidNumbers, this number is added to the user.pk to make sure "
"that the numbers aren't too low for POSIX users. Default is 2000 to ensure "
"that we don't collide with local users uidNumber"
msgstr ""
-"Der Anfang für uidNumbers, diese Zahl wird zu user.Pk hinzugefügt, um "
-"sicherzustellen, dass die Zahlen für POSIX-Benutzer nicht zu niedrig sind. "
-"Standardwert ist 2000, um sicherzustellen, dass wir nicht mit lokalen "
-"Benutzer kollidieren"
+"Der Standardwert für die uid-Nummern. Diese Zahl wird zur user.pk "
+"hinzugefügt, um sicherzustellen, dass die Nummern für POSIX-Benutzer nicht "
+"zu niedrig sind. Standardwert ist 2000, um sicherzustellen, dass wir nicht "
+"mit lokalen Benutzern uid-Nummern kollidieren."
#: authentik/providers/ldap/models.py:62
msgid ""
"The start for gidNumbers, this number is added to a number generated from "
-"the group.Pk to make sure that the numbers aren't too low for POSIX groups. "
+"the group.pk to make sure that the numbers aren't too low for POSIX groups. "
"Default is 4000 to ensure that we don't collide with local groups or users "
"primary groups gidNumber"
msgstr ""
-"Der Anfang für gidNumbers, diese Zahl wird zu einer aus der group.Pk "
-"generierten Zahl addiert, um sicherzustellen, dass die Zahlen für POSIX-"
+"Der Startwert für die gid-Nummern. Diese Zahl wird zu einer aus der group.pk"
+" generierten Zahl addiert, um sicherzustellen, dass die Zahlen für POSIX-"
"Gruppen nicht zu niedrig sind. Der Standardwert ist 4000, um "
"sicherzustellen, dass wir nicht mit lokalen Gruppen oder primären "
-"Benutzergruppen kollidieren."
+"Benutzergruppen gid-Nummern kollidieren."
-#: authentik/providers/ldap/models.py:97
+#: authentik/providers/ldap/models.py:76
+msgid ""
+"When enabled, code-based multi-factor authentication can be used by "
+"appending a semicolon and the TOTP code to the password. This should only be"
+" enabled if all users that will bind to this provider have a TOTP device "
+"configured, as otherwise a password may incorrectly be rejected if it "
+"contains a semicolon."
+msgstr ""
+"Wenn diese Option aktiviert ist, kann eine codebasierte Multi-Faktor-"
+"Authentifizierung verwendet werden, indem ein Semikolon und der TOTP-Code an"
+" das Passwort angehängt werden. Dies sollte nur aktiviert werden, wenn alle "
+"Benutzer, die sich an diesen Anbieter binden, ein TOTP-Gerät konfiguriert "
+"haben, da andernfalls ein Passwort fälschlicherweise zurückgewiesen werden "
+"kann, wenn es ein Semikolon enthält."
+
+#: authentik/providers/ldap/models.py:108
msgid "LDAP Provider"
msgstr "LDAP Anbieter"
-#: authentik/providers/ldap/models.py:98
+#: authentik/providers/ldap/models.py:109
msgid "LDAP Providers"
msgstr "LDAP Anbietern"
-#: authentik/providers/oauth2/models.py:36
-msgid "Confidential"
-msgstr "Vertraulich"
-
-#: authentik/providers/oauth2/models.py:37
-msgid "Public"
-msgstr "Öffentlich"
-
-#: authentik/providers/oauth2/models.py:51
+#: authentik/providers/oauth2/id_token.py:27
msgid "Based on the Hashed User ID"
msgstr "Basierend auf der gehashten Benutzer ID"
-#: authentik/providers/oauth2/models.py:52
+#: authentik/providers/oauth2/id_token.py:28
+msgid "Based on user ID"
+msgstr "Basierend auf Benuzter ID"
+
+#: authentik/providers/oauth2/id_token.py:29
+msgid "Based on user UUID"
+msgstr "Basierend auf der Benutzer UUID"
+
+#: authentik/providers/oauth2/id_token.py:30
msgid "Based on the username"
msgstr "Basierend auf dem Benutzernamen"
-#: authentik/providers/oauth2/models.py:55
+#: authentik/providers/oauth2/id_token.py:33
msgid "Based on the User's Email. This is recommended over the UPN method."
msgstr ""
"Basierend auf der E-Mail des Benutzers. Dies wird gegenüber der UPN-Methode "
"empfohlen."
-#: authentik/providers/oauth2/models.py:71
+#: authentik/providers/oauth2/id_token.py:38
+msgid ""
+"Based on the User's UPN, only works if user has a 'upn' attribute set. Use "
+"this method only if you have different UPN and Mail domains."
+msgstr ""
+"Basierend auf dem UPN des Benutzers, funktioniert nur, wenn der Benutzer ein"
+" 'upn'-Attribut gesetzt hat. Verwenden Sie diese Methode nur, wenn Sie "
+"unterschiedliche UPN- und Mail-Domänen haben."
+
+#: authentik/providers/oauth2/models.py:43
+msgid "Confidential"
+msgstr "Vertraulich"
+
+#: authentik/providers/oauth2/models.py:44
+msgid "Public"
+msgstr "Öffentlich"
+
+#: authentik/providers/oauth2/models.py:66
msgid "Same identifier is used for all providers"
msgstr "Für alle Anbieter wird dieselbe Kennung verwendet"
-#: authentik/providers/oauth2/models.py:73
+#: authentik/providers/oauth2/models.py:68
msgid "Each provider has a different issuer, based on the application slug."
msgstr ""
"Jeder Anbieter hat einen anderen Aussteller, der auf dem Slug der Anwendung "
"basiert."
-#: authentik/providers/oauth2/models.py:80
+#: authentik/providers/oauth2/models.py:75
msgid "code (Authorization Code Flow)"
msgstr "Code (Autorisierungsablauf)"
-#: authentik/providers/oauth2/models.py:81
+#: authentik/providers/oauth2/models.py:76
msgid "id_token (Implicit Flow)"
msgstr "id_token (Implizierter Ablauf)"
-#: authentik/providers/oauth2/models.py:82
+#: authentik/providers/oauth2/models.py:77
msgid "id_token token (Implicit Flow)"
msgstr "id_token token (Implizierter Ablauf)"
-#: authentik/providers/oauth2/models.py:83
+#: authentik/providers/oauth2/models.py:78
msgid "code token (Hybrid Flow)"
msgstr "code token (Hybrid Ablauf)"
-#: authentik/providers/oauth2/models.py:84
+#: authentik/providers/oauth2/models.py:79
msgid "code id_token (Hybrid Flow)"
msgstr "code id_token (Hybrid Ablauf)"
-#: authentik/providers/oauth2/models.py:85
+#: authentik/providers/oauth2/models.py:80
msgid "code id_token token (Hybrid Flow)"
msgstr "code id_token token (Hybrid Ablauf)"
-#: authentik/providers/oauth2/models.py:91
+#: authentik/providers/oauth2/models.py:86
msgid "HS256 (Symmetric Encryption)"
msgstr "HS256 (Symmetrische Verschlüsselung)"
-#: authentik/providers/oauth2/models.py:92
+#: authentik/providers/oauth2/models.py:87
msgid "RS256 (Asymmetric Encryption)"
msgstr "RS256 (Asymmetrische Verschlüsselung)"
-#: authentik/providers/oauth2/models.py:93
+#: authentik/providers/oauth2/models.py:88
msgid "ES256 (Asymmetric Encryption)"
msgstr "ES256 (Asymmetrische Verschlüsselung)"
-#: authentik/providers/oauth2/models.py:99
+#: authentik/providers/oauth2/models.py:94
msgid "Scope used by the client"
msgstr "Vom Client verwendeter Scope"
-#: authentik/providers/oauth2/models.py:125
+#: authentik/providers/oauth2/models.py:98
+msgid ""
+"Description shown to the user when consenting. If left empty, the user won't"
+" be informed."
+msgstr ""
+"Beschreibung, die Benutzer sehen, wenn sie Einwilligen. Falls leer gelassen,"
+" werden Benutzer nicht informiert."
+
+#: authentik/providers/oauth2/models.py:117
msgid "Scope Mapping"
msgstr "Umfang Zuordnung"
-#: authentik/providers/oauth2/models.py:126
+#: authentik/providers/oauth2/models.py:118
msgid "Scope Mappings"
msgstr "Umfang Zuordnungen"
-#: authentik/providers/oauth2/models.py:136
+#: authentik/providers/oauth2/models.py:128
msgid "Client Type"
msgstr "Client Typ"
-#: authentik/providers/oauth2/models.py:142
+#: authentik/providers/oauth2/models.py:130
+msgid ""
+"Confidential clients are capable of maintaining the confidentiality of their"
+" credentials. Public clients are incapable"
+msgstr ""
+"Vertrauliche Clients sind in der Lage, die Vertraulichkeit ihrer "
+"Anmeldedaten zu wahren. Öffentliche Clients sind dazu nicht in der Lage."
+
+#: authentik/providers/oauth2/models.py:137
msgid "Client ID"
msgstr "Client ID"
-#: authentik/providers/oauth2/models.py:148
+#: authentik/providers/oauth2/models.py:143
msgid "Client Secret"
msgstr "Client Geheimnis"
-#: authentik/providers/oauth2/models.py:154
+#: authentik/providers/oauth2/models.py:149
msgid "Redirect URIs"
msgstr "URIs weiterleiten"
-#: authentik/providers/oauth2/models.py:155
+#: authentik/providers/oauth2/models.py:150
msgid "Enter each URI on a new line."
msgstr "Geben Sie jeden URI in eine neue Zeile ein."
-#: authentik/providers/oauth2/models.py:160
+#: authentik/providers/oauth2/models.py:155
msgid "Include claims in id_token"
msgstr "Ansprüche in id_token berücksichtigen"
-#: authentik/providers/oauth2/models.py:208
-msgid "RSA Key"
-msgstr "RSA Schlüssel"
+#: authentik/providers/oauth2/models.py:157
+msgid ""
+"Include User claims from scopes in the id_token, for applications that don't"
+" access the userinfo endpoint."
+msgstr ""
+"Schließen Sie Benutzeransprüche aus Bereichen in das id_token ein, für "
+"Anwendungen, die nicht auf den userinfo-Endpunkt zugreifen."
-#: authentik/providers/oauth2/models.py:212
+#: authentik/providers/oauth2/models.py:166
+msgid ""
+"Access codes not valid on or after current time + this value (Format: "
+"hours=1;minutes=2;seconds=3)."
+msgstr ""
+"Zugangsschlüssel laufen ab nach dieser Zeitspanne (Format: "
+"hours=1;minutes=2;seconds=3)."
+
+#: authentik/providers/oauth2/models.py:174
+#: authentik/providers/oauth2/models.py:182
+msgid ""
+"Tokens not valid on or after current time + this value (Format: "
+"hours=1;minutes=2;seconds=3)."
+msgstr ""
+"Tokens laufen ab nach dieser Zeitspanne (Format: "
+"hours=1;minutes=2;seconds=3)."
+
+#: authentik/providers/oauth2/models.py:191
+msgid ""
+"Configure what data should be used as unique User Identifier. For most "
+"cases, the default should be fine."
+msgstr ""
+"Konfigurieren Sie, welche Daten als eindeutige Benutzerkennung verwendet "
+"werden sollen. In den meisten Fällen sollte die Standardeinstellung in "
+"Ordnung sein."
+
+#: authentik/providers/oauth2/models.py:198
+msgid "Configure how the issuer field of the ID Token should be filled."
+msgstr ""
+"Konfigurieren Sie, wie der Flow-Executor mit einer ungültigen Antwort auf "
+"eine Abfrage umgehen soll."
+
+#: authentik/providers/oauth2/models.py:203
+msgid "Signing Key"
+msgstr "Signaturschlüssel"
+
+#: authentik/providers/oauth2/models.py:207
msgid ""
"Key used to sign the tokens. Only required when JWT Algorithm is set to "
"RS256."
@@ -786,81 +1239,126 @@ msgstr ""
"Schlüssel, der zum Signieren der Token verwendet wird. Nur erforderlich, "
"wenn der JWT-Algorithmus auf RS256 eingestellt ist."
-#: authentik/providers/oauth2/models.py:291
+#: authentik/providers/oauth2/models.py:214
+msgid ""
+"Any JWT signed by the JWK of the selected source can be used to "
+"authenticate."
+msgstr ""
+"Jedes JWT, das von der JWK der gewählten Quelle signiert ist, kann zur "
+"Authentifizierung verwendet werden."
+
+#: authentik/providers/oauth2/models.py:287
msgid "OAuth2/OpenID Provider"
msgstr "OAuth2/OpenID Anbieter"
-#: authentik/providers/oauth2/models.py:292
+#: authentik/providers/oauth2/models.py:288
msgid "OAuth2/OpenID Providers"
msgstr "OAuth2/OpenID Anbietern"
-#: authentik/providers/oauth2/models.py:300
+#: authentik/providers/oauth2/models.py:297
+#: authentik/providers/oauth2/models.py:429
msgid "Scopes"
msgstr "Umfang"
-#: authentik/providers/oauth2/models.py:319
+#: authentik/providers/oauth2/models.py:316
msgid "Code"
msgstr "Code"
-#: authentik/providers/oauth2/models.py:320
+#: authentik/providers/oauth2/models.py:317
msgid "Nonce"
msgstr "Nonce"
-#: authentik/providers/oauth2/models.py:321
-msgid "Is Authentication?"
-msgstr "Ist Authentifizierung?"
-
-#: authentik/providers/oauth2/models.py:322
+#: authentik/providers/oauth2/models.py:318
msgid "Code Challenge"
msgstr "Code-Herausforderung"
-#: authentik/providers/oauth2/models.py:324
+#: authentik/providers/oauth2/models.py:320
msgid "Code Challenge Method"
msgstr "Code-Herausforderung Methode"
-#: authentik/providers/oauth2/models.py:338
+#: authentik/providers/oauth2/models.py:340
msgid "Authorization Code"
msgstr "Autorisierungscode"
-#: authentik/providers/oauth2/models.py:339
+#: authentik/providers/oauth2/models.py:341
msgid "Authorization Codes"
msgstr "Autorisierungs-Codes"
-#: authentik/providers/oauth2/models.py:382
-msgid "Access Token"
-msgstr "Zugangs-Token"
-
#: authentik/providers/oauth2/models.py:383
-msgid "Refresh Token"
-msgstr "Token aktualisieren"
+msgid "OAuth2 Access Token"
+msgstr "OAuth2-Zugangs-Token"
#: authentik/providers/oauth2/models.py:384
+msgid "OAuth2 Access Tokens"
+msgstr "OAuth2-Zugangs-Token"
+
+#: authentik/providers/oauth2/models.py:394
msgid "ID Token"
msgstr "ID-Token"
-#: authentik/providers/oauth2/models.py:387
-msgid "OAuth2 Token"
-msgstr "OAuth2-Token"
+#: authentik/providers/oauth2/models.py:413
+msgid "OAuth2 Refresh Token"
+msgstr "OAuth2-Aktualisierungs-Token"
-#: authentik/providers/oauth2/models.py:388
-msgid "OAuth2 Tokens"
-msgstr "OAuth2-Tokens"
+#: authentik/providers/oauth2/models.py:414
+msgid "OAuth2 Refresh Tokens"
+msgstr "OAuth2-Aktualisierungs-Token"
-#: authentik/providers/oauth2/views/authorize.py:458
-#: authentik/providers/saml/views/sso.py:69
+#: authentik/providers/oauth2/models.py:441
+msgid "Device Token"
+msgstr "Geräte-Token"
+
+#: authentik/providers/oauth2/models.py:442
+msgid "Device Tokens"
+msgstr "Geräte-Token"
+
+#: authentik/providers/oauth2/views/authorize.py:448
+#: authentik/providers/saml/views/flows.py:87
#, python-format
-msgid "You're about to sign into %(application)s."
-msgstr "Sie sind dabei, sich bei %(application)s anzumelden."
+msgid "Redirecting to %(app)s..."
+msgstr "Umleitung zu %(app)s..."
-#: authentik/providers/proxy/models.py:52
+#: authentik/providers/oauth2/views/device_init.py:151
+msgid "Invalid code"
+msgstr "Ungültiger Code"
+
+#: authentik/providers/oauth2/views/userinfo.py:55
+#: authentik/providers/oauth2/views/userinfo.py:56
+msgid "GitHub Compatibility: Access your User Information"
+msgstr "GitHub-Kompatibilität: Zugriff auf Benutzer"
+
+#: authentik/providers/oauth2/views/userinfo.py:57
+msgid "GitHub Compatibility: Access you Email addresses"
+msgstr "GitHub-Kompatibilität: Zugriff auf E-Mail"
+
+#: authentik/providers/oauth2/views/userinfo.py:58
+msgid "GitHub Compatibility: Access your Groups"
+msgstr "GitHub-Kompatibilität: Zugriff auf Gruppen"
+
+#: authentik/providers/oauth2/views/userinfo.py:59
+msgid "authentik API Access on behalf of your user"
+msgstr "Authentik API-Zugriff im Namen Ihres Benutzers"
+
+#: authentik/providers/proxy/api.py:52
+msgid "User and password attributes must be set when basic auth is enabled."
+msgstr ""
+"Für Basisauthentifizierung müssen Benutzer- und Passwort-Attribute gesetzt "
+"sein."
+
+#: authentik/providers/proxy/api.py:63
+msgid "Internal host cannot be empty when forward auth is disabled."
+msgstr ""
+"Interner Host muss angegeben werden, wenn Forward Auth deaktiviert ist."
+
+#: authentik/providers/proxy/models.py:54
msgid "Validate SSL Certificates of upstream servers"
msgstr "SSL-Zertifikate von Upstream-Servern validieren"
-#: authentik/providers/proxy/models.py:53
+#: authentik/providers/proxy/models.py:55
msgid "Internal host SSL Validation"
msgstr "Interne Host-SSL-Validierung"
-#: authentik/providers/proxy/models.py:59
+#: authentik/providers/proxy/models.py:61
msgid ""
"Enable support for forwardAuth in traefik and nginx auth_request. Exclusive "
"with internal_host."
@@ -868,39 +1366,95 @@ msgstr ""
"Aktivieren Sie die Unterstützung für forwardAuth in traefik und nginx "
"auth_request. Ausschließlich mit internal_host."
-#: authentik/providers/proxy/models.py:77
-msgid "Set HTTP-Basic Authentication"
-msgstr "HTTP-Basisauthentifizierung einstellen"
+#: authentik/providers/proxy/models.py:70
+msgid ""
+"Regular expressions for which authentication is not required. Each new line "
+"is interpreted as a new Regular Expression."
+msgstr ""
+"Reguläre Ausdrücke, für die keine Authentifizierung erforderlich ist. Jede "
+"neue Zeile wird als ein neuer regulärer Ausdruck interpretiert."
-#: authentik/providers/proxy/models.py:79
+#: authentik/providers/proxy/models.py:78
+msgid ""
+"When enabled, this provider will intercept the authorization header and "
+"authenticate requests based on its value."
+msgstr ""
+"Wenn aktiviert, fängt dieser Anbieter den Authorization-Header ab und "
+"authentifiziert Anfragen basierend auf dessen Wert."
+
+#: authentik/providers/proxy/models.py:84
+msgid "Set HTTP-Basic Authentication"
+msgstr "HTTP-Basic Authentifizierung einstellen"
+
+#: authentik/providers/proxy/models.py:86
msgid ""
"Set a custom HTTP-Basic Authentication header based on values from "
"authentik."
msgstr ""
"Legen Sie einen benutzerdefinierten HTTP-Basic Authentication-Header fest, "
-"der auf den Werten von authentik basiert."
+"der auf den Werten von Authentik basiert."
-#: authentik/providers/proxy/models.py:84
+#: authentik/providers/proxy/models.py:91
msgid "HTTP-Basic Username Key"
msgstr "HTTP-Basic Benutzername Schlüssel"
-#: authentik/providers/proxy/models.py:94
+#: authentik/providers/proxy/models.py:93
+msgid ""
+"User/Group Attribute used for the user part of the HTTP-Basic Header. If not"
+" set, the user's Email address is used."
+msgstr ""
+"Benutzer-/Gruppenattribut, das für den Benutzerteil des HTTP-Basic-Headers "
+"verwendet wird. Wenn nicht festgelegt, wird die E-Mail-Adresse des Benutzers"
+" verwendet."
+
+#: authentik/providers/proxy/models.py:99
msgid "HTTP-Basic Password Key"
msgstr "HTTP-Basic Passwort Schlüssel"
-#: authentik/providers/proxy/models.py:149
+#: authentik/providers/proxy/models.py:100
+msgid ""
+"User/Group Attribute used for the password part of the HTTP-Basic Header."
+msgstr ""
+"Nutzer-/Gruppe-Attribut wird für den Passwort-Teil im HTTP-Basic Header "
+"verwendet."
+
+#: authentik/providers/proxy/models.py:154
msgid "Proxy Provider"
msgstr "Proxy Anbieter"
-#: authentik/providers/proxy/models.py:150
+#: authentik/providers/proxy/models.py:155
msgid "Proxy Providers"
msgstr "Proxy Anbietern"
-#: authentik/providers/saml/api.py:176
+#: authentik/providers/radius/models.py:18
+msgid "Shared secret between clients and server to hash packets."
+msgstr ""
+"Gemeinsames Geheimnis zwischen Clients und Server zum Hashing von Paketen."
+
+#: authentik/providers/radius/models.py:24
+msgid ""
+"List of CIDRs (comma-separated) that clients can connect from. A more "
+"specific CIDR will match before a looser one. Clients connecting from a non-"
+"specified CIDR will be dropped."
+msgstr ""
+"Liste der CIDRs (durch Komma getrennt), von denen aus Clients eine "
+"Verbindung herstellen können. Eine spezifischere CIDR wird vor einer "
+"unspezifischeren abgeglichen. Clients, die sich von einer nicht "
+"spezifizierten CIDR aus verbinden, werden abgewiesen."
+
+#: authentik/providers/radius/models.py:49
+msgid "Radius Provider"
+msgstr "Radius-Anbieter"
+
+#: authentik/providers/radius/models.py:50
+msgid "Radius Providers"
+msgstr "Radius-Anbieter"
+
+#: authentik/providers/saml/api/providers.py:257
msgid "Invalid XML Syntax"
msgstr "Ungültige XML-Syntax"
-#: authentik/providers/saml/api.py:186
+#: authentik/providers/saml/api/providers.py:267
#, python-format
msgid "Failed to import Metadata: %(message)s"
msgstr "Der Import von Metadaten ist fehlgeschlagen: %(message)s"
@@ -909,84 +1463,204 @@ msgstr "Der Import von Metadaten ist fehlgeschlagen: %(message)s"
msgid "ACS URL"
msgstr "ACS URL"
-#: authentik/providers/saml/models.py:49
+#: authentik/providers/saml/models.py:43
+msgid ""
+"Value of the audience restriction field of the assertion. When left empty, "
+"no audience restriction will be added."
+msgstr ""
+"Wert des Feldes für die Zielgruppenbeschränkung in der Prüfung. Bleibt das "
+"Feld leer, wird keine Zielgruppenbeschränkung hinzugefügt."
+
+#: authentik/providers/saml/models.py:47
msgid "Also known as EntityID"
msgstr "Auch bekannt als EntityID"
-#: authentik/providers/saml/models.py:53
+#: authentik/providers/saml/models.py:51
msgid "Service Provider Binding"
msgstr "Service Anbieter Bindung"
-#: authentik/providers/saml/models.py:65
+#: authentik/providers/saml/models.py:53
+msgid ""
+"This determines how authentik sends the response back to the Service "
+"Provider."
+msgstr ""
+"Damit wird festgelegt, wie Authentik die Antwort an den Dienstanbieter "
+"zurücksendet."
+
+#: authentik/providers/saml/models.py:63
msgid "NameID Property Mapping"
msgstr "Name ID Eigenschaft"
-#: authentik/providers/saml/models.py:109 authentik/sources/saml/models.py:128
+#: authentik/providers/saml/models.py:65
+msgid ""
+"Configure how the NameID value will be created. When left empty, the "
+"NameIDPolicy of the incoming request will be considered"
+msgstr ""
+"Legen Sie fest, wie der NameID-Wert erstellt werden soll. Bleibt der Wert "
+"leer, wird die NameIDPolicy der eingehenden Anfrage berücksichtigt"
+
+#: authentik/providers/saml/models.py:74
+msgid ""
+"Assertion valid not before current time + this value (Format: "
+"hours=-1;minutes=-2;seconds=-3)."
+msgstr ""
+"Prüfung nicht gültig vor aktueller Zeit + diesem Wert (Format: "
+"hours=-1;minutes=-2;seconds=-3)."
+
+#: authentik/providers/saml/models.py:82
+msgid ""
+"Assertion not valid on or after current time + this value (Format: "
+"hours=1;minutes=2;seconds=3)."
+msgstr ""
+"SAML Assertion nicht gültig am oder nach der aktuellen Uhrzeit + diesem Wert"
+" (Format: Stunden=1;Minuten=2;Sekunden=3)."
+
+#: authentik/providers/saml/models.py:91
+msgid ""
+"Session not valid on or after current time + this value (Format: "
+"hours=1;minutes=2;seconds=3)."
+msgstr ""
+"Session am oder nach der aktuellen Uhrzeit + diesem Wert nicht gültig "
+"(Format: Stunden=1;Minuten=2;Sekunden=3)."
+
+#: authentik/providers/saml/models.py:99 authentik/sources/saml/models.py:150
msgid "SHA1"
msgstr "SHA1"
-#: authentik/providers/saml/models.py:110 authentik/sources/saml/models.py:129
+#: authentik/providers/saml/models.py:100 authentik/sources/saml/models.py:151
msgid "SHA256"
msgstr "SHA256"
-#: authentik/providers/saml/models.py:111 authentik/sources/saml/models.py:130
+#: authentik/providers/saml/models.py:101 authentik/sources/saml/models.py:152
msgid "SHA384"
msgstr "SHA384"
-#: authentik/providers/saml/models.py:112 authentik/sources/saml/models.py:131
+#: authentik/providers/saml/models.py:102 authentik/sources/saml/models.py:153
msgid "SHA512"
msgstr "SHA512"
-#: authentik/providers/saml/models.py:119 authentik/sources/saml/models.py:138
+#: authentik/providers/saml/models.py:109 authentik/sources/saml/models.py:160
msgid "RSA-SHA1"
msgstr "RSA-SHA1"
-#: authentik/providers/saml/models.py:120 authentik/sources/saml/models.py:139
+#: authentik/providers/saml/models.py:110 authentik/sources/saml/models.py:161
msgid "RSA-SHA256"
msgstr "RSA-SHA256"
-#: authentik/providers/saml/models.py:121 authentik/sources/saml/models.py:140
+#: authentik/providers/saml/models.py:111 authentik/sources/saml/models.py:162
msgid "RSA-SHA384"
msgstr "RSA-SHA384"
-#: authentik/providers/saml/models.py:122 authentik/sources/saml/models.py:141
+#: authentik/providers/saml/models.py:112 authentik/sources/saml/models.py:163
msgid "RSA-SHA512"
msgstr "RSA-SHA512"
-#: authentik/providers/saml/models.py:123 authentik/sources/saml/models.py:142
+#: authentik/providers/saml/models.py:113 authentik/sources/saml/models.py:164
msgid "DSA-SHA1"
msgstr "DSA-SHA1"
-#: authentik/providers/saml/models.py:140
+#: authentik/providers/saml/models.py:124 authentik/sources/saml/models.py:130
+msgid ""
+"When selected, incoming assertion's Signatures will be validated against "
+"this certificate. To allow unsigned Requests, leave on default."
+msgstr ""
+"Wenn diese Option ausgewählt ist, werden die Signaturen eingehender "
+"Behauptungen anhand dieses Zertifikats validiert. Um nicht signierte "
+"Anfragen zuzulassen, belassen Sie die Standardeinstellung."
+
+#: authentik/providers/saml/models.py:128 authentik/sources/saml/models.py:134
msgid "Verification Certificate"
msgstr "Zertifikat zur Überprüfung"
-#: authentik/providers/saml/models.py:148
+#: authentik/providers/saml/models.py:136
msgid "Keypair used to sign outgoing Responses going to the Service Provider."
msgstr ""
"Schlüsselpaar, das zum Signieren ausgehender Antworten an den Dienstanbieter"
" verwendet wird."
-#: authentik/providers/saml/models.py:150 authentik/sources/saml/models.py:118
+#: authentik/providers/saml/models.py:138 authentik/sources/saml/models.py:144
msgid "Signing Keypair"
msgstr "Schlüsselpaar für Signierung"
-#: authentik/providers/saml/models.py:180
+#: authentik/providers/saml/models.py:167
msgid "SAML Provider"
msgstr "SAML Anbieter"
-#: authentik/providers/saml/models.py:181
+#: authentik/providers/saml/models.py:168
msgid "SAML Providers"
msgstr "SAML Anbietern"
-#: authentik/providers/saml/models.py:206
+#: authentik/providers/saml/models.py:192
msgid "SAML Property Mapping"
msgstr "SAML Eigenschaft"
-#: authentik/providers/saml/models.py:207
+#: authentik/providers/saml/models.py:193
msgid "SAML Property Mappings"
msgstr "SAML Eigenschaften"
+#: authentik/providers/scim/models.py:20
+msgid "Base URL to SCIM requests, usually ends in /v2"
+msgstr "Basis-URL für SCIM-Anfragen, endet normalerweise auf /v2"
+
+#: authentik/providers/scim/models.py:21
+msgid "Authentication token"
+msgstr "Authentifizierungstoken"
+
+#: authentik/providers/scim/models.py:27 authentik/sources/ldap/models.py:94
+msgid "Property mappings used for group creation/updating."
+msgstr ""
+"Eigenschaft, die für die Erstellung/Aktualisierung von Gruppen verwendet "
+"werden."
+
+#: authentik/providers/scim/models.py:60
+msgid "SCIM Provider"
+msgstr "SCIM-Anbieter"
+
+#: authentik/providers/scim/models.py:61
+msgid "SCIM Providers"
+msgstr "SCIM-Anbieter"
+
+#: authentik/providers/scim/models.py:81
+msgid "SCIM Mapping"
+msgstr "SCIM-Zuweisung"
+
+#: authentik/providers/scim/models.py:82
+msgid "SCIM Mappings"
+msgstr "SCIM-Zuweisungen"
+
+#: authentik/providers/scim/tasks.py:52
+msgid "Starting full SCIM sync"
+msgstr "Vollständige SCIM-Synchronisation starten"
+
+#: authentik/providers/scim/tasks.py:59
+#, python-format
+msgid "Syncing page %(page)d of users"
+msgstr "Seite %(page)d der Benutzer synchronisieren"
+
+#: authentik/providers/scim/tasks.py:63
+#, python-format
+msgid "Syncing page %(page)d of groups"
+msgstr "Seite %(page)d der Gruppen synchronisieren"
+
+#: authentik/providers/scim/tasks.py:92
+#, python-format
+msgid "Failed to sync user %(user_name)s due to remote error: %(error)s"
+msgstr ""
+"Die Synchronisierung des Benutzers %(user_name)s ist aufgrund eines Remote-"
+"Fehlers fehlgeschlagen: %(error)s"
+
+#: authentik/providers/scim/tasks.py:103 authentik/providers/scim/tasks.py:144
+#, python-format
+msgid "Stopping sync due to error: %(error)s"
+msgstr "Synchronisierung wird aufgrund eines Fehlers gestoppt: %(error)s"
+
+#: authentik/providers/scim/tasks.py:133
+#, python-format
+msgid "Failed to sync group %(group_name)s due to remote error: %(error)s"
+msgstr ""
+"Die Synchronisierung der Gruppe %(group_name)s ist aufgrund eines Remote-"
+"Fehlers fehlgeschlagen: %(error)s"
+
#: authentik/recovery/management/commands/create_admin_group.py:11
msgid "Create admin group if the default group gets deleted."
msgstr "Erstelle Admingruppe, wenn Standardgruppe gelöscht wird"
@@ -1001,11 +1675,11 @@ msgstr ""
msgid "Used recovery-link to authenticate."
msgstr "Verwendeter Recovery-Link zur Authentifizierung."
-#: authentik/sources/ldap/models.py:32
+#: authentik/sources/ldap/models.py:37
msgid "Server URI"
msgstr "Server URI"
-#: authentik/sources/ldap/models.py:40
+#: authentik/sources/ldap/models.py:46
msgid ""
"Optionally verify the LDAP Server's Certificate against the CA Chain in this"
" keypair."
@@ -1013,77 +1687,93 @@ msgstr ""
"Optionales Abgleichen des Zertifikats des LDAP-Servers mit der CA-Kette in "
"diesem Schlüsselpaar."
-#: authentik/sources/ldap/models.py:45
+#: authentik/sources/ldap/models.py:55
+msgid ""
+"Client certificate to authenticate against the LDAP Server's Certificate."
+msgstr ""
+"Client-Zertifikat zur Authentifizierung des Zertifikats des LDAP-Servers."
+
+#: authentik/sources/ldap/models.py:58
msgid "Bind CN"
msgstr "Bind CN"
-#: authentik/sources/ldap/models.py:47
+#: authentik/sources/ldap/models.py:60
msgid "Enable Start TLS"
msgstr "Aktiviere StartTLS"
-#: authentik/sources/ldap/models.py:49
+#: authentik/sources/ldap/models.py:61
+msgid "Use Server URI for SNI verification"
+msgstr "Server-URI für SNI-Überprüfung verwenden"
+
+#: authentik/sources/ldap/models.py:63
msgid "Base DN"
msgstr "Base DN"
-#: authentik/sources/ldap/models.py:51
+#: authentik/sources/ldap/models.py:65
msgid "Prepended to Base DN for User-queries."
msgstr "Wird dem Basis-DN für Benutzerabfragen vorangestellt."
-#: authentik/sources/ldap/models.py:52
+#: authentik/sources/ldap/models.py:66
msgid "Addition User DN"
msgstr "Zusatz Benutzer-DN"
-#: authentik/sources/ldap/models.py:56
+#: authentik/sources/ldap/models.py:70
msgid "Prepended to Base DN for Group-queries."
msgstr "Wird dem Basis-DN für Gruppenabfragen vorangestellt."
-#: authentik/sources/ldap/models.py:57
+#: authentik/sources/ldap/models.py:71
msgid "Addition Group DN"
msgstr "Zusatz Gruppen-DN"
-#: authentik/sources/ldap/models.py:63
+#: authentik/sources/ldap/models.py:77
msgid "Consider Objects matching this filter to be Users."
msgstr "Betrachten Sie Objekte, die diesem Filter entsprechen, als Benutzer."
-#: authentik/sources/ldap/models.py:66
+#: authentik/sources/ldap/models.py:80
msgid "Field which contains members of a group."
msgstr "Feld, das die Mitglieder einer Gruppe enthält."
-#: authentik/sources/ldap/models.py:70
+#: authentik/sources/ldap/models.py:84
msgid "Consider Objects matching this filter to be Groups."
msgstr "Betrachten Sie Objekte, die diesem Filter entsprechen, als Gruppen."
-#: authentik/sources/ldap/models.py:73
+#: authentik/sources/ldap/models.py:87
msgid "Field which contains a unique Identifier."
msgstr "Feld das eine einzigartige Kennung beinhaltet"
-#: authentik/sources/ldap/models.py:80
-msgid "Property mappings used for group creation/updating."
+#: authentik/sources/ldap/models.py:101
+msgid ""
+"When a user changes their password, sync it back to LDAP. This can only be "
+"enabled on a single LDAP source."
msgstr ""
-"Eigenschaft, die für die Erstellung/Aktualisierung von Gruppen verwendet "
-"werden."
+"Wenn ein Benutzer sein Passwort ändert, wird es zurück zum LDAP "
+"synchronisiert. Dies kann nur für eine einzige LDAP-Quelle aktiviert werden."
-#: authentik/sources/ldap/models.py:145
+#: authentik/sources/ldap/models.py:190
msgid "LDAP Source"
msgstr "LDAP Quelle"
-#: authentik/sources/ldap/models.py:146
+#: authentik/sources/ldap/models.py:191
msgid "LDAP Sources"
msgstr "LDAP Quellen"
-#: authentik/sources/ldap/models.py:169
+#: authentik/sources/ldap/models.py:213
msgid "LDAP Property Mapping"
msgstr "LDAP Eigenschaft"
-#: authentik/sources/ldap/models.py:170
+#: authentik/sources/ldap/models.py:214
msgid "LDAP Property Mappings"
msgstr "LDAP Eigenschaften"
-#: authentik/sources/ldap/signals.py:58
+#: authentik/sources/ldap/signals.py:50
msgid "Password does not match Active Directory Complexity."
msgstr ""
"Das Passwort stimmt nicht mit der Active Directory-Komplexität überein."
+#: authentik/sources/oauth/clients/oauth2.py:68
+msgid "No token received."
+msgstr "Kein Token empfangen."
+
#: authentik/sources/oauth/models.py:24
msgid "Request Token URL"
msgstr "Token-URL anfordern"
@@ -1122,170 +1812,215 @@ msgid "URL used by authentik to get user information."
msgstr ""
"URL, die von Authentik verwendet wird, um Benutzerinformationen zu erhalten."
-#: authentik/sources/oauth/models.py:97
+#: authentik/sources/oauth/models.py:48
+msgid "Additional Scopes"
+msgstr "zusätzliche Scopes"
+
+#: authentik/sources/oauth/models.py:108
msgid "OAuth Source"
msgstr "Outh Quelle"
-#: authentik/sources/oauth/models.py:98
+#: authentik/sources/oauth/models.py:109
msgid "OAuth Sources"
msgstr "Outh Quellen"
-#: authentik/sources/oauth/models.py:107
+#: authentik/sources/oauth/models.py:117
msgid "GitHub OAuth Source"
msgstr "GitHub OAuth Quelle"
-#: authentik/sources/oauth/models.py:108
+#: authentik/sources/oauth/models.py:118
msgid "GitHub OAuth Sources"
msgstr "GitHub OAuth Quellen"
-#: authentik/sources/oauth/models.py:117
+#: authentik/sources/oauth/models.py:126
+msgid "Twitch OAuth Source"
+msgstr "Twitch OAuth Quelle"
+
+#: authentik/sources/oauth/models.py:127
+msgid "Twitch OAuth Sources"
+msgstr "Twitch OAuth Quellen"
+
+#: authentik/sources/oauth/models.py:135
+msgid "Mailcow OAuth Source"
+msgstr "Mailcow OAuth Quelle"
+
+#: authentik/sources/oauth/models.py:136
+msgid "Mailcow OAuth Sources"
+msgstr "Mailcow OAuth Quellen"
+
+#: authentik/sources/oauth/models.py:144
msgid "Twitter OAuth Source"
msgstr "Twitter OAuth Quelle"
-#: authentik/sources/oauth/models.py:118
+#: authentik/sources/oauth/models.py:145
msgid "Twitter OAuth Sources"
msgstr "Twitter OAuth Quellen"
-#: authentik/sources/oauth/models.py:127
+#: authentik/sources/oauth/models.py:153
msgid "Facebook OAuth Source"
msgstr "Facebook OAuth Quelle"
-#: authentik/sources/oauth/models.py:128
+#: authentik/sources/oauth/models.py:154
msgid "Facebook OAuth Sources"
msgstr "Facebook OAuth Quellen"
-#: authentik/sources/oauth/models.py:137
+#: authentik/sources/oauth/models.py:162
msgid "Discord OAuth Source"
msgstr "Discord OAuth Quelle"
-#: authentik/sources/oauth/models.py:138
+#: authentik/sources/oauth/models.py:163
msgid "Discord OAuth Sources"
msgstr "Discord OAuth Quellen"
-#: authentik/sources/oauth/models.py:147
+#: authentik/sources/oauth/models.py:171
+msgid "Patreon OAuth Source"
+msgstr "Patreon OAuth Quelle"
+
+#: authentik/sources/oauth/models.py:172
+msgid "Patreon OAuth Sources"
+msgstr "Patreon OAuth-Quellen"
+
+#: authentik/sources/oauth/models.py:180
msgid "Google OAuth Source"
msgstr "Google OAuth Quelle"
-#: authentik/sources/oauth/models.py:148
+#: authentik/sources/oauth/models.py:181
msgid "Google OAuth Sources"
msgstr "Google OAuth Quellen"
-#: authentik/sources/oauth/models.py:157
+#: authentik/sources/oauth/models.py:189
msgid "Azure AD OAuth Source"
msgstr "Azure AD OAuth Quelle"
-#: authentik/sources/oauth/models.py:158
+#: authentik/sources/oauth/models.py:190
msgid "Azure AD OAuth Sources"
msgstr "Azure AD OAuth Quellen"
-#: authentik/sources/oauth/models.py:167
+#: authentik/sources/oauth/models.py:198
msgid "OpenID OAuth Source"
msgstr "OpenID OAuth Quelle"
-#: authentik/sources/oauth/models.py:168
+#: authentik/sources/oauth/models.py:199
msgid "OpenID OAuth Sources"
msgstr "OpenID OAuth Quellen"
-#: authentik/sources/oauth/models.py:177
+#: authentik/sources/oauth/models.py:207
msgid "Apple OAuth Source"
msgstr "Apple OAuth Quelle"
-#: authentik/sources/oauth/models.py:178
+#: authentik/sources/oauth/models.py:208
msgid "Apple OAuth Sources"
msgstr "Apple OAuth Quellen"
-#: authentik/sources/oauth/models.py:187
+#: authentik/sources/oauth/models.py:216
msgid "Okta OAuth Source"
msgstr "Okta OAuth Quelle"
-#: authentik/sources/oauth/models.py:188
+#: authentik/sources/oauth/models.py:217
msgid "Okta OAuth Sources"
msgstr "Okta OAuth Quellen"
-#: authentik/sources/oauth/models.py:203
+#: authentik/sources/oauth/models.py:225
+msgid "Reddit OAuth Source"
+msgstr "Reddit OAuth Quelle"
+
+#: authentik/sources/oauth/models.py:226
+msgid "Reddit OAuth Sources"
+msgstr "Reddit OAuth-Quellen"
+
+#: authentik/sources/oauth/models.py:248
msgid "User OAuth Source Connection"
msgstr "Benutzer OAuth-Quellverbindung"
-#: authentik/sources/oauth/models.py:204
+#: authentik/sources/oauth/models.py:249
msgid "User OAuth Source Connections"
msgstr "Benutzer OAuth-Quellverbindungen"
-#: authentik/sources/oauth/views/callback.py:98
-msgid "Authentication Failed."
-msgstr "Authentifizierung fehlgeschlagen"
+#: authentik/sources/oauth/views/callback.py:100
+#, python-format
+msgid "Authentication failed: %(reason)s"
+msgstr "Authentifizierung fehlgeschlagen: %(reason)s"
#: authentik/sources/plex/models.py:37
msgid "Client identifier used to talk to Plex."
msgstr "Client-Kennung, die für die Kommunikation mit Plex verwendet wird."
-#: authentik/sources/plex/models.py:52
+#: authentik/sources/plex/models.py:44
+msgid ""
+"Which servers a user has to be a member of to be granted access. Empty list "
+"allows every server."
+msgstr ""
+"Bei welchen Servern ein Benutzer Mitglied sein muss, um Zugang zu erhalten. "
+"Eine leere Liste erlaubt jeden Server."
+
+#: authentik/sources/plex/models.py:50
msgid "Allow friends to authenticate, even if you don't share a server."
msgstr ""
"Erlauben Sie Freunden, sich zu authentifizieren, auch wenn Sie keinen "
"gemeinsamen Server haben."
-#: authentik/sources/plex/models.py:54
+#: authentik/sources/plex/models.py:52
msgid "Plex token used to check friends"
msgstr "Plex-Token zur Überprüfung von Freunden"
-#: authentik/sources/plex/models.py:92
+#: authentik/sources/plex/models.py:95
msgid "Plex Source"
msgstr "Plex Quelle"
-#: authentik/sources/plex/models.py:93
+#: authentik/sources/plex/models.py:96
msgid "Plex Sources"
msgstr "Plex Quellen"
-#: authentik/sources/plex/models.py:104
+#: authentik/sources/plex/models.py:112
msgid "User Plex Source Connection"
msgstr "Benutzer Plex-Quellverbindung"
-#: authentik/sources/plex/models.py:105
+#: authentik/sources/plex/models.py:113
msgid "User Plex Source Connections"
msgstr "Benutzer Plex-Quellverbindungen"
-#: authentik/sources/saml/models.py:36
+#: authentik/sources/saml/models.py:40
msgid "Redirect Binding"
msgstr "Umleitungs Bindung"
-#: authentik/sources/saml/models.py:37
+#: authentik/sources/saml/models.py:41
msgid "POST Binding"
msgstr "POST Bindung"
-#: authentik/sources/saml/models.py:38
+#: authentik/sources/saml/models.py:42
msgid "POST Binding with auto-confirmation"
msgstr "POST Bindung mit automatischer Bestätigung"
-#: authentik/sources/saml/models.py:57
+#: authentik/sources/saml/models.py:70
msgid "Flow used before authentication."
msgstr "Flow der vor Authorisierung verwendet wird"
-#: authentik/sources/saml/models.py:64
+#: authentik/sources/saml/models.py:77
msgid "Issuer"
msgstr "Aussteller"
-#: authentik/sources/saml/models.py:65
+#: authentik/sources/saml/models.py:78
msgid "Also known as Entity ID. Defaults the Metadata URL."
msgstr ""
"Auch bekannt als Entity ID. Standardmäßig wird die Metadaten-URL verwendet."
-#: authentik/sources/saml/models.py:69
+#: authentik/sources/saml/models.py:82
msgid "SSO URL"
msgstr "SSO URL"
-#: authentik/sources/saml/models.py:70
+#: authentik/sources/saml/models.py:83
msgid "URL that the initial Login request is sent to."
msgstr "URL, an die die erste Login-Anfrage gesendet wird."
-#: authentik/sources/saml/models.py:76
+#: authentik/sources/saml/models.py:89
msgid "SLO URL"
msgstr "SLO URL"
-#: authentik/sources/saml/models.py:77
+#: authentik/sources/saml/models.py:90
msgid "Optional URL if your IDP supports Single-Logout."
msgstr "Optionale URL, wenn Ihr IDP Single-Logout unterstützt."
-#: authentik/sources/saml/models.py:83
+#: authentik/sources/saml/models.py:96
msgid ""
"Allows authentication flows initiated by the IdP. This can be a security "
"risk, as no validation of the request ID is done."
@@ -1293,7 +2028,7 @@ msgstr ""
"Ermöglicht vom IdP initiierte Authentifizierungsströmen. Dies kann ein "
"Sicherheitsrisiko darstellen, da keine Validierung der Anfrage-ID erfolgt."
-#: authentik/sources/saml/models.py:91
+#: authentik/sources/saml/models.py:104
msgid ""
"NameID Policy sent to the IdP. Can be unset, in which case no Policy is "
"sent."
@@ -1301,230 +2036,325 @@ msgstr ""
"NameID Richtlinie, die an den IdP gesendet wird. Kann nicht gesetzt werden; "
"in diesem Fall wird keine Richtlinie gesendet."
-#: authentik/sources/saml/models.py:102
+#: authentik/sources/saml/models.py:115
msgid "Delete temporary users after"
msgstr "Temporäre Benutzer danach löschen"
-#: authentik/sources/saml/models.py:120
+#: authentik/sources/saml/models.py:118
msgid ""
-"Keypair which is used to sign outgoing requests. Leave empty to disable "
-"signing."
+"Time offset when temporary users should be deleted. This only applies if "
+"your IDP uses the NameID Format 'transient', and the user doesn't log out "
+"manually. (Format: hours=1;minutes=2;seconds=3)."
msgstr ""
-"Schlüsselpaar, das zum Signieren ausgehender Anfragen verwendet wird. Leer "
-"lassen, um das Signieren zu deaktivieren."
+"Zeitversatz, wann temporäre Benutzer gelöscht werden sollen. Dies gilt nur, "
+"wenn Ihr IDP das NameID-Format „transient“ verwendet und der Benutzer sich "
+"nicht manuell abmeldet. (Format: Stunden=1;Minuten=2;Sekunden=3)."
-#: authentik/sources/saml/models.py:188
+#: authentik/sources/saml/models.py:142
+msgid ""
+"Keypair used to sign outgoing Responses going to the Identity Provider."
+msgstr ""
+"Schlüsselpaar, das zum Signieren ausgehender Antworten an den "
+"Identitätsanbieter verwendet wird."
+
+#: authentik/sources/saml/models.py:226
msgid "SAML Source"
msgstr "SAML Quelle"
-#: authentik/sources/saml/models.py:189
+#: authentik/sources/saml/models.py:227
msgid "SAML Sources"
msgstr "SAML Quellen"
-#: authentik/stages/authenticator_duo/models.py:64
+#: authentik/sources/saml/models.py:242
+msgid "User SAML Source Connection"
+msgstr "Benutzer SAML-Quellverbindung"
+
+#: authentik/sources/saml/models.py:243
+msgid "User SAML Source Connections"
+msgstr "Benutzer SAML-Quellverbindungen"
+
+#: authentik/stages/authenticator_duo/models.py:79
msgid "Duo Authenticator Setup Stage"
msgstr "Duo Authentikator Einrichtungsstufe"
-#: authentik/stages/authenticator_duo/models.py:65
+#: authentik/stages/authenticator_duo/models.py:80
msgid "Duo Authenticator Setup Stages"
msgstr "Duo Authentikator Einrichtungsstufen"
-#: authentik/stages/authenticator_duo/models.py:82
+#: authentik/stages/authenticator_duo/models.py:103
msgid "Duo Device"
msgstr "Duo Gerät"
-#: authentik/stages/authenticator_duo/models.py:83
+#: authentik/stages/authenticator_duo/models.py:104
msgid "Duo Devices"
msgstr "Duo Geräte"
-#: authentik/stages/authenticator_sms/models.py:157
+#: authentik/stages/authenticator_sms/models.py:57
+msgid ""
+"When enabled, the Phone number is only used during enrollment to verify the "
+"users authenticity. Only a hash of the phone number is saved to ensure it is"
+" not reused in the future."
+msgstr ""
+"Wenn diese Option aktiviert ist, wird die Telefonnummer nur während der "
+"Registrierung verwendet, um die Authentizität des Benutzers zu überprüfen. "
+"Es wird nur ein Hash der Telefonnummer gespeichert, um sicherzustellen, dass"
+" sie in Zukunft nicht wiederverwendet wird."
+
+#: authentik/stages/authenticator_sms/models.py:68
+msgid "Optionally modify the payload being sent to custom providers."
+msgstr ""
+"Optionale Modifikation der Payload, die zu benutzerdefinierten Anbietern "
+"gesandt wird."
+
+#: authentik/stages/authenticator_sms/models.py:81
+#, python-format
+msgid "Use this code to authenticate in authentik: %(token)s"
+msgstr "Verwenden Sie diesen Code zur Anmeldung in Authentik: %(token)s"
+
+#: authentik/stages/authenticator_sms/models.py:180
msgid "SMS Authenticator Setup Stage"
msgstr "SMS Authentikator Einrichtungsstufe"
-#: authentik/stages/authenticator_sms/models.py:158
+#: authentik/stages/authenticator_sms/models.py:181
msgid "SMS Authenticator Setup Stages"
msgstr "SMS Authentikator Einrichtungsstufen"
-#: authentik/stages/authenticator_sms/models.py:175
+#: authentik/stages/authenticator_sms/models.py:226
msgid "SMS Device"
msgstr "SMS Gerät"
-#: authentik/stages/authenticator_sms/models.py:176
+#: authentik/stages/authenticator_sms/models.py:227
msgid "SMS Devices"
msgstr "SMS Geräte"
-#: authentik/stages/authenticator_sms/stage.py:54
-#: authentik/stages/authenticator_totp/stage.py:45
+#: authentik/stages/authenticator_sms/stage.py:55
+#: authentik/stages/authenticator_totp/stage.py:41
+#: authentik/stages/authenticator_totp/stage.py:44
msgid "Code does not match"
msgstr "Code stimmt nicht überein"
-#: authentik/stages/authenticator_static/models.py:47
+#: authentik/stages/authenticator_sms/stage.py:71
+msgid "Invalid phone number"
+msgstr "Ungültige Telefonnummer"
+
+#: authentik/stages/authenticator_static/models.py:52
msgid "Static Authenticator Stage"
msgstr "Statischer Authentikator Einrichtungsstufe"
-#: authentik/stages/authenticator_static/models.py:48
+#: authentik/stages/authenticator_static/models.py:53
msgid "Static Authenticator Stages"
msgstr "Statischer Authentikator Einrichtungsstufen"
-#: authentik/stages/authenticator_totp/models.py:16
+#: authentik/stages/authenticator_static/models.py:98
+msgid "Static device"
+msgstr "Statisches Gerät"
+
+#: authentik/stages/authenticator_static/models.py:99
+msgid "Static devices"
+msgstr "Statische Geräte"
+
+#: authentik/stages/authenticator_totp/models.py:25
msgid "6 digits, widely compatible"
msgstr "6 Ziffern, weitestgehend kompatibel"
-#: authentik/stages/authenticator_totp/models.py:17
+#: authentik/stages/authenticator_totp/models.py:26
msgid "8 digits, not compatible with apps like Google Authenticator"
msgstr "8 Ziffern, nicht kompatibel mit Anwendungen wie Google Authenticator"
-#: authentik/stages/authenticator_totp/models.py:54
+#: authentik/stages/authenticator_totp/models.py:62
msgid "TOTP Authenticator Setup Stage"
msgstr "TOTP Authentikator Einrichtungsstufe"
-#: authentik/stages/authenticator_totp/models.py:55
+#: authentik/stages/authenticator_totp/models.py:63
msgid "TOTP Authenticator Setup Stages"
msgstr "TOTP Authentikator Einrichtungsstufen"
-#: authentik/stages/authenticator_validate/challenge.py:99
+#: authentik/stages/authenticator_totp/models.py:244
+msgid "TOTP device"
+msgstr "TOTP-Gerät"
+
+#: authentik/stages/authenticator_totp/models.py:245
+msgid "TOTP devices"
+msgstr "TOTP-Geräte"
+
+#: authentik/stages/authenticator_validate/challenge.py:131
msgid "Invalid Token"
msgstr "Ungültiger Token"
-#: authentik/stages/authenticator_validate/models.py:17
+#: authentik/stages/authenticator_validate/models.py:18
+msgid "Static"
+msgstr "Statisch"
+
+#: authentik/stages/authenticator_validate/models.py:19
msgid "TOTP"
msgstr "TOTP"
-#: authentik/stages/authenticator_validate/models.py:18
+#: authentik/stages/authenticator_validate/models.py:20
msgid "WebAuthn"
msgstr "WebAuth"
-#: authentik/stages/authenticator_validate/models.py:19
+#: authentik/stages/authenticator_validate/models.py:21
msgid "Duo"
msgstr "Duo"
-#: authentik/stages/authenticator_validate/models.py:20
+#: authentik/stages/authenticator_validate/models.py:22
msgid "SMS"
msgstr "SMS"
-#: authentik/stages/authenticator_validate/models.py:58
+#: authentik/stages/authenticator_validate/models.py:49
+msgid ""
+"Stages used to configure Authenticator when user doesn't have any compatible"
+" devices. After this configuration Stage passes, the user is not prompted "
+"again."
+msgstr ""
+"Stufen zur Konfiguration des Authenticators, wenn der Benutzer keine "
+"kompatiblen Geräte besitzt. Nachdem diese Konfigurationsstufe abgeschlossen "
+"ist, wird der Benutzer nicht mehr dazu aufgefordert."
+
+#: authentik/stages/authenticator_validate/models.py:56
msgid "Device classes which can be used to authenticate"
msgstr "Geräteklassen, die zur Authentifizierung verwendet werden können"
-#: authentik/stages/authenticator_validate/models.py:80
+#: authentik/stages/authenticator_validate/models.py:64
+msgid ""
+"If any of the user's device has been used within this threshold, this stage "
+"will be skipped"
+msgstr ""
+"Wenn eines der Geräte des Benutzers innerhalb dieses Schwellenwerts "
+"verwendet wurde, wird diese Phase übersprungen"
+
+#: authentik/stages/authenticator_validate/models.py:70
+msgid "Enforce user verification for WebAuthn devices."
+msgstr "Erzwinge Benutzerüberprüfung für WebAuthn-Geräte."
+
+#: authentik/stages/authenticator_validate/models.py:92
msgid "Authenticator Validation Stage"
msgstr "Authentifikator-Validierungsstufe"
-#: authentik/stages/authenticator_validate/models.py:81
+#: authentik/stages/authenticator_validate/models.py:93
msgid "Authenticator Validation Stages"
msgstr "Authentifikator-Validierungsstufen"
-#: authentik/stages/authenticator_webauthn/models.py:71
+#: authentik/stages/authenticator_webauthn/models.py:112
msgid "WebAuthn Authenticator Setup Stage"
msgstr "WebAuthn Authentifikator-Validierungsstufe"
-#: authentik/stages/authenticator_webauthn/models.py:72
+#: authentik/stages/authenticator_webauthn/models.py:113
msgid "WebAuthn Authenticator Setup Stages"
msgstr "WebAuthn Authentifikator-Validierungsstufen"
-#: authentik/stages/authenticator_webauthn/models.py:105
+#: authentik/stages/authenticator_webauthn/models.py:151
msgid "WebAuthn Device"
msgstr "WebAuthn Gerät"
-#: authentik/stages/authenticator_webauthn/models.py:106
+#: authentik/stages/authenticator_webauthn/models.py:152
msgid "WebAuthn Devices"
msgstr "WebAuthn Geräte"
+#: authentik/stages/captcha/models.py:14
+msgid "Public key, acquired your captcha Provider."
+msgstr "Öffentlicher Schlüssel, erworben von Ihrem Captcha-Provider."
+
#: authentik/stages/captcha/models.py:15
-msgid ""
-"Public key, acquired from https://www.google.com/recaptcha/intro/v3.html"
-msgstr ""
-"Öffentlicher Schlüssel, erhalten durch "
-"https://www.google.com/recaptcha/intro/v3.html"
+msgid "Private key, acquired your captcha Provider."
+msgstr "Privater Schlüssel, erworben von Ihrem Captcha-Provider."
-#: authentik/stages/captcha/models.py:18
-msgid ""
-"Private key, acquired from https://www.google.com/recaptcha/intro/v3.html"
-msgstr ""
-"Privater Schlüssel, erhalten durch "
-"https://www.google.com/recaptcha/intro/v3.html"
-
-#: authentik/stages/captcha/models.py:39
+#: authentik/stages/captcha/models.py:37
msgid "Captcha Stage"
msgstr "Captcha Stufe"
-#: authentik/stages/captcha/models.py:40
+#: authentik/stages/captcha/models.py:38
msgid "Captcha Stages"
msgstr "Captcha Stufen"
-#: authentik/stages/consent/models.py:52
+#: authentik/stages/consent/models.py:30
+msgid ""
+"Offset after which consent expires. (Format: hours=1;minutes=2;seconds=3)."
+msgstr ""
+"Die Einwilligung erlischt in. (Format: Stunden=1;Minuten=2;Sekunden=3)."
+
+#: authentik/stages/consent/models.py:50
msgid "Consent Stage"
msgstr "Zustimmungsstufe"
-#: authentik/stages/consent/models.py:53
+#: authentik/stages/consent/models.py:51
msgid "Consent Stages"
msgstr "Zustimmungsstufen"
-#: authentik/stages/consent/models.py:68
+#: authentik/stages/consent/models.py:72
msgid "User Consent"
msgstr "Zustimmung der Benutzer"
-#: authentik/stages/consent/models.py:69
+#: authentik/stages/consent/models.py:73
msgid "User Consents"
msgstr "Zustimmungen der Benutzer"
-#: authentik/stages/deny/models.py:31
+#: authentik/stages/deny/models.py:30
msgid "Deny Stage"
msgstr "Verweigerungsstufe"
-#: authentik/stages/deny/models.py:32
+#: authentik/stages/deny/models.py:31
msgid "Deny Stages"
msgstr "Verweigerungsstufen"
-#: authentik/stages/dummy/models.py:33
+#: authentik/stages/dummy/models.py:34
msgid "Dummy Stage"
msgstr "Dummy Stufe"
-#: authentik/stages/dummy/models.py:34
+#: authentik/stages/dummy/models.py:35
msgid "Dummy Stages"
msgstr "Dummy Stufen"
-#: authentik/stages/email/models.py:25
+#: authentik/stages/email/models.py:26
msgid "Password Reset"
msgstr "Passwort zurücksetzen"
-#: authentik/stages/email/models.py:29
+#: authentik/stages/email/models.py:30
msgid "Account Confirmation"
msgstr "Konto-Bestätigung"
-#: authentik/stages/email/models.py:75
+#: authentik/stages/email/models.py:59
+msgid ""
+"When enabled, global Email connection settings will be used and connection "
+"settings below will be ignored."
+msgstr ""
+"Wenn diese Option aktiviert ist, werden die globalen E-Mail "
+"Verbindungseinstellungen benutzt und die unten angegebenen Einstellungen "
+"ignoriert"
+
+#: authentik/stages/email/models.py:74
msgid "Activate users upon completion of stage."
msgstr "Aktivieren Sie die Benutzer nach Abschluss der Stufe."
-#: authentik/stages/email/models.py:79
+#: authentik/stages/email/models.py:78
msgid "Time in minutes the token sent is valid."
msgstr "Zeit in Minuten wie lange der verschickte Token gültig ist"
-#: authentik/stages/email/models.py:125
+#: authentik/stages/email/models.py:132
msgid "Email Stage"
msgstr "E-Mail Stufe"
-#: authentik/stages/email/models.py:126
+#: authentik/stages/email/models.py:133
msgid "Email Stages"
msgstr "E-Mail Stufen"
-#: authentik/stages/email/stage.py:106
+#: authentik/stages/email/stage.py:117
msgid "Successfully verified Email."
msgstr "Erfolgreich Mailadresse verifiziert."
-#: authentik/stages/email/stage.py:113 authentik/stages/email/stage.py:135
+#: authentik/stages/email/stage.py:124 authentik/stages/email/stage.py:146
msgid "No pending user."
msgstr "Keine ausstehende Benutzer."
-#: authentik/stages/email/stage.py:125
+#: authentik/stages/email/stage.py:136
msgid "Email sent."
msgstr "Email verschickt"
-#: authentik/stages/email/templates/email/account_confirmation.html:9
+#: authentik/stages/email/templates/email/account_confirmation.html:10
msgid "Welcome!"
msgstr "Willkommen!"
-#: authentik/stages/email/templates/email/account_confirmation.html:12
+#: authentik/stages/email/templates/email/account_confirmation.html:19
msgid ""
"We're excited to have you get started. First, you need to confirm your "
"account. Just press the button below."
@@ -1532,11 +2362,11 @@ msgstr ""
"Wir freuen uns darauf, dass Sie loslegen können. Zuerst müssen Sie Ihr Konto"
" bestätigen. Klicken Sie einfach auf die Schaltfläche unten."
-#: authentik/stages/email/templates/email/account_confirmation.html:21
+#: authentik/stages/email/templates/email/account_confirmation.html:24
msgid "Confirm Account"
msgstr "Account bestätigen"
-#: authentik/stages/email/templates/email/account_confirmation.html:30
+#: authentik/stages/email/templates/email/account_confirmation.html:36
#, python-format
msgid ""
"\n"
@@ -1546,50 +2376,52 @@ msgstr ""
"\n"
"Wenn das nicht funktioniert, kopieren Sie den folgenden Link und fügen ihn in Ihren Browser ein: %(url)s"
-#: authentik/stages/email/templates/email/account_confirmation.html:35
-msgid ""
-"If you have any questions, just reply to this email—we're always happy to "
-"help out."
-msgstr ""
-"Wenn Sie Fragen haben, antworten Sie einfach auf diese E-Mail - wir helfen "
-"Ihnen gerne weiter."
-
-#: authentik/stages/email/templates/email/generic.html:24
-msgid "Additional Information"
-msgstr "Zusätzliche Informationen"
-
-#: authentik/stages/email/templates/email/password_reset.html:9
+#: authentik/stages/email/templates/email/event_notification.html:46
#, python-format
msgid ""
"\n"
-" Hi %(username)s,\n"
-" "
+" This email was sent from the notification transport %(name)s.\n"
+" "
msgstr ""
"\n"
-"Hi %(username)s,"
+" Diese E-Mail wurde vom Benachrichtigungsdienst %(name)s gesendet.\n"
+" "
-#: authentik/stages/email/templates/email/password_reset.html:19
+#: authentik/stages/email/templates/email/password_reset.html:10
+#, python-format
msgid ""
"\n"
-" You recently requested to change your password for you authentik account. Use the button below to set a new password.\n"
-" "
+" Hi %(username)s,\n"
+" "
msgstr ""
"\n"
-"Sie haben vor kurzem eine Passwortänderung für ihr Authentik-Konto beantragt. Benutzen Sie die Schaltfläche unten, um ein neues Passwort festzulegen"
+" Hallo %(username)s,\n"
+" "
-#: authentik/stages/email/templates/email/password_reset.html:33
+#: authentik/stages/email/templates/email/password_reset.html:21
+msgid ""
+"\n"
+" You recently requested to change your password for your authentik account. Use the button below to set a new password.\n"
+" "
+msgstr ""
+"\n"
+" Sie haben kürzlich beantragt, Ihr Passwort für Ihr Authentik-Konto zu ändern. Benutzen Sie auf die Schaltfläche unten, um ein neues Passwort festzulegen.\n"
+" "
+
+#: authentik/stages/email/templates/email/password_reset.html:28
msgid "Reset Password"
msgstr "Passwort zurücksetzen"
-#: authentik/stages/email/templates/email/password_reset.html:45
+#: authentik/stages/email/templates/email/password_reset.html:39
#, python-format
msgid ""
"\n"
-" If you did not request a password change, please ignore this Email. The link above is valid for %(expires)s.\n"
-" "
+" If you did not request a password change, please ignore this Email. The link above is valid for %(expires)s.\n"
+" "
msgstr ""
"\n"
-"Wenn Sie keine Passwortänderung beantragt haben, ignorieren Sie bitte diese E-Mail. Der obige Link ist gültig für %(expires)s."
+" Wenn Sie keine Passwortänderung beantragt haben, ignorieren Sie bitte diese E-Mail. Der obige Link ist gültig für %(expires)s.\n"
+" "
#: authentik/stages/email/templates/email/setup.html:9
msgid "authentik Test-Email"
@@ -1604,77 +2436,118 @@ msgstr ""
"\n"
"Dies ist eine Test-E-Mail, um Sie darüber zu informieren, dass Sie Mailversand aus Authentik erfolgreich konfiguriert haben."
-#: authentik/stages/identification/models.py:42
-msgid ""
-"When set, shows a password field, instead of showing the password field as "
-"seaprate step."
+#: authentik/stages/identification/api.py:20
+msgid "When no user fields are selected, at least one source must be selected"
msgstr ""
-"Wenn diese Option gesetzt ist, wird ein Kennwortfeld angezeigt, anstatt das "
-"Kennwortfeld als Schritt von seaprate anzuzeigen."
+"Wenn keine Benutzerfelder ausgewählt sind, muss mindestens eine Quelle "
+"ausgewählt werden"
-#: authentik/stages/identification/models.py:48
+#: authentik/stages/identification/models.py:29
+msgid ""
+"Fields of the user object to match against. (Hold shift to select multiple "
+"options)"
+msgstr ""
+"Felder des Benutzerobjekts, mit denen abgeglichen werden soll. (Halten Sie "
+"die Umschalttaste gedrückt, um mehrere Optionen auszuwählen)"
+
+#: authentik/stages/identification/models.py:47
msgid "When enabled, user fields are matched regardless of their casing."
msgstr ""
"Wenn diese Option aktiviert ist, werden Benutzerfelder unabhängig von ihrem "
"Format abgeglichen."
-#: authentik/stages/identification/models.py:68
+#: authentik/stages/identification/models.py:52
+msgid ""
+"When a valid username/email has been entered, and this option is enabled, "
+"the user's username and avatar will be shown. Otherwise, the text that the "
+"user entered will be shown"
+msgstr ""
+"Wenn ein gültiger Benutzername/E-Mail eingegeben wurde und diese Option "
+"aktiviert ist, werden der Benutzername und der Avatar des Benutzers "
+"angezeigt. Andernfalls wird der Text angezeigt, den der Benutzer eingegeben "
+"hat"
+
+#: authentik/stages/identification/models.py:65
msgid "Optional enrollment flow, which is linked at the bottom of the page."
msgstr "Optionaler Anmeldevorgang, der unten auf der Seite verlinkt ist."
-#: authentik/stages/identification/models.py:77
+#: authentik/stages/identification/models.py:74
msgid "Optional recovery flow, which is linked at the bottom of the page."
msgstr ""
"Optionaler Wiederherstellungsablauf, der unten auf der Seite verlinkt ist."
-#: authentik/stages/identification/models.py:86
+#: authentik/stages/identification/models.py:83
msgid "Optional passwordless flow, which is linked at the bottom of the page."
msgstr ""
"Optionaler, passwortloser Flow, welcher unten auf der Seite verlinkt ist."
-#: authentik/stages/identification/models.py:90
+#: authentik/stages/identification/models.py:87
msgid "Specify which sources should be shown."
msgstr "Geben Sie an, welche Quellen angezeigt werden sollen."
-#: authentik/stages/identification/models.py:112
+#: authentik/stages/identification/models.py:108
msgid "Identification Stage"
msgstr "Identifizierungsstufe"
-#: authentik/stages/identification/models.py:113
+#: authentik/stages/identification/models.py:109
msgid "Identification Stages"
msgstr "Identifizierungsstufen"
-#: authentik/stages/identification/stage.py:175
+#: authentik/stages/identification/stage.py:188
msgid "Log in"
-msgstr "Log In"
+msgstr "Anmelden"
-#: authentik/stages/invitation/models.py:46
+#: authentik/stages/identification/stage.py:189
+msgid "Continue"
+msgstr "Weiter"
+
+#: authentik/stages/invitation/models.py:21
+msgid ""
+"If this flag is set, this Stage will jump to the next Stage when no "
+"Invitation is given. By default this Stage will cancel the Flow when no "
+"invitation is given."
+msgstr ""
+"Wenn dieses Flag gesetzt ist, springt diese Stufe zur nächsten Stufe, wenn "
+"keine Einladung gegeben wird. Standardmäßig bricht diese Phase den Flow ab, "
+"wenn keine Einladung gegeben wird."
+
+#: authentik/stages/invitation/models.py:44
msgid "Invitation Stage"
msgstr "Einladungsstufe"
-#: authentik/stages/invitation/models.py:47
+#: authentik/stages/invitation/models.py:45
msgid "Invitation Stages"
msgstr "Einladungsstufen"
-#: authentik/stages/invitation/models.py:57
+#: authentik/stages/invitation/models.py:60
+msgid "When set, only the configured flow can use this invitation."
+msgstr ""
+"Wenn ausgewählt, kann nur der konfigurierte Ablauf diese Einladung "
+"verwenden."
+
+#: authentik/stages/invitation/models.py:64
msgid "When enabled, the invitation will be deleted after usage."
msgstr ""
"Wenn diese Option aktiviert ist, wird die Einladung nach ihrer Benutzung "
"gelöscht."
-#: authentik/stages/invitation/models.py:64
+#: authentik/stages/invitation/models.py:71
msgid "Optional fixed data to enforce on user enrollment."
msgstr ""
"Optionale feste Daten, die bei der Benutzerregistrierung erzwungen werden."
-#: authentik/stages/invitation/models.py:72
+#: authentik/stages/invitation/models.py:84
msgid "Invitation"
msgstr "Einladung"
-#: authentik/stages/invitation/models.py:73
+#: authentik/stages/invitation/models.py:85
msgid "Invitations"
msgstr "Einladungen"
+#: authentik/stages/invitation/stage.py:62
+msgid "Invalid invite/invite not found"
+msgstr "Ungültige Einladung/Einladung nicht gefunden"
+
#: authentik/stages/password/models.py:20
msgid "User database + standard password"
msgstr "Benutzer Datenbank + Standardpasswort"
@@ -1691,78 +2564,154 @@ msgstr "Benutzer Datenbank + LDAP Passwort"
msgid "Selection of backends to test the password against."
msgstr "Auswahl der Backends, mit denen das Kennwort getestet werden soll."
-#: authentik/stages/password/models.py:78
+#: authentik/stages/password/models.py:43
+msgid ""
+"How many attempts a user has before the flow is canceled. To lock the user "
+"out, use a reputation policy and a user_write stage."
+msgstr ""
+"Anzahl der Versuche, die Benutzer haben, bevor der Ablauf abgebrochen wird. "
+"Um Benutzer auszuschließen kann eine Reputations-Richtlinie und eine "
+"user_write-Stufe genutzt werden."
+
+#: authentik/stages/password/models.py:75
msgid "Password Stage"
msgstr "Passwortstufe"
-#: authentik/stages/password/models.py:79
+#: authentik/stages/password/models.py:76
msgid "Password Stages"
msgstr "Passwortstufen"
-#: authentik/stages/password/stage.py:152
+#: authentik/stages/password/stage.py:124
msgid "Invalid password"
msgstr "Ungültiges Passwort"
-#: authentik/stages/prompt/models.py:29
+#: authentik/stages/prompt/models.py:43
msgid "Text: Simple Text input"
msgstr "Text: Einfaches Texteingabefeld"
-#: authentik/stages/prompt/models.py:32
+#: authentik/stages/prompt/models.py:45
+msgid "Text area: Multiline Text Input."
+msgstr "Textbereich: Mehrzeilige Texteingabe."
+
+#: authentik/stages/prompt/models.py:48
msgid "Text (read-only): Simple Text input, but cannot be edited."
msgstr "Text (read-only): Einfaches Texteingabefeld, nicht editierbar"
-#: authentik/stages/prompt/models.py:39
+#: authentik/stages/prompt/models.py:52
+msgid "Text area (read-only): Multiline Text input, but cannot be edited."
+msgstr ""
+"Textbereich (schreibgeschützt): Mehrzeilige Texteingabe, kann aber nicht "
+"bearbeitet werden."
+
+#: authentik/stages/prompt/models.py:58
+msgid ""
+"Username: Same as Text input, but checks for and prevents duplicate "
+"usernames."
+msgstr ""
+"Benutzername: Wie bei der Texteingabe, prüft jedoch auf doppelte "
+"Benutzernamen und verhindert diese."
+
+#: authentik/stages/prompt/models.py:60
msgid "Email: Text field with Email type."
msgstr "E-Mail: Textfeld mit E-Mail-Typ."
-#: authentik/stages/prompt/models.py:55
+#: authentik/stages/prompt/models.py:64
+msgid ""
+"Password: Masked input, multiple inputs of this type on the same prompt need"
+" to be identical."
+msgstr ""
+"Passwort: Maskierte Eingabe, mehrere Eingaben dieses Typs in derselben "
+"Eingabeaufforderung müssen identisch sein."
+
+#: authentik/stages/prompt/models.py:71
+msgid "Fixed choice field rendered as a group of radio buttons."
+msgstr "Auswahlfeld, das als Gruppe von Optionsfeldern dargestellt wird."
+
+#: authentik/stages/prompt/models.py:73
+msgid "Fixed choice field rendered as a dropdown."
+msgstr "Auswahlfeld, dargestellt als Dropdown-Menü."
+
+#: authentik/stages/prompt/models.py:80
+msgid ""
+"File: File upload for arbitrary files. File content will be available in "
+"flow context as data-URI"
+msgstr ""
+"Datei: Upload beliebiger Dateien. Der Dateiinhalt steht im Kontext des "
+"Ablaufs als Daten-URI zur Verfügung."
+
+#: authentik/stages/prompt/models.py:85
msgid "Separator: Static Separator Line"
msgstr "Trennzeichen: Statische Trennungslinie"
-#: authentik/stages/prompt/models.py:56
+#: authentik/stages/prompt/models.py:86
msgid "Hidden: Hidden field, can be used to insert data into form."
msgstr ""
"Versteckt: Verstecktes Feld, kann zum Einfügen von Daten in das Formular "
"verwendet werden."
-#: authentik/stages/prompt/models.py:57
+#: authentik/stages/prompt/models.py:87
msgid "Static: Static value, displayed as-is."
msgstr "Statisch: Statischer Wert, wird so angezeigt, wie er ist."
-#: authentik/stages/prompt/models.py:66
+#: authentik/stages/prompt/models.py:89
+msgid "authentik: Selection of locales authentik supports"
+msgstr "Authentik: Auswahl der von Authentik unterstützten Gebietsschemata"
+
+#: authentik/stages/prompt/models.py:116
msgid "Name of the form field, also used to store the value"
msgstr ""
"Name des Formularfeldes, das auch zum Speichern des Wertes verwendet wird"
-#: authentik/stages/prompt/models.py:131
+#: authentik/stages/prompt/models.py:124
+msgid ""
+"Optionally provide a short hint that describes the expected input value. "
+"When creating a fixed choice field, enable interpreting as expression and "
+"return a list to return multiple choices."
+msgstr ""
+"Geben Sie optional einen kurzen Hinweis, der den erwarteten Eingabewert "
+"beschreibt. Aktivieren Sie bei der Erstellung eines Auswahlfeldes die "
+"Interpretation als Ausdruck und geben Sie eine Liste zurück, um mehrere "
+"Auswahlmöglichkeiten zu erhalten."
+
+#: authentik/stages/prompt/models.py:132
+msgid ""
+"Optionally pre-fill the input with an initial value. When creating a fixed "
+"choice field, enable interpreting as expression and return a list to return "
+"multiple default choices."
+msgstr ""
+"Füllen Sie die Eingabe optional mit einem Anfangswert vor. Aktivieren Sie "
+"bei der Erstellung eines Auswahlfeldes die Interpretation als Ausdruck und "
+"geben Sie eine Liste zurück, um mehrere Auswahlmöglichkeiten zu erhalten."
+
+#: authentik/stages/prompt/models.py:321
msgid "Prompt"
msgstr "Eingabeaufforderung"
-#: authentik/stages/prompt/models.py:132
+#: authentik/stages/prompt/models.py:322
msgid "Prompts"
msgstr "Eingabeaufforderungen"
-#: authentik/stages/prompt/models.py:160
+#: authentik/stages/prompt/models.py:349
msgid "Prompt Stage"
msgstr "Aufforderungsstufe"
-#: authentik/stages/prompt/models.py:161
+#: authentik/stages/prompt/models.py:350
msgid "Prompt Stages"
msgstr "Aufforderungsstufen"
-#: authentik/stages/prompt/stage.py:94
+#: authentik/stages/prompt/stage.py:108
msgid "Passwords don't match."
msgstr "Passwörter stimmen nicht überein"
-#: authentik/stages/user_delete/models.py:32
+#: authentik/stages/user_delete/models.py:31
msgid "User Delete Stage"
msgstr "Benutzer löschen Stufe"
-#: authentik/stages/user_delete/models.py:33
+#: authentik/stages/user_delete/models.py:32
msgid "User Delete Stages"
msgstr "Benutzer löschen Stufen"
-#: authentik/stages/user_delete/stage.py:24
+#: authentik/stages/user_delete/stage.py:18
msgid "No Pending User."
msgstr "Keine ausstehende Benutzer."
@@ -1775,54 +2724,81 @@ msgstr ""
"die Sitzung so lange dauert, bis der Browser geschlossen wird. (Format: "
"hours=-1;minutes=-2;seconds=-3)"
-#: authentik/stages/user_login/models.py:43
+#: authentik/stages/user_login/models.py:25
+msgid "Terminate all other sessions of the user logging in."
+msgstr "Beenden Sie alle anderen Sitzungen des angemeldeten Benutzers."
+
+#: authentik/stages/user_login/models.py:31
+msgid ""
+"Offset the session will be extended by when the user picks the remember me "
+"option. Default of 0 means that the remember me option will not be shown. "
+"(Format: hours=-1;minutes=-2;seconds=-3)"
+msgstr ""
+"Offset, um den die Sitzung verlängert wird, wenn der Benutzer die Option "
+"\"Remember me\" auswählt. Der Standardwert 0 bedeutet, dass die "
+"Erinnerungsoption nicht angezeigt wird. (Format: "
+"Stunden=-1;Minuten=-2;Sekunden=-3)"
+
+#: authentik/stages/user_login/models.py:54
msgid "User Login Stage"
msgstr "Benutzeranmeldestufe"
-#: authentik/stages/user_login/models.py:44
+#: authentik/stages/user_login/models.py:55
msgid "User Login Stages"
msgstr "Benutzeranmeldestufen"
-#: authentik/stages/user_login/stage.py:29
+#: authentik/stages/user_login/stage.py:57
msgid "No Pending user to login."
msgstr "Kein ausstehender Benutzer zur Anmeldung."
-#: authentik/stages/user_login/stage.py:57
+#: authentik/stages/user_login/stage.py:90
msgid "Successfully logged in!"
msgstr "Erfolgreich angemeldet!"
-#: authentik/stages/user_logout/models.py:31
+#: authentik/stages/user_logout/models.py:30
msgid "User Logout Stage"
msgstr "Benutzerabmeldestufe"
-#: authentik/stages/user_logout/models.py:32
+#: authentik/stages/user_logout/models.py:31
msgid "User Logout Stages"
msgstr "Benutzerabmeldestufen"
-#: authentik/stages/user_write/models.py:18
+#: authentik/stages/user_write/models.py:31
msgid "When set, newly created users are inactive and cannot login."
msgstr ""
"Wenn diese Option aktiviert ist, sind neu angelegte Benutzer inaktiv und "
"können sich nicht anmelden."
-#: authentik/stages/user_write/models.py:26
+#: authentik/stages/user_write/models.py:39
msgid "Optionally add newly created users to this group."
msgstr ""
"Optional können Sie neu erstellte Benutzer zu dieser Gruppe hinzufügen."
-#: authentik/stages/user_write/models.py:47
+#: authentik/stages/user_write/models.py:64
msgid "User Write Stage"
msgstr "Benutzer-Schreibstufe"
-#: authentik/stages/user_write/models.py:48
+#: authentik/stages/user_write/models.py:65
msgid "User Write Stages"
msgstr "Benutzer-Schreibstufen"
-#: authentik/stages/user_write/stage.py:53
+#: authentik/stages/user_write/stage.py:130
msgid "No Pending data."
msgstr "Keine Daten ausstehend."
-#: authentik/tenants/models.py:18
+#: authentik/stages/user_write/stage.py:136
+msgid "No user found and can't create new user."
+msgstr ""
+"Kein Benutzer vorhanden und neuer Benutzer kann nicht erstellt werden."
+
+#: authentik/stages/user_write/stage.py:153
+#: authentik/stages/user_write/stage.py:167
+msgid "Failed to update user. Please try again later."
+msgstr ""
+"Aktualisierung des Benuzters fehlgeschlagen. Bitte versuchen Sie es später "
+"erneut."
+
+#: authentik/tenants/models.py:23
msgid ""
"Domain that activates this tenant. Can be a superset, i.e. `a.b` for `aa.b` "
"and `ba.b`"
@@ -1830,10 +2806,22 @@ msgstr ""
"Domäne, die diesen Mandanten aktiviert. Kann eine Obermenge sein, d. h. "
"`a.b` für `aa.b` und `ba.b`."
-#: authentik/tenants/models.py:70
+#: authentik/tenants/models.py:58
+msgid ""
+"Events will be deleted after this duration.(Format: "
+"weeks=3;days=2;hours=3,seconds=2)."
+msgstr ""
+"Die Ereignisse werden nach dieser Dauer gelöscht (Format: "
+"Wochen=3;Tage=2;Stunden=3,Sekunden=2)."
+
+#: authentik/tenants/models.py:67
+msgid "Web Certificate used by the authentik Core webserver."
+msgstr "Vom Authentik-Core-Webserver verwendetes Zertifikat."
+
+#: authentik/tenants/models.py:93
msgid "Tenant"
msgstr "Mandant"
-#: authentik/tenants/models.py:71
+#: authentik/tenants/models.py:94
msgid "Tenants"
msgstr "Mandanten"
diff --git a/poetry.lock b/poetry.lock
index 86d0bcbf8..d509b16d1 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -3468,13 +3468,13 @@ urllib3 = {version = ">=1.26,<3", extras = ["socks"]}
[[package]]
name = "sentry-sdk"
-version = "1.31.0"
+version = "1.32.0"
description = "Python client for Sentry (https://sentry.io)"
optional = false
python-versions = "*"
files = [
- {file = "sentry-sdk-1.31.0.tar.gz", hash = "sha256:6de2e88304873484207fed836388e422aeff000609b104c802749fd89d56ba5b"},
- {file = "sentry_sdk-1.31.0-py2.py3-none-any.whl", hash = "sha256:64a7141005fb775b9db298a30de93e3b83e0ddd1232dc6f36eb38aebc1553291"},
+ {file = "sentry-sdk-1.32.0.tar.gz", hash = "sha256:935e8fbd7787a3702457393b74b13d89a5afb67185bc0af85c00cb27cbd42e7c"},
+ {file = "sentry_sdk-1.32.0-py2.py3-none-any.whl", hash = "sha256:eeb0b3550536f3bbc05bb1c7e0feb3a78d74acb43b607159a606ed2ec0a33a4d"},
]
[package.dependencies]
diff --git a/tests/e2e/test_provider_oidc.py b/tests/e2e/test_provider_oidc.py
index e56817836..23cbd1412 100644
--- a/tests/e2e/test_provider_oidc.py
+++ b/tests/e2e/test_provider_oidc.py
@@ -49,13 +49,8 @@ class TestProviderOAuth2OIDC(SeleniumTestCase):
"OIDC_PROVIDER": f"{self.live_server_url}/application/o/{self.application_slug}/",
},
)
- while True:
- container.reload()
- status = container.attrs.get("State", {}).get("Health", {}).get("Status")
- if status == "healthy":
- return container
- self.logger.info("Container failed healthcheck")
- sleep(1)
+ self.wait_for_container(container)
+ return container
@retry()
@apply_blueprint(
diff --git a/tests/e2e/test_provider_oidc_implicit.py b/tests/e2e/test_provider_oidc_implicit.py
index 71e1c15f4..e952d4e18 100644
--- a/tests/e2e/test_provider_oidc_implicit.py
+++ b/tests/e2e/test_provider_oidc_implicit.py
@@ -49,13 +49,8 @@ class TestProviderOAuth2OIDCImplicit(SeleniumTestCase):
"OIDC_PROVIDER": f"{self.live_server_url}/application/o/{self.application_slug}/",
},
)
- while True:
- container.reload()
- status = container.attrs.get("State", {}).get("Health", {}).get("Status")
- if status == "healthy":
- return container
- self.logger.info("Container failed healthcheck")
- sleep(1)
+ self.wait_for_container(container)
+ return container
@retry()
@apply_blueprint(
diff --git a/tests/e2e/test_provider_saml.py b/tests/e2e/test_provider_saml.py
index ef7baf8cc..9252ab0c0 100644
--- a/tests/e2e/test_provider_saml.py
+++ b/tests/e2e/test_provider_saml.py
@@ -48,13 +48,8 @@ class TestProviderSAML(SeleniumTestCase):
"SP_METADATA_URL": metadata_url,
},
)
- while True:
- container.reload()
- status = container.attrs.get("State", {}).get("Health", {}).get("Status")
- if status == "healthy":
- return container
- self.logger.info("Container failed healthcheck")
- sleep(1)
+ self.wait_for_container(container)
+ return container
@retry()
@apply_blueprint(
diff --git a/tests/e2e/utils.py b/tests/e2e/utils.py
index 90314465f..7092ac4e9 100644
--- a/tests/e2e/utils.py
+++ b/tests/e2e/utils.py
@@ -43,7 +43,24 @@ def get_docker_tag() -> str:
return f"gh-{branch_name}"
-class SeleniumTestCase(StaticLiveServerTestCase):
+class DockerTestCase:
+ """Mixin for dealing with containers"""
+
+ def wait_for_container(self, container: Container):
+ """Check that container is health"""
+ attempt = 0
+ while True:
+ container.reload()
+ status = container.attrs.get("State", {}).get("Health", {}).get("Status")
+ if status == "healthy":
+ return container
+ sleep(1)
+ attempt += 1
+ if attempt >= 30:
+ self.failureException("Container failed to start")
+
+
+class SeleniumTestCase(DockerTestCase, StaticLiveServerTestCase):
"""StaticLiveServerTestCase which automatically creates a Webdriver instance"""
container: Optional[Container] = None
@@ -82,13 +99,8 @@ class SeleniumTestCase(StaticLiveServerTestCase):
state = container.attrs.get("State", {})
if "Health" not in state:
return container
- while True:
- container.reload()
- status = container.attrs.get("State", {}).get("Health", {}).get("Status")
- if status == "healthy":
- return container
- self.logger.info("Container failed healthcheck")
- sleep(1)
+ self.wait_for_container(container)
+ return container
def output_container_logs(self, container: Optional[Container] = None):
"""Output the container logs to our STDOUT"""
diff --git a/tests/integration/test_outpost_docker.py b/tests/integration/test_outpost_docker.py
index 98e4ec48a..4e12cbbca 100644
--- a/tests/integration/test_outpost_docker.py
+++ b/tests/integration/test_outpost_docker.py
@@ -1,7 +1,6 @@
"""outpost tests"""
from shutil import rmtree
from tempfile import mkdtemp
-from time import sleep
import yaml
from channels.testing import ChannelsLiveServerTestCase
@@ -20,10 +19,10 @@ from authentik.outposts.models import (
)
from authentik.outposts.tasks import outpost_connection_discovery
from authentik.providers.proxy.models import ProxyProvider
-from tests.e2e.utils import get_docker_tag
+from tests.e2e.utils import DockerTestCase, get_docker_tag
-class OutpostDockerTests(ChannelsLiveServerTestCase):
+class OutpostDockerTests(DockerTestCase, ChannelsLiveServerTestCase):
"""Test Docker Controllers"""
def _start_container(self, ssl_folder: str) -> Container:
@@ -45,12 +44,8 @@ class OutpostDockerTests(ChannelsLiveServerTestCase):
}
},
)
- while True:
- container.reload()
- status = container.attrs.get("State", {}).get("Health", {}).get("Status")
- if status == "healthy":
- return container
- sleep(1)
+ self.wait_for_container(container)
+ return container
def setUp(self):
super().setUp()
diff --git a/tests/integration/test_proxy_docker.py b/tests/integration/test_proxy_docker.py
index 147088ee6..8cbeb0bdd 100644
--- a/tests/integration/test_proxy_docker.py
+++ b/tests/integration/test_proxy_docker.py
@@ -1,7 +1,6 @@
"""outpost tests"""
from shutil import rmtree
from tempfile import mkdtemp
-from time import sleep
import yaml
from channels.testing.live import ChannelsLiveServerTestCase
@@ -20,10 +19,10 @@ from authentik.outposts.models import (
from authentik.outposts.tasks import outpost_connection_discovery
from authentik.providers.proxy.controllers.docker import DockerController
from authentik.providers.proxy.models import ProxyProvider
-from tests.e2e.utils import get_docker_tag
+from tests.e2e.utils import DockerTestCase, get_docker_tag
-class TestProxyDocker(ChannelsLiveServerTestCase):
+class TestProxyDocker(DockerTestCase, ChannelsLiveServerTestCase):
"""Test Docker Controllers"""
def _start_container(self, ssl_folder: str) -> Container:
@@ -45,12 +44,8 @@ class TestProxyDocker(ChannelsLiveServerTestCase):
}
},
)
- while True:
- container.reload()
- status = container.attrs.get("State", {}).get("Health", {}).get("Status")
- if status == "healthy":
- return container
- sleep(1)
+ self.wait_for_container(container)
+ return container
def setUp(self):
super().setUp()
diff --git a/web/package-lock.json b/web/package-lock.json
index 373ecf910..ec600c34c 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -43,14 +43,14 @@
"yaml": "^2.3.2"
},
"devDependencies": {
- "@babel/core": "^7.23.0",
+ "@babel/core": "^7.23.2",
"@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/plugin-proposal-decorators": "^7.23.0",
+ "@babel/plugin-proposal-decorators": "^7.23.2",
"@babel/plugin-transform-private-methods": "^7.22.5",
"@babel/plugin-transform-private-property-in-object": "^7.22.11",
- "@babel/plugin-transform-runtime": "^7.22.15",
- "@babel/preset-env": "^7.22.20",
- "@babel/preset-typescript": "^7.23.0",
+ "@babel/plugin-transform-runtime": "^7.23.2",
+ "@babel/preset-env": "^7.23.2",
+ "@babel/preset-typescript": "^7.23.2",
"@hcaptcha/types": "^1.0.3",
"@jackfranklin/rollup-plugin-markdown": "^0.4.0",
"@jeysal/storybook-addon-css-user-preferences": "^0.2.0",
@@ -161,18 +161,18 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz",
- "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz",
+ "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz",
- "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz",
+ "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
@@ -180,10 +180,10 @@
"@babel/generator": "^7.23.0",
"@babel/helper-compilation-targets": "^7.22.15",
"@babel/helper-module-transforms": "^7.23.0",
- "@babel/helpers": "^7.23.0",
+ "@babel/helpers": "^7.23.2",
"@babel/parser": "^7.23.0",
"@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.0",
+ "@babel/traverse": "^7.23.2",
"@babel/types": "^7.23.0",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
@@ -301,9 +301,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz",
- "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==",
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz",
+ "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==",
"dev": true,
"dependencies": {
"@babel/helper-compilation-targets": "^7.22.6",
@@ -415,14 +415,14 @@
}
},
"node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.22.17",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.17.tgz",
- "integrity": "sha512-bxH77R5gjH3Nkde6/LuncQoLaP16THYPscurp1S8z7S9ZgezCyV3G8Hc+TZiCmY8pz4fp8CvKSgtJMW0FkLAxA==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
+ "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-wrap-function": "^7.22.17"
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-wrap-function": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
@@ -512,27 +512,27 @@
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.22.17",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.17.tgz",
- "integrity": "sha512-nAhoheCMlrqU41tAojw9GpVEKDlTS8r3lzFmF0lP52LwblCPbuFSO7nGIZoIcoU5NIm1ABrna0cJExE4Ay6l2Q==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
+ "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
"dev": true,
"dependencies": {
"@babel/helper-function-name": "^7.22.5",
"@babel/template": "^7.22.15",
- "@babel/types": "^7.22.17"
+ "@babel/types": "^7.22.19"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.23.1",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz",
- "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz",
+ "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==",
"dev": true,
"dependencies": {
"@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.0",
+ "@babel/traverse": "^7.23.2",
"@babel/types": "^7.23.0"
},
"engines": {
@@ -615,9 +615,9 @@
}
},
"node_modules/@babel/plugin-proposal-decorators": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.0.tgz",
- "integrity": "sha512-kYsT+f5ARWF6AdFmqoEEp+hpqxEB8vGmRWfw2aj78M2vTwS2uHW91EF58iFm1Z9U8Y/RrLu2XKJn46P9ca1b0w==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.2.tgz",
+ "integrity": "sha512-eR0gJQc830fJVGz37oKLvt9W9uUIQSAovUl0e9sJ3YeO09dlcoBVYD3CLrjCj4qHdXmfiyTyFt8yeQYSN5fxLg==",
"dev": true,
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.22.15",
@@ -991,14 +991,14 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz",
- "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz",
+ "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-remap-async-to-generator": "^7.22.9",
+ "@babel/helper-remap-async-to-generator": "^7.22.20",
"@babel/plugin-syntax-async-generators": "^7.8.4"
},
"engines": {
@@ -1041,9 +1041,9 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz",
- "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz",
+ "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
@@ -1128,9 +1128,9 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz",
- "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz",
+ "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
@@ -1332,12 +1332,12 @@
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz",
- "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz",
+ "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-module-transforms": "^7.23.0",
"@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
@@ -1365,15 +1365,15 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz",
- "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz",
+ "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==",
"dev": true,
"dependencies": {
"@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-module-transforms": "^7.22.9",
+ "@babel/helper-module-transforms": "^7.23.0",
"@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.5"
+ "@babel/helper-validator-identifier": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
@@ -1513,9 +1513,9 @@
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz",
- "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz",
+ "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5",
@@ -1625,16 +1625,16 @@
}
},
"node_modules/@babel/plugin-transform-runtime": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz",
- "integrity": "sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz",
+ "integrity": "sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA==",
"dev": true,
"dependencies": {
"@babel/helper-module-imports": "^7.22.15",
"@babel/helper-plugin-utils": "^7.22.5",
- "babel-plugin-polyfill-corejs2": "^0.4.5",
- "babel-plugin-polyfill-corejs3": "^0.8.3",
- "babel-plugin-polyfill-regenerator": "^0.5.2",
+ "babel-plugin-polyfill-corejs2": "^0.4.6",
+ "babel-plugin-polyfill-corejs3": "^0.8.5",
+ "babel-plugin-polyfill-regenerator": "^0.5.3",
"semver": "^6.3.1"
},
"engines": {
@@ -1802,12 +1802,12 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.20.tgz",
- "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz",
+ "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.22.20",
+ "@babel/compat-data": "^7.23.2",
"@babel/helper-compilation-targets": "^7.22.15",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/helper-validator-option": "^7.22.15",
@@ -1833,15 +1833,15 @@
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
"@babel/plugin-transform-arrow-functions": "^7.22.5",
- "@babel/plugin-transform-async-generator-functions": "^7.22.15",
+ "@babel/plugin-transform-async-generator-functions": "^7.23.2",
"@babel/plugin-transform-async-to-generator": "^7.22.5",
"@babel/plugin-transform-block-scoped-functions": "^7.22.5",
- "@babel/plugin-transform-block-scoping": "^7.22.15",
+ "@babel/plugin-transform-block-scoping": "^7.23.0",
"@babel/plugin-transform-class-properties": "^7.22.5",
"@babel/plugin-transform-class-static-block": "^7.22.11",
"@babel/plugin-transform-classes": "^7.22.15",
"@babel/plugin-transform-computed-properties": "^7.22.5",
- "@babel/plugin-transform-destructuring": "^7.22.15",
+ "@babel/plugin-transform-destructuring": "^7.23.0",
"@babel/plugin-transform-dotall-regex": "^7.22.5",
"@babel/plugin-transform-duplicate-keys": "^7.22.5",
"@babel/plugin-transform-dynamic-import": "^7.22.11",
@@ -1853,9 +1853,9 @@
"@babel/plugin-transform-literals": "^7.22.5",
"@babel/plugin-transform-logical-assignment-operators": "^7.22.11",
"@babel/plugin-transform-member-expression-literals": "^7.22.5",
- "@babel/plugin-transform-modules-amd": "^7.22.5",
- "@babel/plugin-transform-modules-commonjs": "^7.22.15",
- "@babel/plugin-transform-modules-systemjs": "^7.22.11",
+ "@babel/plugin-transform-modules-amd": "^7.23.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.23.0",
+ "@babel/plugin-transform-modules-systemjs": "^7.23.0",
"@babel/plugin-transform-modules-umd": "^7.22.5",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
"@babel/plugin-transform-new-target": "^7.22.5",
@@ -1864,7 +1864,7 @@
"@babel/plugin-transform-object-rest-spread": "^7.22.15",
"@babel/plugin-transform-object-super": "^7.22.5",
"@babel/plugin-transform-optional-catch-binding": "^7.22.11",
- "@babel/plugin-transform-optional-chaining": "^7.22.15",
+ "@babel/plugin-transform-optional-chaining": "^7.23.0",
"@babel/plugin-transform-parameters": "^7.22.15",
"@babel/plugin-transform-private-methods": "^7.22.5",
"@babel/plugin-transform-private-property-in-object": "^7.22.11",
@@ -1881,10 +1881,10 @@
"@babel/plugin-transform-unicode-regex": "^7.22.5",
"@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
"@babel/preset-modules": "0.1.6-no-external-plugins",
- "@babel/types": "^7.22.19",
- "babel-plugin-polyfill-corejs2": "^0.4.5",
- "babel-plugin-polyfill-corejs3": "^0.8.3",
- "babel-plugin-polyfill-regenerator": "^0.5.2",
+ "@babel/types": "^7.23.0",
+ "babel-plugin-polyfill-corejs2": "^0.4.6",
+ "babel-plugin-polyfill-corejs3": "^0.8.5",
+ "babel-plugin-polyfill-regenerator": "^0.5.3",
"core-js-compat": "^3.31.0",
"semver": "^6.3.1"
},
@@ -1927,9 +1927,9 @@
}
},
"node_modules/@babel/preset-typescript": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.0.tgz",
- "integrity": "sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.2.tgz",
+ "integrity": "sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5",
@@ -2127,9 +2127,9 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz",
- "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
+ "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.22.13",
@@ -11285,13 +11285,13 @@
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz",
- "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==",
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz",
+ "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.4.2",
+ "@babel/helper-define-polyfill-provider": "^0.4.3",
"semver": "^6.3.1"
},
"peerDependencies": {
@@ -11299,25 +11299,25 @@
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz",
- "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==",
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz",
+ "integrity": "sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.4.2",
- "core-js-compat": "^3.31.0"
+ "@babel/helper-define-polyfill-provider": "^0.4.3",
+ "core-js-compat": "^3.32.2"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz",
- "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==",
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz",
+ "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.4.2"
+ "@babel/helper-define-polyfill-provider": "^0.4.3"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
diff --git a/web/package.json b/web/package.json
index ee545d180..9555d20d9 100644
--- a/web/package.json
+++ b/web/package.json
@@ -61,14 +61,14 @@
"yaml": "^2.3.2"
},
"devDependencies": {
- "@babel/core": "^7.23.0",
+ "@babel/core": "^7.23.2",
"@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/plugin-proposal-decorators": "^7.23.0",
+ "@babel/plugin-proposal-decorators": "^7.23.2",
"@babel/plugin-transform-private-methods": "^7.22.5",
"@babel/plugin-transform-private-property-in-object": "^7.22.11",
- "@babel/plugin-transform-runtime": "^7.22.15",
- "@babel/preset-env": "^7.22.20",
- "@babel/preset-typescript": "^7.23.0",
+ "@babel/plugin-transform-runtime": "^7.23.2",
+ "@babel/preset-env": "^7.23.2",
+ "@babel/preset-typescript": "^7.23.2",
"@hcaptcha/types": "^1.0.3",
"@jackfranklin/rollup-plugin-markdown": "^0.4.0",
"@jeysal/storybook-addon-css-user-preferences": "^0.2.0",
diff --git a/web/src/admin/applications/ApplicationCheckAccessForm.ts b/web/src/admin/applications/ApplicationCheckAccessForm.ts
index 90beb3786..59292e17d 100644
--- a/web/src/admin/applications/ApplicationCheckAccessForm.ts
+++ b/web/src/admin/applications/ApplicationCheckAccessForm.ts
@@ -114,7 +114,7 @@ export class ApplicationCheckAccessForm extends Form<{ forUser: number }> {
`;
}
- renderInlineForm(): TemplateResult {
+ renderForm(): TemplateResult {
return html`
+
+
+
+ Authentik has a new Application Wizard that can configure both an
+ application and its authentication provider at the same time.
+ Learn more about the wizard here.
+
-
+ return html`
${msg(
"Checks the value from the policy request against several rules, mostly used to ensure password strength.",
)}
@@ -348,7 +347,6 @@ export class PasswordPolicyForm extends ModelForm {
-
+ return html`
${msg("Allows/denys requests based on the users and/or the IPs reputation.")}
@@ -131,7 +130,6 @@ doesn't pass when either or both of the selected options are equal or above the
/>
-
+ return html`
${msg(
"Prompt for the user's consent. The consent can either be permanent or expire in a defined amount of time.",
)}
@@ -120,7 +119,6 @@ export class ConsentStageForm extends ModelForm {
-
-
-
+ return html`
${msg(
"Statically deny the flow. To use this stage effectively, disable *Evaluate when flow is planned* on the respective binding.",
)}
@@ -52,7 +51,6 @@ export class DenyStageForm extends ModelForm {
class="pf-c-form-control"
required
/>
-
-
-
+ return html`
${msg(
"Verify the user's email address by sending them a one-time-link. Can also be used for recovery to verify the user's authenticity.",
)}
@@ -256,7 +255,6 @@ export class EmailStageForm extends ModelForm {
- ${this.renderConnectionSettings()}
-
`;
+ ${this.renderConnectionSettings()}`;
}
}
diff --git a/web/src/admin/stages/identification/IdentificationStageForm.ts b/web/src/admin/stages/identification/IdentificationStageForm.ts
index 5e4ebd828..769caaa76 100644
--- a/web/src/admin/stages/identification/IdentificationStageForm.ts
+++ b/web/src/admin/stages/identification/IdentificationStageForm.ts
@@ -68,8 +68,7 @@ export class IdentificationStageForm extends ModelForm
-
+ return html`
${msg("Let the user identify themselves with their username or Email address.")}
@@ -299,7 +298,6 @@ export class IdentificationStageForm extends ModelForm
-
- `;
+ `;
}
}
diff --git a/web/src/admin/stages/invitation/InvitationForm.ts b/web/src/admin/stages/invitation/InvitationForm.ts
index 0ee755389..be110eb46 100644
--- a/web/src/admin/stages/invitation/InvitationForm.ts
+++ b/web/src/admin/stages/invitation/InvitationForm.ts
@@ -43,8 +43,7 @@ export class InvitationForm extends ModelForm {
}
renderForm(): TemplateResult {
- return html`
- {
${msg("When enabled, the invitation will be deleted after usage.")}
-
+ return html`
${msg("This stage can be included in enrollment flows to accept invitations.")}
@@ -81,7 +80,6 @@ export class InvitationStageForm extends ModelForm {
-
-
- ${msg("Validate the user's password against the selected backend(s).")}
+ return html`
+ ${msg("Validate the user's password against the selected backend(s).")}
+
{
-
-
-
+ return html`
${msg(
"Show arbitrary input fields to the user, for example during enrollment. Data is saved in the flow context under the 'prompt_data' variable.",
)}
@@ -146,7 +145,6 @@ export class PromptStageForm extends ModelForm {
-
-
-
+ return html`
${msg(
"Delete the currently pending user. CAUTION, this stage does not ask for confirmation. Use a consent stage to ensure the user is aware of their actions.",
)}
@@ -52,7 +51,6 @@ export class UserDeleteStageForm extends ModelForm {
class="pf-c-form-control"
required
/>
-
-
- ${msg("Remove the user from the current session.")}
+ return html` ${msg("Remove the user from the current session.")}
{
class="pf-c-form-control"
required
/>
-
-
-
+ return html`
${msg(
`Write any data from the flow's context's 'prompt_data' to the currently pending user. If no user
is pending, a new user is created, and data is written to them.`,
@@ -161,7 +160,6 @@ export class UserWriteStageForm extends ModelForm {
-
-
+ Authentik has a new Application Wizard that can configure both an
+ application and its authentication provider at the same time.
+ Learn more about the wizard here.
+
+ {
+ showMessage({
+ message: "This would have shown the wizard",
+ level: MessageLevel.success,
+ });
+ }}
+ >Create with Wizard
+
+ `,
+ );
+};
+
+export const WithTitle = () => {
+ return container(
+ html`
+
+ New Application Wizard
+
+
+ Authentik has a new Application Wizard that can configure both an
+ application and its authentication provider at the same time.
+ Learn more about the wizard here.
+
+ {
+ showMessage({
+ message: "This would have shown the wizard",
+ level: MessageLevel.success,
+ });
+ }}
+ >Create with Wizard
+
+ `,
+ );
+};
+
+export const WithTitleAndFooter = () => {
+ return container(
+ html`
+
+ New Application Wizard
+
+
+ Authentik has a new Application Wizard that can configure both an
+ application and its authentication provider at the same time.
+ Learn more about the wizard here.
+
+ {
+ showMessage({
+ message: "This would have shown the wizard",
+ level: MessageLevel.success,
+ });
+ }}
+ >Create with Wizard
+
`;
+ }
+}
+
+export default AkHint;
diff --git a/web/src/elements/forms/Form.ts b/web/src/elements/forms/Form.ts
index 6da2baff7..5728634f1 100644
--- a/web/src/elements/forms/Form.ts
+++ b/web/src/elements/forms/Form.ts
@@ -36,13 +36,13 @@ export interface KeyUnknown {
*
* The base form element for interacting with user inputs.
*
- * All forms either[1] inherit from this class and implement the `renderInlineForm()` method to
+ * All forms either[1] inherit from this class and implement the `renderForm()` method to
* produce the actual form, or include the form in-line as a slotted element. Bizarrely, this form
* will not render at all if it's not actually in the viewport?[2]
*
* @element ak-form
*
- * @slot - Where the form goes if `renderInlineForm()` returns undefined.
+ * @slot - Where the form goes if `renderForm()` returns undefined.
* @fires eventname - description
*
* @csspart partname - description
@@ -52,7 +52,7 @@ export interface KeyUnknown {
*
* 1. Specialization: Separate this component into three different classes:
* - The base class
- * - The "use `renderInlineForm` class
+ * - The "use `renderForm` class
* - The slotted class.
* 2. There is already specialization-by-type throughout all of our code.
* Consider refactoring serializeForm() so that the conversions are on
@@ -343,21 +343,22 @@ export abstract class Form extends AKElement {
}
}
- renderForm(): TemplateResult {
- const inline = this.renderInlineForm();
+ renderFormWrapper(): TemplateResult {
+ const inline = this.renderForm();
if (inline) {
- return html`
+ return html`
{
+ ev.preventDefault();
+ }}
+ >
${inline}
`;
}
return html``;
}
- /**
- * Inline form render callback when inheriting this class, should be overwritten
- * instead of `this.renderForm`
- */
- renderInlineForm(): TemplateResult | undefined {
+ renderForm(): TemplateResult | undefined {
return undefined;
}
@@ -378,7 +379,7 @@ export abstract class Form extends AKElement {
}
renderVisible(): TemplateResult {
- return html` ${this.renderNonFieldErrors()} ${this.renderForm()}`;
+ return html` ${this.renderNonFieldErrors()} ${this.renderFormWrapper()}`;
}
render(): TemplateResult {
diff --git a/web/src/user/user-settings/mfa/MFADeviceForm.ts b/web/src/user/user-settings/mfa/MFADeviceForm.ts
index 0901d0bc9..a418eeb02 100644
--- a/web/src/user/user-settings/mfa/MFADeviceForm.ts
+++ b/web/src/user/user-settings/mfa/MFADeviceForm.ts
@@ -64,15 +64,13 @@ export class MFADeviceForm extends ModelForm {
}
renderForm(): TemplateResult {
- return html`