mirror of
https://github.com/goauthentik/authentik
synced 2026-05-07 07:32:23 +02:00
Compare commits
5 Commits
main
...
docs/invit
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
852baf045b | ||
|
|
59b3a0c9f0 | ||
|
|
e6b7b1b895 | ||
|
|
29d71e8b83 | ||
|
|
731163200a |
4
.github/actions/setup/action.yml
vendored
4
.github/actions/setup/action.yml
vendored
@@ -49,7 +49,7 @@ runs:
|
||||
if: ${{ contains(inputs.dependencies, 'python') }}
|
||||
shell: bash
|
||||
working-directory: ${{ inputs.working-directory }}
|
||||
run: uv sync --all-extras --dev --locked
|
||||
run: uv sync --all-extras --dev --frozen
|
||||
- name: Setup rust (stable)
|
||||
if: ${{ contains(inputs.dependencies, 'rust') && !contains(inputs.dependencies, 'rust-nightly') }}
|
||||
uses: actions-rust-lang/setup-rust-toolchain@2b1f5e9b395427c92ee4e3331786ca3c37afe2d7 # v1
|
||||
@@ -64,7 +64,7 @@ runs:
|
||||
rustflags: ""
|
||||
- name: Setup rust dependencies
|
||||
if: ${{ contains(inputs.dependencies, 'rust') }}
|
||||
uses: taiki-e/install-action@db5fb34fa772531a3ece57ca434f579eb334e0fb # v2
|
||||
uses: taiki-e/install-action@b5fddbb5361bce8a06fb168c9d403a6cc552b084 # v2
|
||||
with:
|
||||
tool: cargo-deny cargo-machete cargo-llvm-cov nextest
|
||||
- name: Setup node (web)
|
||||
|
||||
50
Cargo.lock
generated
50
Cargo.lock
generated
@@ -2057,7 +2057,7 @@ dependencies = [
|
||||
"hashbrown 0.16.1",
|
||||
"metrics",
|
||||
"quanta",
|
||||
"rand 0.9.4",
|
||||
"rand 0.9.2",
|
||||
"rand_xoshiro",
|
||||
"sketches-ddsketch",
|
||||
]
|
||||
@@ -2744,7 +2744,7 @@ dependencies = [
|
||||
"bytes",
|
||||
"getrandom 0.3.4",
|
||||
"lru-slab",
|
||||
"rand 0.9.4",
|
||||
"rand 0.9.2",
|
||||
"ring",
|
||||
"rustc-hash",
|
||||
"rustls",
|
||||
@@ -2804,9 +2804,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.9.4"
|
||||
version = "0.9.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
|
||||
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
|
||||
dependencies = [
|
||||
"rand_chacha 0.9.0",
|
||||
"rand_core 0.9.5",
|
||||
@@ -3203,9 +3203,9 @@ checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
|
||||
|
||||
[[package]]
|
||||
name = "sentry"
|
||||
version = "0.48.0"
|
||||
version = "0.47.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e8ac94aab850a23d7507307cc505332ed2bafd36c65930dfc5c43610f9e9b477"
|
||||
checksum = "eb25f439f97d26fea01d717fa626167ceffcd981addaa670001e70505b72acbb"
|
||||
dependencies = [
|
||||
"cfg_aliases",
|
||||
"httpdate",
|
||||
@@ -3224,9 +3224,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sentry-backtrace"
|
||||
version = "0.48.1"
|
||||
version = "0.47.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc84c325ace9ca2388e510fe7d6672b5d60cd8b3bd0eb4bb4ee8314c323cd686"
|
||||
checksum = "46a8c2c1bd5c1f735e84f28b48e7d72efcaafc362b7541bc8253e60e8fcdffc6"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"regex",
|
||||
@@ -3235,9 +3235,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sentry-contexts"
|
||||
version = "0.48.1"
|
||||
version = "0.47.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "896c1ab62dbfe1746fb262bbf72e6feb2fb9dfb2c14709077bf71beb532e44b2"
|
||||
checksum = "9b88a90baa654d7f0e1f4b667f6b434293d9f72c71bef16b197c76af5b7d5803"
|
||||
dependencies = [
|
||||
"hostname",
|
||||
"libc",
|
||||
@@ -3249,11 +3249,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sentry-core"
|
||||
version = "0.48.1"
|
||||
version = "0.47.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d5f5abf20c42cb1593ec1638976e2647da55f79bccac956444c1707b6cce259a"
|
||||
checksum = "0ac170a5bba8bec6e3339c90432569d89641fa7a3d3e4f44987d24f0762e6adf"
|
||||
dependencies = [
|
||||
"rand 0.9.4",
|
||||
"rand 0.9.2",
|
||||
"sentry-types",
|
||||
"serde",
|
||||
"serde_json",
|
||||
@@ -3262,9 +3262,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sentry-debug-images"
|
||||
version = "0.48.1"
|
||||
version = "0.47.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4b88bbe6a760d5724bb40689827e82e8db1e275947df2c59abe171bfc30bb671"
|
||||
checksum = "dd9646a972b57896d4a92ed200cf76139f8e30b3cfd03b6662ae59926d26633c"
|
||||
dependencies = [
|
||||
"findshlibs",
|
||||
"sentry-core",
|
||||
@@ -3272,9 +3272,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sentry-panic"
|
||||
version = "0.48.1"
|
||||
version = "0.47.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0260dcb52562b6a79ae7702312a26dba94b79fb5baee7301087529e5ca4e872e"
|
||||
checksum = "6127d3d304ba5ce0409401e85aae538e303a569f8dbb031bf64f9ba0f7174346"
|
||||
dependencies = [
|
||||
"sentry-backtrace",
|
||||
"sentry-core",
|
||||
@@ -3282,9 +3282,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sentry-tower"
|
||||
version = "0.48.1"
|
||||
version = "0.47.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d669616d5d5279b5712febfc80c343acc3695e499de0d101ed70fceacadf37f2"
|
||||
checksum = "61c5253dc4ad89863a866b93aeaaac1c9d60f2f774663b5024afe2d57e0a101c"
|
||||
dependencies = [
|
||||
"sentry-core",
|
||||
"tower-layer",
|
||||
@@ -3293,9 +3293,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sentry-tracing"
|
||||
version = "0.48.1"
|
||||
version = "0.47.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1c035f3a0a8671ae1a231c5b457abb68b71acba2bf3054dab2a09a9d4ea487e"
|
||||
checksum = "27701acc51e68db5281802b709010395bfcbcb128b1d0a4e5873680d3b47ff0c"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"sentry-backtrace",
|
||||
@@ -3306,13 +3306,13 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sentry-types"
|
||||
version = "0.48.1"
|
||||
version = "0.47.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "82d8e81058ec155992191f61c7b29bfa7b2cf12012131e7cdc0678020898a7c9"
|
||||
checksum = "56780cb5597d676bf22e6c11d1f062eb4def46390ea3bfb047bcbcf7dfd19bdb"
|
||||
dependencies = [
|
||||
"debugid",
|
||||
"hex",
|
||||
"rand 0.9.4",
|
||||
"rand 0.9.2",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 2.0.18",
|
||||
@@ -4214,7 +4214,7 @@ dependencies = [
|
||||
"http",
|
||||
"httparse",
|
||||
"log",
|
||||
"rand 0.9.4",
|
||||
"rand 0.9.2",
|
||||
"sha1",
|
||||
"thiserror 2.0.18",
|
||||
]
|
||||
|
||||
@@ -67,7 +67,7 @@ reqwest-middleware = { version = "= 0.5.1", features = [
|
||||
"rustls",
|
||||
] }
|
||||
rustls = { version = "= 0.23.40", features = ["fips"] }
|
||||
sentry = { version = "= 0.48.0", default-features = false, features = [
|
||||
sentry = { version = "= 0.47.0", default-features = false, features = [
|
||||
"backtrace",
|
||||
"contexts",
|
||||
"debug-images",
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
from django.db.models import F, QuerySet
|
||||
from rest_framework.filters import OrderingFilter
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.views import APIView
|
||||
|
||||
|
||||
class NullsAwareOrderingFilter(OrderingFilter):
|
||||
"""OrderingFilter that sorts NULL values consistently.
|
||||
|
||||
For any nullable field, NULLs are treated as the smallest possible value:
|
||||
- ascending → NULLs appear first (nulls_first=True)
|
||||
- descending → NULLs appear last (nulls_last=True)
|
||||
"""
|
||||
|
||||
def _nullable_field_names(self, queryset: QuerySet) -> set[str]:
|
||||
return {f.name for f in queryset.model._meta.get_fields() if hasattr(f, "null") and f.null}
|
||||
|
||||
def filter_queryset(self, request: Request, queryset: QuerySet, view: APIView):
|
||||
queryset = super().filter_queryset(request, queryset, view)
|
||||
ordering = queryset.query.order_by
|
||||
if not ordering:
|
||||
return queryset
|
||||
nullable = self._nullable_field_names(queryset)
|
||||
new_ordering = []
|
||||
changed = False
|
||||
for term in ordering:
|
||||
name = term.lstrip("-")
|
||||
if name in nullable:
|
||||
changed = True
|
||||
if term.startswith("-"):
|
||||
new_ordering.append(F(name).desc(nulls_last=True))
|
||||
else:
|
||||
new_ordering.append(F(name).asc(nulls_first=True))
|
||||
else:
|
||||
new_ordering.append(term)
|
||||
return queryset.order_by(*new_ordering) if changed else queryset
|
||||
@@ -1,59 +0,0 @@
|
||||
from django.db.models import OrderBy
|
||||
from django.test import TestCase
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.test import APIRequestFactory
|
||||
|
||||
from authentik.api.ordering import NullsAwareOrderingFilter
|
||||
from authentik.core.models import Token, User
|
||||
|
||||
|
||||
class MockView:
|
||||
ordering_fields = "__all__"
|
||||
ordering = None
|
||||
|
||||
|
||||
class TestNullsAwareOrderingFilter(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.filter = NullsAwareOrderingFilter()
|
||||
self.view = MockView()
|
||||
factory = APIRequestFactory()
|
||||
self._req = lambda ordering: Request(factory.get("/", {"ordering": ordering}))
|
||||
|
||||
def _order_by(self, model, ordering):
|
||||
qs = model.objects.all()
|
||||
return self.filter.filter_queryset(self._req(ordering), qs, self.view).query.order_by
|
||||
|
||||
def test_nullable_asc_nulls_first(self):
|
||||
"""Ascending sort on a nullable field rewrites to nulls_first=True."""
|
||||
(expr,) = self._order_by(User, "last_login")
|
||||
self.assertIsInstance(expr, OrderBy)
|
||||
self.assertFalse(expr.descending)
|
||||
self.assertTrue(expr.nulls_first)
|
||||
|
||||
def test_nullable_desc_nulls_last(self):
|
||||
"""Descending sort on a nullable field rewrites to nulls_last=True."""
|
||||
(expr,) = self._order_by(User, "-last_login")
|
||||
self.assertIsInstance(expr, OrderBy)
|
||||
self.assertTrue(expr.descending)
|
||||
self.assertTrue(expr.nulls_last)
|
||||
|
||||
def test_non_nullable_passes_through(self):
|
||||
"""Non-nullable fields are left as plain string terms."""
|
||||
(expr,) = self._order_by(User, "username")
|
||||
self.assertEqual(expr, "username")
|
||||
|
||||
def test_mixed_ordering(self):
|
||||
"""Only nullable terms are rewritten; non-nullable terms pass through unchanged."""
|
||||
first, second = self._order_by(User, "username,-last_login")
|
||||
self.assertEqual(first, "username")
|
||||
self.assertIsInstance(second, OrderBy)
|
||||
self.assertTrue(second.descending)
|
||||
self.assertTrue(second.nulls_last)
|
||||
|
||||
def test_expires_nullable(self):
|
||||
"""expires on ExpiringModel is nullable and is rewritten correctly."""
|
||||
(expr,) = self._order_by(Token, "-expires")
|
||||
self.assertIsInstance(expr, OrderBy)
|
||||
self.assertTrue(expr.descending)
|
||||
self.assertTrue(expr.nulls_last)
|
||||
@@ -221,7 +221,7 @@ REST_FRAMEWORK = {
|
||||
"authentik.api.search.ql.QLSearch",
|
||||
"authentik.rbac.filters.ObjectFilter",
|
||||
"django_filters.rest_framework.DjangoFilterBackend",
|
||||
"authentik.api.ordering.NullsAwareOrderingFilter",
|
||||
"rest_framework.filters.OrderingFilter",
|
||||
],
|
||||
"DEFAULT_PERMISSION_CLASSES": ("authentik.rbac.permissions.ObjectPermissions",),
|
||||
"DEFAULT_AUTHENTICATION_CLASSES": (
|
||||
|
||||
@@ -7,7 +7,7 @@ from dramatiq.broker import Broker, MessageProxy, get_broker
|
||||
from dramatiq.middleware.middleware import Middleware
|
||||
from dramatiq.middleware.retries import Retries
|
||||
from dramatiq.results.middleware import Results
|
||||
from dramatiq.worker import ConsumerThread, Worker, WorkerThread
|
||||
from dramatiq.worker import Worker, _ConsumerThread, _WorkerThread
|
||||
|
||||
from authentik.tasks.broker import PostgresBroker
|
||||
|
||||
@@ -20,7 +20,7 @@ class TestWorker(Worker):
|
||||
self.worker_id = 1000
|
||||
self.work_queue = PriorityQueue()
|
||||
self.consumers = {
|
||||
TESTING_QUEUE: ConsumerThread(
|
||||
TESTING_QUEUE: _ConsumerThread(
|
||||
broker=self.broker,
|
||||
queue_name=TESTING_QUEUE,
|
||||
prefetch=2,
|
||||
@@ -33,7 +33,7 @@ class TestWorker(Worker):
|
||||
prefetch=2,
|
||||
timeout=1,
|
||||
)
|
||||
self._worker = WorkerThread(
|
||||
self._worker = _WorkerThread(
|
||||
broker=self.broker,
|
||||
consumers=self.consumers,
|
||||
work_queue=self.work_queue,
|
||||
@@ -78,18 +78,17 @@ def use_test_broker():
|
||||
actor.broker = broker
|
||||
actor.broker.declare_actor(actor)
|
||||
|
||||
for middleware_class_path, middleware_kwargs in Conf().middlewares:
|
||||
middleware_class = import_string(middleware_class_path)
|
||||
if issubclass(middleware_class, Results):
|
||||
middleware_kwargs["backend"] = import_string(Conf().result_backend)(
|
||||
*Conf().result_backend_args,
|
||||
**Conf().result_backend_kwargs,
|
||||
)
|
||||
middleware: Middleware = middleware_class(
|
||||
for middleware_class, middleware_kwargs in Conf().middlewares:
|
||||
middleware: Middleware = import_string(middleware_class)(
|
||||
**middleware_kwargs,
|
||||
)
|
||||
if isinstance(middleware, Retries):
|
||||
middleware.max_retries = 0
|
||||
if isinstance(middleware, Results):
|
||||
middleware.backend = import_string(Conf().result_backend)(
|
||||
*Conf().result_backend_args,
|
||||
**Conf().result_backend_kwargs,
|
||||
)
|
||||
broker.add_middleware(middleware)
|
||||
|
||||
broker.start()
|
||||
|
||||
@@ -79,7 +79,7 @@ function prepare_debug {
|
||||
apt-get update
|
||||
apt-get install -y --no-install-recommends krb5-kdc krb5-user krb5-admin-server libkrb5-dev gcc
|
||||
source "${VENV_PATH}/bin/activate"
|
||||
uv sync --active --locked
|
||||
uv sync --active --frozen
|
||||
touch /unittest.xml
|
||||
chown authentik:authentik /unittest.xml
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ RUN --mount=type=bind,target=pyproject.toml,src=pyproject.toml \
|
||||
--mount=type=bind,target=packages/django-postgres-cache,src=packages/django-postgres-cache \
|
||||
--mount=type=bind,target=rust-toolchain.toml,src=rust-toolchain.toml \
|
||||
--mount=type=cache,id=uv-python-deps-$TARGETARCH$TARGETVARIANT,target=/root/.cache/uv \
|
||||
uv sync --locked --no-install-project --no-dev
|
||||
uv sync --frozen --no-install-project --no-dev
|
||||
|
||||
# Stage: Run
|
||||
FROM python-base AS final-image
|
||||
|
||||
@@ -28,7 +28,12 @@ class HttpHandler(BaseHTTPRequestHandler):
|
||||
_ = db_conn.cursor()
|
||||
|
||||
def do_GET(self):
|
||||
from django.db import DatabaseError, InterfaceError, OperationalError, connections
|
||||
from django.db import (
|
||||
DatabaseError,
|
||||
InterfaceError,
|
||||
OperationalError,
|
||||
connections,
|
||||
)
|
||||
from psycopg.errors import AdminShutdown
|
||||
|
||||
from authentik.root.monitoring import monitoring_set
|
||||
@@ -37,6 +42,7 @@ class HttpHandler(BaseHTTPRequestHandler):
|
||||
AdminShutdown,
|
||||
InterfaceError,
|
||||
DatabaseError,
|
||||
ConnectionError,
|
||||
OperationalError,
|
||||
)
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-05-06 00:27+0000\n"
|
||||
"POT-Creation-Date: 2026-05-01 03:47+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -101,14 +101,6 @@ msgstr ""
|
||||
msgid "Blueprint file does not exist"
|
||||
msgstr ""
|
||||
|
||||
#: authentik/blueprints/api.py
|
||||
msgid "Context must be valid JSON"
|
||||
msgstr ""
|
||||
|
||||
#: authentik/blueprints/api.py
|
||||
msgid "Context must be a JSON object"
|
||||
msgstr ""
|
||||
|
||||
#: authentik/blueprints/api.py
|
||||
msgid "Failed to validate blueprint"
|
||||
msgstr ""
|
||||
|
||||
3
packages/client-ts/package.json
generated
3
packages/client-ts/package.json
generated
@@ -8,8 +8,7 @@
|
||||
"url": "https://github.com/goauthentik/authentik.git"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "tsc -b --clean tsconfig.json tsconfig.esm.json",
|
||||
"build": "npm run clean && tsc -b tsconfig.json tsconfig.esm.json",
|
||||
"build": "tsc && tsc -p tsconfig.esm.json",
|
||||
"prepare": "npm run build"
|
||||
},
|
||||
"main": "./dist/index.js",
|
||||
|
||||
2
packages/client-ts/templates/tsconfig.mustache
generated
2
packages/client-ts/templates/tsconfig.mustache
generated
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/tsconfig",
|
||||
"compilerOptions": {
|
||||
"composite": true,
|
||||
"isolatedModules": true,
|
||||
"incremental": true,
|
||||
"rootDir": "src",
|
||||
"strict": true,
|
||||
"newLine": "lf",
|
||||
|
||||
2
packages/client-ts/tsconfig.json
generated
2
packages/client-ts/tsconfig.json
generated
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/tsconfig",
|
||||
"compilerOptions": {
|
||||
"composite": true,
|
||||
"isolatedModules": true,
|
||||
"incremental": true,
|
||||
"rootDir": "src",
|
||||
"strict": true,
|
||||
"newLine": "lf",
|
||||
|
||||
@@ -32,17 +32,16 @@ class DjangoDramatiqPostgres(AppConfig):
|
||||
middleware=[],
|
||||
)
|
||||
|
||||
for middleware_class_path, middleware_kwargs in Conf().middlewares:
|
||||
middleware_class = import_string(middleware_class_path)
|
||||
if issubclass(middleware_class, Results):
|
||||
middleware_kwargs["backend"] = import_string(Conf().result_backend)(
|
||||
for middleware_class, middleware_kwargs in Conf().middlewares:
|
||||
middleware: dramatiq.middleware.middleware.Middleware = import_string(middleware_class)(
|
||||
**middleware_kwargs,
|
||||
)
|
||||
if isinstance(middleware, Results):
|
||||
middleware.backend = import_string(Conf().result_backend)(
|
||||
*Conf().result_backend_args,
|
||||
**Conf().result_backend_kwargs,
|
||||
)
|
||||
middleware: dramatiq.middleware.middleware.Middleware = middleware_class(
|
||||
**middleware_kwargs,
|
||||
)
|
||||
broker.add_middleware(middleware)
|
||||
broker.add_middleware(middleware) # type: ignore[no-untyped-call]
|
||||
|
||||
dramatiq.set_broker(broker)
|
||||
|
||||
|
||||
@@ -23,9 +23,11 @@ from django.utils.functional import cached_property
|
||||
from django.utils.module_loading import import_string
|
||||
from dramatiq.broker import Broker, Consumer, MessageProxy
|
||||
from dramatiq.common import compute_backoff, current_millis, dq_name, q_name, xq_name
|
||||
from dramatiq.errors import BrokerConnectionError, QueueJoinTimeout
|
||||
from dramatiq.errors import ConnectionError, QueueJoinTimeout
|
||||
from dramatiq.message import Message
|
||||
from dramatiq.middleware import Middleware
|
||||
from dramatiq.middleware import (
|
||||
Middleware,
|
||||
)
|
||||
from pglock.core import _cast_lock_id
|
||||
from psycopg import sql
|
||||
from psycopg.errors import AdminShutdown
|
||||
@@ -44,6 +46,7 @@ DATABASE_ERRORS = (
|
||||
AdminShutdown,
|
||||
InterfaceError,
|
||||
DatabaseError,
|
||||
ConnectionError,
|
||||
OperationalError,
|
||||
)
|
||||
|
||||
@@ -52,7 +55,7 @@ def channel_name(queue_name: str, identifier: ChannelIdentifier) -> str:
|
||||
return f"{CHANNEL_PREFIX}.{queue_name}.{identifier.value}"
|
||||
|
||||
|
||||
def raise_broker_connection_error(func: Callable[P, R]) -> Callable[P, R]: # noqa: UP047
|
||||
def raise_connection_error(func: Callable[P, R]) -> Callable[P, R]: # noqa: UP047
|
||||
@functools.wraps(func)
|
||||
def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
|
||||
try:
|
||||
@@ -63,13 +66,13 @@ def raise_broker_connection_error(func: Callable[P, R]) -> Callable[P, R]: # no
|
||||
connections.close_all()
|
||||
except DATABASE_ERRORS:
|
||||
pass
|
||||
raise BrokerConnectionError(str(exc)) from exc # type: ignore[no-untyped-call]
|
||||
raise ConnectionError(str(exc)) from exc # type: ignore[no-untyped-call]
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
class PostgresBroker(Broker):
|
||||
queues: set[str]
|
||||
queues: set[str] # type: ignore[assignment]
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
@@ -78,7 +81,7 @@ class PostgresBroker(Broker):
|
||||
db_alias: str = DEFAULT_DB_ALIAS,
|
||||
**kwargs: Any,
|
||||
) -> None:
|
||||
super().__init__(*args, middleware=[], **kwargs) # type: ignore[misc]
|
||||
super().__init__(*args, middleware=[], **kwargs) # type: ignore[no-untyped-call,misc]
|
||||
self.logger = get_logger(__name__, type(self))
|
||||
|
||||
self.queues = set()
|
||||
@@ -119,10 +122,10 @@ class PostgresBroker(Broker):
|
||||
|
||||
def declare_queue(self, queue_name: str) -> None:
|
||||
if queue_name not in self.queues:
|
||||
self.emit_before("declare_queue", queue_name)
|
||||
self.emit_before("declare_queue", queue_name) # type: ignore[no-untyped-call]
|
||||
self.queues.add(queue_name)
|
||||
# Nothing more to do, all queues are in the same table
|
||||
self.emit_after("declare_queue", queue_name)
|
||||
self.emit_after("declare_queue", queue_name) # type: ignore[no-untyped-call]
|
||||
|
||||
def model_defaults(self, message: Message[Any]) -> dict[str, Any]:
|
||||
eta = None
|
||||
@@ -138,7 +141,7 @@ class PostgresBroker(Broker):
|
||||
}
|
||||
|
||||
@tenacity.retry(
|
||||
retry=tenacity.retry_if_exception_type(BrokerConnectionError),
|
||||
retry=tenacity.retry_if_exception_type(ConnectionError),
|
||||
reraise=True,
|
||||
wait=tenacity.wait_random_exponential(multiplier=1, max=5),
|
||||
stop=tenacity.stop_after_attempt(3),
|
||||
@@ -146,11 +149,11 @@ class PostgresBroker(Broker):
|
||||
cast(logging.Logger, logger), logging.INFO, exc_info=True
|
||||
),
|
||||
)
|
||||
@raise_broker_connection_error
|
||||
@raise_connection_error
|
||||
def enqueue(self, message: Message[Any], *, delay: int | None = None) -> Message[Any]:
|
||||
queue_name = q_name(message.queue_name)
|
||||
queue_name = q_name(message.queue_name) # type: ignore[no-untyped-call]
|
||||
if delay:
|
||||
message_eta = current_millis() + delay
|
||||
message_eta = current_millis() + delay # type: ignore[no-untyped-call]
|
||||
message.options["eta"] = message_eta
|
||||
|
||||
self.declare_queue(queue_name)
|
||||
@@ -160,7 +163,7 @@ class PostgresBroker(Broker):
|
||||
|
||||
message.options["model_defaults"] = self.model_defaults(message)
|
||||
message.options["model_create_defaults"] = {}
|
||||
self.emit_before("enqueue", message, delay)
|
||||
self.emit_before("enqueue", message, delay) # type: ignore[no-untyped-call]
|
||||
|
||||
with transaction.atomic(using=self.db_alias):
|
||||
query = {
|
||||
@@ -182,7 +185,7 @@ class PostgresBroker(Broker):
|
||||
message.options["task"] = task
|
||||
message.options["task_created"] = created
|
||||
|
||||
self.emit_after("enqueue", message, delay)
|
||||
self.emit_after("enqueue", message, delay) # type: ignore[no-untyped-call]
|
||||
return message
|
||||
|
||||
def get_declared_queues(self) -> set[str]:
|
||||
@@ -190,7 +193,7 @@ class PostgresBroker(Broker):
|
||||
|
||||
def flush(self, queue_name: str) -> None:
|
||||
self.query_set.filter(
|
||||
queue_name__in=(queue_name, dq_name(queue_name), xq_name(queue_name))
|
||||
queue_name__in=(queue_name, dq_name(queue_name), xq_name(queue_name)) # type: ignore[no-untyped-call]
|
||||
).delete()
|
||||
|
||||
def flush_all(self) -> None:
|
||||
@@ -372,7 +375,7 @@ class _PostgresConsumer(Consumer):
|
||||
self.in_processing.add(str(message_id))
|
||||
return message
|
||||
|
||||
@raise_broker_connection_error
|
||||
@raise_connection_error
|
||||
def __next__(self) -> MessageProxy | None:
|
||||
# This method is called every second
|
||||
|
||||
@@ -392,7 +395,7 @@ class _PostgresConsumer(Consumer):
|
||||
if processing >= self.prefetch:
|
||||
# If we have too many messages already processing, wait and don't consume a message
|
||||
# straight away, other workers will be faster.
|
||||
self.misses, backoff_ms = compute_backoff(self.misses, max_backoff=1000)
|
||||
self.misses, backoff_ms = compute_backoff(self.misses, max_backoff=1000) # type: ignore[no-untyped-call]
|
||||
self.logger.debug(
|
||||
"Too many messages in processing, Sleeping",
|
||||
processing=processing,
|
||||
@@ -417,7 +420,7 @@ class _PostgresConsumer(Consumer):
|
||||
break
|
||||
message = self._consume_one(str(message_id))
|
||||
if message is not None:
|
||||
return MessageProxy(message)
|
||||
return MessageProxy(message) # type: ignore[no-untyped-call]
|
||||
else:
|
||||
self.logger.debug("Message already consumed. Skipping.", message_id=message_id)
|
||||
continue
|
||||
@@ -441,7 +444,7 @@ class _PostgresConsumer(Consumer):
|
||||
self.to_unlock.add(str(message_id))
|
||||
return False
|
||||
|
||||
def _post_process_message(self, message: MessageProxy, state: TaskState) -> None:
|
||||
def _post_process_message(self, message: Message[Any], state: TaskState) -> None:
|
||||
self.logger.debug("Post-processing message", message=message.message_id, state=state)
|
||||
try:
|
||||
self.in_processing.remove(str(message.message_id))
|
||||
@@ -463,16 +466,16 @@ class _PostgresConsumer(Consumer):
|
||||
)
|
||||
message.options["task"] = task
|
||||
|
||||
@raise_broker_connection_error
|
||||
def ack(self, message: MessageProxy) -> None:
|
||||
@raise_connection_error
|
||||
def ack(self, message: Message[Any]) -> None:
|
||||
self._post_process_message(message, TaskState.DONE)
|
||||
|
||||
@raise_broker_connection_error
|
||||
def nack(self, message: MessageProxy) -> None:
|
||||
@raise_connection_error
|
||||
def nack(self, message: Message[Any]) -> None:
|
||||
self._post_process_message(message, TaskState.REJECTED)
|
||||
|
||||
@raise_broker_connection_error
|
||||
def requeue(self, messages: Iterable[MessageProxy]) -> None:
|
||||
@raise_connection_error
|
||||
def requeue(self, messages: Iterable[Message[Any]]) -> None:
|
||||
self.query_set.filter(
|
||||
message_id__in=[message.message_id for message in messages],
|
||||
).update(
|
||||
@@ -511,7 +514,7 @@ class _PostgresConsumer(Consumer):
|
||||
self.logger.info("Purged messages in all queues", count=count)
|
||||
self.task_purge_last_run = timezone.now()
|
||||
|
||||
@raise_broker_connection_error
|
||||
@raise_connection_error
|
||||
def close(self) -> None:
|
||||
try:
|
||||
self._purge_locks()
|
||||
|
||||
@@ -5,7 +5,7 @@ from signal import pause
|
||||
from django_dramatiq_postgres.conf import Conf
|
||||
|
||||
|
||||
def worker_metrics() -> int:
|
||||
def worker_metrics() -> None:
|
||||
import_module(Conf().autodiscovery["setup_module"])
|
||||
|
||||
from django_dramatiq_postgres.middleware import MetricsMiddleware
|
||||
@@ -15,4 +15,3 @@ def worker_metrics() -> int:
|
||||
int(os.getenv("dramatiq_prom_port", "9191")),
|
||||
)
|
||||
pause()
|
||||
return 0
|
||||
|
||||
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING, Any, cast
|
||||
|
||||
from django.db import DatabaseError, close_old_connections, connections
|
||||
from dramatiq.actor import Actor
|
||||
from dramatiq.broker import Broker, MessageProxy
|
||||
from dramatiq.broker import Broker
|
||||
from dramatiq.common import current_millis
|
||||
from dramatiq.message import Message
|
||||
from dramatiq.middleware.middleware import Middleware
|
||||
@@ -79,7 +79,7 @@ class DbConnectionMiddleware(Middleware):
|
||||
|
||||
|
||||
class TaskStateBeforeMiddleware(Middleware):
|
||||
def before_process_message(self, broker: PostgresBroker, message: Message[Any]) -> None: # type: ignore[override]
|
||||
def before_process_message(self, broker: PostgresBroker, message: Message[Any]) -> None:
|
||||
broker.query_set.filter(
|
||||
message_id=message.message_id,
|
||||
queue_name=message.queue_name,
|
||||
@@ -90,7 +90,7 @@ class TaskStateBeforeMiddleware(Middleware):
|
||||
|
||||
|
||||
class TaskStateAfterMiddleware(Middleware):
|
||||
def before_process_message(self, broker: PostgresBroker, message: MessageProxy) -> None: # type: ignore[override]
|
||||
def before_process_message(self, broker: PostgresBroker, message: Message[Any]) -> None:
|
||||
broker.query_set.filter(
|
||||
message_id=message.message_id,
|
||||
queue_name=message.queue_name,
|
||||
@@ -99,7 +99,7 @@ class TaskStateAfterMiddleware(Middleware):
|
||||
state=TaskState.RUNNING,
|
||||
)
|
||||
|
||||
def after_skip_message(self, broker: PostgresBroker, message: MessageProxy) -> None: # type: ignore[override]
|
||||
def after_skip_message(self, broker: PostgresBroker, message: Message[Any]) -> None:
|
||||
broker.query_set.filter(
|
||||
message_id=message.message_id,
|
||||
queue_name=message.queue_name,
|
||||
@@ -110,11 +110,11 @@ class TaskStateAfterMiddleware(Middleware):
|
||||
|
||||
def after_process_message(
|
||||
self,
|
||||
broker: PostgresBroker, # type: ignore[override]
|
||||
message: MessageProxy,
|
||||
broker: PostgresBroker,
|
||||
message: Message[Any],
|
||||
*,
|
||||
result: Any | None = None,
|
||||
exception: BaseException | None = None,
|
||||
exception: Exception | None = None,
|
||||
) -> None:
|
||||
self.after_skip_message(broker, message)
|
||||
|
||||
@@ -147,7 +147,7 @@ class CurrentTask(Middleware):
|
||||
raise CurrentTaskNotFound()
|
||||
return task[-1]
|
||||
|
||||
def before_process_message(self, broker: Broker, message: MessageProxy) -> None:
|
||||
def before_process_message(self, broker: Broker, message: Message[Any]) -> None:
|
||||
tasks = self._TASKS.get()
|
||||
if tasks is None:
|
||||
tasks = []
|
||||
@@ -157,10 +157,10 @@ class CurrentTask(Middleware):
|
||||
def after_process_message(
|
||||
self,
|
||||
broker: Broker,
|
||||
message: MessageProxy,
|
||||
message: Message[Any],
|
||||
*,
|
||||
result: Any | None = None,
|
||||
exception: BaseException | None = None,
|
||||
exception: Exception | None = None,
|
||||
) -> None:
|
||||
tasks: list[TaskBase] | None = self._TASKS.get()
|
||||
if tasks is None or len(tasks) == 0:
|
||||
@@ -194,7 +194,7 @@ class CurrentTask(Middleware):
|
||||
pass
|
||||
self._TASKS.set(tasks[:-1])
|
||||
|
||||
def after_skip_message(self, broker: Broker, message: MessageProxy) -> None:
|
||||
def after_skip_message(self, broker: Broker, message: Message[Any]) -> None:
|
||||
self.after_process_message(broker, message)
|
||||
|
||||
|
||||
@@ -236,7 +236,7 @@ class MetricsMiddleware(Middleware):
|
||||
self.message_start_times: dict[str, int] = {}
|
||||
|
||||
@property
|
||||
def forks(self) -> list[Callable[[], int]]:
|
||||
def forks(self) -> list[Callable[[], None]]:
|
||||
from django_dramatiq_postgres.forks import worker_metrics
|
||||
|
||||
return [worker_metrics]
|
||||
@@ -310,41 +310,41 @@ class MetricsMiddleware(Middleware):
|
||||
# TODO: worker_id
|
||||
multiprocess.mark_process_dead(os.getpid()) # type: ignore[no-untyped-call]
|
||||
|
||||
def _make_labels(self, message: MessageProxy | Message[Any]) -> list[str]:
|
||||
def _make_labels(self, message: Message[Any]) -> list[str]:
|
||||
return [message.queue_name, message.actor_name]
|
||||
|
||||
def after_nack(self, broker: Broker, message: MessageProxy) -> None:
|
||||
def after_nack(self, broker: Broker, message: Message[Any]) -> None:
|
||||
self.total_rejected_messages.labels(*self._make_labels(message)).inc()
|
||||
|
||||
def after_enqueue(self, broker: Broker, message: Message[Any], delay: int) -> None:
|
||||
if "retries" in message.options:
|
||||
self.total_retried_messages.labels(*self._make_labels(message)).inc()
|
||||
|
||||
def before_delay_message(self, broker: Broker, message: MessageProxy) -> None:
|
||||
def before_delay_message(self, broker: Broker, message: Message[Any]) -> None:
|
||||
self.delayed_messages.add(message.message_id)
|
||||
self.in_progress_delayed_messages.labels(*self._make_labels(message)).inc()
|
||||
|
||||
def before_process_message(self, broker: Broker, message: MessageProxy) -> None:
|
||||
def before_process_message(self, broker: Broker, message: Message[Any]) -> None:
|
||||
labels = self._make_labels(message)
|
||||
if message.message_id in self.delayed_messages:
|
||||
self.delayed_messages.remove(message.message_id)
|
||||
self.in_progress_delayed_messages.labels(*labels).dec()
|
||||
|
||||
self.in_progress_messages.labels(*labels).inc()
|
||||
self.message_start_times[message.message_id] = current_millis()
|
||||
self.message_start_times[message.message_id] = current_millis() # type: ignore[no-untyped-call]
|
||||
|
||||
def after_process_message(
|
||||
self,
|
||||
broker: Broker,
|
||||
message: MessageProxy,
|
||||
message: Message[Any],
|
||||
*,
|
||||
result: Any | None = None,
|
||||
exception: BaseException | None = None,
|
||||
exception: Exception | None = None,
|
||||
) -> None:
|
||||
labels = self._make_labels(message)
|
||||
|
||||
message_start_time = self.message_start_times.pop(message.message_id, current_millis())
|
||||
message_duration = current_millis() - message_start_time
|
||||
message_start_time = self.message_start_times.pop(message.message_id, current_millis()) # type: ignore[no-untyped-call]
|
||||
message_duration = current_millis() - message_start_time # type: ignore[no-untyped-call]
|
||||
self.messages_durations.labels(*labels).observe(message_duration)
|
||||
|
||||
self.in_progress_messages.labels(*labels).dec()
|
||||
|
||||
@@ -159,7 +159,7 @@ class ScheduleBase(models.Model):
|
||||
|
||||
def send(self, broker: Broker | None = None) -> Message[Any]:
|
||||
broker = broker or get_broker()
|
||||
actor: Actor[Any, Any] = broker.get_actor(self.actor_name)
|
||||
actor: Actor[Any, Any] = broker.get_actor(self.actor_name) # type: ignore[no-untyped-call]
|
||||
return actor.send_with_options(
|
||||
args=pickle.loads(self.args), # nosec
|
||||
kwargs=pickle.loads(self.kwargs), # nosec
|
||||
|
||||
@@ -36,7 +36,7 @@ dependencies = [
|
||||
"django >=4.2,<6.0",
|
||||
"django-pglock >=1.7,<2",
|
||||
"django-pgtrigger >=4,<5",
|
||||
"dramatiq >=2,<3",
|
||||
"dramatiq >=1.17,<1.18",
|
||||
"tenacity >=9,<10",
|
||||
"structlog >=25,<26",
|
||||
]
|
||||
|
||||
@@ -111,12 +111,8 @@ class TestFlowsEnroll(SeleniumTestCase):
|
||||
identification_stage = self.get_shadow_root("ak-stage-identification", flow_executor)
|
||||
wait = WebDriverWait(identification_stage, self.wait_timeout)
|
||||
|
||||
wait.until(
|
||||
ec.presence_of_element_located((By.CSS_SELECTOR, "a[data-ouia-component-id='enroll']"))
|
||||
)
|
||||
identification_stage.find_element(
|
||||
By.CSS_SELECTOR, "a[data-ouia-component-id='enroll']"
|
||||
).click()
|
||||
wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, "a[ouiaId='enroll']")))
|
||||
identification_stage.find_element(By.CSS_SELECTOR, "a[ouiaId='enroll']").click()
|
||||
|
||||
# First prompt stage
|
||||
flow_executor = self.get_shadow_root("ak-flow-executor")
|
||||
|
||||
@@ -27,14 +27,8 @@ class TestFlowsRecovery(SeleniumTestCase):
|
||||
identification_stage = self.get_shadow_root("ak-stage-identification", flow_executor)
|
||||
wait = WebDriverWait(identification_stage, self.wait_timeout)
|
||||
|
||||
wait.until(
|
||||
ec.presence_of_element_located(
|
||||
(By.CSS_SELECTOR, "a[data-ouia-component-id='recovery']")
|
||||
)
|
||||
)
|
||||
identification_stage.find_element(
|
||||
By.CSS_SELECTOR, "a[data-ouia-component-id='recovery']"
|
||||
).click()
|
||||
wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, "a[ouiaId='recovery']")))
|
||||
identification_stage.find_element(By.CSS_SELECTOR, "a[ouiaId='recovery']").click()
|
||||
|
||||
# First prompt stage
|
||||
flow_executor = self.get_shadow_root("ak-flow-executor")
|
||||
|
||||
11
uv.lock
generated
11
uv.lock
generated
@@ -1143,7 +1143,7 @@ requires-dist = [
|
||||
{ name = "django", specifier = ">=4.2,<6.0" },
|
||||
{ name = "django-pglock", specifier = ">=1.7,<2" },
|
||||
{ name = "django-pgtrigger", specifier = ">=4,<5" },
|
||||
{ name = "dramatiq", specifier = ">=2,<3" },
|
||||
{ name = "dramatiq", specifier = ">=1.17,<1.18" },
|
||||
{ name = "structlog", specifier = ">=25,<26" },
|
||||
{ name = "tenacity", specifier = ">=9,<10" },
|
||||
]
|
||||
@@ -1381,11 +1381,14 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "dramatiq"
|
||||
version = "2.1.0"
|
||||
version = "1.17.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/22/69/02b54e3fc4fe75721b322bc578054b4f03cec258ba614fa98a1a5bbe1efe/dramatiq-2.1.0.tar.gz", hash = "sha256:cf81550729de6cf64234b05bd63970645654aaf38967faa7a2b6e401384bb090", size = 105444, upload-time = "2026-03-03T11:22:10.067Z" }
|
||||
dependencies = [
|
||||
{ name = "prometheus-client" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c6/7a/6792ddc64a77d22bfd97261b751a7a76cf2f9d62edc59aafb679ac48b77d/dramatiq-1.17.1.tar.gz", hash = "sha256:2675d2f57e0d82db3a7d2a60f1f9c536365349db78c7f8d80a63e4c54697647a", size = 99071, upload-time = "2024-10-26T05:09:28.283Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/c2/91/422960c8c415fd31ca1519d71d6f7e4bcabb2cdcc5872f784467e9fe7237/dramatiq-2.1.0-py3-none-any.whl", hash = "sha256:3ef940c2815722d3679aed79ef96c805f02fd33d4361529b2de30f01511ca44d", size = 125543, upload-time = "2026-03-03T11:22:08.664Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ee/36/925c7afd5db4f1a3f00676b9c3c58f31ff7ae29a347282d86c8d429280a5/dramatiq-1.17.1-py3-none-any.whl", hash = "sha256:951cdc334478dff8e5150bb02a6f7a947d215ee24b5aedaf738eff20e17913df", size = 120382, upload-time = "2024-10-26T05:09:26.436Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
126
web/package-lock.json
generated
126
web/package-lock.json
generated
@@ -66,7 +66,7 @@
|
||||
"chartjs-adapter-date-fns": "^3.0.0",
|
||||
"codemirror": "^6.0.2",
|
||||
"core-js": "^3.49.0",
|
||||
"country-flag-icons": "^1.6.17",
|
||||
"country-flag-icons": "^1.6.16",
|
||||
"date-fns": "^4.1.0",
|
||||
"deepmerge-ts": "^7.1.5",
|
||||
"dompurify": "^3.4.2",
|
||||
@@ -118,7 +118,7 @@
|
||||
"vitest": "^4.1.1",
|
||||
"webcomponent-qr-code": "^1.3.0",
|
||||
"wireit": "^0.14.12",
|
||||
"yaml": "^2.8.4"
|
||||
"yaml": "^2.8.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=24",
|
||||
@@ -4577,9 +4577,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.33.tgz",
|
||||
"integrity": "sha512-jOlwnFV2xhuuZeAUILGFULeR6vDPfijEJ57evfocwznQldLU3w2cZ9bSDryY9ip+AsM3r1NJKzf47V2NXebkeQ==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.32.tgz",
|
||||
"integrity": "sha512-/eWL0n43D64QWEUHLtTE+jDqjkJhyidjkDhv6f0uJohOUAhywxQ9wXYp845DNNds0JpCdI4Uo0a9bl+vbXf+ew==",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@@ -4594,18 +4594,18 @@
|
||||
"url": "https://opencollective.com/swc"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@swc/core-darwin-arm64": "1.15.33",
|
||||
"@swc/core-darwin-x64": "1.15.33",
|
||||
"@swc/core-linux-arm-gnueabihf": "1.15.33",
|
||||
"@swc/core-linux-arm64-gnu": "1.15.33",
|
||||
"@swc/core-linux-arm64-musl": "1.15.33",
|
||||
"@swc/core-linux-ppc64-gnu": "1.15.33",
|
||||
"@swc/core-linux-s390x-gnu": "1.15.33",
|
||||
"@swc/core-linux-x64-gnu": "1.15.33",
|
||||
"@swc/core-linux-x64-musl": "1.15.33",
|
||||
"@swc/core-win32-arm64-msvc": "1.15.33",
|
||||
"@swc/core-win32-ia32-msvc": "1.15.33",
|
||||
"@swc/core-win32-x64-msvc": "1.15.33"
|
||||
"@swc/core-darwin-arm64": "1.15.32",
|
||||
"@swc/core-darwin-x64": "1.15.32",
|
||||
"@swc/core-linux-arm-gnueabihf": "1.15.32",
|
||||
"@swc/core-linux-arm64-gnu": "1.15.32",
|
||||
"@swc/core-linux-arm64-musl": "1.15.32",
|
||||
"@swc/core-linux-ppc64-gnu": "1.15.32",
|
||||
"@swc/core-linux-s390x-gnu": "1.15.32",
|
||||
"@swc/core-linux-x64-gnu": "1.15.32",
|
||||
"@swc/core-linux-x64-musl": "1.15.32",
|
||||
"@swc/core-win32-arm64-msvc": "1.15.32",
|
||||
"@swc/core-win32-ia32-msvc": "1.15.32",
|
||||
"@swc/core-win32-x64-msvc": "1.15.32"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@swc/helpers": ">=0.5.17"
|
||||
@@ -4617,9 +4617,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-darwin-arm64": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.33.tgz",
|
||||
"integrity": "sha512-N+L0uXhuO7FIfzqwgxmzv0zIpV0qEp8wPX3QQs2p4atjMoywup2JTeDlXPw+z9pWJGCae3JjM+tZ6myclI+2gA==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.32.tgz",
|
||||
"integrity": "sha512-/YWMvJDPu+AAwuUsM2G+DNQ/7zhodURGzdQyewEqcvgklAdDHs3LwQmLLnyn6SJl8DT8UOxkbzK+D1PmPeelRg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -4633,9 +4633,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-darwin-x64": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.33.tgz",
|
||||
"integrity": "sha512-/Il4QHSOhV4FekbsDtkrNmKbsX26oSysvgrRswa/RYOHXAkwXDbB4jaeKq6PsJLSPkzJ2KzQ061gtBnk0vNHfA==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.32.tgz",
|
||||
"integrity": "sha512-KOTXJXdAhWL+hZ77MYP3z+4pcMFaQhQ74yqyN1uz093q0YnbxpqMtYpPISbYvMHzVRNNx5kN+9RZAXEaadhWVA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -4649,9 +4649,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-linux-arm-gnueabihf": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.33.tgz",
|
||||
"integrity": "sha512-C64hBnBxq4viOPQ8hlx+2lJ23bzZBGnjw7ryALmS+0Q3zHmwO8lw1/DArLENw4Q18/0w5wdEO1k3m1wWNtKGqQ==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.32.tgz",
|
||||
"integrity": "sha512-oOoxLweljlc0A4X8ybsgxV7cVaYTwBOg2iMDJcFR3Sr48C+lsv9VzSmqdK/IVIXF4W4GjLc3VqTAdSMXlfVLuQ==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@@ -4665,9 +4665,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-linux-arm64-gnu": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.33.tgz",
|
||||
"integrity": "sha512-TRJfnJbX3jqpxRDRoieMzRiCBS5jOmXNb3iQXmcgjFEHKLnAgK1RZRU8Cq1MsPqO4jAJp/ld1G4O3fXuxv85uw==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.32.tgz",
|
||||
"integrity": "sha512-oDzEkdl6D6BAWdMtU5KGO7y3HR5fJcvByNLyEk9+ugj8nP5Ovb7P4kBcStBXc4MPExFGQryehiINMlmY8HlclA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -4681,9 +4681,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-linux-arm64-musl": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.33.tgz",
|
||||
"integrity": "sha512-il7tYM+CpUNzieQbwAjFT1P8zqAhmGWNAGhQZBnxurXZ0aNn+5nqYFTEUKNZl7QibtT0uQXzTZrNGHCIj6Y1Og==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.32.tgz",
|
||||
"integrity": "sha512-omcqjoZP/b8D8PuczVoRwJieC6ibj7qIxTftNYokz4/aSmKFHvsd7nIFfPk5ZvtzncbH4AY7+Dkr/Lp2gWxYeA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -4697,9 +4697,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-linux-ppc64-gnu": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.33.tgz",
|
||||
"integrity": "sha512-ZtNBwN0Z7CFj9Il0FcPaKdjgP7URyKu/3RfH46vq+0paOBqLj4NYldD6Qo//Duif/7IOtAraUfDOmp0PLAufog==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.32.tgz",
|
||||
"integrity": "sha512-KGkTMyz/Tbn3PBNu0AVZ4GTDFKnICrYcTiNPZq8DrvK42pnFsf3GNDrIG9E5AtQlTmC0YigkWKmu0eMcfTrmgA==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
@@ -4713,9 +4713,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-linux-s390x-gnu": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.33.tgz",
|
||||
"integrity": "sha512-De1IyajoOmhOYYjw/lx66bKlyDpHZTueqwpDrWgf5O7T6d1ODeJJO9/OqMBmrBQc5C+dNnlmIufHsp4QVCWufA==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.32.tgz",
|
||||
"integrity": "sha512-G3Aa4tVS/3OGZBkoNIwUF9F6RAy+Osb4GOlo62SinLmDiErz/ykmM7KH0wkz6l9kM8jJq1HyAM6atJTUEbBk7g==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
@@ -4729,9 +4729,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-linux-x64-gnu": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.33.tgz",
|
||||
"integrity": "sha512-mGTH0YxmUN+x6vRN/I6NOk5X0ogNktkwPnJ94IMvR7QjhRDwL0O8RXEDhyUM0YtwWrryBOqaJQBX4zruxEPRGw==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.32.tgz",
|
||||
"integrity": "sha512-ERsjfGcj6CBmj3vJnGDO8m8rTvw6RqMcWo1dogOtNx3/+/0+NNpJiXDobJrr1GwInI/BHAEkvSFIH6d2LqPcUQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -4745,9 +4745,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-linux-x64-musl": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.33.tgz",
|
||||
"integrity": "sha512-hj628ZkSEJf6zMf5VMbYrG2O6QqyTIp2qwY6VlCjvIa9lAEZ5c2lfPblCLVGYubTeLJDxadLB/CxqQYOQABeEQ==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.32.tgz",
|
||||
"integrity": "sha512-N4Ggahe/8SUbTX50P6EdhbW9YWcgbZVb52R4cq6MK+zsoMjRq7rGvV5ztA05QnbaCYqMYx8rTY7KAIA3Crdo4Q==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -4761,9 +4761,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-win32-arm64-msvc": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.33.tgz",
|
||||
"integrity": "sha512-GV2oohtN2/5+KSccl86VULu3aT+LrISC8uzgSq0FRnikpD+Zwc+sBlXmoKQ+Db6jI57ITUOIB8jRkdGMABC29g==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.32.tgz",
|
||||
"integrity": "sha512-01yN0o9jvo8xBTP12aPK2wW8b41jmOlGbDDlAnoynotc4pO6xA0zby9f1z6j++qXDpGBttLySq1omgVrlQKYcw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -4777,9 +4777,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-win32-ia32-msvc": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.33.tgz",
|
||||
"integrity": "sha512-gtyvzSNR8DHKfFEA2uqb8Ld1myqi6uEg2jyeUq3ikn5ytYs7H8RpZYC8mdy4NXr8hfcdJfCLXPlYaqqfBXpoEQ==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.32.tgz",
|
||||
"integrity": "sha512-fLagI9XZYNpTcmlqAcp3KBtmj7E19WCmYD80Jxj1Kn5tGNa7yxNLd3NNdWxuZGUPl5iC0/KqZru7g08gF6Fsrw==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
@@ -4793,9 +4793,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-win32-x64-msvc": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.33.tgz",
|
||||
"integrity": "sha512-d6fRqQSkJI+kmMEBWaDQ7TMl8+YjLYbwRUPZQ9DY0ORBJeTzOrG0twvfvlZ2xgw6jA0ScQKgfBm4vHLSLl5Hqg==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.32.tgz",
|
||||
"integrity": "sha512-gbc2bQ/T2CiR+w0OvcVKwLOFAcPZBvmWmolbwpg1E8UrpeC03DGtyMUApOHNXNYWA3SHFrYXCQtosrcMza1YFg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -7475,9 +7475,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/country-flag-icons": {
|
||||
"version": "1.6.17",
|
||||
"resolved": "https://registry.npmjs.org/country-flag-icons/-/country-flag-icons-1.6.17.tgz",
|
||||
"integrity": "sha512-Nmik0289ZVZSI3c7mJR/amg6DyY7Z59b0sTFSKayeX72mHfPzCPJygwJs2pYgQULzuAyWeCUgwAJ+Dq8OR+JFw==",
|
||||
"version": "1.6.16",
|
||||
"resolved": "https://registry.npmjs.org/country-flag-icons/-/country-flag-icons-1.6.16.tgz",
|
||||
"integrity": "sha512-HxJVoE/aaZGcUMx1vK/u9430uKGB3ODZDDZJJOqVJQzoHk5v42c0fSp1rk4tDfyr1dVOJjwxRiaBPliBMo2Liw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/crelt": {
|
||||
@@ -10748,9 +10748,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ip-address": {
|
||||
"version": "10.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz",
|
||||
"integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==",
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz",
|
||||
"integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==",
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"engines": {
|
||||
@@ -19093,9 +19093,9 @@
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/yaml": {
|
||||
"version": "2.8.4",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz",
|
||||
"integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==",
|
||||
"version": "2.8.3",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
|
||||
"integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"yaml": "bin.mjs"
|
||||
@@ -19280,7 +19280,7 @@
|
||||
"@rollup/plugin-node-resolve": "^16.0.3",
|
||||
"@rollup/plugin-swc": "^0.4.0",
|
||||
"@swc/cli": "^0.8.1",
|
||||
"@swc/core": "^1.15.33",
|
||||
"@swc/core": "^1.15.32",
|
||||
"@webcomponents/template": "^1.5.1",
|
||||
"base64-js": "^1.5.1",
|
||||
"core-js": "^3.49.0",
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
"chartjs-adapter-date-fns": "^3.0.0",
|
||||
"codemirror": "^6.0.2",
|
||||
"core-js": "^3.49.0",
|
||||
"country-flag-icons": "^1.6.17",
|
||||
"country-flag-icons": "^1.6.16",
|
||||
"date-fns": "^4.1.0",
|
||||
"deepmerge-ts": "^7.1.5",
|
||||
"dompurify": "^3.4.2",
|
||||
@@ -194,7 +194,7 @@
|
||||
"vitest": "^4.1.1",
|
||||
"webcomponent-qr-code": "^1.3.0",
|
||||
"wireit": "^0.14.12",
|
||||
"yaml": "^2.8.4"
|
||||
"yaml": "^2.8.3"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@esbuild/darwin-arm64": "^0.28.0",
|
||||
|
||||
267
web/packages/lex/index.js
vendored
267
web/packages/lex/index.js
vendored
@@ -7,186 +7,152 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* A token produced by a {@link LexerAction}. The lexer is agnostic to the
|
||||
* concrete token shape; consumers pick whatever representation suits them.
|
||||
*
|
||||
* @typedef {unknown} Token
|
||||
* @typedef {(this: Lexer, chr: string) => any} DefunctFunction
|
||||
*/
|
||||
|
||||
/**
|
||||
* A rule action. Invoked with the regex match (full match followed by capture
|
||||
* groups) bound to the owning {@link Lexer} so it can read or set `state`,
|
||||
* `index`, and `reject`.
|
||||
*
|
||||
* Return values:
|
||||
* - `null` (or `undefined` from an implicit return) — discard the match and continue scanning.
|
||||
* - a single token — yield it from {@link Lexer.lex}.
|
||||
* - an array of tokens — yield the first; queue the rest for subsequent calls.
|
||||
*
|
||||
* @callback LexerAction
|
||||
* @this {Lexer}
|
||||
* @param {...string} match
|
||||
* @returns {Token | Token[] | null | void}
|
||||
* @typedef {(this: Lexer, ...args: RegExpExecArray) => string | string[] | undefined} RuleAction
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {object} LexerRule
|
||||
* @property {RegExp} pattern Sticky-compiled pattern used to probe the input.
|
||||
* @property {boolean} global Whether the user-supplied pattern was global.
|
||||
* @property {LexerAction} action
|
||||
* @property {number[]} start States in which the rule is active. `[0]` is the default state; an empty array means "any state".
|
||||
* @typedef {Object} Rule
|
||||
* @property {RegExp} pattern
|
||||
* @property {boolean} global
|
||||
* @property {RuleAction} action
|
||||
* @property {number[]} start
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {object} LexerMatch
|
||||
* @typedef {Object} Match
|
||||
* @property {RegExpExecArray} result
|
||||
* @property {LexerAction} action
|
||||
* @property {RuleAction} action
|
||||
* @property {number} length
|
||||
* @property {boolean} global Whether the producing rule was declared with the `g` flag.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Handler invoked when no rule matches at the current position.
|
||||
*
|
||||
* @callback DefunctHandler
|
||||
* @this {Lexer}
|
||||
* @param {string} chr The unexpected character.
|
||||
* @returns {Token | Token[] | null | void}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @type {DefunctHandler}
|
||||
*/
|
||||
function defaultDefunct(chr) {
|
||||
throw new Error(`Unexpected character at index ${this.index - 1}: ${chr}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Lexer class for tokenizing input strings.
|
||||
*/
|
||||
export class Lexer {
|
||||
/**
|
||||
* Current lexer state. Rules whose `start` array contains this value (or
|
||||
* is empty) are eligible to match. Odd-numbered states are also matched
|
||||
* by rules declared with `start: [0]`, mirroring flex's inclusive states.
|
||||
*
|
||||
* @type {string[]}
|
||||
*/
|
||||
tokens = [];
|
||||
/**
|
||||
* @type {Rule[]}
|
||||
*/
|
||||
rules = [];
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
remove = 0;
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
state = 0;
|
||||
|
||||
/** @type {number} */
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
index = 0;
|
||||
|
||||
/** @type {string} */
|
||||
/**
|
||||
* @type {string}
|
||||
*/
|
||||
input = "";
|
||||
|
||||
/**
|
||||
* When set to `true` from inside an action, the current match is rolled
|
||||
* back and the next-best match is tried instead.
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
reject = false;
|
||||
|
||||
/** @type {LexerRule[]} */
|
||||
#rules = [];
|
||||
|
||||
/** @type {Token[]} */
|
||||
#tokens = [];
|
||||
|
||||
/** @type {number} */
|
||||
#remove = 0;
|
||||
|
||||
/** @type {DefunctHandler} */
|
||||
#defunct;
|
||||
|
||||
/**
|
||||
* @param {DefunctHandler} [defunct] Optional handler for unexpected characters.
|
||||
* @param {DefunctFunction} [defunct]
|
||||
*/
|
||||
constructor(defunct) {
|
||||
this.#defunct = typeof defunct === "function" ? defunct : defaultDefunct;
|
||||
defunct ||= function (chr) {
|
||||
throw new Error("Unexpected character at index " + (this.index - 1) + ": " + chr);
|
||||
};
|
||||
|
||||
this.defunct = defunct;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a tokenization rule.
|
||||
* Add a lexing rule.
|
||||
*
|
||||
* @param {RegExp} pattern
|
||||
* @param {LexerAction} action
|
||||
* @param {number[]} [start] States in which the rule is active. Defaults to `[0]`.
|
||||
* @returns {this}
|
||||
* @param {RuleAction} action
|
||||
* @param {number[]} [start]
|
||||
* @returns {Lexer}
|
||||
*/
|
||||
addRule(pattern, action, start) {
|
||||
addRule = (pattern, action, start) => {
|
||||
const global = pattern.global;
|
||||
|
||||
if (!global || !pattern.sticky) {
|
||||
let flags = "gy";
|
||||
|
||||
if (pattern.multiline) flags += "m";
|
||||
if (pattern.ignoreCase) flags += "i";
|
||||
if (pattern.unicode) flags += "u";
|
||||
pattern = new RegExp(pattern.source, flags);
|
||||
}
|
||||
|
||||
this.#rules.push({
|
||||
pattern,
|
||||
global,
|
||||
action,
|
||||
start: Array.isArray(start) ? start : [0],
|
||||
if (!Array.isArray(start)) start = [0];
|
||||
|
||||
this.rules.push({
|
||||
pattern: pattern,
|
||||
global: global,
|
||||
action: action,
|
||||
start: start,
|
||||
});
|
||||
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Reset the lexer and load a new input string.
|
||||
* Set the input string for lexing.
|
||||
*
|
||||
* @param {string} input
|
||||
* @returns {this}
|
||||
* @returns {Lexer}
|
||||
*/
|
||||
setInput(input) {
|
||||
this.#remove = 0;
|
||||
setInput = (input) => {
|
||||
this.remove = 0;
|
||||
this.state = 0;
|
||||
this.index = 0;
|
||||
this.#tokens.length = 0;
|
||||
this.tokens.length = 0;
|
||||
this.input = input;
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Produce the next token from the input, or `null` once exhausted.
|
||||
* Lex the next token from the input.
|
||||
*
|
||||
* @returns {Token | null}
|
||||
* @returns {string | string[] | undefined}
|
||||
*/
|
||||
lex() {
|
||||
if (this.#tokens.length) return /** @type {Token} */ (this.#tokens.shift());
|
||||
lex = () => {
|
||||
if (this.tokens.length) return this.tokens.shift();
|
||||
|
||||
this.reject = true;
|
||||
|
||||
while (this.index <= this.input.length) {
|
||||
const matches = this.#scan().splice(this.#remove);
|
||||
const matches = this.scan().splice(this.remove);
|
||||
const index = this.index;
|
||||
|
||||
while (matches.length) {
|
||||
if (!this.reject) break;
|
||||
if (!this.reject) {
|
||||
break;
|
||||
}
|
||||
const match = matches.shift();
|
||||
|
||||
const match = /** @type {LexerMatch} */ (matches.shift());
|
||||
const { result, length } = match;
|
||||
if (!match) break;
|
||||
|
||||
const result = match.result;
|
||||
const length = match.length;
|
||||
this.index += length;
|
||||
this.reject = false;
|
||||
this.#remove++;
|
||||
this.remove++;
|
||||
|
||||
let token = match.action.apply(
|
||||
this,
|
||||
/** @type {string[]} */ (/** @type {unknown} */ (result)),
|
||||
);
|
||||
let token = match.action.apply(this, result);
|
||||
|
||||
if (this.reject) {
|
||||
this.index = result.index;
|
||||
} else if (token !== null && token !== undefined) {
|
||||
if (Array.isArray(token)) {
|
||||
this.#tokens = token.slice(1);
|
||||
token = token[0];
|
||||
}
|
||||
if (length) this.#remove = 0;
|
||||
} else if (Array.isArray(token)) {
|
||||
this.tokens = token.slice(1);
|
||||
token = token[0];
|
||||
} else {
|
||||
if (length) this.remove = 0;
|
||||
return token;
|
||||
}
|
||||
}
|
||||
@@ -195,82 +161,79 @@ export class Lexer {
|
||||
|
||||
if (index < input.length) {
|
||||
if (this.reject) {
|
||||
this.#remove = 0;
|
||||
const token = this.#defunct(input.charAt(this.index++));
|
||||
if (token !== null && token !== undefined) {
|
||||
this.remove = 0;
|
||||
const token = this.defunct(input.charAt(this.index++));
|
||||
if (typeof token !== "undefined") {
|
||||
if (Array.isArray(token)) {
|
||||
this.#tokens = token.slice(1);
|
||||
this.tokens = token.slice(1);
|
||||
return token[0];
|
||||
}
|
||||
|
||||
return token;
|
||||
}
|
||||
} else {
|
||||
if (this.index !== index) this.#remove = 0;
|
||||
if (this.index !== index) this.remove = 0;
|
||||
this.reject = true;
|
||||
}
|
||||
} else if (matches.length) {
|
||||
this.reject = true;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
} else if (matches.length) this.reject = true;
|
||||
else break;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Probe every state-eligible rule at the current position, returning the
|
||||
* matches sorted by length (longest first), with global rules pinned
|
||||
* after non-global ones to preserve flex's "longest non-global wins"
|
||||
* tie-breaking.
|
||||
* Scan the input for matches.
|
||||
*
|
||||
* @returns {LexerMatch[]}
|
||||
* @returns {Match[]}
|
||||
*/
|
||||
#scan() {
|
||||
/** @type {LexerMatch[]} */
|
||||
scan = () => {
|
||||
/**
|
||||
* @type {Match[]}
|
||||
*/
|
||||
const matches = [];
|
||||
let index = 0;
|
||||
|
||||
const state = this.state;
|
||||
const lastIndex = this.index;
|
||||
const input = this.input;
|
||||
|
||||
for (const rule of this.#rules) {
|
||||
for (let i = 0, length = this.rules.length; i < length; i++) {
|
||||
const rule = this.rules[i];
|
||||
const start = rule.start;
|
||||
const states = start.length;
|
||||
const eligible =
|
||||
!states || start.indexOf(state) >= 0 || (state % 2 && states === 1 && !start[0]);
|
||||
|
||||
if (!eligible) continue;
|
||||
if (!states || start.indexOf(state) >= 0 || (state % 2 && states === 1 && !start[0])) {
|
||||
const pattern = rule.pattern;
|
||||
pattern.lastIndex = lastIndex;
|
||||
const result = pattern.exec(input);
|
||||
|
||||
const pattern = rule.pattern;
|
||||
pattern.lastIndex = lastIndex;
|
||||
const result = pattern.exec(input);
|
||||
if (!result || result.index !== lastIndex) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!result || result.index !== lastIndex) continue;
|
||||
let j = matches.push({
|
||||
result: result,
|
||||
action: rule.action,
|
||||
length: result[0].length,
|
||||
});
|
||||
|
||||
let j = matches.push({
|
||||
result,
|
||||
action: rule.action,
|
||||
length: result[0].length,
|
||||
global: rule.global,
|
||||
});
|
||||
if (rule.global) {
|
||||
index = j;
|
||||
}
|
||||
|
||||
while (--j > 0) {
|
||||
const k = j - 1;
|
||||
const cur = matches[j];
|
||||
const prev = matches[k];
|
||||
const longer = cur.length > prev.length;
|
||||
const tieFavorsCur = cur.length === prev.length && prev.global && !cur.global;
|
||||
while (--j > index) {
|
||||
const k = j - 1;
|
||||
|
||||
if (!longer && !tieFavorsCur) break;
|
||||
|
||||
matches[j] = prev;
|
||||
matches[k] = cur;
|
||||
if (matches[j].length > matches[k].length) {
|
||||
const temple = matches[j];
|
||||
matches[j] = matches[k];
|
||||
matches[k] = temple;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return matches;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export default Lexer;
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"@rollup/plugin-node-resolve": "^16.0.3",
|
||||
"@rollup/plugin-swc": "^0.4.0",
|
||||
"@swc/cli": "^0.8.1",
|
||||
"@swc/core": "^1.15.33",
|
||||
"@swc/core": "^1.15.32",
|
||||
"@webcomponents/template": "^1.5.1",
|
||||
"base64-js": "^1.5.1",
|
||||
"core-js": "^3.49.0",
|
||||
|
||||
@@ -23,7 +23,6 @@ import { certificateProvider, certificateSelector } from "#admin/brands/Certific
|
||||
|
||||
import {
|
||||
Application,
|
||||
AuthenticationEnum,
|
||||
Brand,
|
||||
CoreApi,
|
||||
CoreApplicationsListRequest,
|
||||
@@ -32,6 +31,7 @@ import {
|
||||
FlowsApi,
|
||||
UsageEnum,
|
||||
} from "@goauthentik/api";
|
||||
import { AuthenticationEnum } from "@goauthentik/api/dist/models/AuthenticationEnum.js";
|
||||
|
||||
import YAML from "yaml";
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import { DesignationToLabel, LayoutToLabel } from "#admin/flows/utils";
|
||||
import { policyEngineModes } from "#admin/policies/PolicyEngineModes";
|
||||
|
||||
import {
|
||||
AuthenticationEnum,
|
||||
DeniedActionEnum,
|
||||
Flow,
|
||||
FlowDesignationEnum,
|
||||
@@ -25,6 +24,7 @@ import {
|
||||
FlowsApi,
|
||||
UsageEnum,
|
||||
} from "@goauthentik/api";
|
||||
import { AuthenticationEnum } from "@goauthentik/api/dist/models/AuthenticationEnum.js";
|
||||
|
||||
import { msg } from "@lit/localize";
|
||||
import { html, TemplateResult } from "lit";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ModelForm } from "#elements/forms/ModelForm";
|
||||
|
||||
import type { Stage } from "@goauthentik/api";
|
||||
import type { Stage } from "@goauthentik/api/dist/models/Stage";
|
||||
|
||||
import { msg } from "@lit/localize";
|
||||
|
||||
|
||||
@@ -19,10 +19,10 @@ import {
|
||||
CoreGroupsListRequest,
|
||||
Group,
|
||||
StagesApi,
|
||||
UserCreationModeEnum,
|
||||
UserTypeEnum,
|
||||
UserWriteStage,
|
||||
} from "@goauthentik/api";
|
||||
import { UserCreationModeEnum } from "@goauthentik/api/dist/models/UserCreationModeEnum.js";
|
||||
|
||||
import { msg } from "@lit/localize";
|
||||
import { html, TemplateResult } from "lit";
|
||||
|
||||
@@ -73,10 +73,6 @@ export class UserListPage extends WithLicenseSummary(
|
||||
max-width: var(--pf-c-avatar--Width);
|
||||
vertical-align: middle;
|
||||
}
|
||||
.pf-c-card.tree .pf-c-card__body {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
`,
|
||||
];
|
||||
|
||||
@@ -96,7 +92,7 @@ export class UserListPage extends WithLicenseSummary(
|
||||
public pageIcon = "pf-icon pf-icon-user";
|
||||
|
||||
@property({ type: String })
|
||||
public order = "-last_login";
|
||||
public order = "last_login";
|
||||
|
||||
@property({ type: String })
|
||||
public activePath: string;
|
||||
@@ -372,7 +368,7 @@ export class UserListPage extends WithLicenseSummary(
|
||||
|
||||
protected renderSidebarBefore(): TemplateResult {
|
||||
return html`<aside aria-labelledby="sidebar-left-panel-header" class="pf-c-sidebar__panel">
|
||||
<div class="pf-c-card tree">
|
||||
<div class="pf-c-card">
|
||||
<div
|
||||
role="heading"
|
||||
aria-level="2"
|
||||
|
||||
@@ -386,7 +386,7 @@ export class IdentificationStage extends BaseStage<
|
||||
return html`<a
|
||||
href=${url}
|
||||
class="pf-c-button pf-m-secondary pf-m-block"
|
||||
data-ouia-component-id="passwordless"
|
||||
ouiaId="passwordless"
|
||||
>
|
||||
${msg("Use a security key")}
|
||||
</a> `;
|
||||
@@ -475,12 +475,12 @@ export class IdentificationStage extends BaseStage<
|
||||
${enrollUrl
|
||||
? html`<div class="pf-c-login__main-footer-band-item">
|
||||
${msg("Need an account?")}
|
||||
<a href="${enrollUrl}" data-ouia-component-id="enroll">${msg("Sign up.")}</a>
|
||||
<a href="${enrollUrl}" ouiaId="enroll">${msg("Sign up.")}</a>
|
||||
</div>`
|
||||
: nothing}
|
||||
${recoveryUrl
|
||||
? html`<div class="pf-c-login__main-footer-band-item">
|
||||
<a href="${recoveryUrl}" data-ouia-component-id="recovery"
|
||||
<a href="${recoveryUrl}" ouiaId="recovery"
|
||||
>${msg("Forgot username or password?")}</a
|
||||
>
|
||||
</div>`
|
||||
|
||||
@@ -2,8 +2,6 @@ import "#elements/LoadingOverlay";
|
||||
|
||||
import Styles from "./index.entrypoint.css";
|
||||
|
||||
import { writeToClipboard } from "#common/clipboard";
|
||||
|
||||
import { Interface } from "#elements/Interface";
|
||||
import { WithBrandConfig } from "#elements/mixins/branding";
|
||||
|
||||
@@ -157,35 +155,22 @@ export class RacInterface extends WithBrandConfig(Interface) {
|
||||
if (/^text\//.exec(mimetype)) {
|
||||
const reader = new Guacamole.StringReader(stream);
|
||||
let data = "";
|
||||
|
||||
reader.ontext = (text) => {
|
||||
data += text;
|
||||
};
|
||||
|
||||
reader.onend = () => {
|
||||
const trimmed = data.trim();
|
||||
// Some remote sessions (notably SSH) push empty clipboard
|
||||
// payloads that would otherwise clobber the user's local
|
||||
// clipboard, breaking subsequent paste attempts. Ignore
|
||||
// them so the local clipboard remains intact.
|
||||
if (!trimmed) {
|
||||
console.debug("authentik/rac: ignored empty remote clipboard payload");
|
||||
return;
|
||||
}
|
||||
this._previousClipboardValue = trimmed;
|
||||
writeToClipboard(trimmed);
|
||||
this._previousClipboardValue = data;
|
||||
navigator.clipboard.writeText(data);
|
||||
};
|
||||
} else {
|
||||
const reader = new Guacamole.BlobReader(stream, mimetype);
|
||||
|
||||
reader.onend = () => {
|
||||
const blob = reader.getBlob();
|
||||
|
||||
const item = new ClipboardItem({
|
||||
[blob.type]: blob,
|
||||
});
|
||||
|
||||
writeToClipboard(item);
|
||||
navigator.clipboard.write([
|
||||
new ClipboardItem({
|
||||
[blob.type]: blob,
|
||||
}),
|
||||
]);
|
||||
};
|
||||
}
|
||||
console.debug("authentik/rac: updated clipboard from remote");
|
||||
|
||||
@@ -1,317 +0,0 @@
|
||||
/* eslint-disable func-names */
|
||||
import { Lexer } from "lex";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
|
||||
const drain = (lexer: Lexer): unknown[] => {
|
||||
const out: unknown[] = [];
|
||||
let token: unknown;
|
||||
|
||||
while ((token = lexer.lex()) !== null) {
|
||||
out.push(token);
|
||||
}
|
||||
return out;
|
||||
};
|
||||
|
||||
describe("Lexer", () => {
|
||||
describe("addRule", () => {
|
||||
it("returns the lexer for chaining", () => {
|
||||
const lexer = new Lexer();
|
||||
expect(lexer.addRule(/a/, () => "a")).toBe(lexer);
|
||||
});
|
||||
|
||||
it("preserves multiline, ignoreCase, and unicode flags when re-compiling", () => {
|
||||
const lexer = new Lexer(() => null);
|
||||
const seen: string[] = [];
|
||||
|
||||
lexer.addRule(/^a/im, (m) => {
|
||||
seen.push(m);
|
||||
});
|
||||
lexer.setInput("A\nA");
|
||||
|
||||
drain(lexer);
|
||||
expect(seen).toEqual(["A", "A"]);
|
||||
});
|
||||
|
||||
it("matches unicode patterns", () => {
|
||||
const lexer = new Lexer();
|
||||
lexer.addRule(/\p{Letter}+/u, (m) => m);
|
||||
lexer.setInput("café");
|
||||
|
||||
expect(lexer.lex()).toBe("café");
|
||||
});
|
||||
});
|
||||
|
||||
describe("setInput", () => {
|
||||
it("resets state, index, and pending tokens", () => {
|
||||
const lexer = new Lexer();
|
||||
lexer.addRule(/./, (c) => c);
|
||||
|
||||
lexer.setInput("ab");
|
||||
expect(lexer.lex()).toBe("a");
|
||||
lexer.state = 7;
|
||||
|
||||
lexer.setInput("xy");
|
||||
expect(lexer.state).toBe(0);
|
||||
expect(lexer.index).toBe(0);
|
||||
expect(lexer.lex()).toBe("x");
|
||||
expect(lexer.lex()).toBe("y");
|
||||
});
|
||||
|
||||
it("returns the lexer for chaining", () => {
|
||||
const lexer = new Lexer();
|
||||
expect(lexer.setInput("")).toBe(lexer);
|
||||
});
|
||||
});
|
||||
|
||||
describe("tokenization", () => {
|
||||
it("tokenizes a simple expression", () => {
|
||||
const lexer = new Lexer();
|
||||
lexer
|
||||
.addRule(/\s+/, () => null)
|
||||
.addRule(/[a-zA-Z]+/, (m) => ({ type: "ident", value: m }))
|
||||
.addRule(/\d+/, (m) => ({ type: "num", value: Number(m) }))
|
||||
.addRule(/[+\-*/]/, (m) => ({ type: "op", value: m }));
|
||||
|
||||
lexer.setInput("foo + 12 * bar");
|
||||
expect(drain(lexer)).toEqual([
|
||||
{ type: "ident", value: "foo" },
|
||||
{ type: "op", value: "+" },
|
||||
{ type: "num", value: 12 },
|
||||
{ type: "op", value: "*" },
|
||||
{ type: "ident", value: "bar" },
|
||||
]);
|
||||
});
|
||||
|
||||
it("skips matches whose action returns null", () => {
|
||||
const lexer = new Lexer();
|
||||
lexer.addRule(/\s+/, () => null).addRule(/\S+/, (m) => m);
|
||||
|
||||
lexer.setInput(" foo bar ");
|
||||
expect(drain(lexer)).toEqual(["foo", "bar"]);
|
||||
});
|
||||
|
||||
it("returns null once the input is exhausted", () => {
|
||||
const lexer = new Lexer();
|
||||
lexer.addRule(/./, (c) => c);
|
||||
lexer.setInput("a");
|
||||
|
||||
expect(lexer.lex()).toBe("a");
|
||||
expect(lexer.lex()).toBeNull();
|
||||
expect(lexer.lex()).toBeNull();
|
||||
});
|
||||
|
||||
it("passes capture groups to the action", () => {
|
||||
const lexer = new Lexer();
|
||||
const calls: string[][] = [];
|
||||
|
||||
lexer.addRule(/(\w+)=(\w+)/, (...args) => {
|
||||
calls.push(args);
|
||||
return args[0];
|
||||
});
|
||||
|
||||
lexer.setInput("foo=bar");
|
||||
lexer.lex();
|
||||
expect(calls).toEqual([["foo=bar", "foo", "bar"]]);
|
||||
});
|
||||
|
||||
it("binds `this` to the lexer inside the action", () => {
|
||||
const lexer = new Lexer();
|
||||
let captured: Lexer | undefined;
|
||||
|
||||
lexer.addRule(/a/, function () {
|
||||
// eslint-disable-next-line consistent-this, @typescript-eslint/no-this-alias
|
||||
captured = this;
|
||||
return "a";
|
||||
});
|
||||
|
||||
lexer.setInput("a");
|
||||
lexer.lex();
|
||||
expect(captured).toBe(lexer);
|
||||
});
|
||||
});
|
||||
|
||||
describe("longest-match tie-breaking", () => {
|
||||
it("prefers the longer non-global match", () => {
|
||||
const lexer = new Lexer();
|
||||
lexer.addRule(/if/, () => "KW_IF").addRule(/iffy/, () => "IDENT_IFFY");
|
||||
|
||||
lexer.setInput("iffy");
|
||||
expect(lexer.lex()).toBe("IDENT_IFFY");
|
||||
});
|
||||
|
||||
it("treats global rules as fallbacks behind non-global rules of the same length", () => {
|
||||
const lexer = new Lexer();
|
||||
lexer.addRule(/[a-z]+/g, (m) => `g:${m}`).addRule(/foo/, (m) => `s:${m}`);
|
||||
|
||||
lexer.setInput("foo");
|
||||
expect(lexer.lex()).toBe("s:foo");
|
||||
});
|
||||
});
|
||||
|
||||
describe("multi-token return", () => {
|
||||
it("yields the first token immediately and queues the rest", () => {
|
||||
const lexer = new Lexer();
|
||||
lexer.addRule(/a/, () => ["A1", "A2", "A3"]);
|
||||
|
||||
lexer.setInput("a");
|
||||
expect(lexer.lex()).toBe("A1");
|
||||
expect(lexer.lex()).toBe("A2");
|
||||
expect(lexer.lex()).toBe("A3");
|
||||
expect(lexer.lex()).toBeNull();
|
||||
});
|
||||
|
||||
it("drains the queue before scanning further input", () => {
|
||||
const lexer = new Lexer();
|
||||
lexer.addRule(/a/, () => ["A1", "A2"]).addRule(/b/, () => "B");
|
||||
|
||||
lexer.setInput("ab");
|
||||
expect(drain(lexer)).toEqual(["A1", "A2", "B"]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("reject", () => {
|
||||
it("falls through to the next-best match when an action sets reject", () => {
|
||||
const lexer = new Lexer();
|
||||
const order: string[] = [];
|
||||
|
||||
lexer
|
||||
.addRule(/foo/, function () {
|
||||
order.push("first");
|
||||
this.reject = true;
|
||||
})
|
||||
.addRule(/foo/, () => {
|
||||
order.push("second");
|
||||
return "FOO";
|
||||
});
|
||||
|
||||
lexer.setInput("foo");
|
||||
expect(lexer.lex()).toBe("FOO");
|
||||
expect(order).toEqual(["first", "second"]);
|
||||
});
|
||||
|
||||
it("rolls back the lexer index when an action rejects", () => {
|
||||
const lexer = new Lexer();
|
||||
|
||||
lexer
|
||||
.addRule(/abc/, function () {
|
||||
this.reject = true;
|
||||
})
|
||||
.addRule(/a/, (m) => m);
|
||||
|
||||
lexer.setInput("abc");
|
||||
expect(lexer.lex()).toBe("a");
|
||||
expect(lexer.index).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe("defunct handling", () => {
|
||||
it("throws by default on unexpected characters", () => {
|
||||
const lexer = new Lexer();
|
||||
lexer.addRule(/a/, (m) => m);
|
||||
|
||||
lexer.setInput("a@");
|
||||
expect(lexer.lex()).toBe("a");
|
||||
expect(() => lexer.lex()).toThrow(/Unexpected character at index 1: @/);
|
||||
});
|
||||
|
||||
it("invokes a custom defunct handler with the offending character", () => {
|
||||
const defunct = vi.fn((chr: string) => `?${chr}`);
|
||||
const lexer = new Lexer(defunct);
|
||||
lexer.addRule(/a/, (m) => m);
|
||||
|
||||
lexer.setInput("a@b");
|
||||
expect(drain(lexer)).toEqual(["a", "?@", "?b"]);
|
||||
expect(defunct).toHaveBeenCalledTimes(2);
|
||||
expect(defunct.mock.calls[0]?.[0]).toBe("@");
|
||||
});
|
||||
|
||||
it("ignores defunct return values that are null", () => {
|
||||
const lexer = new Lexer((_chr) => null);
|
||||
lexer.addRule(/a/, (m) => m);
|
||||
|
||||
lexer.setInput("@@a");
|
||||
expect(lexer.lex()).toBe("a");
|
||||
expect(lexer.lex()).toBeNull();
|
||||
});
|
||||
|
||||
it("supports array returns from the defunct handler", () => {
|
||||
const lexer = new Lexer((chr) => [`bad:${chr}`, "extra"]);
|
||||
lexer.addRule(/a/, (m) => m);
|
||||
|
||||
lexer.setInput("@");
|
||||
expect(lexer.lex()).toBe("bad:@");
|
||||
expect(lexer.lex()).toBe("extra");
|
||||
});
|
||||
|
||||
it("falls back to the default handler when given a non-function", () => {
|
||||
// @ts-expect-error — exercising the runtime guard
|
||||
const lexer = new Lexer("not a function");
|
||||
lexer.setInput("@");
|
||||
expect(() => lexer.lex()).toThrow(/Unexpected character/);
|
||||
});
|
||||
});
|
||||
|
||||
describe("states", () => {
|
||||
it("only fires rules whose start array includes the current state", () => {
|
||||
const lexer = new Lexer();
|
||||
|
||||
lexer
|
||||
.addRule(/"/, function () {
|
||||
this.state = 2;
|
||||
})
|
||||
.addRule(
|
||||
/"/,
|
||||
function () {
|
||||
this.state = 0;
|
||||
},
|
||||
[2],
|
||||
)
|
||||
.addRule(/[^"]+/, (m) => `STR:${m}`, [2])
|
||||
.addRule(/[a-z]+/, (m) => `ID:${m}`);
|
||||
|
||||
lexer.setInput('foo"hello"bar');
|
||||
expect(drain(lexer)).toEqual(["ID:foo", "STR:hello", "ID:bar"]);
|
||||
});
|
||||
|
||||
it("treats an empty start array as 'active in any state'", () => {
|
||||
const lexer = new Lexer();
|
||||
|
||||
lexer
|
||||
.addRule(/!/, function () {
|
||||
this.state = 5;
|
||||
return "BANG";
|
||||
})
|
||||
.addRule(/./, (m) => m, []);
|
||||
|
||||
lexer.setInput("a!b");
|
||||
expect(drain(lexer)).toEqual(["a", "BANG", "b"]);
|
||||
});
|
||||
|
||||
it("matches inclusive `[0]` rules from odd-numbered states", () => {
|
||||
const lexer = new Lexer();
|
||||
|
||||
lexer
|
||||
.addRule(/#/, function () {
|
||||
this.state = 1;
|
||||
})
|
||||
.addRule(/[a-z]+/, (m) => m);
|
||||
|
||||
lexer.setInput("ab#cd");
|
||||
expect(drain(lexer)).toEqual(["ab", "cd"]);
|
||||
});
|
||||
|
||||
it("does not match `[0]` rules from even non-zero states", () => {
|
||||
const lexer = new Lexer();
|
||||
|
||||
lexer
|
||||
.addRule(/#/, function () {
|
||||
this.state = 2;
|
||||
})
|
||||
.addRule(/[a-z]+/, (m) => m);
|
||||
|
||||
lexer.setInput("ab#cd");
|
||||
expect(lexer.lex()).toBe("ab");
|
||||
expect(() => lexer.lex()).toThrow(/Unexpected character/);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -1,35 +0,0 @@
|
||||
// @file TSConfig used by the web package during development.
|
||||
{
|
||||
"extends": "@goauthentik/tsconfig",
|
||||
"compilerOptions": {
|
||||
"types": ["node"],
|
||||
"checkJs": true,
|
||||
"allowJs": true,
|
||||
"composite": true,
|
||||
"resolveJsonModule": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"emitDeclarationOnly": true,
|
||||
"target": "esnext",
|
||||
"module": "preserve",
|
||||
"moduleResolution": "bundler",
|
||||
"lib": ["DOM", "DOM.Iterable", "ESNext"],
|
||||
|
||||
"noUncheckedIndexedAccess": true
|
||||
},
|
||||
"include": ["./**/*", "../**/*"],
|
||||
"exclude": [
|
||||
// ---
|
||||
"**/out/**/*",
|
||||
"**/dist/**/*",
|
||||
"storybook-static",
|
||||
// TODO: @lit/localize-tools v0.8.0 has a nullish coalescing typing error.
|
||||
// Remove when we upgrade past that.
|
||||
"scripts/pseudolocalize.mjs",
|
||||
"scripts/build-locales.mjs"
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"path": "../.."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -41,12 +41,9 @@ export default defineConfig({
|
||||
projects: [
|
||||
{
|
||||
test: {
|
||||
include: ["./test/unit/**/*.{test,spec}.ts", "**/*.unit.{test,spec}.ts"],
|
||||
name: "Unit Tests",
|
||||
include: ["./unit/**/*.{test,spec}.ts", "**/*.unit.{test,spec}.ts"],
|
||||
name: "unit",
|
||||
environment: "node",
|
||||
typecheck: {
|
||||
tsconfig: "./tsconfig.unit.json",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -54,7 +51,7 @@ export default defineConfig({
|
||||
setupFiles: ["./test/lit/setup.js"],
|
||||
|
||||
include: ["./browser/**/*.{test,spec}.ts", "**/*.browser.{test,spec}.ts"],
|
||||
name: "Browser Tests",
|
||||
name: "browser",
|
||||
browser: {
|
||||
enabled: true,
|
||||
provider: playwright(),
|
||||
|
||||
@@ -6255,6 +6255,18 @@ neprojde, když jedna nebo obě z vybraných možností jsou rovny nebo nad prah
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>Příloha autentikátoru</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>Není odesílána žádná preference</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>Neodstranitelný autentikátor, jako TouchID nebo Windows Hello</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>„Roamingový" autentikátor, jako YubiKey</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
<target>Maximální počet pokusů o registraci</target>
|
||||
@@ -6590,6 +6602,10 @@ neprojde, když jedna nebo obě z vybraných možností jsou rovny nebo nad prah
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>Vybrané zásady jsou provedeny při odeslání kroku k ověření dat.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
<target>Přesměrovat uživatele na jiný tok, potenciálně se všemi shromážděnými kontextovými informacemi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
<target>Statický</target>
|
||||
@@ -11048,6 +11064,15 @@ Vazby na skupiny/uživatele jsou kontrolovány vůči uživateli události.</tar
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -11060,140 +11085,11 @@ Vazby na skupiny/uživatele jsou kontrolovány vůči uživateli události.</tar
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -6281,6 +6281,18 @@ Beim Erstellen eines festen Auswahlfelds aktiviere „Als Ausdruck interpretiere
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>Authenticator-Anhang</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>Keine Präferenz wird gesendet</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>Ein nicht abnehmbarer Authentifikator, wie TouchID oder Windows Hello</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>Ein "Roaming"-Authentifikator, wie ein YubiKey</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
<target>Maximale Registrierungsversuche</target>
|
||||
@@ -6616,6 +6628,10 @@ Beim Erstellen eines festen Auswahlfelds aktiviere „Als Ausdruck interpretiere
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>Ausgewählte Richtlinien werden ausgeführt, wenn die Stage abgeschickt wird, um die Daten zu validieren.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
<target>Leitet den Benutzer zu einem anderen Flow weiter, ggf. mit dem gesamten gesammelten Kontext.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
<target>Statisch</target>
|
||||
@@ -11080,6 +11096,15 @@ Bindings zu Gruppen/Benutzern werden mit dem Benutzer des Ereignisses abgegliche
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -11092,140 +11117,11 @@ Bindings zu Gruppen/Benutzern werden mit dem Benutzer des Ereignisses abgegliche
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
158
web/xliff/en.xlf
158
web/xliff/en.xlf
@@ -4832,6 +4832,15 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<trans-unit id="s5fbaeb14f42815e5">
|
||||
<source>Authenticator Attachment</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
</trans-unit>
|
||||
@@ -5084,6 +5093,9 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<trans-unit id="s59691290a232c687">
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
</trans-unit>
|
||||
@@ -9065,6 +9077,15 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -9077,140 +9098,11 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -6219,6 +6219,18 @@ El valor de este campo se compara con el atributo de pertenencia del usuario.</t
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>Adjunto de Autenticador</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>No se envía ninguna preferencia</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>Un autenticador no extraíble, como TouchID o Windows Hello</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>Un autenticador "roaming", como una YubiKey</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
<target>Intentos máximos de registro</target>
|
||||
@@ -6552,6 +6564,10 @@ El valor de este campo se compara con el atributo de pertenencia del usuario.</t
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>Las políticas seleccionadas se ejecutan cuando se envía la etapa para validar los datos.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
<target>Redirigir al usuario a otro flujo, potencialmente con todo el contexto recopilado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
<target>Estático</target>
|
||||
@@ -11005,6 +11021,15 @@ Las vinculaciones a grupos/usuarios se verifican en función del usuario del eve
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -11017,140 +11042,11 @@ Las vinculaciones a grupos/usuarios se verifican en función del usuario del eve
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -6396,6 +6396,18 @@ läpäisy estyy kun jompi kumpi tai molemmat vaihtoehdot ylittävät raja-arvon.
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>Todentajan kytkentä</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>Etusijaisuutta ei lähetetä</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>Sisäänrakennettu todentaja, joten TouchID tai Windows Hello.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>"Roaming"-tyyppinen todentaja, kuten YubiKey.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
<target>Rekisteröintiyritysten enimmäismäärä</target>
|
||||
@@ -6731,6 +6743,10 @@ läpäisy estyy kun jompi kumpi tai molemmat vaihtoehdot ylittävät raja-arvon.
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>Valitut käytännöt suoritetaan vaiheen lähettämisen yhteydessä tietojen validoimiseksi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
<target>Ohjaa käyttäjä toiseen prosessiin, mahdollisesti kaiken kerätyn kontekstin kanssa.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
<target>Staattinen</target>
|
||||
@@ -11246,6 +11262,15 @@ Liitokset käyttäjiin/ryhmiin tarkistetaan tapahtuman käyttäjästä.</target>
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -11258,140 +11283,11 @@ Liitokset käyttäjiin/ryhmiin tarkistetaan tapahtuman käyttäjästä.</target>
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -6386,6 +6386,18 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>Lien à l'authentificateur</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>Aucune préférence n'est envoyée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>Un authentificateur inamovible, comme TouchID ou Windows Hello</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>Un authentificateur "itinérant", comme une YubiKey</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
<target>Nombre maximal de tentatives d'inscription</target>
|
||||
@@ -6721,6 +6733,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>Les politiques sélectionnées sont exécutées lorsque l'étape est soumise pour valider les données.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
<target>Rediriger l'utilisateur vers un autre flux, éventuellement avec le contexte</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
<target>Statique</target>
|
||||
@@ -11235,6 +11251,15 @@ Les liaisons avec les groupes/utilisateurs sont vérifiées par rapport à l'uti
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -11247,140 +11272,11 @@ Les liaisons avec les groupes/utilisateurs sont vérifiées par rapport à l'uti
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -6176,6 +6176,18 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>Allegato Autenticatore</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>Nessuna preferenza viene inviata</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>Un autenticatore non rimovibile, come TouchID o Windows Hello</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>Un autenticatore "roaming", come un YubiKey</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
<target>Numero massimo di tentativi di registrazione</target>
|
||||
@@ -6508,6 +6520,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>Le politiche selezionate vengono eseguite quando la fase viene inviata per convalidare i dati.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
<target>Reindirizza l'utente a un altro flusso, potenzialmente con tutto il contesto raccolto</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
<target>Statico</target>
|
||||
@@ -10954,6 +10970,15 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -10966,140 +10991,11 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -6390,6 +6390,18 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>認証器の接続方法</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>希望は送信されません</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>TouchID や Windows Hello のような取り外せない認証器</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>YubiKey のようなローミング認証器</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
<target>登録試行の最大数</target>
|
||||
@@ -6728,6 +6740,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>選択されたポリシーは、ステージが送信されてデータを検証するときに実行されます。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
<target>ユーザーを別のフローにリダイレクトします。可能であれば、集められたすべてのコンテキストを含めます。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
<target>スタティック</target>
|
||||
@@ -11236,6 +11252,15 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -11248,140 +11273,11 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -5946,6 +5946,18 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>인증기 첨부</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>기본 설정이 전송되지 않음</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>TouchID 또는 Windows Hello와 같은 제거할 수 없는 인증기</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>YubiKey 같은 "로밍" 인증기</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
<target>최대 등록 시도</target>
|
||||
@@ -6258,6 +6270,9 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>데이터 유효성 검사를 위해 스테이지가 제출될 때 선택한 정책이 실행됩니다.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
<target>정적</target>
|
||||
@@ -10606,6 +10621,15 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -10618,140 +10642,11 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -5723,6 +5723,18 @@ slaagt niet wanneer een of beide geselecteerde opties gelijk zijn aan of boven d
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>Authenticatorbijlage</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>Geen voorkeur wordt verzonden</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>Een niet-verwijderbare authenticator, zoals TouchID of Windows Hello</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>Een "roaming" authenticator, zoals een YubiKey</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
</trans-unit>
|
||||
@@ -6021,6 +6033,9 @@ slaagt niet wanneer een of beide geselecteerde opties gelijk zijn aan of boven d
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>Geselecteerde beleidsregels worden uitgevoerd wanneer de fase wordt ingediend om de gegevens te valideren.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
</trans-unit>
|
||||
@@ -10291,6 +10306,15 @@ Bindingen naar groepen/gebruikers worden gecontroleerd tegen de gebruiker van de
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -10303,140 +10327,11 @@ Bindingen naar groepen/gebruikers worden gecontroleerd tegen de gebruiker van de
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -5962,6 +5962,18 @@ Można tu używać tylko zasad, ponieważ dostęp jest sprawdzany przed uwierzyt
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>Załącznik uwierzytelniający</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>Żadne preferencje nie są wysyłane</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>Nieusuwalny token uwierzytelniający, taki jak TouchID lub Windows Hello</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>„Mobilne” uwierzytelniacz, taki jak YubiKey</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
</trans-unit>
|
||||
@@ -6267,6 +6279,9 @@ Można tu używać tylko zasad, ponieważ dostęp jest sprawdzany przed uwierzyt
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>Wybrane zasady są wykonywane po przesłaniu etapu w celu weryfikacji danych.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
</trans-unit>
|
||||
@@ -10630,6 +10645,15 @@ Powiązania z grupami/użytkownikami są sprawdzane względem użytkownika zdarz
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -10642,140 +10666,11 @@ Powiązania z grupami/użytkownikami są sprawdzane względem użytkownika zdarz
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -6390,6 +6390,18 @@ retorne uma lista para fornecer várias opções padrão.</target>
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>Anexação do autenticador</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>Nenhuma preferência é enviada</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>Um autenticador não removível, como TouchID ou Windows Hello</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>Um autenticador "itinerante", como um YubiKey</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
<target>Máximo de tentativas de registro</target>
|
||||
@@ -6725,6 +6737,10 @@ retorne uma lista para fornecer várias opções padrão.</target>
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>As políticas selecionadas são executadas quando o estágio é enviado para validar os dados.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
<target>Redirecionar o usuário para outro fluxo, potencialmente com todo o contexto reunido</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
<target>Estático</target>
|
||||
@@ -11228,6 +11244,15 @@ por exemplo: <x id="0" equiv-text="<code>"/>oci://registry.domain.tld/path
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -11240,140 +11265,11 @@ por exemplo: <x id="0" equiv-text="<code>"/>oci://registry.domain.tld/path
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -6012,6 +6012,18 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>Вложения аутентификатора</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>Предпочтения не отправляются</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>Несъемный аутентификатор, например TouchID или Windows Hello</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>Переносной аутентификатор, например YubiKey</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
</trans-unit>
|
||||
@@ -6320,6 +6332,9 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>Выбранные политики выполняются при отправке этапа для проверки данных.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
</trans-unit>
|
||||
@@ -10716,6 +10731,15 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -10728,140 +10752,11 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -6010,6 +6010,18 @@ Belirlenen seçeneklerden biri veya her ikisi de eşiğe eşit veya eşiğin üz
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>Kimlik Doğrulayıcı Eki</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>Tercih gönderilmez</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>TouchID veya Windows Hello gibi çıkarılamayan bir kimlik doğrulayıcı</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>YubiKey gibi bir "dolaşımda" kimlik doğrulayıcı</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
</trans-unit>
|
||||
@@ -6320,6 +6332,9 @@ Belirlenen seçeneklerden biri veya her ikisi de eşiğe eşit veya eşiğin üz
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>Seçilen ilkeler, verileri doğrulamak için aşama gönderildiğinde yürütülür.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
</trans-unit>
|
||||
@@ -10706,6 +10721,15 @@ Gruplara/kullanıcılara yapılan bağlamalar, etkinliğin kullanıcısına kar
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -10718,140 +10742,11 @@ Gruplara/kullanıcılara yapılan bağlamalar, etkinliğin kullanıcısına kar
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -6459,6 +6459,18 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>身份验证器附件</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>不发送偏好</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>不可移除的身份验证器,例如 TouchID 或 Windows Hello</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>像 YubiKey 这样的“漫游”身份验证器</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
<target>最大注册尝试次数</target>
|
||||
@@ -6795,6 +6807,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>当阶段被提交以验证数据时,执行选定的策略。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
<target>将用户重定向到另一个流程,可能包含所有已收集的上下文</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
<target>静态</target>
|
||||
@@ -11504,6 +11520,15 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -11516,140 +11541,11 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -5772,6 +5772,18 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Authenticator Attachment</source>
|
||||
<target>身分認證器外接裝置</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s502d2473587032e1">
|
||||
<source>No preference is sent</source>
|
||||
<target>不傳送建議選項</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s60cc554fde2676cb">
|
||||
<source>A non-removable authenticator, like TouchID or Windows Hello</source>
|
||||
<target>不可移除的身分認證器,例如 TouchID 或 Windows Hello</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>外接式的身分認證器,例如 YubiKey</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbd65aeeb8a3b9bbc">
|
||||
<source>Maximum registration attempts</source>
|
||||
</trans-unit>
|
||||
@@ -6074,6 +6086,9 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>Selected policies are executed when the stage is submitted to validate the data.</source>
|
||||
<target>當階段提交時,將執行所選政策以驗證資料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc487e11d5987dbb4">
|
||||
<source>Redirect the user to another flow, potentially with all gathered context</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sad9d5481474d4f5b">
|
||||
<source>Static</source>
|
||||
</trans-unit>
|
||||
@@ -10343,6 +10358,15 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="sdcd1a9744efdbd7e">
|
||||
<source>Choose Policy Type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf4eb7c0c8e92e6b2">
|
||||
<source>Whether the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8ab0176c9cf77b1a">
|
||||
<source>Hide from User Dashboard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0b5847edb7150911">
|
||||
<source>Whether this application will be shown on the User Dashboard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa5ed8446baaba70">
|
||||
<source>Negate Result</source>
|
||||
</trans-unit>
|
||||
@@ -10355,140 +10379,11 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s41938ae69656ef53">
|
||||
<source>User Fields</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s02b73793e5b4e1ba">
|
||||
<source>This flag is deprecated.</source>
|
||||
<trans-unit id="s977b2dff8b9def14">
|
||||
<source>User Dashboard - Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8655c52824caac63">
|
||||
<source>If checked, the launch URL will open in a new browser tab or window from the user's application library.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s9eda7101f63a8652">
|
||||
<source>Hide from My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s30f30e9c42594a33">
|
||||
<source>If checked, this application will not be shown on the user's My applications page.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc98037ccab57d329">
|
||||
<source>No preference: the browser may offer any available authenticator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s4611c85865abcba9">
|
||||
<source>Platform: a non-removable authenticator built into the device, such as Touch ID, Face ID, or Windows Hello</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0003d0e3fcdacabc">
|
||||
<source>Cross-platform: a roaming authenticator, such as a YubiKey or Google Titan</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc157c7dcb3d1b096">
|
||||
<source>Controls the authenticatorAttachment parameter sent to the browser during WebAuthn registration. If Hints are configured and this is left as 'No preference', a value is inferred from the selected hints for backward compatibility with older browsers.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1baea1b8ac34d554">
|
||||
<source>New Invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s03eef6107e28d042">
|
||||
<source>New Invitation options</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0832ff81b9665e6f">
|
||||
<source>Opens the new invitation wizard and binds the invitation to an existing enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc0819dc3d82d9320">
|
||||
<source>with Existing Enrollment Flow...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s79108cb25e7bf07b">
|
||||
<source>Opens the new invitation wizard, which will create a new enrollment flow and invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sb7809157a3ccf613">
|
||||
<source>with New Enrollment Flow and Invitation Stage...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="seb418067e7d6c6e2">
|
||||
<source>Create a new invitation with an enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfd74a380e957d0d3">
|
||||
<source>Enrollment Flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scc869d556216d748">
|
||||
<source>Invitation Details</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se1fba44a9b284052">
|
||||
<source>Invitation Link</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s967a2db7049dc90e">
|
||||
<source><x id="0" equiv-text="${step}"/> failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s971d4cc0ecd106b7">
|
||||
<source>Importing enrollment flow blueprint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sf3b89a70e20af6c8">
|
||||
<source>Blueprint validation failed</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa04b7204708f4f74">
|
||||
<source>Flow with slug "<x id="0" equiv-text="${slugToLookup}"/>" not found after import</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3354be88ad29d171">
|
||||
<source>Creating invitation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s07f41353777196ea">
|
||||
<source>The flow selected in the previous step. The invitation will be bound to this flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s7209a11f97da9aff">
|
||||
<source>No invitation available to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2772d8285b905006">
|
||||
<source>Failed to queue invitation emails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3b7910ab9c47a2e3">
|
||||
<source>No enrollment flows with invitation stages found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa3ca03297e00591c">
|
||||
<source>You can create a new enrollment flow and invitation stage right here, or cancel and bind an invitation stage to an existing flow manually.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s06db43e56ca76be8">
|
||||
<source>Create a new enrollment flow</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8acc687c55e8ccbf">
|
||||
<source>Only enrollment flows that have an invitation stage bound to them are listed here.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s5b3bafd8ffe553ec">
|
||||
<source>Flow name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s699cd34b0dcb4c56">
|
||||
<source>Name for the new enrollment flow.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s8fb6d1bb698d32a0">
|
||||
<source>Flow slug</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0211c07612cf8c97">
|
||||
<source>Invitation stage name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s42b97ef63fb1a795">
|
||||
<source>Name for the new invitation stage.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saaa9fd0d3ebc35aa">
|
||||
<source>Enrolled users are created as external (e.g. customers, guests). New users will be placed under users/external.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s726dff63487da085">
|
||||
<source>Enrolled users are created as internal (e.g. employees). New users will be placed under users/internal.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sc1358130ac327120">
|
||||
<source>If enabled, the stage will jump to the next stage when no invitation is given. If disabled, the flow will be cancelled without a valid invitation.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s09fdd952c6eaf7da">
|
||||
<source>No invitation was created.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s00febd85a4889bb1">
|
||||
<source>Redirect the user to a static URL or another flow, optionally with all gathered context.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sdbc1d47f0f0ed54d">
|
||||
<source>The element could not be loaded. This may be due to a missing import or a version mismatch.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scf8a3d48f9969535">
|
||||
<source>An element could not be loaded. Please try refreshing the page or clearing your cache.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="se2f00b2619675217">
|
||||
<source>Failed to load element</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1cf2298d92c327a6">
|
||||
<source>My Applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
<trans-unit id="s190cbdd5b62e4746">
|
||||
<source>User Dashboard</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -51,12 +51,12 @@
|
||||
"@rspack/binding-darwin-arm64": "1.7.11",
|
||||
"@rspack/binding-linux-arm64-gnu": "1.7.11",
|
||||
"@rspack/binding-linux-x64-gnu": "1.7.11",
|
||||
"@swc/core-darwin-arm64": "1.15.33",
|
||||
"@swc/core-linux-arm64-gnu": "1.15.33",
|
||||
"@swc/core-linux-x64-gnu": "1.15.33",
|
||||
"@swc/html-darwin-arm64": "1.15.33",
|
||||
"@swc/html-linux-arm64-gnu": "1.15.33",
|
||||
"@swc/html-linux-x64-gnu": "1.15.33",
|
||||
"@swc/core-darwin-arm64": "1.15.32",
|
||||
"@swc/core-linux-arm64-gnu": "1.15.32",
|
||||
"@swc/core-linux-x64-gnu": "1.15.32",
|
||||
"@swc/html-darwin-arm64": "1.15.32",
|
||||
"@swc/html-linux-arm64-gnu": "1.15.32",
|
||||
"@swc/html-linux-x64-gnu": "1.15.32",
|
||||
"lightningcss-darwin-arm64": "1.32.0",
|
||||
"lightningcss-linux-arm64-gnu": "1.32.0",
|
||||
"lightningcss-linux-x64-gnu": "1.32.0"
|
||||
|
||||
@@ -8,13 +8,66 @@ Invitations are another way to create a user, by inviting someone to join your a
|
||||
|
||||
You can configure invitations either by:
|
||||
|
||||
- using [pre-built blueprints](#use-pre-built-blueprints-to-configure-invitations) (recommended for quick setup).
|
||||
- using the [invitation wizard](#use-the-invitation-wizard) (recommended; creates the enrollment flow and the invitation in one guided process).
|
||||
- using [pre-built blueprints](#use-pre-built-blueprints-to-configure-invitations) (good for showcasing multiple flow variations).
|
||||
- [manually creating flows and stages](#manual-setup-without-blueprints) (for custom configurations).
|
||||
|
||||
:::info
|
||||
You can also create a [policy](../../../customize/policies/) to see if the invitation was ever used.
|
||||
:::
|
||||
|
||||
## Use the invitation wizard
|
||||
|
||||
The invitation wizard, available from the **Directory** > **Invitations** page in the Admin interface, walks you through creating an invitation and (optionally) the enrollment flow it binds to in a single guided process.
|
||||
|
||||
### Step 1. Open the wizard
|
||||
|
||||
1. Log in to authentik as an administrator and open the authentik Admin interface.
|
||||
2. Navigate to **Directory** > **Invitations**.
|
||||
3. Click the caret (>) next to the **New Invitation** button and choose how the wizard should handle the invitation:
|
||||
- **with Existing Enrollment Flow...**: bind the new invitation to an enrollment flow you already have. Only enrollment flows that have an invitation stage bound to them are listed. This is also what the **New Invitation** button does by default.
|
||||
- **with New Enrollment Flow and Invitation Stage...**: create a new minimal enrollment flow, including an invitation stage, then bind the invitation to it. Use this option when you don't yet have an enrollment flow set up, or when you want a separate enrollment flow for an invitation.
|
||||
|
||||
:::info Automatic flow selection
|
||||
If you choose **with Existing Enrollment Flow...** and only one eligible flow exists, the wizard skips the flow selection step and takes you straight to the invitation details.
|
||||
:::
|
||||
|
||||
### Step 2. Configure the enrollment flow
|
||||
|
||||
- If you picked an existing flow, select it from the **Enrollment flow** drop-down and click **Next**.
|
||||
- If you are creating a new flow, fill in:
|
||||
- **Flow name**: display name of the new enrollment flow.
|
||||
- **Flow slug**: the slug for the flow which is included in the URL.
|
||||
- **Invitation stage name**: name of the invitation stage that will be bound to the new flow.
|
||||
- **User type**: the user type for users enrolled via this flow.
|
||||
- **Continue flow without invitation**: when enabled, the flow proceeds to the next stage even when no invitation token is supplied. When disabled, the flow is cancelled if a valid invitation is not provided.
|
||||
|
||||
### Step 3. Configure the invitation details
|
||||
|
||||
- **Name**: provide a slug-style name for your invitation object (lowercase letters, numbers, and hyphens only).
|
||||
- **Expires**: select a date and time for when the invitation should expire. Defaults to 48 hours from now.
|
||||
- **Flow**: read-only; reflects the flow chosen in the previous step.
|
||||
- **Custom attributes**: (_optional_) YAML or JSON loaded into the flow's `prompt_data` context to pre-fill user information. Field keys must match the keys configured in the flow's [prompt stage](../../add-secure-apps/flows-stages/stages/prompt/index.md). See the [example custom attributes](#step-3-create-the-invitation-object) further down for sample payloads.
|
||||
- **Single use**: when enabled, the invitation is deleted after the first successful enrollment.
|
||||
|
||||
Click **Next** to create the invitation. If you chose **with New Enrollment Flow and Invitation Stage...**, the supporting blueprint is imported at this point as well.
|
||||
|
||||
### Step 4. Share the invitation
|
||||
|
||||
After the invitation is created, the wizard's final step shows the **Link to use the invitation**. From there you can:
|
||||
|
||||
- Click **Copy Link** to copy the invitation URL to your clipboard.
|
||||
- Click **Send via Email** to open the email step inside the wizard. Enter:
|
||||
- **To**: one email per line, or comma/semicolon separated. Each recipient receives a separate email.
|
||||
- **CC** / **BCC**: (_optional_) recipients for carbon and blind carbon copies.
|
||||
- **Template**: the email template to use (the default `Invitation` template is recommended).
|
||||
|
||||
Click **Send** to queue the emails. They are sent asynchronously by the background worker. Check **System Tasks** for delivery status.
|
||||
|
||||
:::note Email configuration required
|
||||
To send invitation emails, you must have email configured in authentik. Refer to the [Email configuration](../../install-config/email.mdx) documentation for details.
|
||||
:::
|
||||
|
||||
## Use pre-built blueprints to configure invitations
|
||||
|
||||
The fastest way to configure invitations in authentik is to use our pre-defined blueprints that have the necessary flows, stages, and prompts already included.
|
||||
|
||||
60
website/package-lock.json
generated
60
website/package-lock.json
generated
@@ -41,12 +41,12 @@
|
||||
"@rspack/binding-darwin-arm64": "1.7.11",
|
||||
"@rspack/binding-linux-arm64-gnu": "1.7.11",
|
||||
"@rspack/binding-linux-x64-gnu": "1.7.11",
|
||||
"@swc/core-darwin-arm64": "1.15.33",
|
||||
"@swc/core-linux-arm64-gnu": "1.15.33",
|
||||
"@swc/core-linux-x64-gnu": "1.15.33",
|
||||
"@swc/html-darwin-arm64": "1.15.33",
|
||||
"@swc/html-linux-arm64-gnu": "1.15.33",
|
||||
"@swc/html-linux-x64-gnu": "1.15.33",
|
||||
"@swc/core-darwin-arm64": "1.15.32",
|
||||
"@swc/core-linux-arm64-gnu": "1.15.32",
|
||||
"@swc/core-linux-x64-gnu": "1.15.32",
|
||||
"@swc/html-darwin-arm64": "1.15.32",
|
||||
"@swc/html-linux-arm64-gnu": "1.15.32",
|
||||
"@swc/html-linux-x64-gnu": "1.15.32",
|
||||
"lightningcss-darwin-arm64": "1.32.0",
|
||||
"lightningcss-linux-arm64-gnu": "1.32.0",
|
||||
"lightningcss-linux-x64-gnu": "1.32.0"
|
||||
@@ -163,12 +163,12 @@
|
||||
"@rspack/binding-darwin-arm64": "1.7.11",
|
||||
"@rspack/binding-linux-arm64-gnu": "1.7.11",
|
||||
"@rspack/binding-linux-x64-gnu": "1.7.11",
|
||||
"@swc/core-darwin-arm64": "1.15.33",
|
||||
"@swc/core-linux-arm64-gnu": "1.15.33",
|
||||
"@swc/core-linux-x64-gnu": "1.15.33",
|
||||
"@swc/html-darwin-arm64": "1.15.33",
|
||||
"@swc/html-linux-arm64-gnu": "1.15.33",
|
||||
"@swc/html-linux-x64-gnu": "1.15.33",
|
||||
"@swc/core-darwin-arm64": "1.15.32",
|
||||
"@swc/core-linux-arm64-gnu": "1.15.32",
|
||||
"@swc/core-linux-x64-gnu": "1.15.32",
|
||||
"@swc/html-darwin-arm64": "1.15.32",
|
||||
"@swc/html-linux-arm64-gnu": "1.15.32",
|
||||
"@swc/html-linux-x64-gnu": "1.15.32",
|
||||
"lightningcss-darwin-arm64": "1.32.0",
|
||||
"lightningcss-linux-arm64-gnu": "1.32.0",
|
||||
"lightningcss-linux-x64-gnu": "1.32.0"
|
||||
@@ -6849,9 +6849,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-darwin-arm64": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.33.tgz",
|
||||
"integrity": "sha512-N+L0uXhuO7FIfzqwgxmzv0zIpV0qEp8wPX3QQs2p4atjMoywup2JTeDlXPw+z9pWJGCae3JjM+tZ6myclI+2gA==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.32.tgz",
|
||||
"integrity": "sha512-/YWMvJDPu+AAwuUsM2G+DNQ/7zhodURGzdQyewEqcvgklAdDHs3LwQmLLnyn6SJl8DT8UOxkbzK+D1PmPeelRg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -6897,9 +6897,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-linux-arm64-gnu": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.33.tgz",
|
||||
"integrity": "sha512-TRJfnJbX3jqpxRDRoieMzRiCBS5jOmXNb3iQXmcgjFEHKLnAgK1RZRU8Cq1MsPqO4jAJp/ld1G4O3fXuxv85uw==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.32.tgz",
|
||||
"integrity": "sha512-oDzEkdl6D6BAWdMtU5KGO7y3HR5fJcvByNLyEk9+ugj8nP5Ovb7P4kBcStBXc4MPExFGQryehiINMlmY8HlclA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -6964,9 +6964,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/core-linux-x64-gnu": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.33.tgz",
|
||||
"integrity": "sha512-mGTH0YxmUN+x6vRN/I6NOk5X0ogNktkwPnJ94IMvR7QjhRDwL0O8RXEDhyUM0YtwWrryBOqaJQBX4zruxEPRGw==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.32.tgz",
|
||||
"integrity": "sha512-ERsjfGcj6CBmj3vJnGDO8m8rTvw6RqMcWo1dogOtNx3/+/0+NNpJiXDobJrr1GwInI/BHAEkvSFIH6d2LqPcUQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -7127,9 +7127,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/html-darwin-arm64": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/html-darwin-arm64/-/html-darwin-arm64-1.15.33.tgz",
|
||||
"integrity": "sha512-zyO6uMBfLyCh55wundAxKX+8P/f98ecuyir4VX6nTmn6y7x37ndB8f01LUrd9Tiq6eEAvDXLiqEUvuGjEc7Pmg==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/html-darwin-arm64/-/html-darwin-arm64-1.15.32.tgz",
|
||||
"integrity": "sha512-WgY386nwyz24cTJ+Nztd4cKvfPJexLYAzurSYDmuYxS3HihWoTFZWMDomTfM8yr2UCi8SwW+zTNAWxJxUaKESg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -7175,9 +7175,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/html-linux-arm64-gnu": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-gnu/-/html-linux-arm64-gnu-1.15.33.tgz",
|
||||
"integrity": "sha512-7tZ0IgmUslI9Extu/TpxJS0GjJoDx0j9zeq2cIidPdM/njSBpyRB7n4B292Q5WFVh7PcZl7WXqqqMczibQ27aA==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-gnu/-/html-linux-arm64-gnu-1.15.32.tgz",
|
||||
"integrity": "sha512-gvlByySjNDWX2FUIGVBWOhd00rySz0AOydQpuXCK0ldYbFVMby9oXbp2JVmE5UsB6J4YZqZh4ajmmqCGvFHi4Q==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -7242,9 +7242,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@swc/html-linux-x64-gnu": {
|
||||
"version": "1.15.33",
|
||||
"resolved": "https://registry.npmjs.org/@swc/html-linux-x64-gnu/-/html-linux-x64-gnu-1.15.33.tgz",
|
||||
"integrity": "sha512-JDNb4Uq+7g+23QuOtwWnP0/EqztWIHFFdQdeBIS5zx83YBG2dYRMdPAjnHJWh2YRZxdepd8q6S9MUIxpSrouAg==",
|
||||
"version": "1.15.32",
|
||||
"resolved": "https://registry.npmjs.org/@swc/html-linux-x64-gnu/-/html-linux-x64-gnu-1.15.32.tgz",
|
||||
"integrity": "sha512-IveuScZfAwDZEBs6pTvdG/MwGyMPuxp74l9ngp2PbUboVBIfUS894kATBaBuSBYXajZ4v4wqv01PGM81rUhGQg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
||||
@@ -39,12 +39,12 @@
|
||||
"@rspack/binding-darwin-arm64": "1.7.11",
|
||||
"@rspack/binding-linux-arm64-gnu": "1.7.11",
|
||||
"@rspack/binding-linux-x64-gnu": "1.7.11",
|
||||
"@swc/core-darwin-arm64": "1.15.33",
|
||||
"@swc/core-linux-arm64-gnu": "1.15.33",
|
||||
"@swc/core-linux-x64-gnu": "1.15.33",
|
||||
"@swc/html-darwin-arm64": "1.15.33",
|
||||
"@swc/html-linux-arm64-gnu": "1.15.33",
|
||||
"@swc/html-linux-x64-gnu": "1.15.33",
|
||||
"@swc/core-darwin-arm64": "1.15.32",
|
||||
"@swc/core-linux-arm64-gnu": "1.15.32",
|
||||
"@swc/core-linux-x64-gnu": "1.15.32",
|
||||
"@swc/html-darwin-arm64": "1.15.32",
|
||||
"@swc/html-linux-arm64-gnu": "1.15.32",
|
||||
"@swc/html-linux-x64-gnu": "1.15.32",
|
||||
"lightningcss-darwin-arm64": "1.32.0",
|
||||
"lightningcss-linux-arm64-gnu": "1.32.0",
|
||||
"lightningcss-linux-x64-gnu": "1.32.0"
|
||||
|
||||
Reference in New Issue
Block a user