Compare commits

..

50 Commits

Author SHA1 Message Date
fd7a7a6e64 api: fix schema not referencing errors correctly
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-09-16 10:07:23 +02:00
15c34c6f1f release: 2022.8.2 2022-08-19 15:59:53 +01:00
0ab8f4eed7 blueprints: add required password stage backends
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-19 15:59:41 +01:00
070714abe4 website/docs: add more blueprint docs
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-19 12:16:02 +01:00
810c04bacf blueprints: don't suggest models not inheriting serializermodel in schema
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-19 11:26:15 +01:00
b624bf1cb7 website/docs: prepare 2022.8.2
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-19 11:19:23 +01:00
f56a4b00ce core: bump selenium from 4.4.1 to 4.4.3 (#3450) 2022-08-19 09:13:02 +01:00
6ec0411930 web: bump @sentry/browser from 7.10.0 to 7.11.1 in /web (#3448) 2022-08-19 08:56:12 +01:00
fb59969bce web: bump lit from 2.3.0 to 2.3.1 in /web (#3449) 2022-08-19 08:54:46 +01:00
eec9c46533 web: bump @sentry/tracing from 7.10.0 to 7.11.1 in /web (#3447) 2022-08-19 08:54:25 +01:00
a3afd47850 core: bump docker from 5.0.3 to 6.0.0 (#3451) 2022-08-19 08:54:07 +01:00
8ffae4505f internal: set Host on url in envoy
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 23:20:12 +01:00
0cc83c23c4 providers/proxy: fix duplicate proxy set default
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 21:13:45 +01:00
514c48a986 internal: fix routing for requests with querystring signature to embedded outpost
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 20:43:01 +02:00
fdb8fb4b4c providers/oauth2: fix oauth2 requests being logged as unauthenticated
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 20:26:12 +02:00
d8a68407f9 lifecycle: add worker-status command to debug worker cpu usage issues
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>

#3125
2022-08-18 20:13:30 +02:00
417156d659 web/elements: fix automatic slug not working on newly opened forms
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 19:36:56 +02:00
9d58407e25 blueprints: remove _state from exporter blueprints
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 19:25:02 +02:00
f4441c9fcf providers/proxy: trigger proxy set_defaults task on startup
closes #3445

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 17:42:27 +02:00
0e9762072a blueprints: keep more modular state
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 17:42:27 +02:00
0cfffa28ad blueprints: fix exporter not ignoring non-SerializerModel objects
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 17:42:27 +02:00
1ad4c8fc29 outposts: fix log level
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 17:42:27 +02:00
dd2facdc57 website/integrations: Oracle Cloud title case (#3444)
Signed-off-by: tigattack <10629864+tigattack@users.noreply.github.com>

Signed-off-by: tigattack <10629864+tigattack@users.noreply.github.com>
2022-08-18 17:32:33 +02:00
549dfa4c3a website/integrations: add OCI
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 16:48:07 +02:00
7f8ae24e8d website/integrations: remove old options
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 16:39:34 +02:00
d05aeb91f2 *: update locales
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 16:32:24 +02:00
ab25216c1f web/flows: simplify consent's permission handling
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 16:31:48 +02:00
fb5eb7b868 sources/oauth: fix missing doseq param for updating URL query string
closes #3374

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 14:34:20 +02:00
bda218f7fc website/docs: add note for which outpost configs apply for which outposts (#3443)
add note for which outpost configs apply for which outposts

closes #3427

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 14:29:53 +02:00
198c940a80 core: fix pre-hydrated config not being escaped properly
closes #3442

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-18 13:53:22 +02:00
c900411d5a website/integrations: New VCS section and GitHub integrations (#3437)
* website/docs: create VCS section

Moved gitea and gitlab to new VCS category.

* website/docs: add GitHub-related integrations

Added GitHub Organization and GitHub Enterprise Cloud integrations. GHEC contains a note on EMU users being unsupported (GitHub limitation).

* website/docs: added GitHub links to VCS

* website/docs: Fix GitHub linter problems
2022-08-18 12:30:38 +02:00
1adc6948b4 blueprints: allow for adding remote blueprints (#3435)
* allow blueprints to be fetched from HTTP URLs

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>

* fix tests

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>

* remove os.path

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>

* add validation for blueprint path

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>

* fix tests

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-17 23:00:47 +02:00
e87236b285 blueprints: add generic export next to flow exporter (#3439) 2022-08-17 17:57:59 +01:00
846b63a17b *: remove some very verbose logging messages
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-17 13:36:56 +02:00
48fb3c98ff core: bump goauthentik.io/api/v3 from 3.2022073.8 to 3.2022081.1 (#3430) 2022-08-17 10:30:23 +02:00
b488a6fec9 web: bump @patternfly/patternfly from 4.202.1 to 4.206.3 in /web (#3428) 2022-08-17 10:30:03 +02:00
f014bd5f30 core: bump coverage from 6.4.3 to 6.4.4 (#3429) 2022-08-17 10:29:54 +02:00
03dd079e8c core: bump sentry-sdk from 1.9.4 to 1.9.5 (#3431) 2022-08-17 10:29:46 +02:00
1281e842d1 events: fix false-y values being stripped
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-16 22:29:36 +02:00
f7601d9571 events: correctly handle lists for cleaning/sanitization
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-16 21:47:30 +02:00
4d9c9160e7 events: fix sanitize_dict not working on list items
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-16 21:37:24 +02:00
ad1f913e54 blueprints: add wrapper to get blueprints as dict
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-16 21:37:05 +02:00
3da0233c40 Revert "blueprints: fix issue in prod setups with encoding dataclasses via celery"
This reverts commit ff788edd9b.
2022-08-16 21:21:47 +02:00
ff788edd9b blueprints: fix issue in prod setups with encoding dataclasses via celery
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-16 20:59:36 +02:00
aea0958f3f blueprints: add default status
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-16 17:51:22 +02:00
1f9e9f9ca0 web: bump API Client version (#3426)
Signed-off-by: GitHub <noreply@github.com>

Signed-off-by: GitHub <noreply@github.com>
Co-authored-by: BeryJu <BeryJu@users.noreply.github.com>
2022-08-16 17:05:00 +02:00
98ffec87c0 website/integrations: add note for apple source with tlds
closes #2880

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-16 17:04:44 +02:00
b52d5dccac website/integrations: fix config typo in vikunja (#3373)
Fixing configuration typo `truefo` -> `true`

Signed-off-by: Kyle Brown <blackbarn@gmail.com>

Signed-off-by: Kyle Brown <blackbarn@gmail.com>
2022-08-16 17:01:21 +02:00
e96a4fa181 ci: fix test command for final release test
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-16 16:59:17 +02:00
c53b0830c4 ci: ignore sentry upload error on publish
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
2022-08-16 16:40:10 +02:00
95 changed files with 7961 additions and 2002 deletions

View File

@ -1,5 +1,5 @@
[bumpversion] [bumpversion]
current_version = 2022.8.1 current_version = 2022.8.2
tag = True tag = True
commit = True commit = True
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+) parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)

View File

@ -139,7 +139,7 @@ jobs:
working-directory: web working-directory: web
run: | run: |
npm ci npm ci
make -C .. gen-client-web make -C .. gen-client-ts
npm run build npm run build
- name: run e2e - name: run e2e
run: | run: |
@ -173,7 +173,7 @@ jobs:
working-directory: web/ working-directory: web/
run: | run: |
npm ci npm ci
make -C .. gen-client-web make -C .. gen-client-ts
npm run build npm run build
- name: run e2e - name: run e2e
run: | run: |

View File

@ -23,7 +23,7 @@ jobs:
- working-directory: web/ - working-directory: web/
run: npm ci run: npm ci
- name: Generate API - name: Generate API
run: make gen-client-web run: make gen-client-ts
- name: Eslint - name: Eslint
working-directory: web/ working-directory: web/
run: npm run lint run: npm run lint
@ -39,7 +39,7 @@ jobs:
- working-directory: web/ - working-directory: web/
run: npm ci run: npm ci
- name: Generate API - name: Generate API
run: make gen-client-web run: make gen-client-ts
- name: prettier - name: prettier
working-directory: web/ working-directory: web/
run: npm run prettier-check run: npm run prettier-check
@ -60,7 +60,7 @@ jobs:
cd node_modules/@goauthentik cd node_modules/@goauthentik
ln -s ../../src/ web ln -s ../../src/ web
- name: Generate API - name: Generate API
run: make gen-client-web run: make gen-client-ts
- name: lit-analyse - name: lit-analyse
working-directory: web/ working-directory: web/
run: npm run lit-analyse run: npm run lit-analyse
@ -86,7 +86,7 @@ jobs:
- working-directory: web/ - working-directory: web/
run: npm ci run: npm ci
- name: Generate API - name: Generate API
run: make gen-client-web run: make gen-client-ts
- name: build - name: build
working-directory: web/ working-directory: web/
run: npm run build run: npm run build

View File

@ -138,7 +138,7 @@ jobs:
docker-compose pull -q docker-compose pull -q
docker-compose up --no-start docker-compose up --no-start
docker-compose start postgresql redis docker-compose start postgresql redis
docker-compose run -u root server test docker-compose run -u root server test-all
sentry-release: sentry-release:
needs: needs:
- build-server - build-server
@ -157,6 +157,7 @@ jobs:
docker cp ${container}:web/ . docker cp ${container}:web/ .
- name: Create a Sentry.io release - name: Create a Sentry.io release
uses: getsentry/action-release@v1 uses: getsentry/action-release@v1
continue-on-error: true
if: ${{ github.event_name == 'release' }} if: ${{ github.event_name == 'release' }}
env: env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}

View File

@ -16,7 +16,7 @@ jobs:
node-version: '16' node-version: '16'
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
- name: Generate API Client - name: Generate API Client
run: make gen-client-web run: make gen-client-ts
- name: Publish package - name: Publish package
working-directory: gen-ts-api/ working-directory: gen-ts-api/
run: | run: |

View File

@ -49,24 +49,44 @@ lint:
bandit -r authentik tests lifecycle -x node_modules bandit -r authentik tests lifecycle -x node_modules
golangci-lint run -v golangci-lint run -v
migrate:
python -m lifecycle.migrate
run:
go run -v cmd/server/main.go
i18n-extract: i18n-extract-core web-extract i18n-extract: i18n-extract-core web-extract
i18n-extract-core: i18n-extract-core:
ak makemessages --ignore web --ignore internal --ignore web --ignore web-api --ignore website -l en ak makemessages --ignore web --ignore internal --ignore web --ignore web-api --ignore website -l en
#########################
## API Schema
#########################
gen-build: gen-build:
AUTHENTIK_DEBUG=true ak make_blueprint_schema > blueprints/schema.json AUTHENTIK_DEBUG=true ak make_blueprint_schema > blueprints/schema.json
AUTHENTIK_DEBUG=true ak spectacular --file schema.yml AUTHENTIK_DEBUG=true ak spectacular --file schema.yml
gen-diff:
git show $(shell git tag -l | tail -n 1):schema.yml > old_schema.yml
docker run \
--rm -v ${PWD}:/local \
--user ${UID}:${GID} \
docker.io/openapitools/openapi-diff:2.0.1 \
--markdown /local/diff.md \
/local/old_schema.yml /local/schema.yml
rm old_schema.yml
gen-clean: gen-clean:
rm -rf web/api/src/ rm -rf web/api/src/
rm -rf api/ rm -rf api/
gen-client-web: gen-client-ts:
docker run \ docker run \
--rm -v ${PWD}:/local \ --rm -v ${PWD}:/local \
--user ${UID}:${GID} \ --user ${UID}:${GID} \
openapitools/openapi-generator-cli:v6.0.0 generate \ docker.io/openapitools/openapi-generator-cli:v6.0.0 generate \
-i /local/schema.yml \ -i /local/schema.yml \
-g typescript-fetch \ -g typescript-fetch \
-o /local/gen-ts-api \ -o /local/gen-ts-api \
@ -84,7 +104,7 @@ gen-client-go:
docker run \ docker run \
--rm -v ${PWD}:/local \ --rm -v ${PWD}:/local \
--user ${UID}:${GID} \ --user ${UID}:${GID} \
openapitools/openapi-generator-cli:v6.0.0 generate \ docker.io/openapitools/openapi-generator-cli:v6.0.0 generate \
-i /local/schema.yml \ -i /local/schema.yml \
-g go \ -g go \
-o /local/gen-go-api \ -o /local/gen-go-api \
@ -95,13 +115,7 @@ gen-client-go:
gen-dev-config: gen-dev-config:
python -m scripts.generate_config python -m scripts.generate_config
gen: gen-build gen-clean gen-client-web gen: gen-build gen-clean gen-client-ts
migrate:
python -m lifecycle.migrate
run:
go run -v cmd/server/main.go
######################### #########################
## Web ## Web

View File

@ -2,7 +2,7 @@
from os import environ from os import environ
from typing import Optional from typing import Optional
__version__ = "2022.8.1" __version__ = "2022.8.2"
ENV_GIT_HASH_KEY = "GIT_BUILD_HASH" ENV_GIT_HASH_KEY = "GIT_BUILD_HASH"

View File

@ -18,13 +18,13 @@ class AppSerializer(PassiveSerializer):
class AppsViewSet(ViewSet): class AppsViewSet(ViewSet):
"""Read-only view set list all installed apps""" """Read-only view list all installed apps"""
permission_classes = [IsAdminUser] permission_classes = [IsAdminUser]
@extend_schema(responses={200: AppSerializer(many=True)}) @extend_schema(responses={200: AppSerializer(many=True)})
def list(self, request: Request) -> Response: def list(self, request: Request) -> Response:
"""List current messages and pass into Serializer""" """Read-only view list all installed apps"""
data = [] data = []
for app in sorted(get_apps(), key=lambda app: app.name): for app in sorted(get_apps(), key=lambda app: app.name):
data.append({"name": app.name, "label": app.verbose_name}) data.append({"name": app.name, "label": app.verbose_name})

View File

@ -60,8 +60,28 @@ def postprocess_schema_responses(result, generator, **kwargs): # noqa: W0613
for path in result["paths"].values(): for path in result["paths"].values():
for method in path.values(): for method in path.values():
method["responses"].setdefault("400", validation_error.ref) method["responses"].setdefault(
method["responses"].setdefault("403", generic_error.ref) "400",
{
"content": {
"application/json": {
"schema": validation_error.ref,
}
},
"description": "",
},
)
method["responses"].setdefault(
"403",
{
"content": {
"application/json": {
"schema": generic_error.ref,
}
},
"description": "",
},
)
result["components"] = generator.registry.build(spectacular_settings.APPEND_COMPONENTS) result["components"] = generator.registry.build(spectacular_settings.APPEND_COMPONENTS)

View File

@ -1,8 +1,7 @@
"""Serializer mixin for managed models""" """Serializer mixin for managed models"""
from dataclasses import asdict
from drf_spectacular.utils import extend_schema, inline_serializer from drf_spectacular.utils import extend_schema, inline_serializer
from rest_framework.decorators import action from rest_framework.decorators import action
from rest_framework.exceptions import ValidationError
from rest_framework.fields import CharField, DateTimeField, JSONField from rest_framework.fields import CharField, DateTimeField, JSONField
from rest_framework.permissions import IsAdminUser from rest_framework.permissions import IsAdminUser
from rest_framework.request import Request from rest_framework.request import Request
@ -11,11 +10,10 @@ from rest_framework.serializers import ListSerializer, ModelSerializer
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from authentik.api.decorators import permission_required from authentik.api.decorators import permission_required
from authentik.blueprints.models import BlueprintInstance from authentik.blueprints.models import BlueprintInstance, BlueprintRetrievalFailed
from authentik.blueprints.v1.tasks import BlueprintFile, apply_blueprint, blueprints_find from authentik.blueprints.v1.tasks import apply_blueprint, blueprints_find_dict
from authentik.core.api.used_by import UsedByMixin from authentik.core.api.used_by import UsedByMixin
from authentik.core.api.utils import PassiveSerializer from authentik.core.api.utils import PassiveSerializer
from authentik.events.utils import sanitize_dict
class ManagedSerializer: class ManagedSerializer:
@ -34,6 +32,14 @@ class MetadataSerializer(PassiveSerializer):
class BlueprintInstanceSerializer(ModelSerializer): class BlueprintInstanceSerializer(ModelSerializer):
"""Info about a single blueprint instance file""" """Info about a single blueprint instance file"""
def validate_path(self, path: str) -> str:
"""Ensure the path specified is retrievable"""
try:
BlueprintInstance(path=path).retrieve()
except BlueprintRetrievalFailed as exc:
raise ValidationError(exc) from exc
return path
class Meta: class Meta:
model = BlueprintInstance model = BlueprintInstance
@ -85,8 +91,8 @@ class BlueprintInstanceViewSet(UsedByMixin, ModelViewSet):
@action(detail=False, pagination_class=None, filter_backends=[]) @action(detail=False, pagination_class=None, filter_backends=[])
def available(self, request: Request) -> Response: def available(self, request: Request) -> Response:
"""Get blueprints""" """Get blueprints"""
files: list[BlueprintFile] = blueprints_find.delay().get() files: list[dict] = blueprints_find_dict.delay().get()
return Response([sanitize_dict(asdict(file)) for file in files]) return Response(files)
@permission_required("authentik_blueprints.view_blueprintinstance") @permission_required("authentik_blueprints.view_blueprintinstance")
@extend_schema( @extend_schema(

View File

@ -2,6 +2,7 @@
from django.core.management.base import BaseCommand, no_translations from django.core.management.base import BaseCommand, no_translations
from structlog.stdlib import get_logger from structlog.stdlib import get_logger
from authentik.blueprints.models import BlueprintInstance
from authentik.blueprints.v1.importer import Importer from authentik.blueprints.v1.importer import Importer
LOGGER = get_logger() LOGGER = get_logger()
@ -14,14 +15,14 @@ class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
"""Apply all blueprints in order, abort when one fails to import""" """Apply all blueprints in order, abort when one fails to import"""
for blueprint_path in options.get("blueprints", []): for blueprint_path in options.get("blueprints", []):
with open(blueprint_path, "r", encoding="utf8") as blueprint_file: content = BlueprintInstance(path=blueprint_path).retrieve()
importer = Importer(blueprint_file.read()) importer = Importer(content)
valid, logs = importer.validate() valid, logs = importer.validate()
if not valid: if not valid:
for log in logs: for log in logs:
LOGGER.debug(**log) LOGGER.debug(**log)
raise ValueError("blueprint invalid") raise ValueError("blueprint invalid")
importer.apply() importer.apply()
def add_arguments(self, parser): def add_arguments(self, parser):
parser.add_argument("blueprints", nargs="+", type=str) parser.add_argument("blueprints", nargs="+", type=str)

View File

@ -0,0 +1,17 @@
"""Export blueprint of current authentik install"""
from django.core.management.base import BaseCommand, no_translations
from structlog.stdlib import get_logger
from authentik.blueprints.v1.exporter import Exporter
LOGGER = get_logger()
class Command(BaseCommand):
"""Export blueprint of current authentik install"""
@no_translations
def handle(self, *args, **options):
"""Export blueprint of current authentik install"""
exporter = Exporter()
self.stdout.write(exporter.export_to_string())

View File

@ -7,6 +7,7 @@ from django.core.management.base import BaseCommand, no_translations
from structlog.stdlib import get_logger from structlog.stdlib import get_logger
from authentik.blueprints.v1.importer import is_model_allowed from authentik.blueprints.v1.importer import is_model_allowed
from authentik.lib.models import SerializerModel
LOGGER = get_logger() LOGGER = get_logger()
@ -31,5 +32,7 @@ class Command(BaseCommand):
for model in apps.get_models(): for model in apps.get_models():
if not is_model_allowed(model): if not is_model_allowed(model):
continue continue
if SerializerModel not in model.__mro__:
continue
model_names.append(f"{model._meta.app_label}.{model._meta.model_name}") model_names.append(f"{model._meta.app_label}.{model._meta.model_name}")
self.schema["properties"]["entries"]["items"]["properties"]["model"]["enum"] = model_names self.schema["properties"]["entries"]["items"]["properties"]["model"]["enum"] = model_names

View File

@ -113,7 +113,8 @@ class Migration(migrations.Migration):
("error", "Error"), ("error", "Error"),
("orphaned", "Orphaned"), ("orphaned", "Orphaned"),
("unknown", "Unknown"), ("unknown", "Unknown"),
] ],
default="unknown",
), ),
), ),
("enabled", models.BooleanField(default=True)), ("enabled", models.BooleanField(default=True)),

View File

@ -1,12 +1,23 @@
"""Managed Object models""" """Managed Object models"""
from pathlib import Path
from urllib.parse import urlparse
from uuid import uuid4 from uuid import uuid4
from django.contrib.postgres.fields import ArrayField from django.contrib.postgres.fields import ArrayField
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from requests import RequestException
from rest_framework.serializers import Serializer from rest_framework.serializers import Serializer
from authentik.lib.config import CONFIG
from authentik.lib.models import CreatedUpdatedModel, SerializerModel from authentik.lib.models import CreatedUpdatedModel, SerializerModel
from authentik.lib.sentry import SentryIgnoredException
from authentik.lib.utils.http import get_http_session
class BlueprintRetrievalFailed(SentryIgnoredException):
"""Error raised when we're unable to fetch the blueprint contents, whether it be HTTP files
not being accessible or local files not being readable"""
class ManagedModel(models.Model): class ManagedModel(models.Model):
@ -54,10 +65,25 @@ class BlueprintInstance(SerializerModel, ManagedModel, CreatedUpdatedModel):
context = models.JSONField(default=dict) context = models.JSONField(default=dict)
last_applied = models.DateTimeField(auto_now=True) last_applied = models.DateTimeField(auto_now=True)
last_applied_hash = models.TextField() last_applied_hash = models.TextField()
status = models.TextField(choices=BlueprintInstanceStatus.choices) status = models.TextField(
choices=BlueprintInstanceStatus.choices, default=BlueprintInstanceStatus.UNKNOWN
)
enabled = models.BooleanField(default=True) enabled = models.BooleanField(default=True)
managed_models = ArrayField(models.TextField(), default=list) managed_models = ArrayField(models.TextField(), default=list)
def retrieve(self) -> str:
"""Retrieve blueprint contents"""
if urlparse(self.path).scheme != "":
try:
res = get_http_session().get(self.path, timeout=3, allow_redirects=True)
res.raise_for_status()
return res.text
except RequestException as exc:
raise BlueprintRetrievalFailed(exc) from exc
path = Path(CONFIG.y("blueprints_dir")).joinpath(Path(self.path))
with path.open("r", encoding="utf-8") as _file:
return _file.read()
@property @property
def serializer(self) -> Serializer: def serializer(self) -> Serializer:
from authentik.blueprints.api import BlueprintInstanceSerializer from authentik.blueprints.api import BlueprintInstanceSerializer

View File

@ -6,6 +6,7 @@ from typing import Callable
from django.apps import apps from django.apps import apps
from authentik.blueprints.manager import ManagedAppConfig from authentik.blueprints.manager import ManagedAppConfig
from authentik.blueprints.models import BlueprintInstance
from authentik.lib.config import CONFIG from authentik.lib.config import CONFIG
@ -19,11 +20,9 @@ def apply_blueprint(*files: str):
@wraps(func) @wraps(func)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
base_path = Path(CONFIG.y("blueprints_dir"))
for file in files: for file in files:
full_path = Path(base_path, file) content = BlueprintInstance(path=file).retrieve()
with full_path.open("r", encoding="utf-8") as _file: Importer(content).apply()
Importer(_file.read()).apply()
return func(*args, **kwargs) return func(*args, **kwargs)
return wrapper return wrapper

View File

@ -1,17 +1,16 @@
"""test packaged blueprints""" """test packaged blueprints"""
from glob import glob
from pathlib import Path from pathlib import Path
from typing import Callable from typing import Callable
from django.test import TransactionTestCase from django.test import TransactionTestCase
from django.utils.text import slugify
from authentik.blueprints.models import BlueprintInstance
from authentik.blueprints.tests import apply_blueprint from authentik.blueprints.tests import apply_blueprint
from authentik.blueprints.v1.importer import Importer from authentik.blueprints.v1.importer import Importer
from authentik.tenants.models import Tenant from authentik.tenants.models import Tenant
class TestBundled(TransactionTestCase): class TestPackaged(TransactionTestCase):
"""Empty class, test methods are added dynamically""" """Empty class, test methods are added dynamically"""
@apply_blueprint("default/90-default-tenant.yaml") @apply_blueprint("default/90-default-tenant.yaml")
@ -20,18 +19,18 @@ class TestBundled(TransactionTestCase):
self.assertTrue(Tenant.objects.filter(domain="authentik-default").exists()) self.assertTrue(Tenant.objects.filter(domain="authentik-default").exists())
def blueprint_tester(file_name: str) -> Callable: def blueprint_tester(file_name: Path) -> Callable:
"""This is used instead of subTest for better visibility""" """This is used instead of subTest for better visibility"""
def tester(self: TestBundled): def tester(self: TestPackaged):
with open(file_name, "r", encoding="utf8") as flow_yaml: base = Path("blueprints/")
importer = Importer(flow_yaml.read()) rel_path = Path(file_name).relative_to(base)
importer = Importer(BlueprintInstance(path=str(rel_path)).retrieve())
self.assertTrue(importer.validate()[0]) self.assertTrue(importer.validate()[0])
self.assertTrue(importer.apply()) self.assertTrue(importer.apply())
return tester return tester
for flow_file in glob("blueprints/**/*.yaml", recursive=True): for blueprint_file in Path("blueprints/").glob("**/*.yaml"):
method_name = slugify(Path(flow_file).stem).replace("-", "_").replace(".", "_") setattr(TestPackaged, f"test_blueprint_{blueprint_file}", blueprint_tester(blueprint_file))
setattr(TestBundled, f"test_flow_{method_name}", blueprint_tester(flow_file))

View File

@ -1,7 +1,7 @@
"""Test blueprints v1""" """Test blueprints v1"""
from django.test import TransactionTestCase from django.test import TransactionTestCase
from authentik.blueprints.v1.exporter import Exporter from authentik.blueprints.v1.exporter import FlowExporter
from authentik.blueprints.v1.importer import Importer, transaction_rollback from authentik.blueprints.v1.importer import Importer, transaction_rollback
from authentik.flows.models import Flow, FlowDesignation, FlowStageBinding from authentik.flows.models import Flow, FlowDesignation, FlowStageBinding
from authentik.lib.generators import generate_id from authentik.lib.generators import generate_id
@ -70,7 +70,7 @@ class TestBlueprintsV1(TransactionTestCase):
order=0, order=0,
) )
exporter = Exporter(flow) exporter = FlowExporter(flow)
export = exporter.export() export = exporter.export()
self.assertEqual(len(export.entries), 3) self.assertEqual(len(export.entries), 3)
export_yaml = exporter.export_to_string() export_yaml = exporter.export_to_string()
@ -126,7 +126,7 @@ class TestBlueprintsV1(TransactionTestCase):
fsb = FlowStageBinding.objects.create(target=flow, stage=user_login, order=0) fsb = FlowStageBinding.objects.create(target=flow, stage=user_login, order=0)
PolicyBinding.objects.create(policy=flow_policy, target=fsb, order=0) PolicyBinding.objects.create(policy=flow_policy, target=fsb, order=0)
exporter = Exporter(flow) exporter = FlowExporter(flow)
export_yaml = exporter.export_to_string() export_yaml = exporter.export_to_string()
importer = Importer(export_yaml) importer = Importer(export_yaml)
@ -169,7 +169,7 @@ class TestBlueprintsV1(TransactionTestCase):
FlowStageBinding.objects.create(target=flow, stage=first_stage, order=0) FlowStageBinding.objects.create(target=flow, stage=first_stage, order=0)
exporter = Exporter(flow) exporter = FlowExporter(flow)
export_yaml = exporter.export_to_string() export_yaml = exporter.export_to_string()
importer = Importer(export_yaml) importer = Importer(export_yaml)

View File

@ -1,4 +1,5 @@
"""Test blueprints v1 tasks""" """Test blueprints v1 tasks"""
from hashlib import sha512
from tempfile import NamedTemporaryFile, mkdtemp from tempfile import NamedTemporaryFile, mkdtemp
from django.test import TransactionTestCase from django.test import TransactionTestCase
@ -36,25 +37,32 @@ class TestBlueprintsV1Tasks(TransactionTestCase):
@CONFIG.patch("blueprints_dir", TMP) @CONFIG.patch("blueprints_dir", TMP)
def test_valid(self): def test_valid(self):
"""Test valid file""" """Test valid file"""
blueprint_id = generate_id()
with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file:
file.write( file.write(
dump( dump(
{ {
"version": 1, "version": 1,
"entries": [], "entries": [],
"metadata": {
"name": blueprint_id,
},
} }
) )
) )
file.seek(0)
file_hash = sha512(file.read().encode()).hexdigest()
file.flush() file.flush()
blueprints_discover() # pylint: disable=no-value-for-parameter blueprints_discover() # pylint: disable=no-value-for-parameter
instance = BlueprintInstance.objects.filter(name=blueprint_id).first()
self.assertEqual(instance.last_applied_hash, file_hash)
self.assertEqual( self.assertEqual(
BlueprintInstance.objects.first().last_applied_hash, instance.metadata,
( {
"e52bb445b03cd36057258dc9f0ce0fbed8278498ee1470e45315293e5f026d1b" "name": blueprint_id,
"d1f9b3526871c0003f5c07be5c3316d9d4a08444bd8fed1b3f03294e51e44522" "labels": {},
), },
) )
self.assertEqual(BlueprintInstance.objects.first().metadata, {})
@CONFIG.patch("blueprints_dir", TMP) @CONFIG.patch("blueprints_dir", TMP)
def test_valid_updated(self): def test_valid_updated(self):

View File

@ -27,16 +27,23 @@ def get_attrs(obj: SerializerModel) -> dict[str, Any]:
continue continue
if _field.read_only: if _field.read_only:
data.pop(field_name, None) data.pop(field_name, None)
if _field.default == data.get(field_name, None): if _field.get_initial() == data.get(field_name, None):
data.pop(field_name, None) data.pop(field_name, None)
if field_name.endswith("_set"): if field_name.endswith("_set"):
data.pop(field_name, None) data.pop(field_name, None)
return data return data
@dataclass
class BlueprintEntryState:
"""State of a single instance"""
instance: Optional[Model] = None
@dataclass @dataclass
class BlueprintEntry: class BlueprintEntry:
"""Single entry of a bundle""" """Single entry of a blueprint"""
identifiers: dict[str, Any] identifiers: dict[str, Any]
model: str model: str
@ -45,11 +52,11 @@ class BlueprintEntry:
# pylint: disable=invalid-name # pylint: disable=invalid-name
id: Optional[str] = None id: Optional[str] = None
_instance: Optional[Model] = None _state: BlueprintEntryState = field(default_factory=BlueprintEntryState)
@staticmethod @staticmethod
def from_model(model: SerializerModel, *extra_identifier_names: str) -> "BlueprintEntry": def from_model(model: SerializerModel, *extra_identifier_names: str) -> "BlueprintEntry":
"""Convert a SerializerModel instance to a Bundle Entry""" """Convert a SerializerModel instance to a blueprint Entry"""
identifiers = { identifiers = {
"pk": model.pk, "pk": model.pk,
} }
@ -123,15 +130,15 @@ class KeyOf(YAMLTag):
def resolve(self, entry: BlueprintEntry, blueprint: Blueprint) -> Any: def resolve(self, entry: BlueprintEntry, blueprint: Blueprint) -> Any:
for _entry in blueprint.entries: for _entry in blueprint.entries:
if _entry.id == self.id_from and _entry._instance: if _entry.id == self.id_from and _entry._state.instance:
# Special handling for PolicyBindingModels, as they'll have a different PK # Special handling for PolicyBindingModels, as they'll have a different PK
# which is used when creating policy bindings # which is used when creating policy bindings
if ( if (
isinstance(_entry._instance, PolicyBindingModel) isinstance(_entry._state.instance, PolicyBindingModel)
and entry.model.lower() == "authentik_policies.policybinding" and entry.model.lower() == "authentik_policies.policybinding"
): ):
return _entry._instance.pbm_uuid return _entry._state.instance.pbm_uuid
return _entry._instance.pk return _entry._state.instance.pk
raise ValueError( raise ValueError(
f"KeyOf: failed to find entry with `id` of `{self.id_from}` and a model instance" f"KeyOf: failed to find entry with `id` of `{self.id_from}` and a model instance"
) )
@ -176,8 +183,6 @@ class Format(YAMLTag):
def resolve(self, entry: BlueprintEntry, blueprint: Blueprint) -> Any: def resolve(self, entry: BlueprintEntry, blueprint: Blueprint) -> Any:
try: try:
print(self.format_string)
print(self.args)
return self.format_string % tuple(self.args) return self.format_string % tuple(self.args)
except TypeError as exc: except TypeError as exc:
raise EntryInvalidError(exc) raise EntryInvalidError(exc)
@ -225,7 +230,13 @@ class BlueprintDumper(SafeDumper):
def represent(self, data) -> None: def represent(self, data) -> None:
if is_dataclass(data): if is_dataclass(data):
data = asdict(data)
def factory(items):
final_dict = dict(items)
final_dict.pop("_state", None)
return final_dict
data = asdict(data, dict_factory=factory)
return super().represent(data) return super().represent(data)

View File

@ -1,12 +1,23 @@
"""Flow exporter""" """Blueprint exporter"""
from typing import Iterator from typing import Iterator
from uuid import UUID from uuid import UUID
from django.apps import apps
from django.db.models import Q from django.db.models import Q
from django.utils.timezone import now
from django.utils.translation import gettext as _
from yaml import dump from yaml import dump
from authentik.blueprints.v1.common import Blueprint, BlueprintDumper, BlueprintEntry from authentik.blueprints.v1.common import (
Blueprint,
BlueprintDumper,
BlueprintEntry,
BlueprintMetadata,
)
from authentik.blueprints.v1.importer import is_model_allowed
from authentik.blueprints.v1.labels import LABEL_AUTHENTIK_GENERATED
from authentik.flows.models import Flow, FlowStageBinding, Stage from authentik.flows.models import Flow, FlowStageBinding, Stage
from authentik.lib.models import SerializerModel
from authentik.policies.models import Policy, PolicyBinding from authentik.policies.models import Policy, PolicyBinding
from authentik.stages.prompt.models import PromptStage from authentik.stages.prompt.models import PromptStage
@ -14,6 +25,48 @@ from authentik.stages.prompt.models import PromptStage
class Exporter: class Exporter:
"""Export flow with attached stages into yaml""" """Export flow with attached stages into yaml"""
excluded_models = []
def __init__(self):
self.excluded_models = []
def get_entries(self) -> Iterator[BlueprintEntry]:
"""Get blueprint entries"""
for model in apps.get_models():
if not is_model_allowed(model):
continue
if model in self.excluded_models:
continue
if SerializerModel not in model.__mro__:
continue
for obj in model.objects.all():
yield BlueprintEntry.from_model(obj)
def _pre_export(self, blueprint: Blueprint):
"""Hook to run anything pre-export"""
def export(self) -> Blueprint:
"""Create a list of all objects and create a blueprint"""
blueprint = Blueprint()
self._pre_export(blueprint)
blueprint.metadata = BlueprintMetadata(
name=_("authentik Export - %(date)s" % {"date": str(now())}),
labels={
LABEL_AUTHENTIK_GENERATED: "true",
},
)
blueprint.entries = list(self.get_entries())
return blueprint
def export_to_string(self) -> str:
"""Call export and convert it to yaml"""
blueprint = self.export()
return dump(blueprint, Dumper=BlueprintDumper)
class FlowExporter(Exporter):
"""Exporter customised to only return objects related to `flow`"""
flow: Flow flow: Flow
with_policies: bool with_policies: bool
with_stage_prompts: bool with_stage_prompts: bool
@ -21,11 +74,14 @@ class Exporter:
pbm_uuids: list[UUID] pbm_uuids: list[UUID]
def __init__(self, flow: Flow): def __init__(self, flow: Flow):
super().__init__()
self.flow = flow self.flow = flow
self.with_policies = True self.with_policies = True
self.with_stage_prompts = True self.with_stage_prompts = True
def _prepare_pbm(self): def _pre_export(self, blueprint: Blueprint):
if not self.with_policies:
return
self.pbm_uuids = [self.flow.pbm_uuid] self.pbm_uuids = [self.flow.pbm_uuid]
self.pbm_uuids += FlowStageBinding.objects.filter(target=self.flow).values_list( self.pbm_uuids += FlowStageBinding.objects.filter(target=self.flow).values_list(
"pbm_uuid", flat=True "pbm_uuid", flat=True
@ -70,23 +126,15 @@ class Exporter:
for prompt in stage.fields.all(): for prompt in stage.fields.all():
yield BlueprintEntry.from_model(prompt) yield BlueprintEntry.from_model(prompt)
def export(self) -> Blueprint: def get_entries(self) -> Iterator[BlueprintEntry]:
"""Create a list of all objects including the flow""" entries = []
if self.with_policies: entries.append(BlueprintEntry.from_model(self.flow, "slug"))
self._prepare_pbm()
bundle = Blueprint()
bundle.entries.append(BlueprintEntry.from_model(self.flow, "slug"))
if self.with_stage_prompts: if self.with_stage_prompts:
bundle.entries.extend(self.walk_stage_prompts()) entries.extend(self.walk_stage_prompts())
if self.with_policies: if self.with_policies:
bundle.entries.extend(self.walk_policies()) entries.extend(self.walk_policies())
bundle.entries.extend(self.walk_stages()) entries.extend(self.walk_stages())
bundle.entries.extend(self.walk_stage_bindings()) entries.extend(self.walk_stage_bindings())
if self.with_policies: if self.with_policies:
bundle.entries.extend(self.walk_policy_bindings()) entries.extend(self.walk_policy_bindings())
return bundle return entries
def export_to_string(self) -> str:
"""Call export and convert it to yaml"""
bundle = self.export()
return dump(bundle, Dumper=BlueprintDumper)

View File

@ -21,6 +21,7 @@ from yaml import load
from authentik.blueprints.v1.common import ( from authentik.blueprints.v1.common import (
Blueprint, Blueprint,
BlueprintEntry, BlueprintEntry,
BlueprintEntryState,
BlueprintLoader, BlueprintLoader,
EntryInvalidError, EntryInvalidError,
) )
@ -220,7 +221,7 @@ class Importer:
model = serializer.save() model = serializer.save()
if "pk" in entry.identifiers: if "pk" in entry.identifiers:
self.__pk_map[entry.identifiers["pk"]] = model.pk self.__pk_map[entry.identifiers["pk"]] = model.pk
entry._instance = model entry._state = BlueprintEntryState(model)
self.logger.debug("updated model", model=model, pk=model.pk) self.logger.debug("updated model", model=model, pk=model.pk)
return True return True
@ -230,7 +231,7 @@ class Importer:
self.logger.debug("Starting blueprint import validation") self.logger.debug("Starting blueprint import validation")
orig_import = deepcopy(self.__import) orig_import = deepcopy(self.__import)
if self.__import.version != 1: if self.__import.version != 1:
self.logger.warning("Invalid bundle version") self.logger.warning("Invalid blueprint version")
return False, [] return False, []
with ( with (
transaction_rollback(), transaction_rollback(),

View File

@ -2,3 +2,4 @@
LABEL_AUTHENTIK_SYSTEM = "blueprints.goauthentik.io/system" LABEL_AUTHENTIK_SYSTEM = "blueprints.goauthentik.io/system"
LABEL_AUTHENTIK_INSTANTIATE = "blueprints.goauthentik.io/instantiate" LABEL_AUTHENTIK_INSTANTIATE = "blueprints.goauthentik.io/instantiate"
LABEL_AUTHENTIK_GENERATED = "blueprints.goauthentik.io/generated"

View File

@ -8,10 +8,15 @@ from dacite import from_dict
from django.db import DatabaseError, InternalError, ProgrammingError from django.db import DatabaseError, InternalError, ProgrammingError
from django.utils.timezone import now from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from structlog.stdlib import get_logger
from yaml import load from yaml import load
from yaml.error import YAMLError from yaml.error import YAMLError
from authentik.blueprints.models import BlueprintInstance, BlueprintInstanceStatus from authentik.blueprints.models import (
BlueprintInstance,
BlueprintInstanceStatus,
BlueprintRetrievalFailed,
)
from authentik.blueprints.v1.common import BlueprintLoader, BlueprintMetadata from authentik.blueprints.v1.common import BlueprintLoader, BlueprintMetadata
from authentik.blueprints.v1.importer import Importer from authentik.blueprints.v1.importer import Importer
from authentik.blueprints.v1.labels import LABEL_AUTHENTIK_INSTANTIATE from authentik.blueprints.v1.labels import LABEL_AUTHENTIK_INSTANTIATE
@ -21,9 +26,12 @@ from authentik.events.monitored_tasks import (
TaskResultStatus, TaskResultStatus,
prefill_task, prefill_task,
) )
from authentik.events.utils import sanitize_dict
from authentik.lib.config import CONFIG from authentik.lib.config import CONFIG
from authentik.root.celery import CELERY_APP from authentik.root.celery import CELERY_APP
LOGGER = get_logger()
@dataclass @dataclass
class BlueprintFile: class BlueprintFile:
@ -39,27 +47,43 @@ class BlueprintFile:
@CELERY_APP.task( @CELERY_APP.task(
throws=(DatabaseError, ProgrammingError, InternalError), throws=(DatabaseError, ProgrammingError, InternalError),
) )
def blueprints_find_dict():
"""Find blueprints as `blueprints_find` does, but return a safe dict"""
blueprints = []
for blueprint in blueprints_find():
blueprints.append(sanitize_dict(asdict(blueprint)))
return blueprints
def blueprints_find(): def blueprints_find():
"""Find blueprints and return valid ones""" """Find blueprints and return valid ones"""
blueprints = [] blueprints = []
root = Path(CONFIG.y("blueprints_dir")) root = Path(CONFIG.y("blueprints_dir"))
for file in root.glob("**/*.yaml"): for file in root.glob("**/*.yaml"):
path = Path(file) path = Path(file)
LOGGER.debug("found blueprint", path=str(path))
with open(path, "r", encoding="utf-8") as blueprint_file: with open(path, "r", encoding="utf-8") as blueprint_file:
try: try:
raw_blueprint = load(blueprint_file.read(), BlueprintLoader) raw_blueprint = load(blueprint_file.read(), BlueprintLoader)
except YAMLError: except YAMLError as exc:
raw_blueprint = None raw_blueprint = None
LOGGER.warning("failed to parse blueprint", exc=exc, path=str(path))
if not raw_blueprint: if not raw_blueprint:
continue continue
metadata = raw_blueprint.get("metadata", None) metadata = raw_blueprint.get("metadata", None)
version = raw_blueprint.get("version", 1) version = raw_blueprint.get("version", 1)
if version != 1: if version != 1:
LOGGER.warning("invalid blueprint version", version=version, path=str(path))
continue continue
file_hash = sha512(path.read_bytes()).hexdigest() file_hash = sha512(path.read_bytes()).hexdigest()
blueprint = BlueprintFile(path.relative_to(root), version, file_hash, path.stat().st_mtime) blueprint = BlueprintFile(path.relative_to(root), version, file_hash, path.stat().st_mtime)
blueprint.meta = from_dict(BlueprintMetadata, metadata) if metadata else None blueprint.meta = from_dict(BlueprintMetadata, metadata) if metadata else None
blueprints.append(blueprint) blueprints.append(blueprint)
LOGGER.info(
"parsed & loaded blueprint",
hash=file_hash,
path=str(path),
)
return blueprints return blueprints
@ -118,10 +142,9 @@ def apply_blueprint(self: MonitoredTask, instance_pk: str):
instance: BlueprintInstance = BlueprintInstance.objects.filter(pk=instance_pk).first() instance: BlueprintInstance = BlueprintInstance.objects.filter(pk=instance_pk).first()
if not instance or not instance.enabled: if not instance or not instance.enabled:
return return
full_path = Path(CONFIG.y("blueprints_dir")).joinpath(Path(instance.path)) blueprint_content = instance.retrieve()
file_hash = sha512(full_path.read_bytes()).hexdigest() file_hash = sha512(blueprint_content.encode()).hexdigest()
with open(full_path, "r", encoding="utf-8") as blueprint_file: importer = Importer(blueprint_content, instance.context)
importer = Importer(blueprint_file.read(), instance.context)
valid, logs = importer.validate() valid, logs = importer.validate()
if not valid: if not valid:
instance.status = BlueprintInstanceStatus.ERROR instance.status = BlueprintInstanceStatus.ERROR
@ -139,7 +162,13 @@ def apply_blueprint(self: MonitoredTask, instance_pk: str):
instance.last_applied = now() instance.last_applied = now()
instance.save() instance.save()
self.set_status(TaskResult(TaskResultStatus.SUCCESSFUL)) self.set_status(TaskResult(TaskResultStatus.SUCCESSFUL))
except (DatabaseError, ProgrammingError, InternalError, IOError) as exc: except (
DatabaseError,
ProgrammingError,
InternalError,
IOError,
BlueprintRetrievalFailed,
) as exc:
instance.status = BlueprintInstanceStatus.ERROR instance.status = BlueprintInstanceStatus.ERROR
instance.save() instance.save()
self.set_status(TaskResult(TaskResultStatus.ERROR).with_error(exc)) self.set_status(TaskResult(TaskResultStatus.ERROR).with_error(exc))

View File

@ -10,8 +10,8 @@
<script> <script>
window.authentik = {}; window.authentik = {};
window.authentik.locale = "{{ tenant.default_locale }}"; window.authentik.locale = "{{ tenant.default_locale }}";
window.authentik.config = JSON.parse('{{ config_json|safe }}'); window.authentik.config = JSON.parse('{{ config_json|escapejs }}');
window.authentik.tenant = JSON.parse('{{ tenant_json|safe }}'); window.authentik.tenant = JSON.parse('{{ tenant_json|escapejs }}');
</script> </script>
{% endblock %} {% endblock %}

View File

@ -12,8 +12,8 @@
<script> <script>
window.authentik = {}; window.authentik = {};
window.authentik.locale = "{{ tenant.default_locale }}"; window.authentik.locale = "{{ tenant.default_locale }}";
window.authentik.config = JSON.parse( '{{ config_json|safe }}'); window.authentik.config = JSON.parse('{{ config_json|escapejs }}');
window.authentik.tenant = JSON.parse('{{ tenant_json|safe }}'); window.authentik.tenant = JSON.parse('{{ tenant_json|escapejs }}');
window.authentik.flow = { window.authentik.flow = {
"layout": "{{ flow.layout }}", "layout": "{{ flow.layout }}",
}; };

View File

@ -10,8 +10,8 @@
<script> <script>
window.authentik = {}; window.authentik = {};
window.authentik.locale = "{{ tenant.default_locale }}"; window.authentik.locale = "{{ tenant.default_locale }}";
window.authentik.config = JSON.parse('{{ config_json|safe }}'); window.authentik.config = JSON.parse('{{ config_json|escapejs }}');
window.authentik.tenant = JSON.parse('{{ tenant_json|safe }}'); window.authentik.tenant = JSON.parse('{{ tenant_json|escapejs }}');
</script> </script>
{% endblock %} {% endblock %}

View File

@ -23,21 +23,31 @@ from authentik.policies.types import PolicyRequest
ALLOWED_SPECIAL_KEYS = re.compile("passing", flags=re.I) ALLOWED_SPECIAL_KEYS = re.compile("passing", flags=re.I)
def cleanse_item(key: str, value: Any) -> Any:
"""Cleanse a single item"""
if isinstance(value, dict):
return cleanse_dict(value)
if isinstance(value, list):
for idx, item in enumerate(value):
value[idx] = cleanse_item(key, item)
return value
try:
if SafeExceptionReporterFilter.hidden_settings.search(
key
) and not ALLOWED_SPECIAL_KEYS.search(key):
return SafeExceptionReporterFilter.cleansed_substitute
except TypeError: # pragma: no cover
return value
return value
def cleanse_dict(source: dict[Any, Any]) -> dict[Any, Any]: def cleanse_dict(source: dict[Any, Any]) -> dict[Any, Any]:
"""Cleanse a dictionary, recursively""" """Cleanse a dictionary, recursively"""
final_dict = {} final_dict = {}
for key, value in source.items(): for key, value in source.items():
try: new_value = cleanse_item(key, value)
if SafeExceptionReporterFilter.hidden_settings.search( if new_value is not ...:
key final_dict[key] = new_value
) and not ALLOWED_SPECIAL_KEYS.search(key):
final_dict[key] = SafeExceptionReporterFilter.cleansed_substitute
else:
final_dict[key] = value
except TypeError: # pragma: no cover
final_dict[key] = value
if isinstance(value, dict):
final_dict[key] = cleanse_dict(value)
return final_dict return final_dict
@ -70,6 +80,45 @@ def get_user(user: User, original_user: Optional[User] = None) -> dict[str, Any]
return user_data return user_data
# pylint: disable=too-many-return-statements
def sanitize_item(value: Any) -> Any:
"""Sanitize a single item, ensure it is JSON parsable"""
if is_dataclass(value):
# Because asdict calls `copy.deepcopy(obj)` on everything that's not tuple/dict,
# and deepcopy doesn't work with HttpRequests (neither django nor rest_framework).
# Currently, the only dataclass that actually holds an http request is a PolicyRequest
if isinstance(value, PolicyRequest):
value.http_request = None
value = asdict(value)
if isinstance(value, dict):
return sanitize_dict(value)
if isinstance(value, list):
new_values = []
for item in value:
new_value = sanitize_item(item)
if new_value:
new_values.append(new_value)
return new_values
if isinstance(value, (User, AnonymousUser)):
return sanitize_dict(get_user(value))
if isinstance(value, models.Model):
return sanitize_dict(model_to_dict(value))
if isinstance(value, UUID):
return value.hex
if isinstance(value, (HttpRequest, WSGIRequest)):
return ...
if isinstance(value, City):
return GEOIP_READER.city_to_dict(value)
if isinstance(value, Path):
return str(value)
if isinstance(value, type):
return {
"type": value.__name__,
"module": value.__module__,
}
return value
def sanitize_dict(source: dict[Any, Any]) -> dict[Any, Any]: def sanitize_dict(source: dict[Any, Any]) -> dict[Any, Any]:
"""clean source of all Models that would interfere with the JSONField. """clean source of all Models that would interfere with the JSONField.
Models are replaced with a dictionary of { Models are replaced with a dictionary of {
@ -79,32 +128,7 @@ def sanitize_dict(source: dict[Any, Any]) -> dict[Any, Any]:
}""" }"""
final_dict = {} final_dict = {}
for key, value in source.items(): for key, value in source.items():
if is_dataclass(value): new_value = sanitize_item(value)
# Because asdict calls `copy.deepcopy(obj)` on everything that's not tuple/dict, if new_value is not ...:
# and deepcopy doesn't work with HttpRequests (neither django nor rest_framework). final_dict[key] = new_value
# Currently, the only dataclass that actually holds an http request is a PolicyRequest
if isinstance(value, PolicyRequest):
value.http_request = None
value = asdict(value)
if isinstance(value, dict):
final_dict[key] = sanitize_dict(value)
elif isinstance(value, (User, AnonymousUser)):
final_dict[key] = sanitize_dict(get_user(value))
elif isinstance(value, models.Model):
final_dict[key] = sanitize_dict(model_to_dict(value))
elif isinstance(value, UUID):
final_dict[key] = value.hex
elif isinstance(value, (HttpRequest, WSGIRequest)):
continue
elif isinstance(value, City):
final_dict[key] = GEOIP_READER.city_to_dict(value)
elif isinstance(value, Path):
final_dict[key] = str(value)
elif isinstance(value, type):
final_dict[key] = {
"type": value.__name__,
"module": value.__module__,
}
else:
final_dict[key] = value
return final_dict return final_dict

View File

@ -20,7 +20,7 @@ from rest_framework.viewsets import ModelViewSet
from structlog.stdlib import get_logger from structlog.stdlib import get_logger
from authentik.api.decorators import permission_required from authentik.api.decorators import permission_required
from authentik.blueprints.v1.exporter import Exporter from authentik.blueprints.v1.exporter import FlowExporter
from authentik.blueprints.v1.importer import Importer from authentik.blueprints.v1.importer import Importer
from authentik.core.api.used_by import UsedByMixin from authentik.core.api.used_by import UsedByMixin
from authentik.core.api.utils import ( from authentik.core.api.utils import (
@ -198,7 +198,7 @@ class FlowViewSet(UsedByMixin, ModelViewSet):
def export(self, request: Request, slug: str) -> Response: def export(self, request: Request, slug: str) -> Response:
"""Export flow to .yaml file""" """Export flow to .yaml file"""
flow = self.get_object() flow = self.get_object()
exporter = Exporter(flow) exporter = FlowExporter(flow)
response = HttpResponse(content=exporter.export_to_string()) response = HttpResponse(content=exporter.export_to_string())
response["Content-Disposition"] = f'attachment; filename="{flow.slug}.yaml"' response["Content-Disposition"] = f'attachment; filename="{flow.slug}.yaml"'
return response return response

View File

@ -28,7 +28,7 @@ class AuthentikFlowsConfig(ManagedAppConfig):
"""Load flows signals""" """Load flows signals"""
self.import_module("authentik.flows.signals") self.import_module("authentik.flows.signals")
def reconcile_stages_loaded(self): def reconcile_load_stages(self):
"""Ensure all stages are loaded""" """Ensure all stages are loaded"""
from authentik.flows.models import Stage from authentik.flows.models import Stage

View File

@ -1,6 +1,5 @@
"""outpost tasks""" """outpost tasks"""
from os import R_OK, access from os import R_OK, access
from os.path import expanduser
from pathlib import Path from pathlib import Path
from socket import gethostname from socket import gethostname
from typing import Any, Optional from typing import Any, Optional
@ -240,25 +239,25 @@ def _outpost_single_update(outpost: Outpost, layer=None):
def outpost_local_connection(): def outpost_local_connection():
"""Checks the local environment and create Service connections.""" """Checks the local environment and create Service connections."""
if not CONFIG.y_bool("outposts.discover"): if not CONFIG.y_bool("outposts.discover"):
LOGGER.debug("Outpost integration discovery is disabled") LOGGER.info("Outpost integration discovery is disabled")
return return
# Explicitly check against token filename, as that's # Explicitly check against token filename, as that's
# only present when the integration is enabled # only present when the integration is enabled
if Path(SERVICE_TOKEN_FILENAME).exists(): if Path(SERVICE_TOKEN_FILENAME).exists():
LOGGER.debug("Detected in-cluster Kubernetes Config") LOGGER.info("Detected in-cluster Kubernetes Config")
if not KubernetesServiceConnection.objects.filter(local=True).exists(): if not KubernetesServiceConnection.objects.filter(local=True).exists():
LOGGER.debug("Created Service Connection for in-cluster") LOGGER.debug("Created Service Connection for in-cluster")
KubernetesServiceConnection.objects.create( KubernetesServiceConnection.objects.create(
name="Local Kubernetes Cluster", local=True, kubeconfig={} name="Local Kubernetes Cluster", local=True, kubeconfig={}
) )
# For development, check for the existence of a kubeconfig file # For development, check for the existence of a kubeconfig file
kubeconfig_path = expanduser(KUBE_CONFIG_DEFAULT_LOCATION) kubeconfig_path = Path(KUBE_CONFIG_DEFAULT_LOCATION).expanduser()
if Path(kubeconfig_path).exists(): if kubeconfig_path.exists():
LOGGER.debug("Detected kubeconfig") LOGGER.info("Detected kubeconfig")
kubeconfig_local_name = f"k8s-{gethostname()}" kubeconfig_local_name = f"k8s-{gethostname()}"
if not KubernetesServiceConnection.objects.filter(name=kubeconfig_local_name).exists(): if not KubernetesServiceConnection.objects.filter(name=kubeconfig_local_name).exists():
LOGGER.debug("Creating kubeconfig Service Connection") LOGGER.debug("Creating kubeconfig Service Connection")
with open(kubeconfig_path, "r", encoding="utf8") as _kubeconfig: with kubeconfig_path.open("r", encoding="utf8") as _kubeconfig:
KubernetesServiceConnection.objects.create( KubernetesServiceConnection.objects.create(
name=kubeconfig_local_name, name=kubeconfig_local_name,
kubeconfig=yaml.safe_load(_kubeconfig), kubeconfig=yaml.safe_load(_kubeconfig),
@ -266,7 +265,7 @@ def outpost_local_connection():
unix_socket_path = urlparse(DEFAULT_UNIX_SOCKET).path unix_socket_path = urlparse(DEFAULT_UNIX_SOCKET).path
socket = Path(unix_socket_path) socket = Path(unix_socket_path)
if socket.exists() and access(socket, R_OK): if socket.exists() and access(socket, R_OK):
LOGGER.debug("Detected local docker socket") LOGGER.info("Detected local docker socket")
if len(DockerServiceConnection.objects.filter(local=True)) == 0: if len(DockerServiceConnection.objects.filter(local=True)) == 0:
LOGGER.debug("Created Service Connection for docker") LOGGER.debug("Created Service Connection for docker")
DockerServiceConnection.objects.create( DockerServiceConnection.objects.create(

View File

@ -70,7 +70,6 @@ class PolicyAccessView(AccessMixin, View):
# Check if user is unauthenticated, so we pass the application # Check if user is unauthenticated, so we pass the application
# for the identification stage # for the identification stage
if not request.user.is_authenticated: if not request.user.is_authenticated:
LOGGER.warning("user not authenticated")
return self.handle_no_permission() return self.handle_no_permission()
# Check permissions # Check permissions
result = self.user_has_access() result = self.user_has_access()

View File

@ -10,7 +10,7 @@ from django.http.response import HttpResponseRedirect
from django.utils.cache import patch_vary_headers from django.utils.cache import patch_vary_headers
from structlog.stdlib import get_logger from structlog.stdlib import get_logger
from authentik.core.middleware import KEY_USER from authentik.core.middleware import CTX_AUTH_VIA, KEY_USER
from authentik.events.models import Event, EventAction from authentik.events.models import Event, EventAction
from authentik.providers.oauth2.errors import BearerTokenError from authentik.providers.oauth2.errors import BearerTokenError
from authentik.providers.oauth2.models import OAuth2Provider, RefreshToken from authentik.providers.oauth2.models import OAuth2Provider, RefreshToken
@ -166,6 +166,7 @@ def protected_resource_view(scopes: list[str]):
] = f'error="{error.code}", error_description="{error.description}"' ] = f'error="{error.code}", error_description="{error.description}"'
return response return response
kwargs["token"] = token kwargs["token"] = token
CTX_AUTH_VIA.set("oauth_token")
response = view(request, *args, **kwargs) response = view(request, *args, **kwargs)
setattr(response, "ak_context", {}) setattr(response, "ak_context", {})
response.ak_context[KEY_USER] = token.user.username response.ak_context[KEY_USER] = token.user.username

View File

@ -24,12 +24,7 @@ from authentik.flows.challenge import (
HttpChallengeResponse, HttpChallengeResponse,
) )
from authentik.flows.models import in_memory_stage from authentik.flows.models import in_memory_stage
from authentik.flows.planner import ( from authentik.flows.planner import PLAN_CONTEXT_APPLICATION, PLAN_CONTEXT_SSO, FlowPlanner
PLAN_CONTEXT_APPLICATION,
PLAN_CONTEXT_SSO,
FlowPlan,
FlowPlanner,
)
from authentik.flows.stage import StageView from authentik.flows.stage import StageView
from authentik.flows.views.executor import SESSION_KEY_PLAN from authentik.flows.views.executor import SESSION_KEY_PLAN
from authentik.lib.utils.time import timedelta_from_string from authentik.lib.utils.time import timedelta_from_string
@ -353,7 +348,7 @@ class AuthorizationFlowInitView(PolicyAccessView):
# planner.use_cache = False # planner.use_cache = False
planner.allow_empty_flows = True planner.allow_empty_flows = True
scope_descriptions = UserInfoView().get_scope_descriptions(self.params.scope) scope_descriptions = UserInfoView().get_scope_descriptions(self.params.scope)
plan: FlowPlan = planner.plan( plan = planner.plan(
self.request, self.request,
{ {
PLAN_CONTEXT_SSO: True, PLAN_CONTEXT_SSO: True,
@ -482,7 +477,7 @@ class OAuthFulfillmentStage(StageView):
GrantTypes.HYBRID, GrantTypes.HYBRID,
]: ]:
code = self.params.create_code(self.request) code = self.params.create_code(self.request)
code.save(force_insert=True) code.save()
if self.params.response_mode == ResponseMode.QUERY: if self.params.response_mode == ResponseMode.QUERY:
query_params = parse_qs(uri.query) query_params = parse_qs(uri.query)

View File

@ -1,10 +1,11 @@
"""authentik Proxy app""" """authentik Proxy app"""
from django.apps import AppConfig from authentik.blueprints.manager import ManagedAppConfig
class AuthentikProviderProxyConfig(AppConfig): class AuthentikProviderProxyConfig(ManagedAppConfig):
"""authentik proxy app""" """authentik proxy app"""
name = "authentik.providers.proxy" name = "authentik.providers.proxy"
label = "authentik_providers_proxy" label = "authentik_providers_proxy"
verbose_name = "authentik Providers.Proxy" verbose_name = "authentik Providers.Proxy"
default = True

View File

@ -72,7 +72,7 @@ class BaseOAuthClient:
# Special handling for scope, since it's set as array # Special handling for scope, since it's set as array
# to make additional scopes easier # to make additional scopes easier
args["scope"] = " ".join(sorted(set(args["scope"]))) args["scope"] = " ".join(sorted(set(args["scope"])))
params = urlencode(args, quote_via=quote) params = urlencode(args, quote_via=quote, doseq=True)
LOGGER.info("redirect args", **args) LOGGER.info("redirect args", **args)
return urlunparse(parsed_url._replace(query=params)) return urlunparse(parsed_url._replace(query=params))

View File

@ -15,7 +15,8 @@ def update_default_backends(apps: Apps, schema_editor: BaseDatabaseSchemaEditor)
if not stages.exists(): if not stages.exists():
return return
stage = stages.first() stage = stages.first()
stage.backends.append(BACKEND_APP_PASSWORD) if BACKEND_APP_PASSWORD not in stage.backends:
stage.backends.append(BACKEND_APP_PASSWORD)
stage.save() stage.save()

View File

@ -4,7 +4,6 @@ metadata:
entries: entries:
- attrs: - attrs:
designation: authentication designation: authentication
layout: stacked
name: Welcome to authentik! name: Welcome to authentik!
title: Welcome to authentik! title: Welcome to authentik!
identifiers: identifiers:
@ -16,22 +15,12 @@ entries:
- authentik.core.auth.InbuiltBackend - authentik.core.auth.InbuiltBackend
- authentik.sources.ldap.auth.LDAPBackend - authentik.sources.ldap.auth.LDAPBackend
- authentik.core.auth.TokenBackend - authentik.core.auth.TokenBackend
- authentik.core.auth.TokenBackend
configure_flow: !Find [authentik_flows.flow, [slug, default-password-change]] configure_flow: !Find [authentik_flows.flow, [slug, default-password-change]]
failed_attempts_before_cancel: 5
identifiers: identifiers:
name: default-authentication-password name: default-authentication-password
id: default-authentication-password id: default-authentication-password
model: authentik_stages_password.passwordstage model: authentik_stages_password.passwordstage
- attrs: - identifiers:
device_classes:
- static
- totp
- webauthn
- duo
- sms
not_configured_action: skip
identifiers:
name: default-authentication-mfa-validation name: default-authentication-mfa-validation
id: default-authentication-mfa-validation id: default-authentication-mfa-validation
model: authentik_stages_authenticator_validate.authenticatorvalidatestage model: authentik_stages_authenticator_validate.authenticatorvalidatestage

View File

@ -5,7 +5,6 @@ entries:
- attrs: - attrs:
designation: stage_configuration designation: stage_configuration
name: default-authenticator-static-setup name: default-authenticator-static-setup
policy_engine_mode: any
title: Setup Static OTP Tokens title: Setup Static OTP Tokens
identifiers: identifiers:
slug: default-authenticator-static-setup slug: default-authenticator-static-setup

View File

@ -5,7 +5,6 @@ entries:
- attrs: - attrs:
designation: stage_configuration designation: stage_configuration
name: default-authenticator-webauthn-setup name: default-authenticator-webauthn-setup
policy_engine_mode: any
title: Setup WebAuthn title: Setup WebAuthn
identifiers: identifiers:
slug: default-authenticator-webauthn-setup slug: default-authenticator-webauthn-setup

View File

@ -48,9 +48,6 @@
"model": { "model": {
"type": "string", "type": "string",
"enum": [ "enum": [
"auth.permission",
"contenttypes.contenttype",
"sessions.session",
"authentik_crypto.certificatekeypair", "authentik_crypto.certificatekeypair",
"authentik_events.event", "authentik_events.event",
"authentik_events.notificationtransport", "authentik_events.notificationtransport",
@ -114,15 +111,6 @@
"authentik_stages_user_write.userwritestage", "authentik_stages_user_write.userwritestage",
"authentik_tenants.tenant", "authentik_tenants.tenant",
"authentik_blueprints.blueprintinstance", "authentik_blueprints.blueprintinstance",
"guardian.userobjectpermission",
"guardian.groupobjectpermission",
"otp_static.staticdevice",
"otp_static.statictoken",
"otp_totp.totpdevice",
"silk.request",
"silk.response",
"silk.sqlquery",
"silk.profile",
"authentik_core.group", "authentik_core.group",
"authentik_core.user", "authentik_core.user",
"authentik_core.application", "authentik_core.application",

View File

@ -29,7 +29,7 @@ services:
retries: 5 retries: 5
timeout: 3s timeout: 3s
server: server:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2022.8.1} image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2022.8.2}
restart: unless-stopped restart: unless-stopped
command: server command: server
environment: environment:
@ -50,7 +50,7 @@ services:
- "0.0.0.0:${AUTHENTIK_PORT_HTTP:-9000}:9000" - "0.0.0.0:${AUTHENTIK_PORT_HTTP:-9000}:9000"
- "0.0.0.0:${AUTHENTIK_PORT_HTTPS:-9443}:9443" - "0.0.0.0:${AUTHENTIK_PORT_HTTPS:-9443}:9443"
worker: worker:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2022.8.1} image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2022.8.2}
restart: unless-stopped restart: unless-stopped
command: worker command: worker
environment: environment:

2
go.mod
View File

@ -24,7 +24,7 @@ require (
github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b
github.com/sirupsen/logrus v1.9.0 github.com/sirupsen/logrus v1.9.0
github.com/stretchr/testify v1.8.0 github.com/stretchr/testify v1.8.0
goauthentik.io/api/v3 v3.2022073.8 goauthentik.io/api/v3 v3.2022081.1
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f
gopkg.in/boj/redistore.v1 v1.0.0-20160128113310-fc113767cd6b gopkg.in/boj/redistore.v1 v1.0.0-20160128113310-fc113767cd6b

4
go.sum
View File

@ -367,8 +367,8 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
goauthentik.io/api/v3 v3.2022073.8 h1:BwTDSNcbsfN0PUfJ0qnwUGJdp2gTMXryYMvUQfXxrZg= goauthentik.io/api/v3 v3.2022081.1 h1:/V6ktaQ9O8zhRHTkiswxgqg16fe3FL++9UoT9+S97NA=
goauthentik.io/api/v3 v3.2022073.8/go.mod h1:QM9J32HgYE4gL71lWAfAoXSPdSmLVLW08itfLI3Mo10= goauthentik.io/api/v3 v3.2022081.1/go.mod h1:QM9J32HgYE4gL71lWAfAoXSPdSmLVLW08itfLI3Mo10=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=

View File

@ -29,4 +29,4 @@ func UserAgent() string {
return fmt.Sprintf("authentik@%s", FullVersion()) return fmt.Sprintf("authentik@%s", FullVersion())
} }
const VERSION = "2022.8.1" const VERSION = "2022.8.2"

View File

@ -148,9 +148,11 @@ func NewApplication(p api.ProxyOutpostConfig, c *http.Client, cs *ak.CryptoStore
mux.Use(sentryhttp.New(sentryhttp.Options{}).Handle) mux.Use(sentryhttp.New(sentryhttp.Options{}).Handle)
mux.Use(func(inner http.Handler) http.Handler { mux.Use(func(inner http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if _, set := r.URL.Query()[CallbackSignature]; set { if strings.EqualFold(r.URL.Query().Get(CallbackSignature), "true") {
a.log.Debug("handling OAuth Callback from querystring signature")
a.handleAuthCallback(w, r) a.handleAuthCallback(w, r)
} else if _, set := r.URL.Query()[LogoutSignature]; set { } else if strings.EqualFold(r.URL.Query().Get(LogoutSignature), "true") {
a.log.Debug("handling OAuth Logout from querystring signature")
a.handleSignOut(w, r) a.handleSignOut(w, r)
} else { } else {
inner.ServeHTTP(w, r) inner.ServeHTTP(w, r)
@ -201,6 +203,16 @@ func (a *Application) Mode() api.ProxyMode {
return *a.proxyConfig.Mode.Get() return *a.proxyConfig.Mode.Get()
} }
func (a *Application) HasQuerySignature(r *http.Request) bool {
if strings.EqualFold(r.URL.Query().Get(CallbackSignature), "true") {
return true
}
if strings.EqualFold(r.URL.Query().Get(LogoutSignature), "true") {
return true
}
return false
}
func (a *Application) ProxyConfig() api.ProxyOutpostConfig { func (a *Application) ProxyConfig() api.ProxyOutpostConfig {
return a.proxyConfig return a.proxyConfig
} }

View File

@ -154,6 +154,7 @@ func (a *Application) forwardHandleNginx(rw http.ResponseWriter, r *http.Request
func (a *Application) forwardHandleEnvoy(rw http.ResponseWriter, r *http.Request) { func (a *Application) forwardHandleEnvoy(rw http.ResponseWriter, r *http.Request) {
a.log.WithField("header", r.Header).Trace("tracing headers for debug") a.log.WithField("header", r.Header).Trace("tracing headers for debug")
r.URL.Path = strings.TrimPrefix(r.URL.Path, envoyPrefix) r.URL.Path = strings.TrimPrefix(r.URL.Path, envoyPrefix)
r.URL.Host = r.Host
fwd := r.URL fwd := r.URL
// Check if we're authenticated, or the request path is on the allowlist // Check if we're authenticated, or the request path is on the allowlist
claims, err := a.getClaims(r) claims, err := a.getClaims(r)

View File

@ -24,7 +24,8 @@ func TestForwardHandleEnvoy_Single_Skip(t *testing.T) {
func TestForwardHandleEnvoy_Single_Headers(t *testing.T) { func TestForwardHandleEnvoy_Single_Headers(t *testing.T) {
a := newTestApplication() a := newTestApplication()
req, _ := http.NewRequest("GET", "http://test.goauthentik.io/app", nil) req, _ := http.NewRequest("GET", "http:///app", nil)
req.Host = "ext.t.goauthentik.io"
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
a.forwardHandleEnvoy(rr, req) a.forwardHandleEnvoy(rr, req)
@ -39,7 +40,7 @@ func TestForwardHandleEnvoy_Single_Headers(t *testing.T) {
"state": []string{s.Values[constants.SessionOAuthState].([]string)[0]}, "state": []string{s.Values[constants.SessionOAuthState].([]string)[0]},
} }
assert.Equal(t, fmt.Sprintf("http://fake-auth.t.goauthentik.io/auth?%s", shouldUrl.Encode()), loc.String()) assert.Equal(t, fmt.Sprintf("http://fake-auth.t.goauthentik.io/auth?%s", shouldUrl.Encode()), loc.String())
assert.Equal(t, "http://test.goauthentik.io/app", s.Values[constants.SessionRedirect]) assert.Equal(t, "http://ext.t.goauthentik.io/app", s.Values[constants.SessionRedirect])
} }
func TestForwardHandleEnvoy_Single_Claims(t *testing.T) { func TestForwardHandleEnvoy_Single_Claims(t *testing.T) {
@ -91,7 +92,8 @@ func TestForwardHandleEnvoy_Domain_Header(t *testing.T) {
a.proxyConfig.Mode = *api.NewNullableProxyMode(api.PROXYMODE_FORWARD_DOMAIN.Ptr()) a.proxyConfig.Mode = *api.NewNullableProxyMode(api.PROXYMODE_FORWARD_DOMAIN.Ptr())
a.proxyConfig.CookieDomain = api.PtrString("foo") a.proxyConfig.CookieDomain = api.PtrString("foo")
a.proxyConfig.ExternalHost = "http://auth.test.goauthentik.io" a.proxyConfig.ExternalHost = "http://auth.test.goauthentik.io"
req, _ := http.NewRequest("GET", "http://test.goauthentik.io/app", nil) req, _ := http.NewRequest("GET", "http:///app", nil)
req.Host = "test.goauthentik.io"
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
a.forwardHandleEnvoy(rr, req) a.forwardHandleEnvoy(rr, req)

View File

@ -66,13 +66,13 @@ func NewProxyServer(ac *ak.APIController) *ProxyServer {
} }
func (ps *ProxyServer) HandleHost(rw http.ResponseWriter, r *http.Request) bool { func (ps *ProxyServer) HandleHost(rw http.ResponseWriter, r *http.Request) bool {
a, host := ps.lookupApp(r) a, _ := ps.lookupApp(r)
if a != nil { if a == nil {
if a.Mode() == api.PROXYMODE_PROXY { return false
ps.log.WithField("host", host).Trace("routing to proxy outpost") }
a.ServeHTTP(rw, r) if a.HasQuerySignature(r) || a.Mode() == api.PROXYMODE_PROXY {
return true a.ServeHTTP(rw, r)
} return true
} }
return false return false
} }

View File

@ -9,9 +9,7 @@ import (
"time" "time"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"goauthentik.io/internal/outpost/proxyv2/application"
"goauthentik.io/internal/utils/sentry" "goauthentik.io/internal/utils/sentry"
"goauthentik.io/internal/utils/web"
) )
func (ws *WebServer) configureProxy() { func (ws *WebServer) configureProxy() {
@ -53,9 +51,7 @@ func (ws *WebServer) configureProxy() {
} }
before := time.Now() before := time.Now()
if ws.ProxyServer != nil { if ws.ProxyServer != nil {
_, oauthCallbackSet := r.URL.Query()[application.CallbackSignature] if ws.ProxyServer.HandleHost(rw, r) {
_, logoutSet := r.URL.Query()[application.LogoutSignature]
if ws.ProxyServer.HandleHost(rw, r) || oauthCallbackSet || logoutSet {
Requests.With(prometheus.Labels{ Requests.With(prometheus.Labels{
"dest": "embedded_outpost", "dest": "embedded_outpost",
}).Observe(float64(time.Since(before))) }).Observe(float64(time.Since(before)))
@ -65,7 +61,6 @@ func (ws *WebServer) configureProxy() {
Requests.With(prometheus.Labels{ Requests.With(prometheus.Labels{
"dest": "py", "dest": "py",
}).Observe(float64(time.Since(before))) }).Observe(float64(time.Since(before)))
ws.log.WithField("host", web.GetHost(r)).Trace("routing to application server")
rp.ServeHTTP(rw, r) rp.ServeHTTP(rw, r)
})) }))
} }

View File

@ -46,6 +46,10 @@ elif [[ "$1" == "worker" ]]; then
wait_for_db wait_for_db
echo "worker" > $MODE_FILE echo "worker" > $MODE_FILE
check_if_root "celery -A authentik.root.celery worker -Ofair --max-tasks-per-child=1 --autoscale 3,1 -E -B -s /tmp/celerybeat-schedule -Q authentik,authentik_scheduled,authentik_events" check_if_root "celery -A authentik.root.celery worker -Ofair --max-tasks-per-child=1 --autoscale 3,1 -E -B -s /tmp/celerybeat-schedule -Q authentik,authentik_scheduled,authentik_events"
elif [[ "$1" == "worker-status" ]]; then
wait_for_db
celery -A authentik.root.celery flower \
--port=9000
elif [[ "$1" == "bash" ]]; then elif [[ "$1" == "bash" ]]; then
/bin/bash /bin/bash
elif [[ "$1" == "test-all" ]]; then elif [[ "$1" == "test-all" ]]; then

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-31 14:22+0000\n" "POT-Creation-Date: 2022-08-18 14:31+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -31,18 +31,28 @@ msgstr ""
msgid "Validation Error" msgid "Validation Error"
msgstr "" msgstr ""
#: authentik/blueprints/models.py:18 #: authentik/blueprints/models.py:29
msgid "Managed by authentik" msgid "Managed by authentik"
msgstr "" msgstr ""
#: authentik/blueprints/models.py:69 #: authentik/blueprints/models.py:98
msgid "Blueprint Instance" msgid "Blueprint Instance"
msgstr "" msgstr ""
#: authentik/blueprints/models.py:70 #: authentik/blueprints/models.py:99
msgid "Blueprint Instances" msgid "Blueprint Instances"
msgstr "" msgstr ""
#: authentik/blueprints/v1/exporter.py:50
#, python-format
msgid "authentik Export - %(date)s"
msgstr ""
#: authentik/blueprints/v1/tasks.py:103 authentik/crypto/tasks.py:93
#, python-format
msgid "Successfully imported %(count)d files."
msgstr ""
#: authentik/core/api/providers.py:89 #: authentik/core/api/providers.py:89
msgid "SAML Provider from Metadata" msgid "SAML Provider from Metadata"
msgstr "" msgstr ""
@ -67,95 +77,95 @@ msgstr ""
msgid "Users added to this group will be superusers." msgid "Users added to this group will be superusers."
msgstr "" msgstr ""
#: authentik/core/models.py:152 #: authentik/core/models.py:153
msgid "User's display name." msgid "User's display name."
msgstr "" msgstr ""
#: authentik/core/models.py:251 authentik/providers/oauth2/models.py:322 #: authentik/core/models.py:252 authentik/providers/oauth2/models.py:322
msgid "User" msgid "User"
msgstr "" msgstr ""
#: authentik/core/models.py:252 #: authentik/core/models.py:253
msgid "Users" msgid "Users"
msgstr "" msgstr ""
#: authentik/core/models.py:263 #: authentik/core/models.py:264
msgid "Flow used when authorizing this provider." msgid "Flow used when authorizing this provider."
msgstr "" msgstr ""
#: authentik/core/models.py:296 #: authentik/core/models.py:297
msgid "Application's display Name." msgid "Application's display Name."
msgstr "" msgstr ""
#: authentik/core/models.py:297 #: authentik/core/models.py:298
msgid "Internal application name, used in URLs." msgid "Internal application name, used in URLs."
msgstr "" msgstr ""
#: authentik/core/models.py:309 #: authentik/core/models.py:310
msgid "Open launch URL in a new browser tab or window." msgid "Open launch URL in a new browser tab or window."
msgstr "" msgstr ""
#: authentik/core/models.py:374 #: authentik/core/models.py:375
msgid "Application" msgid "Application"
msgstr "" msgstr ""
#: authentik/core/models.py:375 #: authentik/core/models.py:376
msgid "Applications" msgid "Applications"
msgstr "" msgstr ""
#: authentik/core/models.py:381 #: authentik/core/models.py:382
msgid "Use the source-specific identifier" msgid "Use the source-specific identifier"
msgstr "" msgstr ""
#: authentik/core/models.py:389 #: authentik/core/models.py:390
msgid "" msgid ""
"Use the user's email address, but deny enrollment when the email address " "Use the user's email address, but deny enrollment when the email address "
"already exists." "already exists."
msgstr "" msgstr ""
#: authentik/core/models.py:398 #: authentik/core/models.py:399
msgid "" msgid ""
"Use the user's username, but deny enrollment when the username already " "Use the user's username, but deny enrollment when the username already "
"exists." "exists."
msgstr "" msgstr ""
#: authentik/core/models.py:405 #: authentik/core/models.py:406
msgid "Source's display Name." msgid "Source's display Name."
msgstr "" msgstr ""
#: authentik/core/models.py:406 #: authentik/core/models.py:407
msgid "Internal source name, used in URLs." msgid "Internal source name, used in URLs."
msgstr "" msgstr ""
#: authentik/core/models.py:419 #: authentik/core/models.py:420
msgid "Flow to use when authenticating existing users." msgid "Flow to use when authenticating existing users."
msgstr "" msgstr ""
#: authentik/core/models.py:428 #: authentik/core/models.py:429
msgid "Flow to use when enrolling new users." msgid "Flow to use when enrolling new users."
msgstr "" msgstr ""
#: authentik/core/models.py:589 #: authentik/core/models.py:590
msgid "Token" msgid "Token"
msgstr "" msgstr ""
#: authentik/core/models.py:590 #: authentik/core/models.py:591
msgid "Tokens" msgid "Tokens"
msgstr "" msgstr ""
#: authentik/core/models.py:633 #: authentik/core/models.py:634
msgid "Property Mapping" msgid "Property Mapping"
msgstr "" msgstr ""
#: authentik/core/models.py:634 #: authentik/core/models.py:635
msgid "Property Mappings" msgid "Property Mappings"
msgstr "" msgstr ""
#: authentik/core/models.py:670 #: authentik/core/models.py:671
msgid "Authenticated Session" msgid "Authenticated Session"
msgstr "" msgstr ""
#: authentik/core/models.py:671 #: authentik/core/models.py:672
msgid "Authenticated Sessions" msgid "Authenticated Sessions"
msgstr "" msgstr ""
@ -229,7 +239,7 @@ msgid "Powered by authentik"
msgstr "" msgstr ""
#: authentik/core/views/apps.py:48 #: authentik/core/views/apps.py:48
#: authentik/providers/oauth2/views/authorize.py:364 #: authentik/providers/oauth2/views/authorize.py:359
#: authentik/providers/saml/views/sso.py:69 #: authentik/providers/saml/views/sso.py:69
#, python-format #, python-format
msgid "You're about to sign into %(application)s." msgid "You're about to sign into %(application)s."
@ -257,11 +267,6 @@ msgstr ""
msgid "Certificate-Key Pairs" msgid "Certificate-Key Pairs"
msgstr "" msgstr ""
#: authentik/crypto/tasks.py:93
#, python-format
msgid "Successfully imported %(count)d files."
msgstr ""
#: authentik/events/models.py:294 #: authentik/events/models.py:294
msgid "Event" msgid "Event"
msgstr "" msgstr ""
@ -352,17 +357,17 @@ msgstr ""
msgid "Task has not been run yet." msgid "Task has not been run yet."
msgstr "" msgstr ""
#: authentik/flows/api/flows.py:228 authentik/flows/api/flows.py:250 #: authentik/flows/api/flows.py:229 authentik/flows/api/flows.py:251
#, python-format #, python-format
msgid "Policy (%(type)s)" msgid "Policy (%(type)s)"
msgstr "" msgstr ""
#: authentik/flows/api/flows.py:259 #: authentik/flows/api/flows.py:260
#, python-format #, python-format
msgid "Stage (%(type)s)" msgid "Stage (%(type)s)"
msgstr "" msgstr ""
#: authentik/flows/api/flows.py:374 #: authentik/flows/api/flows.py:375
#, python-format #, python-format
msgid "Flow not applicable to current user/request: %(messages)s" msgid "Flow not applicable to current user/request: %(messages)s"
msgstr "" msgstr ""
@ -855,26 +860,26 @@ msgstr ""
msgid "OAuth2 Tokens" msgid "OAuth2 Tokens"
msgstr "" msgstr ""
#: authentik/providers/oauth2/views/authorize.py:418 #: authentik/providers/oauth2/views/authorize.py:413
#: authentik/providers/saml/views/flows.py:86 #: authentik/providers/saml/views/flows.py:86
#, python-format #, python-format
msgid "Redirecting to %(app)s..." msgid "Redirecting to %(app)s..."
msgstr "" msgstr ""
#: authentik/providers/oauth2/views/userinfo.py:43 #: authentik/providers/oauth2/views/userinfo.py:41
#: authentik/providers/oauth2/views/userinfo.py:44 #: authentik/providers/oauth2/views/userinfo.py:42
msgid "GitHub Compatibility: Access your User Information" msgid "GitHub Compatibility: Access your User Information"
msgstr "" msgstr ""
#: authentik/providers/oauth2/views/userinfo.py:45 #: authentik/providers/oauth2/views/userinfo.py:43
msgid "GitHub Compatibility: Access you Email addresses" msgid "GitHub Compatibility: Access you Email addresses"
msgstr "" msgstr ""
#: authentik/providers/oauth2/views/userinfo.py:46 #: authentik/providers/oauth2/views/userinfo.py:44
msgid "GitHub Compatibility: Access your Groups" msgid "GitHub Compatibility: Access your Groups"
msgstr "" msgstr ""
#: authentik/providers/oauth2/views/userinfo.py:47 #: authentik/providers/oauth2/views/userinfo.py:45
msgid "authentik API Access on behalf of your user" msgid "authentik API Access on behalf of your user"
msgstr "" msgstr ""
@ -1649,7 +1654,7 @@ msgstr ""
msgid "Identification Stages" msgid "Identification Stages"
msgstr "" msgstr ""
#: authentik/stages/identification/stage.py:176 #: authentik/stages/identification/stage.py:173
msgid "Log in" msgid "Log in"
msgstr "" msgstr ""

850
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -97,7 +97,7 @@ addopts = "-p no:celery --junitxml=unittest.xml"
[tool.poetry] [tool.poetry]
name = "authentik" name = "authentik"
version = "2022.8.1" version = "2022.8.2"
description = "" description = ""
authors = ["authentik Team <hello@goauthentik.io>"] authors = ["authentik Team <hello@goauthentik.io>"]
@ -149,6 +149,7 @@ wsproto = "*"
xmlsec = "*" xmlsec = "*"
twilio = "*" twilio = "*"
dumb-init = "*" dumb-init = "*"
flower = "*"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
bandit = "*" bandit = "*"

7060
schema.yml

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
"""test OAuth Source""" """test OAuth Source"""
from os.path import abspath from pathlib import Path
from sys import platform from sys import platform
from time import sleep from time import sleep
from typing import Any, Optional from typing import Any, Optional
@ -116,7 +116,7 @@ class TestSourceOAuth2(SeleniumTestCase):
interval=5 * 100 * 1000000, interval=5 * 100 * 1000000,
start_period=1 * 100 * 1000000, start_period=1 * 100 * 1000000,
), ),
"volumes": {abspath(CONFIG_PATH): {"bind": "/config.yml", "mode": "ro"}}, "volumes": {str(Path(CONFIG_PATH).absolute()): {"bind": "/config.yml", "mode": "ro"}},
} }
def create_objects(self): def create_objects(self):

166
web/package-lock.json generated
View File

@ -21,13 +21,13 @@
"@codemirror/legacy-modes": "^6.1.0", "@codemirror/legacy-modes": "^6.1.0",
"@formatjs/intl-listformat": "^7.0.3", "@formatjs/intl-listformat": "^7.0.3",
"@fortawesome/fontawesome-free": "^6.1.2", "@fortawesome/fontawesome-free": "^6.1.2",
"@goauthentik/api": "^2022.7.3-1659983945", "@goauthentik/api": "^2022.8.1-1660661985",
"@jackfranklin/rollup-plugin-markdown": "^0.4.0", "@jackfranklin/rollup-plugin-markdown": "^0.4.0",
"@lingui/cli": "^3.14.0", "@lingui/cli": "^3.14.0",
"@lingui/core": "^3.14.0", "@lingui/core": "^3.14.0",
"@lingui/detect-locale": "^3.14.0", "@lingui/detect-locale": "^3.14.0",
"@lingui/macro": "^3.14.0", "@lingui/macro": "^3.14.0",
"@patternfly/patternfly": "^4.202.1", "@patternfly/patternfly": "^4.206.3",
"@polymer/iron-form": "^3.0.1", "@polymer/iron-form": "^3.0.1",
"@polymer/paper-input": "^3.2.1", "@polymer/paper-input": "^3.2.1",
"@rollup/plugin-babel": "^5.3.1", "@rollup/plugin-babel": "^5.3.1",
@ -35,8 +35,8 @@
"@rollup/plugin-node-resolve": "^13.3.0", "@rollup/plugin-node-resolve": "^13.3.0",
"@rollup/plugin-replace": "^4.0.0", "@rollup/plugin-replace": "^4.0.0",
"@rollup/plugin-typescript": "^8.3.4", "@rollup/plugin-typescript": "^8.3.4",
"@sentry/browser": "^7.10.0", "@sentry/browser": "^7.11.1",
"@sentry/tracing": "^7.10.0", "@sentry/tracing": "^7.11.1",
"@squoosh/cli": "^0.7.2", "@squoosh/cli": "^0.7.2",
"@trivago/prettier-plugin-sort-imports": "^3.3.0", "@trivago/prettier-plugin-sort-imports": "^3.3.0",
"@types/chart.js": "^2.9.37", "@types/chart.js": "^2.9.37",
@ -59,7 +59,7 @@
"eslint-plugin-lit": "^1.6.1", "eslint-plugin-lit": "^1.6.1",
"flowchart.js": "^1.17.1", "flowchart.js": "^1.17.1",
"fuse.js": "^6.6.2", "fuse.js": "^6.6.2",
"lit": "^2.3.0", "lit": "^2.3.1",
"moment": "^2.29.4", "moment": "^2.29.4",
"prettier": "^2.7.1", "prettier": "^2.7.1",
"rapidoc": "^9.3.3", "rapidoc": "^9.3.3",
@ -1929,9 +1929,9 @@
} }
}, },
"node_modules/@goauthentik/api": { "node_modules/@goauthentik/api": {
"version": "2022.7.3-1659983945", "version": "2022.8.1-1660661985",
"resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2022.7.3-1659983945.tgz", "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2022.8.1-1660661985.tgz",
"integrity": "sha512-y/BVhn3BDrI5G8iIsRytU6Mz9uS1iNIpcrm0N6MyJoakSzCd5wRJuUU6gQdG1zzk1B2Mh+9eHzOhdFtrMc9TeA==" "integrity": "sha512-KJyaUNm2Car6YC1yb7GqETRn8Y3Xij6/a7+Bo+q2IgfkOXjZQKGGoCoJL0UIHec2pN7gXaY1qP2i0vdGvXD6mg=="
}, },
"node_modules/@humanwhocodes/config-array": { "node_modules/@humanwhocodes/config-array": {
"version": "0.10.4", "version": "0.10.4",
@ -2480,9 +2480,9 @@
} }
}, },
"node_modules/@patternfly/patternfly": { "node_modules/@patternfly/patternfly": {
"version": "4.202.1", "version": "4.206.3",
"resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-4.202.1.tgz", "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-4.206.3.tgz",
"integrity": "sha512-cQiiPqmwJOm9onuTfLPQNRlpAZwDIJ/zVfDQeaFqMQyPJtxtKn3lkphz5xErY5dPs9rR4X94ytQ1I9pkVzaPJQ==" "integrity": "sha512-2Ar6qaZAozyx/KBzlqqskoEf45HUZIbk668qFwYHWaTkuucYw/usoxw03OwnGCS4GgBlMf06X2uonHgQLhVT8A=="
}, },
"node_modules/@polymer/font-roboto": { "node_modules/@polymer/font-roboto": {
"version": "3.0.2", "version": "3.0.2",
@ -2742,13 +2742,13 @@
} }
}, },
"node_modules/@sentry/browser": { "node_modules/@sentry/browser": {
"version": "7.10.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.10.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.11.1.tgz",
"integrity": "sha512-RNOKCRonqzUOqyM/JcjxjCOMosfS0MRmzkBKWewfyXse9AqfqC9+y8BI5J7wFmpYCypQP72JROKPBaxi7rvOFw==", "integrity": "sha512-k2XHuzPfnm8VJPK5eWd1+Y5VCgN42sLveb8Qxc3prb5PSL416NWMLZaoB7RMIhy430fKrSFiosnm6QDk2M6pbA==",
"dependencies": { "dependencies": {
"@sentry/core": "7.10.0", "@sentry/core": "7.11.1",
"@sentry/types": "7.10.0", "@sentry/types": "7.11.1",
"@sentry/utils": "7.10.0", "@sentry/utils": "7.11.1",
"tslib": "^1.9.3" "tslib": "^1.9.3"
}, },
"engines": { "engines": {
@ -2761,13 +2761,13 @@
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
}, },
"node_modules/@sentry/core": { "node_modules/@sentry/core": {
"version": "7.10.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.10.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.11.1.tgz",
"integrity": "sha512-uq6oUXPH+6cjsEL5/j/xSW91mVrJo7knTqax7E5MDiA5j98BPK4budGiBiPO7GEB856QhA7N+pOO0lccii5QYQ==", "integrity": "sha512-kaDSZ6VNuO4ZZdqUOOX6XM6x+kjo2bMnDQ3IJG51FPvVjr8lXYhXj1Ccxcot3pBYAIWPPby2+vNDOXllmXqoBA==",
"dependencies": { "dependencies": {
"@sentry/hub": "7.10.0", "@sentry/hub": "7.11.1",
"@sentry/types": "7.10.0", "@sentry/types": "7.11.1",
"@sentry/utils": "7.10.0", "@sentry/utils": "7.11.1",
"tslib": "^1.9.3" "tslib": "^1.9.3"
}, },
"engines": { "engines": {
@ -2780,12 +2780,12 @@
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
}, },
"node_modules/@sentry/hub": { "node_modules/@sentry/hub": {
"version": "7.10.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-7.10.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-7.11.1.tgz",
"integrity": "sha512-9Appy7J87EU7Xu2BDY1cLK79nsuE72geeYmG71lgdttTD3XOMcQBOxET4/2sAI+d/ansurXnURx+DAQ9FOKT+w==", "integrity": "sha512-M6ClgdXdptS0lUBKB5KpXXe2qMQhsoiEN2pEGRI6+auqhfHCUQB1ZXsfjiOYexKC9fwx7TyFyZ9Jcaf2DTxEhw==",
"dependencies": { "dependencies": {
"@sentry/types": "7.10.0", "@sentry/types": "7.11.1",
"@sentry/utils": "7.10.0", "@sentry/utils": "7.11.1",
"tslib": "^1.9.3" "tslib": "^1.9.3"
}, },
"engines": { "engines": {
@ -2798,13 +2798,13 @@
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
}, },
"node_modules/@sentry/tracing": { "node_modules/@sentry/tracing": {
"version": "7.10.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.10.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.11.1.tgz",
"integrity": "sha512-ojuBYS1bL/IGWKt/ItY4HmC8NElJrYtTUvm73VbhylhIO4zcn5ICHmgMFj1lqL9gQ1nCnAlifKiWIjL9qUatTA==", "integrity": "sha512-ilgnHfpdYUWKG/5yAXIfIbPVsCfrC4ONFBR/wN25/hdAyVfXMa3AJx7NCCXxZBOPDWH3hMW8rl4La5yuDbXofg==",
"dependencies": { "dependencies": {
"@sentry/hub": "7.10.0", "@sentry/hub": "7.11.1",
"@sentry/types": "7.10.0", "@sentry/types": "7.11.1",
"@sentry/utils": "7.10.0", "@sentry/utils": "7.11.1",
"tslib": "^1.9.3" "tslib": "^1.9.3"
}, },
"engines": { "engines": {
@ -2817,19 +2817,19 @@
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
}, },
"node_modules/@sentry/types": { "node_modules/@sentry/types": {
"version": "7.10.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.10.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.11.1.tgz",
"integrity": "sha512-1UBwdbS0xXzANzp63g4eNQly/qKIXp0swP5OTKWoADvKBtL4anroLUA/l8ADMtuwFZYtVANc8WRGxM2+YmaXtg==", "integrity": "sha512-gIEhOPxC2cjrxQ0+K2SFJ1P6e/an5osSxVc9OOtekN28eHtVsXFCLB8XVWeNQnS7N2VkrVrkqORMBz1kvIcvVQ==",
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/@sentry/utils": { "node_modules/@sentry/utils": {
"version": "7.10.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.10.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.11.1.tgz",
"integrity": "sha512-/aD2DnfyOhV0Wdbb6VF78vu4fQIZJyuReDpBI7MV/EqcEB6FxUKq2YjinfKZF/exHEPig6Ag/Yt+CRFgvtVFuw==", "integrity": "sha512-tRVXNT5O9ilkV31pyHeTqA1PcPQfMV/2OR6yUYM4ah+QVISovC0f0ybhByuH5nYg6x/Gsnx1o7pc8L1GE3+O7A==",
"dependencies": { "dependencies": {
"@sentry/types": "7.10.0", "@sentry/types": "7.11.1",
"tslib": "^1.9.3" "tslib": "^1.9.3"
}, },
"engines": { "engines": {
@ -6188,9 +6188,9 @@
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
}, },
"node_modules/lit": { "node_modules/lit": {
"version": "2.3.0", "version": "2.3.1",
"resolved": "https://registry.npmjs.org/lit/-/lit-2.3.0.tgz", "resolved": "https://registry.npmjs.org/lit/-/lit-2.3.1.tgz",
"integrity": "sha512-ynSGsUYKSGN2weFQ1F3SZq0Ihlj+vr/3KAET//Yf8Tz86L7lZizlw9Px+ab5iN8Si4RkVoLqd9YtKQmjdyKHNg==", "integrity": "sha512-TejktDR4mqG3qB32Y8Lm5Lye3c8SUehqz7qRsxe1PqGYL6me2Ef+jeQAEqh20BnnGncv4Yxy2njEIT0kzK1WCw==",
"dependencies": { "dependencies": {
"@lit/reactive-element": "^1.4.0", "@lit/reactive-element": "^1.4.0",
"lit-element": "^3.2.0", "lit-element": "^3.2.0",
@ -10494,9 +10494,9 @@
"integrity": "sha512-XwWADtfdSN73/udaFm+1mnGIj/ShDZNFMe/PRoqv3FhQ4GNI2PUN70yFTPsjq65Lw2C9i4TG5/hTbxXIXVCiqQ==" "integrity": "sha512-XwWADtfdSN73/udaFm+1mnGIj/ShDZNFMe/PRoqv3FhQ4GNI2PUN70yFTPsjq65Lw2C9i4TG5/hTbxXIXVCiqQ=="
}, },
"@goauthentik/api": { "@goauthentik/api": {
"version": "2022.7.3-1659983945", "version": "2022.8.1-1660661985",
"resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2022.7.3-1659983945.tgz", "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2022.8.1-1660661985.tgz",
"integrity": "sha512-y/BVhn3BDrI5G8iIsRytU6Mz9uS1iNIpcrm0N6MyJoakSzCd5wRJuUU6gQdG1zzk1B2Mh+9eHzOhdFtrMc9TeA==" "integrity": "sha512-KJyaUNm2Car6YC1yb7GqETRn8Y3Xij6/a7+Bo+q2IgfkOXjZQKGGoCoJL0UIHec2pN7gXaY1qP2i0vdGvXD6mg=="
}, },
"@humanwhocodes/config-array": { "@humanwhocodes/config-array": {
"version": "0.10.4", "version": "0.10.4",
@ -10920,9 +10920,9 @@
} }
}, },
"@patternfly/patternfly": { "@patternfly/patternfly": {
"version": "4.202.1", "version": "4.206.3",
"resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-4.202.1.tgz", "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-4.206.3.tgz",
"integrity": "sha512-cQiiPqmwJOm9onuTfLPQNRlpAZwDIJ/zVfDQeaFqMQyPJtxtKn3lkphz5xErY5dPs9rR4X94ytQ1I9pkVzaPJQ==" "integrity": "sha512-2Ar6qaZAozyx/KBzlqqskoEf45HUZIbk668qFwYHWaTkuucYw/usoxw03OwnGCS4GgBlMf06X2uonHgQLhVT8A=="
}, },
"@polymer/font-roboto": { "@polymer/font-roboto": {
"version": "3.0.2", "version": "3.0.2",
@ -11139,13 +11139,13 @@
} }
}, },
"@sentry/browser": { "@sentry/browser": {
"version": "7.10.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.10.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.11.1.tgz",
"integrity": "sha512-RNOKCRonqzUOqyM/JcjxjCOMosfS0MRmzkBKWewfyXse9AqfqC9+y8BI5J7wFmpYCypQP72JROKPBaxi7rvOFw==", "integrity": "sha512-k2XHuzPfnm8VJPK5eWd1+Y5VCgN42sLveb8Qxc3prb5PSL416NWMLZaoB7RMIhy430fKrSFiosnm6QDk2M6pbA==",
"requires": { "requires": {
"@sentry/core": "7.10.0", "@sentry/core": "7.11.1",
"@sentry/types": "7.10.0", "@sentry/types": "7.11.1",
"@sentry/utils": "7.10.0", "@sentry/utils": "7.11.1",
"tslib": "^1.9.3" "tslib": "^1.9.3"
}, },
"dependencies": { "dependencies": {
@ -11157,13 +11157,13 @@
} }
}, },
"@sentry/core": { "@sentry/core": {
"version": "7.10.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.10.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.11.1.tgz",
"integrity": "sha512-uq6oUXPH+6cjsEL5/j/xSW91mVrJo7knTqax7E5MDiA5j98BPK4budGiBiPO7GEB856QhA7N+pOO0lccii5QYQ==", "integrity": "sha512-kaDSZ6VNuO4ZZdqUOOX6XM6x+kjo2bMnDQ3IJG51FPvVjr8lXYhXj1Ccxcot3pBYAIWPPby2+vNDOXllmXqoBA==",
"requires": { "requires": {
"@sentry/hub": "7.10.0", "@sentry/hub": "7.11.1",
"@sentry/types": "7.10.0", "@sentry/types": "7.11.1",
"@sentry/utils": "7.10.0", "@sentry/utils": "7.11.1",
"tslib": "^1.9.3" "tslib": "^1.9.3"
}, },
"dependencies": { "dependencies": {
@ -11175,12 +11175,12 @@
} }
}, },
"@sentry/hub": { "@sentry/hub": {
"version": "7.10.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-7.10.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-7.11.1.tgz",
"integrity": "sha512-9Appy7J87EU7Xu2BDY1cLK79nsuE72geeYmG71lgdttTD3XOMcQBOxET4/2sAI+d/ansurXnURx+DAQ9FOKT+w==", "integrity": "sha512-M6ClgdXdptS0lUBKB5KpXXe2qMQhsoiEN2pEGRI6+auqhfHCUQB1ZXsfjiOYexKC9fwx7TyFyZ9Jcaf2DTxEhw==",
"requires": { "requires": {
"@sentry/types": "7.10.0", "@sentry/types": "7.11.1",
"@sentry/utils": "7.10.0", "@sentry/utils": "7.11.1",
"tslib": "^1.9.3" "tslib": "^1.9.3"
}, },
"dependencies": { "dependencies": {
@ -11192,13 +11192,13 @@
} }
}, },
"@sentry/tracing": { "@sentry/tracing": {
"version": "7.10.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.10.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.11.1.tgz",
"integrity": "sha512-ojuBYS1bL/IGWKt/ItY4HmC8NElJrYtTUvm73VbhylhIO4zcn5ICHmgMFj1lqL9gQ1nCnAlifKiWIjL9qUatTA==", "integrity": "sha512-ilgnHfpdYUWKG/5yAXIfIbPVsCfrC4ONFBR/wN25/hdAyVfXMa3AJx7NCCXxZBOPDWH3hMW8rl4La5yuDbXofg==",
"requires": { "requires": {
"@sentry/hub": "7.10.0", "@sentry/hub": "7.11.1",
"@sentry/types": "7.10.0", "@sentry/types": "7.11.1",
"@sentry/utils": "7.10.0", "@sentry/utils": "7.11.1",
"tslib": "^1.9.3" "tslib": "^1.9.3"
}, },
"dependencies": { "dependencies": {
@ -11210,16 +11210,16 @@
} }
}, },
"@sentry/types": { "@sentry/types": {
"version": "7.10.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.10.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.11.1.tgz",
"integrity": "sha512-1UBwdbS0xXzANzp63g4eNQly/qKIXp0swP5OTKWoADvKBtL4anroLUA/l8ADMtuwFZYtVANc8WRGxM2+YmaXtg==" "integrity": "sha512-gIEhOPxC2cjrxQ0+K2SFJ1P6e/an5osSxVc9OOtekN28eHtVsXFCLB8XVWeNQnS7N2VkrVrkqORMBz1kvIcvVQ=="
}, },
"@sentry/utils": { "@sentry/utils": {
"version": "7.10.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.10.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.11.1.tgz",
"integrity": "sha512-/aD2DnfyOhV0Wdbb6VF78vu4fQIZJyuReDpBI7MV/EqcEB6FxUKq2YjinfKZF/exHEPig6Ag/Yt+CRFgvtVFuw==", "integrity": "sha512-tRVXNT5O9ilkV31pyHeTqA1PcPQfMV/2OR6yUYM4ah+QVISovC0f0ybhByuH5nYg6x/Gsnx1o7pc8L1GE3+O7A==",
"requires": { "requires": {
"@sentry/types": "7.10.0", "@sentry/types": "7.11.1",
"tslib": "^1.9.3" "tslib": "^1.9.3"
}, },
"dependencies": { "dependencies": {
@ -13676,9 +13676,9 @@
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
}, },
"lit": { "lit": {
"version": "2.3.0", "version": "2.3.1",
"resolved": "https://registry.npmjs.org/lit/-/lit-2.3.0.tgz", "resolved": "https://registry.npmjs.org/lit/-/lit-2.3.1.tgz",
"integrity": "sha512-ynSGsUYKSGN2weFQ1F3SZq0Ihlj+vr/3KAET//Yf8Tz86L7lZizlw9Px+ab5iN8Si4RkVoLqd9YtKQmjdyKHNg==", "integrity": "sha512-TejktDR4mqG3qB32Y8Lm5Lye3c8SUehqz7qRsxe1PqGYL6me2Ef+jeQAEqh20BnnGncv4Yxy2njEIT0kzK1WCw==",
"requires": { "requires": {
"@lit/reactive-element": "^1.4.0", "@lit/reactive-element": "^1.4.0",
"lit-element": "^3.2.0", "lit-element": "^3.2.0",

View File

@ -64,13 +64,13 @@
"@codemirror/legacy-modes": "^6.1.0", "@codemirror/legacy-modes": "^6.1.0",
"@formatjs/intl-listformat": "^7.0.3", "@formatjs/intl-listformat": "^7.0.3",
"@fortawesome/fontawesome-free": "^6.1.2", "@fortawesome/fontawesome-free": "^6.1.2",
"@goauthentik/api": "^2022.7.3-1659983945", "@goauthentik/api": "^2022.8.1-1660661985",
"@jackfranklin/rollup-plugin-markdown": "^0.4.0", "@jackfranklin/rollup-plugin-markdown": "^0.4.0",
"@lingui/cli": "^3.14.0", "@lingui/cli": "^3.14.0",
"@lingui/core": "^3.14.0", "@lingui/core": "^3.14.0",
"@lingui/detect-locale": "^3.14.0", "@lingui/detect-locale": "^3.14.0",
"@lingui/macro": "^3.14.0", "@lingui/macro": "^3.14.0",
"@patternfly/patternfly": "^4.202.1", "@patternfly/patternfly": "^4.206.3",
"@polymer/iron-form": "^3.0.1", "@polymer/iron-form": "^3.0.1",
"@polymer/paper-input": "^3.2.1", "@polymer/paper-input": "^3.2.1",
"@rollup/plugin-babel": "^5.3.1", "@rollup/plugin-babel": "^5.3.1",
@ -78,8 +78,8 @@
"@rollup/plugin-node-resolve": "^13.3.0", "@rollup/plugin-node-resolve": "^13.3.0",
"@rollup/plugin-replace": "^4.0.0", "@rollup/plugin-replace": "^4.0.0",
"@rollup/plugin-typescript": "^8.3.4", "@rollup/plugin-typescript": "^8.3.4",
"@sentry/browser": "^7.10.0", "@sentry/browser": "^7.11.1",
"@sentry/tracing": "^7.10.0", "@sentry/tracing": "^7.11.1",
"@squoosh/cli": "^0.7.2", "@squoosh/cli": "^0.7.2",
"@trivago/prettier-plugin-sort-imports": "^3.3.0", "@trivago/prettier-plugin-sort-imports": "^3.3.0",
"@types/chart.js": "^2.9.37", "@types/chart.js": "^2.9.37",
@ -102,7 +102,7 @@
"eslint-plugin-lit": "^1.6.1", "eslint-plugin-lit": "^1.6.1",
"flowchart.js": "^1.17.1", "flowchart.js": "^1.17.1",
"fuse.js": "^6.6.2", "fuse.js": "^6.6.2",
"lit": "^2.3.0", "lit": "^2.3.1",
"moment": "^2.29.4", "moment": "^2.29.4",
"prettier": "^2.7.1", "prettier": "^2.7.1",
"rapidoc": "^9.3.3", "rapidoc": "^9.3.3",

View File

@ -3,7 +3,7 @@ export const SUCCESS_CLASS = "pf-m-success";
export const ERROR_CLASS = "pf-m-danger"; export const ERROR_CLASS = "pf-m-danger";
export const PROGRESS_CLASS = "pf-m-in-progress"; export const PROGRESS_CLASS = "pf-m-in-progress";
export const CURRENT_CLASS = "pf-m-current"; export const CURRENT_CLASS = "pf-m-current";
export const VERSION = "2022.8.1"; export const VERSION = "2022.8.2";
export const TITLE_DEFAULT = "authentik"; export const TITLE_DEFAULT = "authentik";
export const ROUTE_SEPARATOR = ";"; export const ROUTE_SEPARATOR = ";";

View File

@ -75,24 +75,28 @@ export class Form<T> extends LitElement {
updated(): void { updated(): void {
this.shadowRoot this.shadowRoot
?.querySelectorAll<HTMLInputElement>("input[name=name]") ?.querySelectorAll("ak-form-element-horizontal[name=name]")
.forEach((nameInput) => { .forEach((nameInput) => {
const input = nameInput.firstElementChild as HTMLInputElement;
const form = nameInput.closest("form"); const form = nameInput.closest("form");
if (form === null) { if (form === null) {
return; return;
} }
const slugField = form.querySelector<HTMLInputElement>("input[name=slug]"); const slugFieldWrapper = form.querySelector(
if (!slugField) { "ak-form-element-horizontal[name=slug]",
);
if (!slugFieldWrapper) {
return; return;
} }
const slugField = slugFieldWrapper.firstElementChild as HTMLInputElement;
// Only attach handler if the slug is already equal to the name // Only attach handler if the slug is already equal to the name
// if not, they are probably completely different and shouldn't update // if not, they are probably completely different and shouldn't update
// each other // each other
if (convertToSlug(nameInput.value) !== slugField.value) { if (convertToSlug(input.value) !== slugField.value) {
return; return;
} }
nameInput.addEventListener("input", () => { nameInput.addEventListener("input", () => {
slugField.value = convertToSlug(nameInput.value); slugField.value = convertToSlug(input.value);
}); });
}); });
} }

View File

@ -37,13 +37,15 @@ export class ConsentStage extends BaseStage<ConsentChallenge, ConsentChallengeRe
} }
renderPermissions(perms: Permission[]): TemplateResult { renderPermissions(perms: Permission[]): TemplateResult {
const shouldShowId = perms.filter((perm) => perm.name === "").length === perms.length;
return html`${perms.map((permission) => { return html`${perms.map((permission) => {
let name = permission.name; if (permission.name === "") {
if (permission.name === "" && shouldShowId) { return html``;
name = permission.id;
} }
return html`<li data-permission-code="${permission.id}">${name}</li>`; // Special case for openid Scope
if (permission.id === "openid") {
return html``;
}
return html`<li data-permission-code="${permission.id}">${permission.name}</li>`;
})}`; })}`;
} }

View File

@ -186,6 +186,7 @@ msgid "Action"
msgstr "Ereignis" msgstr "Ereignis"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/EventListPage.ts #: src/pages/events/EventListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -291,6 +292,7 @@ msgstr "Zusätzliche Bereichszuordnungen, die an den Proxy übergeben werden."
msgid "Additional scopes to be passed to the OAuth Provider, separated by space." msgid "Additional scopes to be passed to the OAuth Provider, separated by space."
msgstr "Zusätzliche Anwendungsbereiche (Scopes), die an den OAuth-Provider übergeben werden, getrennt durch ein Leerzeichen." msgstr "Zusätzliche Anwendungsbereiche (Scopes), die an den OAuth-Provider übergeben werden, getrennt durch ein Leerzeichen."
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
msgid "Additional settings" msgid "Additional settings"
msgstr "Weitere Einstellungen" msgstr "Weitere Einstellungen"
@ -647,6 +649,10 @@ msgstr "Autorisierte Applikation:"
msgid "Auto-detect (based on your browser)" msgid "Auto-detect (based on your browser)"
msgstr "Automatische Erkennung (basierend auf Ihrem Browser)" msgstr "Automatische Erkennung (basierend auf Ihrem Browser)"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Automate and template configuration within authentik."
msgstr ""
#: src/interfaces/UserInterface.ts #: src/interfaces/UserInterface.ts
msgid "Avatar image" msgid "Avatar image"
msgstr "Profilbild" msgstr "Profilbild"
@ -753,6 +759,15 @@ msgstr "Verknüpfung"
msgid "Binding Type" msgid "Binding Type"
msgstr "Verknüpfungstyp" msgstr "Verknüpfungstyp"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprint(s)"
msgstr ""
#: src/interfaces/AdminInterface.ts
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprints"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Branding settings" msgid "Branding settings"
msgstr "Branding-Einstellungen" msgstr "Branding-Einstellungen"
@ -1143,6 +1158,10 @@ msgstr "Konfigurieren Sie, wie der Outpost die Benutzer des Core-Authentik-Serve
#~ msgid "Configure settings relevant to your user profile." #~ msgid "Configure settings relevant to your user profile."
#~ msgstr "Konfigurieren Sie die für Ihr Benutzerprofil relevanten Einstellungen." #~ msgstr "Konfigurieren Sie die für Ihr Benutzerprofil relevanten Einstellungen."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Configure the blueprint context, used for templating."
msgstr ""
#: src/pages/providers/saml/SAMLProviderForm.ts #: src/pages/providers/saml/SAMLProviderForm.ts
msgid "Configure the maximum allowed time drift for an assertion." msgid "Configure the maximum allowed time drift for an assertion."
msgstr "Konfigurieren Sie die maximal zulässige Zeitdrift für eine 'Assertion'" msgstr "Konfigurieren Sie die maximal zulässige Zeitdrift für eine 'Assertion'"
@ -1232,6 +1251,7 @@ msgstr ""
msgid "Content right" msgid "Content right"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
@ -1286,6 +1306,8 @@ msgstr "Wiederherstellungslink kopieren"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/ApplicationWizard.ts #: src/pages/applications/wizard/ApplicationWizard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -1348,6 +1370,10 @@ msgstr "Anwendung erstellen"
msgid "Create Binding" msgid "Create Binding"
msgstr "Verknüpfung erstellen" msgstr "Verknüpfung erstellen"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Create Blueprint Instance"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Create Certificate-Key Pair" msgid "Create Certificate-Key Pair"
msgstr "Zertifikat-Schlüsselpaar generieren" msgstr "Zertifikat-Schlüsselpaar generieren"
@ -1572,6 +1598,7 @@ msgstr "Definieren Sie, wie Benachrichtigungen an Benutzer gesendet werden, z. B
#: src/elements/user/SessionList.ts #: src/elements/user/SessionList.ts
#: src/elements/user/UserConsentList.ts #: src/elements/user/UserConsentList.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -1755,6 +1782,10 @@ msgstr "Verzeichnis"
msgid "Disabled" msgid "Disabled"
msgstr "Deaktiviert" msgstr "Deaktiviert"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Disabled blueprints are never applied."
msgstr ""
#: src/user/user-settings/sources/SourceSettingsOAuth.ts #: src/user/user-settings/sources/SourceSettingsOAuth.ts
#: src/user/user-settings/sources/SourceSettingsPlex.ts #: src/user/user-settings/sources/SourceSettingsPlex.ts
msgid "Disconnect" msgid "Disconnect"
@ -1936,6 +1967,8 @@ msgstr "Aktivieren Sie StartTLS"
msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices." msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices."
msgstr "Aktivieren Sie den Kompatibilitätsmodus, um die Kompatibilität mit Passwortmanagern auf mobilen Geräten zu erhöhen." msgstr "Aktivieren Sie den Kompatibilitätsmodus, um die Kompatibilität mit Passwortmanagern auf mobilen Geräten zu erhöhen."
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/BoundPoliciesList.ts
#: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyBindingForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
@ -1972,6 +2005,7 @@ msgstr "Registrierungsablauf"
msgid "EntityID/Issuer" msgid "EntityID/Issuer"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Error" msgid "Error"
msgstr "Fehler" msgstr "Fehler"
@ -2943,6 +2977,10 @@ msgstr "Beschriftung neben/über der Eingabeaufforderung"
msgid "Last IP" msgid "Last IP"
msgstr "Letzte IP" msgstr "Letzte IP"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Last applied"
msgstr ""
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/users/RelatedUserList.ts #: src/pages/users/RelatedUserList.ts
#: src/pages/users/UserListPage.ts #: src/pages/users/UserListPage.ts
@ -3055,6 +3093,7 @@ msgstr "Wird geladen"
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts #: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/TransportForm.ts #: src/pages/events/TransportForm.ts
@ -3358,6 +3397,9 @@ msgstr "Meine Anwendungen"
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/InitialApplicationWizardPage.ts #: src/pages/applications/wizard/InitialApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairForm.ts #: src/pages/crypto/CertificateKeyPairForm.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
@ -3530,6 +3572,7 @@ msgstr "Nginx (eigenständig)"
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
@ -3878,6 +3921,10 @@ msgstr ""
msgid "Order" msgid "Order"
msgstr "Reihenfolge" msgstr "Reihenfolge"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Orphaned"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Other global settings" msgid "Other global settings"
msgstr "Weitere globale Einstellungen" msgstr "Weitere globale Einstellungen"
@ -4008,6 +4055,7 @@ msgstr "Passwort: Maskierte Eingabe, Passwort wird anhand von Quellen validiert.
msgid "Passwordless flow" msgid "Passwordless flow"
msgstr "Passwortloser Ablauf" msgstr "Passwortloser Ablauf"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/users/UserForm.ts #: src/pages/users/UserForm.ts
msgid "Path" msgid "Path"
msgstr "" msgstr ""
@ -4023,6 +4071,10 @@ msgstr ""
msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug." msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug."
msgstr "" msgstr ""
#: src/elements/user/UserConsentList.ts
msgid "Permissions"
msgstr ""
#: src/pages/sources/saml/SAMLSourceForm.ts #: src/pages/sources/saml/SAMLSourceForm.ts
msgid "Persistent" msgid "Persistent"
msgstr "Persistent" msgstr "Persistent"
@ -5189,6 +5241,7 @@ msgstr "Statisch: Statischer Wert, wird so angezeigt, wie er ist."
msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding." msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding."
msgstr "Den Fluss statisch verweigern. Um diese Phase effektiv zu nutzen, deaktivieren Sie *Evaluate on plan* für die entsprechende Bindung" msgstr "Den Fluss statisch verweigern. Um diese Phase effektiv zu nutzen, deaktivieren Sie *Evaluate on plan* für die entsprechende Bindung"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
@ -5216,6 +5269,7 @@ msgstr "Betreffmodus"
msgid "Subject-alt name" msgid "Subject-alt name"
msgstr "Betreff alternativer Name" msgstr "Betreff alternativer Name"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Successful" msgid "Successful"
msgstr "Erfolgreich" msgstr "Erfolgreich"
@ -5262,6 +5316,10 @@ msgstr "Ablauf erfolgreich erstellt."
msgid "Successfully created group." msgid "Successfully created group."
msgstr "Gruppe erfolgreich erstellt." msgstr "Gruppe erfolgreich erstellt."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully created instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully created integration." msgid "Successfully created integration."
@ -5428,6 +5486,10 @@ msgstr "Ablauf erfolgreich aktualisiert."
msgid "Successfully updated group." msgid "Successfully updated group."
msgstr "Gruppe erfolgreich aktualisiert." msgstr "Gruppe erfolgreich aktualisiert."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully updated instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully updated integration." msgid "Successfully updated integration."
@ -6101,6 +6163,7 @@ msgstr "Defekte Outposts"
msgid "Unique identifier the token is referenced by." msgid "Unique identifier the token is referenced by."
msgstr "Einzigartige Kennung zur Referenzierung des Token." msgstr "Einzigartige Kennung zur Referenzierung des Token."
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Unknown" msgid "Unknown"
msgstr "Unbekannt" msgstr "Unbekannt"
@ -6122,6 +6185,7 @@ msgstr "Aktuell!"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationViewPage.ts #: src/pages/applications/ApplicationViewPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -6173,6 +6237,10 @@ msgstr "Anwendung aktualisieren"
msgid "Update Binding" msgid "Update Binding"
msgstr "Bindung aktualisieren" msgstr "Bindung aktualisieren"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Update Blueprint"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Update Certificate-Key Pair" msgid "Update Certificate-Key Pair"
msgstr "Aktualisieren Sie das Zertifikatschlüsselpaar" msgstr "Aktualisieren Sie das Zertifikatschlüsselpaar"
@ -6636,6 +6704,7 @@ msgstr "Wartezeit (min.)"
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Warning" msgid "Warning"
@ -6813,6 +6882,7 @@ msgstr ""
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/groups/RelatedGroupList.ts #: src/pages/groups/RelatedGroupList.ts

View File

@ -171,6 +171,7 @@ msgid "Action"
msgstr "Action" msgstr "Action"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/EventListPage.ts #: src/pages/events/EventListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -280,6 +281,7 @@ msgstr "Additional scope mappings, which are passed to the proxy."
msgid "Additional scopes to be passed to the OAuth Provider, separated by space." msgid "Additional scopes to be passed to the OAuth Provider, separated by space."
msgstr "Additional scopes to be passed to the OAuth Provider, separated by space." msgstr "Additional scopes to be passed to the OAuth Provider, separated by space."
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
msgid "Additional settings" msgid "Additional settings"
msgstr "Additional settings" msgstr "Additional settings"
@ -640,6 +642,10 @@ msgstr "Authorized application:"
msgid "Auto-detect (based on your browser)" msgid "Auto-detect (based on your browser)"
msgstr "Auto-detect (based on your browser)" msgstr "Auto-detect (based on your browser)"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Automate and template configuration within authentik."
msgstr "Automate and template configuration within authentik."
#: src/interfaces/UserInterface.ts #: src/interfaces/UserInterface.ts
msgid "Avatar image" msgid "Avatar image"
msgstr "Avatar image" msgstr "Avatar image"
@ -749,6 +755,15 @@ msgstr "Binding"
msgid "Binding Type" msgid "Binding Type"
msgstr "Binding Type" msgstr "Binding Type"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprint(s)"
msgstr "Blueprint(s)"
#: src/interfaces/AdminInterface.ts
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprints"
msgstr "Blueprints"
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Branding settings" msgid "Branding settings"
msgstr "Branding settings" msgstr "Branding settings"
@ -1150,6 +1165,10 @@ msgstr "Configure how the outpost queries the core authentik server's users."
#~ msgid "Configure settings relevant to your user profile." #~ msgid "Configure settings relevant to your user profile."
#~ msgstr "Configure settings relevant to your user profile." #~ msgstr "Configure settings relevant to your user profile."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Configure the blueprint context, used for templating."
msgstr "Configure the blueprint context, used for templating."
#: src/pages/providers/saml/SAMLProviderForm.ts #: src/pages/providers/saml/SAMLProviderForm.ts
msgid "Configure the maximum allowed time drift for an assertion." msgid "Configure the maximum allowed time drift for an assertion."
msgstr "Configure the maximum allowed time drift for an assertion." msgstr "Configure the maximum allowed time drift for an assertion."
@ -1241,6 +1260,7 @@ msgstr "Content left"
msgid "Content right" msgid "Content right"
msgstr "Content right" msgstr "Content right"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
@ -1296,6 +1316,8 @@ msgstr "Copy recovery link"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/ApplicationWizard.ts #: src/pages/applications/wizard/ApplicationWizard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -1358,6 +1380,10 @@ msgstr "Create Application"
msgid "Create Binding" msgid "Create Binding"
msgstr "Create Binding" msgstr "Create Binding"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Create Blueprint Instance"
msgstr "Create Blueprint Instance"
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Create Certificate-Key Pair" msgid "Create Certificate-Key Pair"
msgstr "Create Certificate-Key Pair" msgstr "Create Certificate-Key Pair"
@ -1584,6 +1610,7 @@ msgstr "Define how notifications are sent to users, like Email or Webhook."
#: src/elements/user/SessionList.ts #: src/elements/user/SessionList.ts
#: src/elements/user/UserConsentList.ts #: src/elements/user/UserConsentList.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -1780,6 +1807,10 @@ msgstr "Directory"
msgid "Disabled" msgid "Disabled"
msgstr "Disabled" msgstr "Disabled"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Disabled blueprints are never applied."
msgstr "Disabled blueprints are never applied."
#: src/user/user-settings/sources/SourceSettingsOAuth.ts #: src/user/user-settings/sources/SourceSettingsOAuth.ts
#: src/user/user-settings/sources/SourceSettingsPlex.ts #: src/user/user-settings/sources/SourceSettingsPlex.ts
msgid "Disconnect" msgid "Disconnect"
@ -1968,6 +1999,8 @@ msgstr "Enable StartTLS"
msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices." msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices."
msgstr "Enable compatibility mode, increases compatibility with password managers on mobile devices." msgstr "Enable compatibility mode, increases compatibility with password managers on mobile devices."
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/BoundPoliciesList.ts
#: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyBindingForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
@ -2004,6 +2037,7 @@ msgstr "Enrollment flow"
msgid "EntityID/Issuer" msgid "EntityID/Issuer"
msgstr "EntityID/Issuer" msgstr "EntityID/Issuer"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Error" msgid "Error"
msgstr "Error" msgstr "Error"
@ -2994,6 +3028,10 @@ msgstr "Label shown next to/above the prompt."
msgid "Last IP" msgid "Last IP"
msgstr "Last IP" msgstr "Last IP"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Last applied"
msgstr "Last applied"
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/users/RelatedUserList.ts #: src/pages/users/RelatedUserList.ts
#: src/pages/users/UserListPage.ts #: src/pages/users/UserListPage.ts
@ -3107,6 +3145,7 @@ msgstr "Loading"
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts #: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/TransportForm.ts #: src/pages/events/TransportForm.ts
@ -3411,6 +3450,9 @@ msgstr "My applications"
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/InitialApplicationWizardPage.ts #: src/pages/applications/wizard/InitialApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairForm.ts #: src/pages/crypto/CertificateKeyPairForm.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
@ -3583,6 +3625,7 @@ msgstr "Nginx (standalone)"
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
@ -3938,6 +3981,10 @@ msgstr "Or"
msgid "Order" msgid "Order"
msgstr "Order" msgstr "Order"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Orphaned"
msgstr "Orphaned"
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Other global settings" msgid "Other global settings"
msgstr "Other global settings" msgstr "Other global settings"
@ -4072,6 +4119,7 @@ msgstr "Password: Masked input, password is validated against sources. Policies
msgid "Passwordless flow" msgid "Passwordless flow"
msgstr "Passwordless flow" msgstr "Passwordless flow"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/users/UserForm.ts #: src/pages/users/UserForm.ts
msgid "Path" msgid "Path"
msgstr "Path" msgstr "Path"
@ -4087,6 +4135,10 @@ msgstr "Path new users will be created under. If left blank, the default path wi
msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug." msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug."
msgstr "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug." msgstr "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug."
#: src/elements/user/UserConsentList.ts
msgid "Permissions"
msgstr "Permissions"
#: src/pages/sources/saml/SAMLSourceForm.ts #: src/pages/sources/saml/SAMLSourceForm.ts
msgid "Persistent" msgid "Persistent"
msgstr "Persistent" msgstr "Persistent"
@ -5285,6 +5337,7 @@ msgstr "Static: Static value, displayed as-is."
msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding." msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding."
msgstr "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding." msgstr "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding."
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
@ -5320,6 +5373,7 @@ msgstr "Subject mode"
msgid "Subject-alt name" msgid "Subject-alt name"
msgstr "Subject-alt name" msgstr "Subject-alt name"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Successful" msgid "Successful"
msgstr "Successful" msgstr "Successful"
@ -5366,6 +5420,10 @@ msgstr "Successfully created flow."
msgid "Successfully created group." msgid "Successfully created group."
msgstr "Successfully created group." msgstr "Successfully created group."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully created instance."
msgstr "Successfully created instance."
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully created integration." msgid "Successfully created integration."
@ -5534,6 +5592,10 @@ msgstr "Successfully updated flow."
msgid "Successfully updated group." msgid "Successfully updated group."
msgstr "Successfully updated group." msgstr "Successfully updated group."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully updated instance."
msgstr "Successfully updated instance."
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully updated integration." msgid "Successfully updated integration."
@ -6221,6 +6283,7 @@ msgstr "Unhealthy outposts"
msgid "Unique identifier the token is referenced by." msgid "Unique identifier the token is referenced by."
msgstr "Unique identifier the token is referenced by." msgstr "Unique identifier the token is referenced by."
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Unknown" msgid "Unknown"
msgstr "Unknown" msgstr "Unknown"
@ -6243,6 +6306,7 @@ msgstr "Up-to-date!"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationViewPage.ts #: src/pages/applications/ApplicationViewPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -6294,6 +6358,10 @@ msgstr "Update Application"
msgid "Update Binding" msgid "Update Binding"
msgstr "Update Binding" msgstr "Update Binding"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Update Blueprint"
msgstr "Update Blueprint"
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Update Certificate-Key Pair" msgid "Update Certificate-Key Pair"
msgstr "Update Certificate-Key Pair" msgstr "Update Certificate-Key Pair"
@ -6763,6 +6831,7 @@ msgstr "Wait (min)"
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Warning" msgid "Warning"
@ -6943,6 +7012,7 @@ msgstr "XML-based SSO standard. Use this if your application only supports SAML.
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/groups/RelatedGroupList.ts #: src/pages/groups/RelatedGroupList.ts

View File

@ -173,6 +173,7 @@ msgid "Action"
msgstr "Acción" msgstr "Acción"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/EventListPage.ts #: src/pages/events/EventListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -278,6 +279,7 @@ msgstr "Asignaciones de ámbitos adicionales, que se pasan al proxy."
msgid "Additional scopes to be passed to the OAuth Provider, separated by space." msgid "Additional scopes to be passed to the OAuth Provider, separated by space."
msgstr "Ámbitos adicionales que se pasarán al proveedor de OAuth, separados por espacios." msgstr "Ámbitos adicionales que se pasarán al proveedor de OAuth, separados por espacios."
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
msgid "Additional settings" msgid "Additional settings"
msgstr "Configuraciones adicionales" msgstr "Configuraciones adicionales"
@ -634,6 +636,10 @@ msgstr "Solicitud autorizada:"
msgid "Auto-detect (based on your browser)" msgid "Auto-detect (based on your browser)"
msgstr "Detección automática (según su navegador)" msgstr "Detección automática (según su navegador)"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Automate and template configuration within authentik."
msgstr ""
#: src/interfaces/UserInterface.ts #: src/interfaces/UserInterface.ts
msgid "Avatar image" msgid "Avatar image"
msgstr "Imagen de avatar" msgstr "Imagen de avatar"
@ -743,6 +749,15 @@ msgstr "Vinculante"
msgid "Binding Type" msgid "Binding Type"
msgstr "Tipo de enlace" msgstr "Tipo de enlace"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprint(s)"
msgstr ""
#: src/interfaces/AdminInterface.ts
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprints"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Branding settings" msgid "Branding settings"
msgstr "Configuración de marca" msgstr "Configuración de marca"
@ -1134,6 +1149,10 @@ msgstr "Configure la forma en que el puesto avanzado consulta a los usuarios del
#~ msgid "Configure settings relevant to your user profile." #~ msgid "Configure settings relevant to your user profile."
#~ msgstr "Configure los ajustes relevantes para su perfil de usuario." #~ msgstr "Configure los ajustes relevantes para su perfil de usuario."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Configure the blueprint context, used for templating."
msgstr ""
#: src/pages/providers/saml/SAMLProviderForm.ts #: src/pages/providers/saml/SAMLProviderForm.ts
msgid "Configure the maximum allowed time drift for an assertion." msgid "Configure the maximum allowed time drift for an assertion."
msgstr "Configure la desviación de tiempo máxima permitida para una afirmación." msgstr "Configure la desviación de tiempo máxima permitida para una afirmación."
@ -1223,6 +1242,7 @@ msgstr ""
msgid "Content right" msgid "Content right"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
@ -1277,6 +1297,8 @@ msgstr "Enlace de recuperación de copia"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/ApplicationWizard.ts #: src/pages/applications/wizard/ApplicationWizard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -1339,6 +1361,10 @@ msgstr "Crear aplicación"
msgid "Create Binding" msgid "Create Binding"
msgstr "Crear enlace" msgstr "Crear enlace"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Create Blueprint Instance"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Create Certificate-Key Pair" msgid "Create Certificate-Key Pair"
msgstr "Crear par de claves de certificado" msgstr "Crear par de claves de certificado"
@ -1563,6 +1589,7 @@ msgstr "Defina cómo se envían las notificaciones a los usuarios, como el corre
#: src/elements/user/SessionList.ts #: src/elements/user/SessionList.ts
#: src/elements/user/UserConsentList.ts #: src/elements/user/UserConsentList.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -1746,6 +1773,10 @@ msgstr "Directorio"
msgid "Disabled" msgid "Disabled"
msgstr "Discapacitado" msgstr "Discapacitado"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Disabled blueprints are never applied."
msgstr ""
#: src/user/user-settings/sources/SourceSettingsOAuth.ts #: src/user/user-settings/sources/SourceSettingsOAuth.ts
#: src/user/user-settings/sources/SourceSettingsPlex.ts #: src/user/user-settings/sources/SourceSettingsPlex.ts
msgid "Disconnect" msgid "Disconnect"
@ -1927,6 +1958,8 @@ msgstr "Habilitar StartTLS"
msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices." msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices."
msgstr "Habilite el modo de compatibilidad, aumenta la compatibilidad con los administradores de contraseñas en dispositivos móviles." msgstr "Habilite el modo de compatibilidad, aumenta la compatibilidad con los administradores de contraseñas en dispositivos móviles."
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/BoundPoliciesList.ts
#: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyBindingForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
@ -1963,6 +1996,7 @@ msgstr "Flujo de inscripción"
msgid "EntityID/Issuer" msgid "EntityID/Issuer"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Error" msgid "Error"
msgstr "Error" msgstr "Error"
@ -2936,6 +2970,10 @@ msgstr "La etiqueta se muestra al lado o encima de la solicitud."
msgid "Last IP" msgid "Last IP"
msgstr "Última IP" msgstr "Última IP"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Last applied"
msgstr ""
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/users/RelatedUserList.ts #: src/pages/users/RelatedUserList.ts
#: src/pages/users/UserListPage.ts #: src/pages/users/UserListPage.ts
@ -3048,6 +3086,7 @@ msgstr "Cargando"
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts #: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/TransportForm.ts #: src/pages/events/TransportForm.ts
@ -3351,6 +3390,9 @@ msgstr "Mis solicitudes"
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/InitialApplicationWizardPage.ts #: src/pages/applications/wizard/InitialApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairForm.ts #: src/pages/crypto/CertificateKeyPairForm.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
@ -3523,6 +3565,7 @@ msgstr "Nginx (independiente)"
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
@ -3871,6 +3914,10 @@ msgstr ""
msgid "Order" msgid "Order"
msgstr "Orden" msgstr "Orden"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Orphaned"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Other global settings" msgid "Other global settings"
msgstr "Otros ajustes globales" msgstr "Otros ajustes globales"
@ -4001,6 +4048,7 @@ msgstr "Contraseña: entrada enmascarada, la contraseña se valida contra las fu
msgid "Passwordless flow" msgid "Passwordless flow"
msgstr "Flujo sin contraseña" msgstr "Flujo sin contraseña"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/users/UserForm.ts #: src/pages/users/UserForm.ts
msgid "Path" msgid "Path"
msgstr "" msgstr ""
@ -4016,6 +4064,10 @@ msgstr ""
msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug." msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug."
msgstr "" msgstr ""
#: src/elements/user/UserConsentList.ts
msgid "Permissions"
msgstr ""
#: src/pages/sources/saml/SAMLSourceForm.ts #: src/pages/sources/saml/SAMLSourceForm.ts
msgid "Persistent" msgid "Persistent"
msgstr "persistente" msgstr "persistente"
@ -5183,6 +5235,7 @@ msgstr "Estático: valor estático, que se muestra tal cual."
msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding." msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding."
msgstr "Niega el flujo estáticamente. Para usar esta etapa de manera efectiva, desactive *Evaluar en plan* en el encuadernado respectivo." msgstr "Niega el flujo estáticamente. Para usar esta etapa de manera efectiva, desactive *Evaluar en plan* en el encuadernado respectivo."
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Status" msgid "Status"
msgstr "Estatus" msgstr "Estatus"
@ -5210,6 +5263,7 @@ msgstr "Modo asignatura"
msgid "Subject-alt name" msgid "Subject-alt name"
msgstr "Nombre de asunto ALT" msgstr "Nombre de asunto ALT"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Successful" msgid "Successful"
msgstr "Éxito" msgstr "Éxito"
@ -5256,6 +5310,10 @@ msgstr "El flujo se creó correctamente."
msgid "Successfully created group." msgid "Successfully created group."
msgstr "Se ha creado el grupo correctamente." msgstr "Se ha creado el grupo correctamente."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully created instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully created integration." msgid "Successfully created integration."
@ -5422,6 +5480,10 @@ msgstr "Se actualizó correctamente el flujo."
msgid "Successfully updated group." msgid "Successfully updated group."
msgstr "El grupo se actualizó correctamente." msgstr "El grupo se actualizó correctamente."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully updated instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully updated integration." msgid "Successfully updated integration."
@ -6095,6 +6157,7 @@ msgstr "Puestos avanzados insalubres"
msgid "Unique identifier the token is referenced by." msgid "Unique identifier the token is referenced by."
msgstr "Identificador único por el que se hace referencia al token." msgstr "Identificador único por el que se hace referencia al token."
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Unknown" msgid "Unknown"
msgstr "Desconocido" msgstr "Desconocido"
@ -6116,6 +6179,7 @@ msgstr "¡Actuales!"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationViewPage.ts #: src/pages/applications/ApplicationViewPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -6167,6 +6231,10 @@ msgstr "Aplicación de actualización"
msgid "Update Binding" msgid "Update Binding"
msgstr "Enlace de actualización" msgstr "Enlace de actualización"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Update Blueprint"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Update Certificate-Key Pair" msgid "Update Certificate-Key Pair"
msgstr "Actualizar par de claves de certificado" msgstr "Actualizar par de claves de certificado"
@ -6630,6 +6698,7 @@ msgstr "Espera (min)"
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Warning" msgid "Warning"
@ -6807,6 +6876,7 @@ msgstr ""
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/groups/RelatedGroupList.ts #: src/pages/groups/RelatedGroupList.ts

View File

@ -176,6 +176,7 @@ msgid "Action"
msgstr "Action" msgstr "Action"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/EventListPage.ts #: src/pages/events/EventListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -281,6 +282,7 @@ msgstr ""
msgid "Additional scopes to be passed to the OAuth Provider, separated by space." msgid "Additional scopes to be passed to the OAuth Provider, separated by space."
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
msgid "Additional settings" msgid "Additional settings"
msgstr "Paramètres supplémentaire" msgstr "Paramètres supplémentaire"
@ -640,6 +642,10 @@ msgstr "Application autorisée :"
msgid "Auto-detect (based on your browser)" msgid "Auto-detect (based on your browser)"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Automate and template configuration within authentik."
msgstr ""
#: src/interfaces/UserInterface.ts #: src/interfaces/UserInterface.ts
msgid "Avatar image" msgid "Avatar image"
msgstr "Image d'avatar" msgstr "Image d'avatar"
@ -749,6 +755,15 @@ msgstr "Liaison"
msgid "Binding Type" msgid "Binding Type"
msgstr "Type de binding" msgstr "Type de binding"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprint(s)"
msgstr ""
#: src/interfaces/AdminInterface.ts
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprints"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Branding settings" msgid "Branding settings"
msgstr "Paramètres de marque" msgstr "Paramètres de marque"
@ -1143,6 +1158,10 @@ msgstr ""
#~ msgid "Configure settings relevant to your user profile." #~ msgid "Configure settings relevant to your user profile."
#~ msgstr "Configure les paramètre applicable à votre profil." #~ msgstr "Configure les paramètre applicable à votre profil."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Configure the blueprint context, used for templating."
msgstr ""
#: src/pages/providers/saml/SAMLProviderForm.ts #: src/pages/providers/saml/SAMLProviderForm.ts
msgid "Configure the maximum allowed time drift for an assertion." msgid "Configure the maximum allowed time drift for an assertion."
msgstr "Configure la dérive temporelle maximale d'une assetion." msgstr "Configure la dérive temporelle maximale d'une assetion."
@ -1234,6 +1253,7 @@ msgstr ""
msgid "Content right" msgid "Content right"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
@ -1289,6 +1309,8 @@ msgstr "Copier le lien de récupération"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/ApplicationWizard.ts #: src/pages/applications/wizard/ApplicationWizard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -1351,6 +1373,10 @@ msgstr "Créer une application"
msgid "Create Binding" msgid "Create Binding"
msgstr "Créer une liaison" msgstr "Créer une liaison"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Create Blueprint Instance"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Create Certificate-Key Pair" msgid "Create Certificate-Key Pair"
msgstr "Créer une paire clé/certificat" msgstr "Créer une paire clé/certificat"
@ -1577,6 +1603,7 @@ msgstr "Définit les méthodes d'envoi des notifications aux utilisateurs, telle
#: src/elements/user/SessionList.ts #: src/elements/user/SessionList.ts
#: src/elements/user/UserConsentList.ts #: src/elements/user/UserConsentList.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -1763,6 +1790,10 @@ msgstr ""
msgid "Disabled" msgid "Disabled"
msgstr "Désactivé" msgstr "Désactivé"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Disabled blueprints are never applied."
msgstr ""
#: src/user/user-settings/sources/SourceSettingsOAuth.ts #: src/user/user-settings/sources/SourceSettingsOAuth.ts
#: src/user/user-settings/sources/SourceSettingsPlex.ts #: src/user/user-settings/sources/SourceSettingsPlex.ts
msgid "Disconnect" msgid "Disconnect"
@ -1949,6 +1980,8 @@ msgstr "Activer StartTLS"
msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices." msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices."
msgstr "Activer le mode de compatibilité, améliore la compatibilité avec les gestionnaires de mot de passe sur les équipements mobiles." msgstr "Activer le mode de compatibilité, améliore la compatibilité avec les gestionnaires de mot de passe sur les équipements mobiles."
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/BoundPoliciesList.ts
#: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyBindingForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
@ -1985,6 +2018,7 @@ msgstr "Flux d'inscription"
msgid "EntityID/Issuer" msgid "EntityID/Issuer"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Error" msgid "Error"
msgstr "Erreur" msgstr "Erreur"
@ -2967,6 +3001,10 @@ msgstr "Libellé affiché à côté/au-dessus du champ."
msgid "Last IP" msgid "Last IP"
msgstr "Dernière IP" msgstr "Dernière IP"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Last applied"
msgstr ""
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/users/RelatedUserList.ts #: src/pages/users/RelatedUserList.ts
#: src/pages/users/UserListPage.ts #: src/pages/users/UserListPage.ts
@ -3079,6 +3117,7 @@ msgstr "Chargement en cours"
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts #: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/TransportForm.ts #: src/pages/events/TransportForm.ts
@ -3382,6 +3421,9 @@ msgstr "Mes applications"
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/InitialApplicationWizardPage.ts #: src/pages/applications/wizard/InitialApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairForm.ts #: src/pages/crypto/CertificateKeyPairForm.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
@ -3554,6 +3596,7 @@ msgstr ""
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
@ -3906,6 +3949,10 @@ msgstr ""
msgid "Order" msgid "Order"
msgstr "Tri" msgstr "Tri"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Orphaned"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Other global settings" msgid "Other global settings"
msgstr "Autres paramètres globaux" msgstr "Autres paramètres globaux"
@ -4037,6 +4084,7 @@ msgstr "Mot de passe : Entrée masquée, le mot de passe est vérifié par les s
msgid "Passwordless flow" msgid "Passwordless flow"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/users/UserForm.ts #: src/pages/users/UserForm.ts
msgid "Path" msgid "Path"
msgstr "" msgstr ""
@ -4052,6 +4100,10 @@ msgstr ""
msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug." msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug."
msgstr "" msgstr ""
#: src/elements/user/UserConsentList.ts
msgid "Permissions"
msgstr ""
#: src/pages/sources/saml/SAMLSourceForm.ts #: src/pages/sources/saml/SAMLSourceForm.ts
msgid "Persistent" msgid "Persistent"
msgstr "Persistant" msgstr "Persistant"
@ -5236,6 +5288,7 @@ msgstr "Statique : valeur statique, affichée comme telle."
msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding." msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding."
msgstr "Refuser statiquement le flux. Pour utiliser cette étape efficacement, désactivez *Évaluer en planification* dans la liaison applicable." msgstr "Refuser statiquement le flux. Pour utiliser cette étape efficacement, désactivez *Évaluer en planification* dans la liaison applicable."
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Status" msgid "Status"
msgstr "Statut" msgstr "Statut"
@ -5271,6 +5324,7 @@ msgstr "Mode subject"
msgid "Subject-alt name" msgid "Subject-alt name"
msgstr "Nom alternatif subject" msgstr "Nom alternatif subject"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Successful" msgid "Successful"
msgstr "Réussite" msgstr "Réussite"
@ -5317,6 +5371,10 @@ msgstr "Flux créé avec succès"
msgid "Successfully created group." msgid "Successfully created group."
msgstr "Groupe créé avec succès" msgstr "Groupe créé avec succès"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully created instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully created integration." msgid "Successfully created integration."
@ -5483,6 +5541,10 @@ msgstr "Flux mis à jour avec succès"
msgid "Successfully updated group." msgid "Successfully updated group."
msgstr "Groupe mis à jour avec succès" msgstr "Groupe mis à jour avec succès"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully updated instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully updated integration." msgid "Successfully updated integration."
@ -6153,6 +6215,7 @@ msgstr "Avant-postes malades"
msgid "Unique identifier the token is referenced by." msgid "Unique identifier the token is referenced by."
msgstr "Identifiant unique par lequel le jeton est référencé." msgstr "Identifiant unique par lequel le jeton est référencé."
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Unknown" msgid "Unknown"
msgstr "Inconnu" msgstr "Inconnu"
@ -6174,6 +6237,7 @@ msgstr "À jour !"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationViewPage.ts #: src/pages/applications/ApplicationViewPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -6225,6 +6289,10 @@ msgstr "Mettre à jour l'application"
msgid "Update Binding" msgid "Update Binding"
msgstr "Mettre à jour la liaison" msgstr "Mettre à jour la liaison"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Update Blueprint"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Update Certificate-Key Pair" msgid "Update Certificate-Key Pair"
msgstr "Mettre à jour la paire clé/certificat" msgstr "Mettre à jour la paire clé/certificat"
@ -6692,6 +6760,7 @@ msgstr "Attente (min)"
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Warning" msgid "Warning"
@ -6868,6 +6937,7 @@ msgstr ""
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/groups/RelatedGroupList.ts #: src/pages/groups/RelatedGroupList.ts

View File

@ -173,6 +173,7 @@ msgid "Action"
msgstr "Akcja" msgstr "Akcja"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/EventListPage.ts #: src/pages/events/EventListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -278,6 +279,7 @@ msgstr "Dodatkowe mapowania zakresu, które są przekazywane do serwera proxy."
msgid "Additional scopes to be passed to the OAuth Provider, separated by space." msgid "Additional scopes to be passed to the OAuth Provider, separated by space."
msgstr "Dodatkowe zakresy do przekazania do dostawcy OAuth, oddzielone spacją." msgstr "Dodatkowe zakresy do przekazania do dostawcy OAuth, oddzielone spacją."
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
msgid "Additional settings" msgid "Additional settings"
msgstr "Dodatkowe ustawienia" msgstr "Dodatkowe ustawienia"
@ -634,6 +636,10 @@ msgstr "Autoryzowana aplikacja:"
msgid "Auto-detect (based on your browser)" msgid "Auto-detect (based on your browser)"
msgstr "Automatycznie wykryj (na podstawie Twojej przeglądarki)" msgstr "Automatycznie wykryj (na podstawie Twojej przeglądarki)"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Automate and template configuration within authentik."
msgstr ""
#: src/interfaces/UserInterface.ts #: src/interfaces/UserInterface.ts
msgid "Avatar image" msgid "Avatar image"
msgstr "Obraz awatara" msgstr "Obraz awatara"
@ -740,6 +746,15 @@ msgstr "Wiązanie"
msgid "Binding Type" msgid "Binding Type"
msgstr "Typ wiązania" msgstr "Typ wiązania"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprint(s)"
msgstr ""
#: src/interfaces/AdminInterface.ts
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprints"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Branding settings" msgid "Branding settings"
msgstr "Ustawienia brandingowe" msgstr "Ustawienia brandingowe"
@ -1131,6 +1146,10 @@ msgstr "Skonfiguruj sposób, w jaki placówka wysyła zapytania do użytkownikó
#~ msgid "Configure settings relevant to your user profile." #~ msgid "Configure settings relevant to your user profile."
#~ msgstr "Skonfiguruj ustawienia odpowiednie dla Twojego profilu użytkownika." #~ msgstr "Skonfiguruj ustawienia odpowiednie dla Twojego profilu użytkownika."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Configure the blueprint context, used for templating."
msgstr ""
#: src/pages/providers/saml/SAMLProviderForm.ts #: src/pages/providers/saml/SAMLProviderForm.ts
msgid "Configure the maximum allowed time drift for an assertion." msgid "Configure the maximum allowed time drift for an assertion."
msgstr "Skonfiguruj maksymalny dozwolony dryft czasu dla asercji." msgstr "Skonfiguruj maksymalny dozwolony dryft czasu dla asercji."
@ -1220,6 +1239,7 @@ msgstr ""
msgid "Content right" msgid "Content right"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
@ -1274,6 +1294,8 @@ msgstr "Skopiuj link odzyskiwania"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/ApplicationWizard.ts #: src/pages/applications/wizard/ApplicationWizard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -1336,6 +1358,10 @@ msgstr "Utwórz aplikację"
msgid "Create Binding" msgid "Create Binding"
msgstr "Utwórz powiązanie" msgstr "Utwórz powiązanie"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Create Blueprint Instance"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Create Certificate-Key Pair" msgid "Create Certificate-Key Pair"
msgstr "Utwórz parę certyfikat-klucz" msgstr "Utwórz parę certyfikat-klucz"
@ -1560,6 +1586,7 @@ msgstr "Określ sposób wysyłania powiadomień do użytkowników, takich jak e-
#: src/elements/user/SessionList.ts #: src/elements/user/SessionList.ts
#: src/elements/user/UserConsentList.ts #: src/elements/user/UserConsentList.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -1743,6 +1770,10 @@ msgstr "Katalog"
msgid "Disabled" msgid "Disabled"
msgstr "Wyłączone" msgstr "Wyłączone"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Disabled blueprints are never applied."
msgstr ""
#: src/user/user-settings/sources/SourceSettingsOAuth.ts #: src/user/user-settings/sources/SourceSettingsOAuth.ts
#: src/user/user-settings/sources/SourceSettingsPlex.ts #: src/user/user-settings/sources/SourceSettingsPlex.ts
msgid "Disconnect" msgid "Disconnect"
@ -1924,6 +1955,8 @@ msgstr "Włącz StartTLS"
msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices." msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices."
msgstr "Włącz tryb zgodności, zwiększa zgodność z menedżerami haseł na urządzeniach mobilnych." msgstr "Włącz tryb zgodności, zwiększa zgodność z menedżerami haseł na urządzeniach mobilnych."
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/BoundPoliciesList.ts
#: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyBindingForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
@ -1960,6 +1993,7 @@ msgstr "Przepływ rejestracji"
msgid "EntityID/Issuer" msgid "EntityID/Issuer"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Error" msgid "Error"
msgstr "Błąd" msgstr "Błąd"
@ -2933,6 +2967,10 @@ msgstr "Etykieta pokazana obok/nad monitem."
msgid "Last IP" msgid "Last IP"
msgstr "Ostatni adres IP" msgstr "Ostatni adres IP"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Last applied"
msgstr ""
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/users/RelatedUserList.ts #: src/pages/users/RelatedUserList.ts
#: src/pages/users/UserListPage.ts #: src/pages/users/UserListPage.ts
@ -3045,6 +3083,7 @@ msgstr "Ładowanie"
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts #: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/TransportForm.ts #: src/pages/events/TransportForm.ts
@ -3348,6 +3387,9 @@ msgstr "Moje aplikacje"
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/InitialApplicationWizardPage.ts #: src/pages/applications/wizard/InitialApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairForm.ts #: src/pages/crypto/CertificateKeyPairForm.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
@ -3520,6 +3562,7 @@ msgstr "Nginx (standalone)"
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
@ -3868,6 +3911,10 @@ msgstr ""
msgid "Order" msgid "Order"
msgstr "Kolejność" msgstr "Kolejność"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Orphaned"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Other global settings" msgid "Other global settings"
msgstr "Inne ustawienia globalne" msgstr "Inne ustawienia globalne"
@ -3998,6 +4045,7 @@ msgstr "Hasło: wejście zamaskowane, hasło jest sprawdzane w oparciu o źród
msgid "Passwordless flow" msgid "Passwordless flow"
msgstr "Przepływ bezhasłowy" msgstr "Przepływ bezhasłowy"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/users/UserForm.ts #: src/pages/users/UserForm.ts
msgid "Path" msgid "Path"
msgstr "" msgstr ""
@ -4013,6 +4061,10 @@ msgstr ""
msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug." msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug."
msgstr "" msgstr ""
#: src/elements/user/UserConsentList.ts
msgid "Permissions"
msgstr ""
#: src/pages/sources/saml/SAMLSourceForm.ts #: src/pages/sources/saml/SAMLSourceForm.ts
msgid "Persistent" msgid "Persistent"
msgstr "Trwały" msgstr "Trwały"
@ -5180,6 +5232,7 @@ msgstr "Statyczny: wartość statyczna, wyświetlana w stanie, w jakim jest."
msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding." msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding."
msgstr "Statycznie zaprzeczaj przepływowi. Aby efektywnie korzystać z tego etapu, wyłącz opcję *Oceń zgodnie z planem* w odpowiednim powiązaniu." msgstr "Statycznie zaprzeczaj przepływowi. Aby efektywnie korzystać z tego etapu, wyłącz opcję *Oceń zgodnie z planem* w odpowiednim powiązaniu."
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
@ -5207,6 +5260,7 @@ msgstr "Tryb przedmiotu"
msgid "Subject-alt name" msgid "Subject-alt name"
msgstr "Alternatywna nazwa tematu" msgstr "Alternatywna nazwa tematu"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Successful" msgid "Successful"
msgstr "Pomyślny" msgstr "Pomyślny"
@ -5253,6 +5307,10 @@ msgstr "Pomyślnie utworzono przepływ."
msgid "Successfully created group." msgid "Successfully created group."
msgstr "Pomyślnie utworzono grupę." msgstr "Pomyślnie utworzono grupę."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully created instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully created integration." msgid "Successfully created integration."
@ -5419,6 +5477,10 @@ msgstr "Pomyślnie zaktualizowano przepływ."
msgid "Successfully updated group." msgid "Successfully updated group."
msgstr "Pomyślnie zaktualizowano grupę." msgstr "Pomyślnie zaktualizowano grupę."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully updated instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully updated integration." msgid "Successfully updated integration."
@ -6092,6 +6154,7 @@ msgstr "Niezdrowe placówki"
msgid "Unique identifier the token is referenced by." msgid "Unique identifier the token is referenced by."
msgstr "Unikalny identyfikator, do którego odwołuje się token." msgstr "Unikalny identyfikator, do którego odwołuje się token."
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Unknown" msgid "Unknown"
msgstr "Nieznany" msgstr "Nieznany"
@ -6113,6 +6176,7 @@ msgstr "Aktualny!"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationViewPage.ts #: src/pages/applications/ApplicationViewPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -6164,6 +6228,10 @@ msgstr "Aktualizuj aplikację"
msgid "Update Binding" msgid "Update Binding"
msgstr "Zaktualizuj wiązanie" msgstr "Zaktualizuj wiązanie"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Update Blueprint"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Update Certificate-Key Pair" msgid "Update Certificate-Key Pair"
msgstr "Aktualizuj parę certyfikat-klucz" msgstr "Aktualizuj parę certyfikat-klucz"
@ -6627,6 +6695,7 @@ msgstr "Czekaj (min)"
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Warning" msgid "Warning"
@ -6804,6 +6873,7 @@ msgstr ""
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/groups/RelatedGroupList.ts #: src/pages/groups/RelatedGroupList.ts

View File

@ -171,6 +171,7 @@ msgid "Action"
msgstr "" msgstr ""
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/EventListPage.ts #: src/pages/events/EventListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -276,6 +277,7 @@ msgstr ""
msgid "Additional scopes to be passed to the OAuth Provider, separated by space." msgid "Additional scopes to be passed to the OAuth Provider, separated by space."
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
msgid "Additional settings" msgid "Additional settings"
msgstr "" msgstr ""
@ -632,6 +634,10 @@ msgstr ""
msgid "Auto-detect (based on your browser)" msgid "Auto-detect (based on your browser)"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Automate and template configuration within authentik."
msgstr ""
#: src/interfaces/UserInterface.ts #: src/interfaces/UserInterface.ts
msgid "Avatar image" msgid "Avatar image"
msgstr "" msgstr ""
@ -741,6 +747,15 @@ msgstr ""
msgid "Binding Type" msgid "Binding Type"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprint(s)"
msgstr ""
#: src/interfaces/AdminInterface.ts
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprints"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Branding settings" msgid "Branding settings"
msgstr "" msgstr ""
@ -1138,6 +1153,10 @@ msgstr ""
#~ msgid "Configure settings relevant to your user profile." #~ msgid "Configure settings relevant to your user profile."
#~ msgstr "" #~ msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
msgid "Configure the blueprint context, used for templating."
msgstr ""
#: src/pages/providers/saml/SAMLProviderForm.ts #: src/pages/providers/saml/SAMLProviderForm.ts
msgid "Configure the maximum allowed time drift for an assertion." msgid "Configure the maximum allowed time drift for an assertion."
msgstr "" msgstr ""
@ -1229,6 +1248,7 @@ msgstr ""
msgid "Content right" msgid "Content right"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
@ -1284,6 +1304,8 @@ msgstr ""
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/ApplicationWizard.ts #: src/pages/applications/wizard/ApplicationWizard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -1346,6 +1368,10 @@ msgstr ""
msgid "Create Binding" msgid "Create Binding"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Create Blueprint Instance"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Create Certificate-Key Pair" msgid "Create Certificate-Key Pair"
msgstr "" msgstr ""
@ -1572,6 +1598,7 @@ msgstr ""
#: src/elements/user/SessionList.ts #: src/elements/user/SessionList.ts
#: src/elements/user/UserConsentList.ts #: src/elements/user/UserConsentList.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -1766,6 +1793,10 @@ msgstr ""
msgid "Disabled" msgid "Disabled"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
msgid "Disabled blueprints are never applied."
msgstr ""
#: src/user/user-settings/sources/SourceSettingsOAuth.ts #: src/user/user-settings/sources/SourceSettingsOAuth.ts
#: src/user/user-settings/sources/SourceSettingsPlex.ts #: src/user/user-settings/sources/SourceSettingsPlex.ts
msgid "Disconnect" msgid "Disconnect"
@ -1954,6 +1985,8 @@ msgstr ""
msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices." msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices."
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/BoundPoliciesList.ts
#: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyBindingForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
@ -1990,6 +2023,7 @@ msgstr ""
msgid "EntityID/Issuer" msgid "EntityID/Issuer"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Error" msgid "Error"
msgstr "" msgstr ""
@ -2976,6 +3010,10 @@ msgstr ""
msgid "Last IP" msgid "Last IP"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Last applied"
msgstr ""
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/users/RelatedUserList.ts #: src/pages/users/RelatedUserList.ts
#: src/pages/users/UserListPage.ts #: src/pages/users/UserListPage.ts
@ -3089,6 +3127,7 @@ msgstr ""
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts #: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/TransportForm.ts #: src/pages/events/TransportForm.ts
@ -3393,6 +3432,9 @@ msgstr ""
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/InitialApplicationWizardPage.ts #: src/pages/applications/wizard/InitialApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairForm.ts #: src/pages/crypto/CertificateKeyPairForm.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
@ -3565,6 +3607,7 @@ msgstr ""
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
@ -3920,6 +3963,10 @@ msgstr ""
msgid "Order" msgid "Order"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Orphaned"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Other global settings" msgid "Other global settings"
msgstr "" msgstr ""
@ -4054,6 +4101,7 @@ msgstr ""
msgid "Passwordless flow" msgid "Passwordless flow"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/users/UserForm.ts #: src/pages/users/UserForm.ts
msgid "Path" msgid "Path"
msgstr "" msgstr ""
@ -4069,6 +4117,10 @@ msgstr ""
msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug." msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug."
msgstr "" msgstr ""
#: src/elements/user/UserConsentList.ts
msgid "Permissions"
msgstr ""
#: src/pages/sources/saml/SAMLSourceForm.ts #: src/pages/sources/saml/SAMLSourceForm.ts
msgid "Persistent" msgid "Persistent"
msgstr "" msgstr ""
@ -5265,6 +5317,7 @@ msgstr ""
msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding." msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding."
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Status" msgid "Status"
msgstr "" msgstr ""
@ -5300,6 +5353,7 @@ msgstr ""
msgid "Subject-alt name" msgid "Subject-alt name"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Successful" msgid "Successful"
msgstr "" msgstr ""
@ -5346,6 +5400,10 @@ msgstr ""
msgid "Successfully created group." msgid "Successfully created group."
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully created instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully created integration." msgid "Successfully created integration."
@ -5514,6 +5572,10 @@ msgstr ""
msgid "Successfully updated group." msgid "Successfully updated group."
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully updated instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully updated integration." msgid "Successfully updated integration."
@ -6191,6 +6253,7 @@ msgstr ""
msgid "Unique identifier the token is referenced by." msgid "Unique identifier the token is referenced by."
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Unknown" msgid "Unknown"
msgstr "" msgstr ""
@ -6213,6 +6276,7 @@ msgstr ""
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationViewPage.ts #: src/pages/applications/ApplicationViewPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -6264,6 +6328,10 @@ msgstr ""
msgid "Update Binding" msgid "Update Binding"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Update Blueprint"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Update Certificate-Key Pair" msgid "Update Certificate-Key Pair"
msgstr "" msgstr ""
@ -6733,6 +6801,7 @@ msgstr ""
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Warning" msgid "Warning"
@ -6909,6 +6978,7 @@ msgstr ""
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/groups/RelatedGroupList.ts #: src/pages/groups/RelatedGroupList.ts

View File

@ -173,6 +173,7 @@ msgid "Action"
msgstr "Eylem" msgstr "Eylem"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/EventListPage.ts #: src/pages/events/EventListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -278,6 +279,7 @@ msgstr "Proxy'ye iletilen ek kapsam eşlemeleri."
msgid "Additional scopes to be passed to the OAuth Provider, separated by space." msgid "Additional scopes to be passed to the OAuth Provider, separated by space."
msgstr "OAuth Sağlayıcıya iletilecek ek kapsamlar, boşlukla ayrılmış." msgstr "OAuth Sağlayıcıya iletilecek ek kapsamlar, boşlukla ayrılmış."
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
msgid "Additional settings" msgid "Additional settings"
msgstr "Ek ayarlar" msgstr "Ek ayarlar"
@ -634,6 +636,10 @@ msgstr "Yetkili başvuru:"
msgid "Auto-detect (based on your browser)" msgid "Auto-detect (based on your browser)"
msgstr "Otomatik algıla (tarayıcınıza göre)" msgstr "Otomatik algıla (tarayıcınıza göre)"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Automate and template configuration within authentik."
msgstr ""
#: src/interfaces/UserInterface.ts #: src/interfaces/UserInterface.ts
msgid "Avatar image" msgid "Avatar image"
msgstr "Avatar resmi" msgstr "Avatar resmi"
@ -743,6 +749,15 @@ msgstr "Ciltleme"
msgid "Binding Type" msgid "Binding Type"
msgstr "Bağlama Tipi" msgstr "Bağlama Tipi"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprint(s)"
msgstr ""
#: src/interfaces/AdminInterface.ts
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprints"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Branding settings" msgid "Branding settings"
msgstr "Markalama ayarları" msgstr "Markalama ayarları"
@ -1134,6 +1149,10 @@ msgstr "Üssün çekirdek authentik sunucusunun kullanıcılarını nasıl sorgu
#~ msgid "Configure settings relevant to your user profile." #~ msgid "Configure settings relevant to your user profile."
#~ msgstr "Kullanıcı profilinizle ilgili ayarları yapılandırın." #~ msgstr "Kullanıcı profilinizle ilgili ayarları yapılandırın."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Configure the blueprint context, used for templating."
msgstr ""
#: src/pages/providers/saml/SAMLProviderForm.ts #: src/pages/providers/saml/SAMLProviderForm.ts
msgid "Configure the maximum allowed time drift for an assertion." msgid "Configure the maximum allowed time drift for an assertion."
msgstr "Bir onaylama işlemi için izin verilen maksimum zaman kaymasını yapılandırın." msgstr "Bir onaylama işlemi için izin verilen maksimum zaman kaymasını yapılandırın."
@ -1223,6 +1242,7 @@ msgstr ""
msgid "Content right" msgid "Content right"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
@ -1277,6 +1297,8 @@ msgstr "Kurtarma bağlantısı kopyalama"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/ApplicationWizard.ts #: src/pages/applications/wizard/ApplicationWizard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -1339,6 +1361,10 @@ msgstr "Uygulama Oluştur"
msgid "Create Binding" msgid "Create Binding"
msgstr "Bağlama Oluştur" msgstr "Bağlama Oluştur"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Create Blueprint Instance"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Create Certificate-Key Pair" msgid "Create Certificate-Key Pair"
msgstr "Sertifika Anahtarı Çifti Oluştur" msgstr "Sertifika Anahtarı Çifti Oluştur"
@ -1563,6 +1589,7 @@ msgstr "E-posta veya Webhook gibi kullanıcılara bildirimlerin nasıl gönderil
#: src/elements/user/SessionList.ts #: src/elements/user/SessionList.ts
#: src/elements/user/UserConsentList.ts #: src/elements/user/UserConsentList.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -1746,6 +1773,10 @@ msgstr "Rehber"
msgid "Disabled" msgid "Disabled"
msgstr "Devre Dışı" msgstr "Devre Dışı"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Disabled blueprints are never applied."
msgstr ""
#: src/user/user-settings/sources/SourceSettingsOAuth.ts #: src/user/user-settings/sources/SourceSettingsOAuth.ts
#: src/user/user-settings/sources/SourceSettingsPlex.ts #: src/user/user-settings/sources/SourceSettingsPlex.ts
msgid "Disconnect" msgid "Disconnect"
@ -1927,6 +1958,8 @@ msgstr "StartTLS'yi Etkinleştir"
msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices." msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices."
msgstr "Uyumluluk modunu etkinleştirin, mobil cihazlarda parola yöneticileri ile uyumluluğu artırır." msgstr "Uyumluluk modunu etkinleştirin, mobil cihazlarda parola yöneticileri ile uyumluluğu artırır."
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/BoundPoliciesList.ts
#: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyBindingForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
@ -1963,6 +1996,7 @@ msgstr "Kayıt akışı"
msgid "EntityID/Issuer" msgid "EntityID/Issuer"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Error" msgid "Error"
msgstr "Hata" msgstr "Hata"
@ -2937,6 +2971,10 @@ msgstr "Etiket, istemin yanında veya üstünde gösterilir."
msgid "Last IP" msgid "Last IP"
msgstr "Son IP" msgstr "Son IP"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Last applied"
msgstr ""
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/users/RelatedUserList.ts #: src/pages/users/RelatedUserList.ts
#: src/pages/users/UserListPage.ts #: src/pages/users/UserListPage.ts
@ -3049,6 +3087,7 @@ msgstr "Yükleniyor"
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts #: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/TransportForm.ts #: src/pages/events/TransportForm.ts
@ -3352,6 +3391,9 @@ msgstr "Uygulamalarım"
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/InitialApplicationWizardPage.ts #: src/pages/applications/wizard/InitialApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairForm.ts #: src/pages/crypto/CertificateKeyPairForm.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
@ -3524,6 +3566,7 @@ msgstr "Nginx (bağımsız)"
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
@ -3873,6 +3916,10 @@ msgstr ""
msgid "Order" msgid "Order"
msgstr "Sıra" msgstr "Sıra"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Orphaned"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Other global settings" msgid "Other global settings"
msgstr "Diğer genel ayarlar" msgstr "Diğer genel ayarlar"
@ -4003,6 +4050,7 @@ msgstr "Parola: Maskeli giriş, parola kaynaklara karşı doğrulanır. İlkeler
msgid "Passwordless flow" msgid "Passwordless flow"
msgstr "Parolasız akış" msgstr "Parolasız akış"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/users/UserForm.ts #: src/pages/users/UserForm.ts
msgid "Path" msgid "Path"
msgstr "" msgstr ""
@ -4018,6 +4066,10 @@ msgstr ""
msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug." msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug."
msgstr "" msgstr ""
#: src/elements/user/UserConsentList.ts
msgid "Permissions"
msgstr ""
#: src/pages/sources/saml/SAMLSourceForm.ts #: src/pages/sources/saml/SAMLSourceForm.ts
msgid "Persistent" msgid "Persistent"
msgstr "Kalıcı" msgstr "Kalıcı"
@ -5185,6 +5237,7 @@ msgstr "Statik: Statik değer, olduğu gibi görüntülenir."
msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding." msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding."
msgstr "Akışı statik olarak reddet. Bu aşamayı etkili bir şekilde kullanmak için ilgili bağlama üzerinde *Planda değerlendirme* devre dışı bırakın." msgstr "Akışı statik olarak reddet. Bu aşamayı etkili bir şekilde kullanmak için ilgili bağlama üzerinde *Planda değerlendirme* devre dışı bırakın."
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Status" msgid "Status"
msgstr "Durum" msgstr "Durum"
@ -5212,6 +5265,7 @@ msgstr "Konu modu"
msgid "Subject-alt name" msgid "Subject-alt name"
msgstr "Konu-alt adı" msgstr "Konu-alt adı"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Successful" msgid "Successful"
msgstr "Başarılı" msgstr "Başarılı"
@ -5258,6 +5312,10 @@ msgstr "Akış başarıyla oluşturuldu."
msgid "Successfully created group." msgid "Successfully created group."
msgstr "Grup başarıyla oluşturuldu." msgstr "Grup başarıyla oluşturuldu."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully created instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully created integration." msgid "Successfully created integration."
@ -5424,6 +5482,10 @@ msgstr "Akış başarıyla güncellendi."
msgid "Successfully updated group." msgid "Successfully updated group."
msgstr "Grup başarıyla güncellendi." msgstr "Grup başarıyla güncellendi."
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully updated instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully updated integration." msgid "Successfully updated integration."
@ -6097,6 +6159,7 @@ msgstr "Sağlıksız üsler"
msgid "Unique identifier the token is referenced by." msgid "Unique identifier the token is referenced by."
msgstr "Belirteç tarafından başvurulan benzersiz tanımlayıcı." msgstr "Belirteç tarafından başvurulan benzersiz tanımlayıcı."
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Unknown" msgid "Unknown"
msgstr "bilinmeyen" msgstr "bilinmeyen"
@ -6118,6 +6181,7 @@ msgstr "Güncel!"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationViewPage.ts #: src/pages/applications/ApplicationViewPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -6169,6 +6233,10 @@ msgstr "Uygulamayı Güncelle"
msgid "Update Binding" msgid "Update Binding"
msgstr "Ciltlemeyi Güncelle" msgstr "Ciltlemeyi Güncelle"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Update Blueprint"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Update Certificate-Key Pair" msgid "Update Certificate-Key Pair"
msgstr "Sertifika Anahtarı Çiftini Güncelleştir" msgstr "Sertifika Anahtarı Çiftini Güncelleştir"
@ -6632,6 +6700,7 @@ msgstr "Bekle (dk)"
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Warning" msgid "Warning"
@ -6809,6 +6878,7 @@ msgstr ""
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/groups/RelatedGroupList.ts #: src/pages/groups/RelatedGroupList.ts

View File

@ -174,6 +174,7 @@ msgid "Action"
msgstr "操作" msgstr "操作"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/EventListPage.ts #: src/pages/events/EventListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -278,6 +279,7 @@ msgstr "传递给代理的额外作用域映射。"
msgid "Additional scopes to be passed to the OAuth Provider, separated by space." msgid "Additional scopes to be passed to the OAuth Provider, separated by space."
msgstr "要传递给 OAuth 提供商的额外作用域,用空格分隔。" msgstr "要传递给 OAuth 提供商的额外作用域,用空格分隔。"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
msgid "Additional settings" msgid "Additional settings"
msgstr "其他设置" msgstr "其他设置"
@ -632,6 +634,10 @@ msgstr "已授权应用程序:"
msgid "Auto-detect (based on your browser)" msgid "Auto-detect (based on your browser)"
msgstr "自动检测(基于您的浏览器)" msgstr "自动检测(基于您的浏览器)"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Automate and template configuration within authentik."
msgstr ""
#: src/interfaces/UserInterface.ts #: src/interfaces/UserInterface.ts
msgid "Avatar image" msgid "Avatar image"
msgstr "头像图片" msgstr "头像图片"
@ -738,6 +744,15 @@ msgstr "绑定"
msgid "Binding Type" msgid "Binding Type"
msgstr "绑定类型" msgstr "绑定类型"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprint(s)"
msgstr ""
#: src/interfaces/AdminInterface.ts
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprints"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Branding settings" msgid "Branding settings"
msgstr "品牌设置" msgstr "品牌设置"
@ -1129,6 +1144,10 @@ msgstr "配置前哨如何查询核心 authentik 服务器的用户。"
#~ msgid "Configure settings relevant to your user profile." #~ msgid "Configure settings relevant to your user profile."
#~ msgstr "配置与您的用户资料相关的设置。" #~ msgstr "配置与您的用户资料相关的设置。"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Configure the blueprint context, used for templating."
msgstr ""
#: src/pages/providers/saml/SAMLProviderForm.ts #: src/pages/providers/saml/SAMLProviderForm.ts
msgid "Configure the maximum allowed time drift for an assertion." msgid "Configure the maximum allowed time drift for an assertion."
msgstr "为断言配置允许的最大时间漂移。" msgstr "为断言配置允许的最大时间漂移。"
@ -1218,6 +1237,7 @@ msgstr "内容左侧"
msgid "Content right" msgid "Content right"
msgstr "内容右侧" msgstr "内容右侧"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
@ -1272,6 +1292,8 @@ msgstr "复制恢复链接"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/ApplicationWizard.ts #: src/pages/applications/wizard/ApplicationWizard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -1334,6 +1356,10 @@ msgstr "创建应用程序"
msgid "Create Binding" msgid "Create Binding"
msgstr "创建绑定" msgstr "创建绑定"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Create Blueprint Instance"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Create Certificate-Key Pair" msgid "Create Certificate-Key Pair"
msgstr "创建证书密钥对" msgstr "创建证书密钥对"
@ -1558,6 +1584,7 @@ msgstr "定义如何向用户发送通知,例如电子邮件或 Webhook。"
#: src/elements/user/SessionList.ts #: src/elements/user/SessionList.ts
#: src/elements/user/UserConsentList.ts #: src/elements/user/UserConsentList.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -1740,6 +1767,10 @@ msgstr "目录"
msgid "Disabled" msgid "Disabled"
msgstr "已禁用" msgstr "已禁用"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Disabled blueprints are never applied."
msgstr ""
#: src/user/user-settings/sources/SourceSettingsOAuth.ts #: src/user/user-settings/sources/SourceSettingsOAuth.ts
#: src/user/user-settings/sources/SourceSettingsPlex.ts #: src/user/user-settings/sources/SourceSettingsPlex.ts
msgid "Disconnect" msgid "Disconnect"
@ -1920,6 +1951,8 @@ msgstr "启用 StartTLS"
msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices." msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices."
msgstr "启用兼容模式,增强与移动设备上密码管理器的兼容性。" msgstr "启用兼容模式,增强与移动设备上密码管理器的兼容性。"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/BoundPoliciesList.ts
#: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyBindingForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
@ -1956,6 +1989,7 @@ msgstr "注册流程"
msgid "EntityID/Issuer" msgid "EntityID/Issuer"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Error" msgid "Error"
msgstr "错误" msgstr "错误"
@ -2920,6 +2954,10 @@ msgstr "标签会显示在输入侧方/上方。"
msgid "Last IP" msgid "Last IP"
msgstr "上次 IP" msgstr "上次 IP"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Last applied"
msgstr ""
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/users/RelatedUserList.ts #: src/pages/users/RelatedUserList.ts
#: src/pages/users/UserListPage.ts #: src/pages/users/UserListPage.ts
@ -3032,6 +3070,7 @@ msgstr "正在加载"
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts #: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/TransportForm.ts #: src/pages/events/TransportForm.ts
@ -3334,6 +3373,9 @@ msgstr "我的应用"
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/InitialApplicationWizardPage.ts #: src/pages/applications/wizard/InitialApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairForm.ts #: src/pages/crypto/CertificateKeyPairForm.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
@ -3506,6 +3548,7 @@ msgstr "Nginx独立"
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
@ -3850,6 +3893,10 @@ msgstr ""
msgid "Order" msgid "Order"
msgstr "顺序" msgstr "顺序"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Orphaned"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Other global settings" msgid "Other global settings"
msgstr "其他全局设置" msgstr "其他全局设置"
@ -3976,6 +4023,7 @@ msgstr "密码:屏蔽输入内容,密码根据来源进行验证。策略仍
msgid "Passwordless flow" msgid "Passwordless flow"
msgstr "无密码流程" msgstr "无密码流程"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/users/UserForm.ts #: src/pages/users/UserForm.ts
msgid "Path" msgid "Path"
msgstr "" msgstr ""
@ -3991,6 +4039,10 @@ msgstr ""
msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug." msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug."
msgstr "" msgstr ""
#: src/elements/user/UserConsentList.ts
msgid "Permissions"
msgstr ""
#: src/pages/sources/saml/SAMLSourceForm.ts #: src/pages/sources/saml/SAMLSourceForm.ts
msgid "Persistent" msgid "Persistent"
msgstr "持久的" msgstr "持久的"
@ -5149,6 +5201,7 @@ msgstr "静态:静态值,按原样显示。"
msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding." msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding."
msgstr "静态拒绝流。要有效地使用此阶段,请在相应的绑定上禁用*规划时进行评估*。" msgstr "静态拒绝流。要有效地使用此阶段,请在相应的绑定上禁用*规划时进行评估*。"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Status" msgid "Status"
msgstr "状态" msgstr "状态"
@ -5176,6 +5229,7 @@ msgstr "Subject 模式"
msgid "Subject-alt name" msgid "Subject-alt name"
msgstr "替代名称" msgstr "替代名称"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Successful" msgid "Successful"
msgstr "成功" msgstr "成功"
@ -5222,6 +5276,10 @@ msgstr "已成功创建流程。"
msgid "Successfully created group." msgid "Successfully created group."
msgstr "已成功创建组。" msgstr "已成功创建组。"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully created instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully created integration." msgid "Successfully created integration."
@ -5387,6 +5445,10 @@ msgstr "已成功更新流程。"
msgid "Successfully updated group." msgid "Successfully updated group."
msgstr "已成功更新组。" msgstr "已成功更新组。"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully updated instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully updated integration." msgid "Successfully updated integration."
@ -6058,6 +6120,7 @@ msgstr "不健康的前哨"
msgid "Unique identifier the token is referenced by." msgid "Unique identifier the token is referenced by."
msgstr "引用令牌的唯一标识符。" msgstr "引用令牌的唯一标识符。"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Unknown" msgid "Unknown"
msgstr "未知" msgstr "未知"
@ -6079,6 +6142,7 @@ msgstr "最新!"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationViewPage.ts #: src/pages/applications/ApplicationViewPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -6130,6 +6194,10 @@ msgstr "更新应用程序"
msgid "Update Binding" msgid "Update Binding"
msgstr "更新绑定" msgstr "更新绑定"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Update Blueprint"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Update Certificate-Key Pair" msgid "Update Certificate-Key Pair"
msgstr "更新证书密钥对" msgstr "更新证书密钥对"
@ -6592,6 +6660,7 @@ msgstr "等待(最短)"
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Warning" msgid "Warning"
@ -6771,6 +6840,7 @@ msgstr ""
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/groups/RelatedGroupList.ts #: src/pages/groups/RelatedGroupList.ts

View File

@ -175,6 +175,7 @@ msgid "Action"
msgstr "操作" msgstr "操作"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/EventListPage.ts #: src/pages/events/EventListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -279,6 +280,7 @@ msgstr "传递给代理的其他作用域映射。"
msgid "Additional scopes to be passed to the OAuth Provider, separated by space." msgid "Additional scopes to be passed to the OAuth Provider, separated by space."
msgstr "要传递给 OAuth 提供程序的其他作用域,用空格分隔。" msgstr "要传递给 OAuth 提供程序的其他作用域,用空格分隔。"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
msgid "Additional settings" msgid "Additional settings"
msgstr "其他设置" msgstr "其他设置"
@ -634,6 +636,10 @@ msgstr "授权应用程序:"
msgid "Auto-detect (based on your browser)" msgid "Auto-detect (based on your browser)"
msgstr "自动检测(基于您的浏览器)" msgstr "自动检测(基于您的浏览器)"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Automate and template configuration within authentik."
msgstr ""
#: src/interfaces/UserInterface.ts #: src/interfaces/UserInterface.ts
msgid "Avatar image" msgid "Avatar image"
msgstr "Avatar image" msgstr "Avatar image"
@ -740,6 +746,15 @@ msgstr "绑定"
msgid "Binding Type" msgid "Binding Type"
msgstr "绑定类型" msgstr "绑定类型"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprint(s)"
msgstr ""
#: src/interfaces/AdminInterface.ts
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprints"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Branding settings" msgid "Branding settings"
msgstr "品牌设置" msgstr "品牌设置"
@ -1131,6 +1146,10 @@ msgstr "配置前哨如何查询核心 authentik 服务器的用户。"
#~ msgid "Configure settings relevant to your user profile." #~ msgid "Configure settings relevant to your user profile."
#~ msgstr "配置与您的用户配置文件相关的设置。" #~ msgstr "配置与您的用户配置文件相关的设置。"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Configure the blueprint context, used for templating."
msgstr ""
#: src/pages/providers/saml/SAMLProviderForm.ts #: src/pages/providers/saml/SAMLProviderForm.ts
msgid "Configure the maximum allowed time drift for an assertion." msgid "Configure the maximum allowed time drift for an assertion."
msgstr "为断言配置允许的最大时间漂移。" msgstr "为断言配置允许的最大时间漂移。"
@ -1220,6 +1239,7 @@ msgstr ""
msgid "Content right" msgid "Content right"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
@ -1274,6 +1294,8 @@ msgstr "复制恢复链接"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/ApplicationWizard.ts #: src/pages/applications/wizard/ApplicationWizard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -1336,6 +1358,10 @@ msgstr "创建应用程序"
msgid "Create Binding" msgid "Create Binding"
msgstr "创建绑定" msgstr "创建绑定"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Create Blueprint Instance"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Create Certificate-Key Pair" msgid "Create Certificate-Key Pair"
msgstr "创建证书密钥对" msgstr "创建证书密钥对"
@ -1560,6 +1586,7 @@ msgstr "定义如何向用户发送通知,例如电子邮件或 Webhook。"
#: src/elements/user/SessionList.ts #: src/elements/user/SessionList.ts
#: src/elements/user/UserConsentList.ts #: src/elements/user/UserConsentList.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -1743,6 +1770,10 @@ msgstr "目录"
msgid "Disabled" msgid "Disabled"
msgstr "已禁用" msgstr "已禁用"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Disabled blueprints are never applied."
msgstr ""
#: src/user/user-settings/sources/SourceSettingsOAuth.ts #: src/user/user-settings/sources/SourceSettingsOAuth.ts
#: src/user/user-settings/sources/SourceSettingsPlex.ts #: src/user/user-settings/sources/SourceSettingsPlex.ts
msgid "Disconnect" msgid "Disconnect"
@ -1923,6 +1954,8 @@ msgstr "启用 StartTLS"
msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices." msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices."
msgstr "启用兼容模式,增加与移动设备上密码管理器的兼容性。" msgstr "启用兼容模式,增加与移动设备上密码管理器的兼容性。"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/BoundPoliciesList.ts
#: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyBindingForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
@ -1959,6 +1992,7 @@ msgstr "注册流程"
msgid "EntityID/Issuer" msgid "EntityID/Issuer"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Error" msgid "Error"
msgstr "错误" msgstr "错误"
@ -2924,6 +2958,10 @@ msgstr "标签显示在提示符旁边/上方。"
msgid "Last IP" msgid "Last IP"
msgstr "最后的 IP" msgstr "最后的 IP"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Last applied"
msgstr ""
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/users/RelatedUserList.ts #: src/pages/users/RelatedUserList.ts
#: src/pages/users/UserListPage.ts #: src/pages/users/UserListPage.ts
@ -3036,6 +3074,7 @@ msgstr "正在加载"
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts #: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/TransportForm.ts #: src/pages/events/TransportForm.ts
@ -3338,6 +3377,9 @@ msgstr "我的应用"
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/InitialApplicationWizardPage.ts #: src/pages/applications/wizard/InitialApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairForm.ts #: src/pages/crypto/CertificateKeyPairForm.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
@ -3510,6 +3552,7 @@ msgstr "Nginx (standalone)"
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
@ -3855,6 +3898,10 @@ msgstr ""
msgid "Order" msgid "Order"
msgstr "订购" msgstr "订购"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Orphaned"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Other global settings" msgid "Other global settings"
msgstr "其他全局设置" msgstr "其他全局设置"
@ -3981,6 +4028,7 @@ msgstr "密码:屏蔽输入,密码根据来源进行验证。策略仍需应
msgid "Passwordless flow" msgid "Passwordless flow"
msgstr "无密码流" msgstr "无密码流"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/users/UserForm.ts #: src/pages/users/UserForm.ts
msgid "Path" msgid "Path"
msgstr "" msgstr ""
@ -3996,6 +4044,10 @@ msgstr ""
msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug." msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug."
msgstr "" msgstr ""
#: src/elements/user/UserConsentList.ts
msgid "Permissions"
msgstr ""
#: src/pages/sources/saml/SAMLSourceForm.ts #: src/pages/sources/saml/SAMLSourceForm.ts
msgid "Persistent" msgid "Persistent"
msgstr "持久" msgstr "持久"
@ -5156,6 +5208,7 @@ msgstr "静态:静态值,按原样显示。"
msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding." msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding."
msgstr "静态拒绝流。要有效地使用此阶段,请在相应的绑定上禁用*按计划评估*。" msgstr "静态拒绝流。要有效地使用此阶段,请在相应的绑定上禁用*按计划评估*。"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Status" msgid "Status"
msgstr "状态" msgstr "状态"
@ -5183,6 +5236,7 @@ msgstr "Subject 模式"
msgid "Subject-alt name" msgid "Subject-alt name"
msgstr "替代名称" msgstr "替代名称"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Successful" msgid "Successful"
msgstr "成功" msgstr "成功"
@ -5229,6 +5283,10 @@ msgstr "已成功创建流程。"
msgid "Successfully created group." msgid "Successfully created group."
msgstr "已成功创建组。" msgstr "已成功创建组。"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully created instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully created integration." msgid "Successfully created integration."
@ -5394,6 +5452,10 @@ msgstr "已成功更新流程。"
msgid "Successfully updated group." msgid "Successfully updated group."
msgstr "已成功更新组。" msgstr "已成功更新组。"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully updated instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully updated integration." msgid "Successfully updated integration."
@ -6067,6 +6129,7 @@ msgstr "不健康的 Outposts"
msgid "Unique identifier the token is referenced by." msgid "Unique identifier the token is referenced by."
msgstr "引用令牌的唯一标识符。" msgstr "引用令牌的唯一标识符。"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Unknown" msgid "Unknown"
msgstr "未知" msgstr "未知"
@ -6088,6 +6151,7 @@ msgstr "最新!"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationViewPage.ts #: src/pages/applications/ApplicationViewPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -6139,6 +6203,10 @@ msgstr "更新应用程序"
msgid "Update Binding" msgid "Update Binding"
msgstr "更新绑定" msgstr "更新绑定"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Update Blueprint"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Update Certificate-Key Pair" msgid "Update Certificate-Key Pair"
msgstr "更新证书密钥对" msgstr "更新证书密钥对"
@ -6602,6 +6670,7 @@ msgstr "等待 (最短)"
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Warning" msgid "Warning"
@ -6781,6 +6850,7 @@ msgstr ""
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/groups/RelatedGroupList.ts #: src/pages/groups/RelatedGroupList.ts

View File

@ -175,6 +175,7 @@ msgid "Action"
msgstr "操作" msgstr "操作"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/EventListPage.ts #: src/pages/events/EventListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -279,6 +280,7 @@ msgstr "传递给代理的其他作用域映射。"
msgid "Additional scopes to be passed to the OAuth Provider, separated by space." msgid "Additional scopes to be passed to the OAuth Provider, separated by space."
msgstr "要传递给 OAuth 提供程序的其他作用域,用空格分隔。" msgstr "要传递给 OAuth 提供程序的其他作用域,用空格分隔。"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
msgid "Additional settings" msgid "Additional settings"
msgstr "其他设置" msgstr "其他设置"
@ -634,6 +636,10 @@ msgstr "授权应用程序:"
msgid "Auto-detect (based on your browser)" msgid "Auto-detect (based on your browser)"
msgstr "自动检测(基于您的浏览器)" msgstr "自动检测(基于您的浏览器)"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Automate and template configuration within authentik."
msgstr ""
#: src/interfaces/UserInterface.ts #: src/interfaces/UserInterface.ts
msgid "Avatar image" msgid "Avatar image"
msgstr "Avatar image" msgstr "Avatar image"
@ -740,6 +746,15 @@ msgstr "绑定"
msgid "Binding Type" msgid "Binding Type"
msgstr "绑定类型" msgstr "绑定类型"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprint(s)"
msgstr ""
#: src/interfaces/AdminInterface.ts
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Blueprints"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Branding settings" msgid "Branding settings"
msgstr "品牌设置" msgstr "品牌设置"
@ -1131,6 +1146,10 @@ msgstr "配置前哨如何查询核心 authentik 服务器的用户。"
#~ msgid "Configure settings relevant to your user profile." #~ msgid "Configure settings relevant to your user profile."
#~ msgstr "配置与您的用户配置文件相关的设置。" #~ msgstr "配置与您的用户配置文件相关的设置。"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Configure the blueprint context, used for templating."
msgstr ""
#: src/pages/providers/saml/SAMLProviderForm.ts #: src/pages/providers/saml/SAMLProviderForm.ts
msgid "Configure the maximum allowed time drift for an assertion." msgid "Configure the maximum allowed time drift for an assertion."
msgstr "为断言配置允许的最大时间漂移。" msgstr "为断言配置允许的最大时间漂移。"
@ -1220,6 +1239,7 @@ msgstr ""
msgid "Content right" msgid "Content right"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts
@ -1274,6 +1294,8 @@ msgstr "复制恢复链接"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/ApplicationWizard.ts #: src/pages/applications/wizard/ApplicationWizard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
@ -1336,6 +1358,10 @@ msgstr "创建应用程序"
msgid "Create Binding" msgid "Create Binding"
msgstr "创建绑定" msgstr "创建绑定"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Create Blueprint Instance"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Create Certificate-Key Pair" msgid "Create Certificate-Key Pair"
msgstr "创建证书密钥对" msgstr "创建证书密钥对"
@ -1560,6 +1586,7 @@ msgstr "定义如何向用户发送通知,例如电子邮件或 Webhook。"
#: src/elements/user/SessionList.ts #: src/elements/user/SessionList.ts
#: src/elements/user/UserConsentList.ts #: src/elements/user/UserConsentList.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -1743,6 +1770,10 @@ msgstr "目录"
msgid "Disabled" msgid "Disabled"
msgstr "已禁用" msgstr "已禁用"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Disabled blueprints are never applied."
msgstr ""
#: src/user/user-settings/sources/SourceSettingsOAuth.ts #: src/user/user-settings/sources/SourceSettingsOAuth.ts
#: src/user/user-settings/sources/SourceSettingsPlex.ts #: src/user/user-settings/sources/SourceSettingsPlex.ts
msgid "Disconnect" msgid "Disconnect"
@ -1923,6 +1954,8 @@ msgstr "启用 StartTLS"
msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices." msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices."
msgstr "启用兼容模式,增加与移动设备上密码管理器的兼容性。" msgstr "启用兼容模式,增加与移动设备上密码管理器的兼容性。"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/BoundPoliciesList.ts
#: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyBindingForm.ts
#: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts
@ -1959,6 +1992,7 @@ msgstr "注册流程"
msgid "EntityID/Issuer" msgid "EntityID/Issuer"
msgstr "" msgstr ""
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Error" msgid "Error"
msgstr "错误" msgstr "错误"
@ -2924,6 +2958,10 @@ msgstr "标签显示在提示符旁边/上方。"
msgid "Last IP" msgid "Last IP"
msgstr "最后的 IP" msgstr "最后的 IP"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Last applied"
msgstr ""
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/users/RelatedUserList.ts #: src/pages/users/RelatedUserList.ts
#: src/pages/users/UserListPage.ts #: src/pages/users/UserListPage.ts
@ -3036,6 +3074,7 @@ msgstr "正在加载"
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts #: src/pages/applications/wizard/oauth/TypeOAuthCodeApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/events/TransportForm.ts #: src/pages/events/TransportForm.ts
@ -3338,6 +3377,9 @@ msgstr "我的应用"
#: src/pages/applications/ApplicationForm.ts #: src/pages/applications/ApplicationForm.ts
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/wizard/InitialApplicationWizardPage.ts #: src/pages/applications/wizard/InitialApplicationWizardPage.ts
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairForm.ts #: src/pages/crypto/CertificateKeyPairForm.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
@ -3510,6 +3552,7 @@ msgstr "Nginx (standalone)"
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
@ -3855,6 +3898,10 @@ msgstr ""
msgid "Order" msgid "Order"
msgstr "订购" msgstr "订购"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Orphaned"
msgstr ""
#: src/pages/tenants/TenantForm.ts #: src/pages/tenants/TenantForm.ts
msgid "Other global settings" msgid "Other global settings"
msgstr "其他全局设置" msgstr "其他全局设置"
@ -3981,6 +4028,7 @@ msgstr "密码:屏蔽输入,密码根据来源进行验证。策略仍需应
msgid "Passwordless flow" msgid "Passwordless flow"
msgstr "无密码流" msgstr "无密码流"
#: src/pages/blueprints/BlueprintForm.ts
#: src/pages/users/UserForm.ts #: src/pages/users/UserForm.ts
msgid "Path" msgid "Path"
msgstr "" msgstr ""
@ -3996,6 +4044,10 @@ msgstr ""
msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug." msgid "Path template for users created. Use placeholders like `%(slug)s` to insert the source slug."
msgstr "" msgstr ""
#: src/elements/user/UserConsentList.ts
msgid "Permissions"
msgstr ""
#: src/pages/sources/saml/SAMLSourceForm.ts #: src/pages/sources/saml/SAMLSourceForm.ts
msgid "Persistent" msgid "Persistent"
msgstr "持久" msgstr "持久"
@ -5156,6 +5208,7 @@ msgstr "静态:静态值,按原样显示。"
msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding." msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding."
msgstr "静态拒绝流。要有效地使用此阶段,请在相应的绑定上禁用*按计划评估*。" msgstr "静态拒绝流。要有效地使用此阶段,请在相应的绑定上禁用*按计划评估*。"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Status" msgid "Status"
msgstr "状态" msgstr "状态"
@ -5183,6 +5236,7 @@ msgstr "Subject 模式"
msgid "Subject-alt name" msgid "Subject-alt name"
msgstr "替代名称" msgstr "替代名称"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Successful" msgid "Successful"
msgstr "成功" msgstr "成功"
@ -5229,6 +5283,10 @@ msgstr "已成功创建流程。"
msgid "Successfully created group." msgid "Successfully created group."
msgstr "已成功创建组。" msgstr "已成功创建组。"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully created instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully created integration." msgid "Successfully created integration."
@ -5394,6 +5452,10 @@ msgstr "已成功更新流程。"
msgid "Successfully updated group." msgid "Successfully updated group."
msgstr "已成功更新组。" msgstr "已成功更新组。"
#: src/pages/blueprints/BlueprintForm.ts
msgid "Successfully updated instance."
msgstr ""
#: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts
#: src/pages/outposts/ServiceConnectionKubernetesForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts
msgid "Successfully updated integration." msgid "Successfully updated integration."
@ -6067,6 +6129,7 @@ msgstr "不健康的 Outposts"
msgid "Unique identifier the token is referenced by." msgid "Unique identifier the token is referenced by."
msgstr "引用令牌的唯一标识符。" msgstr "引用令牌的唯一标识符。"
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Unknown" msgid "Unknown"
msgstr "未知" msgstr "未知"
@ -6088,6 +6151,7 @@ msgstr "最新!"
#: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts
#: src/pages/applications/ApplicationViewPage.ts #: src/pages/applications/ApplicationViewPage.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
#: src/pages/events/RuleListPage.ts #: src/pages/events/RuleListPage.ts
#: src/pages/events/TransportListPage.ts #: src/pages/events/TransportListPage.ts
@ -6139,6 +6203,10 @@ msgstr "更新应用程序"
msgid "Update Binding" msgid "Update Binding"
msgstr "更新绑定" msgstr "更新绑定"
#: src/pages/blueprints/BlueprintListPage.ts
msgid "Update Blueprint"
msgstr ""
#: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts
msgid "Update Certificate-Key Pair" msgid "Update Certificate-Key Pair"
msgstr "更新证书密钥对" msgstr "更新证书密钥对"
@ -6602,6 +6670,7 @@ msgstr "等待 (最短)"
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/events/RuleForm.ts #: src/pages/events/RuleForm.ts
#: src/pages/system-tasks/SystemTaskListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts
msgid "Warning" msgid "Warning"
@ -6781,6 +6850,7 @@ msgstr ""
#: src/elements/oauth/UserRefreshList.ts #: src/elements/oauth/UserRefreshList.ts
#: src/elements/user/UserDevicesList.ts #: src/elements/user/UserDevicesList.ts
#: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/applications/ApplicationCheckAccessForm.ts
#: src/pages/blueprints/BlueprintListPage.ts
#: src/pages/groups/GroupListPage.ts #: src/pages/groups/GroupListPage.ts
#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/MemberSelectModal.ts
#: src/pages/groups/RelatedGroupList.ts #: src/pages/groups/RelatedGroupList.ts

View File

@ -14,10 +14,10 @@ The generated files are stored in `/api` in the root of the repository.
## Building the Web Client ## Building the Web Client
The web client is used by the web-interface and web-FlowExecutor to communicate with authentik. To build the client, run `make gen-client-web`. The web client is used by the web-interface and web-FlowExecutor to communicate with authentik. To build the client, run `make gen-client-ts`.
Since the client is normally distributed as an npm package, running `make gen-client-web` will overwrite the locally installed client with the newly built one. Since the client is normally distributed as an npm package, running `make gen-client-ts` will overwrite the locally installed client with the newly built one.
:::warning :::warning
Running `npm i` in the `/web` folder after using `make gen-client-web` will overwrite the custom client and revert to the upstream client. Running `npm i` in the `/web` folder after using `make gen-client-ts` will overwrite the custom client and revert to the upstream client.
::: :::

View File

@ -0,0 +1,27 @@
---
title: Export
---
## Global export
:::info
Requires authentik 2022.8.2
:::
To migrate existing configurations to blueprints, run `ak export_blueprint` within any authentik Worker container. This will output a blueprint for most currently created objects. Some objects will not be exported as they might have dependencies on other things.
Exported blueprints don't use any of the YAML Tags, they just contain a list of entries as they are in the database.
Note that fields which are write-only (for example, OAuth Provider's Secret Key) will not be added to the blueprint, as the serialisation logic from the API is used for blueprints.
Additionally, default values will be skipped and not added to the blueprint.
## Flow exports
Instead of exporting everything from a single instance, there's also the option to export a single flow with it's attached stages, policies and other objects.
This export can be triggered via the API or the Web UI by clicking the download button in the flow list.
## Cleaning up
Exports from either method will contain a (potentially) long list of objects, all with hardcoded primary keys and now ability for templating/instantiation. This is because currently, authentik does not check which primary keys are used where. It is assumed that for most exports, there'll be some manual changes done regardless, to filter out unwanted objects, adjust properties, etc.

View File

@ -0,0 +1,66 @@
---
title: Example
---
This is one of the default packaged blueprints to create the default authentication flow.
```yaml
version: 1
metadata:
name: Default - Authentication flow
entries:
# Order of entries is important when using !KeyOf, as tags are evaluated in order they are in
# the document
- attrs:
# Only options that are required should be set here. Default values should not be stated
# here, as they will prevent anyone from overwriting the value
designation: authentication
name: Welcome to authentik!
title: Welcome to authentik!
identifiers:
slug: default-authentication-flow
model: authentik_flows.flow
id: flow
- attrs:
configure_flow:
!Find [authentik_flows.flow, [slug, default-password-change]]
identifiers:
name: default-authentication-password
id: default-authentication-password
model: authentik_stages_password.passwordstage
- identifiers:
name: default-authentication-mfa-validation
# If we're fine with all defaults, `attrs` can be omitted
id: default-authentication-mfa-validation
model: authentik_stages_authenticator_validate.authenticatorvalidatestage
- identifiers:
name: default-authentication-identification
id: default-authentication-identification
model: authentik_stages_identification.identificationstage
- attrs:
session_duration: seconds=0
identifiers:
name: default-authentication-login
id: default-authentication-login
model: authentik_stages_user_login.userloginstage
- identifiers:
order: 10
stage: !KeyOf default-authentication-identification
target: !KeyOf flow
model: authentik_flows.flowstagebinding
- identifiers:
order: 20
stage: !KeyOf default-authentication-password
target: !KeyOf flow
model: authentik_flows.flowstagebinding
- identifiers:
order: 30
stage: !KeyOf default-authentication-mfa-validation
target: !KeyOf flow
model: authentik_flows.flowstagebinding
- identifiers:
order: 100
stage: !KeyOf default-authentication-login
target: !KeyOf flow
model: authentik_flows.flowstagebinding
```

View File

@ -1,32 +1,7 @@
---
title: Overview
---
An outpost is a single deployment of a authentik component, which can be deployed in a completely separate environment. Currently, Proxy Provider and LDAP are supported as outposts.
![](outposts.png)
Upon creation, a service account and a token is generated. The service account only has permissions to read the outpost and provider configuration. This token is used by the Outpost to connect to authentik.
authentik can manage the deployment, updating and general lifecycle of an Outpost. To communicate with the underlying platforms on which the outpost is deployed, authentik has several built-in integrations.
- If you've deployed authentik on docker-compose, authentik automatically creates an integration for the local docker socket (See [Docker](./integrations/docker.md)).
- If you've deployed authentik on Kubernetes, with `kubernetesIntegration` set to true (default), authentik automatically creates an integrations for the local Kubernetes Cluster (See [Kubernetes](./integrations/kubernetes.md)).
To deploy an outpost with these integrations, simply select them during the creation of an Outpost. A background task is started, which creates the container/deployment. You can see that Status on the System Tasks page.
To deploy an outpost manually, see:
- [Kubernetes](./manual-deploy-kubernetes.md)
- [docker-compose](./manual-deploy-docker-compose.md)
## Configuration
Outposts fetch their configuration from authentik. Below are all the options you can set, and how they influence the outpost.
```yaml ```yaml
# Log level that the outpost will set # Log level that the outpost will set
# Allowed levels: trace, debug, info, warning, error # Allowed levels: trace, debug, info, warning, error
# Applies to: non-embedded
log_level: debug log_level: debug
######################################## ########################################
# The settings below are only relevant when using a managed outpost # The settings below are only relevant when using a managed outpost
@ -36,27 +11,33 @@ authentik_host: https://authentik.tld/
# Disable SSL Validation for the authentik connection # Disable SSL Validation for the authentik connection
authentik_host_insecure: false authentik_host_insecure: false
# Optionally specify a different URL used for user-facing interactions # Optionally specify a different URL used for user-facing interactions
# Applies to: proxy outposts
authentik_host_browser: authentik_host_browser:
# Template used for objects created (deployments/containers, services, secrets, etc) # Template used for objects created (deployments/containers, services, secrets, etc)
object_naming_template: ak-outpost-%(name)s object_naming_template: ak-outpost-%(name)s
# Use a specific docker image for this outpost rather than the default. This also applies to Kubernetes # Use a specific docker image for this outpost rather than the default. This also applies to Kubernetes
# outposts. # outposts.
# Applies to: non-embedded
container_image: container_image:
######################################## ########################################
# Docker outpost specific settings # Docker outpost specific settings
######################################## ########################################
# Network the outpost container should be connected to # Network the outpost container should be connected to
# Applies to: non-embedded
docker_network: null docker_network: null
# Optionally disable mapping of ports to outpost container, may be useful when using docker networks # Optionally disable mapping of ports to outpost container, may be useful when using docker networks
# (Available with 2021.9.4+) # (Available with 2021.9.4+)
# Applies to: non-embedded
docker_map_ports: true docker_map_ports: true
# Optionally additional labels for docker containers # Optionally additional labels for docker containers
# (Available with 2022.1.2) # (Available with 2022.1.2)
# Applies to: non-embedded
docker_labels: null docker_labels: null
######################################## ########################################
# Kubernetes outpost specific settings # Kubernetes outpost specific settings
######################################## ########################################
# Replica count for the deployment of the outpost # Replica count for the deployment of the outpost
# Applies to: non-embedded
kubernetes_replicas: 1 kubernetes_replicas: 1
# Namespace to deploy in, defaults to the same namespace authentik is deployed in (if available) # Namespace to deploy in, defaults to the same namespace authentik is deployed in (if available)
kubernetes_namespace: authentik kubernetes_namespace: authentik
@ -76,11 +57,6 @@ kubernetes_service_type: ClusterIP
kubernetes_disabled_components: [] kubernetes_disabled_components: []
# If the above docker image is in a private repository, use these secrets to pull. # If the above docker image is in a private repository, use these secrets to pull.
# NOTE: The secret must be created manually in the namespace first. # NOTE: The secret must be created manually in the namespace first.
# Applies to: non-embedded
kubernetes_image_pull_secrets: [] kubernetes_image_pull_secrets: []
``` ```
## Metrics
Each authentik outpost has a Prometheus metrics endpoint accessible under port `:9300/metrics`. This endpoint is not mapped via docker, as the endpoint doesn't have any authentication.
For the embedded outpost, the metrics of the outpost and the metrics of the core authentik server are both returned under the same endpoint.

View File

@ -12,15 +12,19 @@ The embedded outpost cannot be disabled, if it doesn't make sense to use it in y
### Configuration ### Configuration
Since the outpost uses OAuth2, there is some configuration required. Since authentik doesn't know it's own "primary" URL, there might be some configuration required.
On a fresh authentik install, your Outpost list will look like this: By default, when opening the admin dashboard on a fresh install, authentik will automatically configure the outpost to use the same URL as was used to access authentik.
![](./stock.png) If this isn't correct, or needs to be changed, click the edit button on the right of the outpost, and set the value of `authentik_host` to the URL you want to login with.
Click the edit button on the right of the column, and set the value of `authentik_host` to the URL you want to login with.
Make sure to set it to full URL, only configuring a hostname or FQDN will not work. Make sure to set it to full URL, only configuring a hostname or FQDN will not work.
Additionally, most of the other configuration options can be used as with any other outpost, except from items which are marked as "non-embedded"
import Configuration from "../_config.md";
<Configuration />
### Routing ### Routing
Routing is handled like this: Routing is handled like this:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,35 @@
---
title: Overview
---
An outpost is a single deployment of a authentik component, which can be deployed in a completely separate environment. Currently, Proxy Provider and LDAP are supported as outposts.
![](outposts.png)
Upon creation, a service account and a token is generated. The service account only has permissions to read the outpost and provider configuration. This token is used by the Outpost to connect to authentik.
authentik can manage the deployment, updating and general lifecycle of an Outpost. To communicate with the underlying platforms on which the outpost is deployed, authentik has several built-in integrations.
- If you've deployed authentik on docker-compose, authentik automatically creates an integration for the local docker socket (See [Docker](./integrations/docker.md)).
- If you've deployed authentik on Kubernetes, with `kubernetesIntegration` set to true (default), authentik automatically creates an integrations for the local Kubernetes Cluster (See [Kubernetes](./integrations/kubernetes.md)).
To deploy an outpost with these integrations, simply select them during the creation of an Outpost. A background task is started, which creates the container/deployment. You can see that Status on the System Tasks page.
To deploy an outpost manually, see:
- [Kubernetes](./manual-deploy-kubernetes.md)
- [docker-compose](./manual-deploy-docker-compose.md)
## Configuration
Outposts fetch their configuration from authentik. Below are all the options you can set, and how they influence the outpost.
import Configuration from "./_config.md";
<Configuration />
## Metrics
Each authentik outpost has a Prometheus metrics endpoint accessible under port `:9300/metrics`. This endpoint is not mapped via docker, as the endpoint doesn't have any authentication.
For the embedded outpost, the metrics of the outpost and the metrics of the core authentik server are both returned under the same endpoint.

View File

@ -55,6 +55,22 @@ slug: "2022.8"
- stages/consent: fix for post requests (#3339) - stages/consent: fix for post requests (#3339)
- stages/prompt: fix tests for file field - stages/prompt: fix tests for file field
## Fixed in 2022.8.2
- blueprints: add generic export next to flow exporter (#3439)
- blueprints: allow for adding remote blueprints (#3435)
- blueprints: fix exporter not ignoring non-SerializerModel objects
- blueprints: fix issue in prod setups with encoding dataclasses via json
- blueprints: remove \_state from exporter blueprints
- core: fix pre-hydrated config not being escaped properly
- events: correctly handle lists for cleaning/sanitization
- internal: fix routing for requests with querystring signature to embedded outpost
- lifecycle: add worker-status command to debug worker cpu usage issues
- providers/oauth2: fix oauth2 requests being logged as unauthenticated
- sources/oauth: fix missing doseq param for updating URL query string
- web/elements: fix automatic slug not working on newly opened forms
- web/flows: simplify consent's permission handling
## Upgrading ## Upgrading
This release does not introduce any new requirements. This release does not introduce any new requirements.

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 KiB

View File

@ -0,0 +1,55 @@
---
title: GitHub Enterprise Cloud
---
<span class="badge badge--secondary">Support level: Community</span>
## What is GitHub Enterprise Cloud
From https://docs.github.com/en/enterprise-cloud@latest/admin/overview/about-github-for-enterprises
:::note
GitHub is a complete developer platform to build, scale, and deliver secure software. Businesses use our suite of products to support the entire software development lifecycle, increasing development velocity and improving code quality.
:::
:::note
GitHub Enterprise Cloud EMU (Enterprise Managed Users) are not compatible with authentik. GitHub currently only permits SAML/OIDC for EMU organizations with Okta and/or Azure AD.
:::
## Preparation
The following placeholders will be used:
- `github.com/enterprises/foo` is your GitHub organization, where `foo` is the name of your enterprise
- `authentik.company` is the FQDN of the authentik Install
Create an application in authentik and note the slug, as this will be used later. Create a SAML provider with the following parameters:
- ACS URL: `https://github.com/enterprises/foo/saml/consume`
- Audience: `https://github.com/enterprises/foo`
- Issuer: `https://github.com/enterprises/foo`
- Binding: `Post`
Under _Advanced protocol settings_, set a certificate for _Signing Certificate_.
Once the provider is created, it is advised to download the signing certificate as you will need it later.
## GitHub Configuration
Navigate to your enterprise settings by clicking your GitHub user portrait in the top right of GitHub.com, select `Your enterprises` and click `Settings` for the enterprise you wish to configure.
In the left-hand navigation, within the `Settings` section, click `Authentication security`
On this page:
- Select the `Require SAML authentication` checkbox.
- In `Sign on URL`, type `https://authentik.company/application/saml/<authentik application slug>/sso/binding/redirect/`
- For `Issuer`, type `https://github.com/enterprises/foo` or the `Audience` you set in authentik
- For `Public certificate`, paste the _full_ signing certificate into this field.
- Verify that the `Signature method` and `Digest method` match your SAML provider settings in authentik.
![Screenshot showing populated GitHub enterprise SAML settings](ghec_saml_settings.png)
Once these fields are populated, you can use the `Test SAML configuation` button to test the authentication flow. If the flow completes successfully, you will see a green tick next to the Test button.
Scroll down to hit the `Save` button below.

Binary file not shown.

After

Width:  |  Height:  |  Size: 921 KiB

View File

@ -0,0 +1,53 @@
---
title: GitHub Organization
---
<span class="badge badge--secondary">Support level: Community</span>
## What is GitHub Organizations
From https://docs.github.com/en/organizations/collaborating-with-groups-in-organizations/about-organizations
:::note
Organizations are shared accounts where businesses and open-source projects can collaborate across many projects at once, with sophisticated security and administrative features.
:::
## Preparation
The following placeholders will be used:
- `github.com/orgs/foo` is your GitHub organization, where `foo` is the name of your org
- `authentik.company` is the FQDN of the authentik Install
Create an application in authentik and note the slug, as this will be used later. Create a SAML provider with the following parameters:
- ACS URL: `https://github.com/orgs/foo/saml/consume`
- Audience: `https://github.com/orgs/foo`
- Issuer: `https://github.com/orgs/foo`
- Binding: `Post`
Under _Advanced protocol settings_, set a certificate for _Signing Certificate_.
Once the provider is created, it is advised to download the signing certificate as you will need it later.
## GitHub Configuration
Navigate to your organization settings by going to your organization page at https://github.com/foo, then click Settings.
In the left-hand navigation, scroll down to the Security section and click `Authentication security`
On this page:
- Select the `Enable SAML authentication` checkbox.
- In `sign-on URL`, type `https://authentik.company/application/saml/<authentik application slug>/sso/binding/redirect/`
- For `Issuer`, type `https://github.com/orgs/foo` or the `Audience` you set in authentik
- For `Public certificate`, paste the _full_ signing certificate into this field.
- Verify that the `Signature method` and `Digest method` match your SAML provider settings in authentik.
Once these fields are populated, you can use the `Test SAML configuation` button to test the authentication flow. If the flow completes successfully, you will see a green tick next to the Test button.
Scroll down to hit the `Save` button below.
![Screenshot showing populated GitHub organization SAML settings](ghorg_saml_settings.png)
This enables SAML as an authentication _option_. If you want to _require_ SAML for your organization, visit your SSO url at `https://github.com/orgs/foo/sso` and sign in. Once signed in, you can navigate back to the `Authentication security` page and check `Require SAML SSO authentication for all members of the foo organization.`

View File

@ -0,0 +1,50 @@
---
title: Oracle Cloud
---
<span class="badge badge--secondary">Support level: Community</span>
## What is Oracle Cloud
From https://www.oracle.com/cloud/
:::note
Oracle Cloud is the first public cloud built from the ground up to be a better cloud for every application. By rethinking core engineering and systems design for cloud computing, we created innovations that accelerate migrations, deliver better reliability and performance for all applications, and offer the complete services customers need to build innovative cloud applications.
:::
## Preparation
The following placeholders will be used:
- `authentik.company` is the FQDN of authentik.
### Step 1 - authentik
In authentik, under _Providers_, create an _OAuth2/OpenID Provider_ with these settings:
:::note
Only settings that have been modified from default have been listed.
:::
**Protocol Settings**
- Name: Oracle Cloud
- Client ID: Copy and Save this for Later
- Client Secret: Copy and Save this for later
- Signing Key: Select any available key
Create an application which uses this provider. Optionally apply access restrictions to the application using policy bindings.
- Name: Oracle Cloud
- Slug: oracle-cloud
- Provider: Oracle Cloud
### Step 2 - Oracle Cloud
In Oracle Cloud, open the top-left navigation and go to _Identity & Security_ and then _Domains_. Click on the domain of your choice. Click on _Security_ in the sidebar, then on _Identity providers_.
Create a new _Social IdP_ via the _Add IdP_ button. Set the name to authentik and fill in the client ID and secret from above.
Set the _Discovery service URL_ to `https://authentik.company/application/o/oracle-cloud/.well-known/openid-configuration` and save the IdP. The IdP has now been created but must be enabled before it can be used to login with.
Navigate to _IdP Policies_ in the sidebar and open the default policy by clicking on it. Edit the first rule within the policy. Add authentik under _Assign identity providers_. Here you can optionally also remove username-based logins, however it is recommended to not remove the option until you've verified SSO works.

View File

@ -30,7 +30,6 @@ In authentik, under _Providers_, create an _OAuth2/OpenID Provider_ with these s
**Provider Settings** **Provider Settings**
- Name: pgAdmin - Name: pgAdmin
- Client type: Confidential
- Client ID: Copy and Save this for Later - Client ID: Copy and Save this for Later
- Client Secret: Copy and Save this for later - Client Secret: Copy and Save this for later
- Redirect URIs/Origins: `http://pgadmin.company/oauth2/authorize` - Redirect URIs/Origins: `http://pgadmin.company/oauth2/authorize`

View File

@ -34,7 +34,6 @@ Only settings that have been modified from default have been listed.
**Protocol Settings** **Protocol Settings**
- Name: Portainer - Name: Portainer
- Client type: Confidential
- Client ID: Copy and Save this for Later - Client ID: Copy and Save this for Later
- Client Secret: Copy and Save this for later - Client Secret: Copy and Save this for later
- Redirect URIs/Origins: `https://port.company` - Redirect URIs/Origins: `https://port.company`

View File

@ -28,8 +28,8 @@ The following placeholders will be used:
Under _Providers_, create an OAuth2/OpenID provider with these settings: Under _Providers_, create an OAuth2/OpenID provider with these settings:
- Name: proxmox - Name: proxmox
- Client Type: Confidential
- Redirect URI: `https://proxmox.company:8006` (Note the absence of the trailing slash, and the inclusion of the webinterface port) - Redirect URI: `https://proxmox.company:8006` (Note the absence of the trailing slash, and the inclusion of the webinterface port)
- Signing Key: Select any available key
### Step 2 ### Step 2

View File

@ -34,14 +34,12 @@ Only settings that have been modified from default have been listed.
**Protocol Settings** **Protocol Settings**
- Name: RocketChat - Name: RocketChat
- Client type: Confidential
- Client ID: Copy and Save this for Later - Client ID: Copy and Save this for Later
- Client Secret: Copy and Save this for later - Client Secret: Copy and Save this for later
- Redirect URIs/Origins: - Redirect URIs/Origins:
``` ```
https://rocket.company/_oauth/authentik https://rocket.company/_oauth/authentik
``` ```
![](./rocketchat1.png) ![](./rocketchat1.png)

View File

@ -34,7 +34,6 @@ Only settings that have been modified from default have been listed.
**Protocol Settings** **Protocol Settings**
- Name: Vikunja - Name: Vikunja
- Client type: Confidential
- Client ID: Copy and Save this for Later - Client ID: Copy and Save this for Later
- Client Secret: Copy and Save this for later - Client Secret: Copy and Save this for later
- Redirect URIs/Origins: - Redirect URIs/Origins:
@ -68,7 +67,7 @@ auth:
# Take a look at the [default config file](https://github.com/go-vikunja/api/blob/main/config.yml.sample) for more information about how to configure openid authentication. # Take a look at the [default config file](https://github.com/go-vikunja/api/blob/main/config.yml.sample) for more information about how to configure openid authentication.
openid: openid:
# Enable or disable OpenID Connect authentication # Enable or disable OpenID Connect authentication
enabled: truefo enabled: true
# A list of enabled providers # A list of enabled providers
providers: providers:
# The name of the provider as it will appear in the frontend. # The name of the provider as it will appear in the frontend.

View File

@ -55,11 +55,10 @@ Under _Sources_, click _Edit_ and ensure that "authentik default Active Director
Under _Providers_, create an OAuth2/OpenID provider with these settings: Under _Providers_, create an OAuth2/OpenID provider with these settings:
- Client Type: Confidential
- JWT Algorithm: RS256
- Redirect URI: `https://vcenter.company/ui/login/oauth2/authcode` - Redirect URI: `https://vcenter.company/ui/login/oauth2/authcode`
- Sub Mode: If your Email address Schema matches your UPN, select "Based on the User's Email...", otherwise select "Based on the User's UPN...". - Sub Mode: If your Email address Schema matches your UPN, select "Based on the User's Email...", otherwise select "Based on the User's UPN...".
- Scopes: Select the Scope Mapping you've created in Step 1 - Scopes: Select the Scope Mapping you've created in Step 1
- Signing Key: Select any available key
![](./authentik_setup.png) ![](./authentik_setup.png)

View File

@ -33,8 +33,6 @@ Add a _Generic OpenID Connect / OAuth2_ strategy and note the _Callback URL / Re
In authentik, under _Providers_, create an _OAuth2/OpenID Provider_ with these settings: In authentik, under _Providers_, create an _OAuth2/OpenID Provider_ with these settings:
- Client Type: Confidential
- JWT Algorithm: RS256
- Redirect URI: The _Callback URL / Redirect URI_ you noted from the previous step. - Redirect URI: The _Callback URL / Redirect URI_ you noted from the previous step.
- Scopes: Default OAUth mappings for: OpenID, email, profile. - Scopes: Default OAUth mappings for: OpenID, email, profile.
- Signing Key: Select any available key - Signing Key: Select any available key

View File

@ -34,7 +34,6 @@ Only settings that have been modified from default have been listed.
**Protocol Settings** **Protocol Settings**
- Name: Wordpress - Name: Wordpress
- Client type: Confidential
- Client ID: Copy and Save this for Later - Client ID: Copy and Save this for Later
- Client Secret: Copy and Save this for later - Client Secret: Copy and Save this for later
- Redirect URIs/Origins: `https://wp.company/wp-admin/admin-ajax.php?action=openid-connect-authorize` - Redirect URIs/Origins: `https://wp.company/wp-admin/admin-ajax.php?action=openid-connect-authorize`

View File

@ -9,7 +9,11 @@ Allows users to authenticate using their Apple ID.
## Preparation ## Preparation
:::warning :::warning
An Apple developer account is required for this. An Apple developer account is required.
:::
:::warning
Apple mandates the use of a [registered TLD](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains), as such this source will not work with .local and other non-public TLDs.
::: :::
The following placeholders will be used: The following placeholders will be used:

View File

@ -11,7 +11,12 @@ module.exports = {
type: "doc", type: "doc",
id: "blueprints/index", id: "blueprints/index",
}, },
items: ["blueprints/v1/structure", "blueprints/v1/tags"], items: [
"blueprints/export",
"blueprints/v1/structure",
"blueprints/v1/tags",
"blueprints/v1/example",
],
}, },
{ {
type: "category", type: "category",
@ -28,7 +33,7 @@ module.exports = {
}, },
{ {
type: "category", type: "category",
label: "Setup", label: "Development",
items: [ items: [
"setup/full-dev-environment", "setup/full-dev-environment",
"setup/frontend-only-dev-environment", "setup/frontend-only-dev-environment",

View File

@ -48,7 +48,10 @@ module.exports = {
{ {
type: "category", type: "category",
label: "Cloud Providers", label: "Cloud Providers",
items: ["services/aws/index"], items: [
"services/aws/index",
"services/oracle-cloud/index",
],
}, },
{ {
type: "category", type: "category",
@ -80,13 +83,21 @@ module.exports = {
type: "category", type: "category",
label: "Developer tools", label: "Developer tools",
items: [ items: [
"services/gitea/index",
"services/gitlab/index",
"services/sentry/index", "services/sentry/index",
"services/sssd/index", "services/sssd/index",
"services/weblate/index", "services/weblate/index",
], ],
}, },
{
type: "category",
label: "Version Control Systems",
items: [
"services/gitea/index",
"services/github-enterprise-cloud/index",
"services/github-organization/index",
"services/gitlab/index",
],
},
"services/home-assistant/index", "services/home-assistant/index",
"services/node-red/index", "services/node-red/index",
"services/kimai/index", "services/kimai/index",