Compare commits
	
		
			1 Commits
		
	
	
		
			esbuild-ts
			...
			safari-cra
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2e473c16fa | 
@ -1,5 +1,5 @@
 | 
			
		||||
[bumpversion]
 | 
			
		||||
current_version = 2025.4.1
 | 
			
		||||
current_version = 2025.2.4
 | 
			
		||||
tag = True
 | 
			
		||||
commit = True
 | 
			
		||||
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(?:-(?P<rc_t>[a-zA-Z-]+)(?P<rc_n>[1-9]\\d*))?
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							@ -118,15 +118,3 @@ updates:
 | 
			
		||||
      prefix: "core:"
 | 
			
		||||
    labels:
 | 
			
		||||
      - dependencies
 | 
			
		||||
  - package-ecosystem: docker-compose
 | 
			
		||||
    directories:
 | 
			
		||||
      # - /scripts # Maybe
 | 
			
		||||
      - /tests/e2e
 | 
			
		||||
    schedule:
 | 
			
		||||
      interval: daily
 | 
			
		||||
      time: "04:00"
 | 
			
		||||
    open-pull-requests-limit: 10
 | 
			
		||||
    commit-message:
 | 
			
		||||
      prefix: "core:"
 | 
			
		||||
    labels:
 | 
			
		||||
      - dependencies
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								.github/workflows/ci-main.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.github/workflows/ci-main.yml
									
									
									
									
										vendored
									
									
								
							@ -70,18 +70,22 @@ jobs:
 | 
			
		||||
      - name: checkout stable
 | 
			
		||||
        run: |
 | 
			
		||||
          # Copy current, latest config to local
 | 
			
		||||
          # Temporarly comment the .github backup while migrating to uv
 | 
			
		||||
          cp authentik/lib/default.yml local.env.yml
 | 
			
		||||
          cp -R .github ..
 | 
			
		||||
          # cp -R .github ..
 | 
			
		||||
          cp -R scripts ..
 | 
			
		||||
          git checkout $(git tag --sort=version:refname | grep '^version/' | grep -vE -- '-rc[0-9]+$' | tail -n1)
 | 
			
		||||
          rm -rf .github/ scripts/
 | 
			
		||||
          mv ../.github ../scripts .
 | 
			
		||||
          # rm -rf .github/ scripts/
 | 
			
		||||
          # mv ../.github ../scripts .
 | 
			
		||||
          rm -rf scripts/
 | 
			
		||||
          mv ../scripts .
 | 
			
		||||
      - name: Setup authentik env (stable)
 | 
			
		||||
        uses: ./.github/actions/setup
 | 
			
		||||
        with:
 | 
			
		||||
          postgresql_version: ${{ matrix.psql }}
 | 
			
		||||
        continue-on-error: true
 | 
			
		||||
      - name: run migrations to stable
 | 
			
		||||
        run: uv run python -m lifecycle.migrate
 | 
			
		||||
        run: poetry run python -m lifecycle.migrate
 | 
			
		||||
      - name: checkout current code
 | 
			
		||||
        run: |
 | 
			
		||||
          set -x
 | 
			
		||||
@ -200,7 +204,7 @@ jobs:
 | 
			
		||||
        uses: actions/cache@v4
 | 
			
		||||
        with:
 | 
			
		||||
          path: web/dist
 | 
			
		||||
          key: ${{ runner.os }}-web-${{ hashFiles('web/package-lock.json', 'web/src/**', 'web/packages/sfe/src/**') }}-b
 | 
			
		||||
          key: ${{ runner.os }}-web-${{ hashFiles('web/package-lock.json', 'web/src/**') }}
 | 
			
		||||
      - name: prepare web ui
 | 
			
		||||
        if: steps.cache-web.outputs.cache-hit != 'true'
 | 
			
		||||
        working-directory: web
 | 
			
		||||
@ -208,7 +212,6 @@ jobs:
 | 
			
		||||
          npm ci
 | 
			
		||||
          make -C .. gen-client-ts
 | 
			
		||||
          npm run build
 | 
			
		||||
          npm run build:sfe
 | 
			
		||||
      - name: run e2e
 | 
			
		||||
        run: |
 | 
			
		||||
          uv run coverage run manage.py test ${{ matrix.job.glob }}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/ci-outpost.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/ci-outpost.yml
									
									
									
									
										vendored
									
									
								
							@ -29,7 +29,7 @@ jobs:
 | 
			
		||||
      - name: Generate API
 | 
			
		||||
        run: make gen-client-go
 | 
			
		||||
      - name: golangci-lint
 | 
			
		||||
        uses: golangci/golangci-lint-action@v8
 | 
			
		||||
        uses: golangci/golangci-lint-action@v7
 | 
			
		||||
        with:
 | 
			
		||||
          version: latest
 | 
			
		||||
          args: --timeout 5000s --verbose
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/packages-npm-publish.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/packages-npm-publish.yml
									
									
									
									
										vendored
									
									
								
							@ -3,10 +3,10 @@ on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches: [main]
 | 
			
		||||
    paths:
 | 
			
		||||
      - packages/docusaurus-config/**
 | 
			
		||||
      - packages/eslint-config/**
 | 
			
		||||
      - packages/prettier-config/**
 | 
			
		||||
      - packages/tsconfig/**
 | 
			
		||||
      - packages/docusaurus-config
 | 
			
		||||
      - packages/eslint-config
 | 
			
		||||
      - packages/prettier-config
 | 
			
		||||
      - packages/tsconfig
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
jobs:
 | 
			
		||||
  publish:
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							@ -16,7 +16,7 @@
 | 
			
		||||
    ],
 | 
			
		||||
    "typescript.preferences.importModuleSpecifier": "non-relative",
 | 
			
		||||
    "typescript.preferences.importModuleSpecifierEnding": "index",
 | 
			
		||||
    "typescript.tsdk": "./node_modules/typescript/lib",
 | 
			
		||||
    "typescript.tsdk": "./web/node_modules/typescript/lib",
 | 
			
		||||
    "typescript.enablePromptUseWorkspaceTsdk": true,
 | 
			
		||||
    "yaml.schemas": {
 | 
			
		||||
        "./blueprints/schema.json": "blueprints/**/*.yaml"
 | 
			
		||||
