mirror of
https://github.com/goauthentik/authentik
synced 2026-05-14 10:56:52 +02:00
Compare commits
49 Commits
fix-make-a
...
sdko/remov
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ee9e67501 | ||
|
|
2afe5b5a7b | ||
|
|
af4ccba51e | ||
|
|
d09260f64f | ||
|
|
923c1f465a | ||
|
|
e5208185f9 | ||
|
|
b5deeaa822 | ||
|
|
cceb952429 | ||
|
|
aa5d75c1db | ||
|
|
30495c54f5 | ||
|
|
1a5ac932b5 | ||
|
|
c69b00b580 | ||
|
|
cf5d82a87b | ||
|
|
fd4d61ae9f | ||
|
|
bb8a0373b5 | ||
|
|
c4ba35cfdd | ||
|
|
699e0c06f5 | ||
|
|
b16b5a8e5b | ||
|
|
2efbb9a4c7 | ||
|
|
f8cfd319fd | ||
|
|
b9f429eec8 | ||
|
|
edad4f109e | ||
|
|
b51d498ea2 | ||
|
|
df5c2cc662 | ||
|
|
7e1e7d5e8c | ||
|
|
f2c399af26 | ||
|
|
5b7ba191dc | ||
|
|
0fa1a6c017 | ||
|
|
ec75fb6089 | ||
|
|
82925994b8 | ||
|
|
6967f6f6d9 | ||
|
|
c4a938a6dc | ||
|
|
dec8a03560 | ||
|
|
a8e69b391e | ||
|
|
7315d126d5 | ||
|
|
817bca9c7d | ||
|
|
17083e2e99 | ||
|
|
b8a4ccebb3 | ||
|
|
38fdb4c4e8 | ||
|
|
74b1399ddb | ||
|
|
af51ed4d23 | ||
|
|
251e031a27 | ||
|
|
b65bc06a3d | ||
|
|
97ea93bdcd | ||
|
|
9f2c2988a3 | ||
|
|
c84ebf2088 | ||
|
|
c8efb7b82f | ||
|
|
2c452306cf | ||
|
|
c810beca71 |
8
.github/actions/setup/action.yml
vendored
8
.github/actions/setup/action.yml
vendored
@@ -25,7 +25,7 @@ runs:
|
||||
if: ${{ contains(inputs.dependencies, 'system') || contains(inputs.dependencies, 'python') }}
|
||||
uses: gerlero/apt-install@f4fa5265092af9e750549565d28c99aec7189639
|
||||
with:
|
||||
packages: libpq-dev openssl libxmlsec1-dev pkg-config gettext krb5-multidev libkrb5-dev heimdal-multidev libclang-dev krb5-kdc krb5-user krb5-admin-server
|
||||
packages: libpq-dev openssl libxmlsec1-dev pkg-config gettext libclang-dev libkadm5clnt-mit12 libkadm5clnt7t64-heimdal libkrb5-dev krb5-kdc krb5-user krb5-admin-server
|
||||
update: true
|
||||
upgrade: false
|
||||
install-recommends: false
|
||||
@@ -52,19 +52,19 @@ runs:
|
||||
run: uv sync --all-extras --dev --locked
|
||||
- name: Setup rust (stable)
|
||||
if: ${{ contains(inputs.dependencies, 'rust') && !contains(inputs.dependencies, 'rust-nightly') }}
|
||||
uses: actions-rust-lang/setup-rust-toolchain@2b1f5e9b395427c92ee4e3331786ca3c37afe2d7 # v1
|
||||
uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1
|
||||
with:
|
||||
rustflags: ""
|
||||
- name: Setup rust (nightly)
|
||||
if: ${{ contains(inputs.dependencies, 'rust-nightly') }}
|
||||
uses: actions-rust-lang/setup-rust-toolchain@2b1f5e9b395427c92ee4e3331786ca3c37afe2d7 # v1
|
||||
uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 # v1
|
||||
with:
|
||||
toolchain: nightly
|
||||
components: rustfmt
|
||||
rustflags: ""
|
||||
- name: Setup rust dependencies
|
||||
if: ${{ contains(inputs.dependencies, 'rust') }}
|
||||
uses: taiki-e/install-action@711e1c3275189d76dcc4d34ddea63bf96ac49090 # v2
|
||||
uses: taiki-e/install-action@3fa6878dc4ae603f73960271565a082bf196ab96 # v2
|
||||
with:
|
||||
tool: cargo-deny cargo-machete cargo-llvm-cov nextest
|
||||
- name: Setup node (web)
|
||||
|
||||
6
.github/workflows/qa-codeql.yml
vendored
6
.github/workflows/qa-codeql.yml
vendored
@@ -28,10 +28,10 @@ jobs:
|
||||
- name: Setup authentik env
|
||||
uses: ./.github/actions/setup
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v4
|
||||
uses: github/codeql-action/init@v4.35.3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v4
|
||||
uses: github/codeql-action/autobuild@v4.35.3
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v4
|
||||
uses: github/codeql-action/analyze@v4.35.3
|
||||
|
||||
6
.github/workflows/release-branch-off.yml
vendored
6
.github/workflows/release-branch-off.yml
vendored
@@ -5,7 +5,7 @@ on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
next_version:
|
||||
description: Next major version (for example, if releasing 2042.2, this is 2042.4)
|
||||
description: Next version (for example, if you're currently releasing 2026.5, then enter 2026.8)
|
||||
required: true
|
||||
type: string
|
||||
|
||||
@@ -68,10 +68,14 @@ jobs:
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
- name: Setup authentik env
|
||||
uses: ./.github/actions/setup
|
||||
with:
|
||||
dependencies: "system,python,go,node,runtime,rust-nightly"
|
||||
- name: Run migrations
|
||||
run: make migrate
|
||||
- name: Bump version
|
||||
run: "make bump version=${{ inputs.next_version }}.0-rc1"
|
||||
- name: Re-generate API Clients
|
||||
run: make gen
|
||||
- name: Create pull request
|
||||
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v7
|
||||
with:
|
||||
|
||||
2
.github/workflows/release-publish.yml
vendored
2
.github/workflows/release-publish.yml
vendored
@@ -191,7 +191,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v5
|
||||
- uses: aws-actions/configure-aws-credentials@ec61189d14ec14c8efccab744f656cffd0e33f37 # v6.1.0
|
||||
- uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 # v6.1.1
|
||||
with:
|
||||
role-to-assume: "arn:aws:iam::016170277896:role/github_goauthentik_authentik"
|
||||
aws-region: ${{ env.AWS_REGION }}
|
||||
|
||||
4
.github/workflows/release-tag.yml
vendored
4
.github/workflows/release-tag.yml
vendored
@@ -82,10 +82,14 @@ jobs:
|
||||
token: "${{ steps.app-token.outputs.token }}"
|
||||
- name: Setup authentik env
|
||||
uses: ./.github/actions/setup
|
||||
with:
|
||||
dependencies: "system,python,go,node,runtime,rust-nightly"
|
||||
- name: Run migrations
|
||||
run: make migrate
|
||||
- name: Bump version
|
||||
run: "make bump version=${{ inputs.version }}"
|
||||
- name: Re-generate API Clients
|
||||
run: make gen
|
||||
- name: Commit and push
|
||||
run: |
|
||||
# ID from https://api.github.com/users/authentik-automation[bot]
|
||||
|
||||
28
Cargo.lock
generated
28
Cargo.lock
generated
@@ -1744,16 +1744,6 @@ dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iri-string"
|
||||
version = "0.7.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d8e7418f59cc01c88316161279a7f665217ae316b388e58a0d10e29f54f1e5eb"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is_terminal_polyfill"
|
||||
version = "1.70.2"
|
||||
@@ -3203,9 +3193,9 @@ checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
|
||||
|
||||
[[package]]
|
||||
name = "sentry"
|
||||
version = "0.48.0"
|
||||
version = "0.48.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e8ac94aab850a23d7507307cc505332ed2bafd36c65930dfc5c43610f9e9b477"
|
||||
checksum = "b93b3e19f45495ddd41d8222a152c48c84f6ba45abe9c69e2527e9cdea29bb5b"
|
||||
dependencies = [
|
||||
"cfg_aliases",
|
||||
"httpdate",
|
||||
@@ -3400,9 +3390,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "serde_with"
|
||||
version = "3.18.0"
|
||||
version = "3.19.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f"
|
||||
checksum = "f05839ce67618e14a09b286535c0d9c94e85ef25469b0e13cb4f844e5593eb19"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"chrono",
|
||||
@@ -3934,9 +3924,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.52.1"
|
||||
version = "1.52.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6"
|
||||
checksum = "110a78583f19d5cdb2c5ccf321d1290344e71313c6c37d43520d386027d18386"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"libc",
|
||||
@@ -4082,21 +4072,21 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "tower-http"
|
||||
version = "0.6.8"
|
||||
version = "0.6.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
|
||||
checksum = "68d6fdd9f81c2819c9a8b0e0cd91660e7746a8e6ea2ba7c6b2b057985f6bcb51"
|
||||
dependencies = [
|
||||
"bitflags 2.11.0",
|
||||
"bytes",
|
||||
"futures-util",
|
||||
"http",
|
||||
"http-body",
|
||||
"iri-string",
|
||||
"pin-project-lite",
|
||||
"tokio",
|
||||
"tower",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"url",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -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.48.1", default-features = false, features = [
|
||||
"backtrace",
|
||||
"contexts",
|
||||
"debug-images",
|
||||
@@ -80,7 +80,7 @@ sentry = { version = "= 0.48.0", default-features = false, features = [
|
||||
serde = { version = "= 1.0.228", features = ["derive"] }
|
||||
serde_json = "= 1.0.149"
|
||||
serde_repr = "= 0.1.20"
|
||||
serde_with = { version = "= 3.18.0", default-features = false, features = [
|
||||
serde_with = { version = "= 3.19.0", default-features = false, features = [
|
||||
"base64",
|
||||
] }
|
||||
sqlx = { version = "= 0.8.6", default-features = false, features = [
|
||||
@@ -97,12 +97,12 @@ sqlx = { version = "= 0.8.6", default-features = false, features = [
|
||||
tempfile = "= 3.27.0"
|
||||
thiserror = "= 2.0.18"
|
||||
time = { version = "= 0.3.47", features = ["macros"] }
|
||||
tokio = { version = "= 1.52.1", features = ["full", "tracing"] }
|
||||
tokio = { version = "= 1.52.2", features = ["full", "tracing"] }
|
||||
tokio-retry2 = "= 0.9.1"
|
||||
tokio-rustls = "= 0.26.4"
|
||||
tokio-util = { version = "= 0.7.18", features = ["full"] }
|
||||
tower = "= 0.5.3"
|
||||
tower-http = { version = "= 0.6.8", features = ["timeout"] }
|
||||
tower-http = { version = "= 0.6.10", features = ["timeout"] }
|
||||
tracing = "= 0.1.44"
|
||||
tracing-error = "= 0.2.1"
|
||||
tracing-subscriber = { version = "= 0.3.23", features = [
|
||||
|
||||
2
Makefile
2
Makefile
@@ -73,7 +73,7 @@ rust-test: ## Run the Rust tests
|
||||
$(CARGO) nextest run --workspace
|
||||
|
||||
test: ## Run the server tests and produce a coverage report (locally)
|
||||
$(UV) run coverage run manage.py test --keepdb $(or $(filter-out $@ all,$(MAKECMDGOALS)),authentik)
|
||||
$(UV) run coverage run manage.py test --keepdb $(or $(filter-out $@,$(MAKECMDGOALS)),authentik)
|
||||
$(UV) run coverage combine
|
||||
$(UV) run coverage html
|
||||
$(UV) run coverage report
|
||||
|
||||
@@ -31,7 +31,7 @@ entries:
|
||||
slug: "%(uid)s-source"
|
||||
attrs:
|
||||
name: "%(uid)s-source"
|
||||
provider_type: azuread
|
||||
provider_type: entraid
|
||||
consumer_key: "%(uid)s"
|
||||
consumer_secret: "%(uid)s"
|
||||
icon: https://goauthentik.io/img/icon.png
|
||||
|
||||
@@ -7,13 +7,6 @@ from authentik.lib.config import CONFIG, ENV_PREFIX
|
||||
from authentik.lib.utils.time import fqdn_rand
|
||||
from authentik.tasks.schedules.common import ScheduleSpec
|
||||
|
||||
# TODO: Deprecated metric - remove in 2024.2 or later
|
||||
GAUGE_TASKS = Gauge(
|
||||
"authentik_system_tasks",
|
||||
"System tasks and their status",
|
||||
["tenant", "task_name", "task_uid", "status"],
|
||||
)
|
||||
|
||||
SYSTEM_TASK_TIME = Histogram(
|
||||
"authentik_system_tasks_time_seconds",
|
||||
"Runtime of system tasks",
|
||||
|
||||
@@ -49,15 +49,6 @@ class LogEventSerializer(PassiveSerializer):
|
||||
event = CharField()
|
||||
attributes = DictField()
|
||||
|
||||
# TODO(2024.6?): This is a migration helper to return a correct API response for logs that
|
||||
# have been saved in an older format (mostly just list[str] with just the messages)
|
||||
def to_representation(self, instance):
|
||||
if isinstance(instance, str):
|
||||
instance = LogEvent(instance, "", "")
|
||||
elif isinstance(instance, list):
|
||||
instance = [LogEvent(x, "", "") for x in instance]
|
||||
return super().to_representation(instance)
|
||||
|
||||
|
||||
@contextmanager
|
||||
def capture_logs(log_default_output=True) -> Generator[list[LogEvent]]:
|
||||
|
||||
@@ -61,6 +61,11 @@ class SAMLProviderSerializer(ProviderSerializer):
|
||||
url_download_metadata = SerializerMethodField()
|
||||
url_issuer = SerializerMethodField()
|
||||
|
||||
# Unified SAML endpoint (primary)
|
||||
url_unified = SerializerMethodField()
|
||||
url_unified_init = SerializerMethodField()
|
||||
|
||||
# Legacy endpoints (for backward compatibility)
|
||||
url_sso_post = SerializerMethodField()
|
||||
url_sso_redirect = SerializerMethodField()
|
||||
url_sso_init = SerializerMethodField()
|
||||
@@ -107,6 +112,36 @@ class SAMLProviderSerializer(ProviderSerializer):
|
||||
except Provider.application.RelatedObjectDoesNotExist:
|
||||
return DEFAULT_ISSUER
|
||||
|
||||
def get_url_unified(self, instance: SAMLProvider) -> str:
|
||||
"""Get unified SAML endpoint URL (handles SSO and SLO)"""
|
||||
if "request" not in self._context:
|
||||
return ""
|
||||
request: HttpRequest = self._context["request"]._request
|
||||
try:
|
||||
return request.build_absolute_uri(
|
||||
reverse(
|
||||
"authentik_providers_saml:base",
|
||||
kwargs={"application_slug": instance.application.slug},
|
||||
)
|
||||
)
|
||||
except Provider.application.RelatedObjectDoesNotExist:
|
||||
return "-"
|
||||
|
||||
def get_url_unified_init(self, instance: SAMLProvider) -> str:
|
||||
"""Get IdP-initiated SAML URL"""
|
||||
if "request" not in self._context:
|
||||
return ""
|
||||
request: HttpRequest = self._context["request"]._request
|
||||
try:
|
||||
return request.build_absolute_uri(
|
||||
reverse(
|
||||
"authentik_providers_saml:init",
|
||||
kwargs={"application_slug": instance.application.slug},
|
||||
)
|
||||
)
|
||||
except Provider.application.RelatedObjectDoesNotExist:
|
||||
return "-"
|
||||
|
||||
def get_url_sso_post(self, instance: SAMLProvider) -> str:
|
||||
"""Get SSO Post URL"""
|
||||
if "request" not in self._context:
|
||||
@@ -243,6 +278,8 @@ class SAMLProviderSerializer(ProviderSerializer):
|
||||
"default_name_id_policy",
|
||||
"url_download_metadata",
|
||||
"url_issuer",
|
||||
"url_unified",
|
||||
"url_unified_init",
|
||||
"url_sso_post",
|
||||
"url_sso_redirect",
|
||||
"url_sso_init",
|
||||
|
||||
@@ -241,7 +241,7 @@ class SAMLProvider(Provider):
|
||||
"""Use IDP-Initiated SAML flow as launch URL"""
|
||||
try:
|
||||
return reverse(
|
||||
"authentik_providers_saml:sso-init",
|
||||
"authentik_providers_saml:init",
|
||||
kwargs={"application_slug": self.application.slug},
|
||||
)
|
||||
except Provider.application.RelatedObjectDoesNotExist:
|
||||
|
||||
@@ -81,54 +81,35 @@ class MetadataProcessor:
|
||||
element.text = name_id_format
|
||||
yield element
|
||||
|
||||
def _get_unified_url(self) -> str:
|
||||
"""Get the unified SAML endpoint URL"""
|
||||
return self.http_request.build_absolute_uri(
|
||||
reverse(
|
||||
"authentik_providers_saml:base",
|
||||
kwargs={"application_slug": self.provider.application.slug},
|
||||
)
|
||||
)
|
||||
|
||||
def get_sso_bindings(self) -> Iterator[Element]:
|
||||
"""Get all Bindings supported"""
|
||||
binding_url_map = {
|
||||
(SAML_BINDING_REDIRECT, "SingleSignOnService"): self.http_request.build_absolute_uri(
|
||||
reverse(
|
||||
"authentik_providers_saml:sso-redirect",
|
||||
kwargs={"application_slug": self.provider.application.slug},
|
||||
)
|
||||
),
|
||||
(SAML_BINDING_POST, "SingleSignOnService"): self.http_request.build_absolute_uri(
|
||||
reverse(
|
||||
"authentik_providers_saml:sso-post",
|
||||
kwargs={"application_slug": self.provider.application.slug},
|
||||
)
|
||||
),
|
||||
}
|
||||
for binding_svc, url in binding_url_map.items():
|
||||
binding, svc = binding_svc
|
||||
"""Get all SSO Bindings - both point to unified endpoint"""
|
||||
unified_url = self._get_unified_url()
|
||||
for binding in [SAML_BINDING_REDIRECT, SAML_BINDING_POST]:
|
||||
if self.force_binding and self.force_binding != binding:
|
||||
continue
|
||||
element = Element(f"{{{NS_SAML_METADATA}}}{svc}")
|
||||
element = Element(f"{{{NS_SAML_METADATA}}}SingleSignOnService")
|
||||
element.attrib["Binding"] = binding
|
||||
element.attrib["Location"] = url
|
||||
element.attrib["Location"] = unified_url
|
||||
yield element
|
||||
|
||||
def get_slo_bindings(self) -> Iterator[Element]:
|
||||
"""Get all Bindings supported"""
|
||||
binding_url_map = {
|
||||
(SAML_BINDING_REDIRECT, "SingleLogoutService"): self.http_request.build_absolute_uri(
|
||||
reverse(
|
||||
"authentik_providers_saml:slo-redirect",
|
||||
kwargs={"application_slug": self.provider.application.slug},
|
||||
)
|
||||
),
|
||||
(SAML_BINDING_POST, "SingleLogoutService"): self.http_request.build_absolute_uri(
|
||||
reverse(
|
||||
"authentik_providers_saml:slo-post",
|
||||
kwargs={"application_slug": self.provider.application.slug},
|
||||
)
|
||||
),
|
||||
}
|
||||
for binding_svc, url in binding_url_map.items():
|
||||
binding, svc = binding_svc
|
||||
"""Get all SLO Bindings - both point to unified endpoint"""
|
||||
unified_url = self._get_unified_url()
|
||||
for binding in [SAML_BINDING_REDIRECT, SAML_BINDING_POST]:
|
||||
if self.force_binding and self.force_binding != binding:
|
||||
continue
|
||||
element = Element(f"{{{NS_SAML_METADATA}}}{svc}")
|
||||
element = Element(f"{{{NS_SAML_METADATA}}}SingleLogoutService")
|
||||
element.attrib["Binding"] = binding
|
||||
element.attrib["Location"] = url
|
||||
element.attrib["Location"] = unified_url
|
||||
yield element
|
||||
|
||||
def _prepare_signature(self, entity_descriptor: _Element):
|
||||
|
||||
@@ -4,19 +4,26 @@ from django.urls import path
|
||||
|
||||
from authentik.providers.saml.api.property_mappings import SAMLPropertyMappingViewSet
|
||||
from authentik.providers.saml.api.providers import SAMLProviderViewSet
|
||||
from authentik.providers.saml.views import metadata, sso
|
||||
from authentik.providers.saml.views import metadata, sso, unified
|
||||
from authentik.providers.saml.views.sp_slo import (
|
||||
SPInitiatedSLOBindingPOSTView,
|
||||
SPInitiatedSLOBindingRedirectView,
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
# Base path for Issuer/Entity ID
|
||||
# Unified Endpoint - handles SSO and SLO based on message type
|
||||
path(
|
||||
"<slug:application_slug>/",
|
||||
sso.SAMLSSOBindingRedirectView.as_view(),
|
||||
unified.SAMLUnifiedView.as_view(),
|
||||
name="base",
|
||||
),
|
||||
# IdP-initiated
|
||||
path(
|
||||
"<slug:application_slug>/init/",
|
||||
sso.SAMLSSOBindingInitView.as_view(),
|
||||
name="init",
|
||||
),
|
||||
# LEGACY Endpoints (backward compatibility)
|
||||
# SSO Bindings
|
||||
path(
|
||||
"<slug:application_slug>/sso/binding/redirect/",
|
||||
|
||||
118
authentik/providers/saml/views/unified.py
Normal file
118
authentik/providers/saml/views/unified.py
Normal file
@@ -0,0 +1,118 @@
|
||||
"""Unified SAML endpoint - handles SSO and SLO based on message type"""
|
||||
|
||||
from base64 import b64decode
|
||||
|
||||
from defusedxml.lxml import fromstring
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.views import View
|
||||
from django.views.decorators.clickjacking import xframe_options_sameorigin
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from structlog.stdlib import get_logger
|
||||
|
||||
from authentik.common.saml.constants import NS_MAP
|
||||
from authentik.flows.views.executor import SESSION_KEY_POST
|
||||
from authentik.lib.views import bad_request_message
|
||||
from authentik.providers.saml.utils.encoding import decode_base64_and_inflate
|
||||
from authentik.providers.saml.views.flows import (
|
||||
REQUEST_KEY_SAML_REQUEST,
|
||||
REQUEST_KEY_SAML_RESPONSE,
|
||||
)
|
||||
from authentik.providers.saml.views.sp_slo import (
|
||||
SPInitiatedSLOBindingPOSTView,
|
||||
SPInitiatedSLOBindingRedirectView,
|
||||
)
|
||||
from authentik.providers.saml.views.sso import (
|
||||
SAMLSSOBindingPOSTView,
|
||||
SAMLSSOBindingRedirectView,
|
||||
)
|
||||
|
||||
LOGGER = get_logger()
|
||||
|
||||
# SAML message type constants
|
||||
SAML_MESSAGE_TYPE_AUTHN_REQUEST = "AuthnRequest"
|
||||
SAML_MESSAGE_TYPE_LOGOUT_REQUEST = "LogoutRequest"
|
||||
|
||||
|
||||
def detect_saml_message_type(saml_request: str, is_post_binding: bool) -> str | None:
|
||||
"""Parse SAML request to determine if AuthnRequest or LogoutRequest."""
|
||||
try:
|
||||
if is_post_binding:
|
||||
decoded_xml = b64decode(saml_request.encode())
|
||||
else:
|
||||
decoded_xml = decode_base64_and_inflate(saml_request)
|
||||
|
||||
root = fromstring(decoded_xml)
|
||||
if len(root.xpath("//samlp:AuthnRequest", namespaces=NS_MAP)):
|
||||
return SAML_MESSAGE_TYPE_AUTHN_REQUEST
|
||||
if len(root.xpath("//samlp:LogoutRequest", namespaces=NS_MAP)):
|
||||
return SAML_MESSAGE_TYPE_LOGOUT_REQUEST
|
||||
return None
|
||||
except Exception: # noqa: BLE001
|
||||
return None
|
||||
|
||||
|
||||
@method_decorator(xframe_options_sameorigin, name="dispatch")
|
||||
@method_decorator(csrf_exempt, name="dispatch")
|
||||
class SAMLUnifiedView(View):
|
||||
"""Unified SAML endpoint - handles SSO and SLO based on message type.
|
||||
|
||||
The operation type is determined by parsing
|
||||
the incoming SAML message:
|
||||
- AuthnRequest -> SSO flow (delegates to SAMLSSOBindingRedirectView/POSTView)
|
||||
- LogoutRequest -> SLO flow (delegates to SPInitiatedSLOBindingRedirectView/POSTView)
|
||||
- LogoutResponse -> SLO completion (delegates to SPInitiatedSLOBindingRedirectView/POSTView)
|
||||
"""
|
||||
|
||||
def dispatch(self, request: HttpRequest, application_slug: str) -> HttpResponse:
|
||||
"""Route the request based on SAML message type."""
|
||||
# ak user was not logged in, redirected to login, and is back w POST payload in session
|
||||
if SESSION_KEY_POST in request.session:
|
||||
return self._delegate_to_sso(request, application_slug, is_post_binding=True)
|
||||
|
||||
# Determine binding from HTTP method
|
||||
is_post_binding = request.method == "POST"
|
||||
data = request.POST if is_post_binding else request.GET
|
||||
|
||||
# LogoutResponse - delegate to SLO view (handles it in dispatch)
|
||||
if REQUEST_KEY_SAML_RESPONSE in data:
|
||||
return self._delegate_to_slo(request, application_slug, is_post_binding)
|
||||
|
||||
# Check for SAML request
|
||||
if REQUEST_KEY_SAML_REQUEST not in data:
|
||||
LOGGER.info("SAML payload missing")
|
||||
return bad_request_message(request, "The SAML request payload is missing.")
|
||||
|
||||
# Detect message type and delegate
|
||||
saml_request = data[REQUEST_KEY_SAML_REQUEST]
|
||||
message_type = detect_saml_message_type(saml_request, is_post_binding)
|
||||
|
||||
if message_type == SAML_MESSAGE_TYPE_AUTHN_REQUEST:
|
||||
return self._delegate_to_sso(request, application_slug, is_post_binding)
|
||||
elif message_type == SAML_MESSAGE_TYPE_LOGOUT_REQUEST:
|
||||
return self._delegate_to_slo(request, application_slug, is_post_binding)
|
||||
else:
|
||||
LOGGER.warning("Unknown SAML message type", message_type=message_type)
|
||||
return bad_request_message(
|
||||
request, f"Unsupported SAML message type: {message_type or 'unknown'}"
|
||||
)
|
||||
|
||||
def _delegate_to_sso(
|
||||
self, request: HttpRequest, application_slug: str, is_post_binding: bool
|
||||
) -> HttpResponse:
|
||||
"""Delegate to the appropriate SSO view."""
|
||||
if is_post_binding:
|
||||
view = SAMLSSOBindingPOSTView.as_view()
|
||||
else:
|
||||
view = SAMLSSOBindingRedirectView.as_view()
|
||||
return view(request, application_slug=application_slug)
|
||||
|
||||
def _delegate_to_slo(
|
||||
self, request: HttpRequest, application_slug: str, is_post_binding: bool
|
||||
) -> HttpResponse:
|
||||
"""Delegate to the appropriate SLO view."""
|
||||
if is_post_binding:
|
||||
view = SPInitiatedSLOBindingPOSTView.as_view()
|
||||
else:
|
||||
view = SPInitiatedSLOBindingRedirectView.as_view()
|
||||
return view(request, application_slug=application_slug)
|
||||
@@ -10,7 +10,6 @@ LOGGER = get_logger()
|
||||
|
||||
AUTHENTIK_SOURCES_OAUTH_TYPES = [
|
||||
"authentik.sources.oauth.types.apple",
|
||||
"authentik.sources.oauth.types.azure_ad",
|
||||
"authentik.sources.oauth.types.discord",
|
||||
"authentik.sources.oauth.types.entra_id",
|
||||
"authentik.sources.oauth.types.facebook",
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 5.2.14 on 2026-05-09 19:01
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
def migrate_azuread_to_entraid(apps, schema_editor):
|
||||
OAuthSource = apps.get_model("authentik_sources_oauth", "OAuthSource")
|
||||
|
||||
db_alias = schema_editor.connection.alias
|
||||
OAuthSource.objects.using(db_alias).filter(provider_type="azuread").update(
|
||||
provider_type="entraid"
|
||||
)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("authentik_sources_oauth", "0013_useroauthsourceconnection_refresh_token"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(migrate_azuread_to_entraid, migrations.RunPython.noop),
|
||||
]
|
||||
@@ -251,17 +251,6 @@ class GoogleOAuthSource(CreatableType, OAuthSource):
|
||||
verbose_name_plural = _("Google OAuth Sources")
|
||||
|
||||
|
||||
class AzureADOAuthSource(CreatableType, OAuthSource):
|
||||
"""(Deprecated) Social Login using Azure AD."""
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
verbose_name = _("Azure AD OAuth Source")
|
||||
verbose_name_plural = _("Azure AD OAuth Sources")
|
||||
|
||||
|
||||
# TODO: When removing this, add a migration for OAuthSource that sets
|
||||
# provider_type to `entraid` if it is currently `azuread`
|
||||
class EntraIDOAuthSource(CreatableType, OAuthSource):
|
||||
"""Social Login using Entra ID."""
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
"""AzureAD OAuth2 Views"""
|
||||
|
||||
from authentik.sources.oauth.types.entra_id import EntraIDType
|
||||
from authentik.sources.oauth.types.registry import registry
|
||||
|
||||
# TODO: When removing this, add a migration for OAuthSource that sets
|
||||
# provider_type to `entraid` if it is currently `azuread`
|
||||
|
||||
|
||||
@registry.register()
|
||||
class AzureADType(EntraIDType):
|
||||
"""Azure AD Type definition"""
|
||||
|
||||
verbose_name = "Azure AD"
|
||||
name = "azuread"
|
||||
|
||||
urls_customizable = True
|
||||
@@ -36,14 +36,10 @@ entries:
|
||||
attrs:
|
||||
order: 50
|
||||
initial_value: |
|
||||
target_uuid = (http_request.session.get("authentik/flows/get", {}) or {}).get("user_uuid")
|
||||
current_user_uuid = str(getattr(user, "pk", "") or getattr(http_request.user, "pk", ""))
|
||||
is_self_service = not target_uuid or target_uuid == current_user_uuid
|
||||
pending_user = None
|
||||
if target_uuid and not is_self_service:
|
||||
from authentik.core.models import User
|
||||
|
||||
pending_user = User.objects.filter(pk=target_uuid).first()
|
||||
actor_uuid = str(getattr(http_request.user, "pk", ""))
|
||||
pending_user = user if getattr(user, "is_authenticated", False) else None
|
||||
target_uuid = str(getattr(pending_user, "pk", ""))
|
||||
is_self_service = not target_uuid or target_uuid == actor_uuid
|
||||
if is_self_service:
|
||||
return (
|
||||
"<p><strong>You are about to lock down your own account.</strong></p>"
|
||||
@@ -63,14 +59,15 @@ entries:
|
||||
from django.utils.html import escape
|
||||
|
||||
if pending_user:
|
||||
email = escape(pending_user.email or pending_user.name or "No email")
|
||||
user_html = f"<p><code>{escape(pending_user.username)}</code> ({email})</p>"
|
||||
detail = pending_user.email or pending_user.name
|
||||
user_html = f"<code>{escape(pending_user.username)}</code>"
|
||||
if detail and detail != pending_user.username:
|
||||
user_html = f"{user_html} ({escape(detail)})"
|
||||
else:
|
||||
user_html = "<p>the account selected when this one-time lockdown link was created</p>"
|
||||
user_html = "the account selected when this one-time lockdown link was created"
|
||||
|
||||
return (
|
||||
"<p><strong>You are about to lock down the following account:</strong></p>"
|
||||
f"{user_html}"
|
||||
f"<p><strong>You are about to lock down the following account:</strong> {user_html}</p>"
|
||||
"<p>This is an emergency action for cutting off access to the account right away. "
|
||||
"It does not lock the administrator who opened this page.</p>"
|
||||
"<p><strong>This will immediately:</strong></p>"
|
||||
@@ -99,9 +96,9 @@ entries:
|
||||
attrs:
|
||||
order: 100
|
||||
initial_value: |
|
||||
target_uuid = (http_request.session.get("authentik/flows/get", {}) or {}).get("user_uuid")
|
||||
current_user_uuid = str(getattr(user, "pk", "") or getattr(http_request.user, "pk", ""))
|
||||
is_self_service = not target_uuid or target_uuid == current_user_uuid
|
||||
actor_uuid = str(getattr(http_request.user, "pk", ""))
|
||||
target_uuid = str(getattr(user, "pk", ""))
|
||||
is_self_service = not target_uuid or target_uuid == actor_uuid
|
||||
if is_self_service:
|
||||
info = (
|
||||
"Use this if you no longer trust your current password or sessions. "
|
||||
@@ -134,9 +131,9 @@ entries:
|
||||
attrs:
|
||||
order: 200
|
||||
placeholder: |
|
||||
target_uuid = (http_request.session.get("authentik/flows/get", {}) or {}).get("user_uuid")
|
||||
current_user_uuid = str(getattr(user, "pk", "") or getattr(http_request.user, "pk", ""))
|
||||
is_self_service = not target_uuid or target_uuid == current_user_uuid
|
||||
actor_uuid = str(getattr(http_request.user, "pk", ""))
|
||||
target_uuid = str(getattr(user, "pk", ""))
|
||||
is_self_service = not target_uuid or target_uuid == actor_uuid
|
||||
if is_self_service:
|
||||
return "Describe why you are locking your account..."
|
||||
return "Describe why this account is being locked down..."
|
||||
@@ -184,14 +181,10 @@ entries:
|
||||
attrs:
|
||||
order: 300
|
||||
initial_value: |
|
||||
target_uuid = (http_request.session.get("authentik/flows/get", {}) or {}).get("user_uuid")
|
||||
from django.utils.html import escape
|
||||
from authentik.core.models import User
|
||||
|
||||
if target_uuid:
|
||||
target = User.objects.filter(pk=target_uuid).first()
|
||||
if target:
|
||||
return f"<p><code>{escape(target.username)}</code> has been locked down.</p>"
|
||||
if getattr(user, "is_authenticated", False):
|
||||
return f"<p><code>{escape(user.username)}</code> has been locked down.</p>"
|
||||
|
||||
return "<p>The selected account has been locked down.</p>"
|
||||
initial_value_expression: true
|
||||
@@ -221,9 +214,9 @@ entries:
|
||||
attrs:
|
||||
name: default-account-lockdown-admin-policy
|
||||
expression: |
|
||||
target_uuid = (request.http_request.session.get("authentik/flows/get", {}) or {}).get("user_uuid")
|
||||
current_user_uuid = str(getattr(request.user, "pk", "") or getattr(request.http_request.user, "pk", ""))
|
||||
return bool(target_uuid) and target_uuid != current_user_uuid
|
||||
actor_uuid = str(getattr(request.http_request.user, "pk", ""))
|
||||
target_uuid = str(getattr(request.user, "pk", ""))
|
||||
return bool(target_uuid) and target_uuid != actor_uuid
|
||||
identifiers:
|
||||
name: default-account-lockdown-admin-policy
|
||||
id: admin-policy
|
||||
|
||||
14
go.mod
14
go.mod
@@ -7,10 +7,10 @@ require (
|
||||
beryju.io/radius-eap v0.1.0
|
||||
github.com/avast/retry-go/v4 v4.7.0
|
||||
github.com/coreos/go-oidc/v3 v3.18.0
|
||||
github.com/getsentry/sentry-go v0.46.1
|
||||
github.com/getsentry/sentry-go v0.46.2
|
||||
github.com/go-http-utils/etag v0.0.0-20161124023236-513ea8f21eb1
|
||||
github.com/go-ldap/ldap/v3 v3.4.13
|
||||
github.com/go-openapi/runtime v0.29.4
|
||||
github.com/go-openapi/runtime v0.29.5
|
||||
github.com/golang-jwt/jwt/v5 v5.3.1
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/gorilla/handlers v1.5.2
|
||||
@@ -57,7 +57,7 @@ require (
|
||||
github.com/go-openapi/jsonreference v0.21.5 // indirect
|
||||
github.com/go-openapi/loads v0.23.3 // indirect
|
||||
github.com/go-openapi/spec v0.22.4 // indirect
|
||||
github.com/go-openapi/strfmt v0.26.1 // indirect
|
||||
github.com/go-openapi/strfmt v0.26.2 // indirect
|
||||
github.com/go-openapi/swag/conv v0.26.0 // indirect
|
||||
github.com/go-openapi/swag/fileutils v0.26.0 // indirect
|
||||
github.com/go-openapi/swag/jsonname v0.25.5 // indirect
|
||||
@@ -90,10 +90,10 @@ require (
|
||||
go.opentelemetry.io/otel/trace v1.43.0 // indirect
|
||||
go.yaml.in/yaml/v2 v2.4.2 // indirect
|
||||
go.yaml.in/yaml/v3 v3.0.4 // indirect
|
||||
golang.org/x/crypto v0.49.0 // indirect
|
||||
golang.org/x/net v0.52.0 // indirect
|
||||
golang.org/x/sys v0.42.0 // indirect
|
||||
golang.org/x/text v0.35.0 // indirect
|
||||
golang.org/x/crypto v0.50.0 // indirect
|
||||
golang.org/x/net v0.53.0 // indirect
|
||||
golang.org/x/sys v0.43.0 // indirect
|
||||
golang.org/x/text v0.36.0 // indirect
|
||||
google.golang.org/protobuf v1.36.8 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
36
go.sum
36
go.sum
@@ -20,8 +20,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk=
|
||||
github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||
github.com/getsentry/sentry-go v0.46.1 h1:mZyQFaQYkPxAdDG4HR8gDg6j4CnKYVWt4TF92N7i3XY=
|
||||
github.com/getsentry/sentry-go v0.46.1/go.mod h1:evVbw2qotNUdYG8KxXbAdjOQWWvWIwKxpjdZZIvcIPw=
|
||||
github.com/getsentry/sentry-go v0.46.2 h1:1jhYwrKGa3sIpo/y5iDNXS5wDoT7I1KNzMHrnK6ojns=
|
||||
github.com/getsentry/sentry-go v0.46.2/go.mod h1:evVbw2qotNUdYG8KxXbAdjOQWWvWIwKxpjdZZIvcIPw=
|
||||
github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 h1:BP4M0CvQ4S3TGls2FvczZtj5Re/2ZzkV9VwqPHH/3Bo=
|
||||
github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
|
||||
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
|
||||
@@ -51,12 +51,12 @@ github.com/go-openapi/jsonreference v0.21.5 h1:6uCGVXU/aNF13AQNggxfysJ+5ZcU4nEAe
|
||||
github.com/go-openapi/jsonreference v0.21.5/go.mod h1:u25Bw85sX4E2jzFodh1FOKMTZLcfifd1Q+iKKOUxExw=
|
||||
github.com/go-openapi/loads v0.23.3 h1:g5Xap1JfwKkUnZdn+S0L3SzBDpcTIYzZ5Qaag0YDkKQ=
|
||||
github.com/go-openapi/loads v0.23.3/go.mod h1:NOH07zLajXo8y55hom0omlHWDVVvCwBM/S+csCK8LqA=
|
||||
github.com/go-openapi/runtime v0.29.4 h1:k2lDxrGoSAJRdhFG2tONKMpkizY/4X1cciSdtzk4Jjo=
|
||||
github.com/go-openapi/runtime v0.29.4/go.mod h1:K0k/2raY6oqXJnZAgWJB2i/12QKrhUKpZcH4PfV9P18=
|
||||
github.com/go-openapi/runtime v0.29.5 h1:uc5+/TtqLIfDBTUxnF3uppoGMt+9DzonwUWsviINlrY=
|
||||
github.com/go-openapi/runtime v0.29.5/go.mod h1:D9IUbWccdYv+km8QwmAm90FZvDcQk47vP2Y7y5as/D8=
|
||||
github.com/go-openapi/spec v0.22.4 h1:4pxGjipMKu0FzFiu/DPwN3CTBRlVM2yLf/YTWorYfDQ=
|
||||
github.com/go-openapi/spec v0.22.4/go.mod h1:WQ6Ai0VPWMZgMT4XySjlRIE6GP1bGQOtEThn3gcWLtQ=
|
||||
github.com/go-openapi/strfmt v0.26.1 h1:7zGCHji7zSYDC2tCXIusoxYQz/48jAf2q+sF6wXTG+c=
|
||||
github.com/go-openapi/strfmt v0.26.1/go.mod h1:Zslk5VZPOISLwmWTMBIS7oiVFem1o1EI6zULY8Uer7Y=
|
||||
github.com/go-openapi/strfmt v0.26.2 h1:ysjheCh4i1rmFEo2LanhELDNucNzfWTZhUDKgWWPaFM=
|
||||
github.com/go-openapi/strfmt v0.26.2/go.mod h1:fXh1e449cyUn2NYuz+wb3wARBUdMl7qPEZwX00nqivY=
|
||||
github.com/go-openapi/swag/conv v0.26.0 h1:5yGGsPYI1ZCva93U0AoKi/iZrNhaJEjr324YVsiD89I=
|
||||
github.com/go-openapi/swag/conv v0.26.0/go.mod h1:tpAmIL7X58VPnHHiSO4uE3jBeRamGsFsfdDeDtb5ECE=
|
||||
github.com/go-openapi/swag/fileutils v0.26.0 h1:WJoPRvsA7QRiiWluowkLJa9jaYR7FCuxmDvnCgaRRxU=
|
||||
@@ -77,10 +77,10 @@ github.com/go-openapi/swag/typeutils v0.26.0 h1:2kdEwdiNWy+JJdOvu5MA2IIg2SylWAFu
|
||||
github.com/go-openapi/swag/typeutils v0.26.0/go.mod h1:oovDuIUvTrEHVMqWilQzKzV4YlSKgyZmFh7AlfABNVE=
|
||||
github.com/go-openapi/swag/yamlutils v0.25.5 h1:kASCIS+oIeoc55j28T4o8KwlV2S4ZLPT6G0iq2SSbVQ=
|
||||
github.com/go-openapi/swag/yamlutils v0.25.5/go.mod h1:Gek1/SjjfbYvM+Iq4QGwa/2lEXde9n2j4a3wI3pNuOQ=
|
||||
github.com/go-openapi/testify/enable/yaml/v2 v2.4.2 h1:5zRca5jw7lzVREKCZVNBpysDNBjj74rBh0N2BGQbSR0=
|
||||
github.com/go-openapi/testify/enable/yaml/v2 v2.4.2/go.mod h1:XVevPw5hUXuV+5AkI1u1PeAm27EQVrhXTTCPAF85LmE=
|
||||
github.com/go-openapi/testify/v2 v2.4.2 h1:tiByHpvE9uHrrKjOszax7ZvKB7QOgizBWGBLuq0ePx4=
|
||||
github.com/go-openapi/testify/v2 v2.4.2/go.mod h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw=
|
||||
github.com/go-openapi/testify/enable/yaml/v2 v2.5.0 h1:3hZD1fwydvCx/cc1R2uYNQirHqf2s6lqpKV3FcNTURA=
|
||||
github.com/go-openapi/testify/enable/yaml/v2 v2.5.0/go.mod h1:TvDZKBH7ZbMaF3EqH2AwTvNQCmzyZq8K1agRjf1B+Nk=
|
||||
github.com/go-openapi/testify/v2 v2.5.0 h1:UOCr63aAsMIDydZbZGqo5Ev01D4eydItRbekDuZMJLw=
|
||||
github.com/go-openapi/testify/v2 v2.5.0/go.mod h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw=
|
||||
github.com/go-openapi/validate v0.25.2 h1:12NsfLAwGegqbGWr2CnvT65X/Q2USJipmJ9b7xDJZz0=
|
||||
github.com/go-openapi/validate v0.25.2/go.mod h1:Pgl1LpPPGFnZ+ys4/hTlDiRYQdI1ocKypgE+8Q8BLfY=
|
||||
github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro=
|
||||
@@ -216,8 +216,8 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
|
||||
golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4=
|
||||
golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA=
|
||||
golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
|
||||
golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
|
||||
golang.org/x/exp v0.0.0-20230210204819-062eb4c674ab h1:628ME69lBm9C6JY2wXhAph/yjN3jezx1z7BIDLUwxjo=
|
||||
golang.org/x/exp v0.0.0-20230210204819-062eb4c674ab/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
@@ -227,8 +227,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0=
|
||||
golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw=
|
||||
golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
|
||||
golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
|
||||
golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
|
||||
golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
@@ -245,8 +245,8 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo=
|
||||
golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
||||
golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
|
||||
golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
@@ -258,8 +258,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||
golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8=
|
||||
golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA=
|
||||
golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
|
||||
golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
|
||||
@@ -38,6 +38,10 @@ function run_authentik {
|
||||
echo cargo run -- "$@"
|
||||
fi
|
||||
;;
|
||||
manage)
|
||||
shift 1
|
||||
echo python -m manage "$@"
|
||||
;;
|
||||
*)
|
||||
echo "$@"
|
||||
;;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
# Stage: Build webui
|
||||
FROM --platform=${BUILDPLATFORM} docker.io/library/node:24-trixie-slim@sha256:735dd688da64d22ebd9dd374b3e7e5a874635668fd2a6ec20ca1f99264294086 AS node-builder
|
||||
FROM --platform=${BUILDPLATFORM} docker.io/library/node:24-trixie-slim@sha256:4f2b45e32dc7d2caf66b6dbd59fac50e32f8077769efe0ef4d4c3f114672537d AS node-builder
|
||||
|
||||
ARG GIT_BUILD_HASH
|
||||
ENV GIT_BUILD_HASH=$GIT_BUILD_HASH
|
||||
@@ -228,8 +228,7 @@ RUN apt-get update && \
|
||||
# Required for runtime
|
||||
apt-get install -y --no-install-recommends \
|
||||
libpq5 libmaxminddb0 ca-certificates \
|
||||
krb5-multidev libkrb5-3 libkdb5-10 libkadm5clnt-mit12 \
|
||||
heimdal-multidev libkadm5clnt7t64-heimdal \
|
||||
libkadm5clnt-mit12 libkadm5clnt7t64-heimdal \
|
||||
libltdl7 libxslt1.1 && \
|
||||
# Required for bootstrap & healtcheck
|
||||
apt-get install -y --no-install-recommends runit && \
|
||||
|
||||
Binary file not shown.
Binary file not shown.
18
packages/client-ts/src/models/SAMLProvider.ts
generated
18
packages/client-ts/src/models/SAMLProvider.ts
generated
@@ -266,6 +266,18 @@ export interface SAMLProvider {
|
||||
* @memberof SAMLProvider
|
||||
*/
|
||||
readonly urlIssuer: string;
|
||||
/**
|
||||
* Get unified SAML endpoint URL (handles SSO and SLO)
|
||||
* @type {string}
|
||||
* @memberof SAMLProvider
|
||||
*/
|
||||
readonly urlUnified: string;
|
||||
/**
|
||||
* Get IdP-initiated SAML URL
|
||||
* @type {string}
|
||||
* @memberof SAMLProvider
|
||||
*/
|
||||
readonly urlUnifiedInit: string;
|
||||
/**
|
||||
* Get SSO Post URL
|
||||
* @type {string}
|
||||
@@ -328,6 +340,8 @@ export function instanceOfSAMLProvider(value: object): value is SAMLProvider {
|
||||
if (!("urlDownloadMetadata" in value) || value["urlDownloadMetadata"] === undefined)
|
||||
return false;
|
||||
if (!("urlIssuer" in value) || value["urlIssuer"] === undefined) return false;
|
||||
if (!("urlUnified" in value) || value["urlUnified"] === undefined) return false;
|
||||
if (!("urlUnifiedInit" in value) || value["urlUnifiedInit"] === undefined) return false;
|
||||
if (!("urlSsoPost" in value) || value["urlSsoPost"] === undefined) return false;
|
||||
if (!("urlSsoRedirect" in value) || value["urlSsoRedirect"] === undefined) return false;
|
||||
if (!("urlSsoInit" in value) || value["urlSsoInit"] === undefined) return false;
|
||||
@@ -414,6 +428,8 @@ export function SAMLProviderFromJSONTyped(json: any, ignoreDiscriminator: boolea
|
||||
: SAMLNameIDPolicyEnumFromJSON(json["default_name_id_policy"]),
|
||||
urlDownloadMetadata: json["url_download_metadata"],
|
||||
urlIssuer: json["url_issuer"],
|
||||
urlUnified: json["url_unified"],
|
||||
urlUnifiedInit: json["url_unified_init"],
|
||||
urlSsoPost: json["url_sso_post"],
|
||||
urlSsoRedirect: json["url_sso_redirect"],
|
||||
urlSsoInit: json["url_sso_init"],
|
||||
@@ -440,6 +456,8 @@ export function SAMLProviderToJSONTyped(
|
||||
| "meta_model_name"
|
||||
| "url_download_metadata"
|
||||
| "url_issuer"
|
||||
| "url_unified"
|
||||
| "url_unified_init"
|
||||
| "url_sso_post"
|
||||
| "url_sso_redirect"
|
||||
| "url_sso_init"
|
||||
|
||||
@@ -7,7 +7,7 @@ requires-python = "==3.14.*"
|
||||
dependencies = [
|
||||
"ak-guardian==3.2.0",
|
||||
"argon2-cffi==25.1.0",
|
||||
"cachetools==7.0.6",
|
||||
"cachetools==7.1.1",
|
||||
"channels==4.3.2",
|
||||
"cryptography==48.0.0",
|
||||
"dacite==1.9.2",
|
||||
@@ -36,7 +36,7 @@ dependencies = [
|
||||
"fido2==2.2.0",
|
||||
"geoip2==5.2.0",
|
||||
"geopy==2.4.1",
|
||||
"google-api-python-client==2.194.0",
|
||||
"google-api-python-client==2.195.0",
|
||||
"gssapi==1.11.1",
|
||||
"gunicorn==25.3.0",
|
||||
"jsonpatch==1.33",
|
||||
@@ -47,13 +47,13 @@ dependencies = [
|
||||
"msgraph-sdk==1.56.0",
|
||||
"opencontainers==0.0.15",
|
||||
"packaging==26.2",
|
||||
"paramiko==4.0.0",
|
||||
"paramiko==5.0.0",
|
||||
"psycopg[c,pool]==3.3.4",
|
||||
"pydantic-scim==0.0.8",
|
||||
"pydantic==2.13.3",
|
||||
"pydantic==2.13.4",
|
||||
"pyjwt==2.11.0",
|
||||
"pyrad==2.5.4",
|
||||
"python-kadmin-rs==0.7.0",
|
||||
"python-kadmin-rs==0.7.2",
|
||||
"pyyaml==6.0.3",
|
||||
"requests-oauthlib==2.0.0",
|
||||
"scim2-filter-parser==0.7.0",
|
||||
@@ -62,7 +62,7 @@ dependencies = [
|
||||
"setproctitle==1.3.7",
|
||||
"structlog==25.5.0",
|
||||
"swagger-spec-validator==3.0.4",
|
||||
"twilio==9.10.5",
|
||||
"twilio==9.10.9",
|
||||
"ua-parser==1.0.2",
|
||||
"unidecode==1.4.0",
|
||||
"urllib3<3",
|
||||
@@ -76,7 +76,7 @@ dependencies = [
|
||||
|
||||
[dependency-groups]
|
||||
dev = [
|
||||
"aws-cdk-lib==2.251.0",
|
||||
"aws-cdk-lib==2.252.0",
|
||||
"bandit==1.9.4",
|
||||
"black==26.3.1",
|
||||
"bpython==0.26",
|
||||
@@ -107,7 +107,7 @@ dev = [
|
||||
"types-docker==7.1.0.20260409",
|
||||
"types-jwcrypto==1.5.7.20260409",
|
||||
"types-ldap3==2.9.13.20260408",
|
||||
"types-requests==2.33.0.20260408",
|
||||
"types-requests==2.33.0.20260503",
|
||||
"types-zxcvbn==4.5.0.20260408",
|
||||
]
|
||||
|
||||
|
||||
10
schema.yml
10
schema.yml
@@ -54328,6 +54328,14 @@ components:
|
||||
type: string
|
||||
description: Get Issuer/EntityID URL
|
||||
readOnly: true
|
||||
url_unified:
|
||||
type: string
|
||||
description: Get unified SAML endpoint URL (handles SSO and SLO)
|
||||
readOnly: true
|
||||
url_unified_init:
|
||||
type: string
|
||||
description: Get IdP-initiated SAML URL
|
||||
readOnly: true
|
||||
url_sso_post:
|
||||
type: string
|
||||
description: Get SSO Post URL
|
||||
@@ -54367,6 +54375,8 @@ components:
|
||||
- url_sso_init
|
||||
- url_sso_post
|
||||
- url_sso_redirect
|
||||
- url_unified
|
||||
- url_unified_init
|
||||
- verbose_name
|
||||
- verbose_name_plural
|
||||
SAMLProviderImportRequest:
|
||||
|
||||
148
uv.lock
generated
148
uv.lock
generated
@@ -316,7 +316,7 @@ dev = [
|
||||
requires-dist = [
|
||||
{ name = "ak-guardian", editable = "packages/ak-guardian" },
|
||||
{ name = "argon2-cffi", specifier = "==25.1.0" },
|
||||
{ name = "cachetools", specifier = "==7.0.6" },
|
||||
{ name = "cachetools", specifier = "==7.1.1" },
|
||||
{ name = "channels", specifier = "==4.3.2" },
|
||||
{ name = "cryptography", specifier = "==48.0.0" },
|
||||
{ name = "dacite", specifier = "==1.9.2" },
|
||||
@@ -345,7 +345,7 @@ requires-dist = [
|
||||
{ name = "fido2", specifier = "==2.2.0" },
|
||||
{ name = "geoip2", specifier = "==5.2.0" },
|
||||
{ name = "geopy", specifier = "==2.4.1" },
|
||||
{ name = "google-api-python-client", specifier = "==2.194.0" },
|
||||
{ name = "google-api-python-client", specifier = "==2.195.0" },
|
||||
{ name = "gssapi", specifier = "==1.11.1" },
|
||||
{ name = "gunicorn", specifier = "==25.3.0" },
|
||||
{ name = "jsonpatch", specifier = "==1.33" },
|
||||
@@ -356,13 +356,13 @@ requires-dist = [
|
||||
{ name = "msgraph-sdk", specifier = "==1.56.0" },
|
||||
{ name = "opencontainers", git = "https://github.com/vsoch/oci-python?rev=ceb4fcc090851717a3069d78e85ceb1e86c2740c" },
|
||||
{ name = "packaging", specifier = "==26.2" },
|
||||
{ name = "paramiko", specifier = "==4.0.0" },
|
||||
{ name = "paramiko", specifier = "==5.0.0" },
|
||||
{ name = "psycopg", extras = ["c", "pool"], specifier = "==3.3.4" },
|
||||
{ name = "pydantic", specifier = "==2.13.3" },
|
||||
{ name = "pydantic", specifier = "==2.13.4" },
|
||||
{ name = "pydantic-scim", specifier = "==0.0.8" },
|
||||
{ name = "pyjwt", specifier = "==2.11.0" },
|
||||
{ name = "pyrad", specifier = "==2.5.4" },
|
||||
{ name = "python-kadmin-rs", specifier = "==0.7.0" },
|
||||
{ name = "python-kadmin-rs", specifier = "==0.7.2" },
|
||||
{ name = "pyyaml", specifier = "==6.0.3" },
|
||||
{ name = "requests-oauthlib", specifier = "==2.0.0" },
|
||||
{ name = "scim2-filter-parser", specifier = "==0.7.0" },
|
||||
@@ -371,7 +371,7 @@ requires-dist = [
|
||||
{ name = "setproctitle", specifier = "==1.3.7" },
|
||||
{ name = "structlog", specifier = "==25.5.0" },
|
||||
{ name = "swagger-spec-validator", specifier = "==3.0.4" },
|
||||
{ name = "twilio", specifier = "==9.10.5" },
|
||||
{ name = "twilio", specifier = "==9.10.9" },
|
||||
{ name = "ua-parser", specifier = "==1.0.2" },
|
||||
{ name = "unidecode", specifier = "==1.4.0" },
|
||||
{ name = "urllib3", specifier = "<3" },
|
||||
@@ -385,7 +385,7 @@ requires-dist = [
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "aws-cdk-lib", specifier = "==2.251.0" },
|
||||
{ name = "aws-cdk-lib", specifier = "==2.252.0" },
|
||||
{ name = "bandit", specifier = "==1.9.4" },
|
||||
{ name = "black", specifier = "==26.3.1" },
|
||||
{ name = "bpython", specifier = "==0.26" },
|
||||
@@ -416,7 +416,7 @@ dev = [
|
||||
{ name = "types-docker", specifier = "==7.1.0.20260409" },
|
||||
{ name = "types-jwcrypto", specifier = "==1.5.7.20260409" },
|
||||
{ name = "types-ldap3", specifier = "==2.9.13.20260408" },
|
||||
{ name = "types-requests", specifier = "==2.33.0.20260408" },
|
||||
{ name = "types-requests", specifier = "==2.33.0.20260503" },
|
||||
{ name = "types-zxcvbn", specifier = "==4.5.0.20260408" },
|
||||
]
|
||||
|
||||
@@ -495,7 +495,7 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "aws-cdk-lib"
|
||||
version = "2.251.0"
|
||||
version = "2.252.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "aws-cdk-asset-awscli-v1" },
|
||||
@@ -506,9 +506,9 @@ dependencies = [
|
||||
{ name = "publication" },
|
||||
{ name = "typeguard" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/b8/6c/d60d96e1848aabf1882e6a1d30a27de4a592affc9437d6918848f0e06497/aws_cdk_lib-2.251.0.tar.gz", hash = "sha256:ed69e7ea6896c62ac2ce01857083601baf541d5d875370bee6d213d641e8921e", size = 49353237, upload-time = "2026-04-24T23:21:04.805Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/0b/2e/468ed756570af782831bc0518b4f187773b036342ce1b6f3d4e13e6127d8/aws_cdk_lib-2.252.0.tar.gz", hash = "sha256:2498d771ab141599c48494bd2564ee9a4fbaade54befa9356811e9454616d0a0", size = 49479070, upload-time = "2026-04-30T12:31:54.452Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d2/fb/ab682b518e3ca5d18b23b252832e0fade4e6617a2c0f2b0ae0d8d2e74312/aws_cdk_lib-2.251.0-py3-none-any.whl", hash = "sha256:a684f3461d096443ac688adbf559abe1af2d50dd5c8e0fa7dbf4a5f361702db8", size = 50035969, upload-time = "2026-04-24T23:20:18.952Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ae/94/32c21ad93dc21554286955fd5ebc68cb91149cc5f7f3154b07927c3fc693/aws_cdk_lib-2.252.0-py3-none-any.whl", hash = "sha256:c96d02582d344ee81ea2ef8a5e22b6e680789973804720ec9f0e95a050257db1", size = 50157828, upload-time = "2026-04-30T12:31:11.041Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -688,11 +688,11 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "cachetools"
|
||||
version = "7.0.6"
|
||||
version = "7.1.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/76/7b/1755ed2c6bfabd1d98b37ae73152f8dcf94aa40fee119d163c19ed484704/cachetools-7.0.6.tar.gz", hash = "sha256:e5d524d36d65703a87243a26ff08ad84f73352adbeafb1cde81e207b456aaf24", size = 37526, upload-time = "2026-04-20T19:02:23.289Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/ff/e2/85f227594656000ff4d8adadae91a21f536d4a84c6c716a86bd6685874be/cachetools-7.1.1.tar.gz", hash = "sha256:27bdf856d68fd3c71c26c01b5edc312124ed427524d1ddb31aa2b7746fe20d4b", size = 40202, upload-time = "2026-05-03T20:00:29.391Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/fe/c4/cf76242a5da1410917107ff14551764aa405a5fd10cd10cf9a5ca8fa77f4/cachetools-7.0.6-py3-none-any.whl", hash = "sha256:4e94956cfdd3086f12042cdd29318f5ced3893014f7d0d059bf3ead3f85b7f8b", size = 13976, upload-time = "2026-04-20T19:02:21.187Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bf/0f/f897abe4ea0a8c408ae65c8c83bffab4936ad65d6032d4fb4cd35bbdc3ee/cachetools-7.1.1-py3-none-any.whl", hash = "sha256:0335cd7a0952d2b22327441fb0628139e234c565559eeb91a8a4ac7551c5353d", size = 16775, upload-time = "2026-05-03T20:00:27.857Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1597,7 +1597,7 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "google-api-python-client"
|
||||
version = "2.194.0"
|
||||
version = "2.195.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "google-api-core" },
|
||||
@@ -1606,9 +1606,9 @@ dependencies = [
|
||||
{ name = "httplib2" },
|
||||
{ name = "uritemplate" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/60/ab/e83af0eb043e4ccc49571ca7a6a49984e9d00f4e9e6e6f1238d60bc84dce/google_api_python_client-2.194.0.tar.gz", hash = "sha256:db92647bd1a90f40b79c9618461553c2b20b6a43ce7395fa6de07132dc14f023", size = 14443469, upload-time = "2026-04-08T23:07:35.757Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/69/07/08d759b9cb10f48af14b25262dd0d6685ca8cda6c1f9e8a8109f57457205/google_api_python_client-2.195.0.tar.gz", hash = "sha256:c72cf2661c3addf01c880ce60541e83e1df354644b874f7f9d8d5ed2070446ae", size = 14584819, upload-time = "2026-04-30T21:51:50.638Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b0/34/5a624e49f179aa5b0cb87b2ce8093960299030ff40423bfbde09360eb908/google_api_python_client-2.194.0-py3-none-any.whl", hash = "sha256:61eaaac3b8fc8fdf11c08af87abc3d1342d1b37319cc1b57405f86ef7697e717", size = 15016514, upload-time = "2026-04-08T23:07:33.093Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/21/b9/2c71095e31fff57668fec7c07ac897df065f15521d070e63229e13689590/google_api_python_client-2.195.0-py3-none-any.whl", hash = "sha256:753e62057f23049a89534bea0162b60fe391b85fb86d80bcdf884d05ec91c5bf", size = 15162418, upload-time = "2026-04-30T21:51:47.444Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2589,7 +2589,7 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "paramiko"
|
||||
version = "4.0.0"
|
||||
version = "5.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "bcrypt" },
|
||||
@@ -2597,9 +2597,9 @@ dependencies = [
|
||||
{ name = "invoke" },
|
||||
{ name = "pynacl" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/1f/e7/81fdcbc7f190cdb058cffc9431587eb289833bdd633e2002455ca9bb13d4/paramiko-4.0.0.tar.gz", hash = "sha256:6a25f07b380cc9c9a88d2b920ad37167ac4667f8d9886ccebd8f90f654b5d69f", size = 1630743, upload-time = "2025-08-04T01:02:03.711Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/62/93/dcc25d52f49022ae6175d15e6bd751f1acc99b98bc61fc55e5155a7be2e7/paramiko-5.0.0.tar.gz", hash = "sha256:36763b5b95c2a0dcfdf1abc48e48156ee425b21efe2f0e787c2dd5a95c0e5e79", size = 1548586, upload-time = "2026-05-09T18:28:52.256Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a9/90/a744336f5af32c433bd09af7854599682a383b37cfd78f7de263de6ad6cb/paramiko-4.0.0-py3-none-any.whl", hash = "sha256:0e20e00ac666503bf0b4eda3b6d833465a2b7aff2e2b3d79a8bba5ef144ee3b9", size = 223932, upload-time = "2025-08-04T01:02:02.029Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/82/5b/eadf6d45de38d30ab603f49393b6cd2cbe7e233af8cf90197e32782b68a9/paramiko-5.0.0-py3-none-any.whl", hash = "sha256:b7044611c30140d9a75261653210e2002977b71a0497ff3ba0d98d7edbf62f7c", size = 208919, upload-time = "2026-05-09T18:28:50.295Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2813,7 +2813,7 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "pydantic"
|
||||
version = "2.13.3"
|
||||
version = "2.13.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "annotated-types" },
|
||||
@@ -2821,9 +2821,9 @@ dependencies = [
|
||||
{ name = "typing-extensions" },
|
||||
{ name = "typing-inspection" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d9/e4/40d09941a2cebcb20609b86a559817d5b9291c49dd6f8c87e5feffbe703a/pydantic-2.13.3.tar.gz", hash = "sha256:af09e9d1d09f4e7fe37145c1f577e1d61ceb9a41924bf0094a36506285d0a84d", size = 844068, upload-time = "2026-04-20T14:46:43.632Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f3/0a/fd7d723f8f8153418fb40cf9c940e82004fce7e987026b08a68a36dd3fe7/pydantic-2.13.3-py3-none-any.whl", hash = "sha256:6db14ac8dfc9a1e57f87ea2c0de670c251240f43cb0c30a5130e9720dc612927", size = 471981, upload-time = "2026-04-20T14:46:41.402Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" },
|
||||
]
|
||||
|
||||
[package.optional-dependencies]
|
||||
@@ -2833,43 +2833,43 @@ email = [
|
||||
|
||||
[[package]]
|
||||
name = "pydantic-core"
|
||||
version = "2.46.3"
|
||||
version = "2.46.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/2a/ef/f7abb56c49382a246fd2ce9c799691e3c3e7175ec74b14d99e798bcddb1a/pydantic_core-2.46.3.tar.gz", hash = "sha256:41c178f65b8c29807239d47e6050262eb6bf84eb695e41101e62e38df4a5bc2c", size = 471412, upload-time = "2026-04-20T14:40:56.672Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/db/a7bcb4940183fda36022cd18ba8dd12f2dff40740ec7b58ce7457befa416/pydantic_core-2.46.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:afa3aa644f74e290cdede48a7b0bee37d1c35e71b05105f6b340d484af536d9b", size = 2097614, upload-time = "2026-04-20T14:44:38.374Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/24/35/e4066358a22e3e99519db370494c7528f5a2aa1367370e80e27e20283543/pydantic_core-2.46.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ced3310e51aa425f7f77da8bbbb5212616655bedbe82c70944320bc1dbe5e018", size = 1951896, upload-time = "2026-04-20T14:40:53.996Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/87/92/37cf4049d1636996e4b888c05a501f40a43ff218983a551d57f9d5e14f0d/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e29908922ce9da1a30b4da490bd1d3d82c01dcfdf864d2a74aacee674d0bfa34", size = 1979314, upload-time = "2026-04-20T14:41:49.446Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d8/36/9ff4d676dfbdfb2d591cf43f3d90ded01e15b1404fd101180ed2d62a2fd3/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c9ff69140423eea8ed2d5477df3ba037f671f5e897d206d921bc9fdc39613e7", size = 2056133, upload-time = "2026-04-20T14:42:23.574Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bc/f0/405b442a4d7ba855b06eec8b2bf9c617d43b8432d099dfdc7bf999293495/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b675ab0a0d5b1c8fdb81195dc5bcefea3f3c240871cdd7ff9a2de8aa50772eb2", size = 2228726, upload-time = "2026-04-20T14:44:22.816Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e7/f8/65cd92dd5a0bd89ba277a98ecbfaf6fc36bbd3300973c7a4b826d6ab1391/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0087084960f209a9a4af50ecd1fb063d9ad3658c07bb81a7a53f452dacbfb2ba", size = 2301214, upload-time = "2026-04-20T14:44:48.792Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fd/86/ef96a4c6e79e7a2d0410826a68fbc0eccc0fd44aa733be199d5fcac3bb87/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed42e6cc8e1b0e2b9b96e2276bad70ae625d10d6d524aed0c93de974ae029f9f", size = 2099927, upload-time = "2026-04-20T14:41:40.196Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6d/53/269caf30e0096e0a8a8f929d1982a27b3879872cca2d917d17c2f9fdf4fe/pydantic_core-2.46.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:f1771ce258afb3e4201e67d154edbbae712a76a6081079fe247c2f53c6322c22", size = 2128789, upload-time = "2026-04-20T14:41:15.868Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/00/b0/1a6d9b6a587e118482910c244a1c5acf4d192604174132efd12bf0ac486f/pydantic_core-2.46.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a7610b6a5242a6c736d8ad47fd5fff87fcfe8f833b281b1c409c3d6835d9227f", size = 2173815, upload-time = "2026-04-20T14:44:25.152Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/87/56/e7e00d4041a7e62b5a40815590114db3b535bf3ca0bf4dca9f16cef25246/pydantic_core-2.46.3-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:ff5e7783bcc5476e1db448bf268f11cb257b1c276d3e89f00b5727be86dd0127", size = 2181608, upload-time = "2026-04-20T14:41:28.933Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e8/22/4bd23c3d41f7c185d60808a1de83c76cf5aeabf792f6c636a55c3b1ec7f9/pydantic_core-2.46.3-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:9d2e32edcc143bc01e95300671915d9ca052d4f745aa0a49c48d4803f8a85f2c", size = 2326968, upload-time = "2026-04-20T14:42:03.962Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/24/ac/66cd45129e3915e5ade3b292cb3bc7fd537f58f8f8dbdaba6170f7cabb74/pydantic_core-2.46.3-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:6e42d83d1c6b87fa56b521479cff237e626a292f3b31b6345c15a99121b454c1", size = 2369842, upload-time = "2026-04-20T14:41:35.52Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a2/51/dd4248abb84113615473aa20d5545b7c4cd73c8644003b5259686f93996c/pydantic_core-2.46.3-cp314-cp314-win32.whl", hash = "sha256:07bc6d2a28c3adb4f7c6ae46aa4f2d2929af127f587ed44057af50bf1ce0f505", size = 1959661, upload-time = "2026-04-20T14:41:00.042Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/20/eb/59980e5f1ae54a3b86372bd9f0fa373ea2d402e8cdcd3459334430f91e91/pydantic_core-2.46.3-cp314-cp314-win_amd64.whl", hash = "sha256:8940562319bc621da30714617e6a7eaa6b98c84e8c685bcdc02d7ed5e7c7c44e", size = 2071686, upload-time = "2026-04-20T14:43:16.471Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8c/db/1cf77e5247047dfee34bc01fa9bca134854f528c8eb053e144298893d370/pydantic_core-2.46.3-cp314-cp314-win_arm64.whl", hash = "sha256:5dcbbcf4d22210ced8f837c96db941bdb078f419543472aca5d9a0bb7cddc7df", size = 2026907, upload-time = "2026-04-20T14:43:31.732Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/57/c0/b3df9f6a543276eadba0a48487b082ca1f201745329d97dbfa287034a230/pydantic_core-2.46.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:d0fe3dce1e836e418f912c1ad91c73357d03e556a4d286f441bf34fed2dbeecf", size = 2095047, upload-time = "2026-04-20T14:42:37.982Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/57/886a938073b97556c168fd99e1a7305bb363cd30a6d2c76086bf0587b32a/pydantic_core-2.46.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9ce92e58abc722dac1bf835a6798a60b294e48eb0e625ec9fd994b932ac5feee", size = 1934329, upload-time = "2026-04-20T14:43:49.655Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0b/7c/b42eaa5c34b13b07ecb51da21761297a9b8eb43044c864a035999998f328/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03e6467f0f5ab796a486146d1b887b2dc5e5f9b3288898c1b1c3ad974e53e4a", size = 1974847, upload-time = "2026-04-20T14:42:10.737Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e6/9b/92b42db6543e7de4f99ae977101a2967b63122d4b6cf7773812da2d7d5b5/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2798b6ba041b9d70acfb9071a2ea13c8456dd1e6a5555798e41ba7b0790e329c", size = 2041742, upload-time = "2026-04-20T14:40:44.262Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0f/19/46fbe1efabb5aa2834b43b9454e70f9a83ad9c338c1291e48bdc4fecf167/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9be3e221bdc6d69abf294dcf7aff6af19c31a5cdcc8f0aa3b14be29df4bd03b1", size = 2236235, upload-time = "2026-04-20T14:41:27.307Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/77/da/b3f95bc009ad60ec53120f5d16c6faa8cabdbe8a20d83849a1f2b8728148/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f13936129ce841f2a5ddf6f126fea3c43cd128807b5a59588c37cf10178c2e64", size = 2282633, upload-time = "2026-04-20T14:44:33.271Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cc/6e/401336117722e28f32fb8220df676769d28ebdf08f2f4469646d404c43a3/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28b5f2ef03416facccb1c6ef744c69793175fd27e44ef15669201601cf423acb", size = 2109679, upload-time = "2026-04-20T14:44:41.065Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fc/53/b289f9bc8756a32fe718c46f55afaeaf8d489ee18d1a1e7be1db73f42cc4/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:830d1247d77ad23852314f069e9d7ddafeec5f684baf9d7e7065ed46a049c4e6", size = 2108342, upload-time = "2026-04-20T14:42:50.144Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/10/5b/8292fc7c1f9111f1b2b7c1b0dcf1179edcd014fc3ea4517499f50b829d71/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0793c90c1a3c74966e7975eaef3ed30ebdff3260a0f815a62a22adc17e4c01c", size = 2157208, upload-time = "2026-04-20T14:42:08.133Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/9e/f80044e9ec07580f057a89fc131f78dda7a58751ddf52bbe05eaf31db50f/pydantic_core-2.46.3-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d2d0aead851b66f5245ec0c4fb2612ef457f8bbafefdf65a2bf9d6bac6140f47", size = 2167237, upload-time = "2026-04-20T14:42:25.412Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f8/84/6781a1b037f3b96be9227edbd1101f6d3946746056231bf4ac48cdff1a8d/pydantic_core-2.46.3-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:2f40e4246676beb31c5ce77c38a55ca4e465c6b38d11ea1bd935420568e0b1ab", size = 2312540, upload-time = "2026-04-20T14:40:40.313Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3e/db/19c0839feeb728e7df03255581f198dfdf1c2aeb1e174a8420b63c5252e5/pydantic_core-2.46.3-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:cf489cf8986c543939aeee17a09c04d6ffb43bfef8ca16fcbcc5cfdcbed24dba", size = 2369556, upload-time = "2026-04-20T14:41:09.427Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/15/3228774cb7cd45f5f721ddf1b2242747f4eb834d0c491f0c02d606f09fed/pydantic_core-2.46.3-cp314-cp314t-win32.whl", hash = "sha256:ffe0883b56cfc05798bf994164d2b2ff03efe2d22022a2bb080f3b626176dd56", size = 1949756, upload-time = "2026-04-20T14:41:25.717Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/2a/c79cf53fd91e5a87e30d481809f52f9a60dd221e39de66455cf04deaad37/pydantic_core-2.46.3-cp314-cp314t-win_amd64.whl", hash = "sha256:706d9d0ce9cf4593d07270d8e9f53b161f90c57d315aeec4fb4fd7a8b10240d8", size = 2051305, upload-time = "2026-04-20T14:43:18.627Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0b/db/d8182a7f1d9343a032265aae186eb063fe26ca4c40f256b21e8da4498e89/pydantic_core-2.46.3-cp314-cp314t-win_arm64.whl", hash = "sha256:77706aeb41df6a76568434701e0917da10692da28cb69d5fb6919ce5fdb07374", size = 2026310, upload-time = "2026-04-20T14:41:01.778Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3083,18 +3083,18 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "python-kadmin-rs"
|
||||
version = "0.7.0"
|
||||
version = "0.7.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c6/18/2773570703e5ab13fc0390797685cb6c09b8002d96438c57a8e887cc3234/python_kadmin_rs-0.7.0.tar.gz", hash = "sha256:e8a539fda1a1006fe5f0868c0e59a36b3b90d451da9c0c2bc3a9bfc7173efbdc", size = 112469, upload-time = "2026-01-15T17:49:10.467Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/ab/96/f5ed764f06621d1c06b469ec2a24c2da64a0fdb9f13d1c7005c70fd7804d/python_kadmin_rs-0.7.2.tar.gz", hash = "sha256:1f57ab7b61540c420eb684154e56638d42e4bafe2ac66362c2d667cda7d0ce8c", size = 119177, upload-time = "2026-05-11T13:31:19.071Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/71/05/94e7575a69ea5d3fc23d4df4a8e4d5acb6f6d3633f23b0a8b6b6360da775/python_kadmin_rs-0.7.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d1418825ba6c161d504b7905a99ef475d5ec1fdf15e6f5b72e4641f350fbc261", size = 510261, upload-time = "2026-01-15T17:48:52.002Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d7/16/58671c341caef38a492e327cf3e0b24aba2842419da15566f8e3d42c9382/python_kadmin_rs-0.7.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b247bc5f5a075107088cdcec22c67125aa6706fdcd2e264a99a478f1bedecd7d", size = 527751, upload-time = "2026-01-15T17:48:53.504Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/d1/505e34ce204601aae0fcecaf56c66e808803426199948d3a26a6c16a9e5b/python_kadmin_rs-0.7.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:8e6d8ea17a02bb0527219abadac08a63a47f97351f41c79fade77dd11a380795", size = 552634, upload-time = "2026-01-15T17:48:54.96Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0b/51/391a3d8ee99aeb2466efe499e52ef6a7479d7ac426635d92cd050a5fe3f9/python_kadmin_rs-0.7.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:82107ee5ea3dc1a3b716323687febc64ed2fa462ebd986565fba7394add04792", size = 554659, upload-time = "2026-01-15T17:48:56.408Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c2/77/6a2fe8a9bef6e3d94f842492db7216c4d0a47c5a67a8a7265c126ed5be58/python_kadmin_rs-0.7.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:ed58ec35dd89a381408fa92f0404d6321f2e6687c58c974f820f113a7052f39f", size = 512638, upload-time = "2026-01-15T17:48:58.519Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ef/e4/ddd909d4b5ff00a3ed277699f3e2204785367a52088dcb41465b8e01f733/python_kadmin_rs-0.7.0-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:6a6b63680e10a450e553a84a15216f61af838d86d623caec1fb1c2977907d1ef", size = 530752, upload-time = "2026-01-15T17:49:00.108Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fd/b2/7d4ea81b768a4ea6be57d9bc70f1841828483a092598b60243a7ad8c798c/python_kadmin_rs-0.7.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:e48cdf80bdece9fdcc70d9ef9237821ae9366cf7944742cd412ac2ebd07a40cc", size = 553270, upload-time = "2026-01-15T17:49:01.682Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/26/b7/87851916c895f31e67a9fe827dabfe3a2f09cf8ecf090cb4ac513f100157/python_kadmin_rs-0.7.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:e63aec5daa1a8469f5b617aa8a5b5a689e2b18241026c7e666ca0f8b5e8688c8", size = 556308, upload-time = "2026-01-15T17:49:03.199Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/63/f2/e86b79e1cc8d43c8865f65b5b9c7b06fbfb56e56b812bd279c38faa100cd/python_kadmin_rs-0.7.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2c77b425805669831e2c4eb316304b9f4690ac27a74cb34e2b92dc0979ab0d3c", size = 512988, upload-time = "2026-05-11T13:31:01.655Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/d6/200dd8ca05bbdf48d77050a0a75c183fca740f2d33e59c8083832514d300/python_kadmin_rs-0.7.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:403c04a395f42d87cbfa46d60f9145841a8b5c6d8ac1f2dab0f457e3e3b7049c", size = 527527, upload-time = "2026-05-11T13:31:03.528Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/54/03/e9ebb35c7c1441722ced8097c19c1737b1db28c18d9a0c219fe12fe94257/python_kadmin_rs-0.7.2-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:5f1560747e1a936cc9509c87d45180e351096b3be47c8af81a6f3dd4516ca34b", size = 564813, upload-time = "2026-05-11T13:31:05.464Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f9/d8/c2706859bec76cc629d7665effd6fd540d31b10631d800796269806c86cc/python_kadmin_rs-0.7.2-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:cb51f980597383c4f4adb308e3e4c0c796e5dba560f68b17e4b3cd269c043ae2", size = 562188, upload-time = "2026-05-11T13:31:06.875Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/00/ad/808be9b2b5a52ff0244e323a4d2ec00b66c21c98e49088399a744da15085/python_kadmin_rs-0.7.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:08fea0f139d5cfdcda24446355578071b8ac02223bb9433077b895df6655cb9e", size = 511783, upload-time = "2026-05-11T13:31:08.291Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0c/9a/73ab8930b37eafa3a41341c245df6066d38a5b8076cae4f39d7f59eab7bb/python_kadmin_rs-0.7.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:ff124a363e6c8707d738191969e22c08d2cef73b3d6fc0ce86f1dcd81715e170", size = 526356, upload-time = "2026-05-11T13:31:10.137Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/26/acddc2766900537b94e923ecd12c9f4d5ee6a0f551ffe7998826055c8193/python_kadmin_rs-0.7.2-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:5124b7f27b67d034c6c13ebfbb65c036e197e30bc47c457853489e08d535cb3c", size = 561923, upload-time = "2026-05-11T13:31:11.843Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d8/4e/42b317789b5e204995431762b7dcede1544581ee5caacebac36d8991f478/python_kadmin_rs-0.7.2-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:0741de2fd55338b356a424899c2cc400314dd57ae2031ed879a2765edfc2f0a1", size = 562006, upload-time = "2026-05-11T13:31:13.206Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3524,7 +3524,7 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "twilio"
|
||||
version = "9.10.5"
|
||||
version = "9.10.9"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "aiohttp" },
|
||||
@@ -3532,9 +3532,9 @@ dependencies = [
|
||||
{ name = "pyjwt" },
|
||||
{ name = "requests" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/b5/97/c439bc2c058f8a24edd732f5cc82adedd8794bcc2da0836c2eff1e2dbe91/twilio-9.10.5.tar.gz", hash = "sha256:d9f93b9280349ee7b52e7f17a0600fd7bfd0f7ff88eb00c40270164bc058743f", size = 1641690, upload-time = "2026-04-14T09:52:09.392Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/30/af/275130be4783c6e2b2122d3b278b63da0007611d1dc073d6414adcc6be03/twilio-9.10.9.tar.gz", hash = "sha256:eb74fc026c85a89372836414f57e262119efaa160b9419cf4d05b59056b8e89d", size = 1762839, upload-time = "2026-05-07T17:34:38.162Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/4a/97/4fdde5e54fcbb789aa1a70c371f2f33d7eb1e58e8a6131fdbd8a98490976/twilio-9.10.5-py2.py3-none-any.whl", hash = "sha256:7972db54496fbf501b238f34d1f717f80ff22720313dc706632787aad5934997", size = 2284944, upload-time = "2026-04-14T09:52:07.333Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ed/6b/df08b499d01ba6b9f7f42f9dd51b82aab1eb26c93602f3b89179a520494f/twilio-9.10.9-py2.py3-none-any.whl", hash = "sha256:1c50bfb394b5dbc044bacab24b2e3b550bee0c08da51c4a1fa4816293303e66c", size = 2452983, upload-time = "2026-05-07T17:34:36.459Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3663,14 +3663,14 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "types-requests"
|
||||
version = "2.33.0.20260408"
|
||||
version = "2.33.0.20260503"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "urllib3" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/69/6a/749dc53a54a3f35842c1f8197b3ca6b54af6d7458a1bfc75f6629b6da666/types_requests-2.33.0.20260408.tar.gz", hash = "sha256:95b9a86376807a216b2fb412b47617b202091c3ea7c078f47cc358d5528ccb7b", size = 23882, upload-time = "2026-04-08T04:34:49.33Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a1/b8/57e94268c0d82ac3eaa2fc35aa8ca7bbc2542f726b67dcf90b0b00a3b14d/types_requests-2.33.0.20260503.tar.gz", hash = "sha256:9721b2d9dbee7131f2fb39f20f0ebb1999c18cef4b512c9a7932f3722de7c5f4", size = 23931, upload-time = "2026-05-03T05:20:08.882Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/90/b8/78fd6c037de4788c040fdd323b3369804400351b7827473920f6c1d03c10/types_requests-2.33.0.20260408-py3-none-any.whl", hash = "sha256:81f31d5ea4acb39f03be7bc8bed569ba6d5a9c5d97e89f45ac43d819b68ca50f", size = 20739, upload-time = "2026-04-08T04:34:48.325Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c3/82/959113a6351f3ca046cd0a8cd2cee071d7ea47473560557a01eeae9a6fe2/types_requests-2.33.0.20260503-py3-none-any.whl", hash = "sha256:02aaa7e3577a13471715bb1bddb693cc985ea514f754b503bf033e6a09a3e528", size = 20736, upload-time = "2026-05-03T05:20:07.858Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3791,11 +3791,11 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "urllib3"
|
||||
version = "2.6.3"
|
||||
version = "2.7.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" },
|
||||
]
|
||||
|
||||
[package.optional-dependencies]
|
||||
|
||||
224
web/package-lock.json
generated
224
web/package-lock.json
generated
@@ -21,7 +21,7 @@
|
||||
"@codemirror/theme-one-dark": "^6.1.3",
|
||||
"@eslint/js": "^9.39.3",
|
||||
"@floating-ui/dom": "^1.7.6",
|
||||
"@formatjs/intl-listformat": "^8.3.4",
|
||||
"@formatjs/intl-listformat": "^8.3.5",
|
||||
"@fortawesome/fontawesome-free": "^7.2.0",
|
||||
"@goauthentik/api": "0.0.0",
|
||||
"@goauthentik/core": "^1.0.0",
|
||||
@@ -75,17 +75,17 @@
|
||||
"eslint-plugin-lit": "^2.2.1",
|
||||
"eslint-plugin-wc": "^3.1.0",
|
||||
"fuse.js": "^7.3.0",
|
||||
"globals": "^17.5.0",
|
||||
"globals": "^17.6.0",
|
||||
"guacamole-common-js": "^1.5.0",
|
||||
"hastscript": "^9.0.1",
|
||||
"knip": "^6.9.0",
|
||||
"knip": "^6.11.0",
|
||||
"lex": "^2025.11.0",
|
||||
"lit": "^3.3.2",
|
||||
"lit-analyzer": "^2.0.3",
|
||||
"lit-element": "^4.2.2",
|
||||
"lit-html": "^3.3.2",
|
||||
"md-front-matter": "^1.0.4",
|
||||
"mermaid": "^11.14.0",
|
||||
"mermaid": "^11.15.0",
|
||||
"node-domexception": "^2025.11.0",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"pino": "^10.3.1",
|
||||
@@ -95,8 +95,8 @@
|
||||
"prettier-plugin-packagejson": "^3.0.2",
|
||||
"pseudolocale": "^2.2.0",
|
||||
"rapidoc": "^9.3.8",
|
||||
"react": "^19.2.5",
|
||||
"react-dom": "^19.2.5",
|
||||
"react": "^19.2.6",
|
||||
"react-dom": "^19.2.6",
|
||||
"rehype-highlight": "^7.0.2",
|
||||
"rehype-mermaid": "^3.0.0",
|
||||
"rehype-parse": "^9.0.1",
|
||||
@@ -429,41 +429,10 @@
|
||||
"integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@chevrotain/cst-dts-gen": {
|
||||
"version": "12.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-12.0.0.tgz",
|
||||
"integrity": "sha512-fSL4KXjTl7cDgf0B5Rip9Q05BOrYvkJV/RrBTE/bKDN096E4hN/ySpcBK5B24T76dlQ2i32Zc3PAE27jFnFrKg==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@chevrotain/gast": "12.0.0",
|
||||
"@chevrotain/types": "12.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@chevrotain/gast": {
|
||||
"version": "12.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-12.0.0.tgz",
|
||||
"integrity": "sha512-1ne/m3XsIT8aEdrvT33so0GUC+wkctpUPK6zU9IlOyJLUbR0rg4G7ZiApiJbggpgPir9ERy3FRjT6T7lpgetnQ==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@chevrotain/types": "12.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@chevrotain/regexp-to-ast": {
|
||||
"version": "12.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-12.0.0.tgz",
|
||||
"integrity": "sha512-p+EW9MaJwgaHguhoqwOtx/FwuGr+DnNn857sXWOi/mClXIkPGl3rn7hGNWvo31HA3vyeQxjqe+H36yZJwYU8cA==",
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/@chevrotain/types": {
|
||||
"version": "12.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-12.0.0.tgz",
|
||||
"integrity": "sha512-S+04vjFQKeuYw0/eW3U52LkAHQsB1ASxsPGsLPUyQgrZ2iNNibQrsidruDzjEX2JYfespXMG0eZmXlhA6z7nWA==",
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/@chevrotain/utils": {
|
||||
"version": "12.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-12.0.0.tgz",
|
||||
"integrity": "sha512-lB59uJoaGIfOOL9knQqQRfhl9g7x8/wqFkp13zTdkRu1huG9kg6IJs1O8hqj9rs6h7orGxHJUKb+mX3rPbWGhA==",
|
||||
"version": "11.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz",
|
||||
"integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==",
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/@codemirror/autocomplete": {
|
||||
@@ -1305,27 +1274,27 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@formatjs/fast-memoize": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.3.tgz",
|
||||
"integrity": "sha512-Ocd1vPuD68rW6BJDuAOtnnc1GPeVepY5kZXML1psGVFQ+1Q8CfkftT3Tnam+Mxx97Pz08jIEDCotl/GV+Naccg==",
|
||||
"version": "3.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.4.tgz",
|
||||
"integrity": "sha512-Lbke1aOrsygKKR09Ux0NrZgbTqpDmiwXOgzyDOJ8Owr1zd5qOKTauf62hH+Seeku3ju77rHWH9I5SfX2CN0vuA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@formatjs/intl-listformat": {
|
||||
"version": "8.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-8.3.4.tgz",
|
||||
"integrity": "sha512-q7WskvO6C/Cyq7ryyM9maDL2FJzt6u39MMBrxmTHZtpTMZukG5Lw0kl9sZaCOR9tYP34xOdWp4JNUrfrkdLGXQ==",
|
||||
"version": "8.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-8.3.5.tgz",
|
||||
"integrity": "sha512-ibv9RLqPNlazmT2tXeA3WbZarc083JxY6OKaE6UYiJYrDTmDNR68CvHjpbqExEEWxH22u6tlxZl91ehWKXMbaQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@formatjs/intl-localematcher": "0.8.5"
|
||||
"@formatjs/intl-localematcher": "0.8.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@formatjs/intl-localematcher": {
|
||||
"version": "0.8.5",
|
||||
"resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.5.tgz",
|
||||
"integrity": "sha512-TEW/NR367c3PcQ2AXfkNig9jC740+qbkM0LgKl7UCE7Xtv7C5Uk1mvlu86MjQZBmscUai8HSWjcEETpwaVvJ6A==",
|
||||
"version": "0.8.6",
|
||||
"resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.6.tgz",
|
||||
"integrity": "sha512-AZRgUxj0q93lyF7Z5lFS85bLINXuBLX4R3tCKicO6fSWo6cvh9GQfoR3B1WlsqQwefZ1QORTivhInx7gM6HUzQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@formatjs/fast-memoize": "3.1.3"
|
||||
"@formatjs/fast-memoize": "3.1.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@fortawesome/fontawesome-free": {
|
||||
@@ -1817,12 +1786,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mermaid-js/parser": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.1.0.tgz",
|
||||
"integrity": "sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw==",
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.1.1.tgz",
|
||||
"integrity": "sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"langium": "^4.0.0"
|
||||
"@chevrotain/types": "~11.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@mrmarble/djangoql-completion": {
|
||||
@@ -7176,34 +7145,6 @@
|
||||
"node": ">= 16"
|
||||
}
|
||||
},
|
||||
"node_modules/chevrotain": {
|
||||
"version": "12.0.0",
|
||||
"resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-12.0.0.tgz",
|
||||
"integrity": "sha512-csJvb+6kEiQaqo1woTdSAuOWdN0WTLIydkKrBnS+V5gZz0oqBrp4kQ35519QgK6TpBThiG3V1vNSHlIkv4AglQ==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@chevrotain/cst-dts-gen": "12.0.0",
|
||||
"@chevrotain/gast": "12.0.0",
|
||||
"@chevrotain/regexp-to-ast": "12.0.0",
|
||||
"@chevrotain/types": "12.0.0",
|
||||
"@chevrotain/utils": "12.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=22.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/chevrotain-allstar": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.4.1.tgz",
|
||||
"integrity": "sha512-PvVJm3oGqrveUVW2Vt/eZGeiAIsJszYweUcYwcskg9e+IubNYKKD+rHHem7A6XVO22eDAL+inxNIGAzZ/VIWlA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"lodash-es": "^4.17.21"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"chevrotain": "^12.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/chokidar": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
||||
@@ -8635,6 +8576,16 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/es-toolkit": {
|
||||
"version": "1.46.1",
|
||||
"resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.46.1.tgz",
|
||||
"integrity": "sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==",
|
||||
"license": "MIT",
|
||||
"workspaces": [
|
||||
"docs",
|
||||
"benchmarks"
|
||||
]
|
||||
},
|
||||
"node_modules/esast-util-from-estree": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz",
|
||||
@@ -10054,9 +10005,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/globals": {
|
||||
"version": "17.5.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-17.5.0.tgz",
|
||||
"integrity": "sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==",
|
||||
"version": "17.6.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz",
|
||||
"integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
@@ -11569,9 +11520,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/knip": {
|
||||
"version": "6.9.0",
|
||||
"resolved": "https://registry.npmjs.org/knip/-/knip-6.9.0.tgz",
|
||||
"integrity": "sha512-2GLjxteBwmsSA3Z5sJZpPDaNPBIMnlm4/9Nx4CZadEK7YccJZ2/4kwKgPWhVYEqxhwhD0WO4txWXNGTO/Odkkg==",
|
||||
"version": "6.11.0",
|
||||
"resolved": "https://registry.npmjs.org/knip/-/knip-6.11.0.tgz",
|
||||
"integrity": "sha512-84PTlN8Q5smLpTbzs8smTVh8PMbTDXtw0tFksXq/m6auGFC/KSzJykKFmnYh3As38kiWDkoDBvdTTyKk5M1TAQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
@@ -11635,24 +11586,6 @@
|
||||
"url": "https://github.com/sponsors/SuperchupuDev"
|
||||
}
|
||||
},
|
||||
"node_modules/langium": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/langium/-/langium-4.2.2.tgz",
|
||||
"integrity": "sha512-JUshTRAfHI4/MF9dH2WupvjSXyn8JBuUEWazB8ZVJUtXutT0doDlAv1XKbZ1Pb5sMexa8FF4CFBc0iiul7gbUQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@chevrotain/regexp-to-ast": "~12.0.0",
|
||||
"chevrotain": "~12.0.0",
|
||||
"chevrotain-allstar": "~0.4.1",
|
||||
"vscode-languageserver": "~9.0.1",
|
||||
"vscode-languageserver-textdocument": "~1.0.11",
|
||||
"vscode-uri": "~3.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.10.0",
|
||||
"npm": ">=10.2.3"
|
||||
}
|
||||
},
|
||||
"node_modules/layout-base": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz",
|
||||
@@ -12682,14 +12615,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/mermaid": {
|
||||
"version": "11.14.0",
|
||||
"resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.14.0.tgz",
|
||||
"integrity": "sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g==",
|
||||
"version": "11.15.0",
|
||||
"resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.15.0.tgz",
|
||||
"integrity": "sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@braintree/sanitize-url": "^7.1.1",
|
||||
"@iconify/utils": "^3.0.2",
|
||||
"@mermaid-js/parser": "^1.1.0",
|
||||
"@mermaid-js/parser": "^1.1.1",
|
||||
"@types/d3": "^7.4.3",
|
||||
"@upsetjs/venn.js": "^2.0.0",
|
||||
"cytoscape": "^3.33.1",
|
||||
@@ -12700,14 +12633,14 @@
|
||||
"dagre-d3-es": "7.0.14",
|
||||
"dayjs": "^1.11.19",
|
||||
"dompurify": "^3.3.1",
|
||||
"es-toolkit": "^1.45.1",
|
||||
"katex": "^0.16.25",
|
||||
"khroma": "^2.1.0",
|
||||
"lodash-es": "^4.17.23",
|
||||
"marked": "^16.3.0",
|
||||
"roughjs": "^4.6.6",
|
||||
"stylis": "^4.3.6",
|
||||
"ts-dedent": "^2.2.0",
|
||||
"uuid": "^11.1.0"
|
||||
"uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mermaid-isomorphic": {
|
||||
@@ -15242,24 +15175,24 @@
|
||||
}
|
||||
},
|
||||
"node_modules/react": {
|
||||
"version": "19.2.5",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz",
|
||||
"integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==",
|
||||
"version": "19.2.6",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz",
|
||||
"integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react-dom": {
|
||||
"version": "19.2.5",
|
||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz",
|
||||
"integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==",
|
||||
"version": "19.2.6",
|
||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz",
|
||||
"integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"scheduler": "^0.27.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^19.2.5"
|
||||
"react": "^19.2.6"
|
||||
}
|
||||
},
|
||||
"node_modules/react-is": {
|
||||
@@ -18330,16 +18263,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/uuid": {
|
||||
"version": "11.1.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
|
||||
"integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
|
||||
"version": "14.0.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz",
|
||||
"integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==",
|
||||
"funding": [
|
||||
"https://github.com/sponsors/broofa",
|
||||
"https://github.com/sponsors/ctavan"
|
||||
],
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"uuid": "dist/esm/bin/uuid"
|
||||
"uuid": "dist-node/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/validate-npm-package-license": {
|
||||
@@ -18661,43 +18594,6 @@
|
||||
"integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/vscode-jsonrpc": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
|
||||
"integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vscode-languageserver": {
|
||||
"version": "9.0.1",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
|
||||
"integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"vscode-languageserver-protocol": "3.17.5"
|
||||
},
|
||||
"bin": {
|
||||
"installServerIntoExtension": "bin/installServerIntoExtension"
|
||||
}
|
||||
},
|
||||
"node_modules/vscode-languageserver-protocol": {
|
||||
"version": "3.17.5",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
|
||||
"integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"vscode-jsonrpc": "8.2.0",
|
||||
"vscode-languageserver-types": "3.17.5"
|
||||
}
|
||||
},
|
||||
"node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": {
|
||||
"version": "3.17.5",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
|
||||
"integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/vscode-languageserver-textdocument": {
|
||||
"version": "1.0.12",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
|
||||
@@ -18716,12 +18612,6 @@
|
||||
"integrity": "sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/vscode-uri": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
|
||||
"integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/w3c-keyname": {
|
||||
"version": "2.2.8",
|
||||
"resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
"@codemirror/theme-one-dark": "^6.1.3",
|
||||
"@eslint/js": "^9.39.3",
|
||||
"@floating-ui/dom": "^1.7.6",
|
||||
"@formatjs/intl-listformat": "^8.3.4",
|
||||
"@formatjs/intl-listformat": "^8.3.5",
|
||||
"@fortawesome/fontawesome-free": "^7.2.0",
|
||||
"@goauthentik/api": "0.0.0",
|
||||
"@goauthentik/core": "^1.0.0",
|
||||
@@ -151,17 +151,17 @@
|
||||
"eslint-plugin-lit": "^2.2.1",
|
||||
"eslint-plugin-wc": "^3.1.0",
|
||||
"fuse.js": "^7.3.0",
|
||||
"globals": "^17.5.0",
|
||||
"globals": "^17.6.0",
|
||||
"guacamole-common-js": "^1.5.0",
|
||||
"hastscript": "^9.0.1",
|
||||
"knip": "^6.9.0",
|
||||
"knip": "^6.11.0",
|
||||
"lex": "^2025.11.0",
|
||||
"lit": "^3.3.2",
|
||||
"lit-analyzer": "^2.0.3",
|
||||
"lit-element": "^4.2.2",
|
||||
"lit-html": "^3.3.2",
|
||||
"md-front-matter": "^1.0.4",
|
||||
"mermaid": "^11.14.0",
|
||||
"mermaid": "^11.15.0",
|
||||
"node-domexception": "^2025.11.0",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"pino": "^10.3.1",
|
||||
@@ -171,8 +171,8 @@
|
||||
"prettier-plugin-packagejson": "^3.0.2",
|
||||
"pseudolocale": "^2.2.0",
|
||||
"rapidoc": "^9.3.8",
|
||||
"react": "^19.2.5",
|
||||
"react-dom": "^19.2.5",
|
||||
"react": "^19.2.6",
|
||||
"react-dom": "^19.2.6",
|
||||
"rehype-highlight": "^7.0.2",
|
||||
"rehype-mermaid": "^3.0.0",
|
||||
"rehype-parse": "^9.0.1",
|
||||
|
||||
@@ -391,28 +391,20 @@ export class SAMLProviderViewPage extends AKElement {
|
||||
<div class="pf-c-form__group">
|
||||
<label class="pf-c-form__label">
|
||||
<span class="pf-c-form__label-text"
|
||||
>${msg("SSO URL (Post)")}</span
|
||||
>${msg("SAML Endpoint")}</span
|
||||
>
|
||||
</label>
|
||||
<input
|
||||
class="pf-c-form-control"
|
||||
readonly
|
||||
type="text"
|
||||
value="${ifDefined(this.provider.urlSsoPost)}"
|
||||
/>
|
||||
</div>
|
||||
<div class="pf-c-form__group">
|
||||
<label class="pf-c-form__label">
|
||||
<span class="pf-c-form__label-text"
|
||||
>${msg("SSO URL (Redirect)")}</span
|
||||
>
|
||||
</label>
|
||||
<input
|
||||
class="pf-c-form-control"
|
||||
readonly
|
||||
type="text"
|
||||
value="${ifDefined(this.provider.urlSsoRedirect)}"
|
||||
value="${ifDefined(this.provider.urlUnified)}"
|
||||
/>
|
||||
<p class="pf-c-form__helper-text">
|
||||
${msg(
|
||||
"SAML provider endpoint. Use this URL for SP configuration.",
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
<div class="pf-c-form__group">
|
||||
<label class="pf-c-form__label">
|
||||
@@ -424,33 +416,7 @@ export class SAMLProviderViewPage extends AKElement {
|
||||
class="pf-c-form-control"
|
||||
readonly
|
||||
type="text"
|
||||
value="${ifDefined(this.provider.urlSsoInit)}"
|
||||
/>
|
||||
</div>
|
||||
<div class="pf-c-form__group">
|
||||
<label class="pf-c-form__label">
|
||||
<span class="pf-c-form__label-text"
|
||||
>${msg("SLO URL (Post)")}</span
|
||||
>
|
||||
</label>
|
||||
<input
|
||||
class="pf-c-form-control"
|
||||
readonly
|
||||
type="text"
|
||||
value="${ifDefined(this.provider.urlSloPost)}"
|
||||
/>
|
||||
</div>
|
||||
<div class="pf-c-form__group">
|
||||
<label class="pf-c-form__label">
|
||||
<span class="pf-c-form__label-text"
|
||||
>${msg("SLO URL (Redirect)")}</span
|
||||
>
|
||||
</label>
|
||||
<input
|
||||
class="pf-c-form-control"
|
||||
readonly
|
||||
type="text"
|
||||
value="${ifDefined(this.provider.urlSloRedirect)}"
|
||||
value="${ifDefined(this.provider.urlUnifiedInit)}"
|
||||
/>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import "#elements/ak-checkbox-group/ak-checkbox-group";
|
||||
import "#elements/Alert";
|
||||
import "#elements/ak-dual-select/ak-dual-select-dynamic-selected-provider";
|
||||
import "#elements/ak-dual-select/ak-dual-select-provider";
|
||||
import "#elements/forms/FormGroup";
|
||||
@@ -362,14 +361,6 @@ export class AuthenticatorValidateStageForm extends BaseStageForm<AuthenticatorV
|
||||
"Optionally restrict which WebAuthn device types may be used. When no device types are selected, all devices are allowed.",
|
||||
)}
|
||||
</p>
|
||||
<ak-alert inline>
|
||||
${
|
||||
/* TODO: Remove this after 2024.6..or maybe later? */
|
||||
msg(
|
||||
"This restriction only applies to devices created in authentik 2024.4 or later.",
|
||||
)
|
||||
}
|
||||
</ak-alert>
|
||||
</ak-form-element-horizontal>
|
||||
</div>
|
||||
</ak-form-group>
|
||||
|
||||
@@ -54,7 +54,7 @@ import { ToggleUserActivationButton } from "#admin/users/UserActiveForm";
|
||||
import { UserForm } from "#admin/users/UserForm";
|
||||
import { UserImpersonateForm } from "#admin/users/UserImpersonateForm";
|
||||
|
||||
import { CapabilitiesEnum, CoreApi, ModelEnum, User } from "@goauthentik/api";
|
||||
import { CapabilitiesEnum, CoreApi, ModelEnum, User, UserTypeEnum } from "@goauthentik/api";
|
||||
|
||||
import { msg, str } from "@lit/localize";
|
||||
import { css, html, PropertyValues, TemplateResult } from "lit";
|
||||
@@ -192,7 +192,10 @@ export class UserViewPage extends WithLicenseSummary(
|
||||
protected renderActionButtons(user: User) {
|
||||
const showImpersonate =
|
||||
this.can(CapabilitiesEnum.CanImpersonate) && user.pk !== this.currentUser?.pk;
|
||||
const showLockdown = this.hasEnterpriseLicense && user.pk !== this.currentUser?.pk;
|
||||
const showLockdown =
|
||||
this.hasEnterpriseLicense &&
|
||||
user.pk !== this.currentUser?.pk &&
|
||||
user.type !== UserTypeEnum.InternalServiceAccount;
|
||||
|
||||
const displayName = formatUserDisplayName(user);
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ import { CreateWizard } from "#elements/wizard/CreateWizard";
|
||||
import { TypeCreateWizardPageLayouts } from "#elements/wizard/TypeCreateWizardPage";
|
||||
import { WizardPage } from "#elements/wizard/WizardPage";
|
||||
|
||||
import { ButtonKindLabelRecord } from "#components/ak-wizard/shared";
|
||||
|
||||
import { UserForm } from "#admin/users/UserForm";
|
||||
|
||||
import { TypeCreate, UserServiceAccountResponse, UserTypeEnum } from "@goauthentik/api";
|
||||
@@ -57,7 +59,7 @@ export interface UserWizardState {
|
||||
export class ServiceAccountResultPage extends WizardPage<UserWizardState> {
|
||||
public static styles: CSSResult[] = [PFForm, PFFormControl];
|
||||
|
||||
public override headline = msg("Review Credentials");
|
||||
public override headline = msg("View Credentials");
|
||||
|
||||
@state()
|
||||
protected result: UserServiceAccountResponse | null = null;
|
||||
@@ -75,6 +77,10 @@ export class ServiceAccountResultPage extends WizardPage<UserWizardState> {
|
||||
this.host.cancelable = false;
|
||||
};
|
||||
|
||||
public formatNextLabel(): SlottedTemplateResult | null {
|
||||
return ButtonKindLabelRecord.close();
|
||||
}
|
||||
|
||||
public override nextCallback = async (): Promise<boolean> => true;
|
||||
|
||||
protected override render(): SlottedTemplateResult {
|
||||
|
||||
@@ -58,9 +58,10 @@ export abstract class WizardStep extends AKElement {
|
||||
|
||||
.pf-c-wizard__main-body {
|
||||
display: flex;
|
||||
flex-flow: row wrap;
|
||||
flex-flow: column;
|
||||
|
||||
& > * {
|
||||
width: 100%;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,23 +62,6 @@ export class AKWizard<S = Record<string, unknown>> extends AKElement {
|
||||
display: block;
|
||||
height: min(var(--ak-c-dialog--AspectRatioHeight), var(--ak-c-dialog--MaxHeight));
|
||||
}
|
||||
|
||||
.pf-c-wizard__main {
|
||||
overscroll-behavior: contain;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
}
|
||||
|
||||
.pf-c-wizard__main,
|
||||
.pf-c-wizard__main-body {
|
||||
transform: translate3d(0, 0, 0);
|
||||
will-change: transform;
|
||||
}
|
||||
|
||||
.pf-c-wizard__main-body {
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
`,
|
||||
];
|
||||
|
||||
@@ -521,6 +504,12 @@ export class AKWizard<S = Record<string, unknown>> extends AKElement {
|
||||
return html`<p>Unexpected missing step: ${step}</p>`;
|
||||
}
|
||||
|
||||
// By default, disable steps ahead of the current step
|
||||
let disabled = activeStepIndex < idx;
|
||||
// If this wizard is at the end, disable navigation back
|
||||
if (activeStepIndex === this.steps.length - 1 && idx !== activeStepIndex) {
|
||||
disabled = true;
|
||||
}
|
||||
return html`<li role="presentation" class="pf-c-wizard__nav-item">
|
||||
<button
|
||||
class=${classMap({
|
||||
@@ -528,7 +517,7 @@ export class AKWizard<S = Record<string, unknown>> extends AKElement {
|
||||
"pf-m-current": idx === activeStepIndex,
|
||||
})}
|
||||
type="button"
|
||||
?disabled=${activeStepIndex < idx}
|
||||
?disabled=${disabled}
|
||||
@click=${() => {
|
||||
this.activeStepElement = stepEl;
|
||||
}}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
--pf-c-modal-box__header--PaddingTop: var(--ak-c-modal-box__header--BlockSpacer);
|
||||
|
||||
--ak-c-modal-box__footer--BlockSpacer: clamp(0.25em, var(--pf-global--spacer--xl), 3cqb);
|
||||
--ak-c-modal-box__footer--BlockSpacer: clamp(0.25em, var(--pf-global--spacer--xl), 2cqb);
|
||||
--pf-c-modal-box__footer--PaddingTop: var(--ak-c-modal-box__footer--BlockSpacer);
|
||||
--pf-c-modal-box__footer--PaddingBottom: var(--ak-c-modal-box__footer--BlockSpacer);
|
||||
}
|
||||
|
||||
@@ -10,26 +10,44 @@
|
||||
--pf-c-wizard__close--Right: var(--ak-c-wizard__header--InlineSpacer);
|
||||
--pf-c-wizard__close--Top: var(--ak-c-wizard__header--BlockSpacer);
|
||||
|
||||
--ak-c-wizard__footer--BlockSpacer: clamp(0.25em, var(--pf-global--spacer--xl), 3cqb);
|
||||
--ak-c-wizard__footer--BlockSpacer: clamp(0.25em, var(--pf-global--spacer--xl), 2cqb);
|
||||
--pf-c-wizard__footer--PaddingTop: var(--ak-c-wizard__footer--BlockSpacer);
|
||||
--pf-c-wizard__footer--PaddingBottom: var(--ak-c-wizard__footer--BlockSpacer);
|
||||
--pf-c-wizard__footer--child--MarginBottom: 0;
|
||||
}
|
||||
|
||||
.pf-c-wizard__main {
|
||||
overscroll-behavior: contain;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
height: min(var(--ak-c-dialog--MaxHeight), 100cqi);
|
||||
}
|
||||
|
||||
.pf-c-wizard__main-body {
|
||||
--ak-c-fieldset--BorderColor: var(--pf-global--BackgroundColor--150);
|
||||
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
gap: var(--pf-global--spacer--lg);
|
||||
|
||||
fieldset {
|
||||
.pf-c-description-list {
|
||||
margin-inline: var(--pf-global--spacer--sm);
|
||||
}
|
||||
.ak-c-fieldset .pf-c-description-list {
|
||||
margin-inline: var(--pf-global--spacer--sm);
|
||||
}
|
||||
|
||||
& > .pf-c-form {
|
||||
place-content: start;
|
||||
}
|
||||
}
|
||||
|
||||
.pf-c-wizard__main,
|
||||
.pf-c-wizard__main-body {
|
||||
transform: translate3d(0, 0, 0);
|
||||
will-change: transform;
|
||||
}
|
||||
|
||||
.pf-c-wizard__main-title {
|
||||
width: 100%;
|
||||
flex: 0 0 auto;
|
||||
font-family: var(--pf-global--FontFamily--heading--sans-serif);
|
||||
font-size: var(--pf-global--FontSize--md);
|
||||
font-weight: var(--pf-global--FontWeight--bold);
|
||||
|
||||
@@ -3615,26 +3615,10 @@ neprojde, když jedna nebo obě z vybraných možností jsou rovny nebo nad prah
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntityID/Vydavatel</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>SSO URL (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>SSO URL (Redirect)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>SSO URL (přihlášení iniciované IdP)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>SLO URL (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>SLO URL (Redirect)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>SAML Metadata</target>
|
||||
@@ -11195,6 +11179,30 @@ Vazby na skupiny/uživatele jsou kontrolovány vůči uživateli události.</tar
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3640,26 +3640,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntityID/Aussteller</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>SSO URL (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>SSO URL (Redirect)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>SSO URL (IdP-initiated Login)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>SLO URL (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>SLO URL (Redirect)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>SAML-Metadaten</target>
|
||||
@@ -11227,6 +11211,30 @@ Bindings zu Gruppen/Benutzern werden mit dem Benutzer des Ereignisses abgegliche
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -2782,21 +2782,9 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<trans-unit id="sba999428083abce3">
|
||||
<source>EntityID/Issuer</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
</trans-unit>
|
||||
@@ -9212,6 +9200,30 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3587,26 +3587,10 @@ no se aprueba cuando una o ambas de las opciones seleccionadas son iguales o sup
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntityID/Emisor</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>SSO URL (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>SSO URL (Redirect)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>URL de SSO (Inicio de sesión iniciado por el IdP)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>SLO URL (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>SLO URL (Redirect)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>Metadatos SAML</target>
|
||||
@@ -11152,6 +11136,30 @@ Las vinculaciones a grupos/usuarios se verifican en función del usuario del eve
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3715,26 +3715,10 @@ läpäisy estyy kun jompi kumpi tai molemmat vaihtoehdot ylittävät raja-arvon.
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntityID/myöntäjä</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>SSO URL (Lähetys)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>SSO URL (Uudelleenohjaus)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>SSO URL (IdP-lähtöinen kirjautuminen)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>SLO URL (Lähetys)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>SLO URL (Uudelleenohjaus)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>SAML-metatiedot</target>
|
||||
@@ -11393,6 +11377,30 @@ Liitokset käyttäjiin/ryhmiin tarkistetaan tapahtuman käyttäjästä.</target>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3705,26 +3705,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntitéID/Émetteur</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>URL SSO (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>URL SSO (Redirect)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>URL SSO (IdP-initiated Login)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>URL SLO (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>URL SLO (Redirect)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>Métadonnée SAML</target>
|
||||
@@ -11382,6 +11366,30 @@ Les liaisons avec les groupes/utilisateurs sont vérifiées par rapport à l'uti
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3547,26 +3547,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntityID/Issuer</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>SSO URL (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>SSO URL (Redirect)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>SSO URL (IdP-initiated Login)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>SLO URL (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>SLO URL (Redirect)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>Metadati SAML</target>
|
||||
@@ -11101,6 +11085,30 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3709,26 +3709,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntityID/発行者</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>SSO URL(POST)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>SSO URL(リダイレクト)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>SSO URL(IdP開始ログイン)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>SLO URL(POST)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>SLO URL(リダイレクト)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>SAMLメタデータ</target>
|
||||
@@ -11383,6 +11367,30 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3414,26 +3414,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntityID/Issuer</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>SSO URL (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>SSO URL (Redirect)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>SSO URL (IdP-initiated Login)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>SLO URL (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>SLO URL (Redirect)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>SAML 메타데이터</target>
|
||||
@@ -10753,6 +10737,30 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3274,26 +3274,10 @@ slaagt niet wanneer een of beide geselecteerde opties gelijk zijn aan of boven d
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntityID/Uitgever</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>SSO-URL (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>SSO-URL (Omleiding)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>SSO-URL (IdP-geïnitieerde login)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>SLO-URL (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>SLO-URL (Omleiding)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>SAML-metadata</target>
|
||||
@@ -10438,6 +10422,30 @@ Bindingen naar groepen/gebruikers worden gecontroleerd tegen de gebruiker van de
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3433,26 +3433,10 @@ nie przechodzi, gdy jedna lub obie wybrane opcje są równe lub wyższe od progu
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntityID/Issuer</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>URL SSO (POST)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>URL SSO (przekierowanie)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>URL SSO (logowanie inicjowane przez IdP)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>URL SLO (POST)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>URL SLO (Przekierowanie)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>Metadane SAML</target>
|
||||
@@ -10777,6 +10761,30 @@ Powiązania z grupami/użytkownikami są sprawdzane względem użytkownika zdarz
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3712,26 +3712,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntityID/Emissor</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>URL SSO (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>URL SSO (Redirecionamento)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>URL SSO (Login iniciado por IdP)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>URL SLO (Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>URL SLO (Redirecionamento)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>Metadados SAML</target>
|
||||
@@ -11375,6 +11359,30 @@ por exemplo: <x id="0" equiv-text="<code>"/>oci://registry.domain.tld/path
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3469,26 +3469,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>Идентификатор объекта/эмитент</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>URL единого входа (публикация)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>URL единого входа (перенаправление)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>SSO URL (инициируемый IDP вход)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>URL-адрес SLO (сообщение)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>URL-адрес SLO (сообщение)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>SAML Метаданные</target>
|
||||
@@ -10863,6 +10847,30 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3452,26 +3452,10 @@ Belirlenen seçeneklerden biri veya her ikisi de eşiğe eşit veya eşiğin üz
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntityID/Veren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>TOA URL'si (Gönderi)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>TOA URL'si (Yönlendirme)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>TOA URL'si (IdP tarafından başlatılan oturum açma)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>SLO URL'si (Gönderi)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>SLO URL'si (Yönlendirme)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>SAML Meta Verileri</target>
|
||||
@@ -10853,6 +10837,30 @@ Gruplara/kullanıcılara yapılan bağlamalar, etkinliğin kullanıcısına kar
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3708,26 +3708,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>EntityID/签发者</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>SSO URL(Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>SSO URL(重定向)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>SSO URL(IDP 发起的登录)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>SLO URL(Post)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>SLO URL(重定向)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>SAML 元数据</target>
|
||||
@@ -11677,6 +11661,30 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<source>My applications</source>
|
||||
<target>我的应用</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -3302,26 +3302,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
<source>EntityID/Issuer</source>
|
||||
<target>SEntityID/發行者</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scd2984ee5552643a">
|
||||
<source>SSO URL (Post)</source>
|
||||
<target>SSO 網址(Post方法)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saa79b47f60c66458">
|
||||
<source>SSO URL (Redirect)</source>
|
||||
<target>SSO 網址(重新導向)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2da51a6287118ba8">
|
||||
<source>SSO URL (IdP-initiated Login)</source>
|
||||
<target>SSO 網址(識別提供者Idp發起的登入)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s0a57e911e457302b">
|
||||
<source>SLO URL (Post)</source>
|
||||
<target>SLO 網址(Post方法)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1e7308bb1ca323e1">
|
||||
<source>SLO URL (Redirect)</source>
|
||||
<target>SLO 網址(重新導向)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd2c58d7c6dddc515">
|
||||
<source>SAML Metadata</source>
|
||||
<target>SAML 中繼資料</target>
|
||||
@@ -10490,6 +10474,30 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="s2656433a3b1f7e86">
|
||||
<source>My applications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sac974f7c36f0c5c1">
|
||||
<source>SAML Endpoint</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sfb0aa7e424580866">
|
||||
<source>SAML provider endpoint. Use this URL for SP configuration.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s2be14ff0704995c7">
|
||||
<source>Throttling settings</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s05b71dc850552880">
|
||||
<source>Email OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s55c0221c9247ad7d">
|
||||
<source>SMS OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sd63868fff5022ef6">
|
||||
<source>TOTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s89361efde7c66054">
|
||||
<source>Static OTP throttling factor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="s3162a5abea92514e">
|
||||
<source>View Credentials</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM --platform=${BUILDPLATFORM} docker.io/library/node:25.9.0-trixie@sha256:74ff139f927c4a233bf0757edefe1ee057d185d6548c65d2741bdda68660fb6a AS docs-builder
|
||||
FROM --platform=${BUILDPLATFORM} docker.io/library/node:25.9.0-trixie@sha256:7a99c607c2a73ea54f8c554d10bc790569fb7d1173638d5a9f56a23923fe2f87 AS docs-builder
|
||||
|
||||
ENV NODE_ENV=production
|
||||
|
||||
@@ -36,7 +36,7 @@ COPY ./SECURITY.md /work/
|
||||
|
||||
RUN corepack npm run build
|
||||
|
||||
FROM docker.io/library/nginx:1.29-trixie@sha256:6e23479198b998e5e25921dff8455837c7636a67111a04a635cf1bb363d199dc
|
||||
FROM docker.io/library/nginx:1.29-trixie@sha256:1881968aff6f7cdcc4b888c00a11f4ce241ad7ec957e0cb4a9e19e93a3ff87ea
|
||||
LABEL org.opencontainers.image.authors="Authentik Security Inc." \
|
||||
org.opencontainers.image.source="https://github.com/goauthentik/authentik" \
|
||||
org.opencontainers.image.description="authentik product documentation" \
|
||||
|
||||
@@ -43,8 +43,8 @@
|
||||
"postman-code-generators": "^2.1.0",
|
||||
"postman-collection": "^5.0.2",
|
||||
"prism-react-renderer": "^2.4.1",
|
||||
"react": "^19.2.0",
|
||||
"react-dom": "^19.2.5",
|
||||
"react": "^19.2.6",
|
||||
"react-dom": "^19.2.6",
|
||||
"typescript": "^6.0.2"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
|
||||
@@ -26,7 +26,7 @@ The following options can be configured:
|
||||
- _Name_: This is the name shown for the application card
|
||||
- _Launch URL_: The URL that is opened when a user clicks on the application. When left empty, authentik tries to guess it based on the provider
|
||||
|
||||
You can use placeholders in the launch url to build them dynamically based on the logged in user. For example, you can set the Launch URL to `https://goauthentik.io/%(username)s`, which will be replaced with the currently logged in user's username.
|
||||
You can use placeholders in the launch URL to build them dynamically based on the logged-in user. For example, you can set the Launch URL to `https://goauthentik.io/%(username)s`, which will be replaced with the currently logged-in user's username.
|
||||
|
||||
For a reference of all fields available, see [the API schema for the User object](https://api.goauthentik.io/reference/core-users-retrieve/).
|
||||
|
||||
|
||||
@@ -3,22 +3,22 @@ title: Example flows
|
||||
---
|
||||
|
||||
:::info
|
||||
You can apply these flows multiple times to stay updated, however this will discard all changes you've made.
|
||||
You can apply these flows multiple times to stay updated; however, this discards all changes you've made.
|
||||
:::
|
||||
|
||||
:::info
|
||||
The example flows provided below will **override** the default flows, please review the contents of the example flow before importing and consider exporting the affected existing flows first.
|
||||
The example flows provided below **override** the default flows. Review the contents of the example flow before importing and consider exporting the affected existing flows first.
|
||||
:::
|
||||
|
||||
These example flow blueprints are bundled with authentik. To import one, open the authentik Admin interface, navigate to **Flows and Stages** > **Flows**, click **Import**, select **Local path**, and choose the blueprint path shown below. You can also download the blueprint manually and import it with **File upload**.
|
||||
|
||||
## Enrollment (2 Stage)
|
||||
## Two-stage enrollment
|
||||
|
||||
Blueprint path: `example/flows-enrollment-2-stage.yaml`
|
||||
|
||||
Flow: right-click <DownloadLink to="/blueprints/example/flows-enrollment-2-stage.yaml">here</DownloadLink> and save the file.
|
||||
|
||||
Sign-up flow for new users, which prompts them for their username, email, password and name. No verification is done. Users are also immediately logged on after this flow.
|
||||
Sign-up flow for new users that prompts them for their username, email, password, and name. No verification is done. Users are also immediately logged in after this flow.
|
||||
|
||||
## Enrollment with email verification
|
||||
|
||||
@@ -30,25 +30,25 @@ Same flow as above, with an extra email verification stage.
|
||||
|
||||
You'll probably have to adjust the Email stage and set your connection details.
|
||||
|
||||
## Two-factor Login
|
||||
## Two-factor login
|
||||
|
||||
Blueprint path: `example/flows-login-2fa.yaml`
|
||||
|
||||
Flow: right-click <DownloadLink to="/blueprints/example/flows-login-2fa.yaml">here</DownloadLink> and save the file.
|
||||
|
||||
Login flow which follows the default pattern (username/email, then password), but also checks for the user's OTP token, if they have one configured.
|
||||
Login flow that follows the default pattern (username/email, then password), but also checks for the user's OTP token, if they have one configured.
|
||||
|
||||
You can force two-factor authentication by editing the _Not configured action_ in the Authenticator Validation Stage.
|
||||
|
||||
## Login with conditional Captcha
|
||||
## Log in with conditional CAPTCHA
|
||||
|
||||
Blueprint path: `example/flows-login-conditional-captcha.yaml`
|
||||
|
||||
Flow: right-click <DownloadLink to="/blueprints/example/flows-login-conditional-captcha.yaml">here</DownloadLink> and save the file.
|
||||
|
||||
Login flow which conditionally shows the users a captcha, based on the reputation of their IP and Username.
|
||||
Login flow that conditionally shows users a CAPTCHA, based on the reputation of their IP and username.
|
||||
|
||||
By default, the captcha test keys are used. You can get a proper key [here](https://www.google.com/recaptcha/intro/v3.html).
|
||||
By default, the CAPTCHA test keys are used. You can get a proper key [here](https://www.google.com/recaptcha/intro/v3.html).
|
||||
|
||||
## Recovery with email and MFA verification
|
||||
|
||||
@@ -56,7 +56,7 @@ Blueprint path: `example/flows-recovery-email-mfa-verification.yaml`
|
||||
|
||||
Flow: right-click <DownloadLink to="/blueprints/example/flows-recovery-email-mfa-verification.yaml">here</DownloadLink> and save the file.
|
||||
|
||||
With this recovery flow, the user is sent an email after they've identified themselves. After they click on the link in the email, they will have to verify their configured MFA device, and are prompted for a new password and immediately logged on.
|
||||
With this recovery flow, the user is sent an email after they've identified themselves. After they click the link in the email, they must verify their configured MFA device, and are prompted for a new password and immediately logged in.
|
||||
|
||||
There's also <DownloadLink to="/blueprints/example/flows-recovery-email-verification.yaml">a version</DownloadLink> of this flow available without MFA validation at `example/flows-recovery-email-verification.yaml`, which is not recommended.
|
||||
|
||||
|
||||
@@ -11,41 +11,41 @@ As shown in the screenshot below, the Flow Inspector displays to the right, besi
|
||||
## Access the Flow Inspector
|
||||
|
||||
:::warning
|
||||
Be aware that when running a flow with the Inspector enabled, the flow is still executed normally. This means that for example, a [User write](../stages/user_write/index.md) stage _will_ write user data.
|
||||
Be aware that when running a flow with the Inspector enabled, the flow is still executed normally. This means that, for example, a [User write](../stages/user_write/index.md) stage _will_ write user data.
|
||||
:::
|
||||
|
||||
The Inspector is accessible to users that have been granted the [permission](../../../users-sources/access-control/permissions.md) **Can inspect a Flow's execution**, either directly or through a role. Superusers can always inspect flow executions.
|
||||
|
||||
### Manually running a flow with the Inspector
|
||||
### Manually run a flow with the Inspector
|
||||
|
||||
1. To access the Inspector, open the Admin interface and navigate to **Flows and Stages > Flows**.
|
||||
|
||||
2. Select the specific flow that you want to inspect by clicking its name in the list.
|
||||
|
||||
3. On the Flow's detail page, on the left side under **Execute Flow**, click **Use Inspector**.
|
||||
3. On the flow's detail page, on the left side under **Execute Flow**, click **Use Inspector**.
|
||||
|
||||
4. The selected flow will launch in a new browser tab, with the Flow Inspector displayed to the right.
|
||||
4. The selected flow launches in a new browser tab, with the Flow Inspector displayed to the right.
|
||||
|
||||
### Additional ways to access the Flow Inspector
|
||||
|
||||
Alternatively, a user with the correct permission can launch the Inspector by adding the query parameter `?inspector` to the URL after the URL opens on a flow.
|
||||
|
||||
Users with permissions to access the Flow Inspector see a button in the top right of the [default flow executor](./executors/if-flow.md) to open the Inspector.
|
||||
Users with permissions to access the Flow Inspector see a button in the top-right corner of the [default flow executor](./executors/if-flow.md) to open the Inspector.
|
||||
|
||||
When developing authentik with the debug mode enabled, the Inspector is enabled by default and can be accessed by both unauthenticated users and standard users. However the debug mode should only be used for the development of authentik. So unless you are a developer and need the more verbose error information, the best practice for using the Flow Inspector is to assign the permission, not use debug mode.
|
||||
When developing authentik with the debug mode enabled, the Inspector is enabled by default and can be accessed by both unauthenticated users and standard users. However, debug mode should only be used for the development of authentik. Unless you are a developer and need the more verbose error information, the best practice for using the Flow Inspector is to assign the permission, not use debug mode.
|
||||
|
||||
:::info Troubleshooting
|
||||
|
||||
- If the Flow Inspector does not launch and a "Bad request" error displays, this is likely either because you selected a flow that has a policy bound directly to it that prevents access (so the Inspector won't open because the flow can't be executed) or because you do not have [view permission](../../../users-sources/access-control/manage_permissions.md#view-permissions) on that specific flow.
|
||||
:::
|
||||
|
||||
### Flow Inspector Details
|
||||
### Flow Inspector details
|
||||
|
||||
The following information is shown in the Inspector:
|
||||
|
||||
#### Next stage
|
||||
|
||||
This is the currently planned next stage. If you have stage bindings configured to `Evaluate when flow is planned`, then you will see the result here. If, however, you have them configured to re-evaluate (`Evaluate when stage is run`), then this will not show up, since the results will vary based on your input.
|
||||
This is the currently planned next stage. If you have stage bindings configured to `Evaluate when flow is planned`, then you see the result here. If, however, you have them configured to re-evaluate (`Evaluate when stage is run`), then this does not show up, because the results vary based on your input.
|
||||
|
||||
The name and kind of the stage, as well as the unique ID, are shown.
|
||||
|
||||
@@ -55,9 +55,9 @@ Here you can see an overview of which stages have run, which is currently active
|
||||
|
||||
#### Current plan context
|
||||
|
||||
This shows you the current context. This will contain fields depending on the same, after an identification stage for example you would see "pending_user" defined.
|
||||
This shows the current context. The fields depend on the active stage; after an identification stage, for example, you would see "pending_user" defined.
|
||||
|
||||
This data is not cleaned, so if your flow involves inputting a password, it will be shown here too.
|
||||
This data is not cleaned, so if your flow involves inputting a password, it is shown here too.
|
||||
|
||||
#### Session ID
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ In which case, you must configure each user's email domain as a [verified custom
|
||||
Alternatively, if you need to provision users with email domains that you don't control, refer to [Email handling](./create-entra-provider.md#email-handling) for more information.
|
||||
:::
|
||||
|
||||
## Configuring you Entra ID tenant
|
||||
## Configure your Entra ID tenant
|
||||
|
||||
1. Log in to the [Entra ID admin center](https://entra.microsoft.com).
|
||||
2. Navigate to **App registrations**, click **New registration**, and set the following configurations:
|
||||
|
||||
@@ -7,7 +7,7 @@ For more information about using a Google Workspace provider, see the [Overview]
|
||||
|
||||
Your Google Workspace organization must be configured before you [create a Google Workspace provider](./create-gws-provider.md).
|
||||
|
||||
## Configure your Google Workspace Organization
|
||||
## Configure your Google Workspace organization
|
||||
|
||||
The main steps to configure your Google Workspace organization are:
|
||||
|
||||
@@ -38,7 +38,7 @@ The main steps to configure your Google Workspace organization are:
|
||||
### Configure service account key and scopes
|
||||
|
||||
1. On the **Service accounts** page, click the account that you just created.
|
||||
2. Click the **Keys** tab at top of the page, then click **Add Key** > **Create new key**.
|
||||
2. Click the **Keys** tab at the top of the page, then click **Add Key** > **Create new key**.
|
||||
3. Select **JSON** as the key type, then click **Create**.
|
||||
A pop-up displays with the private key. The key can be saved to your computer as a JSON file. This key will be required when creating the Google Workspace provider in authentik.
|
||||
|
||||
@@ -54,7 +54,7 @@ The main steps to configure your Google Workspace organization are:
|
||||
6. Log in to the Admin Console, and then navigate to **Security** > **Access and data control** > **API controls**.
|
||||
7. On the **API controls** page, click **Manage Domain Wide Delegation**.
|
||||
8. On the **Domain Wide Delegation** page, click **Add new**.
|
||||
9. In the **Add a new client ID** box, paste in the Client ID that you copied from the Admin console earlier (the value from the downloaded JSON file) and paste in the following scope documents:
|
||||
9. In the **Add a new client ID** box, paste in the Client ID that you copied from the Admin console earlier (the value from the downloaded JSON file) and paste in the following scopes:
|
||||
- `https://www.googleapis.com/auth/admin.directory.user`
|
||||
- `https://www.googleapis.com/auth/admin.directory.group`
|
||||
- `https://www.googleapis.com/auth/admin.directory.group.member`
|
||||
|
||||
@@ -5,7 +5,7 @@ slug: /providers
|
||||
|
||||
import DocCardList from "@theme/DocCardList";
|
||||
|
||||
A Provider is an authentication method, a service that is used by authentik to authenticate the user for the associated application. Common Providers are OpenID Connect (OIDC)/OAuth2, LDAP, SAML, a generic proxy provider, and others.
|
||||
A provider is an authentication method, a service that is used by authentik to authenticate the user for the associated application. Common providers are OpenID Connect (OIDC)/OAuth2, LDAP, SAML, a generic proxy provider, and others.
|
||||
|
||||
Providers are the "other half" of [applications](../applications/index.md). They typically exist in a 1-to-1 relationship; each application needs a provider and every provider can be used with one application.
|
||||
|
||||
@@ -15,7 +15,7 @@ Applications can use additional providers to augment the functionality of the ma
|
||||
|
||||
When you create certain types of providers, you need to select specific [flows](../flows-stages/flow/index.md) to apply to users who access authentik via the provider. To learn more, refer to our [default flow documentation](../flows-stages/flow/examples/default_flows.md).
|
||||
|
||||
You can also create a SAML provider by uploading an SP metadata XML file that contains the service provider's configuration data. SAML metadata is used to share configuration information between the Identity Provider (IdP) and the Service Provider (SP). An SP metadata XML file typically contains the SP certificate, the entity ID, the Assertion Consumer Service URL (ACS URL), and a log out URL (SingleLogoutService).
|
||||
You can also create a SAML provider by uploading an SP metadata XML file that contains the service provider's configuration data. SAML metadata is used to share configuration information between the Identity Provider (IdP) and the Service Provider (SP). An SP metadata XML file typically contains the SP certificate, the entity ID, the Assertion Consumer Service URL (ACS URL), and a logout URL (SingleLogoutService).
|
||||
|
||||
To learn more about each provider type, refer to the documentation for each provider:
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@ To create a provider along with the corresponding application that uses it for a
|
||||
2. Navigate to **Applications > Applications** and click **New Provider** to create an application and provider pair.
|
||||
3. On the **New application** page, define the application settings, and then click **Next**.
|
||||
4. Select **OAuth2/OIDC** as the **Provider Type**, and then click **Next**.
|
||||
5. On the **Configure OAuth2/OpenId Provider** page, provide the configuration settings and then click **Submit** to create both the application and the provider.
|
||||
5. On the **Configure OAuth2/OpenID Provider** page, provide the configuration settings and then click **Submit** to create both the application and the provider.
|
||||
|
||||
:::info
|
||||
Optionally, configure the provider with the `offline_access` scope mapping. By default, applications only receive an access token. To receive a refresh token, applications and authentik must be configured to request the `offline_access` scope. Do this in the Scope mapping area on the **Configure OAuth2/OpenId Provider** page.
|
||||
Optionally, configure the provider with the `offline_access` scope mapping. By default, applications only receive an access token. To receive a refresh token, applications and authentik must be configured to request the `offline_access` scope. Do this in the Scope mapping area on the **Configure OAuth2/OpenID Provider** page.
|
||||
:::
|
||||
|
||||
@@ -10,7 +10,7 @@ It's important to understand how authentik works with and supports the OAuth 2.0
|
||||
|
||||
authentik can act either as the OP, (OpenID Provider, with authentik as the IdP), or as the RP (Relying Party, or the application that uses OAuth 2.0 to authenticate). If you want to configure authentik as an OP, then you create a provider, then use the OAuth 2.0 provider. If you want authentik to serve as the RP, then configure a [source](../../../users-sources/sources/index.md). Of course, authentik can serve as both the RP and OP, if you want to use the authentik OAuth provider and also use sources.
|
||||
|
||||
All standard OAuth 2.0 flows (authorization code, client_credentials, implicit, hybrid, device code) and grant types are supported in authentik, and we follow the [OIDC spec](https://openid.net/specs/openid-connect-core-1_0.html). OAuth 2.0 in authentik supports OAuth, PKCE, [Github compatibility](./github-compatibility.md) and the RP receives data from our scope mapping system.
|
||||
All standard OAuth 2.0 flows (authorization code, client_credentials, implicit, hybrid, device code) and grant types are supported in authentik, and we follow the [OIDC spec](https://openid.net/specs/openid-connect-core-1_0.html). OAuth 2.0 in authentik supports OAuth, PKCE, [GitHub compatibility](./github-compatibility.md), and the RP receives data from our scope mapping system.
|
||||
|
||||
The authentik OAuth 2.0 provider comes with all the standard functionality and features of OAuth 2.0, including the OAuth 2.0 security principles such as no cleartext storage of credentials, configurable encryption, configurable short expiration times, and the configuration of automatic rotation of refresh tokens. In short, our OAuth 2.0 protocol support provides full coverage.
|
||||
|
||||
|
||||
@@ -12,16 +12,17 @@ Bindings define how SAML messages are exchanged between an Identity Provider (Id
|
||||
|
||||
A binding defines how SAML messages are transported over network protocols. In authentik, you can select one of two SAML bindings: `HTTP Redirect` or `HTTP POST`.
|
||||
|
||||
Endpoint URLs specify where and how the messages are sent according to that binding. The table below shows the supported endpoints for each binding:
|
||||
Endpoint URLs specify where and how the messages are sent according to that binding. authentik exposes a unified SAML endpoint that handles both SSO and SLO for both `HTTP Redirect` and `HTTP POST` bindings — the operation type is detected from the incoming SAML message:
|
||||
|
||||
| Endpoint | URL |
|
||||
| ------------------------- | ------------------------------------------------------------ |
|
||||
| SSO (Redirect binding) | `/application/saml/<application_slug>/sso/binding/redirect/` |
|
||||
| SSO (POST binding) | `/application/saml/<application_slug>/sso/binding/post/` |
|
||||
| SSO (IdP-initiated login) | `/application/saml/<application_slug>/sso/binding/init/` |
|
||||
| SLO (Redirect binding) | `/application/saml/<application_slug>/slo/binding/redirect/` |
|
||||
| SLO (POST binding) | `/application/saml/<application_slug>/slo/binding/post/` |
|
||||
| Metadata Download | `/application/saml/<application_slug>/metadata/` |
|
||||
| Endpoint | URL |
|
||||
| ------------------------- | ------------------------------------------------ |
|
||||
| SAML endpoint (SSO + SLO) | `/application/saml/<application_slug>/` |
|
||||
| SSO (IdP-initiated login) | `/application/saml/<application_slug>/init/` |
|
||||
| Metadata Download | `/application/saml/<application_slug>/metadata/` |
|
||||
|
||||
:::info Legacy endpoints
|
||||
The previous binding-specific endpoints (`/sso/binding/redirect/`, `/sso/binding/post/`, `/sso/binding/init/`, `/slo/binding/redirect/`, `/slo/binding/post/`) remain available for backward compatibility.
|
||||
:::
|
||||
|
||||
## SAML metadata
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ An authentik WS-Federation provider is typically created as part of an applicati
|
||||
3. On the **New application** page, define the application details, and then click **Next**.
|
||||
4. Select **WS-Federation Provider** as the **Provider Type**, and then click **Next**.
|
||||
5. On the **Configure WS-Federation Provider** page, provide a name for the provider, select an authorization flow, and the two required configuration settings:
|
||||
- **Reply URL**: Enter the application callback URL, where the token should be sent. This is the specific endpoint on an RP (application) where an Identity Provider (STS) sends the security token and authentication response after a successful log in.
|
||||
- **Reply URL**: Enter the application callback URL, where the token should be sent. This is the specific endpoint on an RP (application) where an Identity Provider (STS) sends the security token and authentication response after a successful login.
|
||||
- **Realm**: Enter the identifier (string) of the requesting realm; that is, the Relying Party (RP) or application receiving the token. Realm is similar to the SAML 2.0 Entity ID.
|
||||
6. Click **Submit** to create both the application and the provider.
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#### `settings.navbar.userDisplay`
|
||||
|
||||
Configure what is shown in the top right corner. Defaults to `username`. Available options: `username`, `name`, `email`
|
||||
Configure what is shown in the top-right corner. Defaults to `username`. Available options: `username`, `name`, `email`
|
||||
|
||||
#### `settings.theme.base`
|
||||
|
||||
|
||||
@@ -196,7 +196,7 @@ While the prerequisites above must be satisfied prior to having your pull reques
|
||||
- Reference issues and pull requests liberally after the first line
|
||||
- Naming of commits within a PR does not need to adhere to the guidelines as we squash merge PRs
|
||||
|
||||
### Python Style Guide
|
||||
### Python style guide
|
||||
|
||||
All Python code is linted with [black](https://black.readthedocs.io/en/stable/) and [Ruff](https://docs.astral.sh/ruff).
|
||||
|
||||
@@ -207,13 +207,13 @@ authentik runs on Python 3.14 at the time of writing this.
|
||||
- Ensure any database migrations work properly from the last stable version (this is checked via CI)
|
||||
- If your code changes central functions, make sure nothing else is broken.
|
||||
|
||||
### Documentation Style Guide
|
||||
### Documentation style guide
|
||||
|
||||
Refer to the full [Style Guide](../developer-docs/docs/style-guide.mdx) for details, but here are some important highlights:
|
||||
|
||||
- Our product name is authentik, with a lower-case "a" and a "k" on the end. Our company name is Authentik Security.
|
||||
- Our product name is authentik, with a lowercase "a" and a "k" on the end. Our company name is Authentik Security.
|
||||
|
||||
- We use sentence style case in our titles and headings.
|
||||
- We use sentence case in our titles and headings.
|
||||
|
||||
- We use **bold** text to name UI components, and _italic_ text for variables.
|
||||
|
||||
|
||||
@@ -6,17 +6,17 @@ This Style Guide provides guidelines to ensure that the authentik documentation
|
||||
|
||||
We appreciate all contributions to our documentation — whether it's fixing a typo, adding new content, or writing an entirely new topic. To help us review and merge your contributions more efficiently, please follow our [writing documentation](./writing-documentation.md) guidelines. If you notice any inconsistencies, feel free to open an [Issue](https://github.com/goauthentik/authentik/issues) or submit a [Pull Request](https://github.com/goauthentik/authentik/pulls) to fix them.
|
||||
|
||||
- [General Style Guidelines](#general-style-guidelines)
|
||||
- [General style guidelines](#general-style-guidelines)
|
||||
- [Terminology](#terminology)
|
||||
- [Writing Style](#writing-style)
|
||||
- [Word Choices](#word-choices)
|
||||
- [Formatting Guidelines](#formatting-guidelines)
|
||||
- [Component-Based Formatting](#component-based-formatting)
|
||||
- [Error Message Formatting and Troubleshooting](#error-message-formatting-and-troubleshooting)
|
||||
- [Accessibility Best Practices](#accessibility-best-practices)
|
||||
- [Inclusive Language](#inclusive-language)
|
||||
- [Images and Media](#images-and-media)
|
||||
- [Document Structure and Metadata](#document-structure-and-metadata)
|
||||
- [Writing style](#writing-style)
|
||||
- [Word choices](#word-choices)
|
||||
- [Formatting guidelines](#formatting-guidelines)
|
||||
- [Component-based formatting](#component-based-formatting)
|
||||
- [Error message formatting and troubleshooting](#error-message-formatting-and-troubleshooting)
|
||||
- [Accessibility best practices](#accessibility-best-practices)
|
||||
- [Inclusive language](#inclusive-language)
|
||||
- [Images and media](#images-and-media)
|
||||
- [Document structure and metadata](#document-structure-and-metadata)
|
||||
|
||||
---
|
||||
|
||||
@@ -26,15 +26,15 @@ We appreciate all contributions to our documentation — whether it's fixing a t
|
||||
|
||||
- Documentation should be structured to follow the natural order of tasks, making it easier for users to follow. Organize sections in a manner that reflects the actual workflow used to complete tasks.
|
||||
|
||||
- When writing procedural documentation (How Tos) the steps should follow the workflow in the UI, specifying the exact pages to navigate and the precise fields, tabs, etc., to select or complete. Present the UI components in the document in the same order they appear in the UI.
|
||||
- When writing procedural documentation (how-to docs), the steps should follow the workflow in the UI, specifying the exact pages to navigate and the precise fields, tabs, etc., to select or complete. Present the UI components in the document in the same order they appear in the UI.
|
||||
|
||||
### Headings
|
||||
|
||||
Use headings (sub-titles) to break up large blocks of text, making it easier for users to navigate the content and find specific sections quickly.
|
||||
Use headings (subtitles) to break up large blocks of text, making it easier for users to navigate the content and find specific sections quickly.
|
||||
|
||||
### Look and feel of the docs
|
||||
|
||||
In general, the visual, aesthetics of the technical documentation is intended to be lean and clean. Both the content (shorter sentences, concise instructions, etc) and the layout strive to have a clean, uncluttered look, with restrained use of colors and large callouts or announcements. Relatedly, the colors used for our Info and Warning callouts, light blue and light yellow respectively, are reserved for those purposes only.
|
||||
In general, the visual aesthetic of the technical documentation is intended to be lean and clean. Both the content (shorter sentences, concise instructions, etc.) and the layout strive to have a clean, uncluttered look, with restrained use of colors and large callouts or announcements. Relatedly, the colors used for our Info and Warning callouts, light blue and light yellow respectively, are reserved for those purposes only.
|
||||
|
||||
### Cross-references
|
||||
|
||||
@@ -343,7 +343,7 @@ When documenting errors, follow this structure:
|
||||
|
||||
1. **Error Message**: Display the error in a code block.
|
||||
2. **Possible Causes**: List common reasons for the error.
|
||||
3. **Solutions**: Provide step-by-step fixes or a work-around if there is one.
|
||||
3. **Solutions**: Provide step-by-step fixes or a workaround if there is one.
|
||||
|
||||
**Example**:
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@ Copy the generated recovery key and paste it into the URL, after the domain. For
|
||||
|
||||
`http://localhost:9000/recovery/use-token/ChFk2nJKJKJKY9OdIc8yv6RCgpGYp5rdndBhR6qHoHoJoWDdlvLuvU/`
|
||||
|
||||
## End-to-End (E2E) Setup
|
||||
## End-to-end (E2E) setup
|
||||
|
||||
Start the E2E test services with the following command:
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ authentik_version: "2025.12.0"
|
||||
- SSH to Linux hosts using authentik credentials, see [SSH authentication](../../authentik-agent/device-authentication/ssh-authentication.mdx).
|
||||
- Authenticate CLI applications using authentik credentials, see [CLI application authentication](../../authentik-agent/device-authentication/cli-app-authentication/index.mdx).
|
||||
|
||||
:::warning Supported Windows Versions
|
||||
:::warning Supported Windows versions
|
||||
The authentik Agent is currently only tested on Windows 11 and Windows Server 2022. Other versions may work but are untested.
|
||||
:::
|
||||
|
||||
@@ -23,7 +23,7 @@ It currently only supports local login; RDP login is not supported.
|
||||
|
||||
:::warning
|
||||
|
||||
- When WCP is enabled, the password of the Windows user account that's used to login is set to a random string.
|
||||
- When WCP is enabled, the password of the Windows user account that's used to log in is set to a random string.
|
||||
- WCP can cause issues with user encrypted directories.
|
||||
- Support with Active Directory has not been confirmed yet.
|
||||
- Offline login is currently not supported.
|
||||
|
||||
@@ -16,17 +16,17 @@ authentik_version: "2025.12.0"
|
||||
## How it works
|
||||
|
||||
- authentik Agent is integrated with the Pluggable Authentication Modules (PAM) framework on the Linux device.
|
||||
- The end user logs in via the usual Linux login screen but are prompted for their authentik credentials.
|
||||
- The end user logs in via the usual Linux login screen and is prompted for their authentik credentials.
|
||||
- The Agent authenticates the credentials against the authentik server and the user is logged in.
|
||||
|
||||
## How to log in to a Linux device
|
||||
|
||||
:::note
|
||||
When configured correctly, when logging in you should see a prompt for **authentik Password** rather than just **Password**.
|
||||
When configured correctly, when you log in you should see a prompt for **authentik Password** rather than just **Password**.
|
||||
:::
|
||||
|
||||
1. On the Linux login screen, you enter your authentik credentials.
|
||||
2. Once authenticated, you will be logged in to the Linux device.
|
||||
2. After you authenticate, you are logged in to the Linux device.
|
||||
|
||||
## Configure device access
|
||||
|
||||
@@ -47,5 +47,5 @@ You can also assign a device access group during enrollment by selecting a **Dev
|
||||
|
||||
## Known issues
|
||||
|
||||
- Only Webauthn MFA is supported.
|
||||
- Only WebAuthn MFA is supported.
|
||||
- On non-Debian Linux distributions, you currently need to [manually configure NSS and PAM](../../agent-deployment/linux.mdx#configure-device-login-on-non-debian-systems).
|
||||
|
||||
@@ -15,7 +15,7 @@ Currently, only local login is supported; RDP login is not yet available and is
|
||||
:::warning
|
||||
|
||||
- WCP is currently only tested on Windows 11 and Windows Server 2022.
|
||||
- When WCP is enabled, the password of the Windows user account that's used to login is set to a random string.
|
||||
- When WCP is enabled, the password of the Windows user account that's used to log in is set to a random string.
|
||||
- WCP can cause issues with user encrypted directories.
|
||||
- Support with Active Directory has not been confirmed yet.
|
||||
- Offline login is currently not supported.
|
||||
@@ -23,15 +23,15 @@ Currently, only local login is supported; RDP login is not yet available and is
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- The authentik Agent (including the WCP component ) deployed on the Windows device. See [Deploy the authentik Agent on Windows](../../agent-deployment/windows.md) for more details.
|
||||
- The authentik Agent (including the WCP component) deployed on the Windows device. See [Deploy the authentik Agent on Windows](../../agent-deployment/windows.md) for more details.
|
||||
- A **[Device access group](../device-access-groups.mdx)** configured with the appropriate user or group bindings. Without this, all login attempts will be denied. See [Configure device access](#configure-device-access) below.
|
||||
|
||||
## How it works
|
||||
|
||||
- The system agent requests an authentication and authorization URL from authentik, using its token.
|
||||
- This URL is opened in a browser which also injects the device token information, allowing authentik to know that the login request is executed on the same machine.
|
||||
- This URL is opened in a browser that also injects the device token information, allowing authentik to know that the login request is executed on the same machine.
|
||||
- The end user logs in normally using the standard authentik interface and flows.
|
||||
- Once finished, the browser is redirected to a well-defined location and uses the token it receives to finish authentication and authorization through the system agent.
|
||||
- After authentication finishes, the browser is redirected to a well-defined location and uses the token it receives to finish authentication and authorization through the system agent.
|
||||
|
||||
## How to log in to a Windows device
|
||||
|
||||
@@ -40,7 +40,7 @@ Currently, only local login is supported; RDP login is not yet available and is
|
||||

|
||||
|
||||
2. A browser window will open and prompt you for your authentik credentials.
|
||||
3. Once authenticated, you will be logged in to the Windows device.
|
||||
3. After you authenticate, you are logged in to the Windows device.
|
||||
|
||||
## Configure device access
|
||||
|
||||
|
||||
@@ -16,9 +16,9 @@ If this is a fresh install, refer to our technical documentation for instruction
|
||||
|
||||
An authentik Enterprise license can be purchased via our [Customer Portal](https://customers.goauthentik.io/). Alternatively, contact us via hello@goauthentik.io or schedule a call via our [pricing page](https://goauthentik.io/pricing/) to discuss customized licensing, a trial, or your specific needs.
|
||||
|
||||
Authentik licenses are linked to a specific authentik deployment based on its Installation ID. You can obtain your Installation ID by first logging in to the Admin interface of your authentik deployment. Then, navigate to **Enterprise** > **Licenses** where your installation ID is displayed.
|
||||
authentik licenses are linked to a specific authentik deployment based on its Installation ID. You can obtain your Installation ID by first logging in to the Admin interface of your authentik deployment. Then, navigate to **Enterprise** > **Licenses** where your installation ID is displayed.
|
||||
|
||||
A license covers a specified number of users, however additional users can be added to a license. Alternatively, additional licenses can be purchased for the same deployment.
|
||||
A license covers a specified number of users; however, additional users can be added to a license. Alternatively, additional licenses can be purchased for the same deployment.
|
||||
|
||||
For more information on purchasing a license and using the Customer Portal, see [Customer Portal and licensing](./manage-enterprise.mdx).
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ In the Customer Portal, you can invite new users to your organization and remove
|
||||
|
||||
## License management
|
||||
|
||||
Authentik licenses are linked to a specific authentik deployment based on its Installation ID. You can obtain your Installation ID by first logging in to the Admin interface of your authentik deployment. Then, navigate to **Enterprise** > **Licenses** where your installation ID is displayed.
|
||||
authentik licenses are linked to a specific authentik deployment based on its Installation ID. You can obtain your Installation ID by first logging in to the Admin interface of your authentik deployment. Then, navigate to **Enterprise** > **Licenses** where your installation ID is displayed.
|
||||
|
||||
A license covers a specified number of users; however, additional users can be added to a license. Alternatively, additional licenses can be purchased for the same deployment.
|
||||
|
||||
|
||||
@@ -30,9 +30,9 @@
|
||||
"@types/react": "^19.2.14",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"prism-react-renderer": "^2.4.1",
|
||||
"react": "^19.2.0",
|
||||
"react": "^19.2.6",
|
||||
"react-before-after-slider-component": "^1.1.8",
|
||||
"react-dom": "^19.2.5",
|
||||
"react-dom": "^19.2.6",
|
||||
"typescript": "^6.0.2",
|
||||
"unist-util-visit": "^5.0.0"
|
||||
},
|
||||
|
||||
@@ -12,7 +12,7 @@ draft: true
|
||||
|
||||
## Upgrading
|
||||
|
||||
This release does not introduce any new requirements. You can follow the upgrade instructions below; for more detailed information about upgrading authentik, refer to our [Upgrade documentation](../install-config/upgrade.mdx).
|
||||
This release does not introduce any new requirements. You can follow the upgrade instructions below; for more detailed information about upgrading authentik, refer to our [Upgrade documentation](../../install-config/upgrade.mdx).
|
||||
|
||||
:::warning
|
||||
When you upgrade, be aware that the version of the authentik instance and of any outposts must be the same. We recommend that you always upgrade any outposts at the same time you upgrade your authentik instance.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
_Reported by [@DreamingRaven](https://github.com/DreamingRaven)_
|
||||
|
||||
## Existing Authenticated Users can Create Arbitrary Accounts
|
||||
## Existing authenticated users can create arbitrary accounts
|
||||
|
||||
### Summary
|
||||
|
||||
@@ -14,7 +14,7 @@ authentik 2022.11.4, 2022.10.4 and 2022.12.0 fix this issue.
|
||||
|
||||
### Impact
|
||||
|
||||
This vulnerability could make it much easier for name and email collisions to occur, making it harder for user to log in. This also makes it more difficult for admins to properly administer users since more and more confusing users will exist. This paired with password reset flows if enabled would mean a circumvention of on-boarding policies. Say for instance a company wanted to invite a limited number of beta testers, those beta testers would be able to create an arbitrary number of accounts themselves.
|
||||
This vulnerability could make it much easier for name and email collisions to occur, making it harder for users to log in. This also makes it more difficult for admins to properly administer users because more confusing users will exist. This paired with password reset flows if enabled would mean a circumvention of on-boarding policies. Say for instance a company wanted to invite a limited number of beta testers, those beta testers would be able to create an arbitrary number of accounts themselves.
|
||||
|
||||
### Details
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ _Reported by [@Sapd](https://github.com/Sapd)_
|
||||
|
||||
### Summary
|
||||
|
||||
When initializing a OAuth2 flow with a `code_challenge` and `code_method` (thus requesting PKCE), the SSO provider (authentik) **must** check if there is a matching **and** existing `code_verifier` during the token step.
|
||||
When initializing an OAuth2 flow with a `code_challenge` and `code_method` (thus requesting PKCE), the SSO provider (authentik) **must** check if there is a matching **and** existing `code_verifier` during the token step.
|
||||
|
||||
authentik checks if the contents of code*verifier is matching \*\*\_ONLY*\*\* when it is provided. When it is left out completely, authentik simply accepts the token request without it; even when the flow was started with a `code_challenge`.
|
||||
|
||||
@@ -36,13 +36,13 @@ Section 5, Compatibility
|
||||
|
||||
Section 5, Compatibility, allows server implementations of this specification to accept OAuth 2.0 clients that do not implement this extension. However, if a `code_verifier` is not received from the client in the Authorization Request, servers that support backward compatibility should revert to the standard OAuth 2.0 protocol sans this extension (including all steps).
|
||||
|
||||
It should be noted that this does not mean that the `code_verifier` check can be disregarded at any point if the initial request included `code_challenge` or `code_challenge_method`. Since Authentik supports PKCE, it **MUST** verify the code_verifier as described in Section 4.5 **AND** fail if it was not provided.
|
||||
It should be noted that this does not mean that the `code_verifier` check can be disregarded at any point if the initial request included `code_challenge` or `code_challenge_method`. Because authentik supports PKCE, it **MUST** verify the `code_verifier` as described in Section 4.5 **AND** fail if it was not provided.
|
||||
|
||||
Ofc verification can be skipped if the original authorization request did not invoke PKCE (no `code_challenge_method` and no `code_challenge`).
|
||||
Of course, verification can be skipped if the original authorization request did not invoke PKCE (no `code_challenge_method` and no `code_challenge`).
|
||||
|
||||
Failure to check the `code_verifier` renders the PKCE flow ineffective. This vulnerability particularly endangers public or hybrid clients, as their `code` is deemed non-confidential.
|
||||
|
||||
While not explicitly stated in the standard, it is generally recommended that OAuth2 flows accepting public clients should enforce PKCE - at least when redirecting to a non HTTPS URL (like http or an app link).
|
||||
While not explicitly stated in the standard, it is generally recommended that OAuth2 flows accepting public clients should enforce PKCE - at least when redirecting to a non-HTTPS URL (like http or an app link).
|
||||
|
||||
### Impact
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
_Reported by [@lauritzh](https://github.com/lauritzh)_
|
||||
|
||||
## XSS in Authentik via JavaScript-URI as Redirect URI and form_post Response Mode
|
||||
## XSS in authentik via JavaScript URI as redirect URI and form_post response mode
|
||||
|
||||
### Summary
|
||||
|
||||
@@ -14,11 +14,11 @@ authentik 2023.8.6 and 2023.10.6 fix this issue.
|
||||
|
||||
### Impact
|
||||
|
||||
The impact depends on the attack scenario. In the following I will describe the two scenario that were identified for Authentik.
|
||||
The impact depends on the attack scenario. The following sections describe the two scenarios that were identified for authentik.
|
||||
|
||||
#### Redirect URI Misconfiguration
|
||||
#### Redirect URI misconfiguration
|
||||
|
||||
While advising that this may cause security issues, Authentik generally allows wildcards as Redirect URI. Therefore, using a wildcard-only effectively allowing arbitrary URLS is possible misconfiguration that may be present in real-world instances.
|
||||
Although authentik advises that this can cause security issues, authentik generally allows wildcards as redirect URIs. Therefore, using only a wildcard and effectively allowing arbitrary URLs is a possible misconfiguration that can be present in real-world instances.
|
||||
|
||||
In such cases, unauthenticated and unprivileged attackers can perform the above described actions.
|
||||
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
_Reported by [@PontusHanssen](https://github.com/PontusHanssen)_
|
||||
|
||||
## Insecure default configuration for OAuth2 Redirect URIs
|
||||
## Insecure default configuration for OAuth2 redirect URIs
|
||||
|
||||
### Summary
|
||||
|
||||
Redirect URIs in the OAuth2 provider in authentik are checked by RegEx comparison.
|
||||
When no Redirect URIs are configured in a provider, authentik will automatically use the first `redirect_uri` value received as an allowed redirect URI, without escaping characters that have a special meaning in RegEx. Similarly, the documentation did not take this into consideration either.
|
||||
Redirect URIs in the OAuth2 provider in authentik are checked by regex comparison.
|
||||
When no Redirect URIs are configured in a provider, authentik will automatically use the first `redirect_uri` value received as an allowed redirect URI, without escaping characters that have a special meaning in regex. Similarly, the documentation did not take this into consideration either.
|
||||
|
||||
Given a provider with the Redirect URIs set to `https://foo.example.com`, an attacker can register a domain `fooaexample.com`, and it will correctly pass validation.
|
||||
|
||||
@@ -15,9 +15,9 @@ Given a provider with the Redirect URIs set to `https://foo.example.com`, an att
|
||||
|
||||
authentik 2024.8.5 and 2024.10.3 fix this issue.
|
||||
|
||||
The patched versions remedy this issue by changing the format that the Redirect URIs are saved in, allowing for the explicit configuration if the URL should be checked strictly or as a RegEx. This means that these patches include a backwards-incompatible database change and API change.
|
||||
The patched versions remedy this issue by changing the format that the Redirect URIs are saved in, allowing for the explicit configuration if the URL should be checked strictly or as a regex. This means that these patches include a backwards-incompatible database change and API change.
|
||||
|
||||
Manual action _is required_ if any provider is intended to use RegEx for Redirect URIs because the migration will set the comparison type to strict for every Redirect URI.
|
||||
Manual action _is required_ if any provider is intended to use regex for Redirect URIs because the migration will set the comparison type to strict for every Redirect URI.
|
||||
|
||||
### Workarounds
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ We recommend using a certificate generated outside of authentik. A privately iss
|
||||
|
||||
To download a certificate for SAML configuration:
|
||||
|
||||
1. Log into authentik as an administrator, and open the authentik Admin interface.
|
||||
1. Log in to authentik as an administrator, and open the authentik Admin interface.
|
||||
2. Navigate to **Applications** > **Providers** and click on the name of the provider.
|
||||
3. Click the **Download** button found under **Download signing certificate**. The contents of this certificate will be required when configuring the service provider.
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
---
|
||||
title: Service Accounts
|
||||
sidebar_label: Service Accounts
|
||||
title: Service accounts
|
||||
sidebar_label: Service accounts
|
||||
---
|
||||
|
||||
Service accounts are specialized user accounts designed for machine-to-machine authentication and automation purposes rather than interactive human use. They're ideal for integrating authentik with external systems, APIs, and services.
|
||||
|
||||
## Types of Service Accounts
|
||||
## Types of service accounts
|
||||
|
||||
authentik distinguishes between two types of service accounts:
|
||||
|
||||
1. **User-created Service Accounts**: Created by administrators for integrating with external systems or for automation purposes.
|
||||
2. **Internal Service Accounts**: Created and managed automatically by authentik for internal purposes, such as outpost communications. These cannot be created manually.
|
||||
1. **User-created service accounts**: Created by administrators for integrating with external systems or for automation purposes.
|
||||
2. **Internal service accounts**: Created and managed automatically by authentik for internal purposes, such as outpost communications. These cannot be created manually.
|
||||
|
||||
## Limitations
|
||||
|
||||
@@ -24,7 +24,7 @@ Service accounts have certain limitations compared to regular user accounts:
|
||||
6. Cannot change their own password or manage their own account settings.
|
||||
7. Are subject to token expiration policies that differ from regular user accounts.
|
||||
|
||||
## Creating a Service Account
|
||||
## Create a service account
|
||||
|
||||
To create a service account:
|
||||
|
||||
@@ -37,9 +37,9 @@ To create a service account:
|
||||
- **Expires on**: Sets the expiration date (defaults to 1 year from the creation date).
|
||||
4. Click **Create Service Account**.
|
||||
|
||||
After creating the service account, you'll see a confirmation screen that shows the username and generated password (token). Make sure to copy this information somewhere secure as you'll need it for authentication.
|
||||
After creating the service account, you'll see a confirmation screen that shows the username and generated password (token). Make sure to copy this information somewhere secure because you'll need it for authentication.
|
||||
|
||||
## Token Properties
|
||||
## Token properties
|
||||
|
||||
Service account tokens have the following properties:
|
||||
|
||||
@@ -48,7 +48,7 @@ Service account tokens have the following properties:
|
||||
- **Revocation**: Tokens can be revoked at any time by deleting them or generating new ones. OAuth2 access tokens associated with service accounts can also be introspected or revoked through the OAuth2 provider endpoints when the authenticating provider is the issuing provider or is configured for [cross-provider token introspection and revocation](../add-secure-apps/providers/oauth2/index.mdx#cross-provider-token-introspection-and-revocation).
|
||||
- **Automatic Rotation**: When a token expires, it's automatically rotated to maintain security.
|
||||
|
||||
## Managing Service Account Tokens
|
||||
## Manage service account tokens
|
||||
|
||||
Tokens for service accounts are managed through the authentik Admin interface:
|
||||
|
||||
@@ -56,7 +56,7 @@ Tokens for service accounts are managed through the authentik Admin interface:
|
||||
2. Navigate to **Directory** > **Tokens and App passwords**.
|
||||
Here you can view, create, copy, delete, and manage tokens.
|
||||
|
||||
### Creating New Tokens
|
||||
### Create new tokens
|
||||
|
||||
To create a new token for a service account:
|
||||
|
||||
@@ -68,17 +68,17 @@ To create a new token for a service account:
|
||||
- **App password**: Used for logging in using a flow executor (1-year default lifespan).
|
||||
5. Click **Create** to generate the new token.
|
||||
|
||||
### Managing and Regenerating Tokens
|
||||
### Manage and regenerate tokens
|
||||
|
||||
- To copy a token's value, use the copy button under the **Actions** column.
|
||||
- To delete a token, select it from the list and click the **Delete** button.
|
||||
- To regenerate a token, delete the existing token and create a new one with the same settings, ensuring you select the same username under the **User** dropdown list.
|
||||
|
||||
## Authentication with Service Accounts
|
||||
## Authentication with service accounts
|
||||
|
||||
Service accounts authenticate using [HTTP Basic Authentication](https://datatracker.ietf.org/doc/html/rfc7617). The username and password (token) generated during account creation are used as credentials.
|
||||
Service accounts authenticate using [HTTP Basic authentication](https://datatracker.ietf.org/doc/html/rfc7617). The username and password (token) generated during account creation are used as credentials.
|
||||
|
||||
## Permissions and Access Control
|
||||
## Permissions and access control
|
||||
|
||||
Like regular user accounts, with service accounts you can assign [permissions and use RBAC](../users-sources/access-control/manage_permissions.md).
|
||||
|
||||
@@ -86,24 +86,24 @@ Like regular user accounts, with service accounts you can assign [permissions an
|
||||
2. Grant specific permissions directly to the service account.
|
||||
3. Restrict the service account to specific applications or resources.
|
||||
|
||||
We recommend following the principle of least privilege and only grant service accounts the permissions they absolutely need.
|
||||
We recommend following the principle of least privilege and granting service accounts only the permissions they need.
|
||||
|
||||
## Common Use Cases
|
||||
## Common use cases
|
||||
|
||||
### Integration with External Systems
|
||||
### Integration with external systems
|
||||
|
||||
Service accounts are commonly used for:
|
||||
|
||||
1. **LDAP Authentication**: Systems like SSSD, QNAP NAS, and other LDAP clients often use service accounts to bind to authentik's LDAP provider.
|
||||
2. **Directory Synchronization**: Tools that sync users and groups between authentik and other systems.
|
||||
3. **API Automation**: For scripts, CI/CD pipelines, or other systems that need to interact with authentik's API.
|
||||
1. **LDAP authentication**: Systems like SSSD, QNAP NAS, and other LDAP clients often use service accounts to bind to authentik's LDAP provider.
|
||||
2. **Directory synchronization**: Tools that sync users and groups between authentik and other systems.
|
||||
3. **API automation**: For scripts, CI/CD pipelines, or other systems that need to interact with authentik's API.
|
||||
|
||||
## Security Best Practices
|
||||
## Security best practices
|
||||
|
||||
When using service accounts, follow these security practices:
|
||||
|
||||
1. **Least Privilege**: Grant service accounts only the permissions they need.
|
||||
2. **Secure Storage**: Store service account tokens securely in encrypted storage, environment variables, or secret management systems.
|
||||
3. **Token Rotation**: Rotate tokens periodically for sensitive integrations.
|
||||
4. **Use Expiration**: Set appropriate token expiration dates for your use case.
|
||||
5. **Audit Usage**: Monitor service account activity for unexpected behavior.
|
||||
1. **Least privilege**: Grant service accounts only the permissions they need.
|
||||
2. **Secure storage**: Store service account tokens securely in encrypted storage, environment variables, or secret management systems.
|
||||
3. **Token rotation**: Rotate tokens periodically for sensitive integrations.
|
||||
4. **Use expiration**: Set appropriate token expiration dates for your use case.
|
||||
5. **Audit usage**: Monitor service account activity for unexpected behavior.
|
||||
|
||||
@@ -53,7 +53,7 @@ You can repeat this process for other OUs and objects within Active Directory.
|
||||
By default, Windows Server 2025 requires LDAP signing, which can disrupt authentik’s Active Directory connectivity if LDAPS is not in use. This can be addressed by enabling LDAPS or by disabling LDAP signing on the domain controller, with the understanding that the latter option carries security implications.
|
||||
:::
|
||||
|
||||
## authentik Setup
|
||||
## authentik setup
|
||||
|
||||
To support the integration of authentik with Active Directory, you will need to create a new LDAP Source in authentik.
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ The following placeholders are used in this guide:
|
||||
- `freeipa.company` is the Name of the domain.
|
||||
- `ipa1.freeipa.company` is the Name of the FreeIPA server.
|
||||
|
||||
## FreeIPA Setup
|
||||
## FreeIPA setup
|
||||
|
||||
1. Log in to FreeIPA.
|
||||
|
||||
@@ -42,7 +42,7 @@ The following placeholders are used in this guide:
|
||||
Additional info: [22.1.2. Enabling Password Reset Without Prompting for a Password Change at the Next Login](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/linux_domain_identity_authentication_and_policy_guide/user-authentication#user-passwords-no-expiry)
|
||||
:::
|
||||
|
||||
## authentik Setup
|
||||
## authentik setup
|
||||
|
||||
:::note
|
||||
This documentation lists only the settings that you need to change from their default values. Be aware that any changes other than those explicitly mentioned in this guide could cause issues.
|
||||
|
||||
@@ -45,7 +45,7 @@ If the LDAP server rejects the TLS handshake, verify that **Server URI**, **Enab
|
||||
When the **Sync users** and/or the **Sync groups** options are enabled, their respective property mapping options must have at least one mapping selected, otherwise the sync will not start.
|
||||
:::
|
||||
|
||||
#### Additional Settings
|
||||
#### Additional settings
|
||||
|
||||
- **Parent Group**: Parent group for all the groups imported from LDAP. An example use case would be to import Active Directory groups under a root `imported-from-ad` group.
|
||||
- **User path**: Path template for all new users created.
|
||||
|
||||
@@ -25,7 +25,7 @@ If you have the provider metadata, you should be able to extract all values you
|
||||
| Slug | company-saml | The slug used in URLs for the source |
|
||||
| Icon | `branding/company-icon.svg` | Optional icon or image shown for the source. See [File picker values](../../../../customize/file-picker.md). |
|
||||
| SSO URL | https://saml.company/login/saml | The SingleSignOnService URL for the IDP, this can be found in the metadata or IDP documentation. There can be different URLs for different Binding Types (e.g. HTTP-Redirect and HTTP-POST), use the URL corresponding to the binding type you choose below |
|
||||
| SLO URL | https://saml.company/logout/saml | The URL that is called when a user logs out of authentik, can be used to automatically log the user out of the SAML IDP after logging out of Authentik. Not supported by all IDPs, and not always wanted behaviour. |
|
||||
| SLO URL | https://saml.company/logout/saml | The URL that is called when a user logs out of authentik, can be used to automatically log the user out of the SAML IDP after logging out of authentik. Not supported by all IDPs, and not always wanted behaviour. |
|
||||
| Issuer/Entity ID | https://authentik.company | The identifier for the authentik instance in the SAML federation, can be chosen freely. This is used to identify the SP on the IDP side, it usually makes sense to configure this to the URL of the SP or the path corresponding to the SP (e.g. `/source/saml/<source-slug>/` |
|
||||
| Binding Type | HTTP-POST | How authentik communicates with the SSO URL (302 redirect or POST request). This will depend on what the provider supports. |
|
||||
| Allow IDP-Initiated Logins | False | Whether to allow the IDP to log users into authentik without any interaction. Activating this may constitute a security risk since this request is not verified, and could be utilized by an attacker to authenticate a user without interaction on their side. |
|
||||
|
||||
@@ -37,7 +37,7 @@ After creating the application you need to customize its login settings.
|
||||
|
||||
Next, you need to obtain the **App ID** and **App Secret** for the Facebook app. These will be required when creating the source in authentik.
|
||||
|
||||
10. Go back to the Dashboard, and in the bottom left of the navigation pane, click **App settings** > **Basic**.
|
||||
10. Go back to the Dashboard, and in the bottom-left of the navigation pane, click **App settings** > **Basic**.
|
||||
11. Take note of the **App ID** and the **App secret** values.
|
||||
|
||||
Finally, you need to publish the Facebook app.
|
||||
|
||||
@@ -27,7 +27,7 @@ To integrate Shibboleth with authentik you will need to create a SAML source in
|
||||
2. Navigate to **Directory** > **Federation and Social login** and click **New Source**.
|
||||
3. Select **SAML Source** and configure the following settings:
|
||||
- Set **Name** to `Shibboleth`.
|
||||
- Set **Slug** to `shibboleth` (this sets the slug used in Shibboleth's metadata url).
|
||||
- Set **Slug** to `shibboleth` (this sets the slug used in Shibboleth's metadata URL).
|
||||
- Set **SSO URL** to `https://shibboleth.company/idp/profile/SAML2/Redirect/SSO`.
|
||||
- Set **Binding Type** to `Redirect`.
|
||||
- Set **Issuer** to `https://authentik.company/source/saml/<shibboleth-slug>/metadata/`.
|
||||
|
||||
@@ -259,7 +259,7 @@ Possible causes:
|
||||
- Flow slug doesn't match the invitation's configured flow
|
||||
- Invitation stage is not bound to the flow
|
||||
|
||||
### Pre-filled Data Not Appearing
|
||||
### Pre-filled data not appearing
|
||||
|
||||
Possible causes:
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ This document covers the basic tasks that end-users accomplish in the User inter
|
||||
|
||||
## Access the User interface
|
||||
|
||||
As an end-user, you will typically first see the User interface when you log into authentik. The main page of the User interface is the **My applications** page, where all of the applications that you access via authentik.
|
||||
As an end-user, you will typically first see the User interface when you log in to authentik. The main page of the User interface is the **My applications** page, where you can find all of the applications that you access through authentik.
|
||||
|
||||
To view your own settings click the gear icon in the upper right. The following sections are displayed on the page:
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ support_level: community
|
||||
|
||||
## What is AFFiNE?
|
||||
|
||||
> AFFiNE is an open-source platform that allows you to bring together documents, whiteboards, and databases. It is a reliable tool designed to create a professional workspace for your work. With AFFiNE, you can focus on practicality and efficiency, making it easier to collaborate on your projects.
|
||||
> AFFiNE is an open-source, self-hostable workspace for documents, whiteboards, and databases.
|
||||
>
|
||||
> -- https://affine.pro/
|
||||
|
||||
@@ -29,28 +29,26 @@ To support the integration of AFFiNE with authentik, you need to create an appli
|
||||
|
||||
1. Log in to authentik as an administrator and open the authentik Admin interface.
|
||||
2. Navigate to **Applications** > **Applications** and click **New Application** to open the application wizard.
|
||||
|
||||
- **Application**: provide a descriptive name, an optional group for the type of application, the policy engine mode, and optional UI settings.
|
||||
- **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type.
|
||||
- **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations.
|
||||
- Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later.
|
||||
- Create a `Strict` redirect URI and set to `https://affine.company/oauth/callback`.
|
||||
- Select any available signing key.
|
||||
- **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **My applications** page.
|
||||
- **Application**: provide a descriptive name, an optional group for the type of application, the policy engine mode, and optional UI settings.
|
||||
- **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type.
|
||||
- **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations.
|
||||
- Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later.
|
||||
- Add one `Strict` redirect URI and set it to `https://affine.company/oauth/callback`.
|
||||
- Select any available signing key.
|
||||
- **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **My applications** page.
|
||||
|
||||
3. Click **Submit** to save the new application and provider.
|
||||
|
||||
## AFFiNE configuration
|
||||
|
||||
1. Log in to AFFiNE as an administrator.
|
||||
2. Navigate to the Admin Panel of your instance by clicking on your profile picture.
|
||||
3. Navigate to **Settings** > **OAuth**.
|
||||
4. Under **OIDC OAuth provider config**, set the following JSON data:
|
||||
2. Click your profile picture and navigate to **Admin Panel** > **Settings** > **OAuth**.
|
||||
3. Under **OIDC OAuth provider config**, set the following JSON data:
|
||||
|
||||
```json
|
||||
{
|
||||
"args": {},
|
||||
"issuer": "https://authentik.company/application/o/<application_slug>/",
|
||||
"issuer": "https://authentik.company/application/o/<application_slug>",
|
||||
"clientId": "<Client ID from authentik>",
|
||||
"clientSecret": "<Client Secret from authentik>"
|
||||
}
|
||||
@@ -60,8 +58,9 @@ To support the integration of AFFiNE with authentik, you need to create an appli
|
||||
|
||||
## Configuration verification
|
||||
|
||||
To verify the integration of authentik with AFFiNE, log out of AFFiNE, then on the login page click on **Continue with OIDC**. You should be redirected to authentik, and once authenticated, logged in to AFFiNE.
|
||||
To confirm that authentik is properly configured with AFFiNE, open AFFiNE and log in using the **Continue with OIDC** login option. You should be redirected to authentik for authentication and then redirected back to AFFiNE.
|
||||
|
||||
## Resources
|
||||
|
||||
- [AFFiNE Docs - OAuth 2.0 ](https://docs.affine.pro/self-host-affine/administer/oauth-2-0#oidc)
|
||||
- [AFFiNE OAuth 2.0 documentation](https://docs.affine.pro/self-host-affine/administer/oauth-2-0#oidc)
|
||||
- [AFFiNE OIDC provider source](https://github.com/toeverything/AFFiNE/blob/canary/packages/backend/server/src/plugins/oauth/providers/oidc.ts)
|
||||
|
||||
@@ -118,8 +118,8 @@ ChatGPT only enables the **Manage SSO** wizard after you verify ownership of you
|
||||
- **Provide an Identity Provider Name**: enter a descriptive name (e.g. `authentik`).
|
||||
- **Provide your SAML Configuration**:
|
||||
- **Entity ID**: `https://authentik.company/application/saml/<application_slug>/metadata/`
|
||||
- **Sign-in URL**: `https://authentik.company/application/saml/<application_slug>/sso/binding/redirect/`
|
||||
- **Sign-out URL**: `https://authentik.company/application/saml/<application_slug>/slo/binding/redirect/`
|
||||
- **Sign-in URL**: `https://authentik.company/application/saml/<application_slug>/`
|
||||
- **Sign-out URL**: `https://authentik.company/application/saml/<application_slug>/`
|
||||
- **X.509 Certificate**: paste the contents of your certificate file.
|
||||
- **Create an Application**: copy the **ACS URL** and **Audience** values that ChatGPT displays.
|
||||
- **Configure Application Link**: review the direct sign-in link that ChatGPT generates; share it with users if needed.
|
||||
|
||||
@@ -8,7 +8,7 @@ support_level: community
|
||||
|
||||
> HedgeDoc lets you create real-time collaborative markdown notes.
|
||||
>
|
||||
> -- https://github.com/hedgedoc/hedgedoc
|
||||
> -- https://hedgedoc.org/
|
||||
|
||||
## Preparation
|
||||
|
||||
@@ -29,32 +29,40 @@ To support the integration of HedgeDoc with authentik, you need to create an app
|
||||
|
||||
1. Log in to authentik as an administrator and open the authentik Admin interface.
|
||||
2. Navigate to **Applications** > **Applications** and click **New Application** to open the application wizard.
|
||||
|
||||
- **Application**: provide a descriptive name, an optional group for the type of application, the policy engine mode, and optional UI settings.
|
||||
- **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type.
|
||||
- **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations.
|
||||
- Note the **Client ID**, **Client Secret**, and **slug** values because they will be required later.
|
||||
- Set a `Strict` redirect URI to `https://hedgedoc.company/auth/oauth2/callback`.
|
||||
- Select any available signing key.
|
||||
- **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **My applications** page.
|
||||
|
||||
- **Application**: provide a descriptive name, an optional group for the type of application, the policy engine mode, and optional UI settings.
|
||||
- **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type.
|
||||
- **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations.
|
||||
- Note the **Client ID** and **Client Secret** values because they will be required later.
|
||||
- Set a `Strict` redirect URI to `https://hedgedoc.company/auth/oauth2/callback`.
|
||||
- Select any available signing key.
|
||||
- **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **My applications** page.
|
||||
3. Click **Submit** to save the new application and provider.
|
||||
|
||||
## HedgeDoc configuration
|
||||
|
||||
You need to set the following `env` Variables for Docker based installations.
|
||||
|
||||
Set the following values:
|
||||
Set the following environment variables in your HedgeDoc deployment:
|
||||
|
||||
```yaml
|
||||
CMD_OAUTH2_PROVIDERNAME: "authentik"
|
||||
CMD_OAUTH2_CLIENT_ID: "<Client ID from above>"
|
||||
CMD_OAUTH2_CLIENT_SECRET: "<Client Secret from above>"
|
||||
CMD_OAUTH2_CLIENT_ID: "<Client ID from authentik>"
|
||||
CMD_OAUTH2_CLIENT_SECRET: "<Client Secret from authentik>"
|
||||
CMD_OAUTH2_SCOPE: "openid email profile"
|
||||
CMD_OAUTH2_USER_PROFILE_URL: "https://authentik.company/application/o/userinfo/"
|
||||
CMD_OAUTH2_TOKEN_URL: "https://authentik.company/application/o/token/"
|
||||
CMD_OAUTH2_AUTHORIZATION_URL: "https://authentik.company/application/o/authorize/"
|
||||
CMD_OAUTH2_USER_PROFILE_ID_ATTR: "sub"
|
||||
CMD_OAUTH2_USER_PROFILE_USERNAME_ATTR: "preferred_username"
|
||||
CMD_OAUTH2_USER_PROFILE_DISPLAY_NAME_ATTR: "name"
|
||||
CMD_OAUTH2_USER_PROFILE_EMAIL_ATTR: "email"
|
||||
```
|
||||
|
||||
Restart HedgeDoc for the changes to take effect.
|
||||
|
||||
## Configuration verification
|
||||
|
||||
To confirm that authentik is properly configured with HedgeDoc, open HedgeDoc, select the **authentik** login option, and complete the authentik sign-in flow. A successful authentication should return you to HedgeDoc as a signed-in user.
|
||||
|
||||
## Resources
|
||||
|
||||
- [HedgeDoc documentation - Configuration](https://docs.hedgedoc.org/configuration/)
|
||||
- [HedgeDoc documentation - OAuth](https://docs.hedgedoc.org/guides/auth/oauth/)
|
||||
|
||||
@@ -57,7 +57,6 @@ To support the integration of Joplin with authentik, you need to create property
|
||||
- **Choose a Provider type**: select **SAML Provider** as the provider type.
|
||||
- **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations.
|
||||
- Set the **ACS URL** to `https://joplin.company/api/saml`.
|
||||
- Set the **Service Provider Binding** to `Post`.
|
||||
- Under **Advanced protocol settings**, select an available **Signing certificate** and ensure **Sign assertions** and **Sign responses** are enabled.
|
||||
- Under **Property mappings**, add the two property mappings created in the previous section.
|
||||
- **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **My applications** page.
|
||||
|
||||
@@ -14,9 +14,9 @@ support_level: community
|
||||
|
||||
The following placeholders are used in this guide:
|
||||
|
||||
- `kimai.company` is the FQDN of the Kimai Install
|
||||
- `authentik.company` is the FQDN of the authentik Install
|
||||
- `admin.group` is the authentik group to be made Admin in Kimai
|
||||
- `kimai.company` is the FQDN of the Kimai installation.
|
||||
- `authentik.company` is the FQDN of the authentik installation.
|
||||
- `admin.group` is the authentik group to make an administrator in Kimai.
|
||||
|
||||
:::info
|
||||
This documentation lists only the settings that you need to change from their default values. Be aware that any changes other than those explicitly mentioned in this guide could cause issues accessing your application.
|
||||
@@ -34,11 +34,10 @@ To support the integration of Kimai with authentik, you need to create an applic
|
||||
- **Choose a Provider type**: select **SAML Provider** as the provider type.
|
||||
- **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations.
|
||||
- Set the **ACS URL** to `https://kimai.company/auth/saml/acs`.
|
||||
- Set the **Service Provider Binding** to `Post`.
|
||||
- Set the **Audience** to `https://kimai.company/auth/saml`.
|
||||
- Under **Advanced protocol settings**:
|
||||
- Select an available **Signing certificate**.
|
||||
- Set **NameID Property Mapping** to `authentik default SAML MApping: Email`.
|
||||
- Set **NameID Property Mapping** to `authentik default SAML Mapping: Email`.
|
||||
- Set **Default NameID Policy** to `Email Address`.
|
||||
- **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **My applications** page.
|
||||
|
||||
@@ -50,7 +49,7 @@ To support the integration of Kimai with authentik, you need to create an applic
|
||||
2. Navigate to **Applications** > **Providers** and click on the name of the provider that you created in the previous section.
|
||||
3. Under **Related objects** > **Download signing certificate**, click on **Download**. This is your certificate file and its contents will be required in the next section.
|
||||
|
||||
## Kimai Configuration
|
||||
## Kimai configuration
|
||||
|
||||
Paste the following block in your `local.yaml` file, after replacing the placeholder values from above. The file is usually located in `/opt/kimai/config/packages/local.yaml`.
|
||||
|
||||
@@ -68,7 +67,7 @@ The value for `x509cert` is the content of the certificate file downloaded in th
|
||||
kimai:
|
||||
saml:
|
||||
activate: true
|
||||
title: Login with authentik
|
||||
title: Log in with authentik
|
||||
mapping:
|
||||
- {
|
||||
saml: $http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress,
|
||||
@@ -84,16 +83,16 @@ kimai:
|
||||
# Insert your roles here (ROLE_USER is added automatically)
|
||||
- { saml: admin.group, kimai: ROLE_ADMIN }
|
||||
connection:
|
||||
# You SAML provider
|
||||
# Your SAML provider
|
||||
# Your authentik instance, replace https://authentik.company with your authentik URL
|
||||
idp:
|
||||
entityId: "https://authentik.company/application/saml/<application_slug>/metadata/"
|
||||
singleSignOnService:
|
||||
url: "https://authentik.company/application/saml/<application_slug>/sso/binding/redirect/"
|
||||
url: "https://authentik.company/application/saml/<application_slug>/"
|
||||
binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
|
||||
# the "single logout" feature was not yet tested, if you want to help, please let me know!
|
||||
singleLogoutService:
|
||||
url: "https://authentik.company/application/saml/<application_slug>/slo/binding/redirect/"
|
||||
url: "https://authentik.company/application/saml/<application_slug>/"
|
||||
binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
|
||||
# Signing certificate from *Advanced protocol settings*
|
||||
x509cert: "|
|
||||
|
||||
@@ -160,7 +160,6 @@ To support the integration of Mattermost with authentik via SAML, you need to up
|
||||
- **Choose a Provider type**: select **SAML Provider** as the provider type.
|
||||
- **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations:
|
||||
- Set the **ACS URL** to `https://mattermost.company/login/sso/saml`.
|
||||
- Set the **Service Provider Binding** to `Post`.
|
||||
- Under **Advanced protocol settings**:
|
||||
- Set the **Signing Certificate** to any available authentik certificate (e.g., the default self-signed certificate).
|
||||
- Enable **Sign assertions**.
|
||||
@@ -183,7 +182,7 @@ To support the integration of Mattermost with authentik via SAML, you need to up
|
||||
2. Navigate to **Channels** > **System Console** > **Authentication** > **SAML 2.0**.
|
||||
3. Configure the following settings:
|
||||
- Enable **Enable Login With SAML 2.0**.
|
||||
- Set **SAML SSO URL** to `https://authentik.company/application/saml/<application_slug>/sso/binding/redirect/`.
|
||||
- Set **SAML SSO URL** to `https://authentik.company/application/saml/<application_slug>/`.
|
||||
- Set **Identity Provider Issuer URL** to `https://authentik.company/application/saml/<application_slug>/metadata/`.
|
||||
- Set **Identity Provider Public Certificate** to the contents of the authentik signing certificate you downloaded.
|
||||
- Enable **Verify Signature**.
|
||||
@@ -212,7 +211,7 @@ To verify the integration of authentik with Mattermost, log out and attempt to l
|
||||
|
||||
## Resources
|
||||
|
||||
- [Mattermost on Github](https://github.com/mattermost/mattermost)
|
||||
- [Mattermost on GitHub](https://github.com/mattermost/mattermost)
|
||||
- [Mattermost GitLab Authentication documentation](https://docs.mattermost.com/configure/authentication-configuration-settings.html#gitlab-oauth-2-0-settings)
|
||||
- [Mattermost SAML Configuration documentation](https://docs.mattermost.com/configure/authentication-configuration-settings.html#saml-2-0)
|
||||
- [Related blog post, in German, explaining the OIDC technique](https://ayedo.de/posts/mattermost-self-hosted-sso-mit-authentik/)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user