core: add grouping to applications (#2648)
* core: add grouping to applications Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * core: add new field to tests Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
		@ -68,6 +68,7 @@ class ApplicationSerializer(ModelSerializer):
 | 
				
			|||||||
            "meta_description",
 | 
					            "meta_description",
 | 
				
			||||||
            "meta_publisher",
 | 
					            "meta_publisher",
 | 
				
			||||||
            "policy_engine_mode",
 | 
					            "policy_engine_mode",
 | 
				
			||||||
 | 
					            "group",
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
        extra_kwargs = {
 | 
					        extra_kwargs = {
 | 
				
			||||||
            "meta_icon": {"read_only": True},
 | 
					            "meta_icon": {"read_only": True},
 | 
				
			||||||
@ -85,6 +86,7 @@ class ApplicationViewSet(UsedByMixin, ModelViewSet):
 | 
				
			|||||||
        "meta_launch_url",
 | 
					        "meta_launch_url",
 | 
				
			||||||
        "meta_description",
 | 
					        "meta_description",
 | 
				
			||||||
        "meta_publisher",
 | 
					        "meta_publisher",
 | 
				
			||||||
 | 
					        "group",
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
    lookup_field = "slug"
 | 
					    lookup_field = "slug"
 | 
				
			||||||
    ordering = ["name"]
 | 
					    ordering = ["name"]
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										18
									
								
								authentik/core/migrations/0019_application_group.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								authentik/core/migrations/0019_application_group.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					# Generated by Django 4.0.3 on 2022-04-02 19:48
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.db import migrations, models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migration(migrations.Migration):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dependencies = [
 | 
				
			||||||
 | 
					        ("authentik_core", "0018_auto_20210330_1345_squashed_0028_alter_token_intent"),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    operations = [
 | 
				
			||||||
 | 
					        migrations.AddField(
 | 
				
			||||||
 | 
					            model_name="application",
 | 
				
			||||||
 | 
					            name="group",
 | 
				
			||||||
 | 
					            field=models.TextField(blank=True, default=""),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
@ -267,6 +267,8 @@ class Application(PolicyBindingModel):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    name = models.TextField(help_text=_("Application's display Name."))
 | 
					    name = models.TextField(help_text=_("Application's display Name."))
 | 
				
			||||||
    slug = models.SlugField(help_text=_("Internal application name, used in URLs."), unique=True)
 | 
					    slug = models.SlugField(help_text=_("Internal application name, used in URLs."), unique=True)
 | 
				
			||||||
 | 
					    group = models.TextField(blank=True, default="")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    provider = models.OneToOneField(
 | 
					    provider = models.OneToOneField(
 | 
				
			||||||
        "Provider", null=True, blank=True, default=None, on_delete=models.SET_DEFAULT
 | 
					        "Provider", null=True, blank=True, default=None, on_delete=models.SET_DEFAULT
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
				
			|||||||
@ -84,6 +84,7 @@ class TestApplicationsAPI(APITestCase):
 | 
				
			|||||||
                        "pk": str(self.allowed.pk),
 | 
					                        "pk": str(self.allowed.pk),
 | 
				
			||||||
                        "name": "allowed",
 | 
					                        "name": "allowed",
 | 
				
			||||||
                        "slug": "allowed",
 | 
					                        "slug": "allowed",
 | 
				
			||||||
 | 
					                        "group": "",
 | 
				
			||||||
                        "provider": self.provider.pk,
 | 
					                        "provider": self.provider.pk,
 | 
				
			||||||
                        "provider_obj": {
 | 
					                        "provider_obj": {
 | 
				
			||||||
                            "assigned_application_name": "allowed",
 | 
					                            "assigned_application_name": "allowed",
 | 
				
			||||||
@ -131,6 +132,7 @@ class TestApplicationsAPI(APITestCase):
 | 
				
			|||||||
                        "pk": str(self.allowed.pk),
 | 
					                        "pk": str(self.allowed.pk),
 | 
				
			||||||
                        "name": "allowed",
 | 
					                        "name": "allowed",
 | 
				
			||||||
                        "slug": "allowed",
 | 
					                        "slug": "allowed",
 | 
				
			||||||
 | 
					                        "group": "",
 | 
				
			||||||
                        "provider": self.provider.pk,
 | 
					                        "provider": self.provider.pk,
 | 
				
			||||||
                        "provider_obj": {
 | 
					                        "provider_obj": {
 | 
				
			||||||
                            "assigned_application_name": "allowed",
 | 
					                            "assigned_application_name": "allowed",
 | 
				
			||||||
@ -157,6 +159,7 @@ class TestApplicationsAPI(APITestCase):
 | 
				
			|||||||
                        "meta_icon": None,
 | 
					                        "meta_icon": None,
 | 
				
			||||||
                        "meta_launch_url": "",
 | 
					                        "meta_launch_url": "",
 | 
				
			||||||
                        "meta_publisher": "",
 | 
					                        "meta_publisher": "",
 | 
				
			||||||
 | 
					                        "group": "",
 | 
				
			||||||
                        "name": "denied",
 | 
					                        "name": "denied",
 | 
				
			||||||
                        "pk": str(self.denied.pk),
 | 
					                        "pk": str(self.denied.pk),
 | 
				
			||||||
                        "policy_engine_mode": "any",
 | 
					                        "policy_engine_mode": "any",
 | 
				
			||||||
 | 
				
			|||||||
@ -19108,6 +19108,8 @@ components:
 | 
				
			|||||||
          type: string
 | 
					          type: string
 | 
				
			||||||
        policy_engine_mode:
 | 
					        policy_engine_mode:
 | 
				
			||||||
          $ref: '#/components/schemas/PolicyEngineMode'
 | 
					          $ref: '#/components/schemas/PolicyEngineMode'
 | 
				
			||||||
 | 
					        group:
 | 
				
			||||||
 | 
					          type: string
 | 
				
			||||||
      required:
 | 
					      required:
 | 
				
			||||||
      - launch_url
 | 
					      - launch_url
 | 
				
			||||||
      - meta_icon
 | 
					      - meta_icon
 | 
				
			||||||
@ -19142,6 +19144,8 @@ components:
 | 
				
			|||||||
          type: string
 | 
					          type: string
 | 
				
			||||||
        policy_engine_mode:
 | 
					        policy_engine_mode:
 | 
				
			||||||
          $ref: '#/components/schemas/PolicyEngineMode'
 | 
					          $ref: '#/components/schemas/PolicyEngineMode'
 | 
				
			||||||
 | 
					        group:
 | 
				
			||||||
 | 
					          type: string
 | 
				
			||||||
      required:
 | 
					      required:
 | 
				
			||||||
      - name
 | 
					      - name
 | 
				
			||||||
      - slug
 | 
					      - slug
 | 
				
			||||||
@ -26598,6 +26602,8 @@ components:
 | 
				
			|||||||
          type: string
 | 
					          type: string
 | 
				
			||||||
        policy_engine_mode:
 | 
					        policy_engine_mode:
 | 
				
			||||||
          $ref: '#/components/schemas/PolicyEngineMode'
 | 
					          $ref: '#/components/schemas/PolicyEngineMode'
 | 
				
			||||||
 | 
					        group:
 | 
				
			||||||
 | 
					          type: string
 | 
				
			||||||
    PatchedAuthenticateWebAuthnStageRequest:
 | 
					    PatchedAuthenticateWebAuthnStageRequest:
 | 
				
			||||||
      type: object
 | 
					      type: object
 | 
				
			||||||
      description: AuthenticateWebAuthnStage Serializer
 | 
					      description: AuthenticateWebAuthnStage Serializer
 | 
				
			||||||
 | 
				
			|||||||
@ -48,6 +48,7 @@ msgstr "(Format: hours=-1;minutes=-2;seconds=-3)."
 | 
				
			|||||||
#: src/elements/events/UserEvents.ts
 | 
					#: src/elements/events/UserEvents.ts
 | 
				
			||||||
#: src/elements/user/SessionList.ts
 | 
					#: src/elements/user/SessionList.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/groups/GroupListPage.ts
 | 
					#: src/pages/groups/GroupListPage.ts
 | 
				
			||||||
@ -2305,6 +2306,8 @@ msgstr "Zurück zur vorherigen Seite"
 | 
				
			|||||||
#~ msgid "Go to user interface"
 | 
					#~ msgid "Go to user interface"
 | 
				
			||||||
#~ msgstr "Zur Benutzeroberfläche"
 | 
					#~ msgstr "Zur Benutzeroberfläche"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/RuleForm.ts
 | 
					#: src/pages/events/RuleForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
@ -3538,6 +3541,10 @@ msgstr "Optionaler Wiederherstellungsablauf, der unten auf der Seite verlinkt is
 | 
				
			|||||||
msgid "Optional, comma-separated SubjectAlt Names."
 | 
					msgid "Optional, comma-separated SubjectAlt Names."
 | 
				
			||||||
msgstr "Optionale, durch Kommas getrennte SubjectAlt-Namen"
 | 
					msgstr "Optionale, durch Kommas getrennte SubjectAlt-Namen"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					msgid "Optionally enter a group name. Applications with identical groups are shown grouped together."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/stages/prompt/PromptForm.ts
 | 
					#: src/pages/stages/prompt/PromptForm.ts
 | 
				
			||||||
msgid "Optionally pre-fill the input value"
 | 
					msgid "Optionally pre-fill the input value"
 | 
				
			||||||
msgstr "Geben Sie optional den Eingabewert vor"
 | 
					msgstr "Geben Sie optional den Eingabewert vor"
 | 
				
			||||||
@ -4605,7 +4612,6 @@ msgstr "Einmalbenutzung"
 | 
				
			|||||||
#~ msgstr "Pfad-Regex überspringen"
 | 
					#~ msgstr "Pfad-Regex überspringen"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/applications/ApplicationForm.ts
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					 | 
				
			||||||
#: src/pages/flows/FlowForm.ts
 | 
					#: src/pages/flows/FlowForm.ts
 | 
				
			||||||
#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
					#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
				
			||||||
#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
					#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
				
			||||||
 | 
				
			|||||||
@ -32,6 +32,7 @@ msgstr "(Format: hours=1;minutes=2;seconds=3)."
 | 
				
			|||||||
#: src/elements/events/UserEvents.ts
 | 
					#: src/elements/events/UserEvents.ts
 | 
				
			||||||
#: src/elements/user/SessionList.ts
 | 
					#: src/elements/user/SessionList.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/groups/GroupListPage.ts
 | 
					#: src/pages/groups/GroupListPage.ts
 | 
				
			||||||
@ -2343,6 +2344,8 @@ msgstr "Go to previous page"
 | 
				
			|||||||
#~ msgid "Go to user interface"
 | 
					#~ msgid "Go to user interface"
 | 
				
			||||||
#~ msgstr "Go to user interface"
 | 
					#~ msgstr "Go to user interface"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/RuleForm.ts
 | 
					#: src/pages/events/RuleForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
@ -3597,6 +3600,10 @@ msgstr "Optional recovery flow, which is linked at the bottom of the page."
 | 
				
			|||||||
msgid "Optional, comma-separated SubjectAlt Names."
 | 
					msgid "Optional, comma-separated SubjectAlt Names."
 | 
				
			||||||
msgstr "Optional, comma-separated SubjectAlt Names."
 | 
					msgstr "Optional, comma-separated SubjectAlt Names."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					msgid "Optionally enter a group name. Applications with identical groups are shown grouped together."
 | 
				
			||||||
 | 
					msgstr "Optionally enter a group name. Applications with identical groups are shown grouped together."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/stages/prompt/PromptForm.ts
 | 
					#: src/pages/stages/prompt/PromptForm.ts
 | 
				
			||||||
msgid "Optionally pre-fill the input value"
 | 
					msgid "Optionally pre-fill the input value"
 | 
				
			||||||
msgstr "Optionally pre-fill the input value"
 | 
					msgstr "Optionally pre-fill the input value"
 | 
				
			||||||
@ -4694,7 +4701,6 @@ msgstr "Single use"
 | 
				
			|||||||
#~ msgstr "Skip path regex"
 | 
					#~ msgstr "Skip path regex"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/applications/ApplicationForm.ts
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					 | 
				
			||||||
#: src/pages/flows/FlowForm.ts
 | 
					#: src/pages/flows/FlowForm.ts
 | 
				
			||||||
#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
					#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
				
			||||||
#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
					#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
				
			||||||
 | 
				
			|||||||
@ -35,6 +35,7 @@ msgstr "(Formato: horas = 1; minutos = 2; segundos = 3)."
 | 
				
			|||||||
#: src/elements/events/UserEvents.ts
 | 
					#: src/elements/events/UserEvents.ts
 | 
				
			||||||
#: src/elements/user/SessionList.ts
 | 
					#: src/elements/user/SessionList.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/groups/GroupListPage.ts
 | 
					#: src/pages/groups/GroupListPage.ts
 | 
				
			||||||
@ -2296,6 +2297,8 @@ msgstr "Ir a la página anterior"
 | 
				
			|||||||
#~ msgid "Go to user interface"
 | 
					#~ msgid "Go to user interface"
 | 
				
			||||||
#~ msgstr "Ir a la interfaz de usuario"
 | 
					#~ msgstr "Ir a la interfaz de usuario"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/RuleForm.ts
 | 
					#: src/pages/events/RuleForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
@ -3531,6 +3534,10 @@ msgstr "Flujo de recuperación opcional, que se enlaza en la parte inferior de l
 | 
				
			|||||||
msgid "Optional, comma-separated SubjectAlt Names."
 | 
					msgid "Optional, comma-separated SubjectAlt Names."
 | 
				
			||||||
msgstr "Nombres Alt de asunto separados por comas opcionales."
 | 
					msgstr "Nombres Alt de asunto separados por comas opcionales."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					msgid "Optionally enter a group name. Applications with identical groups are shown grouped together."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/stages/prompt/PromptForm.ts
 | 
					#: src/pages/stages/prompt/PromptForm.ts
 | 
				
			||||||
msgid "Optionally pre-fill the input value"
 | 
					msgid "Optionally pre-fill the input value"
 | 
				
			||||||
msgstr "Rellenar previamente el valor de entrada opcionalmente"
 | 
					msgstr "Rellenar previamente el valor de entrada opcionalmente"
 | 
				
			||||||
@ -4598,7 +4605,6 @@ msgstr "De un solo uso"
 | 
				
			|||||||
#~ msgstr "Omitir expresión regular de ruta"
 | 
					#~ msgstr "Omitir expresión regular de ruta"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/applications/ApplicationForm.ts
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					 | 
				
			||||||
#: src/pages/flows/FlowForm.ts
 | 
					#: src/pages/flows/FlowForm.ts
 | 
				
			||||||
#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
					#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
				
			||||||
#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
					#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
				
			||||||
 | 
				
			|||||||
@ -38,6 +38,7 @@ msgstr ""
 | 
				
			|||||||
#: src/elements/events/UserEvents.ts
 | 
					#: src/elements/events/UserEvents.ts
 | 
				
			||||||
#: src/elements/user/SessionList.ts
 | 
					#: src/elements/user/SessionList.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/groups/GroupListPage.ts
 | 
					#: src/pages/groups/GroupListPage.ts
 | 
				
			||||||
@ -2321,6 +2322,8 @@ msgstr "Aller à la page précédente"
 | 
				
			|||||||
#~ msgid "Go to user interface"
 | 
					#~ msgid "Go to user interface"
 | 
				
			||||||
#~ msgstr "Aller à l'interface utilisateu"
 | 
					#~ msgstr "Aller à l'interface utilisateu"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/RuleForm.ts
 | 
					#: src/pages/events/RuleForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
@ -3565,6 +3568,10 @@ msgstr "Flux de récupération facultatif, qui sera accessible en bas de page."
 | 
				
			|||||||
msgid "Optional, comma-separated SubjectAlt Names."
 | 
					msgid "Optional, comma-separated SubjectAlt Names."
 | 
				
			||||||
msgstr "Liste optionnelle de noms alternatifs (SubjetAlt Names), séparés par des virgules."
 | 
					msgstr "Liste optionnelle de noms alternatifs (SubjetAlt Names), séparés par des virgules."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					msgid "Optionally enter a group name. Applications with identical groups are shown grouped together."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/stages/prompt/PromptForm.ts
 | 
					#: src/pages/stages/prompt/PromptForm.ts
 | 
				
			||||||
msgid "Optionally pre-fill the input value"
 | 
					msgid "Optionally pre-fill the input value"
 | 
				
			||||||
msgstr "Pré-remplir la valeur du champ (optionnel)"
 | 
					msgstr "Pré-remplir la valeur du champ (optionnel)"
 | 
				
			||||||
@ -4648,7 +4655,6 @@ msgstr "Usage unique"
 | 
				
			|||||||
#~ msgstr "Regex chemins exclus"
 | 
					#~ msgstr "Regex chemins exclus"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/applications/ApplicationForm.ts
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					 | 
				
			||||||
#: src/pages/flows/FlowForm.ts
 | 
					#: src/pages/flows/FlowForm.ts
 | 
				
			||||||
#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
					#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
				
			||||||
#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
					#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
				
			||||||
 | 
				
			|||||||
@ -35,6 +35,7 @@ msgstr "(Format: hours=1;minutes=2;seconds=3)."
 | 
				
			|||||||
#: src/elements/events/UserEvents.ts
 | 
					#: src/elements/events/UserEvents.ts
 | 
				
			||||||
#: src/elements/user/SessionList.ts
 | 
					#: src/elements/user/SessionList.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/groups/GroupListPage.ts
 | 
					#: src/pages/groups/GroupListPage.ts
 | 
				
			||||||
@ -2293,6 +2294,8 @@ msgstr "Wróć do poprzedniej strony"
 | 
				
			|||||||
#~ msgid "Go to user interface"
 | 
					#~ msgid "Go to user interface"
 | 
				
			||||||
#~ msgstr "Przejdź do interfejsu użytkownika"
 | 
					#~ msgstr "Przejdź do interfejsu użytkownika"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/RuleForm.ts
 | 
					#: src/pages/events/RuleForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
@ -3528,6 +3531,10 @@ msgstr "Opcjonalny przepływ odzyskiwania, do którego link znajduje się na dol
 | 
				
			|||||||
msgid "Optional, comma-separated SubjectAlt Names."
 | 
					msgid "Optional, comma-separated SubjectAlt Names."
 | 
				
			||||||
msgstr "Opcjonalne, rozdzielone przecinkami nazwy SubjectAlt."
 | 
					msgstr "Opcjonalne, rozdzielone przecinkami nazwy SubjectAlt."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					msgid "Optionally enter a group name. Applications with identical groups are shown grouped together."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/stages/prompt/PromptForm.ts
 | 
					#: src/pages/stages/prompt/PromptForm.ts
 | 
				
			||||||
msgid "Optionally pre-fill the input value"
 | 
					msgid "Optionally pre-fill the input value"
 | 
				
			||||||
msgstr "Opcjonalnie wstępnie wypełnij wartość wejściową"
 | 
					msgstr "Opcjonalnie wstępnie wypełnij wartość wejściową"
 | 
				
			||||||
@ -4595,7 +4602,6 @@ msgstr "Jednorazowego użytku"
 | 
				
			|||||||
#~ msgstr "Pomiń path regex"
 | 
					#~ msgstr "Pomiń path regex"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/applications/ApplicationForm.ts
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					 | 
				
			||||||
#: src/pages/flows/FlowForm.ts
 | 
					#: src/pages/flows/FlowForm.ts
 | 
				
			||||||
#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
					#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
				
			||||||
#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
					#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
				
			||||||
 | 
				
			|||||||
@ -32,6 +32,7 @@ msgstr ""
 | 
				
			|||||||
#: src/elements/events/UserEvents.ts
 | 
					#: src/elements/events/UserEvents.ts
 | 
				
			||||||
#: src/elements/user/SessionList.ts
 | 
					#: src/elements/user/SessionList.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/groups/GroupListPage.ts
 | 
					#: src/pages/groups/GroupListPage.ts
 | 
				
			||||||
@ -2329,6 +2330,8 @@ msgstr ""
 | 
				
			|||||||
#~ msgid "Go to user interface"
 | 
					#~ msgid "Go to user interface"
 | 
				
			||||||
#~ msgstr ""
 | 
					#~ msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/RuleForm.ts
 | 
					#: src/pages/events/RuleForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
@ -3579,6 +3582,10 @@ msgstr ""
 | 
				
			|||||||
msgid "Optional, comma-separated SubjectAlt Names."
 | 
					msgid "Optional, comma-separated SubjectAlt Names."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					msgid "Optionally enter a group name. Applications with identical groups are shown grouped together."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/stages/prompt/PromptForm.ts
 | 
					#: src/pages/stages/prompt/PromptForm.ts
 | 
				
			||||||
msgid "Optionally pre-fill the input value"
 | 
					msgid "Optionally pre-fill the input value"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@ -4674,7 +4681,6 @@ msgstr ""
 | 
				
			|||||||
#~ msgstr ""
 | 
					#~ msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/applications/ApplicationForm.ts
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					 | 
				
			||||||
#: src/pages/flows/FlowForm.ts
 | 
					#: src/pages/flows/FlowForm.ts
 | 
				
			||||||
#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
					#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
				
			||||||
#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
					#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
				
			||||||
 | 
				
			|||||||
@ -35,6 +35,7 @@ msgstr "(Biçim: saat=1; dakika=2; saniye= 3)."
 | 
				
			|||||||
#: src/elements/events/UserEvents.ts
 | 
					#: src/elements/events/UserEvents.ts
 | 
				
			||||||
#: src/elements/user/SessionList.ts
 | 
					#: src/elements/user/SessionList.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/groups/GroupListPage.ts
 | 
					#: src/pages/groups/GroupListPage.ts
 | 
				
			||||||
@ -2296,6 +2297,8 @@ msgstr "Önceki sayfaya git"
 | 
				
			|||||||
#~ msgid "Go to user interface"
 | 
					#~ msgid "Go to user interface"
 | 
				
			||||||
#~ msgstr "Kullanıcı arayüzüne git"
 | 
					#~ msgstr "Kullanıcı arayüzüne git"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/RuleForm.ts
 | 
					#: src/pages/events/RuleForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
@ -3533,6 +3536,10 @@ msgstr "Sayfanın alt kısmında bağlı olan isteğe bağlı kurtarma akışı.
 | 
				
			|||||||
msgid "Optional, comma-separated SubjectAlt Names."
 | 
					msgid "Optional, comma-separated SubjectAlt Names."
 | 
				
			||||||
msgstr "İsteğe bağlı, virgülle ayrılmış SubjectAlt Adları."
 | 
					msgstr "İsteğe bağlı, virgülle ayrılmış SubjectAlt Adları."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					msgid "Optionally enter a group name. Applications with identical groups are shown grouped together."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/stages/prompt/PromptForm.ts
 | 
					#: src/pages/stages/prompt/PromptForm.ts
 | 
				
			||||||
msgid "Optionally pre-fill the input value"
 | 
					msgid "Optionally pre-fill the input value"
 | 
				
			||||||
msgstr "İsteğe bağlı olarak giriş değerini önceden doldurun"
 | 
					msgstr "İsteğe bağlı olarak giriş değerini önceden doldurun"
 | 
				
			||||||
@ -4600,7 +4607,6 @@ msgstr "Tek kullanımlık"
 | 
				
			|||||||
#~ msgstr "Yol regex atla"
 | 
					#~ msgstr "Yol regex atla"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/applications/ApplicationForm.ts
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					 | 
				
			||||||
#: src/pages/flows/FlowForm.ts
 | 
					#: src/pages/flows/FlowForm.ts
 | 
				
			||||||
#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
					#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
				
			||||||
#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
					#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
				
			||||||
 | 
				
			|||||||
@ -37,6 +37,7 @@ msgstr "(格式:hours=1;minutes=2;seconds=3)。"
 | 
				
			|||||||
#: src/elements/events/UserEvents.ts
 | 
					#: src/elements/events/UserEvents.ts
 | 
				
			||||||
#: src/elements/user/SessionList.ts
 | 
					#: src/elements/user/SessionList.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/groups/GroupListPage.ts
 | 
					#: src/pages/groups/GroupListPage.ts
 | 
				
			||||||
@ -2269,6 +2270,8 @@ msgstr "前往上一页"
 | 
				
			|||||||
#~ msgid "Go to user interface"
 | 
					#~ msgid "Go to user interface"
 | 
				
			||||||
#~ msgstr "前往用户界面"
 | 
					#~ msgstr "前往用户界面"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/RuleForm.ts
 | 
					#: src/pages/events/RuleForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
@ -3490,6 +3493,10 @@ msgstr "可选的恢复流程,链接在页面底部。"
 | 
				
			|||||||
msgid "Optional, comma-separated SubjectAlt Names."
 | 
					msgid "Optional, comma-separated SubjectAlt Names."
 | 
				
			||||||
msgstr "可选,逗号分隔的替代名称。"
 | 
					msgstr "可选,逗号分隔的替代名称。"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					msgid "Optionally enter a group name. Applications with identical groups are shown grouped together."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/stages/prompt/PromptForm.ts
 | 
					#: src/pages/stages/prompt/PromptForm.ts
 | 
				
			||||||
msgid "Optionally pre-fill the input value"
 | 
					msgid "Optionally pre-fill the input value"
 | 
				
			||||||
msgstr "可选,预先填充输入值"
 | 
					msgstr "可选,预先填充输入值"
 | 
				
			||||||
@ -4537,7 +4544,6 @@ msgstr "一次性使用"
 | 
				
			|||||||
#~ msgstr "跳过路径正则表达式"
 | 
					#~ msgstr "跳过路径正则表达式"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/applications/ApplicationForm.ts
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					 | 
				
			||||||
#: src/pages/flows/FlowForm.ts
 | 
					#: src/pages/flows/FlowForm.ts
 | 
				
			||||||
#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
					#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
				
			||||||
#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
					#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
				
			||||||
 | 
				
			|||||||
@ -37,6 +37,7 @@ msgstr "(格式: hours=1;minutes=2;seconds=3)."
 | 
				
			|||||||
#: src/elements/events/UserEvents.ts
 | 
					#: src/elements/events/UserEvents.ts
 | 
				
			||||||
#: src/elements/user/SessionList.ts
 | 
					#: src/elements/user/SessionList.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/groups/GroupListPage.ts
 | 
					#: src/pages/groups/GroupListPage.ts
 | 
				
			||||||
@ -2269,6 +2270,8 @@ msgstr "转到上一页"
 | 
				
			|||||||
#~ msgid "Go to user interface"
 | 
					#~ msgid "Go to user interface"
 | 
				
			||||||
#~ msgstr "转到用户界面"
 | 
					#~ msgstr "转到用户界面"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/RuleForm.ts
 | 
					#: src/pages/events/RuleForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
@ -3490,6 +3493,10 @@ msgstr "可选的恢复流程,链接在页面底部。"
 | 
				
			|||||||
msgid "Optional, comma-separated SubjectAlt Names."
 | 
					msgid "Optional, comma-separated SubjectAlt Names."
 | 
				
			||||||
msgstr "可选,逗号分隔的 subjectAlt 名称。"
 | 
					msgstr "可选,逗号分隔的 subjectAlt 名称。"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					msgid "Optionally enter a group name. Applications with identical groups are shown grouped together."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/stages/prompt/PromptForm.ts
 | 
					#: src/pages/stages/prompt/PromptForm.ts
 | 
				
			||||||
msgid "Optionally pre-fill the input value"
 | 
					msgid "Optionally pre-fill the input value"
 | 
				
			||||||
msgstr "(可选)预先填充输入值"
 | 
					msgstr "(可选)预先填充输入值"
 | 
				
			||||||
@ -4537,7 +4544,6 @@ msgstr "一次性使用"
 | 
				
			|||||||
#~ msgstr "跳过路径正则表达式"
 | 
					#~ msgstr "跳过路径正则表达式"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/applications/ApplicationForm.ts
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					 | 
				
			||||||
#: src/pages/flows/FlowForm.ts
 | 
					#: src/pages/flows/FlowForm.ts
 | 
				
			||||||
#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
					#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
				
			||||||
#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
					#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
				
			||||||
 | 
				
			|||||||
@ -37,6 +37,7 @@ msgstr "(格式: hours=1;minutes=2;seconds=3)."
 | 
				
			|||||||
#: src/elements/events/UserEvents.ts
 | 
					#: src/elements/events/UserEvents.ts
 | 
				
			||||||
#: src/elements/user/SessionList.ts
 | 
					#: src/elements/user/SessionList.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/events/EventListPage.ts
 | 
					#: src/pages/events/EventListPage.ts
 | 
				
			||||||
#: src/pages/groups/GroupListPage.ts
 | 
					#: src/pages/groups/GroupListPage.ts
 | 
				
			||||||
@ -2269,6 +2270,8 @@ msgstr "转到上一页"
 | 
				
			|||||||
#~ msgid "Go to user interface"
 | 
					#~ msgid "Go to user interface"
 | 
				
			||||||
#~ msgstr "转到用户界面"
 | 
					#~ msgstr "转到用户界面"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationListPage.ts
 | 
				
			||||||
#: src/pages/events/RuleForm.ts
 | 
					#: src/pages/events/RuleForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
#: src/pages/policies/PolicyBindingForm.ts
 | 
					#: src/pages/policies/PolicyBindingForm.ts
 | 
				
			||||||
@ -3490,6 +3493,10 @@ msgstr "可选的恢复流程,链接在页面底部。"
 | 
				
			|||||||
msgid "Optional, comma-separated SubjectAlt Names."
 | 
					msgid "Optional, comma-separated SubjectAlt Names."
 | 
				
			||||||
msgstr "可选,逗号分隔的 subjectAlt 名称。"
 | 
					msgstr "可选,逗号分隔的 subjectAlt 名称。"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
 | 
					msgid "Optionally enter a group name. Applications with identical groups are shown grouped together."
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/stages/prompt/PromptForm.ts
 | 
					#: src/pages/stages/prompt/PromptForm.ts
 | 
				
			||||||
msgid "Optionally pre-fill the input value"
 | 
					msgid "Optionally pre-fill the input value"
 | 
				
			||||||
msgstr "(可选)预先填充输入值"
 | 
					msgstr "(可选)预先填充输入值"
 | 
				
			||||||
@ -4537,7 +4544,6 @@ msgstr "一次性使用"
 | 
				
			|||||||
#~ msgstr "跳过路径正则表达式"
 | 
					#~ msgstr "跳过路径正则表达式"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: src/pages/applications/ApplicationForm.ts
 | 
					#: src/pages/applications/ApplicationForm.ts
 | 
				
			||||||
#: src/pages/applications/ApplicationListPage.ts
 | 
					 | 
				
			||||||
#: src/pages/flows/FlowForm.ts
 | 
					#: src/pages/flows/FlowForm.ts
 | 
				
			||||||
#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
					#: src/pages/sources/ldap/LDAPSourceForm.ts
 | 
				
			||||||
#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
					#: src/pages/sources/oauth/OAuthSourceForm.ts
 | 
				
			||||||
 | 
				
			|||||||
@ -121,6 +121,16 @@ export class ApplicationForm extends ModelForm<Application, string> {
 | 
				
			|||||||
                />
 | 
					                />
 | 
				
			||||||
                <p class="pf-c-form__helper-text">${t`Internal application name, used in URLs.`}</p>
 | 
					                <p class="pf-c-form__helper-text">${t`Internal application name, used in URLs.`}</p>
 | 
				
			||||||
            </ak-form-element-horizontal>
 | 
					            </ak-form-element-horizontal>
 | 
				
			||||||
 | 
					            <ak-form-element-horizontal label=${t`Group`} name="group">
 | 
				
			||||||
 | 
					                <input
 | 
				
			||||||
 | 
					                    type="text"
 | 
				
			||||||
 | 
					                    value="${ifDefined(this.instance?.group)}"
 | 
				
			||||||
 | 
					                    class="pf-c-form-control"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					                <p class="pf-c-form__helper-text">
 | 
				
			||||||
 | 
					                    ${t`Optionally enter a group name. Applications with identical groups are shown grouped together.`}
 | 
				
			||||||
 | 
					                </p>
 | 
				
			||||||
 | 
					            </ak-form-element-horizontal>
 | 
				
			||||||
            <ak-form-element-horizontal label=${t`Provider`} name="provider">
 | 
					            <ak-form-element-horizontal label=${t`Provider`} name="provider">
 | 
				
			||||||
                <select class="pf-c-form-control">
 | 
					                <select class="pf-c-form-control">
 | 
				
			||||||
                    <option value="" ?selected=${this.instance?.provider === undefined}>
 | 
					                    <option value="" ?selected=${this.instance?.provider === undefined}>
 | 
				
			||||||
 | 
				
			|||||||
@ -73,7 +73,7 @@ export class ApplicationListPage extends TablePage<Application> {
 | 
				
			|||||||
        return [
 | 
					        return [
 | 
				
			||||||
            new TableColumn(""),
 | 
					            new TableColumn(""),
 | 
				
			||||||
            new TableColumn(t`Name`, "name"),
 | 
					            new TableColumn(t`Name`, "name"),
 | 
				
			||||||
            new TableColumn(t`Slug`, "slug"),
 | 
					            new TableColumn(t`Group`, "group"),
 | 
				
			||||||
            new TableColumn(t`Provider`),
 | 
					            new TableColumn(t`Provider`),
 | 
				
			||||||
            new TableColumn(t`Provider Type`),
 | 
					            new TableColumn(t`Provider Type`),
 | 
				
			||||||
            new TableColumn(t`Actions`),
 | 
					            new TableColumn(t`Actions`),
 | 
				
			||||||
@ -135,7 +135,7 @@ export class ApplicationListPage extends TablePage<Application> {
 | 
				
			|||||||
                <div>${item.name}</div>
 | 
					                <div>${item.name}</div>
 | 
				
			||||||
                ${item.metaPublisher ? html`<small>${item.metaPublisher}</small>` : html``}
 | 
					                ${item.metaPublisher ? html`<small>${item.metaPublisher}</small>` : html``}
 | 
				
			||||||
            </a>`,
 | 
					            </a>`,
 | 
				
			||||||
            html`<code>${item.slug}</code>`,
 | 
					            html`${item.group || t`-`}`,
 | 
				
			||||||
            item.provider
 | 
					            item.provider
 | 
				
			||||||
                ? html`<a href="#/core/providers/${item.providerObj?.pk}">
 | 
					                ? html`<a href="#/core/providers/${item.providerObj?.pk}">
 | 
				
			||||||
                      ${item.providerObj?.name}
 | 
					                      ${item.providerObj?.name}
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,7 @@ import PFContent from "@patternfly/patternfly/components/Content/content.css";
 | 
				
			|||||||
import PFEmptyState from "@patternfly/patternfly/components/EmptyState/empty-state.css";
 | 
					import PFEmptyState from "@patternfly/patternfly/components/EmptyState/empty-state.css";
 | 
				
			||||||
import PFPage from "@patternfly/patternfly/components/Page/page.css";
 | 
					import PFPage from "@patternfly/patternfly/components/Page/page.css";
 | 
				
			||||||
import PFGallery from "@patternfly/patternfly/layouts/Gallery/gallery.css";
 | 
					import PFGallery from "@patternfly/patternfly/layouts/Gallery/gallery.css";
 | 
				
			||||||
 | 
					import PFGrid from "@patternfly/patternfly/layouts/Grid/grid.css";
 | 
				
			||||||
import PFBase from "@patternfly/patternfly/patternfly-base.css";
 | 
					import PFBase from "@patternfly/patternfly/patternfly-base.css";
 | 
				
			||||||
import PFDisplay from "@patternfly/patternfly/utilities/Display/display.css";
 | 
					import PFDisplay from "@patternfly/patternfly/utilities/Display/display.css";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -20,7 +21,7 @@ import { AKResponse } from "../api/Client";
 | 
				
			|||||||
import { DEFAULT_CONFIG } from "../api/Config";
 | 
					import { DEFAULT_CONFIG } from "../api/Config";
 | 
				
			||||||
import { UIConfig, uiConfig } from "../common/config";
 | 
					import { UIConfig, uiConfig } from "../common/config";
 | 
				
			||||||
import { getURLParam, updateURLParams } from "../elements/router/RouteMatch";
 | 
					import { getURLParam, updateURLParams } from "../elements/router/RouteMatch";
 | 
				
			||||||
import { loading } from "../utils";
 | 
					import { groupBy, loading } from "../utils";
 | 
				
			||||||
import "./LibraryApplication";
 | 
					import "./LibraryApplication";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@customElement("ak-library")
 | 
					@customElement("ak-library")
 | 
				
			||||||
@ -41,7 +42,7 @@ export class LibraryPage extends LitElement {
 | 
				
			|||||||
        new CoreApi(DEFAULT_CONFIG).coreApplicationsList({}).then((apps) => {
 | 
					        new CoreApi(DEFAULT_CONFIG).coreApplicationsList({}).then((apps) => {
 | 
				
			||||||
            this.apps = apps;
 | 
					            this.apps = apps;
 | 
				
			||||||
            this.fuse = new Fuse(apps.results, {
 | 
					            this.fuse = new Fuse(apps.results, {
 | 
				
			||||||
                keys: ["slug", "name", "metaDescription", "metaPublisher"],
 | 
					                keys: ["slug", "name", "metaDescription", "metaPublisher", "group"],
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            if (!this.fuse || !this.query) return;
 | 
					            if (!this.fuse || !this.query) return;
 | 
				
			||||||
            const matchingApps = this.fuse.search(this.query);
 | 
					            const matchingApps = this.fuse.search(this.query);
 | 
				
			||||||
@ -55,7 +56,8 @@ export class LibraryPage extends LitElement {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static get styles(): CSSResult[] {
 | 
					    static get styles(): CSSResult[] {
 | 
				
			||||||
        return [PFBase, PFDisplay, PFEmptyState, PFPage, PFContent, PFGallery, AKGlobal].concat(css`
 | 
					        return [PFBase, PFDisplay, PFEmptyState, PFPage, PFContent, PFGrid, PFGallery, AKGlobal]
 | 
				
			||||||
 | 
					            .concat(css`
 | 
				
			||||||
            :host,
 | 
					            :host,
 | 
				
			||||||
            main {
 | 
					            main {
 | 
				
			||||||
                padding: 3% 5%;
 | 
					                padding: 3% 5%;
 | 
				
			||||||
@ -80,6 +82,10 @@ export class LibraryPage extends LitElement {
 | 
				
			|||||||
            .pf-c-page__main-section {
 | 
					            .pf-c-page__main-section {
 | 
				
			||||||
                background-color: transparent;
 | 
					                background-color: transparent;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            .app-group-header {
 | 
				
			||||||
 | 
					                margin-bottom: 1em;
 | 
				
			||||||
 | 
					                margin-top: 1.2em;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        `);
 | 
					        `);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -95,29 +101,43 @@ export class LibraryPage extends LitElement {
 | 
				
			|||||||
        </div>`;
 | 
					        </div>`;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    renderApps(config: UIConfig): TemplateResult {
 | 
					    getApps(): [string, Application[]][] {
 | 
				
			||||||
        return html`<div class="pf-l-gallery pf-m-gutter">
 | 
					        return groupBy(
 | 
				
			||||||
            ${this.apps?.results
 | 
					            this.apps?.results.filter((app) => {
 | 
				
			||||||
                .filter((app) => {
 | 
					                if (app.launchUrl) {
 | 
				
			||||||
                    if (app.launchUrl) {
 | 
					                    // If the launch URL is a full URL, only show with http or https
 | 
				
			||||||
                        // If the launch URL is a full URL, only show with http or https
 | 
					                    if (app.launchUrl.indexOf("://") !== -1) {
 | 
				
			||||||
                        if (app.launchUrl.indexOf("://") !== -1) {
 | 
					                        return app.launchUrl.startsWith("http");
 | 
				
			||||||
                            return app.launchUrl.startsWith("http");
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        // If the URL doesn't include a protocol, assume its a relative path
 | 
					 | 
				
			||||||
                        return true;
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    return false;
 | 
					                    // If the URL doesn't include a protocol, assume its a relative path
 | 
				
			||||||
                })
 | 
					                    return true;
 | 
				
			||||||
                .map(
 | 
					                }
 | 
				
			||||||
                    (app) =>
 | 
					                return false;
 | 
				
			||||||
                        html`<ak-library-app
 | 
					            }) || [],
 | 
				
			||||||
 | 
					            (app) => app.group || "",
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    renderApps(config: UIConfig): TemplateResult {
 | 
				
			||||||
 | 
					        return html`${this.getApps().map(([group, apps]) => {
 | 
				
			||||||
 | 
					            return html`
 | 
				
			||||||
 | 
					                <div class="pf-c-content app-group-header">
 | 
				
			||||||
 | 
					                    <h2>${group}</h2>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div
 | 
				
			||||||
 | 
					                    class="pf-l-grid pf-m-gutter pf-m-all-6-col-on-sm pf-m-all-4-col-on-md pf-m-all-5-col-on-lg pf-m-all-3-col-on-xl"
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                    ${apps.map((app) => {
 | 
				
			||||||
 | 
					                        return html`<ak-library-app
 | 
				
			||||||
 | 
					                            class="pf-l-grid__item"
 | 
				
			||||||
                            .application=${app}
 | 
					                            .application=${app}
 | 
				
			||||||
                            background=${config.color.cardBackground}
 | 
					                            background=${config.color.cardBackground}
 | 
				
			||||||
                            ?selected=${app.slug === this.selectedApp?.slug}
 | 
					                            ?selected=${app.slug === this.selectedApp?.slug}
 | 
				
			||||||
                        ></ak-library-app>`,
 | 
					                        ></ak-library-app>`;
 | 
				
			||||||
                )}
 | 
					                    })}
 | 
				
			||||||
        </div>`;
 | 
					                </div>
 | 
				
			||||||
 | 
					            `;
 | 
				
			||||||
 | 
					        })}`;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    render(): TemplateResult {
 | 
					    render(): TemplateResult {
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,10 @@ slug: "2022.4"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## New features
 | 
					## New features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Application Grouping
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Applications can now be grouped together to better organise connected applications in the user dashboard.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- JWT authentication for `client_credentials` grants
 | 
					- JWT authentication for `client_credentials` grants
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Providers can now be configured to accept JWTs signed by configured certificates, which makes it a lot easier to services access to authentik, when an existing machine/service identity is provided (for example, this can be used to let Kubernetes Pods authenticate themselves to authentik via their service account)
 | 
					  Providers can now be configured to accept JWTs signed by configured certificates, which makes it a lot easier to services access to authentik, when an existing machine/service identity is provided (for example, this can be used to let Kubernetes Pods authenticate themselves to authentik via their service account)
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user