@ -30,5 +30,7 @@
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "go.testFlags": ["-count=1"],
 | 
			
		||||
    "github-actions.workflows.pinned.workflows": [".github/workflows/ci-main.yml"]
 | 
			
		||||
    "github-actions.workflows.pinned.workflows": [
 | 
			
		||||
        ".github/workflows/ci-main.yml"
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								Dockerfile
									
									
									
									
									
								
							@ -40,8 +40,7 @@ COPY ./web /work/web/
 | 
			
		||||
COPY ./website /work/website/
 | 
			
		||||
COPY ./gen-ts-api /work/web/node_modules/@goauthentik/api
 | 
			
		||||
 | 
			
		||||
RUN npm run build && \
 | 
			
		||||
    npm run build:sfe
 | 
			
		||||
RUN npm run build
 | 
			
		||||
 | 
			
		||||
# Stage 3: Build go proxy
 | 
			
		||||
FROM --platform=${BUILDPLATFORM} docker.io/library/golang:1.24-bookworm AS go-builder
 | 
			
		||||
@ -86,17 +85,18 @@ FROM --platform=${BUILDPLATFORM} ghcr.io/maxmind/geoipupdate:v7.1.0 AS geoip
 | 
			
		||||
ENV GEOIPUPDATE_EDITION_IDS="GeoLite2-City GeoLite2-ASN"
 | 
			
		||||
ENV GEOIPUPDATE_VERBOSE="1"
 | 
			
		||||
ENV GEOIPUPDATE_ACCOUNT_ID_FILE="/run/secrets/GEOIPUPDATE_ACCOUNT_ID"
 | 
			
		||||
ENV GEOIPUPDATE_LICENSE_KEY_FILE="/run/secrets/GEOIPUPDATE_LICENSE_KEY"
 | 
			
		||||
 | 
			
		||||
USER root
 | 
			
		||||
RUN --mount=type=secret,id=GEOIPUPDATE_ACCOUNT_ID \
 | 
			
		||||
    --mount=type=secret,id=GEOIPUPDATE_LICENSE_KEY \
 | 
			
		||||
    mkdir -p /usr/share/GeoIP && \
 | 
			
		||||
    /bin/sh -c "GEOIPUPDATE_LICENSE_KEY_FILE=/run/secrets/GEOIPUPDATE_LICENSE_KEY /usr/bin/entry.sh || echo 'Failed to get GeoIP database, disabling'; exit 0"
 | 
			
		||||
    /bin/sh -c "/usr/bin/entry.sh || echo 'Failed to get GeoIP database, disabling'; exit 0"
 | 
			
		||||
 | 
			
		||||
# Stage 5: Download uv
 | 
			
		||||
FROM ghcr.io/astral-sh/uv:0.7.4 AS uv
 | 
			
		||||
FROM ghcr.io/astral-sh/uv:0.6.16 AS uv
 | 
			
		||||
# Stage 6: Base python image
 | 
			
		||||
FROM ghcr.io/goauthentik/fips-python:3.13.3-slim-bookworm-fips AS python-base
 | 
			
		||||
FROM ghcr.io/goauthentik/fips-python:3.12.10-slim-bookworm-fips AS python-base
 | 
			
		||||
 | 
			
		||||
ENV VENV_PATH="/ak-root/.venv" \
 | 
			
		||||
    PATH="/lifecycle:/ak-root/.venv/bin:$PATH" \
 | 
			
		||||
 | 
			
		||||
@ -42,4 +42,4 @@ See [SECURITY.md](SECURITY.md)
 | 
			
		||||
 | 
			
		||||
## Adoption and Contributions
 | 
			
		||||
 | 
			
		||||
Your organization uses authentik? We'd love to add your logo to the readme and our website! Email us @ hello@goauthentik.io or open a GitHub Issue/PR! For more information on how to contribute to authentik, please refer to our [contribution guide](https://docs.goauthentik.io/docs/developer-docs?utm_source=github).
 | 
			
		||||
Your organization uses authentik? We'd love to add your logo to the readme and our website! Email us @ hello@goauthentik.io or open a GitHub Issue/PR! For more information on how to contribute to authentik, please refer to our [CONTRIBUTING.md file](./CONTRIBUTING.md).
 | 
			
		||||
 | 
			
		||||
@ -20,8 +20,8 @@ Even if the issue is not a CVE, we still greatly appreciate your help in hardeni
 | 
			
		||||
 | 
			
		||||
| Version   | Supported |
 | 
			
		||||
| --------- | --------- |
 | 
			
		||||
| 2024.12.x | ✅        |
 | 
			
		||||
| 2025.2.x  | ✅        |
 | 
			
		||||
| 2025.4.x  | ✅        |
 | 
			
		||||
 | 
			
		||||
## Reporting a Vulnerability
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
from os import environ
 | 
			
		||||
 | 
			
		||||
__version__ = "2025.4.1"
 | 
			
		||||
__version__ = "2025.2.4"
 | 
			
		||||
ENV_GIT_HASH_KEY = "GIT_BUILD_HASH"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -54,7 +54,7 @@ def create_component(generator: SchemaGenerator, name, schema, type_=ResolvedCom
 | 
			
		||||
    return component
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def postprocess_schema_responses(result, generator: SchemaGenerator, **kwargs):
 | 
			
		||||
def postprocess_schema_responses(result, generator: SchemaGenerator, **kwargs):  # noqa: W0613
 | 
			
		||||
    """Workaround to set a default response for endpoints.
 | 
			
		||||
    Workaround suggested at
 | 
			
		||||
    <https://github.com/tfranzel/drf-spectacular/issues/119#issuecomment-656970357>
 | 
			
		||||
 | 
			
		||||
@ -164,7 +164,9 @@ class BlueprintEntry:
 | 
			
		||||
        """Get the blueprint model, with yaml tags resolved if present"""
 | 
			
		||||
        return str(self.tag_resolver(self.model, blueprint))
 | 
			
		||||
 | 
			
		||||
    def get_permissions(self, blueprint: "Blueprint") -> Generator[BlueprintEntryPermission]:
 | 
			
		||||
    def get_permissions(
 | 
			
		||||
        self, blueprint: "Blueprint"
 | 
			
		||||
    ) -> Generator[BlueprintEntryPermission, None, None]:
 | 
			
		||||
        """Get permissions of this entry, with all yaml tags resolved"""
 | 
			
		||||
        for perm in self.permissions:
 | 
			
		||||
            yield BlueprintEntryPermission(
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,7 @@ def migrate_custom_css(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
 | 
			
		||||
    if not path.exists():
 | 
			
		||||
        return
 | 
			
		||||
    css = path.read_text()
 | 
			
		||||
    Brand.objects.using(db_alias).all().update(branding_custom_css=css)
 | 
			
		||||
    Brand.objects.using(db_alias).update(branding_custom_css=css)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
@ -5,10 +5,10 @@ from typing import Any
 | 
			
		||||
from django.db.models import F, Q
 | 
			
		||||
from django.db.models import Value as V
 | 
			
		||||
from django.http.request import HttpRequest
 | 
			
		||||
from sentry_sdk import get_current_span
 | 
			
		||||
 | 
			
		||||
from authentik import get_full_version
 | 
			
		||||
from authentik.brands.models import Brand
 | 
			
		||||
from authentik.lib.sentry import get_http_meta
 | 
			
		||||
from authentik.tenants.models import Tenant
 | 
			
		||||
 | 
			
		||||
_q_default = Q(default=True)
 | 
			
		||||
@ -32,9 +32,13 @@ def context_processor(request: HttpRequest) -> dict[str, Any]:
 | 
			
		||||
    """Context Processor that injects brand object into every template"""
 | 
			
		||||
    brand = getattr(request, "brand", DEFAULT_BRAND)
 | 
			
		||||
    tenant = getattr(request, "tenant", Tenant())
 | 
			
		||||
    trace = ""
 | 
			
		||||
    span = get_current_span()
 | 
			
		||||
    if span:
 | 
			
		||||
        trace = span.to_traceparent()
 | 
			
		||||
    return {
 | 
			
		||||
        "brand": brand,
 | 
			
		||||
        "footer_links": tenant.footer_links,
 | 
			
		||||
        "html_meta": {**get_http_meta()},
 | 
			
		||||
        "sentry_trace": trace,
 | 
			
		||||
        "version": get_full_version(),
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -99,17 +99,18 @@ class GroupSerializer(ModelSerializer):
 | 
			
		||||
            if superuser
 | 
			
		||||
            else "authentik_core.disable_group_superuser"
 | 
			
		||||
        )
 | 
			
		||||
        if self.instance or superuser:
 | 
			
		||||
            has_perm = user.has_perm(perm) or user.has_perm(perm, self.instance)
 | 
			
		||||
            if not has_perm:
 | 
			
		||||
                raise ValidationError(
 | 
			
		||||
                    _(
 | 
			
		||||
                        (
 | 
			
		||||
                            "User does not have permission to set "
 | 
			
		||||
                            "superuser status to {superuser_status}."
 | 
			
		||||
                        ).format_map({"superuser_status": superuser})
 | 
			
		||||
                    )
 | 
			
		||||
        has_perm = user.has_perm(perm)
 | 
			
		||||
        if self.instance and not has_perm:
 | 
			
		||||
            has_perm = user.has_perm(perm, self.instance)
 | 
			
		||||
        if not has_perm:
 | 
			
		||||
            raise ValidationError(
 | 
			
		||||
                _(
 | 
			
		||||
                    (
 | 
			
		||||
                        "User does not have permission to set "
 | 
			
		||||
                        "superuser status to {superuser_status}."
 | 
			
		||||
                    ).format_map({"superuser_status": superuser})
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
        return superuser
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,6 @@
 | 
			
		||||
 | 
			
		||||
from django.apps import apps
 | 
			
		||||
from django.contrib.auth.management import create_permissions
 | 
			
		||||
from django.core.management import call_command
 | 
			
		||||
from django.core.management.base import BaseCommand, no_translations
 | 
			
		||||
from guardian.management import create_anonymous_user
 | 
			
		||||
 | 
			
		||||
@ -17,10 +16,6 @@ class Command(BaseCommand):
 | 
			
		||||
        """Check permissions for all apps"""
 | 
			
		||||
        for tenant in Tenant.objects.filter(ready=True):
 | 
			
		||||
            with tenant:
 | 
			
		||||
                # See https://code.djangoproject.com/ticket/28417
 | 
			
		||||
                # Remove potential lingering old permissions
 | 
			
		||||
                call_command("remove_stale_contenttypes", "--no-input")
 | 
			
		||||
 | 
			
		||||
                for app in apps.get_app_configs():
 | 
			
		||||
                    self.stdout.write(f"Checking app {app.name} ({app.label})\n")
 | 
			
		||||
                    create_permissions(app, verbosity=0)
 | 
			
		||||
 | 
			
		||||
@ -31,10 +31,7 @@ class PickleSerializer:
 | 
			
		||||
 | 
			
		||||
    def loads(self, data):
 | 
			
		||||
        """Unpickle data to be loaded from redis"""
 | 
			
		||||
        try:
 | 
			
		||||
            return pickle.loads(data)  # nosec
 | 
			
		||||
        except Exception:
 | 
			
		||||
            return {}
 | 
			
		||||
        return pickle.loads(data)  # nosec
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _migrate_session(
 | 
			
		||||
 | 
			
		||||
@ -1,27 +0,0 @@
 | 
			
		||||
# Generated by Django 5.1.9 on 2025-05-14 11:15
 | 
			
		||||
 | 
			
		||||
from django.apps.registry import Apps
 | 
			
		||||
from django.db import migrations
 | 
			
		||||
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def remove_old_authenticated_session_content_type(
 | 
			
		||||
    apps: Apps, schema_editor: BaseDatabaseSchemaEditor
 | 
			
		||||
):
 | 
			
		||||
    db_alias = schema_editor.connection.alias
 | 
			
		||||
    ContentType = apps.get_model("contenttypes", "ContentType")
 | 
			
		||||
 | 
			
		||||
    ContentType.objects.using(db_alias).filter(model="oldauthenticatedsession").delete()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ("authentik_core", "0047_delete_oldauthenticatedsession"),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.RunPython(
 | 
			
		||||
            code=remove_old_authenticated_session_content_type,
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
@ -21,9 +21,7 @@
 | 
			
		||||
        <script src="{% versioned_script 'dist/standalone/loading/index-%v.js' %}" type="module"></script>
 | 
			
		||||
        {% block head %}
 | 
			
		||||
        {% endblock %}
 | 
			
		||||
        {% for key, value in html_meta.items %}
 | 
			
		||||
        <meta name="{{key}}" content="{{ value }}" />
 | 
			
		||||
        {% endfor %}
 | 
			
		||||
        <meta name="sentry-trace" content="{{ sentry_trace }}" />
 | 
			
		||||
    </head>
 | 
			
		||||
    <body>
 | 
			
		||||
        {% block body %}
 | 
			
		||||
 | 
			
		||||
@ -124,16 +124,6 @@ class TestGroupsAPI(APITestCase):
 | 
			
		||||
            {"is_superuser": ["User does not have permission to set superuser status to True."]},
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_superuser_no_perm_no_superuser(self):
 | 
			
		||||
        """Test creating a group without permission and without superuser flag"""
 | 
			
		||||
        assign_perm("authentik_core.add_group", self.login_user)
 | 
			
		||||
        self.client.force_login(self.login_user)
 | 
			
		||||
        res = self.client.post(
 | 
			
		||||
            reverse("authentik_api:group-list"),
 | 
			
		||||
            data={"name": generate_id(), "is_superuser": False},
 | 
			
		||||
        )
 | 
			
		||||
        self.assertEqual(res.status_code, 201)
 | 
			
		||||
 | 
			
		||||
    def test_superuser_update_no_perm(self):
 | 
			
		||||
        """Test updating a superuser group without permission"""
 | 
			
		||||
        group = Group.objects.create(name=generate_id(), is_superuser=True)
 | 
			
		||||
 | 
			
		||||
@ -132,14 +132,13 @@ class LicenseKey:
 | 
			
		||||
        """Get a summarized version of all (not expired) licenses"""
 | 
			
		||||
        total = LicenseKey(get_license_aud(), 0, "Summarized license", 0, 0)
 | 
			
		||||
        for lic in License.objects.all():
 | 
			
		||||
            if lic.is_valid:
 | 
			
		||||
                total.internal_users += lic.internal_users
 | 
			
		||||
                total.external_users += lic.external_users
 | 
			
		||||
                total.license_flags.extend(lic.status.license_flags)
 | 
			
		||||
            total.internal_users += lic.internal_users
 | 
			
		||||
            total.external_users += lic.external_users
 | 
			
		||||
            exp_ts = int(mktime(lic.expiry.timetuple()))
 | 
			
		||||
            if total.exp == 0:
 | 
			
		||||
                total.exp = exp_ts
 | 
			
		||||
            total.exp = max(total.exp, exp_ts)
 | 
			
		||||
            total.license_flags.extend(lic.status.license_flags)
 | 
			
		||||
        return total
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
 | 
			
		||||
@ -39,10 +39,6 @@ class License(SerializerModel):
 | 
			
		||||
    internal_users = models.BigIntegerField()
 | 
			
		||||
    external_users = models.BigIntegerField()
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def is_valid(self) -> bool:
 | 
			
		||||
        return self.expiry >= now()
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def serializer(self) -> type[BaseSerializer]:
 | 
			
		||||
        from authentik.enterprise.api import LicenseSerializer
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,6 @@ from django.test import TestCase
 | 
			
		||||
from django.utils.timezone import now
 | 
			
		||||
from rest_framework.exceptions import ValidationError
 | 
			
		||||
 | 
			
		||||
from authentik.core.models import User
 | 
			
		||||
from authentik.enterprise.license import LicenseKey
 | 
			
		||||
from authentik.enterprise.models import (
 | 
			
		||||
    THRESHOLD_READ_ONLY_WEEKS,
 | 
			
		||||
@ -72,9 +71,9 @@ class TestEnterpriseLicense(TestCase):
 | 
			
		||||
    )
 | 
			
		||||
    def test_valid_multiple(self):
 | 
			
		||||
        """Check license verification"""
 | 
			
		||||
        lic = License.objects.create(key=generate_id(), expiry=expiry_valid)
 | 
			
		||||
        lic = License.objects.create(key=generate_id())
 | 
			
		||||
        self.assertTrue(lic.status.status().is_valid)
 | 
			
		||||
        lic2 = License.objects.create(key=generate_id(), expiry=expiry_valid)
 | 
			
		||||
        lic2 = License.objects.create(key=generate_id())
 | 
			
		||||
        self.assertTrue(lic2.status.status().is_valid)
 | 
			
		||||
        total = LicenseKey.get_total()
 | 
			
		||||
        self.assertEqual(total.internal_users, 200)
 | 
			
		||||
@ -233,9 +232,7 @@ class TestEnterpriseLicense(TestCase):
 | 
			
		||||
    )
 | 
			
		||||
    def test_expiry_expired(self):
 | 
			
		||||
        """Check license verification"""
 | 
			
		||||
        User.objects.all().delete()
 | 
			
		||||
        License.objects.all().delete()
 | 
			
		||||
        License.objects.create(key=generate_id(), expiry=expiry_expired)
 | 
			
		||||
        License.objects.create(key=generate_id())
 | 
			
		||||
        self.assertEqual(LicenseKey.get_total().summary().status, LicenseUsageStatus.EXPIRED)
 | 
			
		||||
 | 
			
		||||
    @patch(
 | 
			
		||||
 | 
			
		||||
@ -57,7 +57,7 @@ class LogEventSerializer(PassiveSerializer):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@contextmanager
 | 
			
		||||
def capture_logs(log_default_output=True) -> Generator[list[LogEvent]]:
 | 
			
		||||
def capture_logs(log_default_output=True) -> Generator[list[LogEvent], None, None]:
 | 
			
		||||
    """Capture log entries created"""
 | 
			
		||||
    logs = []
 | 
			
		||||
    cap = LogCapture()
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,6 @@
 | 
			
		||||
        {% endblock %}
 | 
			
		||||
        <link rel="stylesheet" type="text/css" href="{% static 'dist/sfe/bootstrap.min.css' %}">
 | 
			
		||||
        <meta name="sentry-trace" content="{{ sentry_trace }}" />
 | 
			
		||||
        <link rel="prefetch" href="{{ flow_background_url }}" />
 | 
			
		||||
        {% include "base/header_js.html" %}
 | 
			
		||||
        <style>
 | 
			
		||||
          html,
 | 
			
		||||
@ -23,7 +22,7 @@
 | 
			
		||||
            height: 100%;
 | 
			
		||||
          }
 | 
			
		||||
          body {
 | 
			
		||||
            background-image: url("{{ flow_background_url }}");
 | 
			
		||||
            background-image: url("{{ flow.background_url }}");
 | 
			
		||||
            background-repeat: no-repeat;
 | 
			
		||||
            background-size: cover;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
@ -5,9 +5,9 @@
 | 
			
		||||
 | 
			
		||||
{% block head_before %}
 | 
			
		||||
{{ block.super }}
 | 
			
		||||
<link rel="prefetch" href="{{ flow_background_url }}" />
 | 
			
		||||
<link rel="prefetch" href="{{ flow.background_url }}" />
 | 
			
		||||
{% if flow.compatibility_mode and not inspector %}
 | 
			
		||||
<script>ShadyDOM = { force: true };</script>
 | 
			
		||||
<script>ShadyDOM = { force: !navigator.webdriver };</script>
 | 
			
		||||
{% endif %}
 | 
			
		||||
{% include "base/header_js.html" %}
 | 
			
		||||
<script>
 | 
			
		||||
@ -21,7 +21,7 @@ window.authentik.flow = {
 | 
			
		||||
<script src="{% versioned_script 'dist/flow/FlowInterface-%v.js' %}" type="module"></script>
 | 
			
		||||
<style>
 | 
			
		||||
:root {
 | 
			
		||||
    --ak-flow-background: url("{{ flow_background_url }}");
 | 
			
		||||
    --ak-flow-background: url("{{ flow.background_url }}");
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
@ -13,9 +13,7 @@ class FlowInterfaceView(InterfaceView):
 | 
			
		||||
    """Flow interface"""
 | 
			
		||||
 | 
			
		||||
    def get_context_data(self, **kwargs: Any) -> dict[str, Any]:
 | 
			
		||||
        flow = get_object_or_404(Flow, slug=self.kwargs.get("flow_slug"))
 | 
			
		||||
        kwargs["flow"] = flow
 | 
			
		||||
        kwargs["flow_background_url"] = flow.background_url(self.request)
 | 
			
		||||
        kwargs["flow"] = get_object_or_404(Flow, slug=self.kwargs.get("flow_slug"))
 | 
			
		||||
        kwargs["inspector"] = "inspector" in self.request.GET
 | 
			
		||||
        return super().get_context_data(**kwargs)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -363,9 +363,6 @@ def django_db_config(config: ConfigLoader | None = None) -> dict:
 | 
			
		||||
        pool_options = config.get_dict_from_b64_json("postgresql.pool_options", True)
 | 
			
		||||
        if not pool_options:
 | 
			
		||||
            pool_options = True
 | 
			
		||||
    # FIXME: Temporarily force pool to be deactivated.
 | 
			
		||||
    # See https://github.com/goauthentik/authentik/issues/14320
 | 
			
		||||
    pool_options = False
 | 
			
		||||
 | 
			
		||||
    db = {
 | 
			
		||||
        "default": {
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ from ldap3.core.exceptions import LDAPException
 | 
			
		||||
from redis.exceptions import ConnectionError as RedisConnectionError
 | 
			
		||||
from redis.exceptions import RedisError, ResponseError
 | 
			
		||||
from rest_framework.exceptions import APIException
 | 
			
		||||
from sentry_sdk import HttpTransport, get_current_scope
 | 
			
		||||
from sentry_sdk import HttpTransport
 | 
			
		||||
from sentry_sdk import init as sentry_sdk_init
 | 
			
		||||
from sentry_sdk.api import set_tag
 | 
			
		||||
from sentry_sdk.integrations.argv import ArgvIntegration
 | 
			
		||||
@ -27,7 +27,6 @@ from sentry_sdk.integrations.redis import RedisIntegration
 | 
			
		||||
from sentry_sdk.integrations.socket import SocketIntegration
 | 
			
		||||
from sentry_sdk.integrations.stdlib import StdlibIntegration
 | 
			
		||||
from sentry_sdk.integrations.threading import ThreadingIntegration
 | 
			
		||||
from sentry_sdk.tracing import BAGGAGE_HEADER_NAME, SENTRY_TRACE_HEADER_NAME
 | 
			
		||||
from structlog.stdlib import get_logger
 | 
			
		||||
from websockets.exceptions import WebSocketException
 | 
			
		||||
 | 
			
		||||
@ -96,8 +95,6 @@ def traces_sampler(sampling_context: dict) -> float:
 | 
			
		||||
        return 0
 | 
			
		||||
    if _type == "websocket":
 | 
			
		||||
        return 0
 | 
			
		||||
    if CONFIG.get_bool("debug"):
 | 
			
		||||
        return 1
 | 
			
		||||
    return float(CONFIG.get("error_reporting.sample_rate", 0.1))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -170,14 +167,3 @@ def before_send(event: dict, hint: dict) -> dict | None:
 | 
			
		||||
    if settings.DEBUG:
 | 
			
		||||
        return None
 | 
			
		||||
    return event
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_http_meta():
 | 
			
		||||
    """Get sentry-related meta key-values"""
 | 
			
		||||
    scope = get_current_scope()
 | 
			
		||||
    meta = {
 | 
			
		||||
        SENTRY_TRACE_HEADER_NAME: scope.get_traceparent() or "",
 | 
			
		||||
    }
 | 
			
		||||
    if bag := scope.get_baggage():
 | 
			
		||||
        meta[BAGGAGE_HEADER_NAME] = bag.serialize()
 | 
			
		||||
    return meta
 | 
			
		||||
 | 
			
		||||
@ -59,7 +59,7 @@ class PropertyMappingManager:
 | 
			
		||||
        request: HttpRequest | None,
 | 
			
		||||
        return_mapping: bool = False,
 | 
			
		||||
        **kwargs,
 | 
			
		||||
    ) -> Generator[tuple[dict, PropertyMapping]]:
 | 
			
		||||
    ) -> Generator[tuple[dict, PropertyMapping], None]:
 | 
			
		||||
        """Iterate over all mappings that were pre-compiled and
 | 
			
		||||
        execute all of them with the given context"""
 | 
			
		||||
        if not self.__has_compiled:
 | 
			
		||||
 | 
			
		||||
@ -494,88 +494,86 @@ class TestConfig(TestCase):
 | 
			
		||||
            },
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    # FIXME: Temporarily force pool to be deactivated.
 | 
			
		||||
    # See https://github.com/goauthentik/authentik/issues/14320
 | 
			
		||||
    # def test_db_pool(self):
 | 
			
		||||
    #     """Test DB Config with pool"""
 | 
			
		||||
    #     config = ConfigLoader()
 | 
			
		||||
    #     config.set("postgresql.host", "foo")
 | 
			
		||||
    #     config.set("postgresql.name", "foo")
 | 
			
		||||
    #     config.set("postgresql.user", "foo")
 | 
			
		||||
    #     config.set("postgresql.password", "foo")
 | 
			
		||||
    #     config.set("postgresql.port", "foo")
 | 
			
		||||
    #     config.set("postgresql.test.name", "foo")
 | 
			
		||||
    #     config.set("postgresql.use_pool", True)
 | 
			
		||||
    #     conf = django_db_config(config)
 | 
			
		||||
    #     self.assertEqual(
 | 
			
		||||
    #         conf,
 | 
			
		||||
    #         {
 | 
			
		||||
    #             "default": {
 | 
			
		||||
    #                 "ENGINE": "authentik.root.db",
 | 
			
		||||
    #                 "HOST": "foo",
 | 
			
		||||
    #                 "NAME": "foo",
 | 
			
		||||
    #                 "OPTIONS": {
 | 
			
		||||
    #                     "pool": True,
 | 
			
		||||
    #                     "sslcert": None,
 | 
			
		||||
    #                     "sslkey": None,
 | 
			
		||||
    #                     "sslmode": None,
 | 
			
		||||
    #                     "sslrootcert": None,
 | 
			
		||||
    #                 },
 | 
			
		||||
    #                 "PASSWORD": "foo",
 | 
			
		||||
    #                 "PORT": "foo",
 | 
			
		||||
    #                 "TEST": {"NAME": "foo"},
 | 
			
		||||
    #                 "USER": "foo",
 | 
			
		||||
    #                 "CONN_MAX_AGE": 0,
 | 
			
		||||
    #                 "CONN_HEALTH_CHECKS": False,
 | 
			
		||||
    #                 "DISABLE_SERVER_SIDE_CURSORS": False,
 | 
			
		||||
    #             }
 | 
			
		||||
    #         },
 | 
			
		||||
    #     )
 | 
			
		||||
    def test_db_pool(self):
 | 
			
		||||
        """Test DB Config with pool"""
 | 
			
		||||
        config = ConfigLoader()
 | 
			
		||||
        config.set("postgresql.host", "foo")
 | 
			
		||||
        config.set("postgresql.name", "foo")
 | 
			
		||||
        config.set("postgresql.user", "foo")
 | 
			
		||||
        config.set("postgresql.password", "foo")
 | 
			
		||||
        config.set("postgresql.port", "foo")
 | 
			
		||||
        config.set("postgresql.test.name", "foo")
 | 
			
		||||
        config.set("postgresql.use_pool", True)
 | 
			
		||||
        conf = django_db_config(config)
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            conf,
 | 
			
		||||
            {
 | 
			
		||||
                "default": {
 | 
			
		||||
                    "ENGINE": "authentik.root.db",
 | 
			
		||||
                    "HOST": "foo",
 | 
			
		||||
                    "NAME": "foo",
 | 
			
		||||
                    "OPTIONS": {
 | 
			
		||||
                        "pool": True,
 | 
			
		||||
                        "sslcert": None,
 | 
			
		||||
                        "sslkey": None,
 | 
			
		||||
                        "sslmode": None,
 | 
			
		||||
                        "sslrootcert": None,
 | 
			
		||||
                    },
 | 
			
		||||
                    "PASSWORD": "foo",
 | 
			
		||||
                    "PORT": "foo",
 | 
			
		||||
                    "TEST": {"NAME": "foo"},
 | 
			
		||||
                    "USER": "foo",
 | 
			
		||||
                    "CONN_MAX_AGE": 0,
 | 
			
		||||
                    "CONN_HEALTH_CHECKS": False,
 | 
			
		||||
                    "DISABLE_SERVER_SIDE_CURSORS": False,
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    # def test_db_pool_options(self):
 | 
			
		||||
    #     """Test DB Config with pool"""
 | 
			
		||||
    #     config = ConfigLoader()
 | 
			
		||||
    #     config.set("postgresql.host", "foo")
 | 
			
		||||
    #     config.set("postgresql.name", "foo")
 | 
			
		||||
    #     config.set("postgresql.user", "foo")
 | 
			
		||||
    #     config.set("postgresql.password", "foo")
 | 
			
		||||
    #     config.set("postgresql.port", "foo")
 | 
			
		||||
    #     config.set("postgresql.test.name", "foo")
 | 
			
		||||
    #     config.set("postgresql.use_pool", True)
 | 
			
		||||
    #     config.set(
 | 
			
		||||
    #         "postgresql.pool_options",
 | 
			
		||||
    #         base64.b64encode(
 | 
			
		||||
    #             dumps(
 | 
			
		||||
    #                 {
 | 
			
		||||
    #                     "max_size": 15,
 | 
			
		||||
    #                 }
 | 
			
		||||
    #             ).encode()
 | 
			
		||||
    #         ).decode(),
 | 
			
		||||
    #     )
 | 
			
		||||
    #     conf = django_db_config(config)
 | 
			
		||||
    #     self.assertEqual(
 | 
			
		||||
    #         conf,
 | 
			
		||||
    #         {
 | 
			
		||||
    #             "default": {
 | 
			
		||||
    #                 "ENGINE": "authentik.root.db",
 | 
			
		||||
    #                 "HOST": "foo",
 | 
			
		||||
    #                 "NAME": "foo",
 | 
			
		||||
    #                 "OPTIONS": {
 | 
			
		||||
    #                     "pool": {
 | 
			
		||||
    #                         "max_size": 15,
 | 
			
		||||
    #                     },
 | 
			
		||||
    #                     "sslcert": None,
 | 
			
		||||
    #                     "sslkey": None,
 | 
			
		||||
    #                     "sslmode": None,
 | 
			
		||||
    #                     "sslrootcert": None,
 | 
			
		||||
    #                 },
 | 
			
		||||
    #                 "PASSWORD": "foo",
 | 
			
		||||
    #                 "PORT": "foo",
 | 
			
		||||
    #                 "TEST": {"NAME": "foo"},
 | 
			
		||||
    #                 "USER": "foo",
 | 
			
		||||
    #                 "CONN_MAX_AGE": 0,
 | 
			
		||||
    #                 "CONN_HEALTH_CHECKS": False,
 | 
			
		||||
    #                 "DISABLE_SERVER_SIDE_CURSORS": False,
 | 
			
		||||
    #             }
 | 
			
		||||
    #         },
 | 
			
		||||
    #     )
 | 
			
		||||
    def test_db_pool_options(self):
 | 
			
		||||
        """Test DB Config with pool"""
 | 
			
		||||
        config = ConfigLoader()
 | 
			
		||||
        config.set("postgresql.host", "foo")
 | 
			
		||||
        config.set("postgresql.name", "foo")
 | 
			
		||||
        config.set("postgresql.user", "foo")
 | 
			
		||||
        config.set("postgresql.password", "foo")
 | 
			
		||||
        config.set("postgresql.port", "foo")
 | 
			
		||||
        config.set("postgresql.test.name", "foo")
 | 
			
		||||
        config.set("postgresql.use_pool", True)
 | 
			
		||||
        config.set(
 | 
			
		||||
            "postgresql.pool_options",
 | 
			
		||||
            base64.b64encode(
 | 
			
		||||
                dumps(
 | 
			
		||||
                    {
 | 
			
		||||
                        "max_size": 15,
 | 
			
		||||
                    }
 | 
			
		||||
                ).encode()
 | 
			
		||||
            ).decode(),
 | 
			
		||||
        )
 | 
			
		||||
        conf = django_db_config(config)
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            conf,
 | 
			
		||||
            {
 | 
			
		||||
                "default": {
 | 
			
		||||
                    "ENGINE": "authentik.root.db",
 | 
			
		||||
                    "HOST": "foo",
 | 
			
		||||
                    "NAME": "foo",
 | 
			
		||||
                    "OPTIONS": {
 | 
			
		||||
                        "pool": {
 | 
			
		||||
                            "max_size": 15,
 | 
			
		||||
                        },
 | 
			
		||||
                        "sslcert": None,
 | 
			
		||||
                        "sslkey": None,
 | 
			
		||||
                        "sslmode": None,
 | 
			
		||||
                        "sslrootcert": None,
 | 
			
		||||
                    },
 | 
			
		||||
                    "PASSWORD": "foo",
 | 
			
		||||
                    "PORT": "foo",
 | 
			
		||||
                    "TEST": {"NAME": "foo"},
 | 
			
		||||
                    "USER": "foo",
 | 
			
		||||
                    "CONN_MAX_AGE": 0,
 | 
			
		||||
                    "CONN_HEALTH_CHECKS": False,
 | 
			
		||||
                    "DISABLE_SERVER_SIDE_CURSORS": False,
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
@ -199,7 +199,7 @@ class SCIMGroupClient(SCIMClient[Group, SCIMProviderGroup, SCIMGroupSchema]):
 | 
			
		||||
            chunk_size = len(ops)
 | 
			
		||||
        if len(ops) < 1:
 | 
			
		||||
            return
 | 
			
		||||
        for chunk in batched(ops, chunk_size, strict=False):
 | 
			
		||||
        for chunk in batched(ops, chunk_size):
 | 
			
		||||
            req = PatchRequest(Operations=list(chunk))
 | 
			
		||||
            self._request(
 | 
			
		||||
                "PATCH",
 | 
			
		||||
 | 
			
		||||
@ -99,7 +99,6 @@ class RBACPermissionViewSet(ReadOnlyModelViewSet):
 | 
			
		||||
    filterset_class = PermissionFilter
 | 
			
		||||
    permission_classes = [IsAuthenticated]
 | 
			
		||||
    search_fields = [
 | 
			
		||||
        "name",
 | 
			
		||||
        "codename",
 | 
			
		||||
        "content_type__model",
 | 
			
		||||
        "content_type__app_label",
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -2,7 +2,7 @@
 | 
			
		||||
    "$schema": "http://json-schema.org/draft-07/schema",
 | 
			
		||||
    "$id": "https://goauthentik.io/blueprints/schema.json",
 | 
			
		||||
    "type": "object",
 | 
			
		||||
    "title": "authentik 2025.4.1 Blueprint schema",
 | 
			
		||||
    "title": "authentik 2025.2.4 Blueprint schema",
 | 
			
		||||
    "required": [
 | 
			
		||||
        "version",
 | 
			
		||||
        "entries"
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,7 @@ services:
 | 
			
		||||
    volumes:
 | 
			
		||||
      - redis:/data
 | 
			
		||||
  server:
 | 
			
		||||
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.4.1}
 | 
			
		||||
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.2.4}
 | 
			
		||||
    restart: unless-stopped
 | 
			
		||||
    command: server
 | 
			
		||||
    environment:
 | 
			
		||||
@ -55,7 +55,7 @@ services:
 | 
			
		||||
      redis:
 | 
			
		||||
        condition: service_healthy
 | 
			
		||||
  worker:
 | 
			
		||||
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.4.1}
 | 
			
		||||
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.2.4}
 | 
			
		||||
    restart: unless-stopped
 | 
			
		||||
    command: worker
 | 
			
		||||
    environment:
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								go.mod
									
									
									
									
									
								
							@ -5,7 +5,7 @@ go 1.24.0
 | 
			
		||||
require (
 | 
			
		||||
	beryju.io/ldap v0.1.0
 | 
			
		||||
	github.com/coreos/go-oidc/v3 v3.14.1
 | 
			
		||||
	github.com/getsentry/sentry-go v0.33.0
 | 
			
		||||
	github.com/getsentry/sentry-go v0.32.0
 | 
			
		||||
	github.com/go-http-utils/etag v0.0.0-20161124023236-513ea8f21eb1
 | 
			
		||||
	github.com/go-ldap/ldap/v3 v3.4.11
 | 
			
		||||
	github.com/go-openapi/runtime v0.28.0
 | 
			
		||||
@ -19,18 +19,18 @@ require (
 | 
			
		||||
	github.com/jellydator/ttlcache/v3 v3.3.0
 | 
			
		||||
	github.com/mitchellh/mapstructure v1.5.0
 | 
			
		||||
	github.com/nmcclain/asn1-ber v0.0.0-20170104154839-2661553a0484
 | 
			
		||||
	github.com/pires/go-proxyproto v0.8.1
 | 
			
		||||
	github.com/pires/go-proxyproto v0.8.0
 | 
			
		||||
	github.com/prometheus/client_golang v1.22.0
 | 
			
		||||
	github.com/redis/go-redis/v9 v9.8.0
 | 
			
		||||
	github.com/sethvargo/go-envconfig v1.3.0
 | 
			
		||||
	github.com/redis/go-redis/v9 v9.7.3
 | 
			
		||||
	github.com/sethvargo/go-envconfig v1.2.0
 | 
			
		||||
	github.com/sirupsen/logrus v1.9.3
 | 
			
		||||
	github.com/spf13/cobra v1.9.1
 | 
			
		||||
	github.com/stretchr/testify v1.10.0
 | 
			
		||||
	github.com/wwt/guac v1.3.2
 | 
			
		||||
	goauthentik.io/api/v3 v3.2025041.1
 | 
			
		||||
	goauthentik.io/api/v3 v3.2025024.9
 | 
			
		||||
	golang.org/x/exp v0.0.0-20230210204819-062eb4c674ab
 | 
			
		||||
	golang.org/x/oauth2 v0.30.0
 | 
			
		||||
	golang.org/x/sync v0.14.0
 | 
			
		||||
	golang.org/x/oauth2 v0.29.0
 | 
			
		||||
	golang.org/x/sync v0.13.0
 | 
			
		||||
	gopkg.in/yaml.v2 v2.4.0
 | 
			
		||||
	layeh.com/radius v0.0.0-20210819152912-ad72663a72ab
 | 
			
		||||
)
 | 
			
		||||
@ -75,7 +75,7 @@ require (
 | 
			
		||||
	go.opentelemetry.io/otel/trace v1.24.0 // indirect
 | 
			
		||||
	golang.org/x/crypto v0.36.0 // indirect
 | 
			
		||||
	golang.org/x/sys v0.31.0 // indirect
 | 
			
		||||
	golang.org/x/text v0.24.0 // indirect
 | 
			
		||||
	golang.org/x/text v0.23.0 // indirect
 | 
			
		||||
	google.golang.org/protobuf v1.36.5 // indirect
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										36
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								go.sum
									
									
									
									
									
								
							@ -69,8 +69,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
 | 
			
		||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 | 
			
		||||
github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk=
 | 
			
		||||
github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
 | 
			
		||||
github.com/getsentry/sentry-go v0.33.0 h1:YWyDii0KGVov3xOaamOnF0mjOrqSjBqwv48UEzn7QFg=
 | 
			
		||||
github.com/getsentry/sentry-go v0.33.0/go.mod h1:C55omcY9ChRQIUcVcGcs+Zdy4ZpQGvNJ7JYHIoSWOtE=
 | 
			
		||||
github.com/getsentry/sentry-go v0.32.0 h1:YKs+//QmwE3DcYtfKRH8/KyOOF/I6Qnx7qYGNHCGmCY=
 | 
			
		||||
github.com/getsentry/sentry-go v0.32.0/go.mod h1:CYNcMMz73YigoHljQRG+qPF+eMq8gG72XcGN/p71BAY=
 | 
			
		||||
github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 h1:BP4M0CvQ4S3TGls2FvczZtj5Re/2ZzkV9VwqPHH/3Bo=
 | 
			
		||||
github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
 | 
			
		||||
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
 | 
			
		||||
@ -230,8 +230,8 @@ github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+
 | 
			
		||||
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 | 
			
		||||
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
 | 
			
		||||
github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
 | 
			
		||||
github.com/pires/go-proxyproto v0.8.1 h1:9KEixbdJfhrbtjpz/ZwCdWDD2Xem0NZ38qMYaASJgp0=
 | 
			
		||||
github.com/pires/go-proxyproto v0.8.1/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3Jf+slqQVcuU=
 | 
			
		||||
github.com/pires/go-proxyproto v0.8.0 h1:5unRmEAPbHXHuLjDg01CxJWf91cw3lKHc/0xzKpXEe0=
 | 
			
		||||
github.com/pires/go-proxyproto v0.8.0/go.mod h1:iknsfgnH8EkjrMeMyvfKByp9TiBZCKZM0jx2xmKqnVY=
 | 
			
		||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 | 
			
		||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 | 
			
		||||
@ -245,14 +245,14 @@ github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ
 | 
			
		||||
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
 | 
			
		||||
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
 | 
			
		||||
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
 | 
			
		||||
github.com/redis/go-redis/v9 v9.8.0 h1:q3nRvjrlge/6UD7eTu/DSg2uYiU2mCL0G/uzBWqhicI=
 | 
			
		||||
github.com/redis/go-redis/v9 v9.8.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
 | 
			
		||||
github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM=
 | 
			
		||||
github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
 | 
			
		||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 | 
			
		||||
github.com/sethvargo/go-envconfig v1.3.0 h1:gJs+Fuv8+f05omTpwWIu6KmuseFAXKrIaOZSh8RMt0U=
 | 
			
		||||
github.com/sethvargo/go-envconfig v1.3.0/go.mod h1:JLd0KFWQYzyENqnEPWWZ49i4vzZo/6nRidxI8YvGiHw=
 | 
			
		||||
github.com/sethvargo/go-envconfig v1.2.0 h1:q3XkOZWkC+G1sMLCrw9oPGTjYexygLOXDmGUit1ti8Q=
 | 
			
		||||
github.com/sethvargo/go-envconfig v1.2.0/go.mod h1:JLd0KFWQYzyENqnEPWWZ49i4vzZo/6nRidxI8YvGiHw=
 | 
			
		||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 | 
			
		||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
 | 
			
		||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
 | 
			
		||||
@ -290,8 +290,8 @@ go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y
 | 
			
		||||
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
 | 
			
		||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 | 
			
		||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
 | 
			
		||||
goauthentik.io/api/v3 v3.2025041.1 h1:GAN6AoTmfnCGgx1SyM07jP4/LR/T3rkTEyShSBd3Co8=
 | 
			
		||||
goauthentik.io/api/v3 v3.2025041.1/go.mod h1:zz+mEZg8rY/7eEjkMGWJ2DnGqk+zqxuybGCGrR2O4Kw=
 | 
			
		||||
goauthentik.io/api/v3 v3.2025024.9 h1:i3tbkyotE32ZpJ729BsPWTuLQUdtZ54Li4aP1amZzsM=
 | 
			
		||||
goauthentik.io/api/v3 v3.2025024.9/go.mod h1:zz+mEZg8rY/7eEjkMGWJ2DnGqk+zqxuybGCGrR2O4Kw=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
@ -358,16 +358,16 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/
 | 
			
		||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
			
		||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
			
		||||
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 | 
			
		||||
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
 | 
			
		||||
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
 | 
			
		||||
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
 | 
			
		||||
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
 | 
			
		||||
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=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 | 
			
		||||
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 | 
			
		||||
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 | 
			
		||||
golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98=
 | 
			
		||||
golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
 | 
			
		||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
@ -376,8 +376,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
 | 
			
		||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
 | 
			
		||||
golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 | 
			
		||||
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
 | 
			
		||||
golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 | 
			
		||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
@ -412,8 +412,8 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 | 
			
		||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		||||
golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
 | 
			
		||||
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
 | 
			
		||||
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
 | 
			
		||||
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
 | 
			
		||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
 | 
			
		||||
@ -29,4 +29,4 @@ func UserAgent() string {
 | 
			
		||||
	return fmt.Sprintf("authentik@%s", FullVersion())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const VERSION = "2025.4.1"
 | 
			
		||||
const VERSION = "2025.2.4"
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,6 @@ EXPOSE 3389 6636 9300
 | 
			
		||||
 | 
			
		||||
USER 1000
 | 
			
		||||
 | 
			
		||||
ENV TMPDIR=/dev/shm/ \
 | 
			
		||||
    GOFIPS=1
 | 
			
		||||
ENV GOFIPS=1
 | 
			
		||||
 | 
			
		||||
ENTRYPOINT ["/ldap"]
 | 
			
		||||
 | 
			
		||||
@ -62,8 +62,7 @@ function prepare_debug {
 | 
			
		||||
    export DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
    apt-get update
 | 
			
		||||
    apt-get install -y --no-install-recommends krb5-kdc krb5-user krb5-admin-server libkrb5-dev gcc
 | 
			
		||||
    source "${VENV_PATH}/bin/activate"
 | 
			
		||||
    uv sync --active --frozen
 | 
			
		||||
    VIRTUAL_ENV=/ak-root/.venv uv sync --frozen
 | 
			
		||||
    touch /unittest.xml
 | 
			
		||||
    chown authentik:authentik /unittest.xml
 | 
			
		||||
}
 | 
			
		||||
@ -97,7 +96,6 @@ elif [[ "$1" == "test-all" ]]; then
 | 
			
		||||
elif [[ "$1" == "healthcheck" ]]; then
 | 
			
		||||
    run_authentik healthcheck $(cat $MODE_FILE)
 | 
			
		||||
elif [[ "$1" == "dump_config" ]]; then
 | 
			
		||||
    shift
 | 
			
		||||
    exec python -m authentik.lib.config $@
 | 
			
		||||
elif [[ "$1" == "debug" ]]; then
 | 
			
		||||
    exec sleep infinity
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								lifecycle/aws/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8
									
								
								lifecycle/aws/package-lock.json
									
									
									
										generated
									
									
									
								
							@ -9,7 +9,7 @@
 | 
			
		||||
            "version": "0.0.0",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "devDependencies": {
 | 
			
		||||
                "aws-cdk": "^2.1015.0",
 | 
			
		||||
                "aws-cdk": "^2.1012.0",
 | 
			
		||||
                "cross-env": "^7.0.3"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
@ -17,9 +17,9 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/aws-cdk": {
 | 
			
		||||
            "version": "2.1015.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.1015.0.tgz",
 | 
			
		||||
            "integrity": "sha512-txd+yMVVybtLfiwT409+fahbP0SkiwhmQvQf6PVVYnWzDPSknxYlUNJHisHV4tJEcbHWn1QPsLmqqMT0bw8hBg==",
 | 
			
		||||
            "version": "2.1012.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.1012.0.tgz",
 | 
			
		||||
            "integrity": "sha512-C6jSWkqP0hkY2Cs300VJHjspmTXDTMfB813kwZvRbd/OsKBfTBJBbYU16VoLAp1LVEOnQMf8otSlaSgzVF0X9A==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "Apache-2.0",
 | 
			
		||||
            "bin": {
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@
 | 
			
		||||
        "node": ">=20"
 | 
			
		||||
    },
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "aws-cdk": "^2.1015.0",
 | 
			
		||||
        "aws-cdk": "^2.1012.0",
 | 
			
		||||
        "cross-env": "^7.0.3"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,7 @@ Parameters:
 | 
			
		||||
    Description: authentik Docker image
 | 
			
		||||
  AuthentikVersion:
 | 
			
		||||
    Type: String
 | 
			
		||||
    Default: 2025.4.1
 | 
			
		||||
    Default: 2025.2.4
 | 
			
		||||
    Description: authentik Docker image tag
 | 
			
		||||
  AuthentikServerCPU:
 | 
			
		||||
    Type: Number
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@ -8,6 +8,7 @@
 | 
			
		||||
# Jens L. <jens@goauthentik.io>, 2022
 | 
			
		||||
# Lars Lehmann <lars@lars-lehmann.net>, 2023
 | 
			
		||||
# Johannes —/—, 2023
 | 
			
		||||
# Dominic Wagner <mail@dominic-wagner.de>, 2023
 | 
			
		||||
# fde4f289d99ed356ff5cfdb762dc44aa_a8a971d, 2023
 | 
			
		||||
# Christian Foellmann <foellmann@foe-services.de>, 2023
 | 
			
		||||
# kidhab, 2023
 | 
			
		||||
@ -29,18 +30,17 @@
 | 
			
		||||
# Alexander Möbius, 2025
 | 
			
		||||
# Jonas, 2025
 | 
			
		||||
# Niklas Kroese, 2025
 | 
			
		||||
# datenschmutz, 2025
 | 
			
		||||
# 97cce0ae0cad2a2cc552d3165d04643e_de3d740, 2025
 | 
			
		||||
# Dominic Wagner <mail@dominic-wagner.de>, 2025
 | 
			
		||||
# datenschmutz, 2025
 | 
			
		||||
# 
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-23 09:00+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-11 00:10+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2022-09-26 16:47+0000\n"
 | 
			
		||||
"Last-Translator: Dominic Wagner <mail@dominic-wagner.de>, 2025\n"
 | 
			
		||||
"Last-Translator: datenschmutz, 2025\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"
 | 
			
		||||
@ -214,7 +214,6 @@ msgid "User's display name."
 | 
			
		||||
msgstr "Anzeigename"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py authentik/providers/oauth2/models.py
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "User"
 | 
			
		||||
msgstr "Benutzer"
 | 
			
		||||
 | 
			
		||||
@ -403,18 +402,6 @@ msgstr "Eigenschaft"
 | 
			
		||||
msgid "Property Mappings"
 | 
			
		||||
msgstr "Eigenschaften"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "session data"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Session"
 | 
			
		||||
msgstr "Sitzung"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Sessions"
 | 
			
		||||
msgstr "Sitzungen"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Authenticated Session"
 | 
			
		||||
msgstr "Authentifizierte Sitzung"
 | 
			
		||||
@ -524,38 +511,6 @@ msgstr "Lizenzverwendung"
 | 
			
		||||
msgid "License Usage Records"
 | 
			
		||||
msgstr "Lizenzverwendung Aufzeichnungen"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
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/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Number of passwords to check against."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Passwort nicht im Kontext festgelegt"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "This password has been used previously. Please choose a different one."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "User Password History"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policy.py
 | 
			
		||||
msgid "Enterprise required to access this feature."
 | 
			
		||||
msgstr "Enterprise ist erforderlich, um auf diese Funktion zuzugreifen."
 | 
			
		||||
@ -1348,6 +1303,12 @@ msgstr "Richtlinien Cache Metriken anzeigen"
 | 
			
		||||
msgid "Clear Policy's cache metrics"
 | 
			
		||||
msgstr "Richtlinien Cache Metriken löschen"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
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/password/models.py
 | 
			
		||||
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"
 | 
			
		||||
@ -1359,6 +1320,10 @@ msgstr ""
 | 
			
		||||
"Die Richtlinie wird verweigert, wenn die zxcvbn-Bewertung gleich oder "
 | 
			
		||||
"kleiner diesem Wert ist."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Passwort nicht im Kontext festgelegt"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Invalid password."
 | 
			
		||||
msgstr "Ungültiges Passwort."
 | 
			
		||||
@ -1400,6 +1365,20 @@ msgstr "Reputationswert"
 | 
			
		||||
msgid "Reputation Scores"
 | 
			
		||||
msgstr "Reputationswert"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Waiting for authentication..."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid ""
 | 
			
		||||
"You're already authenticating in another tab. This page will refresh once "
 | 
			
		||||
"authentication is completed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Authenticate in this tab"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/denied.html
 | 
			
		||||
msgid "Permission denied"
 | 
			
		||||
msgstr "Erlaubnis verweigert"
 | 
			
		||||
@ -2229,10 +2208,6 @@ msgstr "Rolle"
 | 
			
		||||
msgid "Roles"
 | 
			
		||||
msgstr "Rollen"
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "Initial Permissions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "System permission"
 | 
			
		||||
msgstr "Systemberechtigung"
 | 
			
		||||
@ -2503,22 +2478,6 @@ msgstr "LDAP Quelle Eigenschafts-Zuordnung"
 | 
			
		||||
msgid "LDAP Source Property Mappings"
 | 
			
		||||
msgstr "LDAP Quelle Eigenschafts-Zuordnungen"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/signals.py
 | 
			
		||||
msgid "Password does not match Active Directory Complexity."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -2528,14 +2487,6 @@ msgstr ""
 | 
			
		||||
msgid "No token received."
 | 
			
		||||
msgstr "Kein Token empfangen."
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "HTTP Basic Authentication"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Include the client ID and secret as request parameters"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Request Token URL"
 | 
			
		||||
msgstr "Token-URL anfordern"
 | 
			
		||||
@ -2577,12 +2528,6 @@ msgstr ""
 | 
			
		||||
msgid "Additional Scopes"
 | 
			
		||||
msgstr "zusätzliche Scopes"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"How to perform authentication during an authorization_code token request "
 | 
			
		||||
"flow"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "OAuth Source"
 | 
			
		||||
msgstr "Outh Quelle"
 | 
			
		||||
@ -3489,12 +3434,6 @@ msgstr ""
 | 
			
		||||
"Wenn aktiviert, wird die Phase auch dann erfolgreich abgeschlossen und "
 | 
			
		||||
"fortgesetzt, wenn falsche Benutzerdaten eingegeben wurden."
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"Show the user the 'Remember me on this device' toggle, allowing repeat users"
 | 
			
		||||
" to skip straight to entering their password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid "Optional enrollment flow, which is linked at the bottom of the page."
 | 
			
		||||
msgstr "Optionaler Registrierungs-Flow, der unten auf der Seite verlinkt ist."
 | 
			
		||||
@ -3887,14 +3826,6 @@ msgstr ""
 | 
			
		||||
"Die Ereignisse werden nach dieser Dauer gelöscht (Format: "
 | 
			
		||||
"Wochen=3;Tage=2;Stunden=3,Sekunden=2)."
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot decrease lower than this value. Zero or negative."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot increase higher than this value. Zero or positive."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "The option configures the footer links on the flow executor pages."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@ -15,7 +15,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-23 09:00+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-11 00:10+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2022-09-26 16:47+0000\n"
 | 
			
		||||
"Last-Translator: Jens L. <jens@goauthentik.io>, 2025\n"
 | 
			
		||||
"Language-Team: Spanish (https://app.transifex.com/authentik/teams/119923/es/)\n"
 | 
			
		||||
@ -190,7 +190,6 @@ msgid "User's display name."
 | 
			
		||||
msgstr "Nombre para mostrar del usuario."
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py authentik/providers/oauth2/models.py
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "User"
 | 
			
		||||
msgstr "Usuario"
 | 
			
		||||
 | 
			
		||||
@ -379,18 +378,6 @@ msgstr "Asignación de Propiedades"
 | 
			
		||||
msgid "Property Mappings"
 | 
			
		||||
msgstr "Asignaciones de Propiedades"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "session data"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Session"
 | 
			
		||||
msgstr "Sesión"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Sessions"
 | 
			
		||||
msgstr "Sesiones"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Authenticated Session"
 | 
			
		||||
msgstr "Sesión autenticada"
 | 
			
		||||
@ -498,38 +485,6 @@ msgstr "Uso de Licencias"
 | 
			
		||||
msgid "License Usage Records"
 | 
			
		||||
msgstr "Registro de Uso de Licencias"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Clave de campo a verificar, las claves de campo definidas en las etapas de "
 | 
			
		||||
"Solicitud están disponibles."
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Number of passwords to check against."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "La contraseña no se ha establecido en contexto"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "This password has been used previously. Please choose a different one."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "User Password History"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policy.py
 | 
			
		||||
msgid "Enterprise required to access this feature."
 | 
			
		||||
msgstr "Se requiere de Enterprise para acceder esta característica."
 | 
			
		||||
@ -1313,6 +1268,12 @@ msgstr "Ver las métricas de caché de la Política"
 | 
			
		||||
msgid "Clear Policy's cache metrics"
 | 
			
		||||
msgstr "Borrar las métricas de caché de la Política"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Clave de campo a verificar, las claves de campo definidas en las etapas de "
 | 
			
		||||
"Solicitud están disponibles."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "How many times the password hash is allowed to be on haveibeenpwned"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -1326,6 +1287,10 @@ msgstr ""
 | 
			
		||||
"Si la puntuación zxcvbn es igual o menor que este valor, la política "
 | 
			
		||||
"fallará."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "La contraseña no se ha establecido en contexto"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Invalid password."
 | 
			
		||||
msgstr "Contraseña inválida."
 | 
			
		||||
@ -1367,6 +1332,20 @@ msgstr "Puntuación de Reputacion"
 | 
			
		||||
msgid "Reputation Scores"
 | 
			
		||||
msgstr "Puntuaciones de Reputacion"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Waiting for authentication..."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid ""
 | 
			
		||||
"You're already authenticating in another tab. This page will refresh once "
 | 
			
		||||
"authentication is completed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Authenticate in this tab"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/denied.html
 | 
			
		||||
msgid "Permission denied"
 | 
			
		||||
msgstr "Permiso denegado"
 | 
			
		||||
@ -2196,10 +2175,6 @@ msgstr "Rol"
 | 
			
		||||
msgid "Roles"
 | 
			
		||||
msgstr "Roles"
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "Initial Permissions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "System permission"
 | 
			
		||||
msgstr "Permiso de sistema"
 | 
			
		||||
@ -2468,22 +2443,6 @@ msgstr "Asignación de Propiedades de Fuente de LDAP"
 | 
			
		||||
msgid "LDAP Source Property Mappings"
 | 
			
		||||
msgstr "Asignaciones de Propiedades de Fuente de LDAP"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/signals.py
 | 
			
		||||
msgid "Password does not match Active Directory Complexity."
 | 
			
		||||
msgstr "La contraseña no coincide con la complejidad de Active Directory."
 | 
			
		||||
@ -2492,14 +2451,6 @@ msgstr "La contraseña no coincide con la complejidad de Active Directory."
 | 
			
		||||
msgid "No token received."
 | 
			
		||||
msgstr "No se recibió ningún token."
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "HTTP Basic Authentication"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Include the client ID and secret as request parameters"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Request Token URL"
 | 
			
		||||
msgstr "Solicitar URL de token"
 | 
			
		||||
@ -2540,12 +2491,6 @@ msgstr "URL utilizada por authentik para obtener información del usuario."
 | 
			
		||||
msgid "Additional Scopes"
 | 
			
		||||
msgstr "Alcances Adicionales"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"How to perform authentication during an authorization_code token request "
 | 
			
		||||
"flow"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "OAuth Source"
 | 
			
		||||
msgstr "Fuente de OAuth"
 | 
			
		||||
@ -3462,12 +3407,6 @@ msgstr ""
 | 
			
		||||
"Cuando está habilitado, la etapa tendrá éxito y continuará incluso cuando se"
 | 
			
		||||
" ingrese información de usuario incorrecta."
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"Show the user the 'Remember me on this device' toggle, allowing repeat users"
 | 
			
		||||
" to skip straight to entering their password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid "Optional enrollment flow, which is linked at the bottom of the page."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -3855,14 +3794,6 @@ msgstr ""
 | 
			
		||||
"Los Eventos serán eliminados después de este periodo. (Formato: "
 | 
			
		||||
"weeks=3;days=2;hours=3,seconds=2)."
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot decrease lower than this value. Zero or negative."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot increase higher than this value. Zero or positive."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "The option configures the footer links on the flow executor pages."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@ -15,7 +15,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-23 09:00+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-11 00:10+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2022-09-26 16:47+0000\n"
 | 
			
		||||
"Last-Translator: Ville Ranki, 2025\n"
 | 
			
		||||
"Language-Team: Finnish (https://app.transifex.com/authentik/teams/119923/fi/)\n"
 | 
			
		||||
@ -186,7 +186,6 @@ msgid "User's display name."
 | 
			
		||||
msgstr "Käyttäjän näytettävä nimi"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py authentik/providers/oauth2/models.py
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "User"
 | 
			
		||||
msgstr "Käyttäjä"
 | 
			
		||||
 | 
			
		||||
@ -372,18 +371,6 @@ msgstr "Ominaisuuskytkentä"
 | 
			
		||||
msgid "Property Mappings"
 | 
			
		||||
msgstr "Ominaisuuskytkennät"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "session data"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Session"
 | 
			
		||||
msgstr "Istunto"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Sessions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Authenticated Session"
 | 
			
		||||
msgstr "Autentikoitu istunto"
 | 
			
		||||
@ -491,38 +478,6 @@ msgstr "Lisenssin käyttö"
 | 
			
		||||
msgid "License Usage Records"
 | 
			
		||||
msgstr "Lisenssin käyttötiedot"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Kentän avain, joka tarkistetaan. Kysymysvaiheissa määritellyt kenttien "
 | 
			
		||||
"avaimet ovat käytettävissä."
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Number of passwords to check against."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Salasanaa ei ole asetettu kontekstissa"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "This password has been used previously. Please choose a different one."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "User Password History"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policy.py
 | 
			
		||||
msgid "Enterprise required to access this feature."
 | 
			
		||||
msgstr "Tämän ominaisuuden käyttöön tarvitaan Enterprise-versiota."
 | 
			
		||||
@ -1296,6 +1251,12 @@ msgstr "Näytä käytäntövälimuistitilastot"
 | 
			
		||||
msgid "Clear Policy's cache metrics"
 | 
			
		||||
msgstr "Tyhjennä käytäntövälimuistitilastot"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Kentän avain, joka tarkistetaan. Kysymysvaiheissa määritellyt kenttien "
 | 
			
		||||
"avaimet ovat käytettävissä."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "How many times the password hash is allowed to be on haveibeenpwned"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -1308,6 +1269,10 @@ msgstr ""
 | 
			
		||||
"Jos zxcvbn-pistemäärä on tämä arvo tai pienempi, käytännön suorittaminen "
 | 
			
		||||
"epäonnistuu."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Salasanaa ei ole asetettu kontekstissa"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Invalid password."
 | 
			
		||||
msgstr "Virheellinen salasana."
 | 
			
		||||
@ -1349,6 +1314,20 @@ msgstr "Mainepistemäärä"
 | 
			
		||||
msgid "Reputation Scores"
 | 
			
		||||
msgstr "Mainepistemäärät"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Waiting for authentication..."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid ""
 | 
			
		||||
"You're already authenticating in another tab. This page will refresh once "
 | 
			
		||||
"authentication is completed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Authenticate in this tab"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/denied.html
 | 
			
		||||
msgid "Permission denied"
 | 
			
		||||
msgstr "Käyttö evätty"
 | 
			
		||||
@ -2176,10 +2155,6 @@ msgstr "Rooli"
 | 
			
		||||
msgid "Roles"
 | 
			
		||||
msgstr "Roolit"
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "Initial Permissions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "System permission"
 | 
			
		||||
msgstr "Järjestelmän käyttöoikeus"
 | 
			
		||||
@ -2445,22 +2420,6 @@ msgstr "LDAP-lähteen ominaisuuskytkentä"
 | 
			
		||||
msgid "LDAP Source Property Mappings"
 | 
			
		||||
msgstr "LDAP-lähteen ominaisuuskytkennät"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/signals.py
 | 
			
		||||
msgid "Password does not match Active Directory Complexity."
 | 
			
		||||
msgstr "Salasana ei vastaa Active Directoryn monimutkaisuusmääritystä."
 | 
			
		||||
@ -2469,14 +2428,6 @@ msgstr "Salasana ei vastaa Active Directoryn monimutkaisuusmääritystä."
 | 
			
		||||
msgid "No token received."
 | 
			
		||||
msgstr "Tunnistetta ei saatu."
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "HTTP Basic Authentication"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Include the client ID and secret as request parameters"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Request Token URL"
 | 
			
		||||
msgstr "Pyyntötunnisteen URL"
 | 
			
		||||
@ -2517,12 +2468,6 @@ msgstr "URL, jota authentik käyttää käyttäjätiedon hakemiseksi."
 | 
			
		||||
msgid "Additional Scopes"
 | 
			
		||||
msgstr "Lisäkäyttöalueet"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"How to perform authentication during an authorization_code token request "
 | 
			
		||||
"flow"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "OAuth Source"
 | 
			
		||||
msgstr "OAuth-lähde"
 | 
			
		||||
@ -3432,12 +3377,6 @@ msgstr ""
 | 
			
		||||
"Kun tämä on käytössä, vaihe onnistuu ja suoritus jatkuu, vaikka olisi "
 | 
			
		||||
"syötetty virheelliset käyttäjätiedot."
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"Show the user the 'Remember me on this device' toggle, allowing repeat users"
 | 
			
		||||
" to skip straight to entering their password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid "Optional enrollment flow, which is linked at the bottom of the page."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -3815,14 +3754,6 @@ msgstr ""
 | 
			
		||||
"Tapahtumat poistetaan tämän ajan jälkeen. (Muoto: "
 | 
			
		||||
"weeks=3;days=2;hours=3;seconds=2)."
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot decrease lower than this value. Zero or negative."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot increase higher than this value. Zero or positive."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "The option configures the footer links on the flow executor pages."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@ -20,7 +20,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-23 09:00+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-11 00:10+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2022-09-26 16:47+0000\n"
 | 
			
		||||
"Last-Translator: Kowalski Dragon (kowalski7cc) <kowalski.7cc@gmail.com>, 2025\n"
 | 
			
		||||
"Language-Team: Italian (https://app.transifex.com/authentik/teams/119923/it/)\n"
 | 
			
		||||
@ -194,7 +194,6 @@ msgid "User's display name."
 | 
			
		||||
msgstr "Nome visualizzato dell'utente."
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py authentik/providers/oauth2/models.py
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "User"
 | 
			
		||||
msgstr "Utente"
 | 
			
		||||
 | 
			
		||||
@ -381,18 +380,6 @@ msgstr "Mappatura della proprietà"
 | 
			
		||||
msgid "Property Mappings"
 | 
			
		||||
msgstr "Mappatura delle proprietà"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "session data"
 | 
			
		||||
msgstr "dati sessione"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Session"
 | 
			
		||||
msgstr "Sessione"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Sessions"
 | 
			
		||||
msgstr "Sessioni"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Authenticated Session"
 | 
			
		||||
msgstr "Sessione Autenticata"
 | 
			
		||||
@ -500,39 +487,6 @@ msgstr "Utilizzo della licenza"
 | 
			
		||||
msgid "License Usage Records"
 | 
			
		||||
msgstr "Registri sull'utilizzo della licenza"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Chiave di campo da verificare, sono disponibili le chiavi di campo definite "
 | 
			
		||||
"nelle fasi Richiesta."
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Number of passwords to check against."
 | 
			
		||||
msgstr "Numero di password da verificare."
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Password non impostata nel contesto"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "This password has been used previously. Please choose a different one."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Questa password è già stata utilizzata in precedenza. Scegline una diversa."
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policy"
 | 
			
		||||
msgstr "Politica di unicità della password"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policies"
 | 
			
		||||
msgstr "Criteri di unicità delle password"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "User Password History"
 | 
			
		||||
msgstr "Cronologia password utente"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policy.py
 | 
			
		||||
msgid "Enterprise required to access this feature."
 | 
			
		||||
msgstr "Versione Enterprise richiesta per accedere a questa funzione"
 | 
			
		||||
@ -1320,6 +1274,12 @@ msgstr "Visualizza le metriche della cache della Policy"
 | 
			
		||||
msgid "Clear Policy's cache metrics"
 | 
			
		||||
msgstr "Cancellare le metriche della cache della Policy"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Chiave di campo da verificare, sono disponibili le chiavi di campo definite "
 | 
			
		||||
"nelle fasi Richiesta."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "How many times the password hash is allowed to be on haveibeenpwned"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -1332,6 +1292,10 @@ msgstr ""
 | 
			
		||||
"Se il punteggio zxcvbn è inferiore o uguale a questo valore, il criterio non"
 | 
			
		||||
" verrà soddisfatto."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Password non impostata nel contesto"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Invalid password."
 | 
			
		||||
msgstr "Password invalida."
 | 
			
		||||
@ -1373,6 +1337,22 @@ msgstr "Punteggio di reputazione"
 | 
			
		||||
msgid "Reputation Scores"
 | 
			
		||||
msgstr "Punteggi di reputazione"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Waiting for authentication..."
 | 
			
		||||
msgstr "In attesa di autenticazione..."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid ""
 | 
			
		||||
"You're already authenticating in another tab. This page will refresh once "
 | 
			
		||||
"authentication is completed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Ti stai già autenticando in un'altra scheda. Questa pagina si aggiornerà una"
 | 
			
		||||
" volta completata l'autenticazione."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Authenticate in this tab"
 | 
			
		||||
msgstr "Autenticati in questa scheda"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/denied.html
 | 
			
		||||
msgid "Permission denied"
 | 
			
		||||
msgstr "Permesso negato"
 | 
			
		||||
@ -2202,10 +2182,6 @@ msgstr "Ruolo"
 | 
			
		||||
msgid "Roles"
 | 
			
		||||
msgstr "Ruoli"
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "Initial Permissions"
 | 
			
		||||
msgstr "Permessi Iniziali"
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "System permission"
 | 
			
		||||
msgstr "Autorizzazione di sistema"
 | 
			
		||||
@ -2459,9 +2435,6 @@ msgid ""
 | 
			
		||||
"attribute. This allows nested group resolution on systems like FreeIPA and "
 | 
			
		||||
"Active Directory"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Cerca l'appartenenza al gruppo in base a un attributo utente anziché a un "
 | 
			
		||||
"attributo di gruppo. Questo consente la risoluzione di gruppi nidificati su "
 | 
			
		||||
"sistemi come FreeIPA e Active Directory."
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "LDAP Source"
 | 
			
		||||
@ -2479,22 +2452,6 @@ msgstr "Mappatura delle proprietà sorgente LDAP"
 | 
			
		||||
msgid "LDAP Source Property Mappings"
 | 
			
		||||
msgstr "Mappature delle proprietà della sorgente LDAP"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connection"
 | 
			
		||||
msgstr "Connessione Sorgente LDAP Utente"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connections"
 | 
			
		||||
msgstr "Connessioni Sorgente LDAP Utente"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connection"
 | 
			
		||||
msgstr "Connessione Sorgente LDAP Gruppo"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connections"
 | 
			
		||||
msgstr "Connessioni Sorgente LDAP Gruppo"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/signals.py
 | 
			
		||||
msgid "Password does not match Active Directory Complexity."
 | 
			
		||||
msgstr "La password non soddisfa la complessità Active Directory."
 | 
			
		||||
@ -2503,14 +2460,6 @@ msgstr "La password non soddisfa la complessità Active Directory."
 | 
			
		||||
msgid "No token received."
 | 
			
		||||
msgstr "Nessun token ricevuto."
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "HTTP Basic Authentication"
 | 
			
		||||
msgstr "HTTP Basic Authentication"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Include the client ID and secret as request parameters"
 | 
			
		||||
msgstr "Includi il client ID e il segreto come parametri di richiesta"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Request Token URL"
 | 
			
		||||
msgstr "URL di Richiesta Token"
 | 
			
		||||
@ -2551,14 +2500,6 @@ msgstr "URL utilizzato da authentik per ottenere le informazioni dell'utente."
 | 
			
		||||
msgid "Additional Scopes"
 | 
			
		||||
msgstr "Ambiti aggiuntivi"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"How to perform authentication during an authorization_code token request "
 | 
			
		||||
"flow"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Come eseguire l'autenticazione durante un flusso di richiesta del token "
 | 
			
		||||
"authorization_code"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "OAuth Source"
 | 
			
		||||
msgstr "Sorgente OAuth"
 | 
			
		||||
@ -3485,15 +3426,6 @@ msgstr ""
 | 
			
		||||
"Quando abilitato, la fase avrà successo e continuerà anche quando vengono "
 | 
			
		||||
"inserite informazioni utente errate."
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"Show the user the 'Remember me on this device' toggle, allowing repeat users"
 | 
			
		||||
" to skip straight to entering their password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Mostra all'utente il pulsante \"Ricordami su questo dispositivo\", "
 | 
			
		||||
"consentendo agli utenti abituali di passare direttamente all'inserimento "
 | 
			
		||||
"della password."
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid "Optional enrollment flow, which is linked at the bottom of the page."
 | 
			
		||||
msgstr "Flusso di iscrizione opzionale, che è collegato in fondo alla pagina."
 | 
			
		||||
@ -3880,14 +3812,6 @@ msgstr ""
 | 
			
		||||
"Gli eventi saranno cancellati dopo questa durata. (Formato: "
 | 
			
		||||
"weeks=3;days=2;hours=3,seconds=2)."
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot decrease lower than this value. Zero or negative."
 | 
			
		||||
msgstr "La reputazione non può scendere sotto questo valore. Zero o negativo."
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot increase higher than this value. Zero or positive."
 | 
			
		||||
msgstr "La reputazione non può superare questo valore. Zero o positivo."
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "The option configures the footer links on the flow executor pages."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@ -12,7 +12,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-23 09:00+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2025-03-31 00:10+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2022-09-26 16:47+0000\n"
 | 
			
		||||
"Last-Translator: NavyStack, 2023\n"
 | 
			
		||||
"Language-Team: Korean (https://app.transifex.com/authentik/teams/119923/ko/)\n"
 | 
			
		||||
@ -176,7 +176,6 @@ msgid "User's display name."
 | 
			
		||||
msgstr "사용자의 표시 이름"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py authentik/providers/oauth2/models.py
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "User"
 | 
			
		||||
msgstr "사용자"
 | 
			
		||||
 | 
			
		||||
@ -345,18 +344,6 @@ msgstr "속성 매핑"
 | 
			
		||||
msgid "Property Mappings"
 | 
			
		||||
msgstr "속성 매핑"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "session data"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Session"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Sessions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Authenticated Session"
 | 
			
		||||
msgstr "인증된 세션"
 | 
			
		||||
@ -460,36 +447,6 @@ msgstr "라이선스 사용"
 | 
			
		||||
msgid "License Usage Records"
 | 
			
		||||
msgstr "라이선스 사용 기록"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr "확인하려는 필드 키, 프롬프트 스테이지에서 정의된 필드 키를 사용할 수 있습니다."
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Number of passwords to check against."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "비밀번호가 컨텍스트에 설정되지 않음"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "This password has been used previously. Please choose a different one."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "User Password History"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policy.py
 | 
			
		||||
msgid "Enterprise required to access this feature."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -1225,6 +1182,10 @@ msgstr "정책의 캐시 메트릭 보기"
 | 
			
		||||
msgid "Clear Policy's cache metrics"
 | 
			
		||||
msgstr "정책의 캐시 메트릭 삭제"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr "확인하려는 필드 키, 프롬프트 스테이지에서 정의된 필드 키를 사용할 수 있습니다."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "How many times the password hash is allowed to be on haveibeenpwned"
 | 
			
		||||
msgstr "비밀번호 해시가 허용되는 해시 횟수"
 | 
			
		||||
@ -1234,6 +1195,10 @@ msgid ""
 | 
			
		||||
"If the zxcvbn score is equal or less than this value, the policy will fail."
 | 
			
		||||
msgstr "만약 zxcvbn 점수가 이 값과 같거나 이 값보다 작다면, 정책이 실패합니다."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "비밀번호가 컨텍스트에 설정되지 않음"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Invalid password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -1275,6 +1240,20 @@ msgstr "평판 점수"
 | 
			
		||||
msgid "Reputation Scores"
 | 
			
		||||
msgstr "평판 점수"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Waiting for authentication..."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid ""
 | 
			
		||||
"You're already authenticating in another tab. This page will refresh once "
 | 
			
		||||
"authentication is completed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Authenticate in this tab"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/denied.html
 | 
			
		||||
msgid "Permission denied"
 | 
			
		||||
msgstr "권한 거부됨"
 | 
			
		||||
@ -2034,10 +2013,6 @@ msgstr "역할"
 | 
			
		||||
msgid "Roles"
 | 
			
		||||
msgstr "역할"
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "Initial Permissions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "System permission"
 | 
			
		||||
msgstr "시스템 권한"
 | 
			
		||||
@ -2256,13 +2231,6 @@ msgid ""
 | 
			
		||||
"enabled on a single LDAP source."
 | 
			
		||||
msgstr "사용자가 비밀번호를 변경하면 LDAP로 다시 동기화합니다. 이 기능은 단일의 LDAP 소스에서만 활성화할 수 있습니다."
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"Lookup group membership based on a user attribute instead of a group "
 | 
			
		||||
"attribute. This allows nested group resolution on systems like FreeIPA and "
 | 
			
		||||
"Active Directory"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "LDAP Source"
 | 
			
		||||
msgstr "LDAP 소스"
 | 
			
		||||
@ -2279,22 +2247,6 @@ msgstr ""
 | 
			
		||||
msgid "LDAP Source Property Mappings"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/signals.py
 | 
			
		||||
msgid "Password does not match Active Directory Complexity."
 | 
			
		||||
msgstr "비밀번호가 Active Directory 복잡도와 일치하지 않습니다."
 | 
			
		||||
@ -2303,14 +2255,6 @@ msgstr "비밀번호가 Active Directory 복잡도와 일치하지 않습니다.
 | 
			
		||||
msgid "No token received."
 | 
			
		||||
msgstr "수신된 토큰이 없습니다."
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "HTTP Basic Authentication"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Include the client ID and secret as request parameters"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Request Token URL"
 | 
			
		||||
msgstr "토큰 요청 URL"
 | 
			
		||||
@ -2349,12 +2293,6 @@ msgstr "사용자 정보를 가져오기 위해 authentik에서 사용하는 URL
 | 
			
		||||
msgid "Additional Scopes"
 | 
			
		||||
msgstr "추가 스코프"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"How to perform authentication during an authorization_code token request "
 | 
			
		||||
"flow"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "OAuth Source"
 | 
			
		||||
msgstr "OAuth 소스"
 | 
			
		||||
@ -3211,12 +3149,6 @@ msgid ""
 | 
			
		||||
"info is entered."
 | 
			
		||||
msgstr "활성화되면 잘못된 사용자 정보가 입력되더라도 단계가 성공하고 계속됩니다."
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"Show the user the 'Remember me on this device' toggle, allowing repeat users"
 | 
			
		||||
" to skip straight to entering their password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid "Optional enrollment flow, which is linked at the bottom of the page."
 | 
			
		||||
msgstr "페이지 하단에 링크된,  선택적 등록 플로우를 참조하세요."
 | 
			
		||||
@ -3568,14 +3500,6 @@ msgid ""
 | 
			
		||||
"weeks=3;days=2;hours=3,seconds=2)."
 | 
			
		||||
msgstr "이 기간이 지나면 이벤트가 삭제됩니다. (서식: hours=-1;minutes=-2;seconds=-3)"
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot decrease lower than this value. Zero or negative."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot increase higher than this value. Zero or positive."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "The option configures the footer links on the flow executor pages."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@ -7,18 +7,18 @@
 | 
			
		||||
# Bartosz Karpiński, 2023
 | 
			
		||||
# Michał Jastrzębski, 2024
 | 
			
		||||
# Tomci 12 <drizztes@gmail.com>, 2024
 | 
			
		||||
# Darek “NeroPcStation” NeroPcStation <dareknowacki2001@gmail.com>, 2024
 | 
			
		||||
# Marc Schmitt, 2025
 | 
			
		||||
# Jens L. <jens@goauthentik.io>, 2025
 | 
			
		||||
# Darek “NeroPcStation” NeroPcStation <dareknowacki2001@gmail.com>, 2025
 | 
			
		||||
# 
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-23 09:00+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-11 00:10+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2022-09-26 16:47+0000\n"
 | 
			
		||||
"Last-Translator: Jens L. <jens@goauthentik.io>, 2025\n"
 | 
			
		||||
"Last-Translator: Darek “NeroPcStation” NeroPcStation <dareknowacki2001@gmail.com>, 2025\n"
 | 
			
		||||
"Language-Team: Polish (https://app.transifex.com/authentik/teams/119923/pl/)\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
@ -189,7 +189,6 @@ msgid "User's display name."
 | 
			
		||||
msgstr "Wyświetlana nazwa użytkownika."
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py authentik/providers/oauth2/models.py
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "User"
 | 
			
		||||
msgstr "Użytkownik"
 | 
			
		||||
 | 
			
		||||
@ -372,18 +371,6 @@ msgstr "Mapowanie właściwości"
 | 
			
		||||
msgid "Property Mappings"
 | 
			
		||||
msgstr "Mapowanie właściwości"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "session data"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Session"
 | 
			
		||||
msgstr "Sesja"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Sessions"
 | 
			
		||||
msgstr "Sesje"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Authenticated Session"
 | 
			
		||||
msgstr "Sesja uwierzytelniona"
 | 
			
		||||
@ -492,38 +479,6 @@ msgstr "Wykorzystanie licencji"
 | 
			
		||||
msgid "License Usage Records"
 | 
			
		||||
msgstr "Rejestr wykorzystania licencji"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Klucz pola do sprawdzenia, dostępne są klucze pola zdefiniowane w etapach "
 | 
			
		||||
"monitu."
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Number of passwords to check against."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Hasło nie jest ustawione w kontekście"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "This password has been used previously. Please choose a different one."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "User Password History"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policy.py
 | 
			
		||||
msgid "Enterprise required to access this feature."
 | 
			
		||||
msgstr "Wymagane jest konto Enterprise, aby uzyskać dostęp do tej funkcji."
 | 
			
		||||
@ -1302,6 +1257,12 @@ msgstr "Wyświetl metryki pamięci podręcznej Zasady"
 | 
			
		||||
msgid "Clear Policy's cache metrics"
 | 
			
		||||
msgstr "Wyczyść metryki pamięci podręcznej Zasady"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Klucz pola do sprawdzenia, dostępne są klucze pola zdefiniowane w etapach "
 | 
			
		||||
"monitu."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "How many times the password hash is allowed to be on haveibeenpwned"
 | 
			
		||||
msgstr "Ile razy skrót hasła może być na haveibeenpwned"
 | 
			
		||||
@ -1313,6 +1274,10 @@ msgstr ""
 | 
			
		||||
"Jeśli wynik zxcvbn jest równy lub mniejszy od tej wartości, zasada zakończy "
 | 
			
		||||
"się niepowodzeniem."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Hasło nie jest ustawione w kontekście"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Invalid password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -1354,6 +1319,20 @@ msgstr "Punkty reputacji"
 | 
			
		||||
msgid "Reputation Scores"
 | 
			
		||||
msgstr "Punkty reputacji"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Waiting for authentication..."
 | 
			
		||||
msgstr "Oczekiwanie na uwierzytelnienie..."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid ""
 | 
			
		||||
"You're already authenticating in another tab. This page will refresh once "
 | 
			
		||||
"authentication is completed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Authenticate in this tab"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/denied.html
 | 
			
		||||
msgid "Permission denied"
 | 
			
		||||
msgstr "Odmowa uprawnień"
 | 
			
		||||
@ -2162,10 +2141,6 @@ msgstr "Rola"
 | 
			
		||||
msgid "Roles"
 | 
			
		||||
msgstr "Role"
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "Initial Permissions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "System permission"
 | 
			
		||||
msgstr "Uprawnienie systemowe"
 | 
			
		||||
@ -2415,22 +2390,6 @@ msgstr ""
 | 
			
		||||
msgid "LDAP Source Property Mappings"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/signals.py
 | 
			
		||||
msgid "Password does not match Active Directory Complexity."
 | 
			
		||||
msgstr "Hasło nie pasuje do złożoności usługi Active Directory."
 | 
			
		||||
@ -2439,14 +2398,6 @@ msgstr "Hasło nie pasuje do złożoności usługi Active Directory."
 | 
			
		||||
msgid "No token received."
 | 
			
		||||
msgstr "Nie otrzymano tokena."
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "HTTP Basic Authentication"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Include the client ID and secret as request parameters"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Request Token URL"
 | 
			
		||||
msgstr "URL żądania tokena"
 | 
			
		||||
@ -2489,12 +2440,6 @@ msgstr "URL używany przez authentik do uzyskania informacji o użytkowniku."
 | 
			
		||||
msgid "Additional Scopes"
 | 
			
		||||
msgstr "Dodatkowe zakresy"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"How to perform authentication during an authorization_code token request "
 | 
			
		||||
"flow"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "OAuth Source"
 | 
			
		||||
msgstr "Źródło OAuth"
 | 
			
		||||
@ -3399,12 +3344,6 @@ msgstr ""
 | 
			
		||||
"Po włączeniu tej opcji etap zakończy się powodzeniem i będzie kontynuowany "
 | 
			
		||||
"nawet po wprowadzeniu nieprawidłowych danych użytkownika."
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"Show the user the 'Remember me on this device' toggle, allowing repeat users"
 | 
			
		||||
" to skip straight to entering their password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid "Optional enrollment flow, which is linked at the bottom of the page."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -3788,14 +3727,6 @@ msgstr ""
 | 
			
		||||
"Zdarzenia zostaną usunięte po upływie tego czasu. (Format: "
 | 
			
		||||
"weeks=3;days=2;hours=3,seconds=2)."
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot decrease lower than this value. Zero or negative."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot increase higher than this value. Zero or positive."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "The option configures the footer links on the flow executor pages."
 | 
			
		||||
msgstr "Opcja ta konfiguruje łącza stopki na stronach wykonawców przepływu."
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -18,7 +18,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-23 09:00+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-11 00:10+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2022-09-26 16:47+0000\n"
 | 
			
		||||
"Last-Translator: Gil Poiares-Oliveira, 2025\n"
 | 
			
		||||
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/authentik/teams/119923/pt_BR/)\n"
 | 
			
		||||
@ -192,7 +192,6 @@ msgid "User's display name."
 | 
			
		||||
msgstr "Nome de exibição do usuário."
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py authentik/providers/oauth2/models.py
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "User"
 | 
			
		||||
msgstr "Usuário"
 | 
			
		||||
 | 
			
		||||
@ -377,18 +376,6 @@ msgstr "Mapeamento de propriedades"
 | 
			
		||||
msgid "Property Mappings"
 | 
			
		||||
msgstr "Mapeamentos de propriedades"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "session data"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Session"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Sessions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Authenticated Session"
 | 
			
		||||
msgstr "Sessão Autenticada"
 | 
			
		||||
@ -496,38 +483,6 @@ msgstr "Uso de licença"
 | 
			
		||||
msgid "License Usage Records"
 | 
			
		||||
msgstr "Registros de uso de licença"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Chave de campo para verificar, as chaves de campo definidas nos estágios de "
 | 
			
		||||
"prompt estão disponíveis."
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Number of passwords to check against."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Senha não definida no contexto"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "This password has been used previously. Please choose a different one."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "User Password History"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policy.py
 | 
			
		||||
msgid "Enterprise required to access this feature."
 | 
			
		||||
msgstr "Entrerprise é necessário para acessar essa funcionalidade"
 | 
			
		||||
@ -1297,6 +1252,12 @@ msgstr ""
 | 
			
		||||
msgid "Clear Policy's cache metrics"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Chave de campo para verificar, as chaves de campo definidas nos estágios de "
 | 
			
		||||
"prompt estão disponíveis."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "How many times the password hash is allowed to be on haveibeenpwned"
 | 
			
		||||
msgstr "Quantas vezes o hash da senha pode estar em haveibeenpwned"
 | 
			
		||||
@ -1307,6 +1268,10 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Se a pontuação zxcvbn for igual ou menor que esse valor, a política falhará."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Senha não definida no contexto"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Invalid password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -1348,6 +1313,20 @@ msgstr "Pontuação de reputação"
 | 
			
		||||
msgid "Reputation Scores"
 | 
			
		||||
msgstr "Pontuações de reputação"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Waiting for authentication..."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid ""
 | 
			
		||||
"You're already authenticating in another tab. This page will refresh once "
 | 
			
		||||
"authentication is completed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Authenticate in this tab"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/denied.html
 | 
			
		||||
msgid "Permission denied"
 | 
			
		||||
msgstr "Permissão negada"
 | 
			
		||||
@ -2162,10 +2141,6 @@ msgstr ""
 | 
			
		||||
msgid "Roles"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "Initial Permissions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "System permission"
 | 
			
		||||
msgstr "Permissão do sistema"
 | 
			
		||||
@ -2412,22 +2387,6 @@ msgstr ""
 | 
			
		||||
msgid "LDAP Source Property Mappings"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/signals.py
 | 
			
		||||
msgid "Password does not match Active Directory Complexity."
 | 
			
		||||
msgstr "A senha não corresponde à complexidade do Active Directory."
 | 
			
		||||
@ -2436,14 +2395,6 @@ msgstr "A senha não corresponde à complexidade do Active Directory."
 | 
			
		||||
msgid "No token received."
 | 
			
		||||
msgstr "Nenhum token recebido."
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "HTTP Basic Authentication"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Include the client ID and secret as request parameters"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Request Token URL"
 | 
			
		||||
msgstr "URL do token de solicitação"
 | 
			
		||||
@ -2484,12 +2435,6 @@ msgstr "URL usado pelo authentik para obter informações do usuário."
 | 
			
		||||
msgid "Additional Scopes"
 | 
			
		||||
msgstr "Escopos Adicionais"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"How to perform authentication during an authorization_code token request "
 | 
			
		||||
"flow"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "OAuth Source"
 | 
			
		||||
msgstr "Fonte OAuth"
 | 
			
		||||
@ -3373,12 +3318,6 @@ msgid ""
 | 
			
		||||
"info is entered."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"Show the user the 'Remember me on this device' toggle, allowing repeat users"
 | 
			
		||||
" to skip straight to entering their password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid "Optional enrollment flow, which is linked at the bottom of the page."
 | 
			
		||||
msgstr "Optional enrollment flow, which is linked at the bottom of the page."
 | 
			
		||||
@ -3739,14 +3678,6 @@ msgstr ""
 | 
			
		||||
"Os eventos serão excluídos após esta duração.(Formato: "
 | 
			
		||||
"semanas=3;dias=2;horas=3,segundos=2)."
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot decrease lower than this value. Zero or negative."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot increase higher than this value. Zero or positive."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "The option configures the footer links on the flow executor pages."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-23 09:00+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-11 00:10+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2022-09-26 16:47+0000\n"
 | 
			
		||||
"Last-Translator: Marc Schmitt, 2025\n"
 | 
			
		||||
"Language-Team: Russian (https://app.transifex.com/authentik/teams/119923/ru/)\n"
 | 
			
		||||
@ -191,7 +191,6 @@ msgid "User's display name."
 | 
			
		||||
msgstr "Отображаемое имя пользователя."
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py authentik/providers/oauth2/models.py
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "User"
 | 
			
		||||
msgstr "Пользователь"
 | 
			
		||||
 | 
			
		||||
@ -380,18 +379,6 @@ msgstr "Сопоставление свойств"
 | 
			
		||||
msgid "Property Mappings"
 | 
			
		||||
msgstr "Сопоставление свойств"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "session data"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Session"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Sessions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Authenticated Session"
 | 
			
		||||
msgstr "Аутентифицированная Сессия"
 | 
			
		||||
@ -500,37 +487,6 @@ msgstr "Использование лицензии"
 | 
			
		||||
msgid "License Usage Records"
 | 
			
		||||
msgstr "Записи использования лицензии"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Ключ поля для проверки, доступны ключи поля, определенные в этапах запроса."
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Number of passwords to check against."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Пароль не задан в контексте"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "This password has been used previously. Please choose a different one."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "User Password History"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policy.py
 | 
			
		||||
msgid "Enterprise required to access this feature."
 | 
			
		||||
msgstr "Для доступа к этой функции требуется Enterprise."
 | 
			
		||||
@ -1311,6 +1267,11 @@ msgstr "Просмотр показателей кэша политики"
 | 
			
		||||
msgid "Clear Policy's cache metrics"
 | 
			
		||||
msgstr "Очистка показателей кэша политики"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Ключ поля для проверки, доступны ключи поля, определенные в этапах запроса."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "How many times the password hash is allowed to be on haveibeenpwned"
 | 
			
		||||
msgstr "Как часто хэш пароля может быть представлен на haveibeenpwned"
 | 
			
		||||
@ -1322,6 +1283,10 @@ msgstr ""
 | 
			
		||||
"Если показатель zxcvbn равен или меньше этого значения, политика будет "
 | 
			
		||||
"провалена."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Пароль не задан в контексте"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Invalid password."
 | 
			
		||||
msgstr "Неправильный пароль"
 | 
			
		||||
@ -1363,6 +1328,20 @@ msgstr "Оценка репутации"
 | 
			
		||||
msgid "Reputation Scores"
 | 
			
		||||
msgstr "Оценка репутации"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Waiting for authentication..."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid ""
 | 
			
		||||
"You're already authenticating in another tab. This page will refresh once "
 | 
			
		||||
"authentication is completed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Authenticate in this tab"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/denied.html
 | 
			
		||||
msgid "Permission denied"
 | 
			
		||||
msgstr "Доступ запрещен"
 | 
			
		||||
@ -2185,10 +2164,6 @@ msgstr "Роль"
 | 
			
		||||
msgid "Roles"
 | 
			
		||||
msgstr "Роли"
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "Initial Permissions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "System permission"
 | 
			
		||||
msgstr "Системное разрешение"
 | 
			
		||||
@ -2446,22 +2421,6 @@ msgstr "Сопоставление свойства LDAP источника"
 | 
			
		||||
msgid "LDAP Source Property Mappings"
 | 
			
		||||
msgstr "Сопоставление свойств LDAP источника"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/signals.py
 | 
			
		||||
msgid "Password does not match Active Directory Complexity."
 | 
			
		||||
msgstr "Пароль не соответствует сложности Active Directory."
 | 
			
		||||
@ -2470,14 +2429,6 @@ msgstr "Пароль не соответствует сложности Active D
 | 
			
		||||
msgid "No token received."
 | 
			
		||||
msgstr "Токен не был получен."
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "HTTP Basic Authentication"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Include the client ID and secret as request parameters"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Request Token URL"
 | 
			
		||||
msgstr "URL-адрес запроса токена"
 | 
			
		||||
@ -2520,12 +2471,6 @@ msgstr ""
 | 
			
		||||
msgid "Additional Scopes"
 | 
			
		||||
msgstr "Дополнительные области"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"How to perform authentication during an authorization_code token request "
 | 
			
		||||
"flow"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "OAuth Source"
 | 
			
		||||
msgstr "Источник OAuth"
 | 
			
		||||
@ -3431,12 +3376,6 @@ msgstr ""
 | 
			
		||||
"При включении этап будет завершаться успешно и продолжаться даже в случае "
 | 
			
		||||
"ввода неправильной информации о пользователе."
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"Show the user the 'Remember me on this device' toggle, allowing repeat users"
 | 
			
		||||
" to skip straight to entering their password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid "Optional enrollment flow, which is linked at the bottom of the page."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -3828,14 +3767,6 @@ msgstr ""
 | 
			
		||||
"По истечении этого времени события будут удалены. (Формат: недели=3; дни=2; "
 | 
			
		||||
"часы=3, секунды=2)."
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot decrease lower than this value. Zero or negative."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot increase higher than this value. Zero or positive."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "The option configures the footer links on the flow executor pages."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@ -13,7 +13,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-23 09:00+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2025-03-31 00:10+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2022-09-26 16:47+0000\n"
 | 
			
		||||
"Last-Translator: Jens L. <jens@goauthentik.io>, 2025\n"
 | 
			
		||||
"Language-Team: Turkish (https://app.transifex.com/authentik/teams/119923/tr/)\n"
 | 
			
		||||
@ -187,7 +187,6 @@ msgid "User's display name."
 | 
			
		||||
msgstr "Kullanıcının görünen adı."
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py authentik/providers/oauth2/models.py
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "User"
 | 
			
		||||
msgstr "Kullanıcı"
 | 
			
		||||
 | 
			
		||||
@ -373,18 +372,6 @@ msgstr "Özellik Eşleme"
 | 
			
		||||
msgid "Property Mappings"
 | 
			
		||||
msgstr "Özellik Eşlemeleri"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "session data"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Session"
 | 
			
		||||
msgstr "Oturum"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Sessions"
 | 
			
		||||
msgstr "Oturumlar"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Authenticated Session"
 | 
			
		||||
msgstr "Kimliği Doğrulanmış Oturum"
 | 
			
		||||
@ -492,38 +479,6 @@ msgstr "Lisans Kullanımı"
 | 
			
		||||
msgid "License Usage Records"
 | 
			
		||||
msgstr "Lisans Kullanım Kayıtları"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Alan tuşu kontrol etmek için, İstem aşamalarında tanımlanan alan tuşları "
 | 
			
		||||
"mevcuttur."
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Number of passwords to check against."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Parola bağlam içinde ayarlanmamış"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "This password has been used previously. Please choose a different one."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "User Password History"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policy.py
 | 
			
		||||
msgid "Enterprise required to access this feature."
 | 
			
		||||
msgstr "Bu özelliğe erişmek için Kurumsal Paket gereklidir."
 | 
			
		||||
@ -1298,6 +1253,12 @@ msgstr "İlke'nin önbellek ölçümlerini görüntüleme"
 | 
			
		||||
msgid "Clear Policy's cache metrics"
 | 
			
		||||
msgstr "İlke'nin önbellek ölçümlerini temizleyin"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Alan tuşu kontrol etmek için, İstem aşamalarında tanımlanan alan tuşları "
 | 
			
		||||
"mevcuttur."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "How many times the password hash is allowed to be on haveibeenpwned"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -1310,6 +1271,10 @@ msgstr ""
 | 
			
		||||
"Eğer zxcvbn puanı bu değere eşit veya daha az ise, politika başarısız "
 | 
			
		||||
"olacaktır."
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "Parola bağlam içinde ayarlanmamış"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Invalid password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -1351,6 +1316,20 @@ msgstr "İtibar Puanı"
 | 
			
		||||
msgid "Reputation Scores"
 | 
			
		||||
msgstr "İtibar Puanları"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Waiting for authentication..."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid ""
 | 
			
		||||
"You're already authenticating in another tab. This page will refresh once "
 | 
			
		||||
"authentication is completed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Authenticate in this tab"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/denied.html
 | 
			
		||||
msgid "Permission denied"
 | 
			
		||||
msgstr "İzin reddedildi"
 | 
			
		||||
@ -2176,10 +2155,6 @@ msgstr "Rol"
 | 
			
		||||
msgid "Roles"
 | 
			
		||||
msgstr "Roller"
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "Initial Permissions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "System permission"
 | 
			
		||||
msgstr "Sistem yetkisi"
 | 
			
		||||
@ -2423,13 +2398,6 @@ msgstr ""
 | 
			
		||||
"Bir kullanıcı parolasını değiştirdiğinde, parolayı LDAP ile geri eşitleyin. "
 | 
			
		||||
"Bu yalnızca tek bir LDAP kaynağında etkinleştirilebilir."
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"Lookup group membership based on a user attribute instead of a group "
 | 
			
		||||
"attribute. This allows nested group resolution on systems like FreeIPA and "
 | 
			
		||||
"Active Directory"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "LDAP Source"
 | 
			
		||||
msgstr "LDAP Kaynağı"
 | 
			
		||||
@ -2446,22 +2414,6 @@ msgstr "LDAP Kaynak Özellik Eşlemesi"
 | 
			
		||||
msgid "LDAP Source Property Mappings"
 | 
			
		||||
msgstr "LDAP Kaynak Özellik Eşlemeleri"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/signals.py
 | 
			
		||||
msgid "Password does not match Active Directory Complexity."
 | 
			
		||||
msgstr "Parola Active Directory Karmaşıklığıyla eşleşmiyor."
 | 
			
		||||
@ -2470,14 +2422,6 @@ msgstr "Parola Active Directory Karmaşıklığıyla eşleşmiyor."
 | 
			
		||||
msgid "No token received."
 | 
			
		||||
msgstr "Jeton alınmadı."
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "HTTP Basic Authentication"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Include the client ID and secret as request parameters"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Request Token URL"
 | 
			
		||||
msgstr "Jeton URL'si İste"
 | 
			
		||||
@ -2518,12 +2462,6 @@ msgstr "Kullanıcı bilgilerini almak için authentik tarafından kullanılan UR
 | 
			
		||||
msgid "Additional Scopes"
 | 
			
		||||
msgstr "Ek Kapsamlar"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"How to perform authentication during an authorization_code token request "
 | 
			
		||||
"flow"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "OAuth Source"
 | 
			
		||||
msgstr "OAuth Kaynağı"
 | 
			
		||||
@ -3422,12 +3360,6 @@ msgstr ""
 | 
			
		||||
"Etkinleştirildiğinde, yanlış kullanıcı bilgisi girilse bile aşama başarılı "
 | 
			
		||||
"olur ve devam eder."
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"Show the user the 'Remember me on this device' toggle, allowing repeat users"
 | 
			
		||||
" to skip straight to entering their password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid "Optional enrollment flow, which is linked at the bottom of the page."
 | 
			
		||||
msgstr "Sayfanın alt kısmında bağlanan isteğe bağlı kayıt akışı."
 | 
			
		||||
@ -3802,14 +3734,6 @@ msgstr ""
 | 
			
		||||
"Olaylar bu süreden sonra silinecektir (Format: "
 | 
			
		||||
"weeks=3;days=2;hours=3,seconds=2)."
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot decrease lower than this value. Zero or negative."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot increase higher than this value. Zero or positive."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "The option configures the footer links on the flow executor pages."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@ -14,7 +14,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-23 09:00+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2025-04-11 00:10+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2022-09-26 16:47+0000\n"
 | 
			
		||||
"Last-Translator: 刘松, 2025\n"
 | 
			
		||||
"Language-Team: Chinese (Taiwan) (https://app.transifex.com/authentik/teams/119923/zh_TW/)\n"
 | 
			
		||||
@ -178,7 +178,6 @@ msgid "User's display name."
 | 
			
		||||
msgstr "使用者的顯示名稱。"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py authentik/providers/oauth2/models.py
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "User"
 | 
			
		||||
msgstr "使用者"
 | 
			
		||||
 | 
			
		||||
@ -345,18 +344,6 @@ msgstr "屬性對應"
 | 
			
		||||
msgid "Property Mappings"
 | 
			
		||||
msgstr "屬性對應"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "session data"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Session"
 | 
			
		||||
msgstr "会话"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Sessions"
 | 
			
		||||
msgstr "会话"
 | 
			
		||||
 | 
			
		||||
#: authentik/core/models.py
 | 
			
		||||
msgid "Authenticated Session"
 | 
			
		||||
msgstr "已認證會談"
 | 
			
		||||
@ -460,36 +447,6 @@ msgstr "授權使用情況"
 | 
			
		||||
msgid "License Usage Records"
 | 
			
		||||
msgstr "授權使用紀錄"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr "要檢查的欄位鍵,在提示階段中有可用的已定義欄位鍵。"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Number of passwords to check against."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "未在上下文中設定密碼"
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "This password has been used previously. Please choose a different one."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "Password Uniqueness Policies"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policies/unique_password/models.py
 | 
			
		||||
msgid "User Password History"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/enterprise/policy.py
 | 
			
		||||
msgid "Enterprise required to access this feature."
 | 
			
		||||
msgstr "企業版才能存取此功能。"
 | 
			
		||||
@ -1219,6 +1176,10 @@ msgstr "檢視原則的快取指標"
 | 
			
		||||
msgid "Clear Policy's cache metrics"
 | 
			
		||||
msgstr "清除原則的快取指標"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Field key to check, field keys defined in Prompt stages are available."
 | 
			
		||||
msgstr "要檢查的欄位鍵,在提示階段中有可用的已定義欄位鍵。"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "How many times the password hash is allowed to be on haveibeenpwned"
 | 
			
		||||
msgstr "密碼雜湊在 haveibeenpwned 上允許出現的次數"
 | 
			
		||||
@ -1228,6 +1189,10 @@ msgid ""
 | 
			
		||||
"If the zxcvbn score is equal or less than this value, the policy will fail."
 | 
			
		||||
msgstr "如果 zxcvbn 分數等於或小於此值,則該政策將失敗。"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Password not set in context"
 | 
			
		||||
msgstr "未在上下文中設定密碼"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/password/models.py
 | 
			
		||||
msgid "Invalid password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -1269,6 +1234,20 @@ msgstr "信譽分數"
 | 
			
		||||
msgid "Reputation Scores"
 | 
			
		||||
msgstr "信譽分數"
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Waiting for authentication..."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid ""
 | 
			
		||||
"You're already authenticating in another tab. This page will refresh once "
 | 
			
		||||
"authentication is completed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/buffer.html
 | 
			
		||||
msgid "Authenticate in this tab"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/policies/templates/policies/denied.html
 | 
			
		||||
msgid "Permission denied"
 | 
			
		||||
msgstr "權限不足。"
 | 
			
		||||
@ -2020,10 +1999,6 @@ msgstr "角色"
 | 
			
		||||
msgid "Roles"
 | 
			
		||||
msgstr "角色"
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "Initial Permissions"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/rbac/models.py
 | 
			
		||||
msgid "System permission"
 | 
			
		||||
msgstr "系統權限"
 | 
			
		||||
@ -2265,22 +2240,6 @@ msgstr ""
 | 
			
		||||
msgid "LDAP Source Property Mappings"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "User LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connection"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/models.py
 | 
			
		||||
msgid "Group LDAP Source Connections"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/ldap/signals.py
 | 
			
		||||
msgid "Password does not match Active Directory Complexity."
 | 
			
		||||
msgstr "密碼不符合 Active Directory 的複雜性要求。"
 | 
			
		||||
@ -2289,14 +2248,6 @@ msgstr "密碼不符合 Active Directory 的複雜性要求。"
 | 
			
		||||
msgid "No token received."
 | 
			
		||||
msgstr "未收到權杖。"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "HTTP Basic Authentication"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Include the client ID and secret as request parameters"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "Request Token URL"
 | 
			
		||||
msgstr "請求權杖的網址"
 | 
			
		||||
@ -2335,12 +2286,6 @@ msgstr "authentik 用來擷取使用者資訊的網址。"
 | 
			
		||||
msgid "Additional Scopes"
 | 
			
		||||
msgstr "附加範圍"
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"How to perform authentication during an authorization_code token request "
 | 
			
		||||
"flow"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/sources/oauth/models.py
 | 
			
		||||
msgid "OAuth Source"
 | 
			
		||||
msgstr "OAuth 來源"
 | 
			
		||||
@ -3192,12 +3137,6 @@ msgid ""
 | 
			
		||||
"info is entered."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid ""
 | 
			
		||||
"Show the user the 'Remember me on this device' toggle, allowing repeat users"
 | 
			
		||||
" to skip straight to entering their password."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/stages/identification/models.py
 | 
			
		||||
msgid "Optional enrollment flow, which is linked at the bottom of the page."
 | 
			
		||||
msgstr "可選的註冊流程,連結在頁面的底部。"
 | 
			
		||||
@ -3542,14 +3481,6 @@ msgid ""
 | 
			
		||||
"weeks=3;days=2;hours=3,seconds=2)."
 | 
			
		||||
msgstr "事件將在此期間後刪除。(格式:weeks=3;days=2;hours=3,seconds=2)"
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot decrease lower than this value. Zero or negative."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "Reputation cannot increase higher than this value. Zero or positive."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: authentik/tenants/models.py
 | 
			
		||||
msgid "The option configures the footer links on the flow executor pages."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										538
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										538
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@ -1,546 +1,12 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@goauthentik/authentik",
 | 
			
		||||
    "version": "2025.4.0",
 | 
			
		||||
    "version": "2025.2.1",
 | 
			
		||||
    "lockfileVersion": 3,
 | 
			
		||||
    "requires": true,
 | 
			
		||||
    "packages": {
 | 
			
		||||
        "": {
 | 
			
		||||
            "name": "@goauthentik/authentik",
 | 
			
		||||
            "version": "2025.4.0",
 | 
			
		||||
            "devDependencies": {
 | 
			
		||||
                "@trivago/prettier-plugin-sort-imports": "^5.2.2",
 | 
			
		||||
                "prettier": "^3.3.3",
 | 
			
		||||
                "prettier-plugin-organize-imports": "^4.1.0",
 | 
			
		||||
                "prettier-plugin-packagejson": "^2.5.10",
 | 
			
		||||
                "typescript": "^5.6.2"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@babel/code-frame": {
 | 
			
		||||
            "version": "7.26.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
 | 
			
		||||
            "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@babel/helper-validator-identifier": "^7.25.9",
 | 
			
		||||
                "js-tokens": "^4.0.0",
 | 
			
		||||
                "picocolors": "^1.0.0"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6.9.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@babel/generator": {
 | 
			
		||||
            "version": "7.27.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz",
 | 
			
		||||
            "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@babel/parser": "^7.27.0",
 | 
			
		||||
                "@babel/types": "^7.27.0",
 | 
			
		||||
                "@jridgewell/gen-mapping": "^0.3.5",
 | 
			
		||||
                "@jridgewell/trace-mapping": "^0.3.25",
 | 
			
		||||
                "jsesc": "^3.0.2"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6.9.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@babel/helper-string-parser": {
 | 
			
		||||
            "version": "7.25.9",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
 | 
			
		||||
            "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6.9.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@babel/helper-validator-identifier": {
 | 
			
		||||
            "version": "7.25.9",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
 | 
			
		||||
            "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6.9.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@babel/parser": {
 | 
			
		||||
            "version": "7.27.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz",
 | 
			
		||||
            "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@babel/types": "^7.27.0"
 | 
			
		||||
            },
 | 
			
		||||
            "bin": {
 | 
			
		||||
                "parser": "bin/babel-parser.js"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@babel/template": {
 | 
			
		||||
            "version": "7.27.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz",
 | 
			
		||||
            "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@babel/code-frame": "^7.26.2",
 | 
			
		||||
                "@babel/parser": "^7.27.0",
 | 
			
		||||
                "@babel/types": "^7.27.0"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6.9.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@babel/traverse": {
 | 
			
		||||
            "version": "7.27.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz",
 | 
			
		||||
            "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@babel/code-frame": "^7.26.2",
 | 
			
		||||
                "@babel/generator": "^7.27.0",
 | 
			
		||||
                "@babel/parser": "^7.27.0",
 | 
			
		||||
                "@babel/template": "^7.27.0",
 | 
			
		||||
                "@babel/types": "^7.27.0",
 | 
			
		||||
                "debug": "^4.3.1",
 | 
			
		||||
                "globals": "^11.1.0"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6.9.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@babel/types": {
 | 
			
		||||
            "version": "7.27.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz",
 | 
			
		||||
            "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@babel/helper-string-parser": "^7.25.9",
 | 
			
		||||
                "@babel/helper-validator-identifier": "^7.25.9"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6.9.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@jridgewell/gen-mapping": {
 | 
			
		||||
            "version": "0.3.8",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
 | 
			
		||||
            "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@jridgewell/set-array": "^1.2.1",
 | 
			
		||||
                "@jridgewell/sourcemap-codec": "^1.4.10",
 | 
			
		||||
                "@jridgewell/trace-mapping": "^0.3.24"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@jridgewell/resolve-uri": {
 | 
			
		||||
            "version": "3.1.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
 | 
			
		||||
            "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@jridgewell/set-array": {
 | 
			
		||||
            "version": "1.2.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
 | 
			
		||||
            "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@jridgewell/sourcemap-codec": {
 | 
			
		||||
            "version": "1.5.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
 | 
			
		||||
            "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@jridgewell/trace-mapping": {
 | 
			
		||||
            "version": "0.3.25",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
 | 
			
		||||
            "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@jridgewell/resolve-uri": "^3.1.0",
 | 
			
		||||
                "@jridgewell/sourcemap-codec": "^1.4.14"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@pkgr/core": {
 | 
			
		||||
            "version": "0.1.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.2.tgz",
 | 
			
		||||
            "integrity": "sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "url": "https://opencollective.com/unts"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@trivago/prettier-plugin-sort-imports": {
 | 
			
		||||
            "version": "5.2.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-5.2.2.tgz",
 | 
			
		||||
            "integrity": "sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "Apache-2.0",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@babel/generator": "^7.26.5",
 | 
			
		||||
                "@babel/parser": "^7.26.7",
 | 
			
		||||
                "@babel/traverse": "^7.26.7",
 | 
			
		||||
                "@babel/types": "^7.26.7",
 | 
			
		||||
                "javascript-natural-sort": "^0.7.1",
 | 
			
		||||
                "lodash": "^4.17.21"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">18.12"
 | 
			
		||||
            },
 | 
			
		||||
            "peerDependencies": {
 | 
			
		||||
                "@vue/compiler-sfc": "3.x",
 | 
			
		||||
                "prettier": "2.x - 3.x",
 | 
			
		||||
                "prettier-plugin-svelte": "3.x",
 | 
			
		||||
                "svelte": "4.x || 5.x"
 | 
			
		||||
            },
 | 
			
		||||
            "peerDependenciesMeta": {
 | 
			
		||||
                "@vue/compiler-sfc": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                },
 | 
			
		||||
                "prettier-plugin-svelte": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                },
 | 
			
		||||
                "svelte": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/debug": {
 | 
			
		||||
            "version": "4.4.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
 | 
			
		||||
            "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "ms": "^2.1.3"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6.0"
 | 
			
		||||
            },
 | 
			
		||||
            "peerDependenciesMeta": {
 | 
			
		||||
                "supports-color": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/detect-indent": {
 | 
			
		||||
            "version": "7.0.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz",
 | 
			
		||||
            "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12.20"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/detect-newline": {
 | 
			
		||||
            "version": "4.0.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz",
 | 
			
		||||
            "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "url": "https://github.com/sponsors/sindresorhus"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/fdir": {
 | 
			
		||||
            "version": "6.4.4",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
 | 
			
		||||
            "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "peerDependencies": {
 | 
			
		||||
                "picomatch": "^3 || ^4"
 | 
			
		||||
            },
 | 
			
		||||
            "peerDependenciesMeta": {
 | 
			
		||||
                "picomatch": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/get-stdin": {
 | 
			
		||||
            "version": "9.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "url": "https://github.com/sponsors/sindresorhus"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/git-hooks-list": {
 | 
			
		||||
            "version": "3.2.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.2.0.tgz",
 | 
			
		||||
            "integrity": "sha512-ZHG9a1gEhUMX1TvGrLdyWb9kDopCBbTnI8z4JgRMYxsijWipgjSEYoPWqBuIB0DnRnvqlQSEeVmzpeuPm7NdFQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "url": "https://github.com/fisker/git-hooks-list?sponsor=1"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/globals": {
 | 
			
		||||
            "version": "11.12.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
 | 
			
		||||
            "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=4"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/is-plain-obj": {
 | 
			
		||||
            "version": "4.1.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
 | 
			
		||||
            "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "url": "https://github.com/sponsors/sindresorhus"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/javascript-natural-sort": {
 | 
			
		||||
            "version": "0.7.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz",
 | 
			
		||||
            "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/js-tokens": {
 | 
			
		||||
            "version": "4.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/jsesc": {
 | 
			
		||||
            "version": "3.1.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
 | 
			
		||||
            "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "bin": {
 | 
			
		||||
                "jsesc": "bin/jsesc"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=6"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/lodash": {
 | 
			
		||||
            "version": "4.17.21",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
 | 
			
		||||
            "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/ms": {
 | 
			
		||||
            "version": "2.1.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
 | 
			
		||||
            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/picocolors": {
 | 
			
		||||
            "version": "1.1.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
 | 
			
		||||
            "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "ISC"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/picomatch": {
 | 
			
		||||
            "version": "4.0.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
 | 
			
		||||
            "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "url": "https://github.com/sponsors/jonschlinkert"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/prettier": {
 | 
			
		||||
            "version": "3.5.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
 | 
			
		||||
            "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "bin": {
 | 
			
		||||
                "prettier": "bin/prettier.cjs"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=14"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "url": "https://github.com/prettier/prettier?sponsor=1"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/prettier-plugin-organize-imports": {
 | 
			
		||||
            "version": "4.1.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz",
 | 
			
		||||
            "integrity": "sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "peerDependencies": {
 | 
			
		||||
                "prettier": ">=2.0",
 | 
			
		||||
                "typescript": ">=2.9",
 | 
			
		||||
                "vue-tsc": "^2.1.0"
 | 
			
		||||
            },
 | 
			
		||||
            "peerDependenciesMeta": {
 | 
			
		||||
                "vue-tsc": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/prettier-plugin-packagejson": {
 | 
			
		||||
            "version": "2.5.10",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.10.tgz",
 | 
			
		||||
            "integrity": "sha512-LUxATI5YsImIVSaaLJlJ3aE6wTD+nvots18U3GuQMJpUyClChaZlQrqx3dBnbhF20OnKWZyx8EgyZypQtBDtgQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "sort-package-json": "2.15.1",
 | 
			
		||||
                "synckit": "0.9.2"
 | 
			
		||||
            },
 | 
			
		||||
            "peerDependencies": {
 | 
			
		||||
                "prettier": ">= 1.16.0"
 | 
			
		||||
            },
 | 
			
		||||
            "peerDependenciesMeta": {
 | 
			
		||||
                "prettier": {
 | 
			
		||||
                    "optional": true
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/semver": {
 | 
			
		||||
            "version": "7.7.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
 | 
			
		||||
            "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "ISC",
 | 
			
		||||
            "bin": {
 | 
			
		||||
                "semver": "bin/semver.js"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=10"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/sort-object-keys": {
 | 
			
		||||
            "version": "1.1.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz",
 | 
			
		||||
            "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/sort-package-json": {
 | 
			
		||||
            "version": "2.15.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.15.1.tgz",
 | 
			
		||||
            "integrity": "sha512-9x9+o8krTT2saA9liI4BljNjwAbvUnWf11Wq+i/iZt8nl2UGYnf3TH5uBydE7VALmP7AGwlfszuEeL8BDyb0YA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "detect-indent": "^7.0.1",
 | 
			
		||||
                "detect-newline": "^4.0.0",
 | 
			
		||||
                "get-stdin": "^9.0.0",
 | 
			
		||||
                "git-hooks-list": "^3.0.0",
 | 
			
		||||
                "is-plain-obj": "^4.1.0",
 | 
			
		||||
                "semver": "^7.6.0",
 | 
			
		||||
                "sort-object-keys": "^1.1.3",
 | 
			
		||||
                "tinyglobby": "^0.2.9"
 | 
			
		||||
            },
 | 
			
		||||
            "bin": {
 | 
			
		||||
                "sort-package-json": "cli.js"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/synckit": {
 | 
			
		||||
            "version": "0.9.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz",
 | 
			
		||||
            "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@pkgr/core": "^0.1.0",
 | 
			
		||||
                "tslib": "^2.6.2"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": "^14.18.0 || >=16.0.0"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "url": "https://opencollective.com/unts"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/tinyglobby": {
 | 
			
		||||
            "version": "0.2.13",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
 | 
			
		||||
            "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "fdir": "^6.4.4",
 | 
			
		||||
                "picomatch": "^4.0.2"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12.0.0"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "url": "https://github.com/sponsors/SuperchupuDev"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/tslib": {
 | 
			
		||||
            "version": "2.8.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
 | 
			
		||||
            "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "0BSD"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/typescript": {
 | 
			
		||||
            "version": "5.8.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
 | 
			
		||||
            "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "Apache-2.0",
 | 
			
		||||
            "bin": {
 | 
			
		||||
                "tsc": "bin/tsc",
 | 
			
		||||
                "tsserver": "bin/tsserver"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=14.17"
 | 
			
		||||
            }
 | 
			
		||||
            "version": "2025.2.1"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								package.json
									
									
									
									
									
								
							@ -1,15 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@goauthentik/authentik",
 | 
			
		||||
    "version": "2025.4.1",
 | 
			
		||||
    "private": true,
 | 
			
		||||
    "type": "module",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@trivago/prettier-plugin-sort-imports": "^5.2.2",
 | 
			
		||||
        "prettier": "^3.3.3",
 | 
			
		||||
        "prettier-plugin-organize-imports": "^4.1.0",
 | 
			
		||||
        "prettier-plugin-packagejson": "^2.5.10",
 | 
			
		||||
        "typescript": "^5.6.2"
 | 
			
		||||
    },
 | 
			
		||||
    "workspaces": [],
 | 
			
		||||
    "prettier": "./packages/prettier-config/index.js"
 | 
			
		||||
    "version": "2025.2.4",
 | 
			
		||||
    "private": true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								packages/docusaurus-config/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								packages/docusaurus-config/package-lock.json
									
									
									
										generated
									
									
									
								
							@ -1,12 +1,12 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@goauthentik/docusaurus-config",
 | 
			
		||||
    "version": "1.0.6",
 | 
			
		||||
    "version": "1.0.5",
 | 
			
		||||
    "lockfileVersion": 3,
 | 
			
		||||
    "requires": true,
 | 
			
		||||
    "packages": {
 | 
			
		||||
        "": {
 | 
			
		||||
            "name": "@goauthentik/docusaurus-config",
 | 
			
		||||
            "version": "1.0.6",
 | 
			
		||||
            "version": "1.0.5",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "deepmerge-ts": "^7.1.5",
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@goauthentik/docusaurus-config",
 | 
			
		||||
    "version": "1.0.6",
 | 
			
		||||
    "version": "1.0.5",
 | 
			
		||||
    "description": "authentik's Docusaurus config",
 | 
			
		||||
    "license": "MIT",
 | 
			
		||||
    "scripts": {
 | 
			
		||||
 | 
			
		||||
@ -2,3 +2,4 @@
 | 
			
		||||
 | 
			
		||||
This package contains utility scripts common to all TypeScript and JavaScript packages in the
 | 
			
		||||
`@goauthentik` monorepo.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										17
									
								
								packages/monorepo/constants.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								packages/monorepo/constants.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @file Constants for JavaScript and TypeScript files.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The current Node.js environment, defaulting to "development" when not set.
 | 
			
		||||
 *
 | 
			
		||||
 * Note, this should only be used during the build process.
 | 
			
		||||
 *
 | 
			
		||||
 * If you need to check the environment at runtime, use `process.env.NODE_ENV` to
 | 
			
		||||
 * ensure that module tree-shaking works correctly.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
export const NodeEnvironment = /** @type {'development' | 'production'} */ (
 | 
			
		||||
    process.env.NODE_ENV || "development"
 | 
			
		||||
);
 | 
			
		||||
@ -1,6 +1,4 @@
 | 
			
		||||
/// <reference types="./types/global.js" />
 | 
			
		||||
 | 
			
		||||
export * from "./paths.js";
 | 
			
		||||
export * from "./environment.js";
 | 
			
		||||
export * from "./constants.js";
 | 
			
		||||
export * from "./version.js";
 | 
			
		||||
export * from "./scripting.js";
 | 
			
		||||
							
								
								
									
										19
									
								
								packages/monorepo/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								packages/monorepo/package.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@goauthentik/monorepo",
 | 
			
		||||
    "version": "1.0.0",
 | 
			
		||||
    "description": "Utilities for the authentik monorepo.",
 | 
			
		||||
    "private": true,
 | 
			
		||||
    "license": "MIT",
 | 
			
		||||
    "type": "module",
 | 
			
		||||
    "exports": {
 | 
			
		||||
        "./package.json": "./package.json",
 | 
			
		||||
        ".": {
 | 
			
		||||
            "import": "./index.js",
 | 
			
		||||
            "types": "./out/index.d.ts"
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "types": "./out/index.d.ts",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=20.11"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								packages/monorepo/paths.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								packages/monorepo/paths.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
import { createRequire } from "node:module";
 | 
			
		||||
import { dirname, join, resolve } from "node:path";
 | 
			
		||||
import { fileURLToPath } from "node:url";
 | 
			
		||||
 | 
			
		||||
const __dirname = dirname(fileURLToPath(import.meta.url));
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {'~authentik'} MonoRepoRoot
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The root of the authentik monorepo.
 | 
			
		||||
 */
 | 
			
		||||
export const MonoRepoRoot = /** @type {MonoRepoRoot} */ (resolve(__dirname, "..", ".."));
 | 
			
		||||
 | 
			
		||||
const require = createRequire(import.meta.url);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Resolve a package name to its location in the monorepo to the single node_modules directory.
 | 
			
		||||
 * @param {string} packageName
 | 
			
		||||
 * @returns {string} The resolved path to the package.
 | 
			
		||||
 * @throws {Error} If the package cannot be resolved.
 | 
			
		||||
 */
 | 
			
		||||
export function resolvePackage(packageName) {
 | 
			
		||||
    const packageJSONPath = require.resolve(join(packageName, "package.json"), {
 | 
			
		||||
        paths: [MonoRepoRoot],
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    return dirname(packageJSONPath);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										0
									
								
								packages/monorepo/scripts.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								packages/monorepo/scripts.js
									
									
									
									
									
										Normal file
									
								
							@ -1,6 +1,6 @@
 | 
			
		||||
import { execSync } from "node:child_process";
 | 
			
		||||
 | 
			
		||||
import PackageJSON from "../../../package.json" with { type: "json" };
 | 
			
		||||
import PackageJSON from "../../package.json" with { type: "json" };
 | 
			
		||||
import { MonoRepoRoot } from "./paths.js";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -76,7 +76,6 @@ EXPOSE 9000 9300 9443
 | 
			
		||||
 | 
			
		||||
USER 1000
 | 
			
		||||
 | 
			
		||||
ENV TMPDIR=/dev/shm/ \
 | 
			
		||||
    GOFIPS=1
 | 
			
		||||
ENV GOFIPS=1
 | 
			
		||||
 | 
			
		||||
ENTRYPOINT ["/proxy"]
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										200
									
								
								pyproject.toml
									
									
									
									
									
								
							
							
						
						
									
										200
									
								
								pyproject.toml
									
									
									
									
									
								
							@ -1,116 +1,104 @@
 | 
			
		||||
[project]
 | 
			
		||||
name = "authentik"
 | 
			
		||||
version = "2025.4.1"
 | 
			
		||||
version = "2025.2.4"
 | 
			
		||||
description = ""
 | 
			
		||||
authors = [{ name = "authentik Team", email = "hello@goauthentik.io" }]
 | 
			
		||||
requires-python = "==3.13.*"
 | 
			
		||||
requires-python = "==3.12.*"
 | 
			
		||||
dependencies = [
 | 
			
		||||
    "argon2-cffi==23.1.0",
 | 
			
		||||
    "celery==5.5.2",
 | 
			
		||||
    "channels==4.2.2",
 | 
			
		||||
    "channels-redis==4.2.1",
 | 
			
		||||
    "cryptography==44.0.3",
 | 
			
		||||
    "dacite==1.9.2",
 | 
			
		||||
    "deepmerge==2.0",
 | 
			
		||||
    "defusedxml==0.7.1",
 | 
			
		||||
    "django==5.1.9",
 | 
			
		||||
    "django-countries==7.6.1",
 | 
			
		||||
    "django-cte==1.3.3",
 | 
			
		||||
    "django-filter==25.1",
 | 
			
		||||
    "django-guardian<3.0.0",
 | 
			
		||||
    "django-model-utils==5.0.0",
 | 
			
		||||
    "django-pglock==1.7.2",
 | 
			
		||||
    "django-prometheus==2.3.1",
 | 
			
		||||
    "django-redis==5.4.0",
 | 
			
		||||
    "django-storages[s3]==1.14.6",
 | 
			
		||||
    "django-tenants==3.7.0",
 | 
			
		||||
    "djangorestframework==3.16.0",
 | 
			
		||||
    "djangorestframework-guardian==0.3.0",
 | 
			
		||||
    "docker==7.1.0",
 | 
			
		||||
    "drf-orjson-renderer==1.7.3",
 | 
			
		||||
    "drf-spectacular==0.28.0",
 | 
			
		||||
    "dumb-init==1.2.5.post1",
 | 
			
		||||
    "duo-client==5.5.0",
 | 
			
		||||
    "fido2==1.2.0",
 | 
			
		||||
    "flower==2.0.1",
 | 
			
		||||
    "geoip2==5.1.0",
 | 
			
		||||
    "geopy==2.4.1",
 | 
			
		||||
    "google-api-python-client==2.169.0",
 | 
			
		||||
    "gssapi==1.9.0",
 | 
			
		||||
    "gunicorn==23.0.0",
 | 
			
		||||
    "jsonpatch==1.33",
 | 
			
		||||
    "jwcrypto==1.5.6",
 | 
			
		||||
    "kubernetes==32.0.1",
 | 
			
		||||
    "ldap3==2.9.1",
 | 
			
		||||
    "lxml==5.4.0",
 | 
			
		||||
    "msgraph-sdk==1.30.0",
 | 
			
		||||
    "opencontainers==0.0.14",
 | 
			
		||||
    "packaging==25.0",
 | 
			
		||||
    "paramiko==3.5.1",
 | 
			
		||||
    "psycopg[c,pool]==3.2.9",
 | 
			
		||||
    "pydantic==2.11.4",
 | 
			
		||||
    "pydantic-scim==0.0.8",
 | 
			
		||||
    "pyjwt==2.10.1",
 | 
			
		||||
    "pyrad==2.4",
 | 
			
		||||
    "python-kadmin-rs==0.6.0",
 | 
			
		||||
    "pyyaml==6.0.2",
 | 
			
		||||
    "requests-oauthlib==2.0.0",
 | 
			
		||||
    "scim2-filter-parser==0.7.0",
 | 
			
		||||
    "sentry-sdk==2.28.0",
 | 
			
		||||
    "service-identity==24.2.0",
 | 
			
		||||
    "setproctitle==1.3.6",
 | 
			
		||||
    "structlog==25.3.0",
 | 
			
		||||
    "swagger-spec-validator==3.0.4",
 | 
			
		||||
    "tenant-schemas-celery==4.0.1",
 | 
			
		||||
    "twilio==9.6.1",
 | 
			
		||||
    "ua-parser==1.0.1",
 | 
			
		||||
    "unidecode==1.4.0",
 | 
			
		||||
    "urllib3<3",
 | 
			
		||||
    "uvicorn[standard]==0.34.2",
 | 
			
		||||
    "watchdog==6.0.0",
 | 
			
		||||
    "webauthn==2.5.2",
 | 
			
		||||
    "wsproto==1.2.0",
 | 
			
		||||
    "xmlsec==1.3.15",
 | 
			
		||||
    "zxcvbn==4.5.0",
 | 
			
		||||
    "argon2-cffi",
 | 
			
		||||
    "celery",
 | 
			
		||||
    "channels",
 | 
			
		||||
    "channels-redis",
 | 
			
		||||
    "cryptography",
 | 
			
		||||
    "dacite",
 | 
			
		||||
    "deepmerge",
 | 
			
		||||
    "defusedxml",
 | 
			
		||||
    "django",
 | 
			
		||||
    "django-countries",
 | 
			
		||||
    "django-cte",
 | 
			
		||||
    "django-filter",
 | 
			
		||||
    "django-guardian",
 | 
			
		||||
    "django-model-utils",
 | 
			
		||||
    "django-pglock",
 | 
			
		||||
    "django-prometheus",
 | 
			
		||||
    "django-redis",
 | 
			
		||||
    "django-storages[s3]",
 | 
			
		||||
    "django-tenants",
 | 
			
		||||
    "djangorestframework",
 | 
			
		||||
    "djangorestframework-guardian",
 | 
			
		||||
    "docker",
 | 
			
		||||
    "drf-orjson-renderer",
 | 
			
		||||
    "drf-spectacular",
 | 
			
		||||
    "dumb-init",
 | 
			
		||||
    "duo-client",
 | 
			
		||||
    "fido2",
 | 
			
		||||
    "flower",
 | 
			
		||||
    "geoip2",
 | 
			
		||||
    "geopy",
 | 
			
		||||
    "google-api-python-client",
 | 
			
		||||
    "gssapi",
 | 
			
		||||
    "gunicorn",
 | 
			
		||||
    "jsonpatch",
 | 
			
		||||
    "jwcrypto",
 | 
			
		||||
    "kubernetes",
 | 
			
		||||
    "ldap3",
 | 
			
		||||
    "lxml",
 | 
			
		||||
    "msgraph-sdk",
 | 
			
		||||
    "opencontainers",
 | 
			
		||||
    "packaging",
 | 
			
		||||
    "paramiko",
 | 
			
		||||
    "psycopg[c, pool]",
 | 
			
		||||
    "pydantic",
 | 
			
		||||
    "pydantic-scim",
 | 
			
		||||
    "pyjwt",
 | 
			
		||||
    "pyrad",
 | 
			
		||||
    "python-kadmin-rs ==0.6.0",
 | 
			
		||||
    "pyyaml",
 | 
			
		||||
    "requests-oauthlib",
 | 
			
		||||
    "scim2-filter-parser",
 | 
			
		||||
    "sentry-sdk",
 | 
			
		||||
    "service_identity",
 | 
			
		||||
    "setproctitle",
 | 
			
		||||
    "structlog",
 | 
			
		||||
    "swagger-spec-validator",
 | 
			
		||||
    "tenant-schemas-celery",
 | 
			
		||||
    "twilio",
 | 
			
		||||
    "ua-parser",
 | 
			
		||||
    "unidecode",
 | 
			
		||||
    "urllib3 <3",
 | 
			
		||||
    "uvicorn[standard]",
 | 
			
		||||
    "watchdog",
 | 
			
		||||
    "webauthn",
 | 
			
		||||
    "wsproto",
 | 
			
		||||
    "xmlsec <= 1.3.14",
 | 
			
		||||
    "zxcvbn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[dependency-groups]
 | 
			
		||||
dev = [
 | 
			
		||||
    "aws-cdk-lib==2.188.0",
 | 
			
		||||
    "bandit==1.8.3",
 | 
			
		||||
    "black==25.1.0",
 | 
			
		||||
    "bump2version==1.0.1",
 | 
			
		||||
    "channels[daphne]==4.2.2",
 | 
			
		||||
    "codespell==2.4.1",
 | 
			
		||||
    "colorama==0.4.6",
 | 
			
		||||
    "constructs==10.4.2",
 | 
			
		||||
    "coverage[toml]==7.8.0",
 | 
			
		||||
    "debugpy==1.8.14",
 | 
			
		||||
    "drf-jsonschema-serializer==3.0.0",
 | 
			
		||||
    "freezegun==1.5.1",
 | 
			
		||||
    "importlib-metadata==8.6.1",
 | 
			
		||||
    "k5test==0.10.4",
 | 
			
		||||
    "pdoc==15.0.3",
 | 
			
		||||
    "pytest==8.3.5",
 | 
			
		||||
    "pytest-django==4.11.1",
 | 
			
		||||
    "pytest-github-actions-annotate-failures==0.3.0",
 | 
			
		||||
    "pytest-randomly==3.16.0",
 | 
			
		||||
    "pytest-timeout==2.4.0",
 | 
			
		||||
    "requests-mock==1.12.1",
 | 
			
		||||
    "ruff==0.11.9",
 | 
			
		||||
    "selenium==4.32.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[tool.uv]
 | 
			
		||||
no-binary-package = [
 | 
			
		||||
    # This differs from the no-binary packages in the Dockerfile. This is due to the fact
 | 
			
		||||
    # that these packages are built from source for different reasons than cryptography and kadmin.
 | 
			
		||||
    # These packages are built from source to link against the libxml2 on the system which is
 | 
			
		||||
    # required for functionality and to stay up-to-date on both libraries.
 | 
			
		||||
    # The other packages specified in the dockerfile are compiled from source to link against the
 | 
			
		||||
    # correct FIPS OpenSSL libraries
 | 
			
		||||
    "lxml",
 | 
			
		||||
    "xmlsec",
 | 
			
		||||
    "aws-cdk-lib",
 | 
			
		||||
    "bandit",
 | 
			
		||||
    "black",
 | 
			
		||||
    "bump2version",
 | 
			
		||||
    "channels[daphne]",
 | 
			
		||||
    "codespell",
 | 
			
		||||
    "colorama",
 | 
			
		||||
    "constructs",
 | 
			
		||||
    "coverage[toml]",
 | 
			
		||||
    "debugpy",
 | 
			
		||||
    "drf-jsonschema-serializer",
 | 
			
		||||
    "freezegun",
 | 
			
		||||
    "importlib-metadata",
 | 
			
		||||
    "k5test",
 | 
			
		||||
    "pdoc",
 | 
			
		||||
    "pytest",
 | 
			
		||||
    "pytest-django",
 | 
			
		||||
    "pytest-github-actions-annotate-failures",
 | 
			
		||||
    "pytest-randomly",
 | 
			
		||||
    "pytest-timeout",
 | 
			
		||||
    "requests-mock",
 | 
			
		||||
    "ruff",
 | 
			
		||||
    "selenium",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[tool.uv.sources]
 | 
			
		||||
@ -155,12 +143,12 @@ ignore-words = ".github/codespell-words.txt"
 | 
			
		||||
 | 
			
		||||
[tool.black]
 | 
			
		||||
line-length = 100
 | 
			
		||||
target-version = ['py313']
 | 
			
		||||
target-version = ['py312']
 | 
			
		||||
exclude = 'node_modules'
 | 
			
		||||
 | 
			
		||||
[tool.ruff]
 | 
			
		||||
line-length = 100
 | 
			
		||||
target-version = "py313"
 | 
			
		||||
target-version = "py312"
 | 
			
		||||
exclude = ["**/migrations/**", "**/node_modules/**"]
 | 
			
		||||
 | 
			
		||||
[tool.ruff.lint]
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,6 @@ HEALTHCHECK --interval=5s --retries=20 --start-period=3s CMD [ "/rac", "healthch
 | 
			
		||||
 | 
			
		||||
USER 1000
 | 
			
		||||
 | 
			
		||||
ENV TMPDIR=/dev/shm/ \
 | 
			
		||||
    GOFIPS=1
 | 
			
		||||
ENV GOFIPS=1
 | 
			
		||||
 | 
			
		||||
ENTRYPOINT ["/rac"]
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,6 @@ EXPOSE 1812/udp 9300
 | 
			
		||||
 | 
			
		||||
USER 1000
 | 
			
		||||
 | 
			
		||||
ENV TMPDIR=/dev/shm/ \
 | 
			
		||||
    GOFIPS=1
 | 
			
		||||
ENV GOFIPS=1
 | 
			
		||||
 | 
			
		||||
ENTRYPOINT ["/radius"]
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
openapi: 3.0.3
 | 
			
		||||
info:
 | 
			
		||||
  title: authentik
 | 
			
		||||
  version: 2025.4.1
 | 
			
		||||
  version: 2025.2.4
 | 
			
		||||
  description: Making authentication simple.
 | 
			
		||||
  contact:
 | 
			
		||||
    email: hello@goauthentik.io
 | 
			
		||||
 | 
			
		||||
@ -1,12 +1,12 @@
 | 
			
		||||
services:
 | 
			
		||||
  chrome:
 | 
			
		||||
    image: docker.io/selenium/standalone-chrome:136.0
 | 
			
		||||
    image: docker.io/selenium/standalone-chrome:122.0
 | 
			
		||||
    volumes:
 | 
			
		||||
      - /dev/shm:/dev/shm
 | 
			
		||||
    network_mode: host
 | 
			
		||||
    restart: always
 | 
			
		||||
  mailpit:
 | 
			
		||||
    image: docker.io/axllent/mailpit:v1.24.2
 | 
			
		||||
    image: docker.io/axllent/mailpit:v1.6.5
 | 
			
		||||
    ports:
 | 
			
		||||
      - 1025:1025
 | 
			
		||||
      - 8025:8025
 | 
			
		||||
 | 
			
		||||
@ -1,19 +1,12 @@
 | 
			
		||||
"""test default login flow"""
 | 
			
		||||
 | 
			
		||||
from authentik.blueprints.tests import apply_blueprint
 | 
			
		||||
from authentik.flows.models import Flow
 | 
			
		||||
from tests.e2e.utils import SeleniumTestCase, retry
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestFlowsLogin(SeleniumTestCase):
 | 
			
		||||
    """test default login flow"""
 | 
			
		||||
 | 
			
		||||
    def tearDown(self):
 | 
			
		||||
        # Reset authentication flow's compatibility mode; we need to do this as its
 | 
			
		||||
        # not specified in the blueprint
 | 
			
		||||
        Flow.objects.filter(slug="default-authentication-flow").update(compatibility_mode=False)
 | 
			
		||||
        return super().tearDown()
 | 
			
		||||
 | 
			
		||||
    @retry()
 | 
			
		||||
    @apply_blueprint(
 | 
			
		||||
        "default/flow-default-authentication-flow.yaml",
 | 
			
		||||
@ -30,21 +23,3 @@ class TestFlowsLogin(SeleniumTestCase):
 | 
			
		||||
        self.login()
 | 
			
		||||
        self.wait_for_url(self.if_user_url("/library"))
 | 
			
		||||
        self.assert_user(self.user)
 | 
			
		||||
 | 
			
		||||
    @retry()
 | 
			
		||||
    @apply_blueprint(
 | 
			
		||||
        "default/flow-default-authentication-flow.yaml",
 | 
			
		||||
        "default/flow-default-invalidation-flow.yaml",
 | 
			
		||||
    )
 | 
			
		||||
    def test_login_compatibility_mode(self):
 | 
			
		||||
        """test default login flow with compatibility mode enabled"""
 | 
			
		||||
        Flow.objects.filter(slug="default-authentication-flow").update(compatibility_mode=True)
 | 
			
		||||
        self.driver.get(
 | 
			
		||||
            self.url(
 | 
			
		||||
                "authentik_core:if-flow",
 | 
			
		||||
                flow_slug="default-authentication-flow",
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
        self.login(shadow_dom=False)
 | 
			
		||||
        self.wait_for_url(self.if_user_url("/library"))
 | 
			
		||||
        self.assert_user(self.user)
 | 
			
		||||
 | 
			
		||||
@ -1,51 +0,0 @@
 | 
			
		||||
"""test default login (using SFE interface) flow"""
 | 
			
		||||
 | 
			
		||||
from time import sleep
 | 
			
		||||
 | 
			
		||||
from selenium.webdriver.common.by import By
 | 
			
		||||
from selenium.webdriver.common.keys import Keys
 | 
			
		||||
 | 
			
		||||
from authentik.blueprints.tests import apply_blueprint
 | 
			
		||||
from tests.e2e.utils import SeleniumTestCase, retry
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestFlowsLoginSFE(SeleniumTestCase):
 | 
			
		||||
    """test default login flow"""
 | 
			
		||||
 | 
			
		||||
    def login(self):
 | 
			
		||||
        """Do entire login flow adjusted for SFE"""
 | 
			
		||||
        flow_executor = self.driver.find_element(By.ID, "flow-sfe-container")
 | 
			
		||||
        identification_stage = flow_executor.find_element(By.ID, "ident-form")
 | 
			
		||||
 | 
			
		||||
        identification_stage.find_element(By.CSS_SELECTOR, "input[name=uid_field]").click()
 | 
			
		||||
        identification_stage.find_element(By.CSS_SELECTOR, "input[name=uid_field]").send_keys(
 | 
			
		||||
            self.user.username
 | 
			
		||||
        )
 | 
			
		||||
        identification_stage.find_element(By.CSS_SELECTOR, "input[name=uid_field]").send_keys(
 | 
			
		||||
            Keys.ENTER
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        password_stage = flow_executor.find_element(By.ID, "password-form")
 | 
			
		||||
        password_stage.find_element(By.CSS_SELECTOR, "input[name=password]").send_keys(
 | 
			
		||||
            self.user.username
 | 
			
		||||
        )
 | 
			
		||||
        password_stage.find_element(By.CSS_SELECTOR, "input[name=password]").send_keys(Keys.ENTER)
 | 
			
		||||
        sleep(1)
 | 
			
		||||
 | 
			
		||||
    @retry()
 | 
			
		||||
    @apply_blueprint(
 | 
			
		||||
        "default/flow-default-authentication-flow.yaml",
 | 
			
		||||
        "default/flow-default-invalidation-flow.yaml",
 | 
			
		||||
    )
 | 
			
		||||
    def test_login(self):
 | 
			
		||||
        """test default login flow"""
 | 
			
		||||
        self.driver.get(
 | 
			
		||||
            self.url(
 | 
			
		||||
                "authentik_core:if-flow",
 | 
			
		||||
                flow_slug="default-authentication-flow",
 | 
			
		||||
                query={"sfe": True},
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
        self.login()
 | 
			
		||||
        self.wait_for_url(self.if_user_url("/library"))
 | 
			
		||||
        self.assert_user(self.user)
 | 
			
		||||
@ -26,10 +26,8 @@ from selenium import webdriver
 | 
			
		||||
from selenium.common.exceptions import NoSuchElementException, TimeoutException, WebDriverException
 | 
			
		||||
from selenium.webdriver.common.by import By
 | 
			
		||||
from selenium.webdriver.common.keys import Keys
 | 
			
		||||
from selenium.webdriver.remote.command import Command
 | 
			
		||||
from selenium.webdriver.remote.webdriver import WebDriver
 | 
			
		||||
from selenium.webdriver.remote.webelement import WebElement
 | 
			
		||||
from selenium.webdriver.support import expected_conditions as ec
 | 
			
		||||
from selenium.webdriver.support.wait import WebDriverWait
 | 
			
		||||
from structlog.stdlib import get_logger
 | 
			
		||||
 | 
			
		||||
@ -38,8 +36,8 @@ from authentik.core.models import User
 | 
			
		||||
from authentik.core.tests.utils import create_test_admin_user
 | 
			
		||||
from authentik.lib.generators import generate_id
 | 
			
		||||
 | 
			
		||||
RETRIES = int(environ.get("RETRIES", "3"))
 | 
			
		||||
IS_CI = "CI" in environ
 | 
			
		||||
RETRIES = int(environ.get("RETRIES", "3")) if IS_CI else 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_docker_tag() -> str:
 | 
			
		||||
@ -199,12 +197,7 @@ class SeleniumTestCase(DockerTestCase, StaticLiveServerTestCase):
 | 
			
		||||
        super().tearDown()
 | 
			
		||||
        if IS_CI:
 | 
			
		||||
            print("::group::Browser logs")
 | 
			
		||||
        # Very verbose way to get browser logs
 | 
			
		||||
        # https://github.com/SeleniumHQ/selenium/pull/15641
 | 
			
		||||
        # for some reason this removes the `get_log` API from Remote Webdriver
 | 
			
		||||
        # and only keeps it on the local Chrome web driver, even when using
 | 
			
		||||
        # a remote chrome driver...? (nvm the fact this was released as a minor version)
 | 
			
		||||
        for line in self.driver.execute(Command.GET_LOG, {"type": "browser"})["value"]:
 | 
			
		||||
        for line in self.driver.get_log("browser"):
 | 
			
		||||
            print(line["message"])
 | 
			
		||||
        if IS_CI:
 | 
			
		||||
            print("::endgroup::")
 | 
			
		||||
@ -241,30 +234,10 @@ class SeleniumTestCase(DockerTestCase, StaticLiveServerTestCase):
 | 
			
		||||
        element = self.driver.execute_script("return arguments[0].shadowRoot", shadow_root)
 | 
			
		||||
        return element
 | 
			
		||||
 | 
			
		||||
    def shady_dom(self) -> WebElement:
 | 
			
		||||
        class wrapper:
 | 
			
		||||
            def __init__(self, container: WebDriver):
 | 
			
		||||
                self.container = container
 | 
			
		||||
 | 
			
		||||
            def find_element(self, by: str, selector: str) -> WebElement:
 | 
			
		||||
                return self.container.execute_script(
 | 
			
		||||
                    "return document.__shady_native_querySelector(arguments[0])", selector
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
        return wrapper(self.driver)
 | 
			
		||||
 | 
			
		||||
    def login(self, shadow_dom=True):
 | 
			
		||||
        """Do entire login flow"""
 | 
			
		||||
 | 
			
		||||
        if shadow_dom:
 | 
			
		||||
            flow_executor = self.get_shadow_root("ak-flow-executor")
 | 
			
		||||
            identification_stage = self.get_shadow_root("ak-stage-identification", flow_executor)
 | 
			
		||||
        else:
 | 
			
		||||
            flow_executor = self.shady_dom()
 | 
			
		||||
            identification_stage = self.shady_dom()
 | 
			
		||||
 | 
			
		||||
        wait = WebDriverWait(identification_stage, self.wait_timeout)
 | 
			
		||||
        wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, "input[name=uidField]")))
 | 
			
		||||
    def login(self):
 | 
			
		||||
        """Do entire login flow and check user afterwards"""
 | 
			
		||||
        flow_executor = self.get_shadow_root("ak-flow-executor")
 | 
			
		||||
        identification_stage = self.get_shadow_root("ak-stage-identification", flow_executor)
 | 
			
		||||
 | 
			
		||||
        identification_stage.find_element(By.CSS_SELECTOR, "input[name=uidField]").click()
 | 
			
		||||
        identification_stage.find_element(By.CSS_SELECTOR, "input[name=uidField]").send_keys(
 | 
			
		||||
@ -274,16 +247,8 @@ class SeleniumTestCase(DockerTestCase, StaticLiveServerTestCase):
 | 
			
		||||
            Keys.ENTER
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if shadow_dom:
 | 
			
		||||
            flow_executor = self.get_shadow_root("ak-flow-executor")
 | 
			
		||||
            password_stage = self.get_shadow_root("ak-stage-password", flow_executor)
 | 
			
		||||
        else:
 | 
			
		||||
            flow_executor = self.shady_dom()
 | 
			
		||||
            password_stage = self.shady_dom()
 | 
			
		||||
 | 
			
		||||
        wait = WebDriverWait(password_stage, self.wait_timeout)
 | 
			
		||||
        wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, "input[name=password]")))
 | 
			
		||||
 | 
			
		||||
        flow_executor = self.get_shadow_root("ak-flow-executor")
 | 
			
		||||
        password_stage = self.get_shadow_root("ak-stage-password", flow_executor)
 | 
			
		||||
        password_stage.find_element(By.CSS_SELECTOR, "input[name=password]").send_keys(
 | 
			
		||||
            self.user.username
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
@ -1,28 +0,0 @@
 | 
			
		||||
// TypeScript Project Configuration
 | 
			
		||||
{
 | 
			
		||||
    "extends": "./packages/tsconfig/tsconfig.json",
 | 
			
		||||
    "compilerOptions": {
 | 
			
		||||
        "baseUrl": "."
 | 
			
		||||
    },
 | 
			
		||||
    "watchOptions": {
 | 
			
		||||
        "excludeDirectories": [
 | 
			
		||||
            "**/.git", // Git
 | 
			
		||||
            "**/.yarn", // Yarn
 | 
			
		||||
            "**/.vscode", // VS Code
 | 
			
		||||
            "**/.vscode-test-web", // VS Code Web Test
 | 
			
		||||
            "**/dist", // Distributed build files
 | 
			
		||||
            "**/out", // Output build files
 | 
			
		||||
            "**/.drafts", // Drafts
 | 
			
		||||
            "**/.github", // GitHub
 | 
			
		||||
            "**/node_modules" // Node modules
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // The root project has no sources of its own. By setting `files` to an empty
 | 
			
		||||
    // list, TS won't automatically include all sources below root (the default).
 | 
			
		||||
    "files": [],
 | 
			
		||||
    "references": [
 | 
			
		||||
        // Note that references are in the order we want them to be built.
 | 
			
		||||
        // TODO: Left blank until TypeScript workspaces are complete.
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@ -2,11 +2,15 @@
 | 
			
		||||
node_modules
 | 
			
		||||
# don't lint build output (make sure it's set to your correct build folder name)
 | 
			
		||||
dist
 | 
			
		||||
out
 | 
			
		||||
# don't lint nyc coverage output
 | 
			
		||||
coverage
 | 
			
		||||
# Import order matters
 | 
			
		||||
poly.ts
 | 
			
		||||
src/locale-codes.ts
 | 
			
		||||
src/locales/
 | 
			
		||||
storybook-static/
 | 
			
		||||
# Prettier breaks the tsconfig file
 | 
			
		||||
tsconfig.json
 | 
			
		||||
.storybook/css-import-maps*
 | 
			
		||||
package.json
 | 
			
		||||
packages/**/package.json
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								web/.storybook/authentikTheme.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								web/.storybook/authentikTheme.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
import { create } from "@storybook/theming/create";
 | 
			
		||||
 | 
			
		||||
const isDarkMode = window.matchMedia("(prefers-color-scheme: dark)").matches;
 | 
			
		||||
 | 
			
		||||
export default create({
 | 
			
		||||
    base: isDarkMode ? "dark" : "light",
 | 
			
		||||
    brandTitle: "authentik Storybook",
 | 
			
		||||
    brandUrl: "https://goauthentik.io",
 | 
			
		||||
    brandImage: "https://goauthentik.io/img/icon_left_brand_colour.svg",
 | 
			
		||||
    brandTarget: "_self",
 | 
			
		||||
});
 | 
			
		||||
@ -1,63 +0,0 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @file Storybook configuration.
 | 
			
		||||
 * @import { StorybookConfig } from "@storybook/web-components-vite";
 | 
			
		||||
 * @import { InlineConfig, Plugin } from "vite";
 | 
			
		||||
 */
 | 
			
		||||
import { createBundleDefinitions } from "@goauthentik/web/scripts/esbuild/environment";
 | 
			
		||||
import postcssLit from "rollup-plugin-postcss-lit";
 | 
			
		||||
import tsconfigPaths from "vite-tsconfig-paths";
 | 
			
		||||
 | 
			
		||||
const CSSImportPattern = /import [\w$]+ from .+\.(css)/g;
 | 
			
		||||
const JavaScriptFilePattern = /\.m?(js|ts|tsx)$/;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @satisfies {Plugin<never>}
 | 
			
		||||
 */
 | 
			
		||||
const inlineCSSPlugin = {
 | 
			
		||||
    name: "inline-css-plugin",
 | 
			
		||||
    transform: (source, id) => {
 | 
			
		||||
        if (!JavaScriptFilePattern.test(id)) return;
 | 
			
		||||
 | 
			
		||||
        const code = source.replace(CSSImportPattern, (match) => {
 | 
			
		||||
            return `${match}?inline`;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return {
 | 
			
		||||
            code,
 | 
			
		||||
        };
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @satisfies {StorybookConfig}
 | 
			
		||||
 */
 | 
			
		||||
const config = {
 | 
			
		||||
    stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"],
 | 
			
		||||
    addons: [
 | 
			
		||||
        "@storybook/addon-controls",
 | 
			
		||||
        "@storybook/addon-links",
 | 
			
		||||
        "@storybook/addon-essentials",
 | 
			
		||||
        "storybook-addon-mock",
 | 
			
		||||
    ],
 | 
			
		||||
    framework: {
 | 
			
		||||
        name: "@storybook/web-components-vite",
 | 
			
		||||
        options: {},
 | 
			
		||||
    },
 | 
			
		||||
    docs: {
 | 
			
		||||
        autodocs: "tag",
 | 
			
		||||
    },
 | 
			
		||||
    viteFinal({ plugins = [], ...config }) {
 | 
			
		||||
        /**
 | 
			
		||||
         * @satisfies {InlineConfig}
 | 
			
		||||
         */
 | 
			
		||||
        const mergedConfig = {
 | 
			
		||||
            ...config,
 | 
			
		||||
            define: createBundleDefinitions(),
 | 
			
		||||
            plugins: [inlineCSSPlugin, ...plugins, postcssLit(), tsconfigPaths()],
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return mergedConfig;
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default config;
 | 
			
		||||
							
								
								
									
										81
									
								
								web/.storybook/main.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								web/.storybook/main.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,81 @@
 | 
			
		||||
import replace from "@rollup/plugin-replace";
 | 
			
		||||
import type { StorybookConfig } from "@storybook/web-components-vite";
 | 
			
		||||
import { cwd } from "process";
 | 
			
		||||
import modify from "rollup-plugin-modify";
 | 
			
		||||
import postcssLit from "rollup-plugin-postcss-lit";
 | 
			
		||||
import tsconfigPaths from "vite-tsconfig-paths";
 | 
			
		||||
 | 
			
		||||
export const isProdBuild = process.env.NODE_ENV === "production";
 | 
			
		||||
export const apiBasePath = process.env.AK_API_BASE_PATH || "";
 | 
			
		||||
 | 
			
		||||
const importInlinePatterns = [
 | 
			
		||||
    'import AKGlobal from "(\\.\\./)*common/styles/authentik\\.css',
 | 
			
		||||
    'import AKGlobal from "@goauthentik/common/styles/authentik\\.css',
 | 
			
		||||
    'import PF.+ from "@patternfly/patternfly/\\S+\\.css',
 | 
			
		||||
    'import ThemeDark from "@goauthentik/common/styles/theme-dark\\.css',
 | 
			
		||||
    'import OneDark from "@goauthentik/common/styles/one-dark\\.css',
 | 
			
		||||
    'import styles from "\\./LibraryPageImpl\\.css',
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
const importInlineRegexp = new RegExp(importInlinePatterns.map((a) => `(${a})`).join("|"));
 | 
			
		||||
 | 
			
		||||
const config: StorybookConfig = {
 | 
			
		||||
    stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"],
 | 
			
		||||
    addons: [
 | 
			
		||||
        "@storybook/addon-controls",
 | 
			
		||||
        "@storybook/addon-links",
 | 
			
		||||
        "@storybook/addon-essentials",
 | 
			
		||||
        "storybook-addon-mock",
 | 
			
		||||
    ],
 | 
			
		||||
    staticDirs: [
 | 
			
		||||
        {
 | 
			
		||||
            from: "../node_modules/@patternfly/patternfly/patternfly-base.css",
 | 
			
		||||
            to: "@patternfly/patternfly/patternfly-base.css",
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            from: "../src/common/styles/authentik.css",
 | 
			
		||||
            to: "@goauthentik/common/styles/authentik.css",
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            from: "../src/common/styles/theme-dark.css",
 | 
			
		||||
            to: "@goauthentik/common/styles/theme-dark.css",
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            from: "../src/common/styles/one-dark.css",
 | 
			
		||||
            to: "@goauthentik/common/styles/one-dark.css",
 | 
			
		||||
        },
 | 
			
		||||
    ],
 | 
			
		||||
    framework: {
 | 
			
		||||
        name: "@storybook/web-components-vite",
 | 
			
		||||
        options: {},
 | 
			
		||||
    },
 | 
			
		||||
    docs: {
 | 
			
		||||
        autodocs: "tag",
 | 
			
		||||
    },
 | 
			
		||||
    async viteFinal(config) {
 | 
			
		||||
        return {
 | 
			
		||||
            ...config,
 | 
			
		||||
            plugins: [
 | 
			
		||||
                modify({
 | 
			
		||||
                    find: importInlineRegexp,
 | 
			
		||||
                    replace: (match: RegExpMatchArray) => {
 | 
			
		||||
                        return `${match}?inline`;
 | 
			
		||||
                    },
 | 
			
		||||
                }),
 | 
			
		||||
                replace({
 | 
			
		||||
                    "process.env.NODE_ENV": JSON.stringify(
 | 
			
		||||
                        isProdBuild ? "production" : "development",
 | 
			
		||||
                    ),
 | 
			
		||||
                    "process.env.CWD": JSON.stringify(cwd()),
 | 
			
		||||
                    "process.env.AK_API_BASE_PATH": JSON.stringify(apiBasePath),
 | 
			
		||||
                    "preventAssignment": true,
 | 
			
		||||
                }),
 | 
			
		||||
                ...config.plugins,
 | 
			
		||||
                postcssLit(),
 | 
			
		||||
                tsconfigPaths(),
 | 
			
		||||
            ],
 | 
			
		||||
        };
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default config;
 | 
			
		||||
@ -1,38 +0,0 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @file Storybook manager configuration.
 | 
			
		||||
 *
 | 
			
		||||
 * @import { ThemeVarsPartial } from "storybook/internal/theming";
 | 
			
		||||
 */
 | 
			
		||||
import { createUIThemeEffect, resolveUITheme } from "@goauthentik/web/common/theme.ts";
 | 
			
		||||
import { addons } from "@storybook/manager-api";
 | 
			
		||||
import { create } from "@storybook/theming/create";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @satisfies {Partial<ThemeVarsPartial>}
 | 
			
		||||
 */
 | 
			
		||||
const baseTheme = {
 | 
			
		||||
    brandTitle: "authentik Storybook",
 | 
			
		||||
    brandUrl: "https://goauthentik.io",
 | 
			
		||||
    brandImage: "https://goauthentik.io/img/icon_left_brand_colour.svg",
 | 
			
		||||
    brandTarget: "_self",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const uiTheme = resolveUITheme();
 | 
			
		||||
 | 
			
		||||
addons.setConfig({
 | 
			
		||||
    theme: create({
 | 
			
		||||
        ...baseTheme,
 | 
			
		||||
        base: uiTheme,
 | 
			
		||||
    }),
 | 
			
		||||
    enableShortcuts: false,
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
createUIThemeEffect((nextUITheme) => {
 | 
			
		||||
    addons.setConfig({
 | 
			
		||||
        theme: create({
 | 
			
		||||
            ...baseTheme,
 | 
			
		||||
            base: nextUITheme,
 | 
			
		||||
        }),
 | 
			
		||||
        enableShortcuts: false,
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										9
									
								
								web/.storybook/manager.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								web/.storybook/manager.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
			
		||||
// .storybook/manager.js
 | 
			
		||||
import { addons } from "@storybook/manager-api";
 | 
			
		||||
 | 
			
		||||
import authentikTheme from "./authentikTheme";
 | 
			
		||||
 | 
			
		||||
addons.setConfig({
 | 
			
		||||
    theme: authentikTheme,
 | 
			
		||||
    enableShortcuts: false,
 | 
			
		||||
});
 | 
			
		||||
@ -1,3 +1,5 @@
 | 
			
		||||
<link rel="stylesheet" href="@patternfly/patternfly/patternfly-base.css" />
 | 
			
		||||
<link rel="stylesheet" href="@goauthentik/common/styles/authentik.css" />
 | 
			
		||||
<style>
 | 
			
		||||
    body {
 | 
			
		||||
        overflow-y: scroll;
 | 
			
		||||
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user