From 1ac4dacc3b85289198fd4129e9fb84512e16e9e0 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 10:44:07 +0200 Subject: [PATCH 01/25] outposts: fix error when comparing ports in docker controller when port mapping is disabled Signed-off-by: Jens Langhammer --- authentik/outposts/controllers/docker.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/authentik/outposts/controllers/docker.py b/authentik/outposts/controllers/docker.py index 4714750c3..fbf4bea98 100644 --- a/authentik/outposts/controllers/docker.py +++ b/authentik/outposts/controllers/docker.py @@ -76,6 +76,9 @@ class DockerController(BaseController): # {'HostIp': '0.0.0.0', 'HostPort': '389'}, # {'HostIp': '::', 'HostPort': '389'} # ]} + # If no ports are mapped (either mapping disabled, or host network) + if not container.ports: + return False for port in self.deployment_ports: key = f"{port.inner_port or port.port}/{port.protocol.lower()}" if key not in container.ports: From a69fcbca9aca9ab046e1e33e6980c0010bd978f8 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 11:08:14 +0200 Subject: [PATCH 02/25] web: fix rendering of token copy button in dark mode closes #1528 Signed-off-by: Jens Langhammer # Conflicts: # web/src/locales/fr_FR.po --- web/src/locales/en.po | 10 +++++++--- web/src/locales/pseudo-LOCALE.po | 10 +++++++--- web/src/pages/tokens/TokenListPage.ts | 10 ++++++++-- web/src/user/user-settings/tokens/UserTokenList.ts | 7 +++++-- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/web/src/locales/en.po b/web/src/locales/en.po index 483387081..d5eebc79d 100644 --- a/web/src/locales/en.po +++ b/web/src/locales/en.po @@ -978,9 +978,9 @@ msgstr "Cookie domain" msgid "Copy" msgstr "Copy" -#: src/user/user-settings/tokens/UserTokenList.ts -msgid "Copy Key" -msgstr "Copy Key" +#: +#~ msgid "Copy Key" +#~ msgstr "Copy Key" #: src/pages/providers/saml/SAMLProviderViewPage.ts msgid "Copy download URL" @@ -4630,6 +4630,10 @@ msgstr "Token count" msgid "Token expiry" msgstr "Token expiry" +#: src/pages/tokens/TokenListPage.ts +msgid "Token is managed by authentik." +msgstr "Token is managed by authentik." + #: src/pages/providers/oauth2/OAuth2ProviderForm.ts #: src/pages/providers/proxy/ProxyProviderForm.ts msgid "Token validity" diff --git a/web/src/locales/pseudo-LOCALE.po b/web/src/locales/pseudo-LOCALE.po index de14a6654..6abcd2de5 100644 --- a/web/src/locales/pseudo-LOCALE.po +++ b/web/src/locales/pseudo-LOCALE.po @@ -972,9 +972,9 @@ msgstr "" msgid "Copy" msgstr "" -#: src/user/user-settings/tokens/UserTokenList.ts -msgid "Copy Key" -msgstr "" +#: +#~ msgid "Copy Key" +#~ msgstr "" #: src/pages/providers/saml/SAMLProviderViewPage.ts msgid "Copy download URL" @@ -4615,6 +4615,10 @@ msgstr "" msgid "Token expiry" msgstr "" +#: src/pages/tokens/TokenListPage.ts +msgid "Token is managed by authentik." +msgstr "" + #: src/pages/providers/oauth2/OAuth2ProviderForm.ts #: src/pages/providers/proxy/ProxyProviderForm.ts msgid "Token validity" diff --git a/web/src/pages/tokens/TokenListPage.ts b/web/src/pages/tokens/TokenListPage.ts index c585b27a7..8a658f93d 100644 --- a/web/src/pages/tokens/TokenListPage.ts +++ b/web/src/pages/tokens/TokenListPage.ts @@ -105,7 +105,10 @@ export class TokenListPage extends TablePage { row(item: Token): TemplateResult[] { return [ - html`${item.identifier}`, + html`
+
${item.identifier}
+ ${item.managed ? html`${t`Token is managed by authentik.`}` : html``} +
`, html`${item.userObj?.username}`, html`${item.expiring ? t`Yes` : t`No`}`, html`${item.expiring ? item.expires?.toLocaleString() : t`-`}`, @@ -123,7 +126,10 @@ export class TokenListPage extends TablePage { - + `, diff --git a/web/src/user/user-settings/tokens/UserTokenList.ts b/web/src/user/user-settings/tokens/UserTokenList.ts index 6571ed7ed..69274be45 100644 --- a/web/src/user/user-settings/tokens/UserTokenList.ts +++ b/web/src/user/user-settings/tokens/UserTokenList.ts @@ -151,8 +151,11 @@ export class UserTokenList extends Table { - - ${t`Copy Key`} + + `, ]; From d1a1bfbbc5bc634b589f38116b3d62d47be8ab07 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 11:11:34 +0200 Subject: [PATCH 03/25] web/user: don't show managed tokens in user interface Signed-off-by: Jens Langhammer --- authentik/core/api/tokens.py | 1 + schema.yml | 4 ++++ web/src/user/user-settings/tokens/UserTokenList.ts | 1 + 3 files changed, 6 insertions(+) diff --git a/authentik/core/api/tokens.py b/authentik/core/api/tokens.py index 24c5b76e7..d246629e6 100644 --- a/authentik/core/api/tokens.py +++ b/authentik/core/api/tokens.py @@ -82,6 +82,7 @@ class TokenViewSet(UsedByMixin, ModelViewSet): "description", "expires", "expiring", + "managed", ] ordering = ["identifier", "expires"] permission_classes = [OwnerSuperuserPermissions] diff --git a/schema.yml b/schema.yml index 9aba2a107..371eae18e 100644 --- a/schema.yml +++ b/schema.yml @@ -2318,6 +2318,10 @@ paths: - app_password - recovery - verification + - in: query + name: managed + schema: + type: string - name: ordering required: false in: query diff --git a/web/src/user/user-settings/tokens/UserTokenList.ts b/web/src/user/user-settings/tokens/UserTokenList.ts index 69274be45..99b699910 100644 --- a/web/src/user/user-settings/tokens/UserTokenList.ts +++ b/web/src/user/user-settings/tokens/UserTokenList.ts @@ -37,6 +37,7 @@ export class UserTokenList extends Table { page: page, pageSize: PAGE_SIZE, search: this.search || "", + managed: "", }); } From 0452537e8bfaabb73389ddb219851ba38a1bfa61 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 11:11:44 +0200 Subject: [PATCH 04/25] web/admin: only show outpost deployment info when not embedded Signed-off-by: Jens Langhammer --- web/src/pages/outposts/OutpostListPage.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/web/src/pages/outposts/OutpostListPage.ts b/web/src/pages/outposts/OutpostListPage.ts index 6914b3617..2b32f43e2 100644 --- a/web/src/pages/outposts/OutpostListPage.ts +++ b/web/src/pages/outposts/OutpostListPage.ts @@ -103,11 +103,13 @@ export class OutpostListPage extends TablePage { - - - `, + ${item.managed !== "goauthentik.io/outposts/embedded" + ? html` + + ` + : html``}`, ]; } From 2716a268874bec1f13c20f9447821b073883a02e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Oct 2021 11:14:04 +0200 Subject: [PATCH 05/25] web: Update Web API Client version (#1539) Signed-off-by: GitHub Co-authored-by: BeryJu Signed-off-by: Jens Langhammer # Conflicts: # web/package-lock.json # web/package.json --- web/package-lock.json | 324 +++++++++++++++++++++++------------------- web/package.json | 24 ++-- 2 files changed, 191 insertions(+), 157 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index d6f10c87f..e05c93cca 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -15,10 +15,11 @@ "@babel/preset-env": "^7.15.6", "@babel/preset-typescript": "^7.15.0", "@fortawesome/fontawesome-free": "^5.15.4", - "@goauthentik/api": "^2021.9.4-1633366097", - "@lingui/cli": "^3.11.1", - "@lingui/core": "^3.11.1", - "@lingui/macro": "^3.11.1", + "@goauthentik/api": "^2021.9.5-1633425132", + "@lingui/cli": "^3.12.1", + "@lingui/core": "^3.12.1", + "@lingui/detect-locale": "^3.12.1", + "@lingui/macro": "^3.12.1", "@patternfly/patternfly": "^4.135.2", "@polymer/iron-form": "^3.0.1", "@polymer/paper-input": "^3.2.1", @@ -30,17 +31,17 @@ "@squoosh/cli": "^0.7.2", "@trivago/prettier-plugin-sort-imports": "^2.0.4", "@types/chart.js": "^2.9.34", - "@types/codemirror": "5.60.3", + "@types/codemirror": "5.60.4", "@types/grecaptcha": "^3.0.3", - "@typescript-eslint/eslint-plugin": "^4.31.2", - "@typescript-eslint/parser": "^4.31.2", + "@typescript-eslint/eslint-plugin": "^4.33.0", + "@typescript-eslint/parser": "^4.33.0", "@webcomponents/webcomponentsjs": "^2.6.0", "babel-plugin-macros": "^3.1.0", "base64-js": "^1.5.1", "chart.js": "^3.5.1", "chartjs-adapter-moment": "^1.0.0", - "codemirror": "^5.63.0", - "construct-style-sheets-polyfill": "^2.4.16", + "codemirror": "^5.63.1", + "construct-style-sheets-polyfill": "^3.0.3", "eslint": "^7.32.0", "eslint-config-google": "^0.14.0", "eslint-plugin-custom-elements": "0.0.2", @@ -51,7 +52,7 @@ "moment": "^2.29.1", "prettier": "^2.4.1", "rapidoc": "^9.1.3", - "rollup": "^2.57.0", + "rollup": "^2.58.0", "rollup-plugin-commonjs": "^10.1.0", "rollup-plugin-copy": "^3.4.0", "rollup-plugin-cssimport": "^1.0.2", @@ -1691,9 +1692,9 @@ } }, "node_modules/@goauthentik/api": { - "version": "2021.9.4-1633366097", - "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.9.4-1633366097.tgz", - "integrity": "sha512-k0RX5kHNfkgmciwPD6a7o8Movj9nfYt/uqvuJ0+5ptttJTDkB177c+okS0hqBtZF8n1u662w85gMvffAYrvU/Q==" + "version": "2021.9.5-1633425132", + "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.9.5-1633425132.tgz", + "integrity": "sha512-glq1nfnpXidVw6ThQpEsePkUeOLWchOeQ/5lrioDnD1XTTmx6JpESgHBMRUehBWvV43lwgR+98R3GVA8Q10JEw==" }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", @@ -1793,13 +1794,13 @@ } }, "node_modules/@lingui/babel-plugin-extract-messages": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-3.11.1.tgz", - "integrity": "sha512-MAsZ0BYIsHh08dptT7bA6Jsh1ixO1sBU8eNDtobkZaZ78SXIUMUYCy9e3T9D/RYpecgDGaFUf2djctTqguMgmQ==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-3.12.1.tgz", + "integrity": "sha512-5x119XBpWe3gYUDTgwkoTFqeI60beFRdEL1HnArFkrWfhaGqUK8SjzpqO7NtN335IIBU3SPtGXKsI4NPkJQ8TA==", "dependencies": { "@babel/generator": "^7.11.6", "@babel/runtime": "^7.11.2", - "@lingui/conf": "^3.11.1", + "@lingui/conf": "^3.12.1", "mkdirp": "^1.0.4" }, "engines": { @@ -1807,17 +1808,17 @@ } }, "node_modules/@lingui/cli": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-3.11.1.tgz", - "integrity": "sha512-piKjrGjiornzX18Lt6EhyICAHEGH9wio0KaOXKyCjHqPw8sQnC4AZv0iyZqTACVYL+0ROsrtNd/xgDMYNSQgeA==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-3.12.1.tgz", + "integrity": "sha512-Z3klth+zD3+oqkDEhm1cTuI1Z9K/lyZD615cUQXPxLZRn9dokZ+9enoJNiese412VMNvcp/dtYC+wfyMpYX2PQ==", "dependencies": { "@babel/generator": "^7.11.6", "@babel/parser": "^7.11.5", "@babel/plugin-syntax-jsx": "^7.10.4", "@babel/runtime": "^7.11.2", "@babel/types": "^7.11.5", - "@lingui/babel-plugin-extract-messages": "^3.11.1", - "@lingui/conf": "^3.11.1", + "@lingui/babel-plugin-extract-messages": "^3.12.1", + "@lingui/conf": "^3.12.1", "babel-plugin-macros": "^3.0.1", "bcp-47": "^1.0.7", "chalk": "^4.1.0", @@ -1920,9 +1921,9 @@ } }, "node_modules/@lingui/conf": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-3.11.1.tgz", - "integrity": "sha512-WoEdtDAiI+TR7Gz2F7VMZQyIGZFP2b4qT3JO3gLuGzHY6a6DCqOMojqUuo6KHFQrUoUtebI/1Yn7gAxVH1xcWQ==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-3.12.1.tgz", + "integrity": "sha512-asTFAUTf8zxYU+fI1MxggJD/o4BenT/rE4IJ/+ngaf1cbzBo71lXmhSYkIa8/vTZrdHDSuXGzIL43f1D9BF6YA==", "dependencies": { "@babel/runtime": "^7.11.2", "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", @@ -2000,9 +2001,9 @@ } }, "node_modules/@lingui/core": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lingui/core/-/core-3.11.1.tgz", - "integrity": "sha512-qHMo47SbwFFx3IwXbMRafIMZH2tTYebrQhvAu5wH9OabI+bqbVWbTOLSAXzX/gDZqxMQWIrr2ndrah0aPZk6EQ==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@lingui/core/-/core-3.12.1.tgz", + "integrity": "sha512-MkZgkaaBcFtmUXdck9YNMTMTwCRogUif8Ll4Wyqz0re2Ydo7fdwGFBkacYjOc787R5/UmZr2F21OtPqSbaoaJg==", "dependencies": { "@babel/runtime": "^7.11.2", "make-plural": "^6.2.2", @@ -2012,13 +2013,21 @@ "node": ">=10.0.0" } }, + "node_modules/@lingui/detect-locale": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@lingui/detect-locale/-/detect-locale-3.12.1.tgz", + "integrity": "sha512-/apP+LscyRuh+CIf42+LNuYmEsceNA/rh6N3iqebNcEsOcIzLA8v6dq1llzDOlfd3SxEj7xP9Kfhn6Vnp+78+Q==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@lingui/macro": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-3.11.1.tgz", - "integrity": "sha512-rSzvBs4Gasn6VO8msYA0/Bw285jUOBoLAVxURt6XaH45NXnJiWnDtEOD/DhQcuggDKbaWwz13lXOiRfUP0zG6g==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-3.12.1.tgz", + "integrity": "sha512-CszdqDnaCo5cnbg6RROYnYtYGOADPhJuRf9U9t2aL9IsN+N7pSQAMdMLbjYkEMT/V8Cjon33ZjLgeGihe0FhSA==", "dependencies": { "@babel/runtime": "^7.11.2", - "@lingui/conf": "^3.11.1", + "@lingui/conf": "^3.12.1", "ramda": "^0.27.1" }, "engines": { @@ -2562,9 +2571,9 @@ } }, "node_modules/@types/codemirror": { - "version": "5.60.3", - "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.3.tgz", - "integrity": "sha512-dVX8Vsio70u4la9LGi1jjmaqtcdMMZUYalO5QY5EWy4XKrNjewNm9cy2K5XvP+puzLzum417gmJ9w7F6bVR1XA==", + "version": "5.60.4", + "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.4.tgz", + "integrity": "sha512-SUQgBj9jZ+xj75zgwfgQZt0CManWBISN/YsE0xRmPwO6uDyLNpXO8bn2m59tpevsFw+eQdmx+qY1WjOrUgMDgw==", "dependencies": { "@types/tern": "*" } @@ -2708,14 +2717,15 @@ "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz", - "integrity": "sha512-w63SCQ4bIwWN/+3FxzpnWrDjQRXVEGiTt9tJTRptRXeFvdZc/wLiz3FQUwNQ2CVoRGI6KUWMNUj/pk63noUfcA==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "dependencies": { - "@typescript-eslint/experimental-utils": "4.31.2", - "@typescript-eslint/scope-manager": "4.31.2", + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" @@ -2737,6 +2747,14 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "engines": { + "node": ">= 4" + } + }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -2752,14 +2770,14 @@ } }, "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.2.tgz", - "integrity": "sha512-3tm2T4nyA970yQ6R3JZV9l0yilE2FedYg8dcXrTar34zC9r6JB7WyBQbpIVongKPlhEMjhQ01qkwrzWy38Bk1Q==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dependencies": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.31.2", - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/typescript-estree": "4.31.2", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -2775,13 +2793,13 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.2.tgz", - "integrity": "sha512-EcdO0E7M/sv23S/rLvenHkb58l3XhuSZzKf6DBvLgHqOYdL6YFMYVtreGFWirxaU2mS1GYDby3Lyxco7X5+Vjw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", "dependencies": { - "@typescript-eslint/scope-manager": "4.31.2", - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/typescript-estree": "4.31.2", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", "debug": "^4.3.1" }, "engines": { @@ -2801,12 +2819,12 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.2.tgz", - "integrity": "sha512-2JGwudpFoR/3Czq6mPpE8zBPYdHWFGL6lUNIGolbKQeSNv4EAiHaR5GVDQaLA0FwgcdcMtRk+SBJbFGL7+La5w==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "dependencies": { - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/visitor-keys": "4.31.2" + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" }, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" @@ -2817,9 +2835,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.2.tgz", - "integrity": "sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" }, @@ -2829,12 +2847,12 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.2.tgz", - "integrity": "sha512-ieBq8U9at6PvaC7/Z6oe8D3czeW5d//Fo1xkF/s9394VR0bg/UaMYPdARiWyKX+lLEjY3w/FNZJxitMsiWv+wA==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dependencies": { - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/visitor-keys": "4.31.2", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -2869,11 +2887,11 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.2.tgz", - "integrity": "sha512-PrBId7EQq2Nibns7dd/ch6S6/M4/iwLM9McbgeEbCXfxdwRUNxJ4UNreJ6Gh3fI2GNKNrWnQxKL7oCPmngKBug==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dependencies": { - "@typescript-eslint/types": "4.31.2", + "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" }, "engines": { @@ -3605,9 +3623,9 @@ } }, "node_modules/codemirror": { - "version": "5.63.0", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.63.0.tgz", - "integrity": "sha512-KlLWRPggDg2rBD1Mx7/EqEhaBdy+ybBCVh/efgjBDsPpMeEu6MbTAJzIT4TuCzvmbTEgvKOGzVT6wdBTNusqrg==" + "version": "5.63.1", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.63.1.tgz", + "integrity": "sha512-baivaNZreZOGh1/tYyTvCupC9NeWk7qlZeGUDi4nFKj/J0JU8FYKZND4QqLw70P7HOttlCt4JJAOj9GoIhHEkA==" }, "node_modules/collection-visit": { "version": "1.0.0", @@ -3666,9 +3684,12 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/construct-style-sheets-polyfill": { - "version": "2.4.17", - "resolved": "https://registry.npmjs.org/construct-style-sheets-polyfill/-/construct-style-sheets-polyfill-2.4.17.tgz", - "integrity": "sha512-rKtZGWWAVFE6HgdBuuui1emic/t8aAKQbePQ7Je6ird8nZYSd3mqqBX9IvFn2CMtnbh7mQTk/vxc9mfaLl7cGQ==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/construct-style-sheets-polyfill/-/construct-style-sheets-polyfill-3.0.3.tgz", + "integrity": "sha512-z5sn55s4Avgpfj5uEKXP50DIawJoQ9iYtojSXrbxYL8W1njzZqW3/Yzsgmqgb2sV0NVvhn1cH5wk313DeQLzbA==", + "engines": { + "npm": ">=7" + } }, "node_modules/convert-source-map": { "version": "1.8.0", @@ -7080,9 +7101,9 @@ } }, "node_modules/rollup": { - "version": "2.57.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.57.0.tgz", - "integrity": "sha512-bKQIh1rWKofRee6mv8SrF2HdP6pea5QkwBZSMImJysFj39gQuiV8MEPBjXOCpzk3wSYp63M2v2wkWBmFC8O/rg==", + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", + "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", "bin": { "rollup": "dist/bin/rollup" }, @@ -9760,9 +9781,9 @@ "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==" }, "@goauthentik/api": { - "version": "2021.9.4-1633366097", - "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.9.4-1633366097.tgz", - "integrity": "sha512-k0RX5kHNfkgmciwPD6a7o8Movj9nfYt/uqvuJ0+5ptttJTDkB177c+okS0hqBtZF8n1u662w85gMvffAYrvU/Q==" + "version": "2021.9.5-1633425132", + "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.9.5-1633425132.tgz", + "integrity": "sha512-glq1nfnpXidVw6ThQpEsePkUeOLWchOeQ/5lrioDnD1XTTmx6JpESgHBMRUehBWvV43lwgR+98R3GVA8Q10JEw==" }, "@humanwhocodes/config-array": { "version": "0.5.0", @@ -9837,28 +9858,28 @@ } }, "@lingui/babel-plugin-extract-messages": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-3.11.1.tgz", - "integrity": "sha512-MAsZ0BYIsHh08dptT7bA6Jsh1ixO1sBU8eNDtobkZaZ78SXIUMUYCy9e3T9D/RYpecgDGaFUf2djctTqguMgmQ==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-3.12.1.tgz", + "integrity": "sha512-5x119XBpWe3gYUDTgwkoTFqeI60beFRdEL1HnArFkrWfhaGqUK8SjzpqO7NtN335IIBU3SPtGXKsI4NPkJQ8TA==", "requires": { "@babel/generator": "^7.11.6", "@babel/runtime": "^7.11.2", - "@lingui/conf": "^3.11.1", + "@lingui/conf": "^3.12.1", "mkdirp": "^1.0.4" } }, "@lingui/cli": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-3.11.1.tgz", - "integrity": "sha512-piKjrGjiornzX18Lt6EhyICAHEGH9wio0KaOXKyCjHqPw8sQnC4AZv0iyZqTACVYL+0ROsrtNd/xgDMYNSQgeA==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-3.12.1.tgz", + "integrity": "sha512-Z3klth+zD3+oqkDEhm1cTuI1Z9K/lyZD615cUQXPxLZRn9dokZ+9enoJNiese412VMNvcp/dtYC+wfyMpYX2PQ==", "requires": { "@babel/generator": "^7.11.6", "@babel/parser": "^7.11.5", "@babel/plugin-syntax-jsx": "^7.10.4", "@babel/runtime": "^7.11.2", "@babel/types": "^7.11.5", - "@lingui/babel-plugin-extract-messages": "^3.11.1", - "@lingui/conf": "^3.11.1", + "@lingui/babel-plugin-extract-messages": "^3.12.1", + "@lingui/conf": "^3.12.1", "babel-plugin-macros": "^3.0.1", "bcp-47": "^1.0.7", "chalk": "^4.1.0", @@ -9931,9 +9952,9 @@ } }, "@lingui/conf": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-3.11.1.tgz", - "integrity": "sha512-WoEdtDAiI+TR7Gz2F7VMZQyIGZFP2b4qT3JO3gLuGzHY6a6DCqOMojqUuo6KHFQrUoUtebI/1Yn7gAxVH1xcWQ==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-3.12.1.tgz", + "integrity": "sha512-asTFAUTf8zxYU+fI1MxggJD/o4BenT/rE4IJ/+ngaf1cbzBo71lXmhSYkIa8/vTZrdHDSuXGzIL43f1D9BF6YA==", "requires": { "@babel/runtime": "^7.11.2", "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", @@ -9989,22 +10010,27 @@ } }, "@lingui/core": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lingui/core/-/core-3.11.1.tgz", - "integrity": "sha512-qHMo47SbwFFx3IwXbMRafIMZH2tTYebrQhvAu5wH9OabI+bqbVWbTOLSAXzX/gDZqxMQWIrr2ndrah0aPZk6EQ==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@lingui/core/-/core-3.12.1.tgz", + "integrity": "sha512-MkZgkaaBcFtmUXdck9YNMTMTwCRogUif8Ll4Wyqz0re2Ydo7fdwGFBkacYjOc787R5/UmZr2F21OtPqSbaoaJg==", "requires": { "@babel/runtime": "^7.11.2", "make-plural": "^6.2.2", "messageformat-parser": "^4.1.3" } }, + "@lingui/detect-locale": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@lingui/detect-locale/-/detect-locale-3.12.1.tgz", + "integrity": "sha512-/apP+LscyRuh+CIf42+LNuYmEsceNA/rh6N3iqebNcEsOcIzLA8v6dq1llzDOlfd3SxEj7xP9Kfhn6Vnp+78+Q==" + }, "@lingui/macro": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-3.11.1.tgz", - "integrity": "sha512-rSzvBs4Gasn6VO8msYA0/Bw285jUOBoLAVxURt6XaH45NXnJiWnDtEOD/DhQcuggDKbaWwz13lXOiRfUP0zG6g==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-3.12.1.tgz", + "integrity": "sha512-CszdqDnaCo5cnbg6RROYnYtYGOADPhJuRf9U9t2aL9IsN+N7pSQAMdMLbjYkEMT/V8Cjon33ZjLgeGihe0FhSA==", "requires": { "@babel/runtime": "^7.11.2", - "@lingui/conf": "^3.11.1", + "@lingui/conf": "^3.12.1", "ramda": "^0.27.1" } }, @@ -10465,9 +10491,9 @@ } }, "@types/codemirror": { - "version": "5.60.3", - "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.3.tgz", - "integrity": "sha512-dVX8Vsio70u4la9LGi1jjmaqtcdMMZUYalO5QY5EWy4XKrNjewNm9cy2K5XvP+puzLzum417gmJ9w7F6bVR1XA==", + "version": "5.60.4", + "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.4.tgz", + "integrity": "sha512-SUQgBj9jZ+xj75zgwfgQZt0CManWBISN/YsE0xRmPwO6uDyLNpXO8bn2m59tpevsFw+eQdmx+qY1WjOrUgMDgw==", "requires": { "@types/tern": "*" } @@ -10610,19 +10636,25 @@ "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" }, "@typescript-eslint/eslint-plugin": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz", - "integrity": "sha512-w63SCQ4bIwWN/+3FxzpnWrDjQRXVEGiTt9tJTRptRXeFvdZc/wLiz3FQUwNQ2CVoRGI6KUWMNUj/pk63noUfcA==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "requires": { - "@typescript-eslint/experimental-utils": "4.31.2", - "@typescript-eslint/scope-manager": "4.31.2", + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -10634,50 +10666,50 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.2.tgz", - "integrity": "sha512-3tm2T4nyA970yQ6R3JZV9l0yilE2FedYg8dcXrTar34zC9r6JB7WyBQbpIVongKPlhEMjhQ01qkwrzWy38Bk1Q==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.31.2", - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/typescript-estree": "4.31.2", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.2.tgz", - "integrity": "sha512-EcdO0E7M/sv23S/rLvenHkb58l3XhuSZzKf6DBvLgHqOYdL6YFMYVtreGFWirxaU2mS1GYDby3Lyxco7X5+Vjw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", "requires": { - "@typescript-eslint/scope-manager": "4.31.2", - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/typescript-estree": "4.31.2", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", "debug": "^4.3.1" } }, "@typescript-eslint/scope-manager": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.2.tgz", - "integrity": "sha512-2JGwudpFoR/3Czq6mPpE8zBPYdHWFGL6lUNIGolbKQeSNv4EAiHaR5GVDQaLA0FwgcdcMtRk+SBJbFGL7+La5w==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "requires": { - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/visitor-keys": "4.31.2" + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" } }, "@typescript-eslint/types": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.2.tgz", - "integrity": "sha512-kWiTTBCTKEdBGrZKwFvOlGNcAsKGJSBc8xLvSjSppFO88AqGxGNYtF36EuEYG6XZ9vT0xX8RNiHbQUKglbSi1w==" + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==" }, "@typescript-eslint/typescript-estree": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.2.tgz", - "integrity": "sha512-ieBq8U9at6PvaC7/Z6oe8D3czeW5d//Fo1xkF/s9394VR0bg/UaMYPdARiWyKX+lLEjY3w/FNZJxitMsiWv+wA==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "requires": { - "@typescript-eslint/types": "4.31.2", - "@typescript-eslint/visitor-keys": "4.31.2", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -10696,11 +10728,11 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.31.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.2.tgz", - "integrity": "sha512-PrBId7EQq2Nibns7dd/ch6S6/M4/iwLM9McbgeEbCXfxdwRUNxJ4UNreJ6Gh3fI2GNKNrWnQxKL7oCPmngKBug==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "requires": { - "@typescript-eslint/types": "4.31.2", + "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" } }, @@ -11215,9 +11247,9 @@ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, "codemirror": { - "version": "5.63.0", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.63.0.tgz", - "integrity": "sha512-KlLWRPggDg2rBD1Mx7/EqEhaBdy+ybBCVh/efgjBDsPpMeEu6MbTAJzIT4TuCzvmbTEgvKOGzVT6wdBTNusqrg==" + "version": "5.63.1", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.63.1.tgz", + "integrity": "sha512-baivaNZreZOGh1/tYyTvCupC9NeWk7qlZeGUDi4nFKj/J0JU8FYKZND4QqLw70P7HOttlCt4JJAOj9GoIhHEkA==" }, "collection-visit": { "version": "1.0.0", @@ -11267,9 +11299,9 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "construct-style-sheets-polyfill": { - "version": "2.4.17", - "resolved": "https://registry.npmjs.org/construct-style-sheets-polyfill/-/construct-style-sheets-polyfill-2.4.17.tgz", - "integrity": "sha512-rKtZGWWAVFE6HgdBuuui1emic/t8aAKQbePQ7Je6ird8nZYSd3mqqBX9IvFn2CMtnbh7mQTk/vxc9mfaLl7cGQ==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/construct-style-sheets-polyfill/-/construct-style-sheets-polyfill-3.0.3.tgz", + "integrity": "sha512-z5sn55s4Avgpfj5uEKXP50DIawJoQ9iYtojSXrbxYL8W1njzZqW3/Yzsgmqgb2sV0NVvhn1cH5wk313DeQLzbA==" }, "convert-source-map": { "version": "1.8.0", @@ -13816,9 +13848,9 @@ } }, "rollup": { - "version": "2.57.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.57.0.tgz", - "integrity": "sha512-bKQIh1rWKofRee6mv8SrF2HdP6pea5QkwBZSMImJysFj39gQuiV8MEPBjXOCpzk3wSYp63M2v2wkWBmFC8O/rg==", + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", + "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", "requires": { "fsevents": "~2.3.2" } diff --git a/web/package.json b/web/package.json index 1e91440b9..83a83cd14 100644 --- a/web/package.json +++ b/web/package.json @@ -17,7 +17,8 @@ "sourceLocale": "en", "locales": [ "en", - "pseudo-LOCALE" + "pseudo-LOCALE", + "fr_FR" ], "formatOptions": { "lineNumbers": false @@ -47,10 +48,11 @@ "@babel/preset-env": "^7.15.6", "@babel/preset-typescript": "^7.15.0", "@fortawesome/fontawesome-free": "^5.15.4", - "@goauthentik/api": "^2021.9.4-1633366097", - "@lingui/cli": "^3.11.1", - "@lingui/core": "^3.11.1", - "@lingui/macro": "^3.11.1", + "@goauthentik/api": "^2021.9.5-1633425132", + "@lingui/cli": "^3.12.1", + "@lingui/core": "^3.12.1", + "@lingui/detect-locale": "^3.12.1", + "@lingui/macro": "^3.12.1", "@patternfly/patternfly": "^4.135.2", "@polymer/iron-form": "^3.0.1", "@polymer/paper-input": "^3.2.1", @@ -62,17 +64,17 @@ "@squoosh/cli": "^0.7.2", "@trivago/prettier-plugin-sort-imports": "^2.0.4", "@types/chart.js": "^2.9.34", - "@types/codemirror": "5.60.3", + "@types/codemirror": "5.60.4", "@types/grecaptcha": "^3.0.3", - "@typescript-eslint/eslint-plugin": "^4.31.2", - "@typescript-eslint/parser": "^4.31.2", + "@typescript-eslint/eslint-plugin": "^4.33.0", + "@typescript-eslint/parser": "^4.33.0", "@webcomponents/webcomponentsjs": "^2.6.0", "babel-plugin-macros": "^3.1.0", "base64-js": "^1.5.1", "chart.js": "^3.5.1", "chartjs-adapter-moment": "^1.0.0", - "codemirror": "^5.63.0", - "construct-style-sheets-polyfill": "^2.4.16", + "codemirror": "^5.63.1", + "construct-style-sheets-polyfill": "^3.0.3", "eslint": "^7.32.0", "eslint-config-google": "^0.14.0", "eslint-plugin-custom-elements": "0.0.2", @@ -83,7 +85,7 @@ "moment": "^2.29.1", "prettier": "^2.4.1", "rapidoc": "^9.1.3", - "rollup": "^2.57.0", + "rollup": "^2.58.0", "rollup-plugin-commonjs": "^10.1.0", "rollup-plugin-copy": "^3.4.0", "rollup-plugin-cssimport": "^1.0.2", From 73d57d6f8272b2077d212f06a528b44bcb4183b4 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 11:23:27 +0200 Subject: [PATCH 06/25] core: make user's name field fully options closes #1537 Signed-off-by: Jens Langhammer --- authentik/core/api/users.py | 4 ++++ web/src/pages/users/UserForm.ts | 3 +-- web/src/user/user-settings/UserSelfForm.ts | 3 +-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/authentik/core/api/users.py b/authentik/core/api/users.py index 90b3bf7ce..623e919dd 100644 --- a/authentik/core/api/users.py +++ b/authentik/core/api/users.py @@ -90,6 +90,9 @@ class UserSerializer(ModelSerializer): "attributes", "uid", ] + extra_kwargs = { + "name": {"allow_blank": True}, + } class UserSelfSerializer(ModelSerializer): @@ -117,6 +120,7 @@ class UserSelfSerializer(ModelSerializer): ] extra_kwargs = { "is_active": {"read_only": True}, + "name": {"allow_blank": True}, } diff --git a/web/src/pages/users/UserForm.ts b/web/src/pages/users/UserForm.ts index 5e2f98688..349c0656a 100644 --- a/web/src/pages/users/UserForm.ts +++ b/web/src/pages/users/UserForm.ts @@ -58,12 +58,11 @@ export class UserForm extends ModelForm { ${t`Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.`}

- +

${t`User's display name.`}

diff --git a/web/src/user/user-settings/UserSelfForm.ts b/web/src/user/user-settings/UserSelfForm.ts index 7660b4ecf..33fa9d97a 100644 --- a/web/src/user/user-settings/UserSelfForm.ts +++ b/web/src/user/user-settings/UserSelfForm.ts @@ -55,12 +55,11 @@ export class UserSelfForm extends ModelForm { ${t`Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.`}

- +

${t`User's display name.`}

From d0c56325efcddecfee85f1e8bbc88c11938756a6 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 11:23:45 +0200 Subject: [PATCH 07/25] web/elements: fix model form always loading when viewport check is disabled Signed-off-by: Jens Langhammer --- web/src/elements/forms/ModelForm.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/elements/forms/ModelForm.ts b/web/src/elements/forms/ModelForm.ts index 8afa0063b..23f513384 100644 --- a/web/src/elements/forms/ModelForm.ts +++ b/web/src/elements/forms/ModelForm.ts @@ -48,10 +48,10 @@ export abstract class ModelForm extends Form } render(): TemplateResult { - if (this._instancePk) { + if (this._instancePk && !this._initialLoad) { if ( // if we're in viewport now and haven't loaded AND have a PK set, load now - (this.isInViewport && !this._initialLoad) || + this.isInViewport || // Or if we don't check for viewport in some cases !this.viewportCheck ) { From 782764ac73dd856da146b3b5f99ce659712ca6fa Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 11:26:41 +0200 Subject: [PATCH 08/25] api: ensure viewsets have default ordering Signed-off-by: Jens Langhammer --- authentik/core/api/users.py | 1 + authentik/flows/api/flows.py | 1 + authentik/policies/api/policies.py | 1 + 3 files changed, 3 insertions(+) diff --git a/authentik/core/api/users.py b/authentik/core/api/users.py index 623e919dd..013d82685 100644 --- a/authentik/core/api/users.py +++ b/authentik/core/api/users.py @@ -212,6 +212,7 @@ class UserViewSet(UsedByMixin, ModelViewSet): """User Viewset""" queryset = User.objects.none() + ordering = ["username"] serializer_class = UserSerializer search_fields = ["username", "name", "is_active", "email"] filterset_class = UsersFilter diff --git a/authentik/flows/api/flows.py b/authentik/flows/api/flows.py index 602cc4654..332e525d6 100644 --- a/authentik/flows/api/flows.py +++ b/authentik/flows/api/flows.py @@ -108,6 +108,7 @@ class FlowViewSet(UsedByMixin, ModelViewSet): queryset = Flow.objects.all() serializer_class = FlowSerializer lookup_field = "slug" + ordering = ["slug", "name"] search_fields = ["name", "slug", "designation", "title"] filterset_fields = ["flow_uuid", "name", "slug", "designation"] diff --git a/authentik/policies/api/policies.py b/authentik/policies/api/policies.py index 3d3753802..094f894b6 100644 --- a/authentik/policies/api/policies.py +++ b/authentik/policies/api/policies.py @@ -87,6 +87,7 @@ class PolicyViewSet( "promptstage": ["isnull"], } search_fields = ["name"] + ordering = ["name"] def get_queryset(self): # pragma: no cover return Policy.objects.select_subclasses().prefetch_related("bindings", "promptstage_set") From cb31e52d0e3b73cc9a604e36aa668e20b63d3b9f Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 11:28:11 +0200 Subject: [PATCH 09/25] web/flows: adjust message for email stage closes #1538 Signed-off-by: Jens Langhammer # Conflicts: # web/src/locales/fr_FR.po --- web/src/flows/stages/email/EmailStage.ts | 2 +- web/src/locales/en.po | 8 ++++++-- web/src/locales/pseudo-LOCALE.po | 6 +++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/web/src/flows/stages/email/EmailStage.ts b/web/src/flows/stages/email/EmailStage.ts index d4bc22029..1137b4beb 100644 --- a/web/src/flows/stages/email/EmailStage.ts +++ b/web/src/flows/stages/email/EmailStage.ts @@ -37,7 +37,7 @@ export class EmailStage extends BaseStage
-

${t`Check your Emails for a password reset link.`}

+

${t`Check your Inbox for a verification email.`}

diff --git a/web/src/locales/en.po b/web/src/locales/en.po index d5eebc79d..25e724f9b 100644 --- a/web/src/locales/en.po +++ b/web/src/locales/en.po @@ -706,9 +706,13 @@ msgstr "Check outposts." msgid "Check status" msgstr "Check status" +#: +#~ msgid "Check your Emails for a password reset link." +#~ msgstr "Check your Emails for a password reset link." + #: src/flows/stages/email/EmailStage.ts -msgid "Check your Emails for a password reset link." -msgstr "Check your Emails for a password reset link." +msgid "Check your Inbox for a verification email." +msgstr "Check your Inbox for a verification email." #: src/pages/stages/prompt/PromptForm.ts msgid "Checkbox" diff --git a/web/src/locales/pseudo-LOCALE.po b/web/src/locales/pseudo-LOCALE.po index 6abcd2de5..83de1060c 100644 --- a/web/src/locales/pseudo-LOCALE.po +++ b/web/src/locales/pseudo-LOCALE.po @@ -702,8 +702,12 @@ msgstr "" msgid "Check status" msgstr "" +#: +#~ msgid "Check your Emails for a password reset link." +#~ msgstr "" + #: src/flows/stages/email/EmailStage.ts -msgid "Check your Emails for a password reset link." +msgid "Check your Inbox for a verification email." msgstr "" #: src/pages/stages/prompt/PromptForm.ts From c1f302fb7c297fb6d016584b1b34e88098d69ea8 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 12:31:25 +0200 Subject: [PATCH 10/25] core: only return group names for user_self Signed-off-by: Jens Langhammer --- authentik/core/api/users.py | 7 ++++++- schema.yml | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/authentik/core/api/users.py b/authentik/core/api/users.py index 013d82685..e299c9ca4 100644 --- a/authentik/core/api/users.py +++ b/authentik/core/api/users.py @@ -101,9 +101,14 @@ class UserSelfSerializer(ModelSerializer): is_superuser = BooleanField(read_only=True) avatar = CharField(read_only=True) - groups = ListSerializer(child=GroupSerializer(), read_only=True, source="ak_groups") + groups = SerializerMethodField() uid = CharField(read_only=True) + def get_groups(self, user: User) -> list[str]: + """Return only the group names a user is member of""" + for group in user.ak_groups.all(): + yield group.name + class Meta: model = User diff --git a/schema.yml b/schema.yml index 371eae18e..96e80f3b7 100644 --- a/schema.yml +++ b/schema.yml @@ -29209,7 +29209,7 @@ components: groups: type: array items: - $ref: '#/components/schemas/Group' + type: string readOnly: true email: type: string From 7ed89528039529bcbdc872920e316660d3ca2600 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Oct 2021 12:33:50 +0200 Subject: [PATCH 11/25] web: Update Web API Client version (#1540) Signed-off-by: GitHub Co-authored-by: BeryJu --- web/package-lock.json | 14 +++++++------- web/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index e05c93cca..4c4ac2d53 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -15,7 +15,7 @@ "@babel/preset-env": "^7.15.6", "@babel/preset-typescript": "^7.15.0", "@fortawesome/fontawesome-free": "^5.15.4", - "@goauthentik/api": "^2021.9.5-1633425132", + "@goauthentik/api": "^2021.9.5-1633429910", "@lingui/cli": "^3.12.1", "@lingui/core": "^3.12.1", "@lingui/detect-locale": "^3.12.1", @@ -1692,9 +1692,9 @@ } }, "node_modules/@goauthentik/api": { - "version": "2021.9.5-1633425132", - "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.9.5-1633425132.tgz", - "integrity": "sha512-glq1nfnpXidVw6ThQpEsePkUeOLWchOeQ/5lrioDnD1XTTmx6JpESgHBMRUehBWvV43lwgR+98R3GVA8Q10JEw==" + "version": "2021.9.5-1633429910", + "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.9.5-1633429910.tgz", + "integrity": "sha512-KhbZajWTc7CX/PbyGnzWufBTbLX+xc0zzwo4Aqrvi6OqaDdICkG8QlSR6DPvqkFN7jM5XGSU4MwzG5V0INwnPA==" }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", @@ -9781,9 +9781,9 @@ "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==" }, "@goauthentik/api": { - "version": "2021.9.5-1633425132", - "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.9.5-1633425132.tgz", - "integrity": "sha512-glq1nfnpXidVw6ThQpEsePkUeOLWchOeQ/5lrioDnD1XTTmx6JpESgHBMRUehBWvV43lwgR+98R3GVA8Q10JEw==" + "version": "2021.9.5-1633429910", + "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.9.5-1633429910.tgz", + "integrity": "sha512-KhbZajWTc7CX/PbyGnzWufBTbLX+xc0zzwo4Aqrvi6OqaDdICkG8QlSR6DPvqkFN7jM5XGSU4MwzG5V0INwnPA==" }, "@humanwhocodes/config-array": { "version": "0.5.0", diff --git a/web/package.json b/web/package.json index 83a83cd14..e4f27e811 100644 --- a/web/package.json +++ b/web/package.json @@ -48,7 +48,7 @@ "@babel/preset-env": "^7.15.6", "@babel/preset-typescript": "^7.15.0", "@fortawesome/fontawesome-free": "^5.15.4", - "@goauthentik/api": "^2021.9.5-1633425132", + "@goauthentik/api": "^2021.9.5-1633429910", "@lingui/cli": "^3.12.1", "@lingui/core": "^3.12.1", "@lingui/detect-locale": "^3.12.1", From cd5e091937c2ff8689e41f23a902798a38521fe2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Oct 2021 13:00:06 +0200 Subject: [PATCH 12/25] build(deps): bump goauthentik.io/api from 0.202195.1 to 0.202195.3 (#1542) Bumps [goauthentik.io/api](https://github.com/goauthentik/client-go) from 0.202195.1 to 0.202195.3. - [Release notes](https://github.com/goauthentik/client-go/releases) - [Commits](https://github.com/goauthentik/client-go/compare/v0.202195.1...v0.202195.3) --- updated-dependencies: - dependency-name: goauthentik.io/api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Signed-off-by: Jens Langhammer # Conflicts: # go.mod # go.sum --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 063f80cf8..772836af2 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/recws-org/recws v1.3.1 github.com/sirupsen/logrus v1.8.1 go.mongodb.org/mongo-driver v1.5.2 // indirect - goauthentik.io/api v0.202192.5 + goauthentik.io/api v0.202195.3 golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 // indirect golang.org/x/net v0.0.0-20210510120150-4163338589ed // indirect golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 diff --git a/go.sum b/go.sum index 058fca44a..8499fb2b8 100644 --- a/go.sum +++ b/go.sum @@ -554,8 +554,8 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -goauthentik.io/api v0.202192.5 h1:BS4E71K2uZXy1vAdGVFLJJU0KwvAkkqKg42cYv46ud0= -goauthentik.io/api v0.202192.5/go.mod h1:02nnD4FRd8lu8A1+ZuzqownBgvAhdCKzqkKX8v7JMTE= +goauthentik.io/api v0.202195.3 h1:o/vk6EoOuS00QF+aJH335Wd3GgTL+ltxZobe1RBtiLY= +goauthentik.io/api v0.202195.3/go.mod h1:02nnD4FRd8lu8A1+ZuzqownBgvAhdCKzqkKX8v7JMTE= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= From 79eec5a3a07efcdfbda3b95f66921ff23bccc184 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 13:10:44 +0200 Subject: [PATCH 13/25] core: include group uuids in self serializer Signed-off-by: Jens Langhammer --- authentik/core/api/users.py | 15 +++++++++++++-- schema.yml | 14 +++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/authentik/core/api/users.py b/authentik/core/api/users.py index e299c9ca4..138054925 100644 --- a/authentik/core/api/users.py +++ b/authentik/core/api/users.py @@ -104,10 +104,21 @@ class UserSelfSerializer(ModelSerializer): groups = SerializerMethodField() uid = CharField(read_only=True) - def get_groups(self, user: User) -> list[str]: + @extend_schema_field( + ListSerializer( + child=inline_serializer( + "UserSelfGroups", + {"name": CharField(read_only=True), "pk": CharField(read_only=True)}, + ) + ) + ) + def get_groups(self, user: User): """Return only the group names a user is member of""" for group in user.ak_groups.all(): - yield group.name + yield { + "name": group.name, + "pk": group.pk, + } class Meta: diff --git a/schema.yml b/schema.yml index 96e80f3b7..fb159574f 100644 --- a/schema.yml +++ b/schema.yml @@ -29209,7 +29209,7 @@ components: groups: type: array items: - type: string + $ref: '#/components/schemas/UserSelfGroups' readOnly: true email: type: string @@ -29231,6 +29231,18 @@ components: - pk - uid - username + UserSelfGroups: + type: object + properties: + name: + type: string + readOnly: true + pk: + type: string + readOnly: true + required: + - name + - pk UserSelfRequest: type: object description: |- From 6491065aabd184d21a7bc40a60321bbb0312819e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Oct 2021 13:12:42 +0200 Subject: [PATCH 14/25] web: Update Web API Client version (#1543) Signed-off-by: GitHub Co-authored-by: BeryJu --- web/package-lock.json | 14 +++++++------- web/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 4c4ac2d53..1beeb89d2 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -15,7 +15,7 @@ "@babel/preset-env": "^7.15.6", "@babel/preset-typescript": "^7.15.0", "@fortawesome/fontawesome-free": "^5.15.4", - "@goauthentik/api": "^2021.9.5-1633429910", + "@goauthentik/api": "^2021.9.5-1633432270", "@lingui/cli": "^3.12.1", "@lingui/core": "^3.12.1", "@lingui/detect-locale": "^3.12.1", @@ -1692,9 +1692,9 @@ } }, "node_modules/@goauthentik/api": { - "version": "2021.9.5-1633429910", - "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.9.5-1633429910.tgz", - "integrity": "sha512-KhbZajWTc7CX/PbyGnzWufBTbLX+xc0zzwo4Aqrvi6OqaDdICkG8QlSR6DPvqkFN7jM5XGSU4MwzG5V0INwnPA==" + "version": "2021.9.5-1633432270", + "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.9.5-1633432270.tgz", + "integrity": "sha512-uKhaYImCzX8BLWQZD5vY5mClfUtZeGEn7/o+dNztOs6viOCbWSRuYvE1tnTqxKjKw2Yoe2YaWURfA7zweSxUng==" }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", @@ -9781,9 +9781,9 @@ "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==" }, "@goauthentik/api": { - "version": "2021.9.5-1633429910", - "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.9.5-1633429910.tgz", - "integrity": "sha512-KhbZajWTc7CX/PbyGnzWufBTbLX+xc0zzwo4Aqrvi6OqaDdICkG8QlSR6DPvqkFN7jM5XGSU4MwzG5V0INwnPA==" + "version": "2021.9.5-1633432270", + "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2021.9.5-1633432270.tgz", + "integrity": "sha512-uKhaYImCzX8BLWQZD5vY5mClfUtZeGEn7/o+dNztOs6viOCbWSRuYvE1tnTqxKjKw2Yoe2YaWURfA7zweSxUng==" }, "@humanwhocodes/config-array": { "version": "0.5.0", diff --git a/web/package.json b/web/package.json index e4f27e811..4b26115b0 100644 --- a/web/package.json +++ b/web/package.json @@ -48,7 +48,7 @@ "@babel/preset-env": "^7.15.6", "@babel/preset-typescript": "^7.15.0", "@fortawesome/fontawesome-free": "^5.15.4", - "@goauthentik/api": "^2021.9.5-1633429910", + "@goauthentik/api": "^2021.9.5-1633432270", "@lingui/cli": "^3.12.1", "@lingui/core": "^3.12.1", "@lingui/detect-locale": "^3.12.1", From aa359a032c0f7878e1b70b9a603cec0d043dbf94 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Oct 2021 13:19:20 +0200 Subject: [PATCH 15/25] build(deps): bump goauthentik.io/api from 0.202195.3 to 0.202195.4 (#1544) Bumps [goauthentik.io/api](https://github.com/goauthentik/client-go) from 0.202195.3 to 0.202195.4. - [Release notes](https://github.com/goauthentik/client-go/releases) - [Commits](https://github.com/goauthentik/client-go/compare/v0.202195.3...v0.202195.4) --- updated-dependencies: - dependency-name: goauthentik.io/api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 772836af2..806e872a7 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/recws-org/recws v1.3.1 github.com/sirupsen/logrus v1.8.1 go.mongodb.org/mongo-driver v1.5.2 // indirect - goauthentik.io/api v0.202195.3 + goauthentik.io/api v0.202195.4 golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 // indirect golang.org/x/net v0.0.0-20210510120150-4163338589ed // indirect golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 diff --git a/go.sum b/go.sum index 8499fb2b8..0c7aba12e 100644 --- a/go.sum +++ b/go.sum @@ -554,8 +554,8 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -goauthentik.io/api v0.202195.3 h1:o/vk6EoOuS00QF+aJH335Wd3GgTL+ltxZobe1RBtiLY= -goauthentik.io/api v0.202195.3/go.mod h1:02nnD4FRd8lu8A1+ZuzqownBgvAhdCKzqkKX8v7JMTE= +goauthentik.io/api v0.202195.4 h1:UQMeaNW/MZsMUrmaJ3p19gve26RIn+y08m9M2QQBWek= +goauthentik.io/api v0.202195.4/go.mod h1:02nnD4FRd8lu8A1+ZuzqownBgvAhdCKzqkKX8v7JMTE= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= From cde303e78099a944f34ac757298c0c400ac64118 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 16:23:40 +0200 Subject: [PATCH 16/25] web: fix strings not being translated at all when matching browser locale not found Signed-off-by: Jens Langhammer # Conflicts: # web/src/interfaces/locale.ts --- web/src/interfaces/locale.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/web/src/interfaces/locale.ts b/web/src/interfaces/locale.ts index cfb1ab476..73c0acc56 100644 --- a/web/src/interfaces/locale.ts +++ b/web/src/interfaces/locale.ts @@ -11,6 +11,15 @@ i18n.load("en", localeEN); i18n.load("debug", localeDEBUG); i18n.activate("en"); -if (window.location.search.includes("debugLocale")) { - i18n.activate("debug"); +const DEFAULT_FALLBACK = () => "en"; + +const detected = + detect(fromUrl("lang"), fromStorage("lang"), fromNavigator(), DEFAULT_FALLBACK) || + DEFAULT_FALLBACK(); +if (detected in i18n._messages) { + console.debug(`authentik/locale: Activating detected locale '${detected}'`); + i18n.activate(detected); +} else { + console.debug(`authentik/locale: No locale for '${detected}', falling back to en`); + i18n.activate(DEFAULT_FALLBACK()); } From 653631ac77efbb6bf6ebe7ffb4e193ae87b10d26 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 5 Oct 2021 10:30:01 +0200 Subject: [PATCH 17/25] Translate /web/src/locales/en.po in fr_FR (#1536) translation completed for the source file '/web/src/locales/en.po' on the 'fr_FR' language. Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Signed-off-by: Jens Langhammer # Conflicts: # web/src/locales/fr_FR.po --- web/src/locales/fr_FR.po | 5894 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 5894 insertions(+) create mode 100644 web/src/locales/fr_FR.po diff --git a/web/src/locales/fr_FR.po b/web/src/locales/fr_FR.po new file mode 100644 index 000000000..35ac5b48f --- /dev/null +++ b/web/src/locales/fr_FR.po @@ -0,0 +1,5894 @@ +# +# Translators: +# Charles Leclerc, 2021 +# Issy Szemeti, 2021 +# nerdinator , 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-04 16:55+0200\n" +"PO-Revision-Date: 2021-10-04 20:03+0000\n" +"Last-Translator: nerdinator , 2021\n" +"Language-Team: French (France) (https://www.transifex.com/beryjuorg/teams/119923/fr_FR/)\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr_FR\n" +"Mime-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: @lingui/cli\n" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/stages/user_login/UserLoginStageForm.ts +msgid "(Format: hours=-1;minutes=-2;seconds=-3)." +msgstr "(Format : heures=-1;minutes=-2;seconds=-3)" + +#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/elements/user/SessionList.ts +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/events/EventListPage.ts src/pages/events/EventListPage.ts +#: src/pages/groups/GroupListPage.ts src/pages/groups/MemberSelectModal.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/stages/invitation/InvitationListPage.ts +#: src/pages/tokens/TokenListPage.ts src/pages/users/UserListPage.ts +#: src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "-" +msgstr "-" + +#: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts +msgid "6 digits, widely compatible" +msgstr "6 chiffres, compatibilité large" + +#: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts +msgid "8 digits, not compatible with apps like Google Authenticator" +msgstr "" +"8 chiffres, incompatible avec certaines applications telles que Google " +"Authenticator" + +#: src/interfaces/AdminInterface.ts +msgid "A newer version of the frontend is available." +msgstr "Une nouvelle version de l'interface est disponible." + +#: src/pages/policies/dummy/DummyPolicyForm.ts +msgid "" +"A policy used for testing. Always returns the same result as specified below" +" after waiting a random duration." +msgstr "" +"Une politique utilisée pour les tests. Retourne toujours la même valeur " +"telle qu'indiquée ci-dessous après une attente aléatoire." + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/providers/saml/SAMLProviderViewPage.ts +msgid "ACS URL" +msgstr "ACS URL" + +#: src/pages/applications/ApplicationForm.ts src/pages/flows/FlowForm.ts +msgid "ALL, all policies must match to grant access." +msgstr "" +"ALL, toutes les politiques doivent être vérifiée pour accorder l'accès." + +#: src/pages/flows/StageBindingForm.ts +msgid "ALL, all policies must match to include this stage access." +msgstr "" +"ALL, toutes les politiques doivent être vérifiées pour inclure l'accès à " +"cette étape." + +#: src/pages/applications/ApplicationForm.ts src/pages/flows/FlowForm.ts +msgid "ANY, any policy must match to grant access." +msgstr "" +"ANY, n'importe laquelle des politiques doit être vérifiée pour accorder " +"l'accès." + +#: src/pages/flows/StageBindingForm.ts +msgid "ANY, any policy must match to include this stage access." +msgstr "" +"ANY, n'importe laquelle des politiques doit être vérifiée pour inclure " +"l'accès à cette étape." + +#: src/pages/tokens/TokenListPage.ts +msgid "API Access" +msgstr "Accès à l'API" + +#: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts +msgid "API Hostname" +msgstr "Nom d'hôte de l'API" + +#: src/elements/notifications/APIDrawer.ts +msgid "API Requests" +msgstr "Requêtes d'API" + +#: src/pages/tokens/TokenForm.ts +msgid "API Token (can be used to access the API programmatically)" +msgstr "Jeton d'API (peut être utilisé pour accéder à l'API via un programme)" + +#: src/elements/messages/Middleware.ts +msgid "API request failed" +msgstr "Requête d'API échouée" + +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +msgid "Access Key" +msgstr "Clé d'accès" + +#~ msgid "Access code validity" +#~ msgstr "Validité du code d'accès" + +#: src/pages/sources/oauth/OAuthSourceForm.ts +msgid "Access token URL" +msgstr "URL du jeton d'accès" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Access token validity" +msgstr "Validité du jeton d'accès" + +#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/pages/events/EventListPage.ts +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +msgid "Action" +msgstr "Action" + +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/events/EventListPage.ts src/pages/events/RuleListPage.ts +#: src/pages/events/TransportListPage.ts src/pages/flows/BoundStagesList.ts +#: src/pages/flows/FlowListPage.ts src/pages/groups/GroupListPage.ts +#: src/pages/outposts/OutpostListPage.ts +#: src/pages/outposts/ServiceConnectionListPage.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/PolicyListPage.ts +#: src/pages/policies/reputation/IPReputationListPage.ts +#: src/pages/property-mappings/PropertyMappingListPage.ts +#: src/pages/providers/ProviderListPage.ts src/pages/stages/StageListPage.ts +#: src/pages/stages/prompt/PromptListPage.ts +#: src/pages/system-tasks/SystemTaskListPage.ts +#: src/pages/tenants/TenantListPage.ts src/pages/tokens/TokenListPage.ts +#: src/pages/users/UserListPage.ts +msgid "Actions" +msgstr "Actions" + +#: src/pages/users/UserViewPage.ts +msgid "Actions over the last 24 hours" +msgstr "Actions au cours des 24 dernières heures" + +#: src/pages/users/UserListPage.ts src/pages/users/UserViewPage.ts +msgid "Activate" +msgstr "Activer" + +#: src/pages/stages/email/EmailStageForm.ts +msgid "Activate pending user on success" +msgstr "Activer l'utilisateur en attente en cas de réussite" + +#: src/pages/groups/MemberSelectModal.ts src/pages/users/UserListPage.ts +#: src/pages/users/UserListPage.ts src/pages/users/UserViewPage.ts +msgid "Active" +msgstr "Actif" + +#: src/pages/groups/MemberSelectModal.ts src/pages/users/GroupSelectModal.ts +msgid "Add" +msgstr "Ajouter" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Addition Group DN" +msgstr "Préfixe DN groupes" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Addition User DN" +msgstr "Préfixe DN utilisateurs" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Additional group DN, prepended to the Base DN." +msgstr "DN à préfixer au DN de base pour les groupes" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Additional settings" +msgstr "Paramètres supplémentaire" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Additional user DN, prepended to the Base DN." +msgstr "DN à préfixer au DN de base pour les utilisateurs" + +#~ msgid "Admin" +#~ msgstr "Administrateur" + +#: src/interfaces/UserInterface.ts +msgid "Admin interface" +msgstr "Interface d'administration" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Advanced protocol settings" +msgstr "Paramètres avancés" + +#: src/pages/policies/password/PasswordPolicyForm.ts +msgid "Advanced settings" +msgstr "Paramètres avancés" + +#: src/pages/events/EventInfo.ts +msgid "Affected model:" +msgstr "Modèle affecté :" + +#: src/pages/events/RuleForm.ts +msgid "Alert" +msgstr "Alerte" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Algorithm used to sign the JWT Tokens." +msgstr "Algorithme de signature utilisé pour les jetons JWT" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Allow IDP-initiated logins" +msgstr "Autoriser les logins initiés par l'IDP" + +#: src/pages/sources/plex/PlexSourceForm.ts +msgid "" +"Allow friends to authenticate via Plex, even if you don't share any servers" +msgstr "" +"Autoriser les amis à s'authentifier via Plex, même si vous ne partagez aucun" +" serveur" + +#: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts +msgid "Allow up to N occurrences in the HIBP database." +msgstr "Autoriser jusqu'à N occurrences dans la base de données HIBP" + +#: src/pages/policies/PolicyListPage.ts +msgid "" +"Allow users to use Applications based on properties, enforce Password " +"Criteria and selectively apply Stages." +msgstr "" +"Permettre aux usagers l'utilisation d'applications sur la base de leurs " +"propriétés, appliquer les critères de robustesse des mots de passe et " +"sélectionner les flux applicables." + +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +msgid "Allowed Redirect URIs" +msgstr "URL de redirection autorisées" + +#: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts +msgid "Allowed count" +msgstr "Total autoris" + +#: src/pages/sources/plex/PlexSourceForm.ts +msgid "Allowed servers" +msgstr "Serveurs autorisés" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "" +"Allows authentication flows initiated by the IdP. This can be a security " +"risk, as no validation of the request ID is done." +msgstr "" +"Autoriser les flux d'authentification initiés par l'IdP. Cela peut présenter" +" un risque de sécurité, aucune validation de l'ID de la requête n'est " +"effectuée." + +#: src/pages/policies/reputation/ReputationPolicyForm.ts +msgid "Allows/denys requests based on the users and/or the IPs reputation." +msgstr "" +"Autorise/bloque les requêtes selon la réputation de l'utilisateur et/ou de " +"l'adresse IP" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Also known as Entity ID. Defaults the Metadata URL." +msgstr "Aussi appelé Entity ID. URL de métadonnée par défaut." + +#: src/flows/stages/authenticator_duo/AuthenticatorDuoStage.ts +msgid "" +"Alternatively, if your current device has Duo installed, click on this link:" +msgstr "Sinon, si Duo est installé sur cet appareil, cliquez sur ce lien :" + +#: src/pages/stages/consent/ConsentStageForm.ts +msgid "Always require consent" +msgstr "Toujours exiger l'approbation" + +#: src/pages/events/EventInfo.ts +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +msgid "App" +msgstr "App" + +#: src/pages/tokens/TokenListPage.ts +msgid "App password" +msgstr "Mot de passe de l'App" + +#: src/pages/tokens/TokenForm.ts +msgid "App password (can be used to login using a flow executor)" +msgstr "" +"Mot de passe de l'App (peut être utilisé pour ouvrir une session en " +"utilisant un flux d'exécution)" + +#: src/elements/user/UserConsentList.ts +#: src/pages/admin-overview/TopApplicationsTable.ts +#: src/pages/providers/ProviderListPage.ts +msgid "Application" +msgstr "Application" + +#: src/pages/applications/ApplicationListPage.ts +#: src/user/LibraryApplication.ts +msgid "Application Icon" +msgstr "Icône d'application" + +#: src/elements/charts/UserChart.ts +msgid "Application authorizations" +msgstr "Autorisations de l'application" + +#: src/pages/events/utils.ts +msgid "Application authorized" +msgstr "Application autorisé" + +#: src/flows/stages/consent/ConsentStage.ts +msgid "Application requires following permissions:" +msgstr "Cette application requiert les permissions suivantes :" + +#: src/pages/applications/ApplicationForm.ts +msgid "Application's display Name." +msgstr "Nom d'affichage de l'application" + +#: src/pages/applications/ApplicationListPage.ts +msgid "Application(s)" +msgstr "Application(s)" + +#: src/interfaces/AdminInterface.ts +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/outposts/OutpostForm.ts +msgid "Applications" +msgstr "Applications" + +#: src/pages/admin-overview/AdminOverviewPage.ts +msgid "Apps with most usage" +msgstr "Apps les plus utilisées" + +#: src/pages/flows/FlowListPage.ts +msgid "" +"Are you sure you want to clear the flow cache?\n" +"This will cause all flows to be re-evaluated on their next usage." +msgstr "" +"Êtes-vous sûr de vouloir vider le cache des flux ?\n" +"Cela va forcer une re-évaluation de tous les flux lors de leur prochaine utilisation." + +#: src/pages/policies/PolicyListPage.ts +msgid "" +"Are you sure you want to clear the policy cache?\n" +"This will cause all policies to be re-evaluated on their next usage." +msgstr "" +"Êtes-vous sûr de vouloir vider le cache des politiques ?\n" +"Cela va forcer une re-évaluation de toutes les politiques lors de leur prochaine utilisation." + +#: src/elements/forms/DeleteBulkForm.ts +msgid "Are you sure you want to delete {0} {1}?" +msgstr "Êtes-vous sûr de vouloir supprimer {0} {1} ?" + +#: src/elements/forms/DeleteForm.ts +msgid "Are you sure you want to delete {0} {objName} ?" +msgstr "Êtes-vous sûr de vouloir supprimer {0} {objName} ?" + +#: src/pages/users/UserActiveForm.ts +msgid "Are you sure you want to update {0} \"{1}\"?" +msgstr "Êtes-vous sûr de vouloir modifier {0} {1} ?" + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "" +"Assertion not valid on or after current time + this value (Format: " +"hours=1;minutes=2;seconds=3)." +msgstr "" +"Assertion non valide après écoulement de ce délai (format : " +"hours=1;minutes=2;seconds=3)" + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "Assertion valid not before" +msgstr "Assertion non valide avant" + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "Assertion valid not on or after" +msgstr "Durée de validité de l'assertion" + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageWebAuthn.ts +msgid "Assertions is empty" +msgstr "L'assertion est vide" + +#: src/pages/providers/ProviderListPage.ts +#: src/pages/providers/ldap/LDAPProviderViewPage.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +#: src/pages/providers/saml/SAMLProviderViewPage.ts +msgid "Assigned to application" +msgstr "Assigné à l'application" + +#: src/pages/policies/PolicyListPage.ts +msgid "Assigned to {0} objects." +msgstr "Assigné à {0} objets" + +#: src/pages/events/EventInfo.ts +msgid "Attempted to log in as {0}" +msgstr "Tentative d'ouvrir une session en tant que {0}" + +#: src/pages/property-mappings/PropertyMappingSAMLForm.ts +msgid "" +"Attribute name used for SAML Assertions. Can be a URN OID, a schema " +"reference, or a any other string. If this property mapping is used for " +"NameID Property, this field is discarded." +msgstr "" +"Nom de l'attribut utilisé pour les assertions SAML. Peut être un OID URN, " +"une référence à un schéma ou tout autre valeur. Si ce mapping de propriété " +"est utilisé pour NameID, cette valeur est ignorée." + +#: src/pages/groups/GroupForm.ts src/pages/stages/invitation/InvitationForm.ts +#: src/pages/users/UserForm.ts +msgid "Attributes" +msgstr "Attributs" + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/providers/saml/SAMLProviderViewPage.ts +msgid "Audience" +msgstr "Audience" + +#: src/flows/sources/plex/PlexLoginInit.ts +msgid "Authenticating with Plex..." +msgstr "Authentification avec Plex..." + +#: src/pages/flows/FlowForm.ts +msgid "Authentication" +msgstr "Authentification" + +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts src/pages/tenants/TenantForm.ts +msgid "Authentication flow" +msgstr "Flux d'authentification" + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts +#: src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts +msgid "Authenticator" +msgstr "Authentificateur" + +#: src/pages/flows/FlowForm.ts +msgid "Authorization" +msgstr "Authorisation" + +#~ msgid "Authorization Code" +#~ msgstr "Code d'autorisation" + +#: src/elements/oauth/UserCodeList.ts +msgid "Authorization Code(s)" +msgstr "Code(s) d'autorisation" + +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +msgid "Authorization URL" +msgstr "URL d'autorisation" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/providers/saml/SAMLProviderImportForm.ts +msgid "Authorization flow" +msgstr "Flux d'autorisation" + +#: src/elements/charts/ApplicationAuthorizeChart.ts +msgid "Authorizations" +msgstr "Autorisations" + +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +msgid "Authorize URL" +msgstr "URL d'authorisation" + +#: src/pages/events/EventInfo.ts +msgid "Authorized application:" +msgstr "Application autorisée :" + +#: src/interfaces/UserInterface.ts +msgid "Avatar image" +msgstr "Image d'avatar" + +#: src/pages/stages/password/PasswordStageForm.ts +msgid "Backends" +msgstr "Backends" + +#: src/pages/flows/FlowForm.ts src/pages/flows/FlowForm.ts +msgid "Background" +msgstr "Arrière-plan" + +#: src/flows/FlowExecutor.ts +msgid "Background image" +msgstr "Image d'arrière-plan" + +#: src/pages/flows/FlowForm.ts src/pages/flows/FlowForm.ts +#: src/pages/flows/FlowImportForm.ts +msgid "Background shown during execution." +msgstr "Arrière-plan utilisé durant l'exécution." + +#: src/pages/admin-overview/cards/BackupStatusCard.ts +msgid "Backup finished with errors." +msgstr "Sauvegarde terminée avec des erreurs." + +#: src/pages/admin-overview/cards/BackupStatusCard.ts +msgid "Backup finished with warnings/backup not supported." +msgstr "Sauvegarde terminée avec avertissements/sauvegarde non supportée." + +#: src/pages/admin-overview/AdminOverviewPage.ts +msgid "Backup status" +msgstr "État de la sauvegarde" + +#: src/pages/providers/ldap/LDAPProviderForm.ts +#: src/pages/providers/ldap/LDAPProviderViewPage.ts +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +msgid "Base DN" +msgstr "DN racine" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Based on the Hashed User ID" +msgstr "Basé sur le hash de l'ID utilisateur" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Based on the User's Email. This is recommended over the UPN method." +msgstr "" +"Basé sur le courriel utilisateur. Ceci est recommandé par rapport à la " +"méthode UPN." + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "" +"Based on the User's UPN, only works if user has a 'upn' attribute set. Use " +"this method only if you have different UPN and Mail domains." +msgstr "" +"Basé sur l'UPN utilisateur, possible uniquement si l'utilisateur possède un " +"attribut \"upn\" renseigné. Utiliser cette méthode seulement si les domaines" +" UPN et courriel sont différents." + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Based on the username" +msgstr "Basé sur le nom d'utilisateur" + +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +msgid "Basic-Auth" +msgstr "Basic-Auth" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Bind CN" +msgstr "Bind DN" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Bind Password" +msgstr "Mot de passe" + +#: src/pages/providers/ldap/LDAPProviderForm.ts +msgid "Bind flow" +msgstr "Lier un flux" + +#: src/pages/flows/BoundStagesList.ts src/pages/flows/BoundStagesList.ts +msgid "Bind stage" +msgstr "Lier une étape" + +#: src/pages/events/EventInfo.ts src/pages/events/EventInfo.ts +msgid "Binding" +msgstr "Liaison" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Binding Type" +msgstr "Type de binding" + +#: src/pages/tenants/TenantForm.ts +msgid "Branding settings" +msgstr "Paramètres de marque" + +#: src/pages/tenants/TenantForm.ts +msgid "Branding shown in page title and several other places." +msgstr "" +"Image de marque utilisée dans le titre de la page et dans d'autres endroits" + +#: src/elements/user/SessionList.ts +msgid "Browser" +msgstr "Navigateur" + +#: src/pages/admin-overview/cards/VersionStatusCard.ts +msgid "Build hash:" +msgstr "Hash de build :" + +#~ msgid "Build hash: {0}" +#~ msgstr "Hash de build : {0}" + +#: src/pages/sources/SourcesListPage.ts src/pages/sources/SourcesListPage.ts +msgid "Built-in" +msgstr "Intégré" + +#: src/pages/outposts/ServiceConnectionDockerForm.ts +msgid "" +"CA which the endpoint's Certificate is verified against. Can be left empty " +"for no validation." +msgstr "" +"AC auprès de laquelle le certificat du terminal est vérifié. Peut être " +"laissé vide en l'absence de validation." + +#: src/pages/admin-overview/charts/FlowStatusChart.ts +msgid "Cached flows" +msgstr "Flux mis en cache" + +#: src/pages/admin-overview/charts/PolicyStatusChart.ts +msgid "Cached policies" +msgstr "Politiques mises en cache" + +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +msgid "Callback URL" +msgstr "URL de rappel" + +#: src/pages/outposts/ServiceConnectionDockerForm.ts +msgid "" +"Can be in the format of 'unix://' when connecting to a local docker daemon, " +"or 'https://:2376' when connecting to a remote system." +msgstr "" +"Peut être au format \"unix://\" pour une connexion à un service docker " +"local, ou \"https://:2376\" pour une connexion à un système distant." + +#: src/elements/forms/ConfirmationForm.ts src/elements/forms/DeleteBulkForm.ts +#: src/elements/forms/DeleteForm.ts src/elements/forms/ModalForm.ts +#: src/pages/groups/MemberSelectModal.ts src/pages/users/GroupSelectModal.ts +#: src/pages/users/UserActiveForm.ts +msgid "Cancel" +msgstr "Annuler" + +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "Case insensitive matching" +msgstr "Correspondance insensible à la casse" + +#: src/pages/crypto/CertificateKeyPairForm.ts +#: src/pages/providers/ldap/LDAPProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Certificate" +msgstr "Certificat" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "Certificate Fingerprint (SHA1)" +msgstr "Empreinte du certificat (SHA1)" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "Certificate Fingerprint (SHA256)" +msgstr "Empreinte du certificat (SHA256)" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "Certificate Subject" +msgstr "Sujet du certificat" + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "" +"Certificate used to sign outgoing Responses going to the Service Provider." +msgstr "" +"Certificat utilisé pour signer les réponses sortantes vers le Service " +"Provider." + +#~ msgid "Certificate-Key Pair" +#~ msgstr "Paire de clé/certificat" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "Certificate-Key Pair(s)" +msgstr "Paire(s) de clé/certificat" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "Certificate-Key Pairs" +msgstr "Paires de clé/certificat" + +#: src/pages/outposts/ServiceConnectionDockerForm.ts +msgid "" +"Certificate/Key used for authentication. Can be left empty for no " +"authentication." +msgstr "" +"Certificat et clé utilisés pour l'authentification. Peut être laissé vide si" +" pas d'authentification." + +#: src/interfaces/AdminInterface.ts +msgid "Certificates" +msgstr "Certificats" + +#: src/user/user-settings/stages/UserSettingsPassword.ts +msgid "Change password" +msgstr "Changer le mot de pass" + +#: src/pages/users/UserListPage.ts +msgid "Change status" +msgstr "Changer le statut" + +#: src/user/user-settings/stages/UserSettingsPassword.ts +msgid "Change your password" +msgstr "Changer votre mot de pass" + +#: src/pages/applications/ApplicationViewPage.ts +#: src/pages/flows/FlowViewPage.ts +#: src/pages/providers/ldap/LDAPProviderViewPage.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +#: src/pages/providers/saml/SAMLProviderViewPage.ts +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +#: src/pages/sources/plex/PlexSourceViewPage.ts +#: src/pages/sources/saml/SAMLSourceViewPage.ts +#: src/pages/users/UserViewPage.ts +msgid "Changelog" +msgstr "Journal des modification" + +#: src/pages/policies/password/PasswordPolicyForm.ts +msgid "Characters which are considered as symbols." +msgstr "Caractères considérés comme des symboles." + +#: src/pages/applications/ApplicationViewPage.ts +msgid "Check" +msgstr "Vérifier" + +#: src/pages/applications/ApplicationViewPage.ts +msgid "Check Application access" +msgstr "Vérifier l'accès de l'application" + +#: src/pages/policies/reputation/ReputationPolicyForm.ts +msgid "Check IP" +msgstr "Vérifier l'adresse IP" + +#: src/pages/policies/reputation/ReputationPolicyForm.ts +msgid "Check Username" +msgstr "Vérifier le nom d'utilisateu" + +#: src/pages/applications/ApplicationViewPage.ts +msgid "Check access" +msgstr "Vérifier l'accès" + +#: src/pages/admin-overview/cards/SystemStatusCard.ts +msgid "Check outposts." +msgstr "Vérifier les avant-postes." + +#: src/flows/stages/authenticator_duo/AuthenticatorDuoStage.ts +msgid "Check status" +msgstr "Vérifier le statut" + +#: src/flows/stages/email/EmailStage.ts +msgid "Check your Emails for a password reset link." +msgstr "Vérifiez vos courriels pour un lien de récupération de mot de passe." + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Checkbox" +msgstr "Case à cocher" + +#: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts +msgid "" +"Checks a value from the policy request against the Have I been Pwned API, and denys the request based upon that.\n" +"Note that only a part of the hash of the password is sent, the full comparison is done clientside." +msgstr "" +"Vérifie une valeur de la requête via l'API de Have I Been Pwned et refuse l'accès selon la réponse.\n" +"À noter que seul une partie de l'hash du mot de passe est envoyée, la comparaison complète est faite en local." + +#: src/pages/policies/expiry/ExpiryPolicyForm.ts +msgid "" +"Checks if the request's user's password has been changed in the last x days," +" and denys based on settings." +msgstr "" +"Vérifie si le mot de passe de l'usager a été changé dans les X derniers " +"jours et refuse l'accès dépendamment du paramétrage." + +#: src/pages/policies/password/PasswordPolicyForm.ts +msgid "" +"Checks the value from the policy request against several rules, mostly used " +"to ensure password strength." +msgstr "" +"Vérifie la valeur de la requête via plusieurs règles, principalement utilisé" +" pour s'assurer de la robustesse des mots de passe." + +#: src/pages/flows/FlowListPage.ts +msgid "Clear Flow cache" +msgstr "Vider le cache des flux" + +#: src/pages/policies/PolicyListPage.ts +msgid "Clear Policy cache" +msgstr "Vider le cache des politiques" + +#: src/elements/notifications/NotificationDrawer.ts +#: src/elements/notifications/NotificationDrawer.ts +msgid "Clear all" +msgstr "Tout vider" + +#: src/pages/flows/FlowForm.ts +msgid "Clear background image" +msgstr "Supprimer l'image d'arrière-plan" + +#: src/pages/flows/FlowListPage.ts src/pages/flows/FlowListPage.ts +#: src/pages/policies/PolicyListPage.ts src/pages/policies/PolicyListPage.ts +msgid "Clear cache" +msgstr "Vider le cach" + +#: src/pages/applications/ApplicationForm.ts +msgid "Clear icon" +msgstr "Supprimer l'icôn" + +#: src/elements/forms/HorizontalFormElement.ts +msgid "Click to change value" +msgstr "Cliquer pour changer la valeur" + +#: src/pages/outposts/OutpostDeploymentModal.ts +msgid "Click to copy token" +msgstr "Cliquer pour copier le jeton" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/sources/plex/PlexSourceForm.ts +msgid "Client ID" +msgstr "ID client" + +#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/pages/events/EventListPage.ts +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +msgid "Client IP" +msgstr "Adresse IP client" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Client Secret" +msgstr "Secret du client" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +msgid "Client type" +msgstr "Type du client" + +#: src/elements/notifications/NotificationDrawer.ts +#: src/pages/outposts/OutpostDeploymentModal.ts +#: src/pages/users/UserListPage.ts +msgid "Close" +msgstr "Fermer" + +#: src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts +msgid "Code" +msgstr "Code" + +#: src/pages/crypto/CertificateGenerateForm.ts +msgid "Common Name" +msgstr "Nom Commun" + +#: src/pages/flows/FlowForm.ts +msgid "Compatibility mode" +msgstr "Mode de compatibilité" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Confidential" +msgstr "Confidentiel" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "" +"Confidential clients are capable of maintaining the confidentiality of their" +" credentials. Public clients are incapable." +msgstr "" +"Les clients confidentiels sont capable de maintenir la confidentialité de " +"leurs identifiants. Le clients publics n'en sont pas capables." + +#: src/pages/outposts/OutpostForm.ts +msgid "Configuration" +msgstr "Configuration" + +#: src/pages/events/utils.ts +msgid "Configuration error" +msgstr "Erreur de configuration" + +#: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts +#: src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts +#: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts +#: src/pages/stages/password/PasswordStageForm.ts +msgid "Configuration flow" +msgstr "Flux de configuration" + +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "Configuration stage" +msgstr "Étape de configuration" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts +msgid "Configure WebAuthn" +msgstr "Configurer WebAuthn" + +#~ msgid "Configure how long access codes are valid for." +#~ msgstr "Configure la durée de validité des codes d'accès." + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Configure how long access tokens are valid for." +msgstr "Configure la durée de validité des jetons d'accès." + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Configure how long refresh tokens and their id_tokens are valid for." +msgstr "" +"Configure la durée de validité des jetons de rafraîchissement et de leur " +"id_tokens." + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Configure how long tokens are valid for." +msgstr "Configure la durée de validité des jetons d'accès." + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "" +"Configure how the NameID value will be created. When left empty, the " +"NameIDPolicy of the incoming request will be respected." +msgstr "" +"Configure la façon dont NameID sera créé. Si vide, la politique NameIDPolicy" +" de la requête entrante sera appliquée." + +#: src/pages/flows/StageBindingForm.ts +msgid "" +"Configure how the flow executor should handle an invalid response to a " +"challenge." +msgstr "" +"Configure comment l'exécuteur de flux gère une réponse invalide à un " +"challenge." + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Configure how the issuer field of the ID Token should be filled." +msgstr "Configure comment le champ émetteur du jeton ID sera rempli." + +#~ msgid "Configure settings relevant to your user profile." +#~ msgstr "Configure les paramètre applicable à votre profil." + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "Configure the maximum allowed time drift for an asseration." +msgstr "Configure la dérive temporelle maximale d'une assetion." + +#: src/pages/tenants/TenantListPage.ts +msgid "Configure visual settings and defaults for different domains." +msgstr "" +"Configure le paramètres visuels et par défaut des différents domaines." + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "" +"Configure what data should be used as unique User Identifier. For most " +"cases, the default should be fine." +msgstr "" +"Configure quelle donnée utiliser pour l'identifiant unique utilisateur. La " +"valeur par défaut devrait être correcte dans la plupart des cas." + +#: src/user/user-settings/sources/SourceSettingsOAuth.ts +msgid "Connect" +msgstr "Connecter" + +#: src/user/user-settings/UserSettingsPage.ts +msgid "Connected services" +msgstr "Services connectés" + +#: src/user/user-settings/sources/SourceSettingsOAuth.ts +#: src/user/user-settings/sources/SourceSettingsPlex.ts +msgid "Connected." +msgstr "Connecté." + +#: src/common/ws.ts +msgid "Connection error, reconnecting..." +msgstr "Erreur de connexion, nouvelle tentative..." + +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/stages/email/EmailStageForm.ts +msgid "Connection settings" +msgstr "Paramètres de connexion" + +#: src/user/user-settings/UserSettingsPage.ts +msgid "Consent" +msgstr "Approbation" + +#: src/pages/stages/consent/ConsentStageForm.ts +msgid "Consent expires in" +msgstr "L'approbation expire dans" + +#: src/pages/stages/consent/ConsentStageForm.ts +msgid "Consent expires." +msgstr "L'approbation expire." + +#: src/pages/stages/consent/ConsentStageForm.ts +msgid "Consent given last indefinitely" +msgstr "L'approbation dure indéfiniment" + +#: src/elements/user/UserConsentList.ts +msgid "Consent(s)" +msgstr "Approbation(s)" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Consider Objects matching this filter to be Groups." +msgstr "Les objets appliqués à ce filtre seront des groupes." + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Consider Objects matching this filter to be Users." +msgstr "Les objets appliqués à ce filtre seront des utilisateurs." + +#: src/pages/sources/oauth/OAuthSourceForm.ts +msgid "Consumer key" +msgstr "Clé consumer" + +#: src/pages/sources/oauth/OAuthSourceForm.ts +msgid "Consumer secret" +msgstr "Secret consumer" + +#: src/pages/events/EventInfo.ts src/pages/events/EventInfo.ts +#: src/pages/events/EventInfo.ts src/pages/policies/PolicyTestForm.ts +#: src/pages/property-mappings/PropertyMappingTestForm.ts +msgid "Context" +msgstr "Contexte" + +#: src/flows/stages/authenticator_static/AuthenticatorStaticStage.ts +#: src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageDuo.ts +#: src/flows/stages/autosubmit/AutosubmitStage.ts +#: src/flows/stages/consent/ConsentStage.ts +#: src/flows/stages/dummy/DummyStage.ts +#: src/flows/stages/password/PasswordStage.ts +#: src/flows/stages/prompt/PromptStage.ts +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "Continue" +msgstr "Continuer" + +#: src/pages/stages/invitation/InvitationStageForm.ts +msgid "Continue flow without invitation" +msgstr "Continuer le flux sans invitation" + +#: src/pages/property-mappings/PropertyMappingListPage.ts +msgid "Control how authentik exposes and interprets information." +msgstr "Contrôle comment authentik expose et interprète les informations" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Cookie domain" +msgstr "Domaine des cookies" + +#: src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts +msgid "Copy" +msgstr "Copier" + +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "Copy Key" +msgstr "Copier la clé" + +#: src/pages/providers/saml/SAMLProviderViewPage.ts +msgid "Copy download URL" +msgstr "Copier l'URL de téléchargement" + +#: src/pages/users/UserListPage.ts +msgid "Copy recovery link" +msgstr "Copier le lien de récupération" + +#: src/pages/applications/ApplicationForm.ts +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/events/RuleListPage.ts src/pages/events/RuleListPage.ts +#: src/pages/events/TransportListPage.ts src/pages/events/TransportListPage.ts +#: src/pages/flows/BoundStagesList.ts src/pages/flows/BoundStagesList.ts +#: src/pages/flows/BoundStagesList.ts src/pages/flows/FlowListPage.ts +#: src/pages/flows/FlowListPage.ts src/pages/groups/GroupListPage.ts +#: src/pages/groups/GroupListPage.ts src/pages/outposts/OutpostListPage.ts +#: src/pages/outposts/OutpostListPage.ts +#: src/pages/outposts/ServiceConnectionListPage.ts +#: src/pages/outposts/ServiceConnectionListPage.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/PolicyListPage.ts src/pages/policies/PolicyListPage.ts +#: src/pages/property-mappings/PropertyMappingListPage.ts +#: src/pages/property-mappings/PropertyMappingListPage.ts +#: src/pages/providers/ProviderListPage.ts +#: src/pages/providers/ProviderListPage.ts +#: src/pages/providers/RelatedApplicationButton.ts +#: src/pages/providers/RelatedApplicationButton.ts +#: src/pages/sources/SourcesListPage.ts src/pages/sources/SourcesListPage.ts +#: src/pages/stages/StageListPage.ts src/pages/stages/StageListPage.ts +#: src/pages/stages/invitation/InvitationListPage.ts +#: src/pages/stages/invitation/InvitationListPage.ts +#: src/pages/stages/prompt/PromptListPage.ts +#: src/pages/stages/prompt/PromptListPage.ts +#: src/pages/stages/prompt/PromptStageForm.ts +#: src/pages/stages/prompt/PromptStageForm.ts +#: src/pages/tenants/TenantListPage.ts src/pages/tenants/TenantListPage.ts +#: src/pages/tokens/TokenListPage.ts src/pages/tokens/TokenListPage.ts +#: src/pages/users/UserListPage.ts src/pages/users/UserListPage.ts +#: src/pages/users/UserListPage.ts +#: src/user/user-settings/tokens/UserTokenList.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "Create" +msgstr "Créer" + +#: src/user/user-settings/tokens/UserTokenList.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "Create App password" +msgstr "Créer un mot de passe App" + +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/providers/RelatedApplicationButton.ts +msgid "Create Application" +msgstr "Créer une application" + +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/BoundPoliciesList.ts +msgid "Create Binding" +msgstr "Créer une liaison" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "Create Certificate-Key Pair" +msgstr "Créer une paire clé/certificat" + +#: src/pages/flows/FlowListPage.ts +msgid "Create Flow" +msgstr "Créer un flux" + +#: src/pages/groups/GroupListPage.ts +msgid "Create Group" +msgstr "Créer un groupe" + +#: src/pages/stages/invitation/InvitationListPage.ts +msgid "Create Invitation" +msgstr "Créer une invitation" + +#: src/pages/stages/invitation/InvitationListPage.ts +msgid "" +"Create Invitation Links to enroll Users, and optionally force specific " +"attributes of their account." +msgstr "" +"Créer des liens d'invitation pour inscrire des utilisateurs et " +"éventuellement imposer certains attributs de leurs compte." + +#: src/pages/events/RuleListPage.ts +msgid "Create Notification Rule" +msgstr "Créer une règles de notification" + +#: src/pages/events/TransportListPage.ts +msgid "Create Notification Transport" +msgstr "Créer une notification de transport" + +#: src/pages/outposts/OutpostListPage.ts +msgid "Create Outpost" +msgstr "Créer un avant-poste" + +#: src/pages/policies/BoundPoliciesList.ts +msgid "Create Policy" +msgstr "Créer une politique" + +#: src/pages/stages/prompt/PromptListPage.ts +#: src/pages/stages/prompt/PromptStageForm.ts +msgid "Create Prompt" +msgstr "Créer une invite" + +#: src/pages/users/UserListPage.ts src/pages/users/UserListPage.ts +msgid "Create Service account" +msgstr "Créer un compte de service" + +#: src/pages/flows/BoundStagesList.ts +msgid "Create Stage" +msgstr "Créer une étape" + +#: src/pages/flows/BoundStagesList.ts src/pages/flows/BoundStagesList.ts +msgid "Create Stage binding" +msgstr "Créer une liaison d'étap" + +#: src/pages/tenants/TenantListPage.ts +msgid "Create Tenant" +msgstr "Créer un locataire" + +#: src/pages/tokens/TokenListPage.ts +#: src/user/user-settings/tokens/UserTokenList.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "Create Token" +msgstr "Créer un jeton" + +#: src/pages/users/UserListPage.ts +msgid "Create User" +msgstr "Créer un utilisateu" + +#: src/pages/users/ServiceAccountForm.ts +msgid "Create group" +msgstr "Créer un groupe" + +#: src/pages/applications/ApplicationForm.ts +msgid "Create provider" +msgstr "Créer un fournisseur" + +#: src/pages/stages/user_write/UserWriteStageForm.ts +msgid "Create users as inactive" +msgstr "Créer des utilisateurs inactifs" + +#: src/pages/applications/ApplicationForm.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/outposts/ServiceConnectionListPage.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/PolicyListPage.ts +#: src/pages/property-mappings/PropertyMappingListPage.ts +#: src/pages/providers/ProviderListPage.ts +#: src/pages/sources/SourcesListPage.ts src/pages/stages/StageListPage.ts +msgid "Create {0}" +msgstr "Créer {0}" + +#: src/pages/stages/invitation/InvitationListPage.ts +msgid "Created by" +msgstr "Créé par" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts +msgid "Created {0}" +msgstr "Créé {0}" + +#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/pages/events/EventListPage.ts +msgid "Creation Date" +msgstr "Date de création" + +#: src/flows/FlowInspector.ts +msgid "Current plan cntext" +msgstr "Contexte du plan courant" + +#: src/pages/applications/ApplicationForm.ts src/pages/flows/FlowForm.ts +msgid "Currently set to:" +msgstr "Actuellement fixé à :" + +#: src/interfaces/AdminInterface.ts +msgid "Customisation" +msgstr "Personalisation" + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "DSA-SHA1" +msgstr "DSA-SHA1" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Date" +msgstr "Date" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Date Time" +msgstr "Date et heure" + +#: src/pages/users/UserListPage.ts src/pages/users/UserViewPage.ts +msgid "Deactivate" +msgstr "Désactiver" + +#: src/pages/flows/FlowForm.ts +msgid "" +"Decides what this Flow is used for. For example, the Authentication flow is " +"redirect to when an un-authenticated user visits authentik." +msgstr "" +"Détermine l'usage de ce flux. Par exemple, un flux d'authentification est la" +" destination d'un visiteur d'authentik non authentifié." + +#: src/pages/tenants/TenantForm.ts +msgid "Default" +msgstr "Par défaut" + +#: src/pages/tenants/TenantForm.ts +msgid "Default flows" +msgstr "Flux par défaut" + +#: src/pages/tenants/TenantListPage.ts +msgid "Default?" +msgstr "Par défaut ?" + +#: src/pages/events/TransportListPage.ts +msgid "Define how notifications are sent to users, like Email or Webhook." +msgstr "" +"Définit les méthodes d'envoi des notifications aux utilisateurs, telles que " +"courriel ou webhook." + +#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +#: src/elements/oauth/UserCodeList.ts src/elements/oauth/UserRefreshList.ts +#: src/elements/user/SessionList.ts src/elements/user/UserConsentList.ts +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/events/RuleListPage.ts src/pages/events/TransportListPage.ts +#: src/pages/flows/BoundStagesList.ts src/pages/flows/FlowListPage.ts +#: src/pages/groups/GroupListPage.ts src/pages/outposts/OutpostListPage.ts +#: src/pages/outposts/ServiceConnectionListPage.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/PolicyListPage.ts +#: src/pages/policies/reputation/IPReputationListPage.ts +#: src/pages/policies/reputation/UserReputationListPage.ts +#: src/pages/property-mappings/PropertyMappingListPage.ts +#: src/pages/providers/ProviderListPage.ts +#: src/pages/sources/SourcesListPage.ts src/pages/stages/StageListPage.ts +#: src/pages/stages/invitation/InvitationListPage.ts +#: src/pages/stages/prompt/PromptListPage.ts +#: src/pages/tenants/TenantListPage.ts src/pages/tokens/TokenListPage.ts +#: src/pages/users/UserListPage.ts +#: src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "Delete" +msgstr "Supprimer" + +#~ msgid "Delete Authorization Code" +#~ msgstr "Supprimer le code d'autorisation" + +#~ msgid "Delete Binding" +#~ msgstr "Supprimer la liaison" + +#~ msgid "Delete Consent" +#~ msgstr "Supprimer l'approbation" + +#~ msgid "Delete Refresh Code" +#~ msgstr "Supprimer le code de rafraîchissement" + +#~ msgid "Delete Session" +#~ msgstr "Supprimer la session" + +#: src/user/user-settings/UserSelfForm.ts +msgid "Delete account" +msgstr "Supprimer le compte" + +#: src/pages/flows/FlowForm.ts +msgid "Delete currently set background image." +msgstr "Supprimer l'arrière plan actuellement défini" + +#: src/pages/applications/ApplicationForm.ts +msgid "Delete currently set icon." +msgstr "Supprimer l'icône actuellement définie" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Delete temporary users after" +msgstr "Supprimer les utilisateurs temporaires après" + +#: src/pages/stages/user_delete/UserDeleteStageForm.ts +msgid "" +"Delete the currently pending user. CAUTION, this stage does not ask for\n" +"confirmation. Use a consent stage to ensure the user is aware of their actions." +msgstr "" +"Supprimer l'utilisateur en attente. ATTENTION, cette étape ne demande aucune" +" confirmation. Utiliser une étape d'approbation pour s'assurer que " +"l'utilisateur ait conscience de ses actions." + +#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +msgid "Delete {0}" +msgstr "Supprimer {0}" + +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "Deny the user access" +msgstr "Refuser l'accès à l'utilisateu" + +#: src/pages/applications/ApplicationForm.ts +#: src/pages/property-mappings/PropertyMappingScopeForm.ts +#: src/pages/system-tasks/SystemTaskListPage.ts src/pages/tokens/TokenForm.ts +#: src/user/user-settings/tokens/UserTokenForm.ts +msgid "Description" +msgstr "Description" + +#: src/pages/property-mappings/PropertyMappingScopeForm.ts +msgid "" +"Description shown to the user when consenting. If left empty, the user won't" +" be informed." +msgstr "" +"Description montrée à l'utilisateur lors de l'approbation. Aucune " +"information présentée à l'utilisateur si laissé vide." + +#: src/pages/users/UserForm.ts +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Indique si cet utilisateur doit être traité comme actif. Désélectionnez " +"cette option au lieu de supprimer les comptes." + +#: src/pages/flows/FlowForm.ts src/pages/flows/FlowListPage.ts +msgid "Designation" +msgstr "Désignation" + +#: src/pages/outposts/OutpostListPage.ts +msgid "" +"Detailed health (one instance per column, data is cached so may be out of " +"data)" +msgstr "" +"État détaillé (une instance par colonne, les données sont mises en cache et " +"peuvent donc être périmée)" + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "" +"Determines how authentik sends the response back to the Service Provider." +msgstr "" +"Détermine comment authentik renvoie la réponse au fournisseur de services." + +#: src/pages/stages/user_login/UserLoginStageForm.ts +msgid "" +"Determines how long a session lasts. Default of 0 seconds means that the " +"sessions lasts until the browser is closed." +msgstr "" +"Détermine la durée de la session. La valeur par défaut de 0 seconde signifie" +" que la session dure jusqu'à la fermeture du navigateur." + +#: src/elements/user/SessionList.ts +msgid "Device" +msgstr "Équipement" + +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "Device classes" +msgstr "Classes d'équipement" + +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "Device classes which can be used to authenticate." +msgstr "Classe d'équipement qui peut être utilisé pour s'authentifier" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts +msgid "Device name" +msgstr "Nom de l'équipement" + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Digest algorithm" +msgstr "Algorithme d'empreinte" + +#: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts +msgid "Digits" +msgstr "Chiffres" + +#~ msgid "Disable" +#~ msgstr "Désactiver" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorDuo.ts +msgid "Disable Duo authenticator" +msgstr "Désactiver l'authentificateur Duo" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorStatic.ts +msgid "Disable Static Tokens" +msgstr "Désactiver les jetons statiques" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorTOTP.ts +msgid "Disable Time-based OTP" +msgstr "Désactiver les OTP basés sur le temps" + +#: src/pages/sources/SourcesListPage.ts +msgid "Disabled" +msgstr "Désactivé" + +#: src/user/user-settings/sources/SourceSettingsOAuth.ts +#: src/user/user-settings/sources/SourceSettingsPlex.ts +msgid "Disconnect" +msgstr "Déconnecter" + +#: src/pages/outposts/ServiceConnectionDockerForm.ts +msgid "Docker URL" +msgstr "URL Docker" + +#: src/pages/tenants/TenantForm.ts src/pages/tenants/TenantListPage.ts +msgid "Domain" +msgstr "Domaine" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/providers/saml/SAMLProviderViewPage.ts +#: src/pages/sources/saml/SAMLSourceViewPage.ts +msgid "Download" +msgstr "Télécharger" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "Download Certificate" +msgstr "Télécharger le certificat" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "Download Private key" +msgstr "Télécharger la clé privée" + +#: src/pages/providers/ldap/LDAPProviderForm.ts +msgid "" +"Due to protocol limitations, this certificate is only used when the outpost " +"has a single provider." +msgstr "" +"En raison des limitations de protocole, ce certificat n'est utilisé que " +"lorsque l'avant-poste a un unique fournisseur." + +#: src/pages/stages/dummy/DummyStageForm.ts +msgid "" +"Dummy stage used for testing. Shows a simple continue button and always " +"passes." +msgstr "" +"Étape factice utilisée pour les tests. Montre un simple bouton continuer et " +"réussit toujours." + +#: src/user/user-settings/stages/UserSettingsAuthenticatorDuo.ts +msgid "Duo" +msgstr "Duo" + +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "Duo Authenticators" +msgstr "Authentificateurs Duo" + +#: src/flows/stages/authenticator_duo/AuthenticatorDuoStage.ts +msgid "Duo activation" +msgstr "Activation Duo" + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts +msgid "Duo push-notifications" +msgstr "Notification push Duo" + +#: src/pages/tenants/TenantForm.ts +msgid "Duration after which events will be deleted from the database." +msgstr "" +"Expiration des évènements à l'issue de laquelle ils seront supprimés de la " +"base de donnée." + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Each provider has a different issuer, based on the application slug." +msgstr "" +"Chaque fournisseur a un émetteur différent, basé sur le slug de " +"l'application." + +#: src/pages/applications/ApplicationViewPage.ts +#: src/pages/applications/ApplicationViewPage.ts +#: src/pages/providers/ldap/LDAPProviderViewPage.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +#: src/pages/providers/saml/SAMLProviderViewPage.ts +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +#: src/pages/sources/plex/PlexSourceViewPage.ts +#: src/pages/sources/saml/SAMLSourceViewPage.ts +#: src/pages/users/UserViewPage.ts +msgid "Edit" +msgstr "Éditer" + +#: src/pages/flows/BoundStagesList.ts src/pages/policies/BoundPoliciesList.ts +msgid "Edit Binding" +msgstr "Éditer la liaison" + +#: src/pages/policies/BoundPoliciesList.ts +msgid "Edit Group" +msgstr "Éditer le groupe" + +#: src/pages/policies/BoundPoliciesList.ts +msgid "Edit Policy" +msgstr "Éditer la politique" + +#: src/pages/flows/BoundStagesList.ts +msgid "Edit Stage" +msgstr "Éditer l'étap" + +#: src/pages/policies/BoundPoliciesList.ts +msgid "Edit User" +msgstr "Éditer l'utilisateur" + +#: src/user/LibraryPage.ts +msgid "Either no applications are defined, or you don't have access to any." +msgstr "" +"Soit aucune application n'est définie, soit vous n'en avez accès à aucune." + +#: src/flows/stages/identification/IdentificationStage.ts +#: src/pages/events/TransportForm.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/users/UserForm.ts src/pages/users/UserViewPage.ts +#: src/user/user-settings/UserSelfForm.ts +msgid "Email" +msgstr "Courriel" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Email address" +msgstr "Adresse courriel" + +#: src/pages/events/EventInfo.ts +msgid "Email info:" +msgstr "Information courriel :" + +#: src/pages/users/UserListPage.ts +msgid "Email recovery link" +msgstr "Lien de récupération courriel" + +#: src/pages/events/utils.ts +msgid "Email sent" +msgstr "Courriel envoyé" + +#: src/pages/users/UserResetEmailForm.ts +msgid "Email stage" +msgstr "Étape courriel" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Email: Text field with Email type." +msgstr "Courriel : champ texte de type email" + +#: src/pages/admin-overview/cards/SystemStatusCard.ts +msgid "Embedded outpost is not configured correctly." +msgstr "L'avant poste intégré n'est pas configuré correctement" + +#~ msgid "Enable" +#~ msgstr "Activer" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorDuo.ts +msgid "Enable Duo authenticator" +msgstr "Activer l'authentificateur Duo" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Enable StartTLS" +msgstr "Activer StartTLS" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorStatic.ts +msgid "Enable Static Tokens" +msgstr "Activer les jetons statiques" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorTOTP.ts +msgid "Enable TOTP" +msgstr "Activer TOTP" + +#: src/pages/flows/FlowForm.ts +msgid "" +"Enable compatibility mode, increases compatibility with password managers on" +" mobile devices." +msgstr "" +"Activer le mode de compatibilité, améliore la compatibilité avec les " +"gestionnaires de mot de passe sur les équipements mobiles." + +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/PolicyBindingForm.ts +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Enabled" +msgstr "Activé" + +#: src/pages/users/ServiceAccountForm.ts +msgid "" +"Enabling this toggle will create a group named after the user, with the user" +" as member." +msgstr "" +"Activer cette option va créer un groupe du même nom que l'utilisateur dont " +"il sera membre." + +#: src/pages/flows/FlowForm.ts +msgid "Enrollment" +msgstr "Inscription" + +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "Enrollment flow" +msgstr "Flux d'inscription" + +#: src/pages/system-tasks/SystemTaskListPage.ts +msgid "Error" +msgstr "Erreur" + +#: src/flows/stages/authenticator_webauthn/WebAuthnAuthenticatorRegisterStage.ts +msgid "Error creating credential: {err}" +msgstr "Erreur lors de la création des identifiants : {err}" + +#: src/pages/policies/password/PasswordPolicyForm.ts +msgid "Error message" +msgstr "Message d'erreur" + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageWebAuthn.ts +msgid "Error when creating credential: {err}" +msgstr "Erreur lors de la création des identifiants : {err}" + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageWebAuthn.ts +msgid "Error when validating assertion on server: {err}" +msgstr "Erreur lors de la validation de l'assertion sur le serveur : {err}" + +#: src/user/user-settings/sources/SourceSettings.ts +msgid "Error: unsupported source settings: {0}" +msgstr "Erreur : paramètres source non supportés : {0}" + +#: src/user/user-settings/stages/StageSettings.ts +msgid "Error: unsupported stage settings: {0}" +msgstr "Erreur : paramètres d'étape non supporté : {0}" + +#: src/pages/flows/StageBindingForm.ts +msgid "Evaluate on plan" +msgstr "Évaluer en planification" + +#: src/pages/flows/StageBindingForm.ts +msgid "Evaluate policies before the Stage is present to the user." +msgstr "Évaluer la politique avant la présentation de l'étape à l'utilisateur" + +#: src/pages/flows/StageBindingForm.ts +msgid "" +"Evaluate policies during the Flow planning process. Disable this for input-" +"based policies. Should be used in conjunction with 'Re-evaluate policies', " +"as with both options disabled, policies are **not** evaluated." +msgstr "" +"Évaluer les politiques pendant le processus de planification des flux. " +"Désactivez cette option pour les politiques basées sur des entrées. Doit " +"être utilisé conjointement avec \"Réévaluer les politiques\", car si les " +"deux options sont désactivées, les politiques ne sont **pas** évaluées." + +#: src/pages/events/EventListPage.ts +msgid "Event Log" +msgstr "Journal d'évènements" + +#: src/pages/events/EventInfoPage.ts +msgid "Event info" +msgstr "Information d'évèvement" + +#: src/pages/tenants/TenantForm.ts +msgid "Event retention" +msgstr "Rétention d'évènement" + +#: src/pages/events/EventInfoPage.ts +msgid "Event {0}" +msgstr "Évènement {0}" + +#: src/interfaces/AdminInterface.ts +msgid "Events" +msgstr "Évènements" + +#: src/pages/admin-overview/cards/SystemStatusCard.ts +msgid "Everything is ok." +msgstr "Tout va bien." + +#: src/pages/events/EventInfo.ts src/pages/events/EventInfo.ts +#: src/pages/events/EventInfo.ts +msgid "Exception" +msgstr "Exception" + +#: src/pages/flows/FlowViewPage.ts +msgid "Execute" +msgstr "Exécuter" + +#: src/pages/flows/FlowViewPage.ts +msgid "Execute flow" +msgstr "Exécuter le flux" + +#: src/pages/flows/FlowViewPage.ts +msgid "Execute with inspector" +msgstr "Exécuter avec inspection" + +#: src/pages/policies/expression/ExpressionPolicyForm.ts +msgid "" +"Executes the python snippet to determine whether to allow or deny a request." +msgstr "" +"Exécute le fragment de code python pour décider d'autoriser ou non la " +"demande." + +#: src/pages/policies/dummy/DummyPolicyForm.ts +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +#: src/pages/policies/expiry/ExpiryPolicyForm.ts +#: src/pages/policies/expression/ExpressionPolicyForm.ts +#: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts +#: src/pages/policies/password/PasswordPolicyForm.ts +#: src/pages/policies/reputation/ReputationPolicyForm.ts +msgid "Execution logging" +msgstr "Journalisation de l'exécution" + +#: src/elements/oauth/UserCodeList.ts src/elements/oauth/UserRefreshList.ts +#: src/elements/user/SessionList.ts src/elements/user/UserConsentList.ts +#: src/pages/stages/invitation/InvitationForm.ts +msgid "Expires" +msgstr "Expire" + +#: src/pages/tokens/TokenForm.ts +msgid "Expires on" +msgstr "Expire le" + +#: src/pages/tokens/TokenListPage.ts +msgid "Expires?" +msgstr "Expire ?" + +#: src/user/user-settings/tokens/UserTokenList.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "Expiring" +msgstr "Expiration" + +#: src/pages/tokens/TokenForm.ts +msgid "Expiring?" +msgstr "Expiration ?" + +#: src/elements/user/SessionList.ts +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/stages/invitation/InvitationListPage.ts +msgid "Expiry" +msgstr "Expiration" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/tokens/TokenListPage.ts +msgid "Expiry date" +msgstr "Date d'expiration" + +#: src/pages/users/UserViewPage.ts +msgid "Explicit Consent" +msgstr "Approbation explicite" + +#: src/pages/flows/FlowViewPage.ts +msgid "Export" +msgstr "Exporter" + +#: src/pages/flows/FlowViewPage.ts +msgid "Export flow" +msgstr "Flux d'exportation" + +#: src/pages/events/EventInfo.ts +#: src/pages/policies/expression/ExpressionPolicyForm.ts +#: src/pages/property-mappings/PropertyMappingLDAPForm.ts +#: src/pages/property-mappings/PropertyMappingNotification.ts +#: src/pages/property-mappings/PropertyMappingSAMLForm.ts +#: src/pages/property-mappings/PropertyMappingScopeForm.ts +msgid "Expression" +msgstr "Expression" + +#: src/pages/policies/expression/ExpressionPolicyForm.ts +#: src/pages/property-mappings/PropertyMappingLDAPForm.ts +#: src/pages/property-mappings/PropertyMappingNotification.ts +#: src/pages/property-mappings/PropertyMappingSAMLForm.ts +#: src/pages/property-mappings/PropertyMappingScopeForm.ts +msgid "Expression using Python." +msgstr "Expression en python" + +#: src/pages/applications/ApplicationListPage.ts +msgid "" +"External Applications which use authentik as Identity-Provider, utilizing " +"protocols like OAuth2 and SAML. All applications are shown here, even ones " +"you cannot access." +msgstr "" +"Applications externes qui utilisent authentik comme fournisseur d'identité, " +"en utilisant des protocoles comme OAuth2 et SAML. Toutes les applications " +"sont affichées ici, même celles auxquelles vous n'avez pas accéder." + +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +msgid "External Host" +msgstr "Hôte externe" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "External host" +msgstr "Hôte externe" + +#: src/elements/charts/AdminLoginsChart.ts src/elements/charts/UserChart.ts +msgid "Failed Logins" +msgstr "Connexions échouées" + +#: src/pages/stages/password/PasswordStageForm.ts +msgid "Failed attempts before cancel" +msgstr "Échecs avant annulation" + +#: src/pages/events/utils.ts +msgid "Failed login" +msgstr "Échec de la connexion" + +#: src/pages/admin-overview/charts/LDAPSyncStatusChart.ts +msgid "Failed sources" +msgstr "Sources échouées" + +#: src/pages/flows/FlowListPage.ts +msgid "Failed to delete flow cache" +msgstr "Impossible de vider le cache des flux" + +#: src/pages/policies/PolicyListPage.ts +msgid "Failed to delete policy cache" +msgstr "Impossible de vider le cache des politiques" + +#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +msgid "Failed to delete {0}: {1}" +msgstr "Impossible de supprimer {0} : {1}" + +#: src/pages/users/UserActiveForm.ts +msgid "Failed to update {0}: {1}" +msgstr "Impossible de mettre à jour {0} : {1}" + +#: src/pages/tenants/TenantForm.ts +msgid "Favicon" +msgstr "Favicon" + +#: src/pages/stages/prompt/PromptListPage.ts +msgid "Field" +msgstr "Champ" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Field Key" +msgstr "Clé du champ" + +#: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts +#: src/pages/policies/password/PasswordPolicyForm.ts +msgid "Field key to check, field keys defined in Prompt stages are available." +msgstr "" +"Clé de champ à vérifier ; les clés de champ définies dans les étapes de " +"d'invite sont disponibles." + +#: src/pages/property-mappings/PropertyMappingLDAPForm.ts +msgid "Field of the user object this value is written to." +msgstr "Champ de l'objet utilisateur dans lequel cette valeur est écrite." + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Field which contains a unique Identifier." +msgstr "Champ qui contient un identifiant unique." + +#~ msgid "Field which contains members of a group." +#~ msgstr "Champ qui contient les membres d'un groupe." + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "" +"Field which contains members of a group. Note that if using the " +"\"memberUid\" field, the value is assumed to contain a relative " +"distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn" +"=some-user,ou=groups,...'" +msgstr "" +"Champ qui contient les membres d'un groupe. Si vous utilisez le champ " +"\"memberUid\", la valeur est censée contenir un nom distinctif relatif, par " +"exemple 'memberUid=un-utilisateur' au lieu de 'memberUid=cn=un-" +"utilisateur,ou=groups,...'" + +#: src/pages/stages/prompt/PromptStageForm.ts +msgid "Fields" +msgstr "Champs" + +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "" +"Fields a user can identify themselves with. If no fields are selected, the " +"user will only be able to use sources." +msgstr "" +"Champs avec lesquels un utilisateur peut s'identifier. Si aucun champ n'est " +"sélectionné, l'utilisateur ne pourra utiliser que des sources." + +#: src/pages/flows/FlowImportForm.ts +msgid "Flow" +msgstr "Flux" + +#: src/pages/flows/FlowViewPage.ts +msgid "Flow Overview" +msgstr "Aperçu du flux" + +#: src/flows/FlowInspector.ts src/flows/FlowInspector.ts +msgid "Flow inspector" +msgstr "Inspecteur de flux" + +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Flow settings" +msgstr "Paramètres du flux" + +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Flow to use when authenticating existing users." +msgstr "Flux à utiliser pour authentifier les utilisateurs existants." + +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Flow to use when enrolling new users." +msgstr "Flux à utiliser pour inscrire les nouveaux utilisateurs." + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Flow used before authentication." +msgstr "Flux à utiliser avant authentification." + +#: src/pages/stages/password/PasswordStageForm.ts +msgid "" +"Flow used by an authenticated user to configure their password. If empty, " +"user will not be able to configure change their password." +msgstr "" +"Flux utilisé par un utilisateur authentifié pour configurer son mot de " +"passe. S'il est vide, l'utilisateur ne sera pas en mesure de changer son mot" +" de passe." + +#: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts +#: src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts +#: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts +msgid "" +"Flow used by an authenticated user to configure this Stage. If empty, user " +"will not be able to configure this stage." +msgstr "" +"Flux utilisé par un utilisateur authentifié pour configurer cette étape. " +"S'il est vide, l'utilisateur ne sera pas en mesure de le configurer." + +#: src/pages/providers/ldap/LDAPProviderForm.ts +msgid "" +"Flow used for users to authenticate. Currently only identification and " +"password stages are supported." +msgstr "" +"Flux utilisé pour l'authentification des utilisateurs. Actuellement, seules " +"les étapes d'identification et de mot de passe sont prises en charge." + +#: src/pages/tenants/TenantForm.ts +msgid "" +"Flow used to authenticate users. If left empty, the first applicable flow " +"sorted by the slug is used." +msgstr "" +"Flux utilisé pour authentifier les utilisateurs. S'il est laissé vide, le " +"premier flux applicable trié par le slug est utilisé." + +#: src/pages/tenants/TenantForm.ts +msgid "" +"Flow used to logout. If left empty, the first applicable flow sorted by the " +"slug is used." +msgstr "" +"Flux utilisé pour la déconnexion. S'il est laissé vide, le premier flux " +"applicable trié par le slug est utilisé." + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/providers/saml/SAMLProviderImportForm.ts +msgid "Flow used when authorizing this provider." +msgstr "Flux utilisé lors de l'autorisation de ce fournisseur." + +#: src/pages/flows/FlowListPage.ts +msgid "Flow(s)" +msgstr "Flux" + +#: src/interfaces/AdminInterface.ts src/interfaces/AdminInterface.ts +#: src/pages/admin-overview/AdminOverviewPage.ts +#: src/pages/flows/FlowListPage.ts src/pages/stages/StageListPage.ts +msgid "Flows" +msgstr "Flux" + +#: src/pages/flows/FlowListPage.ts +msgid "" +"Flows describe a chain of Stages to authenticate, enroll or recover a user. " +"Stages are chosen based on policies applied to them." +msgstr "" +"Les flux décrivent une succession d'étapes pour authentifier, inscrire ou " +"récupérer un utilisateur. Les étapes sont choisies en fonction des " +"politiques qui leur sont appliquées." + +#: src/flows/stages/RedirectStage.ts +msgid "Follow redirect" +msgstr "Suivre la redirection" + +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "Force the user to configure an authenticator" +msgstr "Obliger l'utilisateur à configurer un authentificateur" + +#: src/flows/stages/password/PasswordStage.ts +msgid "Forgot password?" +msgstr "Mot de passe oublié ?" + +#: src/flows/stages/identification/IdentificationStage.ts +msgid "Forgot username or password?" +msgstr "Mot de passe ou nom d'utilisateur oublié ?" + +#: src/elements/forms/ModalForm.ts +msgid "Form didn't return a promise for submitting" +msgstr "Le formulaire n'a pas retourné de promesse de soumission" + +#: src/pages/tenants/TenantForm.ts +msgid "Format: \"weeks=3;days=2;hours=3,seconds=2\"." +msgstr "Format : \"weeks=3;days=2;hours=3,seconds=2\"." + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Forward auth (domain level)" +msgstr "Transférer l'authentification (niveau domaine)" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Forward auth (single application)" +msgstr "Transférer l'authentification (application unique)" + +#: src/pages/property-mappings/PropertyMappingSAMLForm.ts +msgid "Friendly Name" +msgstr "Nom amical" + +#: src/pages/events/EventInfo.ts +msgid "From" +msgstr "De" + +#: src/pages/stages/email/EmailStageForm.ts +msgid "From address" +msgstr "Adresse d'origine" + +#: src/pages/providers/ldap/LDAPProviderForm.ts +msgid "GID start number" +msgstr "Numéro de départ du GID" + +#: src/pages/events/utils.ts +msgid "General system exception" +msgstr "Exception générale du systèm" + +#: src/pages/admin-overview/AdminOverviewPage.ts +msgid "General system status" +msgstr "État général du système" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "Generate" +msgstr "Générer" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "Generate Certificate-Key Pair" +msgstr "Générer une paire clé/certificat" + +#~ msgid "Go to admin interface" +#~ msgstr "Aller à l'interface d'administration" + +#: src/elements/table/TablePagination.ts +msgid "Go to next page" +msgstr "Aller à la page suivante" + +#: src/elements/table/TablePagination.ts +msgid "Go to previous page" +msgstr "Aller à la page précédente" + +#~ msgid "Go to user interface" +#~ msgstr "Aller à l'interface utilisateu" + +#: src/pages/events/RuleForm.ts src/pages/policies/PolicyBindingForm.ts +#: src/pages/policies/PolicyBindingForm.ts +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/stages/user_write/UserWriteStageForm.ts +msgid "Group" +msgstr "Group" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Group Property Mappings" +msgstr "Mapping des propriétés de groupes" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Group membership field" +msgstr "Champ d'appartenance au groupe" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Group object filter" +msgstr "Filtre d'objets de groupe" + +#: src/pages/groups/GroupListPage.ts +msgid "" +"Group users together and give them permissions based on the membership." +msgstr "" +"Regroupez les utilisateurs et donnez-leur des autorisations en fonction de " +"leur appartenance." + +#: src/pages/policies/BoundPoliciesList.ts +msgid "Group {0}" +msgstr "Groupe {0}" + +#: src/pages/groups/GroupListPage.ts +msgid "Group(s)" +msgstr "Groupe(s)" + +#: src/interfaces/AdminInterface.ts +#: src/pages/admin-overview/AdminOverviewPage.ts +#: src/pages/groups/GroupListPage.ts src/pages/users/UserForm.ts +msgid "Groups" +msgstr "Groupes" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "HS256 (Symmetric Encryption)" +msgstr "HS256 (chiffrement symétrique)" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "HTTP-Basic Password Key" +msgstr "Clé du mot de passe HTTP-Basic" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "HTTP-Basic Username Key" +msgstr "Clé de l'utilisateur HTTP-Basic" + +#: src/pages/admin-overview/cards/SystemStatusCard.ts +msgid "HTTPS is not detected correctly" +msgstr "HTTP n'est pas détecté correctement" + +#: src/pages/outposts/OutpostListPage.ts +msgid "Health and Version" +msgstr "État et version" + +#: src/pages/admin-overview/charts/OutpostStatusChart.ts +msgid "Healthy outposts" +msgstr "Avant-postes sains" + +#: src/pages/admin-overview/charts/LDAPSyncStatusChart.ts +msgid "Healthy sources" +msgstr "Sources saines" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Hidden: Hidden field, can be used to insert data into form." +msgstr "" +"Caché : champ caché, peut être utilisé pour insérer des données dans le " +"formulaire." + +#: src/pages/property-mappings/PropertyMappingListPage.ts +msgid "Hide managed mappings" +msgstr "Cacher les mapping gérés" + +#: src/pages/users/UserListPage.ts +msgid "Hide service-accounts" +msgstr "Cacher les comptes de service" + +#: src/pages/events/RuleForm.ts src/pages/outposts/OutpostForm.ts +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/stages/password/PasswordStageForm.ts +#: src/pages/stages/prompt/PromptStageForm.ts +#: src/pages/stages/prompt/PromptStageForm.ts +msgid "Hold control/command to select multiple items." +msgstr "Garder ctrl/command enfoncé pour sélectionner de multiples éléments" + +#: src/pages/stages/password/PasswordStageForm.ts +msgid "" +"How many attempts a user has before the flow is canceled. To lock the user " +"out, use a reputation policy and a user_write stage." +msgstr "" +"Nombre de tentatives dont dispose un utilisateur avant que le flux ne soit " +"annulé. Pour verrouiller l'utilisateur, utilisez une politique de réputation" +" et une étape user_write." + +#: src/elements/forms/DeleteBulkForm.ts +#: src/pages/stages/invitation/InvitationListPage.ts +#: src/pages/users/UserListPage.ts +msgid "ID" +msgstr "ID" + +#: src/elements/oauth/UserRefreshList.ts +msgid "ID Token" +msgstr "ID du jeton" + +#: src/pages/policies/reputation/IPReputationListPage.ts +msgid "IP" +msgstr "IP" + +#: src/pages/policies/reputation/IPReputationListPage.ts +#: src/pages/policies/reputation/IPReputationListPage.ts +msgid "IP Reputation" +msgstr "Réputation IP" + +#: src/pages/applications/ApplicationForm.ts +#: src/pages/applications/ApplicationForm.ts +msgid "Icon" +msgstr "Icône" + +#: src/pages/tenants/TenantForm.ts +msgid "Icon shown in sidebar/header and flow executor." +msgstr "" +"Icône affichée dans la barre latérale, l'en-tête et dans l'exécuteur de " +"flux." + +#: src/pages/tenants/TenantForm.ts +msgid "Icon shown in the browser tab." +msgstr "Icône affichée dans l'onglet du navigateur." + +#: src/pages/flows/FlowListPage.ts +#: src/pages/system-tasks/SystemTaskListPage.ts src/pages/tokens/TokenForm.ts +#: src/pages/tokens/TokenListPage.ts +#: src/user/user-settings/tokens/UserTokenForm.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "Identifier" +msgstr "Identifiant" + +#: src/interfaces/AdminInterface.ts +msgid "Identity & Cryptography" +msgstr "Identité et chiffrement" + +#: src/pages/outposts/ServiceConnectionDockerForm.ts +#: src/pages/outposts/ServiceConnectionKubernetesForm.ts +msgid "" +"If enabled, use the local connection. Required Docker socket/Kubernetes " +"Integration." +msgstr "" +"Si activé, utiliser la connexion locale. Intégration Docker " +"socket/Kubernetes requise." + +#: src/pages/applications/ApplicationForm.ts +msgid "" +"If left empty, authentik will try to extract the launch URL based on the " +"selected provider." +msgstr "" +"Si laissé vide, authentik essaiera d'extraire l'URL de lancement en se " +"basant sur le fournisseur sélectionné." + +#: src/pages/providers/ldap/LDAPProviderForm.ts +msgid "" +"If multiple providers share an outpost, a self-signed certificate is used." +msgstr "" +"Si plusieurs fournisseurs partagent un avant-poste, un certificat auto-signé" +" est utilisé." + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "" +"If no explicit redirect URIs are specified, any redirect URI is allowed." +msgstr "" +"Si aucune URL de redirection explicite n'est spécifié, toute URL de " +"redirection est autorisé." + +#: src/pages/tenants/TenantForm.ts +msgid "" +"If set, users are able to unenroll themselves using this flow. If no flow is" +" set, option is not shown." +msgstr "" +"Si défini, les utilisateurs peuvent se désinscrire à l'aide de ce flux. Si " +"aucun flux n'est défini, l'option n'est pas affichée." + +#: src/pages/stages/invitation/InvitationStageForm.ts +msgid "" +"If this flag is set, this Stage will jump to the next Stage when no " +"Invitation is given. By default this Stage will cancel the Flow when no " +"invitation is given." +msgstr "" +"Si activé, cette étape passera à l'étape suivante si aucune invitation n'est" +" donnée. Par défaut, cette étape annule le flux en l'absence d'invitation." + +#: src/pages/tokens/TokenForm.ts +msgid "" +"If this is selected, the token will expire. Upon expiration, the token will " +"be rotated." +msgstr "" +"Si cette option est sélectionnée, le jeton expirera. À son expiration, le " +"jeton fera l'objet d'une rotation." + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "" +"If you are using an Implicit, client-side flow (where the token-endpoint " +"isn't used), you probably want to increase this time." +msgstr "" +"Si vous utilisez un flux implicite, côté client (où le point de terminaison " +"du jeton n'est pas utilisé), vous voudrez probablement augmenter ce temps." + +#: src/pages/outposts/OutpostDeploymentModal.ts +msgid "" +"If your authentik Instance is using a self-signed certificate, set this " +"value." +msgstr "" +"Activer cette option si votre instance authentik utilise un certificat auto-" +"signé." + +#: src/pages/outposts/OutpostDeploymentModal.ts +msgid "" +"If your authentik_host setting does not match the URL you want to login " +"with, add this setting." +msgstr "" +"Ajouter cette option si le paramètre authentik_host ne correspond pas à " +"l'URL sur laquelle vous voulez ouvrir une session." + +#: src/pages/users/UserListPage.ts +msgid "Impersonate" +msgstr "Se faire passer pour" + +#: src/pages/events/utils.ts +msgid "Impersonation ended" +msgstr "Fin de l'appropriation utilisateur" + +#: src/pages/events/utils.ts +msgid "Impersonation started" +msgstr "Début de l'appropriation utilisateur" + +#: src/pages/flows/FlowListPage.ts src/pages/flows/FlowListPage.ts +msgid "Import" +msgstr "Importer" + +#: src/pages/flows/FlowListPage.ts +msgid "Import Flow" +msgstr "Importer un flux" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "" +"Import certificates of external providers or create certificates to sign " +"requests with." +msgstr "" +"Importer les certificats des fournisseurs externes ou créer des certificats " +"pour signer les demandes." + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts +msgid "In case you can't access any other method." +msgstr "Au cas où aucune autre méthode ne soit disponible." + +#: src/pages/users/UserListPage.ts +msgid "Inactive" +msgstr "Inactif" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "" +"Include User claims from scopes in the id_token, for applications that don't" +" access the userinfo endpoint." +msgstr "" +"Inclure depuis la portée les demandes utilisateurs dans id_token, pour les " +"applications qui n'accèdent pas au point de terminaison userinfo." + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Include claims in id_token" +msgstr "Include les demandes utilisateurs dans id_token" + +#: src/pages/outposts/OutpostForm.ts src/pages/outposts/OutpostListPage.ts +msgid "Integration" +msgstr "Intégration" + +#: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts +msgid "Integration key" +msgstr "Clé d'intégration" + +#: src/interfaces/AdminInterface.ts +msgid "Integrations" +msgstr "Intégrations" + +#: src/pages/tokens/TokenForm.ts src/pages/tokens/TokenListPage.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "Intent" +msgstr "Intention" + +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +msgid "Internal Host" +msgstr "Hôte interne" + +#: src/pages/applications/ApplicationForm.ts +msgid "Internal application name, used in URLs." +msgstr "Nom de l'application interne, utilisé dans les URLs." + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Internal host" +msgstr "Hôte interne" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Internal host SSL Validation" +msgstr "Validation SSL de l'hôte interne" + +#: src/pages/flows/StageBindingForm.ts +msgid "Invalid response action" +msgstr "Action de réponse invalide" + +#: src/pages/flows/FlowForm.ts +msgid "Invalidation" +msgstr "Invalidation" + +#: src/pages/tenants/TenantForm.ts +msgid "Invalidation flow" +msgstr "Flux d'invalidation" + +#~ msgid "Invitation" +#~ msgstr "Invitation" + +#: src/pages/events/utils.ts +msgid "Invitation used" +msgstr "Invitation utilisée" + +#: src/pages/stages/invitation/InvitationListPage.ts +msgid "Invitation(s)" +msgstr "Invitation(s)" + +#: src/interfaces/AdminInterface.ts +#: src/pages/stages/invitation/InvitationListPage.ts +msgid "Invitations" +msgstr "Invitations" + +#: src/pages/users/UserForm.ts +msgid "Is active" +msgstr "Est actif" + +#: src/pages/groups/GroupForm.ts +msgid "Is superuser" +msgstr "Est superutilisateur" + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/providers/saml/SAMLProviderViewPage.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +#: src/pages/sources/saml/SAMLSourceViewPage.ts +msgid "Issuer" +msgstr "Émetteur" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Issuer mode" +msgstr "Mode de l'émetteur" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "JWT Algorithm" +msgstr "Algorithme JWT" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "" +"Key used to sign the tokens. Only required when JWT Algorithm is set to " +"RS256." +msgstr "" +"Clé utilisée pour signer les jetons. Nécessaire uniquement lorsque " +"l'algorithme JWT est réglé sur RS256." + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "" +"Keypair which is used to sign outgoing requests. Leave empty to disable " +"signing." +msgstr "" +"Paire de clés utilisée pour signer le requêtes sortantes. Laisser vide pour " +"désactiver la signature." + +#: src/pages/outposts/ServiceConnectionKubernetesForm.ts +msgid "Kubeconfig" +msgstr "Kubeconfig" + +#: src/pages/outposts/OutpostForm.ts +msgid "LDAP (Technical preview)" +msgstr "LDAP (aperçu technique)" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "LDAP Attribute mapping" +msgstr "Mappage des attributs LDAP" + +#: src/pages/providers/ldap/LDAPProviderForm.ts +msgid "LDAP DN under which bind requests and search requests can be made." +msgstr "DN LDAP avec lequel les connexions et recherches sont effectuées." + +#: src/pages/admin-overview/AdminOverviewPage.ts +msgid "LDAP Sync status" +msgstr "Statut de synchro LDAP" + +#: src/pages/stages/prompt/PromptForm.ts +#: src/pages/stages/prompt/PromptListPage.ts +msgid "Label" +msgstr "Libellé" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Label shown next to/above the prompt." +msgstr "Libellé affiché à côté/au-dessus du champ." + +#: src/elements/user/SessionList.ts src/elements/user/SessionList.ts +msgid "Last IP" +msgstr "Dernière IP" + +#: src/pages/groups/MemberSelectModal.ts src/pages/users/UserListPage.ts +#: src/pages/users/UserViewPage.ts +msgid "Last login" +msgstr "Dernière connexion" + +#: src/pages/system-tasks/SystemTaskListPage.ts +msgid "Last run" +msgstr "Dernière exécution" + +#: src/pages/outposts/OutpostHealth.ts +#: src/pages/outposts/OutpostHealthSimple.ts +msgid "Last seen: {0}" +msgstr "Vu le : {0}" + +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +msgid "Last sync: {0}" +msgstr "Dernière synchro : {0}" + +#: src/pages/applications/ApplicationViewPage.ts +#: src/pages/applications/ApplicationViewPage.ts +msgid "Launch" +msgstr "Lancer" + +#: src/pages/applications/ApplicationForm.ts +msgid "Launch URL" +msgstr "URL de lancement" + +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "Let the user identify themselves with their username or Email address." +msgstr "" +"Laisser l'utilisateur s'identifier lui-même avec son nom d'utilisateur ou " +"son adresse e-mail." + +#~ msgid "Library" +#~ msgstr "Bibliothèque" + +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +msgid "" +"Link to a user with identical email address. Can have security implications " +"when a source doesn't validate email addresses" +msgstr "" +"Lier à un utilisateur avec la même adresse e-mail. Peut avoir des " +"implications de sécurité lorsqu'une source ne valide pas les adresses " +"e-mail." + +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +msgid "" +"Link to a user with identical username. Can have security implications when " +"a username is used with another source." +msgstr "" +"Lien vers un usager ayant un nom d'utilisateur identique. Peut poser des " +"problèmes de sécurité si ce nom d'utilisateur est partagé avec une autre " +"source." + +#: src/pages/stages/invitation/InvitationListLink.ts +msgid "Link to use the invitation." +msgstr "Lien pour utiliser l'invitation." + +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +msgid "Link users on unique identifier" +msgstr "Lier les utilisateurs sur base d'un identifiant unique" + +#: src/pages/sources/plex/PlexSourceForm.ts +msgid "Load servers" +msgstr "Charger les serveurs" + +#: src/elements/table/Table.ts src/flows/FlowExecutor.ts +#: src/flows/FlowExecutor.ts src/flows/FlowInspector.ts +#: src/flows/access_denied/FlowAccessDenied.ts +#: src/flows/stages/authenticator_duo/AuthenticatorDuoStage.ts +#: src/flows/stages/authenticator_static/AuthenticatorStaticStage.ts +#: src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageDuo.ts +#: src/flows/stages/autosubmit/AutosubmitStage.ts +#: src/flows/stages/captcha/CaptchaStage.ts +#: src/flows/stages/consent/ConsentStage.ts +#: src/flows/stages/dummy/DummyStage.ts src/flows/stages/email/EmailStage.ts +#: src/flows/stages/identification/IdentificationStage.ts +#: src/flows/stages/password/PasswordStage.ts +#: src/flows/stages/prompt/PromptStage.ts +#: src/pages/applications/ApplicationViewPage.ts +#: src/pages/applications/ApplicationViewPage.ts +#: src/user/user-settings/UserSelfForm.ts +#: src/user/user-settings/sources/SourceSettings.ts +#: src/user/user-settings/stages/StageSettings.ts src/utils.ts +msgid "Loading" +msgstr "Chargement en cours" + +#: src/elements/Spinner.ts +#: src/pages/applications/ApplicationCheckAccessForm.ts +#: src/pages/applications/ApplicationForm.ts src/pages/events/RuleForm.ts +#: src/pages/events/RuleForm.ts src/pages/events/TransportForm.ts +#: src/pages/flows/StageBindingForm.ts src/pages/flows/StageBindingForm.ts +#: src/pages/groups/GroupForm.ts src/pages/groups/GroupForm.ts +#: src/pages/outposts/OutpostForm.ts src/pages/outposts/OutpostForm.ts +#: src/pages/outposts/ServiceConnectionDockerForm.ts +#: src/pages/outposts/ServiceConnectionDockerForm.ts +#: src/pages/policies/PolicyBindingForm.ts +#: src/pages/policies/PolicyBindingForm.ts +#: src/pages/policies/PolicyBindingForm.ts +#: src/pages/policies/PolicyTestForm.ts +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +#: src/pages/property-mappings/PropertyMappingTestForm.ts +#: src/pages/providers/ldap/LDAPProviderForm.ts +#: src/pages/providers/ldap/LDAPProviderForm.ts +#: src/pages/providers/ldap/LDAPProviderForm.ts +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/providers/saml/SAMLProviderImportForm.ts +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +#: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts +#: src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts +#: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +#: src/pages/stages/email/EmailStageForm.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/stages/invitation/InvitationListLink.ts +#: src/pages/stages/password/PasswordStageForm.ts +#: src/pages/stages/prompt/PromptStageForm.ts +#: src/pages/stages/prompt/PromptStageForm.ts +#: src/pages/stages/user_write/UserWriteStageForm.ts +#: src/pages/tenants/TenantForm.ts src/pages/tenants/TenantForm.ts +#: src/pages/tenants/TenantForm.ts src/pages/tenants/TenantForm.ts +#: src/pages/tokens/TokenForm.ts src/pages/users/UserForm.ts +#: src/pages/users/UserResetEmailForm.ts +msgid "Loading..." +msgstr "Chargement en cours..." + +#: src/pages/outposts/ServiceConnectionDockerForm.ts +#: src/pages/outposts/ServiceConnectionKubernetesForm.ts +#: src/pages/outposts/ServiceConnectionListPage.ts +msgid "Local" +msgstr "Local" + +#: src/pages/stages/user_login/UserLoginStageForm.ts +msgid "Log the currently pending user in." +msgstr "Ouvre la session de l'utilisateur courant." + +#: src/pages/outposts/OutpostListPage.ts +msgid "Logging in via {0}." +msgstr "Connexion via {0}." + +#: src/pages/events/utils.ts +msgid "Login" +msgstr "Connexion" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "" +"Login password is synced from LDAP into authentik automatically. Enable this" +" option only to write password changes in authentik back to LDAP." +msgstr "" +"Le mot de passe de connexion est synchronisé depuis LDAP vers Authentik " +"automatiquement. Activez cette option seulement pour enregistrer les " +"changements de mots de passe dans Authentik jusqu'au LDAP." + +#: src/flows/stages/identification/IdentificationStage.ts +msgid "Login to continue to {0}." +msgstr "Connectez-vous pour continuer vers {0}." + +#: src/pages/admin-overview/TopApplicationsTable.ts +msgid "Logins" +msgstr "Connexions" + +#: src/pages/admin-overview/AdminOverviewPage.ts +#: src/pages/applications/ApplicationViewPage.ts +msgid "Logins over the last 24 hours" +msgstr "Connexions ces dernières 24 heures" + +#: src/pages/tenants/TenantForm.ts +msgid "Logo" +msgstr "Logo" + +#: src/pages/events/utils.ts +msgid "Logout" +msgstr "Déconnexion" + +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +msgid "Logout URL" +msgstr "URL de déconnexion" + +#: src/interfaces/AdminInterface.ts +msgid "Logs" +msgstr "Logs" + +#: src/pages/system-tasks/SystemTaskListPage.ts +msgid "Long-running operations which authentik executes in the background." +msgstr "Opérations de longue durée qu'Authentik exécute en arrière-plan." + +#: src/pages/stages/user_write/UserWriteStageForm.ts +msgid "Mark newly created users as inactive." +msgstr "Marquer les utilisateurs nouvellements créés comme inactifs." + +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +msgid "" +"Match created events with this action type. When left empty, all action " +"types will be matched." +msgstr "" +"Inclure les événements créés avec ce type d'action. S'il est laissé vide, " +"tous les types d'action seront inclus." + +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +msgid "" +"Match events created by selected application. When left empty, all " +"applications are matched." +msgstr "" +"Inclure les évènements créés par cette application. S'il est laissé vide, " +"toutes les applications seront incluses." + +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +msgid "" +"Matches Event's Client IP (strict matching, for network matching use an " +"Expression Policy." +msgstr "" +"Inclure l'adresse IP du client de l'évènement (correspondante stricte, pour " +"un correspondance sur le réseau utiliser une politique d'expression)" + +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +msgid "" +"Matches an event against a set of criteria. If any of the configured values " +"match, the policy passes." +msgstr "" +"Fait correspondre un évènement à un certain nombre de critères. Si une des " +"valeur configurée correspond, la politique réussit." + +#: src/pages/tenants/TenantForm.ts +msgid "" +"Matching is done based on domain suffix, so if you enter domain.tld, " +"foo.domain.tld will still match." +msgstr "" +"La correspondante est effectuée sur le suffixe du domaine ; si vous entrez " +"domain.tld, foo.domain.tld sera également inclus." + +#: src/pages/policies/expiry/ExpiryPolicyForm.ts +msgid "Maximum age (in days)" +msgstr "Âge maximum (en jours)" + +#: src/pages/groups/GroupForm.ts src/pages/groups/GroupListPage.ts +#: src/pages/users/GroupSelectModal.ts +msgid "Members" +msgstr "Membres" + +#: src/pages/events/EventInfo.ts +msgid "Message" +msgstr "Message" + +#: src/pages/applications/ApplicationCheckAccessForm.ts +#: src/pages/events/EventInfo.ts src/pages/policies/PolicyTestForm.ts +#: src/pages/system-tasks/SystemTaskListPage.ts +msgid "Messages" +msgstr "Messages" + +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/providers/saml/SAMLProviderImportForm.ts +#: src/pages/providers/saml/SAMLProviderViewPage.ts +#: src/pages/sources/saml/SAMLSourceViewPage.ts +msgid "Metadata" +msgstr "Métadonnées" + +#: src/pages/policies/password/PasswordPolicyForm.ts +msgid "Minimum amount of Lowercase Characters" +msgstr "Nombre minimum de caractères minuscules" + +#: src/pages/policies/password/PasswordPolicyForm.ts +msgid "Minimum amount of Symbols Characters" +msgstr "Nombre minimum de symboles" + +#: src/pages/policies/password/PasswordPolicyForm.ts +msgid "Minimum amount of Uppercase Characters" +msgstr "Nombre minimum de caractères majuscules" + +#: src/pages/policies/password/PasswordPolicyForm.ts +msgid "Minimum length" +msgstr "Longueur minimale" + +#: src/pages/events/TransportForm.ts src/pages/events/TransportListPage.ts +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +#: src/pages/stages/consent/ConsentStageForm.ts +msgid "Mode" +msgstr "Mode" + +#: src/pages/events/EventInfo.ts +msgid "Model Name" +msgstr "Nom du modèle" + +#: src/pages/events/utils.ts +msgid "Model created" +msgstr "Modèle créé" + +#: src/pages/events/utils.ts +msgid "Model deleted" +msgstr "Modèle supprimé" + +#: src/pages/events/utils.ts +msgid "Model updated" +msgstr "Modèle mis à jour" + +#~ msgid "Monitor" +#~ msgstr "Surveiller" + +#: src/user/LibraryPage.ts +msgid "My Applications" +msgstr "Mes Applications" + +#: src/user/LibraryPage.ts +msgid "My applications" +msgstr "Mes applications" + +#: src/elements/forms/DeleteBulkForm.ts +#: src/pages/applications/ApplicationForm.ts +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/crypto/CertificateKeyPairForm.ts +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/events/EventInfo.ts src/pages/events/RuleForm.ts +#: src/pages/events/RuleListPage.ts src/pages/events/TransportForm.ts +#: src/pages/events/TransportListPage.ts src/pages/flows/BoundStagesList.ts +#: src/pages/flows/FlowForm.ts src/pages/flows/FlowListPage.ts +#: src/pages/groups/GroupForm.ts src/pages/groups/GroupListPage.ts +#: src/pages/groups/MemberSelectModal.ts src/pages/outposts/OutpostForm.ts +#: src/pages/outposts/OutpostListPage.ts +#: src/pages/outposts/ServiceConnectionDockerForm.ts +#: src/pages/outposts/ServiceConnectionKubernetesForm.ts +#: src/pages/outposts/ServiceConnectionListPage.ts +#: src/pages/policies/PolicyListPage.ts +#: src/pages/policies/dummy/DummyPolicyForm.ts +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +#: src/pages/policies/expiry/ExpiryPolicyForm.ts +#: src/pages/policies/expression/ExpressionPolicyForm.ts +#: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts +#: src/pages/policies/password/PasswordPolicyForm.ts +#: src/pages/policies/reputation/ReputationPolicyForm.ts +#: src/pages/property-mappings/PropertyMappingLDAPForm.ts +#: src/pages/property-mappings/PropertyMappingListPage.ts +#: src/pages/property-mappings/PropertyMappingNotification.ts +#: src/pages/property-mappings/PropertyMappingSAMLForm.ts +#: src/pages/property-mappings/PropertyMappingScopeForm.ts +#: src/pages/providers/ProviderListPage.ts +#: src/pages/providers/ldap/LDAPProviderForm.ts +#: src/pages/providers/ldap/LDAPProviderViewPage.ts +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/providers/saml/SAMLProviderImportForm.ts +#: src/pages/providers/saml/SAMLProviderViewPage.ts +#: src/pages/sources/SourcesListPage.ts +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/plex/PlexSourceViewPage.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +#: src/pages/sources/saml/SAMLSourceViewPage.ts +#: src/pages/stages/StageListPage.ts +#: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts +#: src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts +#: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +#: src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts +#: src/pages/stages/captcha/CaptchaStageForm.ts +#: src/pages/stages/consent/ConsentStageForm.ts +#: src/pages/stages/deny/DenyStageForm.ts +#: src/pages/stages/dummy/DummyStageForm.ts +#: src/pages/stages/email/EmailStageForm.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/stages/invitation/InvitationStageForm.ts +#: src/pages/stages/password/PasswordStageForm.ts +#: src/pages/stages/prompt/PromptStageForm.ts +#: src/pages/stages/user_delete/UserDeleteStageForm.ts +#: src/pages/stages/user_login/UserLoginStageForm.ts +#: src/pages/stages/user_logout/UserLogoutStageForm.ts +#: src/pages/stages/user_write/UserWriteStageForm.ts +#: src/pages/users/GroupSelectModal.ts src/pages/users/UserForm.ts +#: src/pages/users/UserListPage.ts src/pages/users/UserViewPage.ts +#: src/user/user-settings/UserSelfForm.ts +msgid "Name" +msgstr "Nom" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Name of the form field, also used to store the value." +msgstr "Nom du champ de formulaire utilisé pour enregistrer la valeur" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "NameID Policy" +msgstr "Politique NameID" + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "NameID Property Mapping" +msgstr "Mappage de la propriété NameID" + +#: src/flows/stages/identification/IdentificationStage.ts +msgid "Need an account?" +msgstr "Besoin d'un compte ?" + +#: src/pages/policies/PolicyBindingForm.ts +msgid "Negate result" +msgstr "Inverser le résultat" + +#: src/pages/policies/PolicyBindingForm.ts +msgid "Negates the outcome of the binding. Messages are unaffected." +msgstr "Inverse le résultat de la liaison. Les messages ne sont pas affectés." + +#: src/pages/events/EventInfo.ts +msgid "New version available!" +msgstr "Une nouvelle version est disponible !" + +#: src/pages/stages/user_write/UserWriteStageForm.ts +msgid "Newly created users are added to this group, if a group is selected." +msgstr "" +"Les utilisateurs nouvellement créés sont ajoutés à ce groupe, si un groupe " +"est sélectionné." + +#: src/flows/FlowInspector.ts +msgid "Next stage" +msgstr "Étape suivante" + +#: src/elements/oauth/UserRefreshList.ts +#: src/pages/applications/ApplicationCheckAccessForm.ts +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/groups/GroupListPage.ts src/pages/groups/MemberSelectModal.ts +#: src/pages/outposts/ServiceConnectionListPage.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/PolicyTestForm.ts +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +#: src/pages/tenants/TenantListPage.ts src/pages/tokens/TokenListPage.ts +#: src/pages/users/GroupSelectModal.ts src/pages/users/UserListPage.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "No" +msgstr "Non" + +#: src/user/LibraryPage.ts +msgid "No Applications available." +msgstr "Aucune Application disponible." + +#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +msgid "No Events found." +msgstr "Aucun événement trouvé." + +#: src/pages/policies/BoundPoliciesList.ts +msgid "No Policies bound." +msgstr "Aucune politique liée." + +#: src/pages/flows/BoundStagesList.ts +msgid "No Stages bound" +msgstr "Aucune étape liée" + +#: src/pages/events/EventInfo.ts +msgid "No additional data available." +msgstr "Aucune donnée additionnelle disponible." + +#: src/elements/forms/ModalForm.ts +msgid "No form found" +msgstr "Aucun formulaire trouvé" + +#: src/pages/outposts/OutpostListPage.ts +msgid "No integration active" +msgstr "Aucune intégration active" + +#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +msgid "No matching events could be found." +msgstr "Aucun événement correspondant n'a été trouvé." + +#: src/elements/table/Table.ts +msgid "No objects found." +msgstr "Aucun objet trouvé." + +#: src/pages/policies/BoundPoliciesList.ts +msgid "No policies are currently bound to this object." +msgstr "Aucune politique n'est actuellement lié à cet objet." + +#: src/pages/users/UserListPage.ts +msgid "No recovery flow is configured." +msgstr "Aucun flux de récupération n'est configuré." + +#: src/pages/flows/BoundStagesList.ts +msgid "No stages are currently bound to this flow." +msgstr "Aucune étape n'est actuellement liée à ce flux." + +#: src/pages/admin-overview/cards/WorkerStatusCard.ts +msgid "No workers connected. Background tasks will not run." +msgstr "Aucun worker connecté. Les tâches de fond ne tourneront pas." + +#: src/pages/events/RuleListPage.ts +msgid "None (rule disabled)" +msgstr "Aucun (règle désactivée)" + +#: src/pages/outposts/OutpostHealthSimple.ts +msgid "Not available" +msgstr "Indisponible" + +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "Not configured action" +msgstr "Action non configurée" + +#: src/user/user-settings/sources/SourceSettingsOAuth.ts +#: src/user/user-settings/sources/SourceSettingsPlex.ts +msgid "Not connected." +msgstr "Déconnecté." + +#: src/elements/router/Router404.ts +msgid "Not found" +msgstr "Pas trouvé" + +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +msgid "Not synced yet." +msgstr "Pas encore synchronisé." + +#: src/elements/forms/DeleteBulkForm.ts +msgid "Not used by any other object." +msgstr "Pas utilisé par un autre objet." + +#: src/flows/stages/authenticator_duo/AuthenticatorDuoStage.ts +#: src/flows/stages/authenticator_static/AuthenticatorStaticStage.ts +#: src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageDuo.ts +#: src/flows/stages/captcha/CaptchaStage.ts +#: src/flows/stages/consent/ConsentStage.ts +#: src/flows/stages/password/PasswordStage.ts +msgid "Not you?" +msgstr "Pas vous ?" + +#: src/pages/events/RuleForm.ts +msgid "Notice" +msgstr "Note" + +#: src/interfaces/AdminInterface.ts src/pages/events/RuleListPage.ts +msgid "Notification Rules" +msgstr "Règles de notification" + +#: src/interfaces/AdminInterface.ts src/pages/events/TransportListPage.ts +msgid "Notification Transports" +msgstr "Transports de notification" + +#~ msgid "Notification rule" +#~ msgstr "Règle de notification" + +#: src/pages/events/RuleListPage.ts +msgid "Notification rule(s)" +msgstr "Règle(s) de notification" + +#: src/pages/events/TransportListPage.ts +msgid "Notification transports(s)" +msgstr "Transport(s) de notification" + +#: src/elements/notifications/NotificationDrawer.ts +msgid "Notifications" +msgstr "Notifications" + +#~ msgid "Notifications Transport" +#~ msgstr "Transports de notification" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Number" +msgstr "Nombre" + +#: src/pages/users/UserViewPage.ts +msgid "OAuth Authorization Codes" +msgstr "Code d'autorisation OAuth" + +#: src/pages/users/UserViewPage.ts +msgid "OAuth Refresh Codes" +msgstr "Code de rafraîchissement OAuth" + +#: src/pages/events/EventInfo.ts src/pages/events/EventInfo.ts +msgid "Object" +msgstr "Objet" + +#: src/pages/property-mappings/PropertyMappingLDAPForm.ts +msgid "Object field" +msgstr "Champ d'objet" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Object uniqueness field" +msgstr "Champ d'unicité de l'objet" + +#: src/pages/stages/consent/ConsentStageForm.ts +msgid "" +"Offset after which consent expires. (Format: hours=1;minutes=2;seconds=3)." +msgstr "" +"Durée d'expiration du consentement (Format : hours=1;minutes=2;seconds=3)." + +#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/pages/events/EventListPage.ts +msgid "On behalf of {0}" +msgstr "De la part de {0}" + +#: src/pages/policies/expiry/ExpiryPolicyForm.ts +msgid "Only fail the policy, don't invalidate user's password." +msgstr "" +"Faire simplement échouer la politique sans invalider le mot de passe " +"utilisateur." + +#: src/pages/events/TransportForm.ts +msgid "" +"Only send notification once, for example when sending a webhook into a chat " +"channel." +msgstr "" +"Envoyer une seule fois la notification, par exemple lors de l'envoi d'un " +"webhook dans un canal de discussion." + +#~ msgid "Open application" +#~ msgstr "Ouvrir l'appication" + +#: src/pages/events/EventInfo.ts +msgid "Open issue on GitHub..." +msgstr "Ouvrir un ticket sur GitHub..." + +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +msgid "OpenID Configuration Issuer" +msgstr "Émetteur de la configuration OpenID" + +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +msgid "OpenID Configuration URL" +msgstr "URL de configuration OpenID" + +#: src/pages/crypto/CertificateKeyPairForm.ts +msgid "" +"Optional Private Key. If this is set, you can use this keypair for " +"encryption." +msgstr "" +"Clé privée optionnelle. Si définie, vous pouvez utiliser pour le " +"chiffrement." + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Optional URL if the IDP supports Single-Logout." +msgstr "URL optionnelle si le fournisseur d'identité supporte Single-Logout." + +#: src/pages/stages/invitation/InvitationForm.ts +msgid "" +"Optional data which is loaded into the flow's 'prompt_data' context " +"variable. YAML or JSON." +msgstr "" +"Données optionnelles chargées dans la variable contextuelle 'prompt_data' du" +" flux. YAML ou JSON." + +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "Optional enrollment flow, which is linked at the bottom of the page." +msgstr "Flux d'inscription facultatif, qui sera accessible en bas de page." + +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "Optional recovery flow, which is linked at the bottom of the page." +msgstr "Flux de récupération facultatif, qui sera accessible en bas de page." + +#: src/pages/crypto/CertificateGenerateForm.ts +msgid "Optional, comma-separated SubjectAlt Names." +msgstr "" +"Liste optionnelle de noms alternatifs (SubjetAlt Names), séparés par des " +"virgules." + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Optionally pre-fill the input value" +msgstr "Pré-remplir la valeur du champ (optionnel)" + +#: src/pages/property-mappings/PropertyMappingSAMLForm.ts +msgid "Optionally set the 'FriendlyName' value of the Assertion attribute." +msgstr "Indiquer la valeur \"FriendlyName\" de l'attribut d'assertion (optionnel)" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "" +"Optionally set this to your parent domain, if you want authentication and " +"authorization to happen on a domain level. If you're running applications as" +" app1.domain.tld, app2.domain.tld, set this to 'domain.tld'." +msgstr "" +"Indiquer votre domaine parent (optionnel), si vous souhaitez que " +"l'authentification et l'autorisation soient réalisés au niveau du domaine. " +"Si vous exécutez des applications sur app1.domain.tld, app2.domain.tld, " +"indiquez ici \"domain.tld\"." + +#: src/pages/flows/BoundStagesList.ts src/pages/flows/StageBindingForm.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/PolicyBindingForm.ts +#: src/pages/stages/prompt/PromptForm.ts +#: src/pages/stages/prompt/PromptListPage.ts +msgid "Order" +msgstr "Tri" + +#: src/pages/tenants/TenantForm.ts +msgid "Other global settings" +msgstr "Autres paramètres globaux" + +#: src/pages/admin-overview/charts/OutpostStatusChart.ts +msgid "Outdated outposts" +msgstr "Avant-postes périmés" + +#~ msgid "Outpost" +#~ msgstr "Avant-poste" + +#: src/pages/outposts/OutpostDeploymentModal.ts +msgid "Outpost Deployment Info" +msgstr "Info de déploiement de l'avant-poste" + +#~ msgid "Outpost Service-connection" +#~ msgstr "Connexion de service de l'avant-poste" + +#~ msgid "Outpost integration" +#~ msgstr "Intégration d'avant-postes" + +#: src/pages/outposts/ServiceConnectionListPage.ts +msgid "Outpost integration(s)" +msgstr "Intégration(s) d'avant-postes" + +#: src/pages/admin-overview/AdminOverviewPage.ts +msgid "Outpost status" +msgstr "Statut de l'avant-poste" + +#: src/pages/outposts/OutpostListPage.ts +msgid "Outpost(s)" +msgstr "Avant-poste(s)" + +#: src/interfaces/AdminInterface.ts src/interfaces/AdminInterface.ts +#: src/pages/outposts/OutpostListPage.ts +msgid "Outposts" +msgstr "Avant-postes" + +#: src/pages/outposts/OutpostListPage.ts +msgid "" +"Outposts are deployments of authentik components to support different " +"environments and protocols, like reverse proxies." +msgstr "" +"Les avant-postes sont des déploiements de composants Authentik pour " +"supporter différents environnements et protocoles, comme des reverse " +"proxies." + +#: src/interfaces/AdminInterface.ts +#: src/pages/applications/ApplicationViewPage.ts +#: src/pages/providers/ldap/LDAPProviderViewPage.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +#: src/pages/providers/saml/SAMLProviderViewPage.ts +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +#: src/pages/sources/plex/PlexSourceViewPage.ts +#: src/pages/sources/saml/SAMLSourceViewPage.ts +#: src/pages/users/UserViewPage.ts +msgid "Overview" +msgstr "Vue d'ensemble" + +#: src/pages/crypto/CertificateKeyPairForm.ts +msgid "PEM-encoded Certificate data." +msgstr "Données du certificat au format PEM" + +#: src/pages/groups/GroupForm.ts src/pages/groups/GroupListPage.ts +msgid "Parent" +msgstr "Parent" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Parent group for all the groups imported from LDAP." +msgstr "Groupe parent pour tous les groupes LDAP" + +#: src/pages/policies/dummy/DummyPolicyForm.ts +msgid "Pass policy?" +msgstr "Réussir la politique ?" + +#: src/pages/applications/ApplicationCheckAccessForm.ts +#: src/pages/events/EventInfo.ts src/pages/policies/PolicyTestForm.ts +msgid "Passing" +msgstr "Réussite" + +#: src/flows/stages/identification/IdentificationStage.ts +#: src/flows/stages/identification/IdentificationStage.ts +#: src/flows/stages/password/PasswordStage.ts +#: src/pages/users/ServiceAccountForm.ts +msgid "Password" +msgstr "Mot de passe" + +#: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts +#: src/pages/policies/password/PasswordPolicyForm.ts +msgid "Password field" +msgstr "Champ mot de passe" + +#: src/pages/events/utils.ts +msgid "Password set" +msgstr "Mot de passe défini" + +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "Password stage" +msgstr "Étape de mot de passe" + +#: src/user/user-settings/UserSettingsPage.ts +msgid "Password, 2FA, etc" +msgstr "Mot de passe, 2FA, etc" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "" +"Password: Masked input, password is validated against sources. Policies " +"still have to be applied to this Stage. If two of these are used in the same" +" stage, they are ensured to be identical." +msgstr "" +"Mot de passe : Entrée masquée, le mot de passe est vérifié par les sources. " +"Les politiques doivent encore être appliquées à cette étape. Si deux d'entre" +" elles sont utilisées dans la même étape, on s'assure qu'elles sont " +"identiques." + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Persistent" +msgstr "Persistant" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Placeholder" +msgstr "Par défaut" + +#: src/flows/FlowInspector.ts +msgid "Plan history" +msgstr "Historique du plan" + +#: src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts +msgid "Please enter your TOTP Code" +msgstr "Veuillez saisirvotre code TOTP" + +#: src/flows/stages/password/PasswordStage.ts +msgid "Please enter your password" +msgstr "Veuillez saisir votre mot de passe" + +#: src/interfaces/AdminInterface.ts +#: src/pages/admin-overview/AdminOverviewPage.ts +#: src/pages/flows/FlowListPage.ts src/pages/policies/PolicyListPage.ts +msgid "Policies" +msgstr "Politiques" + +#: src/pages/policies/PolicyBindingForm.ts +#: src/pages/policies/PolicyBindingForm.ts +#: src/pages/policies/PolicyBindingForm.ts +msgid "Policy" +msgstr "Politique" + +#: src/pages/applications/ApplicationViewPage.ts +#: src/pages/flows/FlowViewPage.ts +msgid "Policy / Group / User Bindings" +msgstr "Politique / Groupe / Liaisons utilisateur" + +#: src/pages/policies/PolicyListPage.ts +msgid "Policy / Policies" +msgstr "Politique/s" + +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/BoundPoliciesList.ts +msgid "Policy / User / Group" +msgstr "Politique / Utilisateur / Groupe" + +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +#: src/pages/sources/plex/PlexSourceViewPage.ts +#: src/pages/sources/saml/SAMLSourceViewPage.ts +msgid "Policy Bindings" +msgstr "Liaisons des politiques" + +#~ msgid "Policy binding" +#~ msgstr "Liaison de politique" + +#: src/pages/policies/BoundPoliciesList.ts +msgid "Policy binding(s)" +msgstr "Liaison(s) de politique" + +#: src/pages/applications/ApplicationForm.ts +#: src/pages/applications/ApplicationViewPage.ts src/pages/flows/FlowForm.ts +#: src/pages/flows/StageBindingForm.ts +msgid "Policy engine mode" +msgstr "Mode d'application des politiques" + +#: src/pages/events/utils.ts +msgid "Policy exception" +msgstr "Exception de politique" + +#: src/pages/events/utils.ts +msgid "Policy execution" +msgstr "Exécution de politique" + +#: src/pages/policies/BoundPoliciesList.ts +msgid "Policy {0}" +msgstr "Poliitique {0}" + +#: src/pages/policies/dummy/DummyPolicyForm.ts +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +#: src/pages/policies/expiry/ExpiryPolicyForm.ts +#: src/pages/policies/expression/ExpressionPolicyForm.ts +#: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts +#: src/pages/policies/password/PasswordPolicyForm.ts +#: src/pages/policies/reputation/ReputationPolicyForm.ts +msgid "Policy-specific settings" +msgstr "Paramètres spécifiques à la politique" + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "Post" +msgstr "Appliquer" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Post binding" +msgstr "Post" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Post binding (auto-submit)" +msgstr "Post (automatique)" + +#: src/flows/FlowExecutor.ts +msgid "Powered by authentik" +msgstr "Propulsé par authentik" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Pre-authentication flow" +msgstr "Flux de pré-authentification" + +#: src/pages/crypto/CertificateKeyPairForm.ts +#: src/pages/stages/captcha/CaptchaStageForm.ts +msgid "Private Key" +msgstr "Clé privée" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "Private key available?" +msgstr "Clé privée disponible ?" + +#: src/pages/stages/captcha/CaptchaStageForm.ts +msgid "" +"Private key, acquired from https://www.google.com/recaptcha/intro/v3.html." +msgstr "" +"Clé privée, acquise auprès de " +"https://www.google.com/recaptcha/intro/v3.html." + +#: src/pages/sources/oauth/OAuthSourceForm.ts +msgid "Profile URL" +msgstr "URL de profil" + +#~ msgid "Prompt" +#~ msgstr "Invite" + +#: src/pages/stages/consent/ConsentStageForm.ts +msgid "" +"Prompt for the user's consent. The consent can either be permanent or expire" +" in a defined amount of time." +msgstr "" +"Demander le consentement de l'utilisateur. Celui-ci peut être permanent ou " +"expirer dans un délai défini." + +#: src/pages/stages/prompt/PromptListPage.ts +msgid "Prompt(s)" +msgstr "Invite(s)" + +#: src/interfaces/AdminInterface.ts src/pages/stages/prompt/PromptListPage.ts +msgid "Prompts" +msgstr "Invites" + +#~ msgid "Property Mapping" +#~ msgstr "Mapping de propriété" + +#: src/pages/events/utils.ts +msgid "Property Mapping exception" +msgstr "Erreur de mappage de propriété" + +#: src/pages/property-mappings/PropertyMappingListPage.ts +msgid "Property Mapping(s)" +msgstr "Mapping(s) de propriété" + +#: src/interfaces/AdminInterface.ts +#: src/pages/property-mappings/PropertyMappingListPage.ts +msgid "Property Mappings" +msgstr "Mappings de propriété" + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "Property mappings" +msgstr "Mappings de propriété" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Property mappings used to group creation." +msgstr "Mappages de propriétés utilisés lors de la création des groupe" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Property mappings used to user creation." +msgstr "Mappages de propriété utilisés lors de la création d'utilisateurs" + +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +msgid "Protocol Settings" +msgstr "Paramètres du protocole" + +#: src/pages/providers/ldap/LDAPProviderForm.ts +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Protocol settings" +msgstr "Paramètres du protocole" + +#: src/pages/providers/ProviderListPage.ts +msgid "" +"Provide support for protocols like SAML and OAuth to assigned applications." +msgstr "" +"Assure la prise en charge de protocoles tels que SAML et OAuth aux " +"applications attribuées." + +#: src/elements/oauth/UserCodeList.ts src/elements/oauth/UserRefreshList.ts +#: src/pages/applications/ApplicationForm.ts +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/applications/ApplicationViewPage.ts +msgid "Provider" +msgstr "Fournisseur" + +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +msgid "Provider Type" +msgstr "Type de fournisseur" + +#~ msgid "Provider type" +#~ msgstr "Type de fournisseur" + +#: src/pages/providers/ProviderListPage.ts +msgid "Provider(s)" +msgstr "Fournisseur(s)" + +#: src/interfaces/AdminInterface.ts src/pages/outposts/OutpostListPage.ts +#: src/pages/providers/ProviderListPage.ts +msgid "Providers" +msgstr "Fournisseurs" + +#: src/pages/outposts/OutpostForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Proxy" +msgstr "Proxy" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Public" +msgstr "Public" + +#: src/pages/stages/captcha/CaptchaStageForm.ts +msgid "Public Key" +msgstr "Clé publique" + +#: src/pages/stages/captcha/CaptchaStageForm.ts +msgid "" +"Public key, acquired from https://www.google.com/recaptcha/intro/v3.html." +msgstr "" +"Clé publique, obtenue depuis https://www.google.com/recaptcha/intro/v3.html." + +#: src/pages/applications/ApplicationForm.ts +msgid "Publisher" +msgstr "Éditeur" + +#: src/pages/flows/StageBindingForm.ts +msgid "" +"RESTART restarts the flow from the beginning, while keeping the flow " +"context." +msgstr "" +"REDÉMARRER redémarre le flux depuis le début, en gardant le contexte du " +"flux." + +#: src/pages/flows/StageBindingForm.ts +msgid "RESTART restarts the flow from the beginning." +msgstr "REDÉMARRER redémarre le flux depuis le début." + +#: src/pages/flows/StageBindingForm.ts +msgid "" +"RETRY returns the error message and a similar challenge to the executor." +msgstr "" +"RETRY indiquer le message d'erreur et présenter un challenge similaire à " +"l'utilisateur" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "RS256 (Asymmetric Encryption)" +msgstr "RS256 (chiffrement asymétrique)" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "RSA Key" +msgstr "Clé RSA" + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "RSA-SHA1" +msgstr "RSA-SHA1" + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "RSA-SHA256" +msgstr "RSA-SHA256" + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "RSA-SHA384" +msgstr "RSA-SHA384" + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "RSA-SHA512" +msgstr "RSA-SHA512" + +#: src/pages/sources/plex/PlexSourceForm.ts +msgid "Re-authenticate with plex" +msgstr "Se ré-authentifier avec Plex" + +#: src/pages/flows/StageBindingForm.ts +msgid "Re-evaluate policies" +msgstr "Ré-évaluer les politiques" + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts +msgid "Receive a push notification on your phone to prove your identity." +msgstr "" +"Recevez une notification push sur votre téléphone pour prouver votre " +"identité." + +#: src/pages/flows/FlowForm.ts src/pages/tokens/TokenListPage.ts +#: src/pages/users/UserListPage.ts +msgid "Recovery" +msgstr "Récupération" + +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/tenants/TenantForm.ts +msgid "Recovery flow" +msgstr "Flux de récupération" + +#: src/pages/tenants/TenantForm.ts +msgid "" +"Recovery flow. If left empty, the first applicable flow sorted by the slug " +"is used." +msgstr "" +"Flux de récupération. Si laissé vide, le premier flux applicable trié par " +"slug sera utilisé." + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts +msgid "Recovery keys" +msgstr "Clés de récupération" + +#: src/pages/users/UserListPage.ts +msgid "Recovery link cannot be emailed, user has no email address saved." +msgstr "" +"Le lien de récupération ne peut pas être envoyé par email, l'utilisateur n'a" +" aucune adresse email enregistrée." + +#: src/flows/stages/RedirectStage.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "Redirect" +msgstr "Redirection" + +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +msgid "Redirect URIs" +msgstr "URIs de redirection" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Redirect URIs/Origins" +msgstr "URLs de redirection/Origines" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Redirect binding" +msgstr "Redirection" + +#: src/elements/table/Table.ts +msgid "Refresh" +msgstr "Rafraîchir" + +#~ msgid "Refresh Code" +#~ msgstr "Rafraîchir le code" + +#: src/elements/oauth/UserRefreshList.ts +msgid "Refresh Code(s)" +msgstr "Rafraîchir le(s) code(s)" + +#: src/flows/stages/authenticator_webauthn/WebAuthnAuthenticatorRegisterStage.ts +msgid "Register device" +msgstr "Enregistrer un appareil" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "" +"Regular expressions for which authentication is not required. Each new line " +"is interpreted as a new Regular Expression." +msgstr "" +"Expression régulière pour laquelle l'authentification n'est pas nécessaire. " +"Chaque nouvelle ligne est interprétée comme une nouvelle expression " +"régulière." + +#: src/pages/users/UserListPage.ts +msgid "Regular user" +msgstr "Utilisateur normal" + +#: src/pages/applications/ApplicationViewPage.ts +#: src/pages/flows/FlowViewPage.ts +msgid "Related" +msgstr "Lié" + +#: src/pages/stages/user_logout/UserLogoutStageForm.ts +msgid "Remove the user from the current session." +msgstr "Supprimer l'utilisateur de la session actuelle." + +#: src/pages/policies/reputation/IPReputationListPage.ts +msgid "" +"Reputation for IPs. Scores are decreased for each failed login and increased" +" for each successful login." +msgstr "" +"Réputation pour les IPs. Les notes sont réduites à chaque échec de " +"connexion, et augmentées à chaque connexion réussie." + +#: src/pages/policies/reputation/UserReputationListPage.ts +msgid "" +"Reputation for usernames. Scores are decreased for each failed login and " +"increased for each successful login." +msgstr "" +"Réputation pour les noms d'utilisateur. Les notes sont réduites à chaque " +"échec de connexion, et augmentées à chaque connexion réussie." + +#: src/interfaces/AdminInterface.ts +msgid "Reputation policy - IPs" +msgstr "Politique de réputation - IPs" + +#: src/interfaces/AdminInterface.ts +msgid "Reputation policy - Users" +msgstr "Politique de réputation - Utilisateurs" + +#: src/pages/events/EventInfo.ts src/pages/events/EventInfo.ts +msgid "Request" +msgstr "Requête" + +#: src/flows/access_denied/FlowAccessDenied.ts +msgid "Request has been denied." +msgstr "La requête a été refusée." + +#: src/pages/sources/oauth/OAuthSourceForm.ts +msgid "Request token URL" +msgstr "URL du jeton de requête" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Required" +msgstr "Obligatoire" + +#: src/flows/stages/prompt/PromptStage.ts +msgid "Required." +msgstr "Obligatoire." + +#: src/pages/users/ServiceAccountForm.ts src/pages/users/UserForm.ts +#: src/user/user-settings/UserSelfForm.ts +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Obligatoire. 150 caractères ou moins. Lettres, chiffres et @/./+/-/_ " +"uniquement." + +#: src/pages/users/UserViewPage.ts +msgid "Reset Password" +msgstr "Réinitialiser le mot de passe" + +#: src/interfaces/AdminInterface.ts +msgid "Resources" +msgstr "Ressources" + +#: src/pages/events/EventInfo.ts +#: src/pages/property-mappings/PropertyMappingTestForm.ts +msgid "Result" +msgstr "Résultat" + +#~ msgid "Retry Task" +#~ msgstr "Réessayer la tâche" + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageWebAuthn.ts +msgid "Retry authentication" +msgstr "Réessayer l'authentification" + +#: src/flows/FlowExecutor.ts +msgid "Return" +msgstr "Retourner" + +#: src/elements/router/Router404.ts +msgid "Return home" +msgstr "Retourner à l’accueil" + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageDuo.ts +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStageWebAuthn.ts +msgid "Return to device picker" +msgstr "Retourner à la sélection d'appareil" + +#: src/elements/oauth/UserRefreshList.ts +msgid "Revoked?" +msgstr "Révoqué ?" + +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +msgid "Run sync again" +msgstr "Relancer la synchro" + +#: src/pages/property-mappings/PropertyMappingSAMLForm.ts +msgid "SAML Attribute Name" +msgstr "Nom d'attribut SAML" + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "SHA1" +msgstr "SHA1" + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "SHA256" +msgstr "SHA256" + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "SHA384" +msgstr "SHA384" + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "SHA512" +msgstr "SHA512" + +#: src/pages/sources/saml/SAMLSourceForm.ts +#: src/pages/sources/saml/SAMLSourceViewPage.ts +msgid "SLO URL" +msgstr "URL SLO" + +#: src/pages/stages/email/EmailStageForm.ts +msgid "SMTP Host" +msgstr "Hôte SMTP" + +#: src/pages/stages/email/EmailStageForm.ts +msgid "SMTP Password" +msgstr "Mot de passe SMTP" + +#: src/pages/stages/email/EmailStageForm.ts +msgid "SMTP Port" +msgstr "Port SMTP" + +#: src/pages/stages/email/EmailStageForm.ts +msgid "SMTP Username" +msgstr "Utilisateur SMTP" + +#: src/pages/sources/saml/SAMLSourceForm.ts +#: src/pages/sources/saml/SAMLSourceViewPage.ts +msgid "SSO URL" +msgstr "URL SSO" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Same identifier is used for all providers" +msgstr "Le même identifiant est utilisé pour tous les fournisseurs" + +#: src/user/user-settings/UserSelfForm.ts +msgid "Save" +msgstr "Enregistrer" + +#: src/pages/property-mappings/PropertyMappingScopeForm.ts +msgid "Scope name" +msgstr "Nom de la portée" + +#: src/pages/property-mappings/PropertyMappingScopeForm.ts +msgid "Scope which the client can specify to access these properties." +msgstr "Portée que le client peut spécifier pour accéder à ces propriétés." + +#: src/elements/oauth/UserCodeList.ts src/elements/oauth/UserRefreshList.ts +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Scopes" +msgstr "Portées" + +#: src/pages/policies/reputation/IPReputationListPage.ts +#: src/pages/policies/reputation/UserReputationListPage.ts +msgid "Score" +msgstr "Note" + +#: src/pages/providers/ldap/LDAPProviderForm.ts +msgid "Search group" +msgstr "Rechercher un groupe" + +#: src/elements/table/TableSearch.ts src/user/LibraryPage.ts +msgid "Search..." +msgstr "Rechercher..." + +#: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts +msgid "Secret key" +msgstr "Clé secrète" + +#: src/pages/events/utils.ts +msgid "Secret was rotation" +msgstr "Rotation du secret effectuée" + +#: src/pages/events/utils.ts +msgid "Secret was viewed" +msgstr "Le secret a été vu" + +#: src/pages/events/EventInfo.ts +msgid "Secret:" +msgstr "Secret :" + +#: src/pages/policies/expression/ExpressionPolicyForm.ts +#: src/pages/property-mappings/PropertyMappingLDAPForm.ts +#: src/pages/property-mappings/PropertyMappingNotification.ts +#: src/pages/property-mappings/PropertyMappingSAMLForm.ts +#: src/pages/property-mappings/PropertyMappingScopeForm.ts +msgid "See documentation for a list of all variables." +msgstr "Consultez la documentation pour la liste de toutes les variables." + +#: src/pages/applications/ApplicationForm.ts +msgid "" +"Select a provider that this application should use. Alternatively, create a " +"new provider." +msgstr "" +"Sélectionnez un fournisseur que cette application devra utiliser. Sinon, " +"créez un nouveau fournisseur." + +#: src/elements/table/Table.ts +msgid "Select all rows" +msgstr "Sélectionner toutes les lignes" + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts +msgid "Select an authentication method." +msgstr "Sélectionnez une méthode d'authentification" + +#: src/pages/stages/invitation/InvitationListLink.ts +msgid "Select an enrollment flow" +msgstr "Sélectionnez un flux d'inscription" + +#~ msgid "Select an identification method." +#~ msgstr "Sélectionnez une méthode d'identification" + +#: src/pages/users/GroupSelectModal.ts +msgid "Select groups to add user to" +msgstr "Sélectionnez les groupes à ajouter à l'utilisateur" + +#: src/flows/stages/identification/IdentificationStage.ts +msgid "Select one of the sources below to login." +msgstr "Sélectionnez l'une des sources ci-dessous pour se connecter." + +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "" +"Select sources should be shown for users to authenticate with. This only " +"affects web-based sources, not LDAP." +msgstr "" +"Sélectionnez les sources à afficher aux utilisateurs pour s'authentifier. " +"Cela affecte uniquement les sources web, pas LDAP." + +#: src/pages/groups/MemberSelectModal.ts +msgid "Select users to add" +msgstr "Sélectionnez les utilisateurs à ajouter" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "" +"Select which scopes can be used by the client. The client still has to " +"specify the scope to access the data." +msgstr "" +"Sélectionnez les portées utilisables par le client. Le client doit toujours " +"spécifier la portée pour accéder aux données." + +#: src/pages/sources/plex/PlexSourceForm.ts +msgid "" +"Select which server a user has to be a member of to be allowed to " +"authenticate." +msgstr "" +"Sélectionnez de quel serveur un utilisateur doit être un membre pour être " +"autorisé à s'authentifier." + +#: src/pages/events/RuleForm.ts +msgid "" +"Select which transports should be used to notify the user. If none are " +"selected, the notification will only be shown in the authentik UI." +msgstr "" +"Sélectionnez les transports à utiliser pour notifier l'utilisateur. À " +"défaut, la notification sera simplement affichée dans l'interface " +"utilisateur authentik." + +#: src/pages/stages/prompt/PromptStageForm.ts +msgid "" +"Selected policies are executed when the stage is submitted to validate the " +"data." +msgstr "" +"Les politiques sélectionnées sont exécutées lorsque l'étape est soumise pour" +" valider les données." + +#~ msgid "" +#~ "Selecting a service-connection enables the management of the outpost by " +#~ "authentik." +#~ msgstr "" +#~ "La sélection d'une connexion de service permet la gestion de l'avant-poste " +#~ "par authentik." + +#: src/pages/outposts/OutpostForm.ts +msgid "" +"Selecting an integration enables the management of the outpost by authentik." +msgstr "" +"La sélection d'une intégration permet la gestion de l'avant-poste par " +"authentik." + +#: src/pages/stages/password/PasswordStageForm.ts +msgid "Selection of backends to test the password against." +msgstr "Sélection de backends pour tester le mot de passe." + +#: src/flows/stages/email/EmailStage.ts +msgid "Send Email again." +msgstr "Renvoyer l'e-mail." + +#: src/pages/users/UserListPage.ts +msgid "Send link" +msgstr "Envoyer un lien" + +#: src/pages/events/RuleListPage.ts +msgid "" +"Send notifications whenever a specific Event is created and matched by " +"policies." +msgstr "" +"Envoyez des notifications chaque fois qu'un événement spécifique est créé et" +" correspond à des politiques." + +#: src/pages/events/TransportForm.ts +msgid "Send once" +msgstr "Envoyer une seule fois" + +#: src/pages/users/UserListPage.ts +msgid "Send recovery link to user" +msgstr "Envoyer le lien de récupération à l'utilisateur" + +#: src/pages/events/RuleListPage.ts +msgid "Sent to group" +msgstr "Envoyé au groupe" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Separator: Static Separator Line" +msgstr "Séparateur : Ligne de séparation statique" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +msgid "Server URI" +msgstr "URI du serveur" + +#: src/pages/admin-overview/cards/SystemStatusCard.ts +msgid "Server and client are further than 5 seconds apart." +msgstr "Le serveur et le client sont distants de plus de 5 secondes" + +#~ msgid "Server name for which this provider's certificate is valid for." +#~ msgstr "" +#~ "Nom du serveur pour lequel le certificat de ce fournisseur est valide." + +#: src/flows/stages/authenticator_webauthn/WebAuthnAuthenticatorRegisterStage.ts +msgid "Server validation of credential failed: {err}" +msgstr "La validation de l'identifiant par le serveur a échoué : {err}" + +#~ msgid "Service Connections" +#~ msgstr "Connexions de service" + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "Service Provider Binding" +msgstr "Liaison du fournisseur de services" + +#~ msgid "Service connection" +#~ msgstr "Connexion de service" + +#~ msgid "Session" +#~ msgstr "Session" + +#: src/flows/FlowInspector.ts +msgid "Session ID" +msgstr "ID de session" + +#: src/pages/stages/user_login/UserLoginStageForm.ts +msgid "Session duration" +msgstr "Durée de la session" + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "" +"Session not valid on or after current time + this value (Format: " +"hours=1;minutes=2;seconds=3)." +msgstr "" +"La session n'est plus valide à partir de l'heure actuelle + cette valeur " +"(Format: hours=1;minutes=2;seconds=3)." + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "Session valid not on or after" +msgstr "Session non valide à partir de" + +#: src/elements/user/SessionList.ts +msgid "Session(s)" +msgstr "Session(s)" + +#: src/pages/users/UserViewPage.ts src/user/user-settings/UserSettingsPage.ts +msgid "Sessions" +msgstr "Sessions" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Set HTTP-Basic Authentication" +msgstr "Définir l'authentification HTTP-Basic" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "" +"Set a custom HTTP-Basic Authentication header based on values from " +"authentik." +msgstr "" +"Définir un en-tête d'authentification HTTP-Basic personnalisé basé sur les " +"valeurs de authentik." + +#: src/pages/groups/GroupForm.ts src/pages/outposts/OutpostForm.ts +#: src/pages/outposts/ServiceConnectionKubernetesForm.ts +#: src/pages/policies/PolicyTestForm.ts src/pages/users/UserForm.ts +msgid "Set custom attributes using YAML or JSON." +msgstr "Définissez des attributs personnalisés via YAML ou JSON." + +#: src/pages/events/RuleForm.ts src/pages/events/RuleListPage.ts +msgid "Severity" +msgstr "Sévérité" + +#: src/pages/stages/prompt/PromptStageForm.ts +msgid "" +"Show arbitrary input fields to the user, for example during enrollment. Data" +" is saved in the flow context under the 'prompt_data' variable." +msgstr "" +"Afficher des champs de saisie arbitraires à l'utilisateur, par exemple " +"pendant l'inscription. Les données sont enregistrées dans le contexte du " +"flux sous la variable \"prompt_data\"." + +#: src/elements/Expand.ts +msgid "Show less" +msgstr "Montrer moins" + +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "Show matched user" +msgstr "Afficher l'utilisateur correspondant" + +#: src/elements/Expand.ts +msgid "Show more" +msgstr "Montrer plus" + +#: src/pages/flows/FlowForm.ts +msgid "Shown as the Title in Flow pages." +msgstr "Afficher comme Titre dans les pages de Flux." + +#: src/flows/stages/identification/IdentificationStage.ts +msgid "Sign up." +msgstr "S'enregistrer." + +#: src/pages/providers/saml/SAMLProviderForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Signature algorithm" +msgstr "Algorithme de signature" + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "Signing Certificate" +msgstr "Certificat de signature" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Signing keypair" +msgstr "Paire de clés de signature" + +#: src/pages/stages/prompt/PromptListPage.ts +msgid "Single Prompts that can be used for Prompt Stages." +msgstr "Invites simples qui peuvent être utilisés pour les étapes d'invite." + +#: src/pages/stages/invitation/InvitationForm.ts +msgid "Single use" +msgstr "Usage unique" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Skip path regex" +msgstr "Regex chemins exclus" + +#: src/pages/applications/ApplicationForm.ts +#: src/pages/applications/ApplicationListPage.ts src/pages/flows/FlowForm.ts +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Slug" +msgstr "Slug" + +#: src/flows/FlowExecutor.ts +msgid "Something went wrong! Please try again later." +msgstr "Une erreur s'est produite ! Veuillez réessayer plus tard." + +#~ msgid "Source" +#~ msgstr "Source" + +#: src/pages/events/utils.ts +msgid "Source linked" +msgstr "Source liée" + +#: src/user/user-settings/sources/SourceSettingsOAuth.ts +#: src/user/user-settings/sources/SourceSettingsPlex.ts +msgid "Source {0}" +msgstr "Source {0}" + +#: src/pages/sources/SourcesListPage.ts +msgid "Source(s)" +msgstr "Source(s)" + +#: src/interfaces/AdminInterface.ts src/pages/sources/SourcesListPage.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "Sources" +msgstr "Sources" + +#~ msgid "" +#~ "Sources of identities, which can either be synced into authentik's database," +#~ " like LDAP, or can be used by users to authenticate and enroll themselves, " +#~ "like OAuth and social logins" +#~ msgstr "" +#~ "Sources d'identités, qui peuvent soit être synchronisées dans la base de " +#~ "données d'Authentik, comme LDAP, soit être utilisées par les utilisateurs " +#~ "pour s'authentifier et s'inscrire, comme OAuth et les connexions sociales" + +#: src/pages/sources/SourcesListPage.ts +msgid "" +"Sources of identities, which can either be synced into authentik's database," +" or can be used by users to authenticate and enroll themselves." +msgstr "" +"Sources d'identités, qui peuvent soit être synchronisées dans la base de " +"données d'Authentik, soit être utilisées par les utilisateurs pour " +"s'authentifier et s'inscrire." + +#: src/pages/flows/BoundStagesList.ts src/pages/flows/StageBindingForm.ts +msgid "Stage" +msgstr "Étape" + +#: src/pages/flows/FlowViewPage.ts +msgid "Stage Bindings" +msgstr "Liaisons de l'étape" + +#: src/pages/flows/FlowForm.ts +msgid "Stage Configuration" +msgstr "Configuration de l'étape" + +#~ msgid "Stage binding" +#~ msgstr "Liaison de l'étape" + +#: src/pages/flows/BoundStagesList.ts +msgid "Stage binding(s)" +msgstr "Liaison(s) de l'étape" + +#: src/flows/FlowInspector.ts +msgid "Stage kind" +msgstr "Type d'étap" + +#: src/flows/FlowInspector.ts +msgid "Stage name" +msgstr "Nom de l'étape" + +#: src/flows/FlowInspector.ts +msgid "Stage object" +msgstr "Objet étap" + +#: src/pages/flows/BoundStagesList.ts +msgid "Stage type" +msgstr "Type d'étape" + +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "" +"Stage used to configure Authenticator when user doesn't have any compatible " +"devices. After this configuration Stage passes, the user is not prompted " +"again." +msgstr "" +"Étape utilisée pour configurer l'Authenticator lorsqu'un utilisateur n'a pas" +" d'appareil compatible. Une fois cette étape franchie, l'utilisateur ne sera" +" plus sollicité." + +#: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts +msgid "" +"Stage used to configure a TOTP authenticator (i.e. Authy/Google " +"Authenticator)." +msgstr "" +"Étape utilisée pour configurer un authentificateur TOTP (comme Authy ou " +"Google Authenticator).L" + +#: src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts +msgid "" +"Stage used to configure a WebAutnn authenticator (i.e. Yubikey, " +"FaceID/Windows Hello)." +msgstr "" +"Étape de configuration d'un authentificateur WebAuthn (Yubikey, " +"FaceID/Windows Hello)." + +#: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts +msgid "" +"Stage used to configure a duo-based authenticator. This stage should be used" +" for configuration flows." +msgstr "" +"Étape de configuration d'un authentificateur Duo. Cette étape devrait être " +"utilisée en flux de configuration." + +#: src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts +msgid "" +"Stage used to configure a static authenticator (i.e. static tokens). This " +"stage should be used for configuration flows." +msgstr "" +"Étape de configuration d'un authentificateur statique (jetons statiques). " +"Cette étape devrait être utilisée en flux de configuration." + +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "" +"Stage used to validate any authenticator. This stage should be used during " +"authentication or authorization flows." +msgstr "" +"Étape utilisée pour valider tout type d'authentificateur. Cette étape " +"devrait être utilisée en flux d'authentification ou d'autorisation." + +#: src/pages/stages/StageListPage.ts +msgid "Stage(s)" +msgstr "Étape(s)" + +#: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts +#: src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts +#: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +#: src/pages/stages/captcha/CaptchaStageForm.ts +#: src/pages/stages/consent/ConsentStageForm.ts +#: src/pages/stages/email/EmailStageForm.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/stages/invitation/InvitationStageForm.ts +#: src/pages/stages/password/PasswordStageForm.ts +#: src/pages/stages/prompt/PromptStageForm.ts +#: src/pages/stages/user_login/UserLoginStageForm.ts +#: src/pages/stages/user_write/UserWriteStageForm.ts +msgid "Stage-specific settings" +msgstr "Paramètres propres à l'étape" + +#: src/interfaces/AdminInterface.ts src/pages/flows/FlowListPage.ts +#: src/pages/stages/StageListPage.ts src/pages/stages/prompt/PromptListPage.ts +msgid "Stages" +msgstr "Étapes" + +#: src/pages/stages/StageListPage.ts +msgid "" +"Stages are single steps of a Flow that a user is guided through. A stage can" +" only be executed from within a flow." +msgstr "" +"Les étapes sont des étapes simples d'un flux au travers duquel un " +"utilisateur est guidé. Une étape peut être uniquement exécutée à l'intérieur" +" d'un flux." + +#: src/pages/outposts/ServiceConnectionListPage.ts +msgid "State" +msgstr "État" + +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "Static Tokens" +msgstr "Jetons statiques" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorStatic.ts +msgid "Static tokens" +msgstr "Jetons statiques" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Static: Static value, displayed as-is." +msgstr "Statique : valeur statique, affichée comme telle." + +#: src/pages/stages/deny/DenyStageForm.ts +msgid "" +"Statically deny the flow. To use this stage effectively, disable *Evaluate " +"on plan* on the respective binding." +msgstr "" +"Refuser statiquement le flux. Pour utiliser cette étape efficacement, " +"désactivez *Évaluer en planification* dans la liaison applicable." + +#: src/pages/system-tasks/SystemTaskListPage.ts +msgid "Status" +msgstr "Statut" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorDuo.ts +#: src/user/user-settings/stages/UserSettingsAuthenticatorStatic.ts +#: src/user/user-settings/stages/UserSettingsAuthenticatorTOTP.ts +msgid "Status: Disabled" +msgstr "Statut : Désactivé" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorDuo.ts +#: src/user/user-settings/stages/UserSettingsAuthenticatorStatic.ts +#: src/user/user-settings/stages/UserSettingsAuthenticatorTOTP.ts +msgid "Status: Enabled" +msgstr "Statut : Activé" + +#: src/interfaces/UserInterface.ts +msgid "Stop impersonation" +msgstr "Arrêter l'appropriation utilisateu" + +#: src/pages/events/EventInfo.ts src/pages/stages/email/EmailStageForm.ts +msgid "Subject" +msgstr "Sujet" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "Subject mode" +msgstr "Mode subject" + +#: src/pages/crypto/CertificateGenerateForm.ts +msgid "Subject-alt name" +msgstr "Nom alternatif subject" + +#: src/pages/system-tasks/SystemTaskListPage.ts +msgid "Successful" +msgstr "Réussite" + +#: src/elements/charts/AdminLoginsChart.ts src/elements/charts/UserChart.ts +msgid "Successful Logins" +msgstr "Connexions réussies" + +#: src/pages/flows/FlowListPage.ts +msgid "Successfully cleared flow cache" +msgstr "Cache du flux vidé avec succès" + +#: src/elements/notifications/NotificationDrawer.ts +msgid "Successfully cleared notifications" +msgstr "Notifications effacées avec succès" + +#: src/pages/policies/PolicyListPage.ts +msgid "Successfully cleared policy cache" +msgstr "Cache de politique vidé avec succès" + +#: src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts +msgid "Successfully copied TOTP Config." +msgstr "Configuration TOTP copiée avec succès" + +#: src/pages/applications/ApplicationForm.ts +msgid "Successfully created application." +msgstr "Application créée avec succès" + +#: src/pages/flows/StageBindingForm.ts src/pages/policies/PolicyBindingForm.ts +msgid "Successfully created binding." +msgstr "Liaison créée avec succès" + +#: src/pages/crypto/CertificateKeyPairForm.ts +msgid "Successfully created certificate-key pair." +msgstr "Paire clé/certificat créée avec succès." + +#: src/pages/flows/FlowForm.ts +msgid "Successfully created flow." +msgstr "Flux créé avec succès" + +#: src/pages/groups/GroupForm.ts +msgid "Successfully created group." +msgstr "Groupe créé avec succès" + +#: src/pages/outposts/ServiceConnectionDockerForm.ts +#: src/pages/outposts/ServiceConnectionKubernetesForm.ts +msgid "Successfully created integration." +msgstr "Intégration créé avec succès" + +#: src/pages/stages/invitation/InvitationForm.ts +msgid "Successfully created invitation." +msgstr "Invitation créée avec succès" + +#: src/pages/property-mappings/PropertyMappingLDAPForm.ts +#: src/pages/property-mappings/PropertyMappingNotification.ts +#: src/pages/property-mappings/PropertyMappingSAMLForm.ts +#: src/pages/property-mappings/PropertyMappingScopeForm.ts +msgid "Successfully created mapping." +msgstr "Mapping créé avec succès" + +#: src/pages/outposts/OutpostForm.ts +msgid "Successfully created outpost." +msgstr "Avant-poste créé avec succès" + +#: src/pages/policies/dummy/DummyPolicyForm.ts +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +#: src/pages/policies/expiry/ExpiryPolicyForm.ts +#: src/pages/policies/expression/ExpressionPolicyForm.ts +#: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts +#: src/pages/policies/password/PasswordPolicyForm.ts +#: src/pages/policies/reputation/ReputationPolicyForm.ts +msgid "Successfully created policy." +msgstr "Politique créée avec succès" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Successfully created prompt." +msgstr "Invite créée avec succès." + +#: src/pages/providers/ldap/LDAPProviderForm.ts +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "Successfully created provider." +msgstr "Fournisseur créé avec succès" + +#: src/pages/events/RuleForm.ts +msgid "Successfully created rule." +msgstr "Règle créée avec succès" + +#~ msgid "Successfully created service-connection." +#~ msgstr "Connexion de service créée avec succès." + +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Successfully created source." +msgstr "Source créée avec succès" + +#: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts +#: src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts +#: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +#: src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts +#: src/pages/stages/captcha/CaptchaStageForm.ts +#: src/pages/stages/consent/ConsentStageForm.ts +#: src/pages/stages/deny/DenyStageForm.ts +#: src/pages/stages/dummy/DummyStageForm.ts +#: src/pages/stages/email/EmailStageForm.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/stages/invitation/InvitationStageForm.ts +#: src/pages/stages/password/PasswordStageForm.ts +#: src/pages/stages/prompt/PromptStageForm.ts +#: src/pages/stages/user_delete/UserDeleteStageForm.ts +#: src/pages/stages/user_login/UserLoginStageForm.ts +#: src/pages/stages/user_logout/UserLogoutStageForm.ts +#: src/pages/stages/user_write/UserWriteStageForm.ts +msgid "Successfully created stage." +msgstr "Étape créée avec succès" + +#: src/pages/tenants/TenantForm.ts +msgid "Successfully created tenant." +msgstr "Tenant créé avec succès" + +#: src/pages/tokens/TokenForm.ts +#: src/user/user-settings/tokens/UserTokenForm.ts +msgid "Successfully created token." +msgstr "Jeton créé avec succès" + +#: src/pages/events/TransportForm.ts +msgid "Successfully created transport." +msgstr "Transport créé avec succès" + +#: src/pages/users/ServiceAccountForm.ts src/pages/users/UserForm.ts +msgid "Successfully created user." +msgstr "Utilisateur créé avec succès" + +#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +msgid "Successfully deleted {0} {1}" +msgstr "{0} {1} supprimé avec succès" + +#: src/pages/crypto/CertificateGenerateForm.ts +msgid "Successfully generated certificate-key pair." +msgstr "Paire clé/certificat générée avec succès." + +#: src/pages/users/UserListPage.ts src/pages/users/UserViewPage.ts +msgid "Successfully generated recovery link" +msgstr "Lien de récupération généré avec succès" + +#: src/pages/flows/FlowImportForm.ts +msgid "Successfully imported flow." +msgstr "Flux importé avec succès" + +#: src/pages/providers/saml/SAMLProviderImportForm.ts +msgid "Successfully imported provider." +msgstr "Fournisseur importé avec succès" + +#: src/pages/users/UserResetEmailForm.ts +msgid "Successfully sent email." +msgstr "Email envoyé avec succès" + +#: src/pages/applications/ApplicationCheckAccessForm.ts +#: src/pages/policies/PolicyTestForm.ts +#: src/pages/property-mappings/PropertyMappingTestForm.ts +msgid "Successfully sent test-request." +msgstr "Requête-test envoyée avec succès" + +#: src/pages/applications/ApplicationForm.ts +msgid "Successfully updated application." +msgstr "Application mise à jour avec succès" + +#: src/pages/flows/StageBindingForm.ts src/pages/policies/PolicyBindingForm.ts +msgid "Successfully updated binding." +msgstr "Liaison mise à jour avec succès" + +#: src/pages/crypto/CertificateKeyPairForm.ts +msgid "Successfully updated certificate-key pair." +msgstr "Paire clé/certificat mise à jour avec succès." + +#: src/user/user-settings/UserSelfForm.ts +msgid "Successfully updated details." +msgstr "Détails mis à jour avec succès" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts +msgid "Successfully updated device." +msgstr "Appareil mis à jour avec succès" + +#: src/pages/flows/FlowForm.ts +msgid "Successfully updated flow." +msgstr "Flux mis à jour avec succès" + +#: src/pages/groups/GroupForm.ts +msgid "Successfully updated group." +msgstr "Groupe mis à jour avec succès" + +#: src/pages/outposts/ServiceConnectionDockerForm.ts +#: src/pages/outposts/ServiceConnectionKubernetesForm.ts +msgid "Successfully updated integration." +msgstr "Intégration mise à jour avec succès" + +#: src/pages/stages/invitation/InvitationForm.ts +msgid "Successfully updated invitation." +msgstr "Invitation mise à jour avec succès" + +#: src/pages/property-mappings/PropertyMappingLDAPForm.ts +#: src/pages/property-mappings/PropertyMappingNotification.ts +#: src/pages/property-mappings/PropertyMappingSAMLForm.ts +#: src/pages/property-mappings/PropertyMappingScopeForm.ts +msgid "Successfully updated mapping." +msgstr "Mapping mis à jour avec succès" + +#: src/pages/outposts/OutpostForm.ts +msgid "Successfully updated outpost." +msgstr "Avant-poste mis à jour avec succès" + +#: src/pages/policies/dummy/DummyPolicyForm.ts +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +#: src/pages/policies/expiry/ExpiryPolicyForm.ts +#: src/pages/policies/expression/ExpressionPolicyForm.ts +#: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts +#: src/pages/policies/password/PasswordPolicyForm.ts +#: src/pages/policies/reputation/ReputationPolicyForm.ts +msgid "Successfully updated policy." +msgstr "Politique mise à jour avec succès" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Successfully updated prompt." +msgstr "Invite mise à jour avec succès." + +#: src/pages/providers/ldap/LDAPProviderForm.ts +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "Successfully updated provider." +msgstr "Fournisseur mis à jour avec succès" + +#: src/pages/events/RuleForm.ts +msgid "Successfully updated rule." +msgstr "Règle mise à jour avec succès" + +#~ msgid "Successfully updated service-connection." +#~ msgstr "Connexion de service mise à jour avec succès." + +#: src/pages/sources/ldap/LDAPSourceForm.ts +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Successfully updated source." +msgstr "Source mise à jour avec succès" + +#: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts +#: src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts +#: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +#: src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts +#: src/pages/stages/captcha/CaptchaStageForm.ts +#: src/pages/stages/consent/ConsentStageForm.ts +#: src/pages/stages/deny/DenyStageForm.ts +#: src/pages/stages/dummy/DummyStageForm.ts +#: src/pages/stages/email/EmailStageForm.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/stages/invitation/InvitationStageForm.ts +#: src/pages/stages/password/PasswordStageForm.ts +#: src/pages/stages/prompt/PromptStageForm.ts +#: src/pages/stages/user_delete/UserDeleteStageForm.ts +#: src/pages/stages/user_login/UserLoginStageForm.ts +#: src/pages/stages/user_logout/UserLogoutStageForm.ts +#: src/pages/stages/user_write/UserWriteStageForm.ts +msgid "Successfully updated stage." +msgstr "Étape mise à jour avec succès" + +#: src/pages/tenants/TenantForm.ts +msgid "Successfully updated tenant." +msgstr "Tenant mis à jour avec succès" + +#: src/pages/tokens/TokenForm.ts +#: src/user/user-settings/tokens/UserTokenForm.ts +msgid "Successfully updated token." +msgstr "Jeton mis à jour avec succès" + +#: src/pages/events/TransportForm.ts +msgid "Successfully updated transport." +msgstr "Transport mis à jour avec succès" + +#: src/pages/users/UserForm.ts +msgid "Successfully updated user." +msgstr "Utilisateur mis à jour avec succès" + +#: src/pages/users/UserActiveForm.ts +msgid "Successfully updated {0} {1}" +msgstr "{0} {1} mis à jour avec succès" + +#: src/pages/users/GroupSelectModal.ts src/pages/users/UserListPage.ts +#: src/pages/users/UserViewPage.ts +msgid "Superuser" +msgstr "Super-utilisateur" + +#: src/pages/groups/GroupListPage.ts +msgid "Superuser privileges?" +msgstr "Privilèges de super-utilisateur ?" + +#: src/pages/admin-overview/charts/GroupCountStatusChart.ts +msgid "Superuser-groups" +msgstr "Groupes de super-utilisateur" + +#: src/pages/admin-overview/charts/UserCountStatusChart.ts +msgid "Superusers" +msgstr "Super-utilisateurs" + +#: src/pages/events/utils.ts +msgid "Suspicious request" +msgstr "Requête suspecte" + +#: src/pages/policies/password/PasswordPolicyForm.ts +msgid "Symbol charset" +msgstr "Set de symboles" + +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +msgid "Sync" +msgstr "Synchroniser" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Sync groups" +msgstr "Synchroniser les groupes" + +#~ msgid "Sync parent group" +#~ msgstr "Synchroniser le groupe parent" + +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +msgid "Sync status" +msgstr "Synchroniser les statuts" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "Sync users" +msgstr "Synchroniser les utilisateurs" + +#: src/pages/admin-overview/AdminOverviewPage.ts +msgid "System Overview" +msgstr "Vue d'ensemble du système" + +#: src/interfaces/AdminInterface.ts +#: src/pages/system-tasks/SystemTaskListPage.ts +msgid "System Tasks" +msgstr "Tâches du système" + +#: src/pages/admin-overview/AdminOverviewPage.ts +msgid "System status" +msgstr "Statut du système" + +#: src/pages/events/utils.ts +msgid "System task exception" +msgstr "Erreur de tâche système" + +#: src/pages/events/utils.ts +msgid "System task execution" +msgstr "Exécution de tâche système" + +#: src/pages/outposts/ServiceConnectionDockerForm.ts +msgid "TLS Authentication Certificate" +msgstr "Certificat TLS d'authentification" + +#~ msgid "TLS Server name" +#~ msgstr "Nom TLS du serveur" + +#: src/pages/outposts/ServiceConnectionDockerForm.ts +msgid "TLS Verification Certificate" +msgstr "Certificat de vérification TLS" + +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "TOTP Authenticators" +msgstr "Authentificateur TOTP" + +#: src/pages/flows/StageBindingForm.ts +msgid "Target" +msgstr "Cible" + +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +msgid "Task finished with errors" +msgstr "Tâche terminée avec erreurs" + +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +msgid "Task finished with warnings" +msgstr "Tâche terminée avec avertissements" + +#: src/pages/stages/email/EmailStageForm.ts +msgid "Template" +msgstr "Modèle" + +#: src/pages/events/EventListPage.ts +msgid "Tenant" +msgstr "Tenant" + +#: src/pages/tenants/TenantListPage.ts +msgid "Tenant(s)" +msgstr "Tenant(s)" + +#: src/interfaces/AdminInterface.ts src/pages/tenants/TenantListPage.ts +msgid "Tenants" +msgstr "Tenants" + +#: src/pages/applications/ApplicationViewPage.ts +#: src/pages/policies/PolicyListPage.ts +#: src/pages/property-mappings/PropertyMappingListPage.ts +msgid "Test" +msgstr "Test" + +#: src/pages/policies/PolicyListPage.ts +msgid "Test Policy" +msgstr "Tester la politique" + +#: src/pages/property-mappings/PropertyMappingListPage.ts +msgid "Test Property Mapping" +msgstr "Tester le mapping de la propriété" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "Text: Simple Text input" +msgstr "Texte : simple champ texte" + +#: src/elements/router/Router404.ts +msgid "The URL \"{0}\" was not found." +msgstr "L'URL \"{0}\" est introuvable." + +#: src/pages/providers/proxy/ProxyProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "" +"The external URL you'll access the application at. Include any non-standard " +"port." +msgstr "" +"L'URL externe par laquelle vous accéderez à l'application. Incluez un port " +"non-standard si besoin." + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "" +"The external URL you'll authenticate at. Can be the same domain as " +"authentik." +msgstr "" +"L'URL externe sur laquelle vous vous authentifierez. Cela peut être le même " +"domaine qu'authentik." + +#~ msgid "The following objects use {0}:" +#~ msgstr "Les objets suivants utilisent {0} :" + +#: src/elements/forms/DeleteForm.ts +msgid "The following objects use {objName}" +msgstr "Les objets suivants utilisent {objName}" + +#: src/pages/policies/reputation/ReputationPolicyForm.ts +msgid "" +"The policy passes when the reputation score is above the threshold, and\n" +"doesn't pass when either or both of the selected options are equal or less than the\n" +"threshold." +msgstr "" +"La politique est réussie si la note de réputation est au-dessus du seuil, et" +" échoue si au moins l'une des options sélectionnées sont inférieures ou " +"égales au seuil." + +#: src/pages/policies/dummy/DummyPolicyForm.ts +msgid "" +"The policy takes a random time to execute. This controls the minimum time it" +" will take." +msgstr "" +"La politique prend un certain temps à s'exécuter. Ceci contrôle la durée " +"minimale." + +#: src/pages/providers/ldap/LDAPProviderForm.ts +msgid "" +"The start for gidNumbers, this number is added to a number generated from " +"the group.Pk to make sure that the numbers aren't too low for POSIX groups. " +"Default is 4000 to ensure that we don't collide with local groups or users " +"primary groups gidNumber" +msgstr "" +"Ce nombre est ajouté au nombre généré à partir de group.Pk pour s'assurer " +"que ceux-ci ne sont pas trop bas pour les groupes POSIX. La valeur par " +"défaut est 4000 pour éviter des collisions avec les groupes locaux ou les " +"groupes primaires." + +#: src/pages/providers/ldap/LDAPProviderForm.ts +msgid "" +"The start for uidNumbers, this number is added to the user.Pk to make sure " +"that the numbers aren't too low for POSIX users. Default is 2000 to ensure " +"that we don't collide with local users uidNumber" +msgstr "" +"Ce nombre est ajouté au nombre généré à partir de user.Pk pour s'assurer que" +" ceux-ci ne sont pas trop bas pour les utilisateurs POSIX. La valeur par " +"défaut est 2000 pour éviter des collisions avec les uidNumber des " +"utilisateurs locaux." + +#: src/pages/flows/BoundStagesList.ts +msgid "These bindings control if this stage will be applied to the flow." +msgstr "Ces liaisons contrôlent si cette étape sera appliquée au flux." + +#: src/pages/events/RuleListPage.ts +msgid "" +"These bindings control upon which events this rule triggers. Bindings to\n" +"groups/users are checked against the user of the event." +msgstr "" +"Ces liaisons contrôlent les événements sur lesquels cette règle se " +"déclenche. Les liaisons avec les groupes/utilisateurs sont vérifiés par " +"rapport à l'utilisateur de l'événement." + +#: src/pages/flows/FlowViewPage.ts +msgid "These bindings control which users can access this flow." +msgstr "" +"Ces liaisons contrôlent les utilisateurs qui peuvent accéder à ce flux." + +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +#: src/pages/sources/plex/PlexSourceViewPage.ts +#: src/pages/sources/saml/SAMLSourceViewPage.ts +msgid "" +"These bindings control which users can access this source.\n" +"You can only use policies here as access is checked before the user is authenticated." +msgstr "" +"Ces liaisons contrôlent les utilisateurs qui peuvent accéder à cette source." +" Les politiques ne sont pas utilisables ici car l'accès est vérifié avant " +"que l'utilisateur ne soit authentifié." + +#: src/pages/applications/ApplicationViewPage.ts +msgid "These policies control which users can access this application." +msgstr "" +"Ces politiques contrôlent les autorisations d'accès des utilisateurs à cette" +" application." + +#: src/flows/FlowInspector.ts +msgid "This flow is completed." +msgstr "Ce flux est terminé." + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "" +"This provider will behave like a transparent reverse-proxy, except requests " +"must be authenticated. If your upstream application uses HTTPS, make sure to" +" connect to the outpost using HTTPS as well." +msgstr "" +"Ce fournisseur se comporte comme un reverse-proxy transparent, sauf que les " +"demandes doivent être authentifiées. Si votre application en amont utilise " +"HTTPS, assurez-vous de vous connecter à l'avant-poste en utilisant également" +" HTTPS." + +#: src/pages/tenants/TenantForm.ts +msgid "" +"This setting only affects new Events, as the expiration is saved per-event." +msgstr "" +"Ce paramètre n'affecte que les nouveaux événements, l'expiration étant " +"enregistrée pour chaque événement." + +#: src/pages/stages/invitation/InvitationStageForm.ts +msgid "This stage can be included in enrollment flows to accept invitations." +msgstr "" +"Cette étape peut être incluse dans les flux d'inscription pour accepter les " +"invitations." + +#: src/pages/stages/captcha/CaptchaStageForm.ts +msgid "" +"This stage checks the user's current session against the Google reCaptcha " +"service." +msgstr "" +"Cette étape vérifie la session actuelle de l'utilisateur sur le service " +"reCaptcha de Google." + +#: src/pages/policies/reputation/ReputationPolicyForm.ts +msgid "Threshold" +msgstr "Seuil" + +#: src/pages/stages/email/EmailStageForm.ts +msgid "Time in minutes the token sent is valid." +msgstr "Temps en minutes durant lequel le jeton envoyé est valide." + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "" +"Time offset when temporary users should be deleted. This only applies if " +"your IDP uses the NameID Format 'transient', and the user doesn't log out " +"manually. (Format: hours=1;minutes=2;seconds=3)." +msgstr "" +"Délai de suppression des utilisateurs temporaires. Ceci s'applique " +"uniquement si votre fournisseur d'identité utilise le format NameID " +"transitoire ('transient') et que l'utilisateur ne se déconnecte pas " +"manuellement. (Format : heures=1;minutes=2;secondes=3)." + +#: src/user/user-settings/stages/UserSettingsAuthenticatorTOTP.ts +msgid "Time-based One-Time Passwords" +msgstr "Mots de passe unique basés sur le temps" + +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/PolicyBindingForm.ts +#: src/pages/stages/email/EmailStageForm.ts +msgid "Timeout" +msgstr "Timeout" + +#: src/pages/flows/FlowForm.ts src/pages/tenants/TenantForm.ts +msgid "Title" +msgstr "Titre" + +#: src/pages/events/EventInfo.ts +msgid "To" +msgstr "À" + +#: src/pages/users/UserViewPage.ts +msgid "" +"To create a recovery link, the current tenant needs to have a recovery flow " +"configured." +msgstr "" +"Pour créer un lien de récupération, le locataire actuel doit avoir un flux " +"de récupération configuré." + +#: src/pages/users/UserListPage.ts +msgid "" +"To directly reset a user's password, configure a recovery flow on the " +"currently active tenant." +msgstr "" +"Pour réinitialiser directement le mot de passe d'un utilisateur, configurez " +"un flux de récupération sur le locataire actuel." + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "To use SSL instead, use 'ldaps://' and disable this option." +msgstr "" +"Pour utiliser SSL à la base, utilisez \"ldaps://\" et désactviez cette " +"option." + +#~ msgid "Token" +#~ msgstr "Jeton" + +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +msgid "Token URL" +msgstr "URL du jeton" + +#: src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts +msgid "Token count" +msgstr "Compteur jeton" + +#: src/pages/stages/email/EmailStageForm.ts +msgid "Token expiry" +msgstr "Expiration du jeton" + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Token validity" +msgstr "Validité du jeton" + +#: src/pages/tokens/TokenListPage.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "Token(s)" +msgstr "Jeton(s)" + +#: src/flows/stages/authenticator_static/AuthenticatorStaticStage.ts +#: src/pages/tokens/TokenListPage.ts +msgid "Tokens" +msgstr "Jetons" + +#: src/interfaces/AdminInterface.ts +msgid "Tokens & App passwords" +msgstr "Jetons & mots de passe d'application" + +#: src/user/user-settings/UserSettingsPage.ts +msgid "Tokens and App passwords" +msgstr "Jetons et mots de passe d'application" + +#: src/pages/tokens/TokenListPage.ts +msgid "" +"Tokens are used throughout authentik for Email validation stages, Recovery " +"keys and API access." +msgstr "" +"Les jetons sont utilisés dans authentik pour les étapes de validation des " +"courriels, les clés de récupération et l'accès aux API." + +#: src/pages/admin-overview/charts/FlowStatusChart.ts +msgid "Total flows" +msgstr "Flux totaux" + +#: src/pages/admin-overview/charts/GroupCountStatusChart.ts +msgid "Total groups" +msgstr "Groupes totaux" + +#: src/pages/admin-overview/charts/PolicyStatusChart.ts +msgid "Total policies" +msgstr "Politiques totales" + +#: src/pages/admin-overview/charts/UserCountStatusChart.ts +msgid "Total users" +msgstr "Utilisateurs totaux" + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts +msgid "Traditional authenticator" +msgstr "Authentificateur traditionnel" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Transient" +msgstr "Transitoire" + +#: src/pages/events/RuleForm.ts +msgid "Transports" +msgstr "Transports" + +#: src/pages/flows/BoundStagesList.ts src/pages/outposts/OutpostForm.ts +#: src/pages/outposts/ServiceConnectionListPage.ts +#: src/pages/policies/PolicyListPage.ts +#: src/pages/property-mappings/PropertyMappingListPage.ts +#: src/pages/providers/ProviderListPage.ts +#: src/pages/sources/SourcesListPage.ts src/pages/stages/prompt/PromptForm.ts +#: src/pages/stages/prompt/PromptListPage.ts +msgid "Type" +msgstr "Type" + +#: src/pages/applications/ApplicationForm.ts +msgid "UI settings" +msgstr "Paramètres d'UI" + +#: src/pages/events/EventInfo.ts +msgid "UID" +msgstr "UID" + +#: src/pages/providers/ldap/LDAPProviderForm.ts +msgid "UID start number" +msgstr "Numéro de départ d'UID" + +#: src/flows/stages/identification/IdentificationStage.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "UPN" +msgstr "UPN" + +#: src/pages/sources/oauth/OAuthSourceForm.ts +msgid "URL settings" +msgstr "Paramètres d'URL" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "URL that the initial Login request is sent to." +msgstr "URL de destination de la requête initiale de login." + +#: src/pages/sources/oauth/OAuthSourceForm.ts +msgid "URL the user is redirect to to consent the authorization." +msgstr "" +"URL vers laquelle l'utilisateur est redirigé pour consentir l'autorisation." + +#: src/pages/sources/oauth/OAuthSourceForm.ts +msgid "URL used by authentik to get user information." +msgstr "" +"URL utilisée par authentik pour obtenir des informations sur l'utilisateur." + +#: src/pages/sources/oauth/OAuthSourceForm.ts +msgid "URL used by authentik to retrieve tokens." +msgstr "URL utilisée par authentik pour récupérer les jetons." + +#: src/pages/sources/oauth/OAuthSourceForm.ts +msgid "" +"URL used to request the initial token. This URL is only required for OAuth " +"1." +msgstr "" +"URL utilisée pour demander le jeton initial. Cette URL est uniquement " +"requise pour OAuth 1." + +#: src/pages/admin-overview/charts/PolicyStatusChart.ts +msgid "Unbound policies" +msgstr "Politiques non liées" + +#: src/pages/flows/FlowForm.ts +msgid "Unenrollment" +msgstr "Désinscription" + +#: src/pages/tenants/TenantForm.ts +msgid "Unenrollment flow" +msgstr "Flux de désinscription" + +#: src/pages/outposts/ServiceConnectionListPage.ts +msgid "Unhealthy" +msgstr "Malade" + +#: src/pages/admin-overview/charts/OutpostStatusChart.ts +msgid "Unhealthy outposts" +msgstr "Avant-postes malades" + +#: src/pages/tokens/TokenForm.ts +msgid "Unique identifier the token is referenced by." +msgstr "Identifiant unique par lequel le jeton est référencé." + +#: src/pages/system-tasks/SystemTaskListPage.ts +msgid "Unknown" +msgstr "Inconnu" + +#~ msgid "Unmanaged" +#~ msgstr "Non géré" + +#: src/interfaces/UserInterface.ts +msgid "Unread notifications" +msgstr "Notifications non lues" + +#: src/pages/admin-overview/charts/LDAPSyncStatusChart.ts +msgid "Unsynced sources" +msgstr "Sources non synchronisées" + +#: src/pages/admin-overview/cards/VersionStatusCard.ts +msgid "Up-to-date!" +msgstr "À jour !" + +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/applications/ApplicationViewPage.ts +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/events/RuleListPage.ts src/pages/events/TransportListPage.ts +#: src/pages/flows/BoundStagesList.ts src/pages/flows/BoundStagesList.ts +#: src/pages/flows/FlowListPage.ts src/pages/groups/GroupListPage.ts +#: src/pages/outposts/OutpostListPage.ts +#: src/pages/outposts/ServiceConnectionListPage.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/PolicyListPage.ts +#: src/pages/property-mappings/PropertyMappingListPage.ts +#: src/pages/providers/ProviderListPage.ts +#: src/pages/providers/ldap/LDAPProviderViewPage.ts +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +#: src/pages/providers/saml/SAMLProviderViewPage.ts +#: src/pages/sources/SourcesListPage.ts +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +#: src/pages/sources/plex/PlexSourceViewPage.ts +#: src/pages/sources/saml/SAMLSourceViewPage.ts +#: src/pages/stages/StageListPage.ts src/pages/stages/prompt/PromptListPage.ts +#: src/pages/tenants/TenantListPage.ts src/pages/tokens/TokenListPage.ts +#: src/pages/users/UserActiveForm.ts src/pages/users/UserListPage.ts +#: src/pages/users/UserViewPage.ts +#: src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts +#: src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts +#: src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "Update" +msgstr "Mettre à jour" + +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/applications/ApplicationViewPage.ts +msgid "Update Application" +msgstr "Mettre à jour l'application" + +#: src/pages/policies/BoundPoliciesList.ts +msgid "Update Binding" +msgstr "Mettre à jour la liaison" + +#: src/pages/crypto/CertificateKeyPairListPage.ts +msgid "Update Certificate-Key Pair" +msgstr "Mettre à jour la paire clé/certificat" + +#: src/pages/flows/FlowListPage.ts +msgid "Update Flow" +msgstr "Mettre à jour le flux" + +#: src/pages/groups/GroupListPage.ts src/pages/policies/BoundPoliciesList.ts +msgid "Update Group" +msgstr "Mettre à jour le groupe" + +#: src/pages/providers/ldap/LDAPProviderViewPage.ts +msgid "Update LDAP Provider" +msgstr "Mettre à jour le fournisseur LDAP" + +#: src/pages/sources/ldap/LDAPSourceViewPage.ts +msgid "Update LDAP Source" +msgstr "Mettre à jour la source LDAP" + +#: src/pages/events/RuleListPage.ts +msgid "Update Notification Rule" +msgstr "Mettre à jour la règle de notification" + +#: src/pages/events/TransportListPage.ts +msgid "Update Notification Transport" +msgstr "Mettre à jour le transport de notification" + +#: src/pages/sources/oauth/OAuthSourceViewPage.ts +msgid "Update OAuth Source" +msgstr "Mettre à jour la source OAuth" + +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +msgid "Update OAuth2 Provider" +msgstr "Mettre à jour le fournisseur OAuth2" + +#: src/pages/outposts/OutpostListPage.ts +msgid "Update Outpost" +msgstr "Mettre à jour l'avant-poste" + +#: src/pages/sources/plex/PlexSourceViewPage.ts +msgid "Update Plex Source" +msgstr "Mettre à jour la source Plex" + +#: src/pages/stages/prompt/PromptListPage.ts +msgid "Update Prompt" +msgstr "Mettre à jour l'invite" + +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +msgid "Update Proxy Provider" +msgstr "Mettre à jour le fournisseur de Proxy" + +#: src/pages/providers/saml/SAMLProviderViewPage.ts +msgid "Update SAML Provider" +msgstr "Mettre à jour le fournisseur SAML" + +#: src/pages/sources/saml/SAMLSourceViewPage.ts +msgid "Update SAML Source" +msgstr "Mettre à jour la source SAML" + +#: src/pages/flows/BoundStagesList.ts +msgid "Update Stage binding" +msgstr "Mettre à jour la liaison de l'étape" + +#: src/pages/tenants/TenantListPage.ts +msgid "Update Tenant" +msgstr "Mettre à jour le tenant" + +#: src/pages/tokens/TokenListPage.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "Update Token" +msgstr "Mettre à jour le jeton" + +#: src/pages/policies/BoundPoliciesList.ts src/pages/users/UserListPage.ts +#: src/pages/users/UserViewPage.ts +msgid "Update User" +msgstr "Mettre à jour l'utilisateur" + +#: src/pages/events/utils.ts +msgid "Update available" +msgstr "Mise à jour disponibl" + +#: src/user/user-settings/UserSettingsPage.ts +msgid "Update details" +msgstr "Détails de la mise à jour" + +#: src/pages/flows/BoundStagesList.ts +#: src/pages/outposts/ServiceConnectionListPage.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/PolicyListPage.ts +#: src/pages/property-mappings/PropertyMappingListPage.ts +#: src/pages/providers/ProviderListPage.ts +#: src/pages/sources/SourcesListPage.ts src/pages/stages/StageListPage.ts +#: src/pages/users/UserActiveForm.ts +msgid "Update {0}" +msgstr "Mettre à jour {0}" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Upstream host that the requests are forwarded to." +msgstr "Hôte amont où transférer les requêtes." + +#: src/pages/stages/email/EmailStageForm.ts +msgid "Use SSL" +msgstr "Utiliser SSL" + +#: src/pages/stages/email/EmailStageForm.ts +msgid "Use TLS" +msgstr "Utiliser TLS" + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts +msgid "Use a code-based authenticator." +msgstr "Utiliser un authentifieur à code." + +#: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts +msgid "Use a security key to prove your identity." +msgstr "Utilisez une clé de sécurité pour prouver votre identité." + +#: src/pages/stages/email/EmailStageForm.ts +msgid "Use global settings" +msgstr "Utiliser les paramètres globaux" + +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +msgid "" +"Use the user's email address, but deny enrollment when the email address " +"already exists." +msgstr "" +"Utiliser l'adresse courriel de l'utilisateur, mais refuser l'inscription " +"lorsque celle-ci existe déjà." + +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +msgid "" +"Use the user's username, but deny enrollment when the username already " +"exists." +msgstr "" +"Utiliser le nom d'utilisateur, mais refuser l'inscription si celui-ci existe" +" déjà." + +#: src/pages/users/ServiceAccountForm.ts +msgid "" +"Use the username and password below to authenticate. The password can be " +"retrieved later on the Tokens page." +msgstr "" +"Utilisez le nom d'utilisateur et le mot de passe ci-dessous pour vous " +"authentifier. Le mot de passe peut être récupéré plus tard sur la page " +"Jetons." + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "" +"Use this provider with nginx's auth_request or traefik's forwardAuth. Each " +"application/domain needs its own provider. Additionally, on each domain, " +"/akprox must be routed to the outpost (when using a manged outpost, this is " +"done for you)." +msgstr "" +"Utilisez ce fournisseur avec auth_request de nginx ou forwardAuth de " +"traefik. Chaque application/domaine a besoin de son propre fournisseur. De " +"plus, sur chaque domaine, /akprox doit être routé vers l'avant-poste (si " +"vous utilisez un avant-poste géré, cela est fait pour vous)." + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "" +"Use this provider with nginx's auth_request or traefik's forwardAuth. Only a" +" single provider is required per root domain. You can't do per-application " +"authorization, but you don't have to create a provider for each application." +msgstr "" +"Utilisez ce fournisseur avec auth_request de nginx ou forwardAuth de " +"traefik. Un seul fournisseur est nécessaire par domaine racine. Vous ne " +"pouvez pas faire d'autorisation par application, mais vous n'avez pas besoin" +" de créer un fournisseur pour chaque application." + +#: src/pages/tenants/TenantForm.ts +msgid "Use this tenant for each domain that doesn't have a dedicated tenant." +msgstr "" +"Utilisez ce locataire pour chaque domaine qui ne dispose pas d'un locataire " +"dédié." + +#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/pages/applications/ApplicationCheckAccessForm.ts +#: src/pages/events/EventInfo.ts src/pages/events/EventListPage.ts +#: src/pages/policies/PolicyBindingForm.ts +#: src/pages/policies/PolicyBindingForm.ts +#: src/pages/policies/PolicyTestForm.ts +#: src/pages/property-mappings/PropertyMappingTestForm.ts +#: src/pages/tokens/TokenForm.ts src/pages/tokens/TokenListPage.ts +#: src/pages/users/UserListPage.ts src/pages/users/UserViewPage.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "User" +msgstr "Utilisateur" + +#: src/pages/users/UserViewPage.ts +msgid "User Info" +msgstr "Info utilisateur" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "User Property Mappings" +msgstr "Mapping des propriétés d'utilisateur" + +#: src/pages/policies/reputation/UserReputationListPage.ts +#: src/pages/policies/reputation/UserReputationListPage.ts +msgid "User Reputation" +msgstr "Réputation utilisateur" + +#~ msgid "User Settings" +#~ msgstr "Paramètres utilisateur" + +#: src/pages/stages/password/PasswordStageForm.ts +msgid "User database + LDAP password" +msgstr "Base de données utilisateurs + mot de passe LDAP" + +#: src/pages/stages/password/PasswordStageForm.ts +msgid "User database + app passwords" +msgstr "Base de données utilisateurs + mots de passes applicatifs" + +#: src/pages/stages/password/PasswordStageForm.ts +msgid "User database + standard password" +msgstr "Base de données utilisateurs + mots de passe standards" + +#: src/user/user-settings/UserSettingsPage.ts +msgid "User details" +msgstr "Détails de l'utilisatuer" + +#: src/pages/users/UserViewPage.ts +msgid "User events" +msgstr "Événements de l'utilisateur" + +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "User fields" +msgstr "Champs de l'utilisateur" + +#: src/interfaces/AdminInterface.ts +msgid "User interface" +msgstr "Interface utilisateur" + +#: src/pages/sources/oauth/OAuthSourceForm.ts +#: src/pages/sources/plex/PlexSourceForm.ts +msgid "User matching mode" +msgstr "Mode de correspondance utilisateur" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "User object filter" +msgstr "Filtre des objets utilisateur" + +#: src/pages/sources/ldap/LDAPSourceForm.ts +msgid "User password writeback" +msgstr "Réécriture du mot de passe utilisateur" + +#: src/pages/users/UserListPage.ts +msgid "User status" +msgstr "Statut utilisateur" + +#: src/pages/events/utils.ts +msgid "User was written to" +msgstr "L'utilisateur a été écrit vers " + +#: src/pages/policies/BoundPoliciesList.ts src/pages/users/UserViewPage.ts +msgid "User {0}" +msgstr "Utilisateur {0}" + +#: src/flows/FormStatic.ts +msgid "User's avatar" +msgstr "Avatar de l'utilisateu" + +#: src/pages/users/UserForm.ts src/user/user-settings/UserSelfForm.ts +msgid "User's display name." +msgstr "Nom d'affichage de l'utilisateur" + +#: src/pages/users/UserListPage.ts +msgid "User(s)" +msgstr "Utilisateur(s)" + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "" +"User/Group Attribute used for the password part of the HTTP-Basic Header." +msgstr "" +"Attribut d'utilisateur/groupe utilisé pour la champ mot de passe de l'en-" +"tête HTTP-Basic." + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "" +"User/Group Attribute used for the user part of the HTTP-Basic Header. If not" +" set, the user's Email address is used." +msgstr "" +"Attribut d'utilisateur/groupe utilisé pour le champ utilisateur de l'en-tête" +" HTTP-Basic. S'il n'est pas défini, le courriel de l'utilisateur est " +"utilisée." + +#: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts +msgid "Userinfo URL" +msgstr "URL Userinfo" + +#: src/flows/stages/identification/IdentificationStage.ts +#: src/pages/policies/reputation/UserReputationListPage.ts +#: src/pages/stages/identification/IdentificationStageForm.ts +#: src/pages/users/ServiceAccountForm.ts src/pages/users/ServiceAccountForm.ts +#: src/pages/users/UserForm.ts src/pages/users/UserListPage.ts +#: src/pages/users/UserViewPage.ts src/user/user-settings/UserSelfForm.ts +msgid "Username" +msgstr "Nom d'utilisateur" + +#: src/pages/stages/prompt/PromptForm.ts +msgid "" +"Username: Same as Text input, but checks for and prevents duplicate " +"usernames." +msgstr "" +"Nom d'utilisateur : Identique à la saisie de texte, mais vérifie et empêche " +"les noms d'utilisateur en double." + +#: src/interfaces/AdminInterface.ts +#: src/pages/admin-overview/AdminOverviewPage.ts +#: src/pages/users/UserListPage.ts +msgid "Users" +msgstr "Utilisateurs" + +#: src/pages/groups/GroupForm.ts +msgid "Users added to this group will be superusers." +msgstr "Les utilisateurs ajoutés à ce groupe seront des super-utilisateurs." + +#: src/pages/providers/ldap/LDAPProviderForm.ts +msgid "" +"Users in the selected group can do search queries. If no group is selected, " +"no LDAP Searches are allowed." +msgstr "" +"Les utilisateurs de ce groupe peuvent effectuer des recherches. Si aucun " +"groupe n'est sélectionné, aucune recherche LDAP n'est autorisée." + +#: src/pages/events/EventInfo.ts +msgid "Using flow" +msgstr "Utilisation du flux" + +#: src/pages/events/EventInfo.ts +msgid "Using source" +msgstr "Utilisation de la source" + +#: src/pages/users/ServiceAccountForm.ts +msgid "" +"Valid for 360 days, after which the password will automatically rotate. You " +"can copy the password from the Token List." +msgstr "" +"Valide pendant 360 jours, après quoi le mot de passe sera alterné " +"automatiquement. Vous pouvez copier le mot de passe depuis la liste des " +"jetons." + +#: src/pages/providers/oauth2/OAuth2ProviderForm.ts +msgid "" +"Valid redirect URLs after a successful authorization flow. Also specify any " +"origins here for Implicit flows." +msgstr "" +"URLs de redirection autorisées après un flux d'autorisation réussi. Indiquez" +" également toute origine ici pour les flux implicites." + +#: src/pages/providers/proxy/ProxyProviderForm.ts +msgid "Validate SSL Certificates of upstream servers." +msgstr "Valider les certificats SSL des serveurs amonts." + +#: src/pages/stages/password/PasswordStageForm.ts +msgid "Validate the user's password against the selected backend(s)." +msgstr "" +"Valider le mot de passe de l'utilisateur sur le(s) backend(s) " +"sélectionné(s)." + +#: src/pages/stages/prompt/PromptStageForm.ts +msgid "Validation Policies" +msgstr "Politiques de validation" + +#: src/pages/crypto/CertificateGenerateForm.ts +msgid "Validity days" +msgstr "Jours de validité" + +#: src/pages/tokens/TokenListPage.ts +msgid "Verification" +msgstr "Vérification" + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "Verification Certificate" +msgstr "Certificat de validation" + +#: src/pages/stages/email/EmailStageForm.ts +msgid "" +"Verify the user's email address by sending them a one-time-link. Can also be" +" used for recovery to verify the user's authenticity." +msgstr "" +"Vérifier le courriel de l'utilisateur en lui envoyant un lien à usage " +"unique. Peut également être utilisé lors de la récupération afin de vérifier" +" l'authenticité de l'utilisateur." + +#: src/pages/admin-overview/AdminOverviewPage.ts +msgid "Version" +msgstr "Version" + +#: src/pages/outposts/OutpostHealth.ts +msgid "Version: {0}" +msgstr "Version : {0}" + +#: src/pages/outposts/OutpostListPage.ts +msgid "View Deployment Info" +msgstr "Afficher les informations de déploiement" + +#: src/pages/outposts/OutpostDeploymentModal.ts +msgid "View deployment documentation" +msgstr "Voir la documentation de déploiement" + +#: src/pages/flows/FlowForm.ts +msgid "Visible in the URL." +msgstr "Visible dans l'URL" + +#: src/pages/policies/dummy/DummyPolicyForm.ts +msgid "Wait (max)" +msgstr "Attente (max)" + +#: src/pages/policies/dummy/DummyPolicyForm.ts +msgid "Wait (min)" +msgstr "Attente (min)" + +#: src/pages/admin-overview/cards/SystemStatusCard.ts +#: src/pages/admin-overview/cards/SystemStatusCard.ts +#: src/pages/admin-overview/cards/SystemStatusCard.ts +#: src/pages/events/RuleForm.ts src/pages/system-tasks/SystemTaskListPage.ts +msgid "Warning" +msgstr "Avertissement" + +#: src/pages/policies/PolicyListPage.ts +msgid "Warning: Policy is not assigned." +msgstr "Avertissement : la politique n'est pas assignée." + +#: src/pages/providers/ProviderListPage.ts +msgid "Warning: Provider not assigned to any application." +msgstr "Avertissement : le fournisseur n'est assigné à aucune application." + +#: src/pages/outposts/OutpostListPage.ts +msgid "" +"Warning: authentik Domain is not configured, authentication will not work." +msgstr "" +"Avertissement : le domaine d'authentik n'est pas configuré, " +"l'authentification ne fonctionnera pas." + +#: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts +msgid "WebAuthn Authenticators" +msgstr "Authentificateurs WebAuthn" + +#: src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts +msgid "WebAuthn Devices" +msgstr "Équipements WebAuthn" + +#: src/pages/events/TransportForm.ts +msgid "Webhook (Slack/Discord)" +msgstr "Webhook (Slack/Discord)" + +#: src/pages/events/TransportForm.ts +msgid "Webhook (generic)" +msgstr "Webhook (générique)" + +#: src/pages/events/TransportForm.ts +msgid "Webhook Mapping" +msgstr "Mapping Webhook" + +#: src/pages/events/TransportForm.ts +msgid "Webhook URL" +msgstr "URL Webhoo" + +#: src/pages/stages/email/EmailStageForm.ts +msgid "" +"When a user returns from the email successfully, their account will be " +"activated." +msgstr "" +"Lorsqu'un utilisateur revient de l'e-mail avec succès, son compte sera " +"activé." + +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "" +"When a valid username/email has been entered, and this option is enabled, " +"the user's username and avatar will be shown. Otherwise, the text that the " +"user entered will be shown." +msgstr "" +"Lorsqu'un nom d'utilisateur/email valide a été saisi, et si cette option est" +" active, le nom d'utilisateur et l'avatar de l'utilisateur seront affichés. " +"Sinon, le texte que l'utilisateur a saisi sera affiché." + +#: src/pages/stages/email/EmailStageForm.ts +msgid "" +"When enabled, global Email connection settings will be used and connection " +"settings below will be ignored." +msgstr "" +"Si activé, les paramètres globaux de connexion courriel seront utilisés et " +"les paramètres de connexion ci-dessous seront ignorés." + +#: src/pages/stages/invitation/InvitationForm.ts +msgid "When enabled, the invitation will be deleted after usage." +msgstr "Si activée, l'invitation sera supprimée après utilisation." + +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "When enabled, user fields are matched regardless of their casing." +msgstr "" +"Si activé, les champs de l'utilisateur sont mis en correspondance en " +"ignorant leur casse." + +#: src/pages/stages/identification/IdentificationStageForm.ts +msgid "" +"When selected, a password field is shown on the same page instead of a " +"separate page. This prevents username enumeration attacks." +msgstr "" +"Si activée, un champ de mot de passe est affiché sur la même page au lieu " +"d'une page séparée. Cela permet d'éviter les attaques par énumération de " +"noms d'utilisateur." + +#: src/pages/providers/saml/SAMLProviderForm.ts +msgid "" +"When selected, incoming assertion's Signatures will be validated against " +"this certificate. To allow unsigned Requests, leave on default." +msgstr "" +"Si activée, les signatures des assertions entrantes seront validées par " +"rapport à ce certificat. Pour autoriser les requêtes non signées, laissez la" +" valeur par défaut." + +#: src/pages/policies/dummy/DummyPolicyForm.ts +#: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts +#: src/pages/policies/expiry/ExpiryPolicyForm.ts +#: src/pages/policies/expression/ExpressionPolicyForm.ts +#: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts +#: src/pages/policies/password/PasswordPolicyForm.ts +#: src/pages/policies/reputation/ReputationPolicyForm.ts +msgid "" +"When this option is enabled, all executions of this policy will be logged. " +"By default, only execution errors are logged." +msgstr "" +"Si activée, toutes les exécutions de cette politique seront enregistrées. " +"Par défaut, seules les erreurs d'exécution sont consignées." + +#: src/pages/tenants/TenantForm.ts +msgid "" +"When using an external logging solution for archiving, this can be set to " +"\"minutes=5\"." +msgstr "" +"En cas d'utilisation d'une solution de journalisation externe pour " +"l'archivage, cette valeur peut être fixée à \"minutes=5\"." + +#: src/flows/FlowExecutor.ts +msgid "Whoops!" +msgstr "Oups !" + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "Windows" +msgstr "Fenêtres" + +#: src/pages/admin-overview/AdminOverviewPage.ts +msgid "Workers" +msgstr "Workers" + +#: src/pages/stages/user_write/UserWriteStageForm.ts +msgid "" +"Write any data from the flow's context's 'prompt_data' to the currently pending user. If no user\n" +"is pending, a new user is created, and data is written to them." +msgstr "" +"Écrit toute donnée provenant du contexte du flux 'prompt_data' à " +"l'utilisateur en attente. Si aucun utilisateur n'est en attente, un nouvel " +"utilisateur est créé avec ces données." + +#: src/pages/sources/saml/SAMLSourceForm.ts +msgid "X509 Subject" +msgstr "Sujet X509" + +#: src/elements/oauth/UserRefreshList.ts +#: src/pages/applications/ApplicationCheckAccessForm.ts +#: src/pages/crypto/CertificateKeyPairListPage.ts +#: src/pages/groups/GroupListPage.ts src/pages/groups/MemberSelectModal.ts +#: src/pages/outposts/ServiceConnectionListPage.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/PolicyTestForm.ts +#: src/pages/providers/proxy/ProxyProviderViewPage.ts +#: src/pages/tenants/TenantListPage.ts src/pages/tokens/TokenListPage.ts +#: src/pages/users/GroupSelectModal.ts src/pages/users/UserListPage.ts +#: src/user/user-settings/tokens/UserTokenList.ts +msgid "Yes" +msgstr "Oui" + +#: src/pages/outposts/OutpostForm.ts +msgid "You can only select providers that match the type of the outpost." +msgstr "" +"Vous pouvez uniquement sélectionner des fournisseurs qui correspondent au " +"type d'avant-poste." + +#: src/flows/stages/RedirectStage.ts +msgid "You're about to be redirect to the following URL." +msgstr "Vous allez être redirigé vers l'URL suivante." + +#: src/interfaces/AdminInterface.ts +msgid "You're currently impersonating {0}. Click to stop." +msgstr "" +"Vous êtes en train de vous faire passer pour {0}. Cliquez pour arrêter." + +#~ msgid "authentik Builtin Database" +#~ msgstr "Base de données intégrée à authentik" + +#~ msgid "authentik LDAP Backend" +#~ msgstr "Backend LDAP authentik" + +#: src/elements/forms/DeleteForm.ts +msgid "connecting object will be deleted" +msgstr "L'objet connecté sera supprimé" + +#: src/elements/forms/DeleteBulkForm.ts +msgid "connection will be deleted" +msgstr "la connexion sera supprimée" + +#: src/elements/Tabs.ts +msgid "no tabs defined" +msgstr "aucun onglet défini" + +#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +msgid "object will be DELETED" +msgstr "l'objet sera SUPPRIMÉ" + +#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +msgid "reference will be reset to default value" +msgstr "la référence sera réinitialisée à sa valeur par défaut" + +#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +msgid "reference will be set to an empty value" +msgstr "la référence sera réinitialisée à une valeur vide" + +#: src/elements/Expand.ts src/elements/Expand.ts +msgid "{0}" +msgstr "{0}" + +#: src/pages/stages/prompt/PromptStageForm.ts +msgid "{0} (\"{1}\", of type {2})" +msgstr "{0} (\"{1}\", de type {2})" + +#: src/pages/stages/prompt/PromptStageForm.ts +msgid "{0} ({1})" +msgstr "{0} ({1})" + +#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +msgid "{0} ({consequence})" +msgstr "{0} ({consequence})" + +#: src/elements/table/TablePagination.ts +msgid "{0} - {1} of {2}" +msgstr "{0} - {1} sur {2}" + +#: src/pages/admin-overview/cards/VersionStatusCard.ts +msgid "{0} is available!" +msgstr "{0} est disponible !" + +#: src/elements/notifications/NotificationDrawer.ts +msgid "{0} unread" +msgstr "{0} non lu" + +#: src/pages/outposts/OutpostHealth.ts +msgid "{0}, should be {1}" +msgstr "{0}, devrait être {1}" + +#: src/elements/forms/ConfirmationForm.ts +msgid "{0}: {1}" +msgstr "{0} : {1}" From d29d161ac66d4239d5a1f5ba2aa578699227610a Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 20:36:38 +0200 Subject: [PATCH 18/25] admin: clear update notification when notification's version matches current version Signed-off-by: Jens Langhammer --- authentik/admin/apps.py | 5 +++++ authentik/admin/tasks.py | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/authentik/admin/apps.py b/authentik/admin/apps.py index 0c1da4d62..e3e3567ae 100644 --- a/authentik/admin/apps.py +++ b/authentik/admin/apps.py @@ -8,3 +8,8 @@ class AuthentikAdminConfig(AppConfig): name = "authentik.admin" label = "authentik_admin" verbose_name = "authentik Admin" + + def ready(self): + from authentik.admin.tasks import clear_update_notifications + + clear_update_notifications.delay() diff --git a/authentik/admin/tasks.py b/authentik/admin/tasks.py index 018b05f26..4149b210f 100644 --- a/authentik/admin/tasks.py +++ b/authentik/admin/tasks.py @@ -10,7 +10,7 @@ from requests import RequestException from structlog.stdlib import get_logger from authentik import ENV_GIT_HASH_KEY, __version__ -from authentik.events.models import Event, EventAction +from authentik.events.models import Event, EventAction, Notification from authentik.events.monitored_tasks import MonitoredTask, TaskResult, TaskResultStatus from authentik.lib.config import CONFIG from authentik.lib.utils.http import get_http_session @@ -35,6 +35,18 @@ def _set_prom_info(): ) +@CELERY_APP.task() +def clear_update_notifications(): + """Clear update notifications on startup if the notification was for the version + we're running now.""" + for notification in Notification.objects.filter(event__action=EventAction.UPDATE_AVAILABLE): + if "new_version" not in notification.event.context: + continue + notification_version = notification.event.context["new_version"] + if notification_version == __version__: + notification.delete() + + @CELERY_APP.task(bind=True, base=MonitoredTask) def update_latest_version(self: MonitoredTask): """Update latest version info""" From 7a16c9cb14c09839011252f833788bdecba7ed00 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 20:39:27 +0200 Subject: [PATCH 19/25] root: remove redundant internal network from compose Signed-off-by: Jens Langhammer --- docker-compose.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a2ac306dd..2a4279f0b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,8 +7,6 @@ services: restart: unless-stopped volumes: - database:/var/lib/postgresql/data - networks: - - internal environment: - POSTGRES_PASSWORD=${PG_PASS:?database password required} - POSTGRES_USER=${PG_USER:-authentik} @@ -18,8 +16,6 @@ services: redis: image: redis:alpine restart: unless-stopped - networks: - - internal server: image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2021.9.5} restart: unless-stopped @@ -36,8 +32,6 @@ services: - ./media:/media - ./custom-templates:/templates - geoip:/geoip - networks: - - internal env_file: - .env ports: @@ -47,8 +41,6 @@ services: image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2021.9.5} restart: unless-stopped command: worker - networks: - - internal environment: AUTHENTIK_REDIS__HOST: redis AUTHENTIK_POSTGRESQL__HOST: postgresql @@ -83,6 +75,3 @@ volumes: driver: local geoip: driver: local - -networks: - internal: {} From 62bf79ce326338d9ec7298a306f1e9c192b8fdfd Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 20:45:18 +0200 Subject: [PATCH 20/25] root: add docker-native healthcheck for web and celery Signed-off-by: Jens Langhammer --- Dockerfile | 4 ++++ authentik/root/monitoring.py | 8 ++++---- lifecycle/ak | 11 +++++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3767c7e4f..7dfd5e46b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -80,8 +80,12 @@ COPY ./lifecycle/ /lifecycle COPY --from=builder /work/authentik /authentik-proxy USER authentik + ENV TMPDIR /dev/shm/ ENV PYTHONUNBUFFERED 1 ENV prometheus_multiproc_dir /dev/shm/ ENV PATH "/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/lifecycle" + +HEALTHCHECK --interval=30s --timeout=30s --start-period=60s --retries=3 CMD [ "/lifecycle/ak healthcheck" ] + ENTRYPOINT [ "/lifecycle/ak" ] diff --git a/authentik/root/monitoring.py b/authentik/root/monitoring.py index c7b97ac94..a70749880 100644 --- a/authentik/root/monitoring.py +++ b/authentik/root/monitoring.py @@ -59,14 +59,14 @@ class MetricsView(View): class LiveView(View): - """View for liveness probe, always returns Http 201""" + """View for liveness probe, always returns Http 204""" def dispatch(self, request: HttpRequest) -> HttpResponse: - return HttpResponse(status=201) + return HttpResponse(status=204) class ReadyView(View): - """View for readiness probe, always returns Http 201, unless sql or redis is down""" + """View for readiness probe, always returns Http 204, unless sql or redis is down""" def dispatch(self, request: HttpRequest) -> HttpResponse: try: @@ -79,4 +79,4 @@ class ReadyView(View): redis_conn.ping() except RedisError: return HttpResponse(status=503) - return HttpResponse(status=201) + return HttpResponse(status=204) diff --git a/lifecycle/ak b/lifecycle/ak index 79b6f05f6..31e6aebcd 100755 --- a/lifecycle/ak +++ b/lifecycle/ak @@ -26,10 +26,14 @@ function check_if_root { chpst -u authentik:$GROUP env HOME=/authentik $1 } +MODE_FILE="/tmp/authentik-mode" + if [[ "$1" == "server" ]]; then + echo "server" > $MODE_FILE python -m lifecycle.migrate /authentik-proxy elif [[ "$1" == "worker" ]]; then + echo "worker" > $MODE_FILE check_if_root "celery -A authentik.root.celery worker --autoscale 3,1 -E -B -s /tmp/celerybeat-schedule -Q authentik,authentik_scheduled,authentik_events" elif [[ "$1" == "backup" ]]; then python -m manage dbbackup --clean @@ -42,6 +46,13 @@ elif [[ "$1" == "test" ]]; then touch /unittest.xml chown authentik:authentik /unittest.xml check_if_root "python -m manage test authentik" +elif [[ "$1" == "healthcheck" ]]; then + mode=$(cat $MODE_FILE) + if [[ $mode == "server "]]; then + curl --user-agent "authentik Healthcheck" -I http://localhost:9000/-/health/ready/ + elif [[ $mode == "worker" ]]; then + celery -A authentik.root.celery inspect ping -d celery@$HOSTNAME + fi else python -m manage "$@" fi From b0f7083879c9d869146db4f307e621875fdf921d Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 21:03:54 +0200 Subject: [PATCH 21/25] lifecycle: fix syntax error in ak wrapper Signed-off-by: Jens Langhammer --- lifecycle/ak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lifecycle/ak b/lifecycle/ak index 31e6aebcd..d0beb5e15 100755 --- a/lifecycle/ak +++ b/lifecycle/ak @@ -48,7 +48,7 @@ elif [[ "$1" == "test" ]]; then check_if_root "python -m manage test authentik" elif [[ "$1" == "healthcheck" ]]; then mode=$(cat $MODE_FILE) - if [[ $mode == "server "]]; then + if [[ $mode == "server" ]]; then curl --user-agent "authentik Healthcheck" -I http://localhost:9000/-/health/ready/ elif [[ $mode == "worker" ]]; then celery -A authentik.root.celery inspect ping -d celery@$HOSTNAME From 75608dce5cc0dee01965e38475ce4faa3a893519 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Fri, 1 Oct 2021 14:06:32 +0200 Subject: [PATCH 22/25] web: add locale detection Signed-off-by: Jens Langhammer # Conflicts: # web/src/interfaces/locale.ts --- web/src/elements/charts/AdminLoginsChart.ts | 6 ++++-- web/src/elements/charts/ApplicationAuthorizeChart.ts | 4 +++- web/src/elements/charts/UserChart.ts | 8 +++++--- web/src/interfaces/locale.ts | 7 +++++-- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/web/src/elements/charts/AdminLoginsChart.ts b/web/src/elements/charts/AdminLoginsChart.ts index 116c17465..2df07185c 100644 --- a/web/src/elements/charts/AdminLoginsChart.ts +++ b/web/src/elements/charts/AdminLoginsChart.ts @@ -1,5 +1,7 @@ import { ChartData } from "chart.js"; +import { t } from "@lingui/macro"; + import { customElement } from "lit/decorators"; import { AdminApi, LoginMetrics } from "@goauthentik/api"; @@ -17,7 +19,7 @@ export class AdminLoginsChart extends AKChart { return { datasets: [ { - label: "Failed Logins", + label: t`Failed Logins`, backgroundColor: "rgba(201, 25, 11, .5)", spanGaps: true, data: @@ -29,7 +31,7 @@ export class AdminLoginsChart extends AKChart { }) || [], }, { - label: "Successful Logins", + label: t`Successful Logins`, backgroundColor: "rgba(189, 229, 184, .5)", spanGaps: true, data: diff --git a/web/src/elements/charts/ApplicationAuthorizeChart.ts b/web/src/elements/charts/ApplicationAuthorizeChart.ts index fb0c7fcfe..12907ed23 100644 --- a/web/src/elements/charts/ApplicationAuthorizeChart.ts +++ b/web/src/elements/charts/ApplicationAuthorizeChart.ts @@ -1,5 +1,7 @@ import { ChartData } from "chart.js"; +import { t } from "@lingui/macro"; + import { customElement, property } from "lit/decorators"; import { Coordinate, CoreApi } from "@goauthentik/api"; @@ -22,7 +24,7 @@ export class ApplicationAuthorizeChart extends AKChart { return { datasets: [ { - label: "Authorizations", + label: t`Authorizations`, backgroundColor: "rgba(189, 229, 184, .5)", spanGaps: true, data: diff --git a/web/src/elements/charts/UserChart.ts b/web/src/elements/charts/UserChart.ts index 7f12f09ba..be6549322 100644 --- a/web/src/elements/charts/UserChart.ts +++ b/web/src/elements/charts/UserChart.ts @@ -1,5 +1,7 @@ import { ChartData } from "chart.js"; +import { t } from "@lingui/macro"; + import { customElement, property } from "lit/decorators"; import { CoreApi, UserMetrics } from "@goauthentik/api"; @@ -22,7 +24,7 @@ export class UserChart extends AKChart { return { datasets: [ { - label: "Failed Logins", + label: t`Failed Logins`, backgroundColor: "rgba(201, 25, 11, .5)", spanGaps: true, data: @@ -34,7 +36,7 @@ export class UserChart extends AKChart { }) || [], }, { - label: "Successful Logins", + label: t`Successful Logins`, backgroundColor: "rgba(189, 229, 184, .5)", spanGaps: true, data: @@ -46,7 +48,7 @@ export class UserChart extends AKChart { }) || [], }, { - label: "Application authorizations", + label: t`Application authorizations`, backgroundColor: "rgba(43, 154, 243, .5)", spanGaps: true, data: diff --git a/web/src/interfaces/locale.ts b/web/src/interfaces/locale.ts index 73c0acc56..9a34d19f2 100644 --- a/web/src/interfaces/locale.ts +++ b/web/src/interfaces/locale.ts @@ -1,15 +1,18 @@ -import { en } from "make-plural/plurals"; +import { en, fr } from "make-plural/plurals"; import { i18n } from "@lingui/core"; +import { detect, fromUrl, fromStorage, fromNavigator } from "@lingui/detect-locale"; import { messages as localeEN } from "../locales/en"; +import { messages as localeFR_FR } from "../locales/fr_FR"; import { messages as localeDEBUG } from "../locales/pseudo-LOCALE"; i18n.loadLocaleData("en", { plurals: en }); i18n.loadLocaleData("debug", { plurals: en }); +i18n.loadLocaleData("fr_FR", { plurals: fr }); i18n.load("en", localeEN); +i18n.load("fr_FR", localeFR_FR); i18n.load("debug", localeDEBUG); -i18n.activate("en"); const DEFAULT_FALLBACK = () => "en"; From 40055ef01be0fe16c03dcd3490b8e4371b31198a Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 22:19:05 +0200 Subject: [PATCH 23/25] cmd: prevent outposts from panicking when failing to get their config Signed-off-by: Jens Langhammer --- cmd/ldap/server.go | 3 +++ cmd/proxy/server.go | 3 +++ 2 files changed, 6 insertions(+) diff --git a/cmd/ldap/server.go b/cmd/ldap/server.go index 86a547ddd..4d22ce6d2 100644 --- a/cmd/ldap/server.go +++ b/cmd/ldap/server.go @@ -45,6 +45,9 @@ func main() { defer common.Defer() ac := ak.NewAPIController(*akURLActual, akToken) + if ac == nil { + os.Exit(1) + } ac.Server = ldap.NewServer(ac) diff --git a/cmd/proxy/server.go b/cmd/proxy/server.go index a39e85630..84c4a7f04 100644 --- a/cmd/proxy/server.go +++ b/cmd/proxy/server.go @@ -59,6 +59,9 @@ func main() { defer common.Defer() ac := ak.NewAPIController(*akURLActual, akToken) + if ac == nil { + os.Exit(1) + } ac.Server = proxyv2.NewProxyServer(ac, portOffset) From 2aacb311bc79a89d7bfca918a9e10bcc705816ec Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 22:19:33 +0200 Subject: [PATCH 24/25] internal: add internal healthchecking to prevent websocket errors Signed-off-by: Jens Langhammer --- cmd/server/main.go | 2 +- internal/gounicorn/gounicorn.go | 38 +++++++++++++++++++++++++++++++++ internal/web/proxy.go | 10 ++++++++- internal/web/web.go | 5 ++++- lifecycle/ak | 2 +- 5 files changed, 53 insertions(+), 4 deletions(-) diff --git a/cmd/server/main.go b/cmd/server/main.go index 91277a0f1..06e452dd4 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -54,7 +54,7 @@ func main() { u, _ := url.Parse("http://localhost:8000") g := gounicorn.NewGoUnicorn() - ws := web.NewWebServer() + ws := web.NewWebServer(g) defer g.Kill() defer ws.Shutdown() go web.RunMetricsServer() diff --git a/internal/gounicorn/gounicorn.go b/internal/gounicorn/gounicorn.go index 335aa48b9..422d15421 100644 --- a/internal/gounicorn/gounicorn.go +++ b/internal/gounicorn/gounicorn.go @@ -1,10 +1,13 @@ package gounicorn import ( + "net/http" "os" "os/exec" + "time" log "github.com/sirupsen/logrus" + "goauthentik.io/internal/outpost/ak" ) type GoUnicorn struct { @@ -12,6 +15,7 @@ type GoUnicorn struct { p *exec.Cmd started bool killed bool + alive bool } func NewGoUnicorn() *GoUnicorn { @@ -20,6 +24,7 @@ func NewGoUnicorn() *GoUnicorn { log: logger, started: false, killed: false, + alive: false, } g.initCmd() return g @@ -35,6 +40,10 @@ func (g *GoUnicorn) initCmd() { g.p.Stderr = os.Stderr } +func (g *GoUnicorn) IsRunning() bool { + return g.alive +} + func (g *GoUnicorn) Start() error { if g.killed { g.log.Debug("Not restarting gunicorn since we're killed") @@ -44,9 +53,38 @@ func (g *GoUnicorn) Start() error { g.initCmd() } g.started = true + go g.healthcheck() return g.p.Run() } +func (g *GoUnicorn) healthcheck() { + g.log.Debug("starting healthcheck") + h := &http.Client{ + Transport: ak.NewUserAgentTransport("goauthentik.io go proxy healthcheck", http.DefaultTransport), + } + check := func() bool { + res, err := h.Get("http://localhost:8000/-/health/live/") + if err == nil && res.StatusCode == 204 { + g.alive = true + return true + } + return false + } + + // Default healthcheck is every 1 second on startup + // once we've been healthy once, increase to 30 seconds + for range time.Tick(time.Second) { + if check() { + g.log.Info("backend is alive, backing off with healthchecks") + break + } + g.log.Debug("backend not alive yet") + } + for range time.Tick(30 * time.Second) { + check() + } +} + func (g *GoUnicorn) Kill() { g.killed = true err := g.p.Process.Kill() diff --git a/internal/web/proxy.go b/internal/web/proxy.go index c33302894..e85196edd 100644 --- a/internal/web/proxy.go +++ b/internal/web/proxy.go @@ -40,6 +40,10 @@ func (ws *WebServer) configureProxy() { ws.proxyErrorHandler(rw, r, fmt.Errorf("proxy not running")) }) ws.m.PathPrefix("/").HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { + if !ws.p.IsRunning() { + ws.proxyErrorHandler(rw, r, fmt.Errorf("authentik core not running yet")) + return + } host := web.GetHost(r) before := time.Now() if ws.ProxyServer != nil { @@ -59,8 +63,12 @@ func (ws *WebServer) configureProxy() { } func (ws *WebServer) proxyErrorHandler(rw http.ResponseWriter, req *http.Request, err error) { - ws.log.WithError(err).Warning("proxy error") + ws.log.Warning(err.Error()) rw.WriteHeader(http.StatusBadGateway) + _, err = rw.Write([]byte("authentik starting...")) + if err != nil { + ws.log.WithError(err).Warning("failed to write error message") + } } func (ws *WebServer) proxyModifyResponse(r *http.Response) error { diff --git a/internal/web/web.go b/internal/web/web.go index 2c199711b..60ca4afed 100644 --- a/internal/web/web.go +++ b/internal/web/web.go @@ -11,6 +11,7 @@ import ( "github.com/pires/go-proxyproto" log "github.com/sirupsen/logrus" "goauthentik.io/internal/config" + "goauthentik.io/internal/gounicorn" "goauthentik.io/internal/outpost/proxyv2" ) @@ -27,9 +28,10 @@ type WebServer struct { m *mux.Router lh *mux.Router log *log.Entry + p *gounicorn.GoUnicorn } -func NewWebServer() *WebServer { +func NewWebServer(g *gounicorn.GoUnicorn) *WebServer { l := log.WithField("logger", "authentik.g.web") mainHandler := mux.NewRouter() if config.G.ErrorReporting.Enabled { @@ -46,6 +48,7 @@ func NewWebServer() *WebServer { m: mainHandler, lh: logginRouter, log: l, + p: g, } ws.configureStatic() ws.configureProxy() diff --git a/lifecycle/ak b/lifecycle/ak index d0beb5e15..f64320d98 100755 --- a/lifecycle/ak +++ b/lifecycle/ak @@ -49,7 +49,7 @@ elif [[ "$1" == "test" ]]; then elif [[ "$1" == "healthcheck" ]]; then mode=$(cat $MODE_FILE) if [[ $mode == "server" ]]; then - curl --user-agent "authentik Healthcheck" -I http://localhost:9000/-/health/ready/ + curl --user-agent "goauthentik.io lifecycle Healthcheck" -I http://localhost:9000/-/health/ready/ elif [[ $mode == "worker" ]]; then celery -A authentik.root.celery inspect ping -d celery@$HOSTNAME fi From 2b730dec54b2c67cb3a3d75529064d68c4a108c3 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 5 Oct 2021 22:22:54 +0200 Subject: [PATCH 25/25] release: 2021.9.6 --- .bumpversion.cfg | 2 +- .github/workflows/release-publish.yml | 20 +++++++++---------- authentik/__init__.py | 2 +- docker-compose.yml | 4 ++-- internal/constants/constants.go | 2 +- schema.yml | 2 +- web/src/constants.ts | 2 +- website/docs/installation/docker-compose.md | 4 ++-- .../outposts/manual-deploy-docker-compose.md | 4 ++-- .../docs/outposts/manual-deploy-kubernetes.md | 14 ++++++------- 10 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 9c432a0a8..7974f3b5b 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2021.9.5 +current_version = 2021.9.6 tag = True commit = True parse = (?P\d+)\.(?P\d+)\.(?P\d+)\-?(?P.*) diff --git a/.github/workflows/release-publish.yml b/.github/workflows/release-publish.yml index 70d4d9fe7..aaca47fa5 100644 --- a/.github/workflows/release-publish.yml +++ b/.github/workflows/release-publish.yml @@ -33,14 +33,14 @@ jobs: with: push: ${{ github.event_name == 'release' }} tags: | - beryju/authentik:2021.9.5, + beryju/authentik:2021.9.6, beryju/authentik:latest, - ghcr.io/goauthentik/server:2021.9.5, + ghcr.io/goauthentik/server:2021.9.6, ghcr.io/goauthentik/server:latest platforms: linux/amd64,linux/arm64 context: . - name: Building Docker Image (stable) - if: ${{ github.event_name == 'release' && !contains('2021.9.5', 'rc') }} + if: ${{ github.event_name == 'release' && !contains('2021.9.6', 'rc') }} run: | docker pull beryju/authentik:latest docker tag beryju/authentik:latest beryju/authentik:stable @@ -75,14 +75,14 @@ jobs: with: push: ${{ github.event_name == 'release' }} tags: | - beryju/authentik-proxy:2021.9.5, + beryju/authentik-proxy:2021.9.6, beryju/authentik-proxy:latest, - ghcr.io/goauthentik/proxy:2021.9.5, + ghcr.io/goauthentik/proxy:2021.9.6, ghcr.io/goauthentik/proxy:latest file: proxy.Dockerfile platforms: linux/amd64,linux/arm64 - name: Building Docker Image (stable) - if: ${{ github.event_name == 'release' && !contains('2021.9.5', 'rc') }} + if: ${{ github.event_name == 'release' && !contains('2021.9.6', 'rc') }} run: | docker pull beryju/authentik-proxy:latest docker tag beryju/authentik-proxy:latest beryju/authentik-proxy:stable @@ -117,14 +117,14 @@ jobs: with: push: ${{ github.event_name == 'release' }} tags: | - beryju/authentik-ldap:2021.9.5, + beryju/authentik-ldap:2021.9.6, beryju/authentik-ldap:latest, - ghcr.io/goauthentik/ldap:2021.9.5, + ghcr.io/goauthentik/ldap:2021.9.6, ghcr.io/goauthentik/ldap:latest file: ldap.Dockerfile platforms: linux/amd64,linux/arm64 - name: Building Docker Image (stable) - if: ${{ github.event_name == 'release' && !contains('2021.9.5', 'rc') }} + if: ${{ github.event_name == 'release' && !contains('2021.9.6', 'rc') }} run: | docker pull beryju/authentik-ldap:latest docker tag beryju/authentik-ldap:latest beryju/authentik-ldap:stable @@ -175,7 +175,7 @@ jobs: SENTRY_PROJECT: authentik SENTRY_URL: https://sentry.beryju.org with: - version: authentik@2021.9.5 + version: authentik@2021.9.6 environment: beryjuorg-prod sourcemaps: './web/dist' url_prefix: '~/static/dist' diff --git a/authentik/__init__.py b/authentik/__init__.py index ba9f6e8ca..1316b287c 100644 --- a/authentik/__init__.py +++ b/authentik/__init__.py @@ -1,3 +1,3 @@ """authentik""" -__version__ = "2021.9.5" +__version__ = "2021.9.6" ENV_GIT_HASH_KEY = "GIT_BUILD_HASH" diff --git a/docker-compose.yml b/docker-compose.yml index 2a4279f0b..a1ef7c682 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,7 +17,7 @@ services: image: redis:alpine restart: unless-stopped server: - image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2021.9.5} + image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2021.9.6} restart: unless-stopped command: server environment: @@ -38,7 +38,7 @@ services: - "0.0.0.0:9000:9000" - "0.0.0.0:9443:9443" worker: - image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2021.9.5} + image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2021.9.6} restart: unless-stopped command: worker environment: diff --git a/internal/constants/constants.go b/internal/constants/constants.go index 9a0e220cf..adf024374 100644 --- a/internal/constants/constants.go +++ b/internal/constants/constants.go @@ -17,4 +17,4 @@ func OutpostUserAgent() string { return fmt.Sprintf("authentik-outpost@%s (build=%s)", VERSION, BUILD()) } -const VERSION = "2021.9.5" +const VERSION = "2021.9.6" diff --git a/schema.yml b/schema.yml index fb159574f..1097629c9 100644 --- a/schema.yml +++ b/schema.yml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: title: authentik - version: 2021.9.5 + version: 2021.9.6 description: Making authentication simple. contact: email: hello@beryju.org diff --git a/web/src/constants.ts b/web/src/constants.ts index a783d832d..965acd582 100644 --- a/web/src/constants.ts +++ b/web/src/constants.ts @@ -3,7 +3,7 @@ export const SUCCESS_CLASS = "pf-m-success"; export const ERROR_CLASS = "pf-m-danger"; export const PROGRESS_CLASS = "pf-m-in-progress"; export const CURRENT_CLASS = "pf-m-current"; -export const VERSION = "2021.9.5"; +export const VERSION = "2021.9.6"; export const PAGE_SIZE = 20; export const TITLE_DEFAULT = "authentik"; export const ROUTE_SEPARATOR = ";"; diff --git a/website/docs/installation/docker-compose.md b/website/docs/installation/docker-compose.md index 40d98c64a..50d7402ee 100644 --- a/website/docs/installation/docker-compose.md +++ b/website/docs/installation/docker-compose.md @@ -12,9 +12,9 @@ This installation method is for test-setups and small-scale productive setups. ## Preparation -Download the latest `docker-compose.yml` from [here](https://raw.githubusercontent.com/goauthentik/authentik/version/2021.9.5/docker-compose.yml). Place it in a directory of your choice. +Download the latest `docker-compose.yml` from [here](https://raw.githubusercontent.com/goauthentik/authentik/version/2021.9.6/docker-compose.yml). Place it in a directory of your choice. -To optionally deploy a different version run `echo AUTHENTIK_TAG=2021.9.5 >> .env` +To optionally deploy a different version run `echo AUTHENTIK_TAG=2021.9.6 >> .env` If this is a fresh authentik install run the following commands to generate a password: diff --git a/website/docs/outposts/manual-deploy-docker-compose.md b/website/docs/outposts/manual-deploy-docker-compose.md index 0b76fc711..767e5d8a2 100644 --- a/website/docs/outposts/manual-deploy-docker-compose.md +++ b/website/docs/outposts/manual-deploy-docker-compose.md @@ -13,7 +13,7 @@ version: "3.5" services: authentik_proxy: - image: ghcr.io/goauthentik/proxy:2021.9.5 + image: ghcr.io/goauthentik/proxy:2021.9.6 # Optionally specify which networks the container should be # might be needed to reach the core authentik server # networks: @@ -40,7 +40,7 @@ version: "3.5" services: authentik_ldap: - image: ghcr.io/goauthentik/ldap:2021.9.5 + image: ghcr.io/goauthentik/ldap:2021.9.6 # Optionally specify which networks the container should be # might be needed to reach the core authentik server # networks: diff --git a/website/docs/outposts/manual-deploy-kubernetes.md b/website/docs/outposts/manual-deploy-kubernetes.md index 45faa447f..11f4fc919 100644 --- a/website/docs/outposts/manual-deploy-kubernetes.md +++ b/website/docs/outposts/manual-deploy-kubernetes.md @@ -14,7 +14,7 @@ metadata: app.kubernetes.io/instance: __OUTPOST_NAME__ app.kubernetes.io/managed-by: goauthentik.io app.kubernetes.io/name: authentik-proxy - app.kubernetes.io/version: 2021.9.5 + app.kubernetes.io/version: 2021.9.6 name: authentik-outpost-api stringData: authentik_host: "__AUTHENTIK_URL__" @@ -29,7 +29,7 @@ metadata: app.kubernetes.io/instance: __OUTPOST_NAME__ app.kubernetes.io/managed-by: goauthentik.io app.kubernetes.io/name: authentik-proxy - app.kubernetes.io/version: 2021.9.5 + app.kubernetes.io/version: 2021.9.6 name: authentik-outpost spec: ports: @@ -54,7 +54,7 @@ metadata: app.kubernetes.io/instance: __OUTPOST_NAME__ app.kubernetes.io/managed-by: goauthentik.io app.kubernetes.io/name: authentik-proxy - app.kubernetes.io/version: 2021.9.5 + app.kubernetes.io/version: 2021.9.6 name: authentik-outpost spec: selector: @@ -62,14 +62,14 @@ spec: app.kubernetes.io/instance: __OUTPOST_NAME__ app.kubernetes.io/managed-by: goauthentik.io app.kubernetes.io/name: authentik-proxy - app.kubernetes.io/version: 2021.9.5 + app.kubernetes.io/version: 2021.9.6 template: metadata: labels: app.kubernetes.io/instance: __OUTPOST_NAME__ app.kubernetes.io/managed-by: goauthentik.io app.kubernetes.io/name: authentik-proxy - app.kubernetes.io/version: 2021.9.5 + app.kubernetes.io/version: 2021.9.6 spec: containers: - env: @@ -88,7 +88,7 @@ spec: secretKeyRef: key: authentik_host_insecure name: authentik-outpost-api - image: ghcr.io/goauthentik/proxy:2021.9.5 + image: ghcr.io/goauthentik/proxy:2021.9.6 name: proxy ports: - containerPort: 9000 @@ -110,7 +110,7 @@ metadata: app.kubernetes.io/instance: __OUTPOST_NAME__ app.kubernetes.io/managed-by: goauthentik.io app.kubernetes.io/name: authentik-proxy - app.kubernetes.io/version: 2021.9.5 + app.kubernetes.io/version: 2021.9.6 name: authentik-outpost spec: rules: