# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2024, Yaal Coop
# This file is distributed under the same license as the canaille package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: canaille 0.0.56\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-12 22:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: ta\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: ../development/changelog.rst:2 3fb33c37ddc0459280f3c58be943008e
msgid "Release notes"
msgstr ""

#: ../development/changelog.rst:4 67e645fac3b646bba12959afa71710cc
msgid "All notable changes to this project will be documented in there."
msgstr ""

#: ../development/changelog.rst:6 6c5d0b8435cf4001afa1fe74104daf7a
msgid ""
"The format is based on `Keep a Changelog <https://keepachangelog.com/"
"en/1.0.0/>`_, and this project adheres to `Semantic Versioning <https://"
"semver.org/spec/v2.0.0.html>`_."
msgstr ""

#: ../../CHANGES.rst:2 c415689d242946298da972c97d5bb0c4
msgid "[0.0.57] - Unreleased"
msgstr ""

#: ../../CHANGES.rst:5 ../../CHANGES.rst:34 ../../CHANGES.rst:62
#: ../../CHANGES.rst:81 ../../CHANGES.rst:88 ../../CHANGES.rst:107
#: ../../CHANGES.rst:167 ../../CHANGES.rst:193 ../../CHANGES.rst:208
#: ../../CHANGES.rst:257 ../../CHANGES.rst:283 ../../CHANGES.rst:302
#: ../../CHANGES.rst:310 ../../CHANGES.rst:319 ../../CHANGES.rst:345
#: ../../CHANGES.rst:380 ../../CHANGES.rst:406 ../../CHANGES.rst:455
#: ../../CHANGES.rst:483 ../../CHANGES.rst:513 ../../CHANGES.rst:569
#: ../../CHANGES.rst:602 ../../CHANGES.rst:623 ../../CHANGES.rst:633
#: ../../CHANGES.rst:656 ../../CHANGES.rst:723 ../../CHANGES.rst:761
#: ../../CHANGES.rst:778 ../../CHANGES.rst:814 91a8054efa234209906812cdd41bd586
#: 2e9453d4722144fd9ad7f53b28a7cb37
msgid "Added"
msgstr ""

#: ../../CHANGES.rst:6 cdab69b7537c452caa3eadb572993a40
msgid "Multi-factor authentication :issue:`47`"
msgstr ""

#: ../../CHANGES.rst:7 a90b270f7e144a4b81babbac96f5ff22
msgid ""
":attr:`~canaille.core.configuration.CoreSettings.OTP_METHOD` and :attr:"
"`~canaille.core.configuration.CoreSettings.EMAIL_OTP` and :attr:`~canaille."
"core.configuration.CoreSettings.SMS_OTP` and :attr:`~canaille.core."
"configuration.CoreSettings.SMPP` :issue:`47`"
msgstr ""

#: ../../CHANGES.rst:12 05060126fea740ef82fba8246132aa6e
msgid "Password compromission check :issue:`179`"
msgstr ""

#: ../../CHANGES.rst:13 a90b270f7e144a4b81babbac96f5ff22
msgid ""
":attr:`~canaille.core.configuration.CoreSettings.ADMIN_EMAIL` and :attr:"
"`~canaille.core.configuration.CoreSettings."
"ENABLE_PASSWORD_COMPROMISSION_CHECK` and :attr:`~canaille.core.configuration."
"CoreSettings.PASSWORD_COMPROMISSION_CHECK_API_URL` :issue:`179`"
msgstr ""

#: ../../CHANGES.rst:17 2cfcbdba2e9541dbab610bc724a2683a
msgid "Implement OIDC client_credentials flow. :issue:`207`"
msgstr ""

#: ../../CHANGES.rst:18 1e36a8464f6045708cf07b39bcdfea1c
msgid "Button in the client admin page to create client tokens."
msgstr ""

#: ../../CHANGES.rst:19 c69d8b01e4194d5b9268b84ab81849d6
msgid "Basic SCIM implementation. :issue:`116` :pr:`197`"
msgstr ""

#: ../../CHANGES.rst:22 ../../CHANGES.rst:42 ../../CHANGES.rst:55
#: ../../CHANGES.rst:67 ../../CHANGES.rst:92 ../../CHANGES.rst:100
#: ../../CHANGES.rst:148 ../../CHANGES.rst:174 ../../CHANGES.rst:226
#: ../../CHANGES.rst:263 ../../CHANGES.rst:332 ../../CHANGES.rst:350
#: ../../CHANGES.rst:388 ../../CHANGES.rst:427 ../../CHANGES.rst:462
#: ../../CHANGES.rst:505 ../../CHANGES.rst:609 ../../CHANGES.rst:663
#: ../../CHANGES.rst:695 ../../CHANGES.rst:709 254357b217fe4a309d66a400497a104a
msgid "Changed"
msgstr ""

#: ../../CHANGES.rst:23 bb196cd8528b48628628ab53c5288b49
msgid ""
"PostgreSQL and MySQL extras does not rely on libraries that need to be "
"compiled."
msgstr ""

#: ../../CHANGES.rst:24 c36865875c264bb4a34d614ea2be23cf
msgid ""
"``.env`` files are not loaded by default. The ``ENV_FILE`` env var must be "
"passed so ``.env`` files are loaded."
msgstr ""

#: ../../CHANGES.rst:27 045b041136be49de8d54674ad57fea87
msgid "[0.0.56] - 2024-11-07"
msgstr ""

#: ../../CHANGES.rst:30 ../../CHANGES.rst:72 ../../CHANGES.rst:111
#: ../../CHANGES.rst:119 ../../CHANGES.rst:127 ../../CHANGES.rst:134
#: ../../CHANGES.rst:141 ../../CHANGES.rst:155 ../../CHANGES.rst:185
#: ../../CHANGES.rst:198 ../../CHANGES.rst:216 ../../CHANGES.rst:235
#: ../../CHANGES.rst:243 ../../CHANGES.rst:269 ../../CHANGES.rst:277
#: ../../CHANGES.rst:297 ../../CHANGES.rst:327 ../../CHANGES.rst:359
#: ../../CHANGES.rst:367 ../../CHANGES.rst:393 ../../CHANGES.rst:413
#: ../../CHANGES.rst:437 ../../CHANGES.rst:447 ../../CHANGES.rst:468
#: ../../CHANGES.rst:476 ../../CHANGES.rst:499 ../../CHANGES.rst:522
#: ../../CHANGES.rst:534 ../../CHANGES.rst:543 ../../CHANGES.rst:552
#: ../../CHANGES.rst:561 ../../CHANGES.rst:581 ../../CHANGES.rst:588
#: ../../CHANGES.rst:638 ../../CHANGES.rst:646 ../../CHANGES.rst:671
#: ../../CHANGES.rst:679 ../../CHANGES.rst:687 ../../CHANGES.rst:700
#: ../../CHANGES.rst:714 ../../CHANGES.rst:746 ../../CHANGES.rst:769
#: ../../CHANGES.rst:800 13ee0de3f7db4046b8399917e8d52e0b
#: 839f52c15ed94f0ba4a9356f392f728b
msgid "Fixed"
msgstr ""

#: ../../CHANGES.rst:31 10c707b06b884b168b2dd26bffd7bf76
msgid ""
"With LDAP backend, updating another user groups could result in a permission "
"lost for the editor. :issue:`202`"
msgstr ""

#: ../../CHANGES.rst:35 efa1fc20329f42918fe6a530617cf102
msgid ""
":attr:`~canaille.core.configuration.CoreSettings.MAX_PASSWORD_LENGTH` and :"
"attr:`~canaille.core.configuration.CoreSettings.MIN_PASSWORD_LENGTH` "
"configuration options :issue:`174`"
msgstr ""

#: ../../CHANGES.rst:37 cdab69b7537c452caa3eadb572993a40
msgid "Password strength visual indicator. :issue:`174`"
msgstr ""

#: ../../CHANGES.rst:38 2ae6bad543d64621886630d3db7832e6
msgid "Security events logs. :issue:`177`"
msgstr ""

#: ../../CHANGES.rst:39 40ab5f1ed3bc406fb662d0025e5b3212
msgid "Support for Python 3.13. :pr:`186`"
msgstr ""

#: ../../CHANGES.rst:43 c7940e351aac4939b964ccb80cebd616
msgid "Update to `HTMX` 2.0.3. :pr:`184`"
msgstr ""

#: ../../CHANGES.rst:44 dfc1569ae0ec412d86503a0695522fa5
msgid "Migrate the Python project management tool from poetry to uv. :pr:`187`"
msgstr ""

#: ../../CHANGES.rst:45 40c97bec2553487fa62efc486d3ee444
msgid ""
"The ``sql`` package extra is now split between ``sqlite``, ``postgresql`` "
"and ``mysql``."
msgstr ""

#: ../../CHANGES.rst:48 ../../CHANGES.rst:398 ../../CHANGES.rst:806
#: bc1a20b5783a4fe38fa201438a8075e5
msgid "Removed"
msgstr ""

#: ../../CHANGES.rst:49 3f97d00692d047dbbecb5c18a2d45b07
msgid "End support for Python 3.9. :pr:`179`"
msgstr ""

#: ../../CHANGES.rst:52 4a57056601f148969254d2f049e0f460
msgid "[0.0.55] - 2024-08-30"
msgstr ""

#: ../../CHANGES.rst:56 a037ad5da20049ad82e9f9b0d766cfbb
msgid "Use poetry-core build backend. :pr:`178`"
msgstr ""

#: ../../CHANGES.rst:59 d6bf96b8e5cc4a6f8e099b48c1951a6a
msgid "[0.0.54] - 2024-07-25"
msgstr ""

#: ../../CHANGES.rst:63 062bcc176aac499384187fcb06e2a00b
msgid ""
"Group member removal can be achieved from the group edition page. :issue:"
"`192`"
msgstr ""

#: ../../CHANGES.rst:64 8680469549c74d37a52b1c6252c74d57
msgid "Model management commands. :issue:`117` :issue:`54`"
msgstr ""

#: ../../CHANGES.rst:68 c19428c67d8f4d198d0ab97defe14fb3
msgid "Model `identifier_attributes` are fixed."
msgstr ""

#: ../../CHANGES.rst:69 571f38b1484b43e2beed6f33eb675700
msgid "Bump to `HTMX` 1.9.12. :pr:`172`"
msgstr ""

#: ../../CHANGES.rst:74 9e54da898699471194477836791f08a6
msgid "Dark theme colors for better readability."
msgstr ""

#: ../../CHANGES.rst:75 4e0f2a8e03a447e59cb0a2b0e6d208f1
msgid ""
"Crash for passwordless users at login when no SMTP server was configured."
msgstr ""

#: ../../CHANGES.rst:78 a9273241db7e4137bac5973b20e3ec5d
msgid "[0.0.53] - 2024-04-22"
msgstr ""

#: ../../CHANGES.rst:82 17fbf739a68a4e59b5cc6da8befa1c6f
msgid ""
"`env_prefix` `create_app`` variable can select the environment var prefix."
msgstr ""

#: ../../CHANGES.rst:85 7bdc8f732053463b95353cdf5c994838
msgid "[0.0.52] - 2024-04-22"
msgstr ""

#: ../../CHANGES.rst:89 bc7d1037cdfd40a69044f465467f6834
msgid "`env_file` create_app variable can customize/disable the .env file."
msgstr ""

#: ../../CHANGES.rst:93 9685a5e5a13147f093ac57e2039fe11b
msgid "Locked users cannot be impersonated anymore."
msgstr ""

#: ../../CHANGES.rst:94 1b83a24a97384c2faab67e915701e6b2
msgid "Minimum Python requirement is 3.9."
msgstr ""

#: ../../CHANGES.rst:97 e88f01e3f89f45f2a63b456f8e304d3d
msgid "[0.0.51] - 2024-04-09"
msgstr ""

#: ../../CHANGES.rst:101 aae3d126989840578ec2b08058aad688
msgid "Display the menu bar on error pages."
msgstr ""

#: ../../CHANGES.rst:104 22b11dc18595450fa5e7fe5f35824ebe
msgid "[0.0.50] - 2024-04-09"
msgstr ""

#: ../../CHANGES.rst:108 fc1bc503759c4beb943e9dcbf0c4a9cf
msgid "Sign in/out events are logged in. :issue:`177`"
msgstr ""

#: ../../CHANGES.rst:112 cfe0182123c94bcc9ee847739bd2e114
msgid "`HTMX` and `JAVASCRIPT` configuration settings."
msgstr ""

#: ../../CHANGES.rst:113 3bc7c83763d34549bac91df86a22b3a0
msgid "Compatibility with old sessions IDs."
msgstr ""

#: ../../CHANGES.rst:116 cdee0bee34024d21bace2d77ff637ed9
msgid "[0.0.49] - 2024-04-08"
msgstr ""

#: ../../CHANGES.rst:120 f9c9585c305d47628adffcae287229d2
msgid "LDAP user group removal."
msgstr ""

#: ../../CHANGES.rst:121 c25c5c6a9cca4061be6502cae5e86ba2
msgid ""
"Display an error message when trying to remove the last user from a group."
msgstr ""

#: ../../CHANGES.rst:124 5e0c66b55801444497954839297b97eb
msgid "[0.0.48] - 2024-04-08"
msgstr ""

#: ../../CHANGES.rst:128 bd9920a130844ee897863a6b649484e2
msgid "LDAP ``objectClass`` guessing exception."
msgstr ""

#: ../../CHANGES.rst:131 93cf829932204311ba399ae713aff29f
msgid "[0.0.47] - 2024-04-08"
msgstr ""

#: ../../CHANGES.rst:135 b7a5d3351a334b0592b12373e1c7afa6
msgid "Lazy permission loading exception."
msgstr ""

#: ../../CHANGES.rst:138 c6000ae4f0fc4d488ab180c3aa9eb144
msgid "[0.0.46] - 2024-04-08"
msgstr ""

#: ../../CHANGES.rst:142 db4476f22ad049f49833696323eb1b33
msgid ""
"Saving an object with the LDAP backend keeps the ``objectClass`` un-managed "
"by Canaille. :pr:`171`"
msgstr ""

#: ../../CHANGES.rst:145 d7117b0322b549ff87b73b8e4c839915
msgid "[0.0.45] - 2024-04-04"
msgstr ""

#: ../../CHANGES.rst:149 9690ab893eef4290a52b1137f24b9be8
msgid "Internal indexation mechanism of ``MemoryModel``."
msgstr ""

#: ../../CHANGES.rst:152 be79650410904879b53da2c62ac092d5
msgid "[0.0.44] - 2024-03-29"
msgstr ""

#: ../../CHANGES.rst:156 1c2533bc36b548c59361d7b3e304cce6
msgid "Fix the default LDAP ``USER_FILTER`` value."
msgstr ""

#: ../../CHANGES.rst:157 c429e79bd5aa46edb7b4cd1bd87c3ad8
msgid "Fix the OIDC feature detection."
msgstr ""

#: ../../CHANGES.rst:160 51a43a574cc943b5912effdaa67f8690
msgid "[0.0.43] - 2024-03-29"
msgstr ""

#: ../../CHANGES.rst:164 ../../CHANGES.rst:423 02e8eccba3b74e889a68c78dc51e0a24
msgid "Configuration files must be updated."
msgstr ""

#: ../../CHANGES.rst:169 a39fba5f25754fdc9f0f339142ff0320
msgid "Add ``created`` and ``last_modified`` datetime for all models."
msgstr ""

#: ../../CHANGES.rst:170 b1e37ddf62994798a70a23cff76ed4d6
msgid "Sitemap to the documentation. :pr:`169`"
msgstr ""

#: ../../CHANGES.rst:171 54cf20bc59af4634af6b3f2d0e10c5e9
msgid ""
"Configuration management with `pydantic-settings`. :issue:`138` :pr:`170`"
msgstr ""

#: ../../CHANGES.rst:176 689b4f88ba4b43db8c8b1a7bff0aebe6
msgid "Use default Python logging configuration format. :issue:`188` :pr:`165`"
msgstr ""

#: ../../CHANGES.rst:177 7d18c66450654e25a65749ea273b859d
msgid "Bump to `HTMX` 1.99.11. :pr:`166`"
msgstr ""

#: ../../CHANGES.rst:178 9d053f12577548bc8cff1add00376bae
msgid ""
"Use the standard tomllib Python module instead of `toml` starting from "
"Python 3.11. :pr:`167`"
msgstr ""

#: ../../CHANGES.rst:179 fd8c1c0314b2465c9cacb4ba593eae77
msgid "Use shibuya as the documentation theme :pr:`168`"
msgstr ""

#: ../../CHANGES.rst:182 abc0b3ba739e4f99866d02027d8128d2
msgid "[0.0.42] - 2023-12-29"
msgstr ""

#: ../../CHANGES.rst:187 74e8932123b744b2809d370b36980326
msgid "Avoid to fail on imports if ``cryptography`` is missing."
msgstr ""

#: ../../CHANGES.rst:190 41f209b7a9054599b7b71d4fab3afe8f
msgid "[0.0.41] - 2023-12-25"
msgstr ""

#: ../../CHANGES.rst:195 77ff8fdeadf94e2f8696b2f5b9bd9349
msgid ""
"OIDC support for the ``create`` value of the ``prompt`` parameter. :issue:"
"`185` :pr:`164`"
msgstr ""

#: ../../CHANGES.rst:200 8940d9836a9f46a09613c3646e1d55f8
msgid ""
"Correctly set up :attr:`~canaille.oidc.basemodels.Client.audience` during "
"OIDC dynamic registration."
msgstr ""

#: ../../CHANGES.rst:201 bb9a9230771445b6a7c93f042fb289ee
msgid ""
"``post_logout_redirect_uris`` was ignored during OIDC dynamic registration."
msgstr ""

#: ../../CHANGES.rst:202 b5d0341447ef443b969d2a48457442f2
msgid "Group field error prevented the registration form validation."
msgstr ""

#: ../../CHANGES.rst:205 7bcad6150cbc4883817538eb23bed3bd
msgid "[0.0.40] - 2023-12-22"
msgstr ""

#: ../../CHANGES.rst:210 aae4204166c443f99e04d84842dd6dd9
msgid "The ``THEME`` setting can be a relative path."
msgstr ""

#: ../../CHANGES.rst:213 26224cfa5ee647a2b15239a78065f5f7
msgid "[0.0.39] - 2023-12-15"
msgstr ""

#: ../../CHANGES.rst:218 14b2b67c379045d681ee712797f44328
msgid "Crash when no ACL were defined."
msgstr ""

#: ../../CHANGES.rst:219 38649598ac954d29843b54b15343dd15
msgid "OIDC Userinfo endpoint is also available in POST."
msgstr ""

#: ../../CHANGES.rst:220 ed1da2958a1646fd82c70171a5c04317
msgid "Fix redirection after password reset. :issue:`159`"
msgstr ""

#: ../../CHANGES.rst:223 8f2bc47f69554f539aa2836958029d59
msgid "[0.0.38] - 2023-12-15"
msgstr ""

#: ../../CHANGES.rst:228 24f252671c9a4a3590e94e5e563e4d19
msgid "Convert all the `PNG` pictures in `Webp`. :pr:`162`"
msgstr ""

#: ../../CHANGES.rst:229 8a1d423f79f749868c06a775e9c21bd2
msgid "Update to Flask 3. :issue:`161` :pr:`163`"
msgstr ""

#: ../../CHANGES.rst:232 9d53638e5933499baafec12390f02e23
msgid "[0.0.37] - 2023-12-01"
msgstr ""

#: ../../CHANGES.rst:237 5ed255dd094a4a3aae1b75edf54001ad
msgid "Handle 4xx and 5xx error codes with HTMX. :issue:`171` :pr:`161`"
msgstr ""

#: ../../CHANGES.rst:240 26d16685ada341a29bf6ee6e98997128
msgid "[0.0.36] - 2023-12-01"
msgstr ""

#: ../../CHANGES.rst:245 2cfddfd6843e4cbfb1b645c84bc70322
msgid "Avoid crashing when LDAP groups references unexisting users."
msgstr ""

#: ../../CHANGES.rst:246 f5714a32e81841e29f2619f6ee5464e8
msgid ""
"Password reset and initialization mails were only sent to the preferred user "
"email address."
msgstr ""

#: ../../CHANGES.rst:248 4e121ada1cc24b7b8051d085b0ce464b
msgid ""
"Password reset and initialization mails were not sent at all the user "
"addresses if one email address could not be reached."
msgstr ""

#: ../../CHANGES.rst:250 c5fc8c86d3df4732b3a06f70dd89af18
msgid "Password comparison was too permissive on login."
msgstr ""

#: ../../CHANGES.rst:251 36f936a6dd8c41c5bc833d928f347321
msgid "Encrypt passwords in the SQL backend."
msgstr ""

#: ../../CHANGES.rst:254 76befacfb135435fbee6ee0fe07f40e5
msgid "[0.0.35] - 2023-11-25"
msgstr ""

#: ../../CHANGES.rst:259 14d361d80e4c429f929b943d3321e895
msgid ""
"Refresh token grant supports other client authentication methods. :pr:`157`"
msgstr ""

#: ../../CHANGES.rst:260 c52cda2685214bcab533db539acee007
msgid "Implement a SQLAlchemy backend. :issue:`30` :pr:`158`"
msgstr ""

#: ../../CHANGES.rst:265 57670f55b7644a0888ab65cd2da2fd8c
msgid "Model attributes cardinality is closer to SCIM model. :pr:`155`"
msgstr ""

#: ../../CHANGES.rst:266 f4ef25b7b38b42a48fb2a32c5cd8888f
msgid "Bump to `HTMX` 1.9.9. :pr:`159`"
msgstr ""

#: ../../CHANGES.rst:271 49b0b7da40204fdeaf40c5281235c2a6
msgid "Disable `HTMX` boosting during the OIDC dance. :pr:`160`"
msgstr ""

#: ../../CHANGES.rst:274 db372dee122e4b4fb18c2c99dd056ce2
msgid "[0.0.34] - 2023-10-02"
msgstr ""

#: ../../CHANGES.rst:279 a4b5211e96894c5d9d51b2630d6aea17
msgid ""
"Canaille installations without account lockabilty could not delete users. :"
"pr:`153`"
msgstr ""

#: ../../CHANGES.rst:285 4f4ca04b08a04dcb8f6a2eb6605f0e13
msgid ""
"If users register or authenticate during a OAuth Authorization phase, they "
"get redirected back to that page afterwards. :issue:`168` :pr:`151`"
msgstr ""

#: ../../CHANGES.rst:288 298ffe26093441918be8b38d13f0cc58
msgid ""
"The `flask-babel` and `pytz` libraries are now part of the `front` packaging "
"extras."
msgstr ""

#: ../../CHANGES.rst:289 ccb502180d634f11ad173619af1b68d8
msgid "Bump to `fomantic-ui` 2.9.3. :pr:`152`"
msgstr ""

#: ../../CHANGES.rst:290 7413676f512d4473972484920ff5f060
msgid "Bump to `HTMX` 1.9.6. :pr:`154`"
msgstr ""

#: ../../CHANGES.rst:291 7905327465c44c09b2a10854abe79960
msgid "Support for Python 3.12. :pr:`155`"
msgstr ""

#: ../../CHANGES.rst:294 808e57e560f74a25b60029fbd6531d2e
msgid "[0.0.33] - 2023-08-26"
msgstr ""

#: ../../CHANGES.rst:299 1179dc27648248188fdecf5696fd5045
msgid "OIDC jwks endpoint do not return empty `kid` claim."
msgstr ""

#: ../../CHANGES.rst:304 b8b2caca239b4b609143ffd267522a16
msgid "Documentation details on the Canaille models."
msgstr ""

#: ../../CHANGES.rst:307 dd35ed0e27664b6b954e9b39881f14bc
msgid "[0.0.32] - 2023-08-17"
msgstr ""

#: ../../CHANGES.rst:312 bdcae061315a4e92a6bc1a48475cb351
msgid "Additional inmemory backend. :issue:`30` :pr:`149`"
msgstr ""

#: ../../CHANGES.rst:313 c39cbed721254ce5ad9c250de1e7ea41
msgid "Installation extras. :issue:`167` :pr:`150`"
msgstr ""

#: ../../CHANGES.rst:316 5311648e4c714ed29e89e9644167f963
msgid "[0.0.31] - 2023-08-15"
msgstr ""

#: ../../CHANGES.rst:321 a6a4b510a0ac4b4ebeb9160510f72d77
msgid ""
"Configuration option to disable the forced usage of OIDC `nonce` parameter. :"
"pr:`143`"
msgstr ""

#: ../../CHANGES.rst:322 37eb24ef005e44da8ae0f4c48bda766c
msgid "Validate phone numbers with a regex. :pr:`146`"
msgstr ""

#: ../../CHANGES.rst:323 2be2120a0500430a8d854d1b8f19a0bf
msgid "Email verification. :issue:`41` :pr:`147`"
msgstr ""

#: ../../CHANGES.rst:324 d3be95492ef348efa77976515d4ffca9
msgid "Account registration. :issue:`55` :pr:`133` :pr:`148`"
msgstr ""

#: ../../CHANGES.rst:329 1a3da0153c2b451d99665d2b61c512f2
msgid "The `check` command uses the default configuration values."
msgstr ""

#: ../../CHANGES.rst:334 15f35fa96af04e508b1a6448d866cb5f
msgid "Modals do not need use Javascript at the moment. :issue:`158` :pr:`144`"
msgstr ""

#: ../../CHANGES.rst:337 add3188842de44b691dfbe3152546f7b
msgid "[0.0.30] - 2023-07-06"
msgstr ""

#: ../../CHANGES.rst:341 b96e981450334eee84128d7dffb40d8f
msgid ""
"Configuration files must be updated. Check the new format with ``git diff "
"0.0.29 0.0.30 canaille/conf/config.sample.toml``"
msgstr ""

#: ../../CHANGES.rst:347 ab83051dda0b48d185846e49011f2429
msgid "Configuration option to disable Javascript. :pr:`141`"
msgstr ""

#: ../../CHANGES.rst:352 85fb804c891f444c9de116e6e4771526
msgid "The configuration parameter ``USER_FILTER`` is parsed with Jinja."
msgstr ""

#: ../../CHANGES.rst:353 42d91f7cf5a3438a8bcb0bd5c193f1ea
msgid ""
"Configuration use ``PRIVATE_KEY_FILE`` instead of ``PRIVATE_KEY`` and "
"``PUBLIC_KEY_FILE`` instead of ``PUBLIC_KEY``."
msgstr ""

#: ../../CHANGES.rst:356 30736e0e4b854b46940e80c38023946a
msgid "[0.0.29] - 2023-06-30"
msgstr ""

#: ../../CHANGES.rst:361 89d319fb81e148cb8f82f4b1a5a5390c
msgid "Disabled `HTMX` boosting on OIDC forms to avoid errors."
msgstr ""

#: ../../CHANGES.rst:364 68d32ee84fa642dfbf358ef907193eb8
msgid "[0.0.28] - 2023-06-30"
msgstr ""

#: ../../CHANGES.rst:369 5490daf53fd144c0b6b360e90bf5667b
msgid "A template variable was misnamed."
msgstr ""

#: ../../CHANGES.rst:372 c65a251ed68a49beaff42740c12ce76a
msgid "[0.0.27] - 2023-06-29"
msgstr ""

#: ../../CHANGES.rst:376 ccf84fb0d4cd47058c3849498bd92259
msgid ""
"Configuration files must be updated. Check the new format with ``git diff "
"0.0.26 0.0.27 canaille/conf/config.sample.toml``"
msgstr ""

#: ../../CHANGES.rst:382 0856562aad23492aa6efc7f6e4bf8f90
msgid ""
"Configuration entries can be loaded from files if the entry key has a "
"*_FILE* suffix and the entry value is the path to the file. :issue:`134` :pr:"
"`134`"
msgstr ""

#: ../../CHANGES.rst:384 24fa209262e04bcbb46c2ab7c881fbaa
msgid "Field list support. :issue:`115` :pr:`136`"
msgstr ""

#: ../../CHANGES.rst:385 eaff808f9ce745c59a1b373ab0ef90ab
msgid "Pages are boosted with `HTMX`. :issue:`144` :issue:`145` :pr:`137`"
msgstr ""

#: ../../CHANGES.rst:390 8afcdb0ddd8f4e6c9941315ff1b06538
msgid "Bump to jquery 3.7.0. :pr:`138`"
msgstr ""

#: ../../CHANGES.rst:395 a6e1f4b8a72f4500ab437a86f6e98d06
msgid ""
"Profile edition when the user RDN was not ``uid``. :issue:`148` :pr:`139`"
msgstr ""

#: ../../CHANGES.rst:400 cfcf7ee77bb84df1bcd780df223e9044
msgid "Stop support for Python 3.7. :pr:`131`"
msgstr ""

#: ../../CHANGES.rst:403 42eab7328c604747ad6bde0067cb6603
msgid "[0.0.26] - 2023-06-03"
msgstr ""

#: ../../CHANGES.rst:408 b621a029c6ec420d8708f0ddd4b49c85
msgid ""
"Implemented account expiration based on OpenLDAP ppolicy overlay. Needs "
"OpenLDAP 2.5+. :issue:`13` :pr:`118`"
msgstr ""

#: ../../CHANGES.rst:410 05f5b0808e74429b92bf61fa570014cf
msgid "Timezone configuration entry. :issue:`137` :pr:`130`"
msgstr ""

#: ../../CHANGES.rst:415 d7e71d1ce6704911b7e5094538cc1084
msgid "Avoid setting ``None`` in JWT claims when they have no value."
msgstr ""

#: ../../CHANGES.rst:416 e16dcca3b764486d874401ba65e22f78
msgid "Display password recovery button on OIDC login page. :pr:`129`"
msgstr ""

#: ../../CHANGES.rst:419 dcbd97e0bc4f44babcdc9ad9a503c162
msgid "[0.0.25] - 2023-05-05"
msgstr ""

#: ../../CHANGES.rst:424 4109765130284304994ae405858bdd3c
msgid ""
"Check the new format with ``git diff 0.0.25 0.0.24 canaille/conf/config."
"sample.toml``"
msgstr ""

#: ../../CHANGES.rst:429 c4645c08f789400bba029897871bb828
msgid ""
"Renamed user model attributes to match SCIM naming convention. :pr:`123`"
msgstr ""

#: ../../CHANGES.rst:430 3c58d21fdc81418e8ee43179c2d6384f
msgid "Moved OIDC related configuration entries in ``OIDC``."
msgstr ""

#: ../../CHANGES.rst:431 5b002906414e41448a3fadea87d71e45
msgid "Moved ``LDAP`` configuration entry to ``BACKENDS.LDAP``."
msgstr ""

#: ../../CHANGES.rst:432 d58c113094474cf3b82e8a3303202bb6
msgid "Bumped to `HTMX` 1.9.0. :pr:`124`"
msgstr ""

#: ../../CHANGES.rst:433 3bbdffb495f74fccbdb9eeb78a8eaf81
msgid ""
"ACL filters are no more LDAP filters but user attribute mappings. :pr:`125`"
msgstr ""

#: ../../CHANGES.rst:434 0d3ea4f8df2542e0a7da5029159f31e0
msgid "Bumped to `HTMX` 1.9.2. :pr:`127`"
msgstr ""

#: ../../CHANGES.rst:439 71139e5ab6e34c2a87d51d3d04c0dbc0
msgid "``OIDC.JWT.MAPPING`` configuration entry is really optional now."
msgstr ""

#: ../../CHANGES.rst:440 e34b111a3a8b4e2da966a36107a682b5
msgid "Fixed empty model attributes registration. :pr:`125`"
msgstr ""

#: ../../CHANGES.rst:441 566d49eca850419cbb39c3a78a4160aa
msgid "Password initialization mails were not correctly sent. :pr:`128`"
msgstr ""

#: ../../CHANGES.rst:444 f461dc48e9c846628f7ddb99b18252c6
msgid "[0.0.24] - 2023-04-07"
msgstr ""

#: ../../CHANGES.rst:449 007393d26d6e4375a0e05cbbf6c41d65
msgid "Fixed avatar update. :pr:`122`"
msgstr ""

#: ../../CHANGES.rst:452 0ddfaf5df815484f9eb469a884e5f667
msgid "[0.0.23] - 2023-04-05"
msgstr ""

#: ../../CHANGES.rst:457 2e7346baddf44a7f9f5b9a05ae826913
msgid "Organization field. :pr:`116`"
msgstr ""

#: ../../CHANGES.rst:458 1c68c43ae90f4e2e944dab12514f06d1
msgid "ETag and Last-Modified headers on user photos. :pr:`116`"
msgstr ""

#: ../../CHANGES.rst:459 bcaf8fe7d8e940f191ed6ea5178566c1
msgid "Dynamic form validation. :pr:`120`"
msgstr ""

#: ../../CHANGES.rst:464 2b077ff5215a4b20b8438e82f4366ada
msgid "UX rework. Submenu addition. :pr:`114`"
msgstr ""

#: ../../CHANGES.rst:465 166152fdbf6248e8a4af29f4f3bf5b6e
msgid "Properly handle LDAP date timezones. :pr:`117`"
msgstr ""

#: ../../CHANGES.rst:470 343c4102b6d648018544f151f97540e1
msgid "CSRF protection on every forms. :pr:`119`"
msgstr ""

#: ../../CHANGES.rst:473 7140973831594dacad0bd205ca9b60e5
msgid "[0.0.22] - 2023-03-13"
msgstr ""

#: ../../CHANGES.rst:477 67dc897fec2946598dbb4fe82db8a94f
msgid ""
"The `Faker` library is not imported anymore when the `clean` command is "
"called."
msgstr ""

#: ../../CHANGES.rst:480 58e3c0af1ce74125bf42a5ea16b88fbf
msgid "[0.0.21] - 2023-03-12"
msgstr ""

#: ../../CHANGES.rst:485 a25f75d9086a4499aa1088e537f21bc3
msgid "Display TOS and policy URI on the consent list page. :pr:`102`"
msgstr ""

#: ../../CHANGES.rst:486 e848a4f5372b44249423579a7e2cdc3d
msgid "Admin token deletion. :pr:`100` :pr:`101`"
msgstr ""

#: ../../CHANGES.rst:487 61b841de5b89407d9912c8c73309111a
msgid "Revoked consents can be restored. :pr:`103`"
msgstr ""

#: ../../CHANGES.rst:488 656acd80913242a4820a20bc76d797e8
msgid ""
"Pre-consented clients are displayed in the user consent list, and their "
"consents can be revoked. :issue:`69` :pr:`103`"
msgstr ""

#: ../../CHANGES.rst:490 e08c1586240745fa9537dd7501475c0d
msgid ""
"A ``populate`` command can be used to fill the database with random users "
"generated with faker. :pr:`105`"
msgstr ""

#: ../../CHANGES.rst:492 dc653adfdbc441589c385b956ae9739e
msgid "SMTP SSL support. :pr:`108`"
msgstr ""

#: ../../CHANGES.rst:493 c69d8b01e4194d5b9268b84ab81849d6
msgid "Server side pagination. :issue:`114` :pr:`111`"
msgstr ""

#: ../../CHANGES.rst:494 5b4f3aa107a74df3ba845920503dfdc5
msgid "Department number support. :issue:`129`"
msgstr ""

#: ../../CHANGES.rst:495 d219e1ac8fa148d5b6e4babc678fbeb2
msgid "Address edition support (but not in the OIDC claims yet). :pr:`112`"
msgstr ""

#: ../../CHANGES.rst:496 52d2ceda28ab430a984dee19f8766b2a
msgid "Title edition support. :pr:`113`"
msgstr ""

#: ../../CHANGES.rst:501 c4aca25daa3b491f9208d71f7715800f
msgid ""
"Client deletion also deletes related :class:`~canaille.oidc.basemodels."
"Consent`, :class:`~canaille.oidc.basemodels.Token` and :class:`~canaille."
"oidc.basemodels.AuthorizationCode` objects. :issue:`126` :pr:`98`"
msgstr ""

#: ../../CHANGES.rst:507 a1c057df21a9436a9b149fb91fdb28d0
msgid "Removed the `DataTables` Javascript library."
msgstr ""

#: ../../CHANGES.rst:510 74a0312b6fff499fa609d0adbe73dfac
msgid "[0.0.20] - 2023-01-28"
msgstr ""

#: ../../CHANGES.rst:515 c443970df56e4203b8ee3fd9e4fa2395
msgid "Spanish translation. :pr:`85` :pr:`88`"
msgstr ""

#: ../../CHANGES.rst:516 9e42a95e59a74c5584d1144c249a57c1
msgid "Dedicated connectivity test email. :pr:`89`"
msgstr ""

#: ../../CHANGES.rst:517 e06855259b6f463897acd0f8a23cd05e
msgid "Update to jquery 3.6.3. :pr:`90`"
msgstr ""

#: ../../CHANGES.rst:518 96cb7430946248108d8c97973a4799d5
msgid "Update to fomantic-ui 2.9.1. :pr:`90`"
msgstr ""

#: ../../CHANGES.rst:519 5b5784d9aedb4949bac1591395fc7eb9
msgid "Update to DataTables 1.13.1. :pr:`90`"
msgstr ""

#: ../../CHANGES.rst:524 e88b90b5e0eb418f99ea2839c1e79943
msgid "Fix typos and grammar errors. :pr:`84`"
msgstr ""

#: ../../CHANGES.rst:525 d333115d646f4ccf9a5bb2dc4d23eba0
msgid "Fix wording and punctuations. :pr:`86`"
msgstr ""

#: ../../CHANGES.rst:526 cfc153afa2ec4bee9c2dd589a234716c
msgid "Fix HTML lang tag. :issue:`122` :pr:`87`"
msgstr ""

#: ../../CHANGES.rst:527 a2dc7b3677d040c7a43bde721f766029
msgid "Automatically trims the HTML translated strings. :pr:`91`"
msgstr ""

#: ../../CHANGES.rst:528 9a91064adb7f414fab73518fbc77b01d
msgid "Fixed dynamic registration scope management. :issue:`123` :pr:`93`"
msgstr ""

#: ../../CHANGES.rst:531 d7a2cda6d8e24cc484f13ee4df40c1ea
msgid "[0.0.19] - 2023-01-14"
msgstr ""

#: ../../CHANGES.rst:536 f7c94b5e7545458e8375ef8a8e3dc21c
msgid ""
"Ensures the token `expires_in` claim and the `access_token` `exp` claim have "
"the same value. :pr:`83`"
msgstr ""

#: ../../CHANGES.rst:540 9291df232e4b4a7eb97fb87504f9b8d4
msgid "[0.0.18] - 2022-12-28"
msgstr ""

#: ../../CHANGES.rst:545 c896b9996ab24cfeb217e9ebfdbed090
msgid ""
"OIDC end_session was not returning the ``state`` parameter in the "
"``post_logout_redirect_uri``. :pr:`82`"
msgstr ""

#: ../../CHANGES.rst:549 2fa2e9a70b8d4ab4bed4d7f0d8d68f37
msgid "[0.0.17] - 2022-12-26"
msgstr ""

#: ../../CHANGES.rst:554 cff81f4ef5254cfdb1e6ba76c2c3b9f6
msgid "Fixed group deletion button. :pr:`80`"
msgstr ""

#: ../../CHANGES.rst:555 552d92ac7c364f198201b60a3abebae2
msgid "Fixed post requests in oidc clients views. :pr:`81`"
msgstr ""

#: ../../CHANGES.rst:558 f7c78b950b184117855277070cb4e548
msgid "[0.0.16] - 2022-12-15"
msgstr ""

#: ../../CHANGES.rst:563 3e522208e81740fba479a43b017311fd
msgid "Fixed LDAP operational attributes handling."
msgstr ""

#: ../../CHANGES.rst:566 53e83abb15b24cc0a3d589011cf7c2a3
msgid "[0.0.15] - 2022-12-15"
msgstr ""

#: ../../CHANGES.rst:571 7194a505926740e3b52b81708d2818de
msgid "User can chose their display name. :pr:`77`"
msgstr ""

#: ../../CHANGES.rst:572 5c5a59a03bd5497aa7474ae59e88f6bf
msgid "Bumped to Authlib 1.2. :pr:`78`"
msgstr ""

#: ../../CHANGES.rst:573 0a3d037fae66464b8c2dfeea28dd3eaf
msgid ""
"Implemented :rfc:`RFC7592 <7592>` OAuth 2.0 Dynamic Client Registration "
"Management Protocol. :pr:`79`"
msgstr ""

#: ../../CHANGES.rst:575 0670727ea1074acf968c49e71dc4062b
msgid ""
"Add the ``nonce`` parameter to the ``claims_supported`` server metadata list."
msgstr ""

#: ../../CHANGES.rst:578 eb86b7335b7b4971812f25c9a2d37d1e
msgid "[0.0.14] - 2022-11-29"
msgstr ""

#: ../../CHANGES.rst:582 9903a64c05994256813debf83e9a6b21
msgid "Fixed translation catalogs packaging."
msgstr ""

#: ../../CHANGES.rst:585 eb1e508e7d2c46bdb471cffecbe4d897
msgid "[0.0.13] - 2022-11-21"
msgstr ""

#: ../../CHANGES.rst:590 6e71d21752234824bc42897b8a434bb3
msgid ""
"Fixed a bug on the contacts field in the admin client form following the "
"LDAP schema update of 0.0.12."
msgstr ""

#: ../../CHANGES.rst:592 374bd3f105af42bc8ea5c0de35e7437f
msgid ""
"Fixed a bug happening during RP initiated logout on clients without "
"`post_logout_redirect_uri` defined."
msgstr ""

#: ../../CHANGES.rst:594 6244294cde9d429dbab852b0f7721160
msgid "Gitlab CI fix. :pr:`64`"
msgstr ""

#: ../../CHANGES.rst:595 8dc7de6abbd447f4a78272f33cbcb6cf
msgid ""
"Fixed `client_secret` display on the client administration page. :pr:`65`"
msgstr ""

#: ../../CHANGES.rst:596 be276c6c0aed433987b562fa51a9af06
msgid "Fixed non-square logo CSS. :pr:`67`"
msgstr ""

#: ../../CHANGES.rst:597 45c4b643c08f4e98b8eb1994cca78051
msgid "Fixed schema path on installation. :pr:`68`"
msgstr ""

#: ../../CHANGES.rst:598 490ff7e15c244e1c80522169f52be22c
msgid "Fixed RFC7591 ``software_statement`` claim support. :pr:`70`"
msgstr ""

#: ../../CHANGES.rst:599 13d139a4ca6b420eb0780952acd8582c
msgid "Fixed client preconsent disabling. :pr:`72`"
msgstr ""

#: ../../CHANGES.rst:604 f863beea190c4605afc13c35d7828c7e
msgid "Python 3.11 support. :pr:`61`"
msgstr ""

#: ../../CHANGES.rst:605 dfa820f752f64485950bd9f2f4f2f798
msgid ""
"``apparmor`` slapd configuration instructions in the documentation page for "
"contributions. :pr:`66`"
msgstr ""

#: ../../CHANGES.rst:606 33f4b497e723467fb7cca94de105b331
msgid "``preferredLanguage`` attribute support. :pr:`75`"
msgstr ""

#: ../../CHANGES.rst:611 80931cb05ba54eb0bdd13af0e69ae5c4
msgid ""
"Replaced the use of the deprecated `FLASK_ENV` environment variable by "
"`FLASK_DEBUG`."
msgstr ""

#: ../../CHANGES.rst:613 74c0ecca84cb4195b047360a2a12b281
msgid ""
"Dynamically generate the server metadata. Users won't have to copy and "
"manually edit ``oauth-authorizationserver.json`` and ``openid-configuration."
"json``. :pr:`71`"
msgstr ""

#: ../../CHANGES.rst:616 b56f59b2dd124c91a6268830cf4ddecc
msgid "The `FROM_ADDR` configuration option is not mandatory anymore. :pr:`73`"
msgstr ""

#: ../../CHANGES.rst:617 d701256eb4764f81827acd7b0a0dbda3
msgid "The `JWT.ISS` configuration option is not mandatory anymore. :pr:`74`"
msgstr ""

#: ../../CHANGES.rst:620 45607852e443428199051f1ecba9ba24
msgid "[0.0.12] - 2022-10-24"
msgstr ""

#: ../../CHANGES.rst:625 9997d515babd44b4841ef0218885f1f1
msgid "Basic WebFinger endpoint. :pr:`59`"
msgstr ""

#: ../../CHANGES.rst:626 509a601f77664756bc01064f20359cf6
msgid "Bumped to FomanticUI 2.9.0."
msgstr ""

#: ../../CHANGES.rst:627 2cfcbdba2e9541dbab610bc724a2683a
msgid "Implemented Dynamic Client Registration. :pr:`60`"
msgstr ""

#: ../../CHANGES.rst:630 4acb242ffb5440d1a468e2d3c3856fe8
msgid "[0.0.11] - 2022-08-11"
msgstr ""

#: ../../CHANGES.rst:635 0c4bd2691ba9453b88a686a22ede18ef
msgid "Default theme has a dark variant. :pr:`57`"
msgstr ""

#: ../../CHANGES.rst:640 d3cabac68def4f77a693a6159bf2f5c0
msgid "Fixed missing ``canaille`` binary. :pr:`58`"
msgstr ""

#: ../../CHANGES.rst:643 735459f4aeea42c6b0f7be4a2b06802f
msgid "[0.0.10] - 2022-07-07"
msgstr ""

#: ../../CHANGES.rst:648 f9dfd87d0fa145579e2297b27b61a11b
msgid "Online demo. :pr:`55`"
msgstr ""

#: ../../CHANGES.rst:649 5e5eef7b53ce470ab0a0137617552a9c
msgid ""
"The consent page was displaying scopes not supported by clients. :pr:`56`"
msgstr ""

#: ../../CHANGES.rst:650 f7b8675a05b64bafb3efbbad603537ce
msgid "Fixed end session when user are already disconnected."
msgstr ""

#: ../../CHANGES.rst:653 a14c8084a27d463f82c1573d946a6676
msgid "[0.0.9] - 2022-06-05"
msgstr ""

#: ../../CHANGES.rst:658 d04e2396209641cc84fa39d8bb397eaa
msgid ""
"``DISABLE_PASSWORD_RESET`` configuration option to disable password "
"recovery. :pr:`46`"
msgstr ""

#: ../../CHANGES.rst:659 01acc147a456445eb3858de7b0586dca
msgid "``edit_self`` ACL permission to control user self edition. :pr:`47`"
msgstr ""

#: ../../CHANGES.rst:660 dafb92303cb147909db73fdc619f1267
msgid "`RP-initiated logout` implementation. :pr:`54`"
msgstr ""

#: ../../CHANGES.rst:665 f672b1443aa9498994204b20952103e4
msgid "Bumped to Authlib 1. :pr:`48`"
msgstr ""

#: ../../CHANGES.rst:666 18c1456a82f748cd9ee0d6abcb40801f
msgid "Various documentation improvements. :pr:`50`"
msgstr ""

#: ../../CHANGES.rst:667 77c7a3b3242647718a3a94a1fc4d05a1
msgid "Use poetry instead of setuptools as project management tool. :pr:`51`"
msgstr ""

#: ../../CHANGES.rst:668 3b65181a80b64d0d8a474a5e643d3f80
msgid "Additional tests for the OIDC ``nonce`` parameter. :pr:`52`"
msgstr ""

#: ../../CHANGES.rst:672 35eef6ab06b940e8ad49bf31b7620404
msgid "``HIDE_INVALID_LOGIN`` behavior and default value."
msgstr ""

#: ../../CHANGES.rst:673 2792732f7d154df2b11a35b13114939b
msgid ""
"Compiled translation catalogs are not versioned anymore. :pr:`49` :pr:`53`"
msgstr ""

#: ../../CHANGES.rst:676 8766634316d146ab8929259434391f34
msgid "[0.0.8] - 2022-03-15"
msgstr ""

#: ../../CHANGES.rst:681 f053b2fe7153473a81cb24bfc2b90c7d
msgid "Fixed dependencies."
msgstr ""

#: ../../CHANGES.rst:684 6fe1289ea759485b9c3c7658461a409d
msgid "[0.0.7] - 2022-03-15"
msgstr ""

#: ../../CHANGES.rst:689 f40f5e320ea4412fadc8f1bc1d99198c
msgid ""
"Fixed spaces and escaped special char in LDAP ``cn/dn`` attributes. :pr:`43`"
msgstr ""

#: ../../CHANGES.rst:692 ac9b3059b303486a9b31536f1726d873
msgid "[0.0.6] - 2022-03-08"
msgstr ""

#: ../../CHANGES.rst:697 357a41c66f054b9b830d9ae20551690d
msgid "Access token are JWT. :pr:`38`"
msgstr ""

#: ../../CHANGES.rst:702 20b619f456934ab09712d95d37ef12cd
msgid "Default groups on invitations. :pr:`41`"
msgstr ""

#: ../../CHANGES.rst:703 74f8d8568cd1405bbef739de7b92f380
msgid "LDAP schemas are shipped within the Canaille package. :pr:`42`"
msgstr ""

#: ../../CHANGES.rst:706 936cdbdb780241beb677c1a3c5d21735
msgid "[0.0.5] - 2022-02-17"
msgstr ""

#: ../../CHANGES.rst:711 b49925c79428413ca8c31eff4f42a588
msgid "LDAP model objects have new identifiers. :pr:`37`"
msgstr ""

#: ../../CHANGES.rst:716 21e3bd1145ce480ea8a82394722cef34
msgid "Admin menu dropdown display. :pr:`39`"
msgstr ""

#: ../../CHANGES.rst:717 b50bd877e6fa4055a450f65d4e0e6951
msgid "``GROUP_ID_ATTRIBUTE`` configuration typo. :pr:`40`"
msgstr ""

#: ../../CHANGES.rst:720 93523c049fd2438b9f8dbb942b657b7c
msgid "[0.0.4] - 2022-02-16"
msgstr ""

#: ../../CHANGES.rst:725 9cc5e4c0be3e43f98a84d076d254a7a8
msgid "Client pre-authorization. :pr:`11`"
msgstr ""

#: ../../CHANGES.rst:726 b1444e5514e3495f8f05b00bfb31e54b
msgid "LDAP permissions check with the check command. :pr:`12`"
msgstr ""

#: ../../CHANGES.rst:727 81badbb21dfe4dd0bd990037947c24cf
msgid ""
"Update consents when a scope required is larger than the scope of an already "
"given consent. :pr:`13`"
msgstr ""

#: ../../CHANGES.rst:729 5f6092f6103d401e9fe4554e04ad12cb
msgid "Theme customization. :pr:`15`"
msgstr ""

#: ../../CHANGES.rst:730 7e99d3a9c9134144a8e18989e6d0d633
msgid "Logging configuration. :pr:`16`"
msgstr ""

#: ../../CHANGES.rst:731 abd6618054b443efbb5101e9c32f0c90
msgid "Installation command. :pr:`17`"
msgstr ""

#: ../../CHANGES.rst:732 18c69372e28c42c4b0ac0cae51fcd8aa
msgid "Invitation links. :pr:`18`"
msgstr ""

#: ../../CHANGES.rst:733 2e35dc7cf246485c97650451d1f41d93
msgid "Advanced permissions. :pr:`20`"
msgstr ""

#: ../../CHANGES.rst:734 ef3b8ab7e89448089a9d09363832c7cc
msgid "An option to not use OIDC. :pr:`23`"
msgstr ""

#: ../../CHANGES.rst:735 4d5d5581283a4eaabab00c6df18077a0
msgid "Disable some features when no SMTP server is configured. :pr:`24`"
msgstr ""

#: ../../CHANGES.rst:736 a54b117ff68e47eabb66aa0a741790b1
msgid ""
"Login placeholder dynamically generated according to the configuration. :pr:"
"`25`"
msgstr ""

#: ../../CHANGES.rst:737 8593aca44439457296e5591823f56739
msgid "Added an option to tune object IDs. :pr:`26`"
msgstr ""

#: ../../CHANGES.rst:738 548d5d09a1da4104aed49324dd3d96b6
msgid "Avatar support. :pr:`27`"
msgstr ""

#: ../../CHANGES.rst:739 e6275bae918547beab8caabaf64f57db
msgid "Dynamical and configurable JWT claims. :pr:`28`"
msgstr ""

#: ../../CHANGES.rst:740 82bbcaaa7973438696de021fbff14354
msgid "UI improvements. :pr:`29`"
msgstr ""

#: ../../CHANGES.rst:741 70cd1dd3d81d4288b1c6bca674492944
msgid "Invitation links expiration. :pr:`30`"
msgstr ""

#: ../../CHANGES.rst:742 af865fef102c44bc801e8aec157c2835
msgid "Invitees can choose their IDs. :pr:`31`"
msgstr ""

#: ../../CHANGES.rst:743 d194b87cfbd94dd398f1c58bec6e4c37
msgid "LDAP backend refactoring. :pr:`35`"
msgstr ""

#: ../../CHANGES.rst:748 2409763cd25243c9a80678c470fa336d
msgid "Fixed ghost members in a group. :pr:`14`"
msgstr ""

#: ../../CHANGES.rst:749 ae04a8fa1896467792d8aaaf161fed29
msgid "Fixed email sender names. :pr:`19`"
msgstr ""

#: ../../CHANGES.rst:750 596c5956ebc6442984251ca5c558834e
msgid "Fixed filter being not escaped. :pr:`21`"
msgstr ""

#: ../../CHANGES.rst:751 bbf97ea202404efd8708cfbed4bbfe74
msgid "Demo script good practices. :pr:`32`"
msgstr ""

#: ../../CHANGES.rst:752 8d176b7d4da5419d8768430eeb01036c
msgid "Binary path for Debian. :pr:`33`"
msgstr ""

#: ../../CHANGES.rst:753 004ecd0e934049ef823bbf0d63f75c14
msgid ""
"Last name was not mandatory in the forms while this was mandatory in the "
"LDAP server. :pr:`34`"
msgstr ""

#: ../../CHANGES.rst:755 c6de3dbeeb5f40ff85c60e062271bfdb
msgid "Spelling typos. :pr:`36`"
msgstr ""

#: ../../CHANGES.rst:758 d49aed2f00e346cc8adaa26aa54f470a
msgid "[0.0.3] - 2021-10-13"
msgstr ""

#: ../../CHANGES.rst:763 0b32a6319c044bba95b3a00f245c6956
msgid "Two-steps sign-in. :issue:`49`"
msgstr ""

#: ../../CHANGES.rst:764 4cf53569893c4b0ba8eab17b44a4a15b
msgid "Tokens can have several audiences. :issue:`62` :pr:`9`"
msgstr ""

#: ../../CHANGES.rst:765 2956507b8bba47839fef6f9a63d5321a
msgid "Configuration check command. :issue:`66` :pr:`8`"
msgstr ""

#: ../../CHANGES.rst:766 0415c157cb414913b3d7748afba41cda
msgid "Groups management. :issue:`12` :pr:`6`"
msgstr ""

#: ../../CHANGES.rst:771 e08a9eafc49f45cbb361ed3bd89d4649
msgid "Introspection access bugfix. :issue:`63` :pr:`10`"
msgstr ""

#: ../../CHANGES.rst:772 48e63a4a411d4aab8259f74b1d257a37
msgid "Introspection sub claim. :issue:`64` :pr:`7`"
msgstr ""

#: ../../CHANGES.rst:775 2a9047b937be481f811eb403d6bf7fd9
msgid "[0.0.2] - 2021-01-06"
msgstr ""

#: ../../CHANGES.rst:780 9f74458dacff435998774594822a1506
msgid "Login page is responsive. :issue:`1`"
msgstr ""

#: ../../CHANGES.rst:781 8a87683d8d524cd482264473256b3777
msgid "Adapt mobile keyboards to login page fields. :issue:`2`"
msgstr ""

#: ../../CHANGES.rst:782 c777083179094cd994619adcfc8499d9
msgid "Password recovery interface. :issue:`3`"
msgstr ""

#: ../../CHANGES.rst:783 c7393dc1bb6a4290bfdb2d59a3fef0c9
msgid "User profile interface. :issue:`4`"
msgstr ""

#: ../../CHANGES.rst:784 e874e0e97cae4310ba62553c3d31cd16
msgid "Renamed the project *Canaille*. :issue:`5`"
msgstr ""

#: ../../CHANGES.rst:785 27a300eabaaf4644989d134ccca22dd8
msgid "Command to remove old tokens. :issue:`17`"
msgstr ""

#: ../../CHANGES.rst:786 8e168b1583984a71848678112365d1c7
msgid "Improved password recovery email. :issue:`14` :issue:`26`"
msgstr ""

#: ../../CHANGES.rst:787 901de9a21dd94541b3c23946ada4cd88
msgid ""
"Use Flask `SERVER_NAME` configuration variable instead of `URL`. :issue:`24`"
msgstr ""

#: ../../CHANGES.rst:788 62c1e3da0a87437aaa529dcc936c7dbc
msgid "Improved consents page. :issue:`27`"
msgstr ""

#: ../../CHANGES.rst:789 f816ffeb73244ae0b1171b8c156d1e12
msgid "Admin user page. :issue:`8`"
msgstr ""

#: ../../CHANGES.rst:790 2241f2b45f1e426f99f68ccc516c6b60
msgid "Project logo. :pr:`29`"
msgstr ""

#: ../../CHANGES.rst:791 dd802cef3e384fdc928fc43178ab119a
msgid ""
"User account self-deletion can be enabled in the configuration with "
"`SELF_DELETION`. :issue:`35`"
msgstr ""

#: ../../CHANGES.rst:792 75d6d908a827424284ea63478783cbf9
msgid "Admins can impersonate users. :issue:`39`"
msgstr ""

#: ../../CHANGES.rst:793 b4eee6e748f94ba9b6e62e2e7fd4d86b
msgid "Forgotten page UX improvement. :pr:`43`"
msgstr ""

#: ../../CHANGES.rst:794 44489482b8d54ae78c70959758d6f825
msgid "Admins can remove clients. :pr:`45`"
msgstr ""

#: ../../CHANGES.rst:795 be6e5371ee2a48efa0d9d276e9caa9a0
msgid ""
"Option `HIDE_INVALID_LOGIN` that can be unactivated to let the user know if "
"the login he attempt to sign in with exists or not. :pr:`48`"
msgstr ""

#: ../../CHANGES.rst:797 b1df16b2411a440d8d2a0745c972f368
msgid "Password initialization mail. :pr:`51`"
msgstr ""

#: ../../CHANGES.rst:802 ba317999584d46d7b5bfda36157bc111
msgid "Form translations. :issue:`19` :issue:`23`"
msgstr ""

#: ../../CHANGES.rst:803 e0d773fd3f814a438321528df1c4d67d
msgid "Avoid to use Google Fonts. :issue:`21`"
msgstr ""

#: ../../CHANGES.rst:808 d7c5d0509cfe422ab95beb9c1929e413
msgid "'My tokens' page. :issue:`22`"
msgstr ""

#: ../../CHANGES.rst:811 35ab727ebe564ff2a2aa3e28f9392f5b
msgid "[0.0.1] - 2020-10-21"
msgstr ""

#: ../../CHANGES.rst:816 487e834d3b154f69991d042f97ce3734
msgid "Initial release."
msgstr ""

#: ../../CONTRIBUTING.rst:2 77d0a023f5f34e7c804011fd50b75bc3
msgid "Contributions"
msgstr ""

#: ../../CONTRIBUTING.rst:4 9955ba6bbfb54c74930043f9d86335dc
msgid "Contributions are welcome!"
msgstr ""

#: ../../CONTRIBUTING.rst:6 dd58980e1983404d8bc93b9e0866785d
msgid ""
"The repository is hosted at `gitlab.com/yaal/canaille <https://gitlab.com/"
"yaal/canaille>`_."
msgstr ""

#: ../../CONTRIBUTING.rst:9 880fd4b263fa4f5aa77f826cf6d7a13e
msgid "Discuss"
msgstr ""

#: ../../CONTRIBUTING.rst:11 0e5a0bf82cd4444ebc3ff1dd43a4362c
msgid ""
"If you want to implement a feature or a bugfix, please start by discussing "
"it with us on the `bugtracker <https://gitlab.com/yaal/canaille/-/issues>`_ "
"or the `matrix room <https://matrix.to/#/#canaille-discuss:yaal.coop>`_."
msgstr ""

#: ../../CONTRIBUTING.rst:16 032421a7ce0548e38943bb37b9e46f90
msgid "Development environment"
msgstr ""

#: ../../CONTRIBUTING.rst:18 464b7af189da4cf2ba346183c47e6264
msgid "You can either run the demo locally or with Docker."
msgstr ""

#: ../../CONTRIBUTING.rst:20 b918844970c545a3826d0b39a79cb08c
msgid ""
"The only tool required for local development is `uv`. Make sure to have uv "
"`installed on your computer <https://docs.astral.sh/uv/getting-started/"
"installation/>`_ to be able to hack Canaille."
msgstr ""

#: ../../CONTRIBUTING.rst:24 56f217cf35444c72b1bc1a1cb3ee9e53
msgid "Initialize your development environment with:"
msgstr ""

#: ../../CONTRIBUTING.rst:26 9cf0a292c2bb408fa660e14ab61f0e43
msgid ""
"``uv sync --extra front --extra oidc`` to have a minimal working development "
"environment. This will allow you to run the tests with ``uv pytest --backend "
"memory``."
msgstr ""

#: ../../CONTRIBUTING.rst:27 8d29fc6ad3bd43c5b232963f5137c91a
msgid ""
"``uv sync --extra front --extra oidc --extra sqlite`` to have a minimal "
"working development environment with SQLite backend support. This will allow "
"you to run the tests with ``uv pytest --backend sql``."
msgstr ""

#: ../../CONTRIBUTING.rst:28 928d535d56314259b20055eea3a4ceb4
msgid ""
"``uv sync --extra front --extra oidc --extra ldap`` to have a minimal "
"working development environment with LDAP backend support. This will allow "
"you to run the tests with ``uv pytest --backend ldap``."
msgstr ""

#: ../../CONTRIBUTING.rst:29 56b8780399064aec89d3099841d1b017
msgid ""
"``uv sync --all-extras`` if you want to have everything at your fingertips. "
"Note that it may compile some Python dependencies that would expect things "
"to be installed on your system; Some dependencies of Canaille might need to "
"be compiled, so you probably want to check that `GCC` and `cargo` are "
"available on your computer."
msgstr ""

#: ../../CONTRIBUTING.rst:32 1a514a3605f243979b2d04e1a329368a
msgid "After having launched the demo you have access to several services:"
msgstr ""

#: ../../CONTRIBUTING.rst:34 bbde54dc79ba4241bd97323b5152b50b
msgid "A canaille server at `localhost:5000 <http://localhost:5000>`_"
msgstr ""

#: ../../CONTRIBUTING.rst:35 d028b9cbae714b2d945ba4d70a75fb99
msgid "A dummy client at `localhost:5001 <http://localhost:5001>`_"
msgstr ""

#: ../../CONTRIBUTING.rst:36 dbd0340fc974432798237b9b3efe01ea
msgid "Another dummy client at `localhost:5002 <http://localhost:5002>`_"
msgstr ""

#: ../../CONTRIBUTING.rst:38 9ff28ddd679b42f4a5bf288242e8c827
msgid "The canaille server has some default users:"
msgstr ""

#: ../../CONTRIBUTING.rst:40 324e9f4f1d744fa49a0c3e7fe60cf46b
msgid "A regular user which login and password are **user**;"
msgstr ""

#: ../../CONTRIBUTING.rst:41 30a3f2679a4b456791471ac6d4c15e2b
msgid "A moderator user which login and password are **moderator**;"
msgstr ""

#: ../../CONTRIBUTING.rst:42 d5e4f771a0854678af55e11ae4c8fc3d
msgid "An admin user which admin and password are **admin**;"
msgstr ""

#: ../../CONTRIBUTING.rst:43 325a060f0844402d80a7267a46291010
msgid ""
"A new user which login is **james**. This user has no password yet, and his "
"first attempt to log-in would result in sending a password initialization "
"email (if a smtp server is configured)."
msgstr ""

#: ../development/specifications.rst:106 ../../CONTRIBUTING.rst:48
#: c01f125a22914f369ef28ef090a728b1 01a043d4a4364011b8a22a53549b20da
msgid "Backends"
msgstr ""

#: ../../CONTRIBUTING.rst:50 12c4afcb316c448797ed9784ef9fbaa1
msgid "Canaille comes with several backends:"
msgstr ""

#: ../../CONTRIBUTING.rst:52 853d2b906b80415db33c707e29640f4c
msgid "a lightweight test purpose `memory` backend"
msgstr ""

#: ../../CONTRIBUTING.rst:53 b280dce615cb48ec8456abf65fec4a9e
msgid "a `sql` backend, based on sqlalchemy"
msgstr ""

#: ../../CONTRIBUTING.rst:54 ad6d07459c274a9e8282e290875d5bfb
msgid "a production-ready `LDAP` backend"
msgstr ""

#: ../../CONTRIBUTING.rst:57 7db1494e281b4b89949e18e1ece1cb6c
msgid "Docker environment"
msgstr ""

#: ../../CONTRIBUTING.rst:59 c8e61bddd24e4af0ab8ee2bd2709652d
msgid ""
"If you want to develop with docker, your browser needs to be able to reach "
"the `canaille` container. The docker-compose file exposes the right ports, "
"but front requests are from outside the docker network: the `canaille` url "
"that makes sense for docker, points nowhere from your browser. As exposed "
"ports are on `localhost`, you need to tell your computer that `canaille` url "
"means `localhost`."
msgstr ""

#: ../../CONTRIBUTING.rst:64 0e3e6469d25f43998fce20bcb1291b86
msgid "To do that, you can add the following line to your `/etc/hosts`:"
msgstr ""

#: ../../CONTRIBUTING.rst:70 c0dce613d6384dd18a1d6abce742bf55
msgid "To launch containers, use:"
msgstr ""

#: ../development/specifications.rst:108 ../tutorial/databases.rst:16
#: ../../CONTRIBUTING.rst:73 ../../CONTRIBUTING.rst:106
#: 32e05154931e4a6fadcba3b0720e0655 f1b0c988daa54dd4a0c5b30a062cf012
#: 94f958ac7cab437580604c64cdfa27be 528aa40e3cd04297b5ebf44fc955e9a9
msgid "SQL"
msgstr ""

#: ../../CONTRIBUTING.rst:74 ../../CONTRIBUTING.rst:107
#: c66d8a018f064cb3ba36abf12473b5f4 15c287c63f7f441f991033e23cbb9f95
msgid ""
"With the SQL backend, the demo instance will load and save data in a local "
"sqlite database."
msgstr ""

#: ../../CONTRIBUTING.rst:76 ../../CONTRIBUTING.rst:109
#: 6ddf226447fa4bb89cbf73cc8376c371 c72bd69b5ad94f5992bfe2d30f5b0e8d
msgid "Run the demo instance with the SQL backend"
msgstr ""

#: ../tutorial/databases.rst:8 ../../CONTRIBUTING.rst:83
#: ../../CONTRIBUTING.rst:115 e5f82f8945b747ac81b31a20cc241e5d
#: 9a11f967d4c74ad8b9dff673e77d2315 84a192a56d404fb1baf97b065f6ceaa8
msgid "Memory"
msgstr ""

#: ../../CONTRIBUTING.rst:84 ../../CONTRIBUTING.rst:116
#: 9c56b31ca9724e62a5aee62e28196764 22784d30d5a748d2b73ebe7c423c64bc
msgid "With the memory backend, all data is lost when Canaille stops."
msgstr ""

#: ../../CONTRIBUTING.rst:86 ../../CONTRIBUTING.rst:118
#: da0af4f3bc5147ae8130399630381126 c1436f14bd2049479ac16384a47f2d38
msgid "Run the demo instance with the memory backend"
msgstr ""

#: ../development/specifications.rst:108 ../tutorial/databases.rst:32
#: ../../CONTRIBUTING.rst:93 ../../CONTRIBUTING.rst:124
#: 6f4008249f544ff4afa4e2a7ccebfab2 ce4afa36ab774346b11322758b51325e
#: f9a9bf9c1c6d49b99edee201000ea0a0 2e130a461dc64b989f22d4f932976a65
msgid "LDAP"
msgstr ""

#: ../../CONTRIBUTING.rst:94 ../../CONTRIBUTING.rst:125
#: 4f3a2e440337421f95f937952e7dc9be db5ad48ecaa94207ab2b7d84bbebf569
msgid "With the LDAP backend, all data is lost when Canaille stops."
msgstr ""

#: ../../CONTRIBUTING.rst:96 ../../CONTRIBUTING.rst:127
#: 50095289006e499588719acc50eb5a56 80a55900cfc34f4e8b34b5e653a7fdfb
msgid "Run the demo instance with the LDAP backend"
msgstr ""

#: ../../CONTRIBUTING.rst:103 9e2c9acef9184e34b00d62c97980467d
msgid "Local environment"
msgstr ""

#: ../../CONTRIBUTING.rst:133 5fffaf4bff884b5a839078ad5a889fc9
msgid ""
"If you want to run the demo locally with the LDAP backend, you need to have "
"`OpenLDAP <https://www.openldap.org/>`_ installed on your system. It is "
"generally shipped under the ``slapd`` or ``openldap`` package name."
msgstr ""

#: ../../CONTRIBUTING.rst:138 aa9aab912ff04dd68c3b59bf1e36575a
msgid ""
"On Debian or Ubuntu systems, the OpenLDAP `slapd` binary usage might be "
"restricted by apparmor, and thus makes the tests and the demo fail. This can "
"be mitigated by removing apparmor restrictions on `slapd`."
msgstr ""

#: ../../CONTRIBUTING.rst:148 3d21757ba34c4721af043c150330c2e4
msgid "Populate the database"
msgstr ""

#: ../../CONTRIBUTING.rst:150 a412d39e98cf44f6b911566e1ebcdbde
msgid ""
"The demo database comes populated with some random users and groups. If you "
"need more, you can generate users and groups with the ``populate`` command:"
msgstr ""

#: ../../CONTRIBUTING.rst:161 cdf90f875bcc44d5b41197a7cdbb275c
msgid ""
"Adapt to use either the `ldap` or the `sql` configuration file. Note that "
"this will not work with the memory backend."
msgstr ""

#: ../../CONTRIBUTING.rst:164 2db32f774df8429fa4c9e83d00616a96
msgid "Unit tests"
msgstr ""

#: ../../CONTRIBUTING.rst:166 5d6a9b57b35d49c48e2b615f8128ebcc
msgid ""
"To run the tests, you just can run `uv run pytest` and/or `uv run tox` to "
"test all the supported python environments. Everything must be green before "
"patches get merged."
msgstr ""

#: ../../CONTRIBUTING.rst:169 e1e6e475ff78404f930bb453f1f26e3b
msgid ""
"To test a specific backend you can pass ``--backend memory``, ``--backend "
"sql`` or ``--backend ldap`` to pytest and tox."
msgstr ""

#: ../../CONTRIBUTING.rst:171 2cb85029b4274de388878da3d3285369
msgid ""
"The test coverage is 100%, patches won't be accepted if not entirely "
"covered. You can check the test coverage with ``uv run pytest --cov --cov-"
"report=html`` or ``uv run tox -e coverage -- --cov-report=html``. You can "
"check the HTML coverage report in the newly created `htmlcov` directory."
msgstr ""

#: ../../CONTRIBUTING.rst:176 4408d499056c480f86f450a781d2ca0d
msgid "Code style"
msgstr ""

#: ../../CONTRIBUTING.rst:178 93e483f2a66a4d8f82feb8ca9a739818
msgid ""
"We use `ruff <https://docs.astral.sh/ruff/>`_ along with other tools to "
"format our code. Please run ``uv run tox -e style`` on your patches before "
"submitting them. In order to perform a style check and correction at each "
"commit you can use our `pre-commit <https://pre-commit.com/>`_ configuration "
"with ``uv run pre-commit install``."
msgstr ""

#: ../../CONTRIBUTING.rst:184 0dca6207e6734ab487cb3fe72c3e90e8
msgid "Front"
msgstr ""

#: ../../CONTRIBUTING.rst:186 930e01d770324dc68f73095cd5456a8e
msgid ""
"The interface is built upon the `Fomantic UI <https://fomantic-ui.com/>`_ "
"CSS framework. The dynamical parts of the interface use `htmx <https://htmx."
"org/>`_."
msgstr ""

#: ../../CONTRIBUTING.rst:189 fc0da8a2736e461dab5a7d242c1cfa9a
msgid ""
"Using Javascript in the interface is tolerated, but the whole website MUST "
"be accessible for browsers without Javascript support, and without any "
"feature loss."
msgstr ""

#: ../../CONTRIBUTING.rst:191 a13b055a65244362a025440451de998d
msgid ""
"Because of Fomantic UI we have a dependency to jQuery, however new "
"contributions should not depend on jQuery at all. See the `related issue "
"<https://gitlab.com/yaal/canaille/-/issues/130>`_."
msgstr ""

#: ../index.rst:71 ../../CONTRIBUTING.rst:196 e3ff6afa466e4e61aa4f677cd58d3ed2
#: a08d8d5331494e7d93508eaf25f41a07
msgid "Documentation"
msgstr ""

#: ../../CONTRIBUTING.rst:198 2e1fdcae75de46a6b50db7e4155758af
msgid "The documentation is generated when the tests run:"
msgstr ""

#: ../../CONTRIBUTING.rst:204 94405109592b47c09c8726c305fa5edc
msgid ""
"You can also run sphinx by hand, that should be faster since it avoids the "
"tox environment initialization:"
msgstr ""

#: ../../CONTRIBUTING.rst:210 fe4610d142474897ae4f97d321448fac
msgid "The generated documentation is located at ``build/sphinx/html/en``."
msgstr ""

#: ../../CONTRIBUTING.rst:213 bf09dd8ed31742bca2fa80175ae85bb3
msgid "Code translation"
msgstr ""

#: ../../canaille/translations/README.rst:1 35fff9d115334ec6aa6a99ec5da8a27f
msgid ""
"Translations are done with `Weblate <https://hosted.weblate.org/projects/"
"canaille/canaille>`__."
msgstr ""

#: ../../canaille/translations/README.rst:3 b72ee2174a9b42c493780415e3d3fcfd
msgid ""
"The following commands are there as documentation, only the message "
"extraction is needed for contributors. All the other steps are automatically "
"done with Weblate."
msgstr ""

#: readme.rst:6 ../../canaille/translations/README.rst:8
#: ea5bd05b09984bcaa643efa7a1a7618c 33490a8ff4a3465fb8648393ff65eb75
msgid "Message extraction"
msgstr ""

#: readme.rst:8 ../../canaille/translations/README.rst:10
#: 210e9ff98db74777830a5a1f4746df44 16b22e2bc3cf495bbef529f5732887e3
msgid ""
"After you have edited translatable strings, you should extract the messages "
"with:"
msgstr ""

#: readme.rst:15 ../../canaille/translations/README.rst:17
#: 54ecd51acf494402964ae281c6cd639b 02fa7225075346f89ad702cba8aabdeb
msgid "Language addition"
msgstr ""

#: readme.rst:17 ../../canaille/translations/README.rst:19
#: 5429b47768e2472ea597ed48140a5621 015d6a437f7e4d099c8cad60986c0b68
msgid ""
"You can add a new language manually with the following command, however this "
"should not be needed as Weblate takes car of this:"
msgstr ""

#: ../../canaille/translations/README.rst:26 bdfbb4ef60c54b26abf457ba930b7fcf
msgid "Catalog update"
msgstr ""

#: ../../canaille/translations/README.rst:28 94b8fc10d3aa4e05b54d619c4b1aaa25
msgid ""
"You can update the catalogs with the following command, however this should "
"not be needed as Weblate automatically update language catalogs when it "
"detects new strings or when someone translate some existing strings. Weblate "
"pushes happen every 24h."
msgstr ""

#: ../../canaille/translations/README.rst:36 f232cbfdd201463ab74fe71353c8e23b
msgid "Catalog compilation"
msgstr ""

#: ../../canaille/translations/README.rst:38 3c756dd105564866a8d74e994e65f2b6
msgid ""
"You can compile the catalogs with the following command, however this should "
"not be needed as catalogs are automatically compiled before running the unit "
"tests, before launching the demo and before compiling the Canaille python "
"package:"
msgstr ""

#: ../../CONTRIBUTING.rst:219 4ff341d941384c029ed9c0b49d1062f9
msgid "Documentation translation"
msgstr ""

#: readme.rst:1 35fff9d115334ec6aa6a99ec5da8a27f
#: 7abe83f2eeb54b3f9f3d1a8542696765
msgid ""
"Translations are done with `Weblate <https://hosted.weblate.org/projects/"
"canaille/documentation>`__."
msgstr ""

#: readme.rst:3 de92a131ecf44614963dd89770f593ae
#: 0ca00925251d48668c7673ddece41d66
msgid ""
"The following commands are there as documentation, only the message "
"extraction and the language addition is needed for contributors."
msgstr ""

#: readme.rst:24 3d142fe9f633400ea029e949f1e869ee
#: 74cc2740b1584972aa3c0e672dff5f3e
msgid "Build the documentation in another language"
msgstr ""

#: ../../CONTRIBUTING.rst:224 4b1dc3dae99f4c6fbbeec3e54be3e922
msgid "Publish a new release"
msgstr ""

#: ../../CONTRIBUTING.rst:226 975b37a07edc4a42bbef14c2ca80a34f
msgid ""
"Check that dependencies are up to date with ``uv sync --all-extras --"
"upgrade`` and update dependencies accordingly in separated commits;"
msgstr ""

#: ../../CONTRIBUTING.rst:227 e9bd8386c6c64ef99aac12ee831f39d1
msgid ""
"Check that tests are still green for every supported python version, and "
"that coverage is still at 100%, by running ``uv run tox``;"
msgstr ""

#: ../../CONTRIBUTING.rst:228 3e7d5493a8e44c1a9067010115678723
msgid ""
"Check that the demo environments are still working, both the local and the "
"Docker one;"
msgstr ""

#: ../../CONTRIBUTING.rst:229 fe7867ea9416424e81c518f77853958a
msgid ""
"Check that the :ref:`development/changelog:Release notes` section is "
"correctly filled up;"
msgstr ""

#: ../../CONTRIBUTING.rst:230 7d89adc1c3e6478ab9e8faa02f97bf03
msgid "Increase the version number in ``pyproject.toml``;"
msgstr ""

#: ../../CONTRIBUTING.rst:231 a376131776cd4e469611fa3ad6749be9
msgid "Commit with ``git commit``;"
msgstr ""

#: ../../CONTRIBUTING.rst:232 655fd489e5324dc5b6172d438a6b8e3e
msgid "Build with ``uv build``;"
msgstr ""

#: ../../CONTRIBUTING.rst:233 79fc61b7c13647a285a918a0c126ea53
msgid ""
"Publish on test PyPI with ``uv publish --publish-url https://test.pypi.org/"
"legacy/``;"
msgstr ""

#: ../../CONTRIBUTING.rst:234 93540129ce0c440eba4da63ed3ddb769
msgid ""
"Install the test package somewhere with ``pip install --extra-index-url "
"https://test.pypi.org/simple --upgrade canaille``. Check that everything "
"looks fine;"
msgstr ""

#: ../../CONTRIBUTING.rst:235 8a73b31d1fe14fdda15e6c2dea0cafc9
msgid "Publish on production PyPI ``uv publish``;"
msgstr ""

#: ../../CONTRIBUTING.rst:236 93131bb37ccc4207825449d393f92201
msgid "Tag the commit with ``git tag XX.YY.ZZ``;"
msgstr ""

#: ../../CONTRIBUTING.rst:237 a98a5168d5f949ec9e96f16d8ff8b6f5
msgid ""
"Push the release commit and the new tag on the repository with ``git push --"
"tags``."
msgstr ""

#: ../development/index.rst:2 c0f14bad2988468fa0700bbd47fe1de0
msgid "Development"
msgstr ""

#: ../development/specifications.rst:2 156d2082306649a89c7c6ff9b0879911
msgid "Specifications"
msgstr ""

#: ../development/specifications.rst:4 2c830d15b604470ca1912e9a07b2deb6
msgid ""
"This page details which specifications are implemented in Canaille, and "
"compares Canaille with other well-known identity providers."
msgstr ""

#: ../development/specifications.rst:7 bfa87dc7f42445fb96172a2ce7643950
msgid "State of the specs in Canaille"
msgstr ""

#: ../development/specifications.rst:10 b57576e6aa1e46c0ab9b0d74e40f7a1c
msgid "OAuth2"
msgstr ""

#: ../development/specifications.rst:12 44156ac1d21c44f89d2090ae27ad397e
msgid ""
"✅ `RFC6749: OAuth 2.0 Framework <https://tools.ietf.org/html/rfc6749>`_"
msgstr ""

#: ../development/specifications.rst:13 3dd5d1bc312e4808b9dfb7e906f9a1b3
msgid ""
"✅ `RFC6750: OAuth 2.0 Bearer Tokens <https://tools.ietf.org/html/rfc6750>`_"
msgstr ""

#: ../development/specifications.rst:14 3f7c67f6ca7049a0a99455d27e7b9278
msgid ""
"✅ `RFC7009: OAuth 2.0 Token Revocation <https://tools.ietf.org/html/"
"rfc7009>`_"
msgstr ""

#: ../development/specifications.rst:15 b11098fcf9e64dfca026aa25e97624cc
msgid ""
"❌ `RFC7523: JWT Profile for OAuth 2.0 Client Authentication and "
"Authorization Grants <https://tools.ietf.org/html/rfc7523>`_"
msgstr ""

#: ../development/specifications.rst:16 0213796d176a4938a10c902cfb737a18
msgid ""
"✅ `RFC7591: OAuth 2.0 Dynamic Client Registration Protocol <https://tools."
"ietf.org/html/rfc7591>`_"
msgstr ""

#: ../development/specifications.rst:17 afdc8def073c495e8bb24a1ec6a0d62a
msgid ""
"✅ `RFC7592: OAuth 2.0 Dynamic Client Registration Management Protocol "
"<https://tools.ietf.org/html/rfc7592>`_"
msgstr ""

#: ../development/specifications.rst:18 f592e7f0f2074289b67beb893604277d
msgid ""
"✅ `RFC7636: Proof Key for Code Exchange by OAuth Public Clients <https://"
"tools.ietf.org/html/rfc7636>`_"
msgstr ""

#: ../development/specifications.rst:19 bc914d1d327d4ce6a638c5245c4cfcc3
msgid ""
"✅ `RFC7662: OAuth 2.0 Token Introspection <https://tools.ietf.org/html/"
"rfc7662>`_"
msgstr ""

#: ../development/specifications.rst:20 08bbaa19162d456899ba99be7b0f9e3d
msgid ""
"✅ `RFC8414: OAuth 2.0 Authorization Server Metadata <https://tools.ietf.org/"
"html/rfc8414>`_"
msgstr ""

#: ../development/specifications.rst:21 abbbc93f57ba4660bafa5396616419d8
msgid ""
"❌ `RFC8428: OAuth 2.0 Device Authorization Grant <https://tools.ietf.org/"
"html/rfc8428>`_"
msgstr ""

#: ../development/specifications.rst:22 a9adf95822164ad9a91366b631a095ab
msgid ""
"❌ `RFC8693: OAuth 2.0 Token Exchange <https://tools.ietf.org/html/rfc8693>`_"
msgstr ""

#: ../development/specifications.rst:23 fac77fd04d2c457cbdda2f46d21a549d
msgid ""
"❌ `RFC8705: OAuth 2.0 Mutual-TLS Client Authentication and Certificate-"
"Bound Access Tokens <https://tools.ietf.org/html/rfc8705>`_"
msgstr ""

#: ../development/specifications.rst:24 772cbe80f8cd44faa3230ee4e690e5f3
msgid ""
"❌ `RFC8707: Resource Indicators for OAuth 2.0 <https://tools.ietf.org/html/"
"rfc8707>`_"
msgstr ""

#: ../development/specifications.rst:25 8b06eb72e70742fc821332a4676ba48e
msgid ""
"❌ `RFC9068: JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens "
"<https://tools.ietf.org/html/rfc9068>`_"
msgstr ""

#: ../development/specifications.rst:26 088615a4afdc48a5b6449df856cb1eb3
msgid ""
"❌ `RFC9101: OAuth 2.0 JWT-Secured Authorization Request (JAR) <https://"
"tools.ietf.org/html/rfc9101>`_"
msgstr ""

#: ../development/specifications.rst:27 4bd307887c6a4dcebb9d5ff9b9c3176a
msgid ""
"❌ `RFC9126: OAuth 2.0 Pushed Authorization Requests <https://tools.ietf.org/"
"html/rfc9126>`_"
msgstr ""

#: ../development/specifications.rst:28 bf777af155ec47bb85265068ff053b85
msgid ""
"❌ `RFC9207: OAuth 2.0 Authorization Server Issuer Identification <https://"
"tools.ietf.org/html/rfc9207>`_"
msgstr ""

#: ../development/specifications.rst:29 06b84e457b3f423099a45450e8be7b96
msgid ""
"❌ `RFC9394: OAuth 2.0 Rich Authorization Requests <https://www.rfc-editor."
"org/rfc/rfc9396.html>`_"
msgstr ""

#: ../development/specifications.rst:30 17a488e183c64a7696ff1f8b3f02e3d8
msgid ""
"❌ `OAuth2 Multiple Response Types <https://openid.net/specs/oauth-v2-"
"multiple-response-types-1_0.html>`_"
msgstr ""

#: ../development/specifications.rst:31 28df30b698994c9ebb429fbe577701ac
msgid ""
"❌ `OAuth2 Form Post Response Mode <https://openid.net/specs/oauth-v2-form-"
"post-response-mode-1_0.html>`_"
msgstr ""

#: ../development/specifications.rst:34 ../features.rst:223
#: 273611a66c514122bd1b8986c81f8464 511272a32c844e4cb9ca0d2c2b0aeb42
msgid "OpenID Connect"
msgstr ""

#: ../development/specifications.rst:36 1b811c589c884281a965b470a69c935c
msgid ""
"✅ `OpenID Connect Core <https://openid.net/specs/openid-connect-core-1_0."
"html>`_"
msgstr ""

#: ../development/specifications.rst:37 8eb4c67d2de84a09ba6681ab0ad1dcf0
msgid ""
"✅ `OpenID Connect Discovery <https://openid.net/specs/openid-connect-"
"discovery-1_0.html>`_"
msgstr ""

#: ../development/specifications.rst:38 3dd0ab1827034c7f8bb58dd56463cb2a
msgid ""
"✅ `OpenID Connect Dynamic Client Registration <https://openid.net/specs/"
"openid-connect-registration-1_0.html>`_"
msgstr ""

#: ../development/specifications.rst:39 5202769d4fed46999e56f7d6a0a03c5d
msgid ""
"✅ `OpenID Connect RP Initiated Logout <https://openid.net/specs/openid-"
"connect-rpinitiated-1_0.html>`_"
msgstr ""

#: ../development/specifications.rst:40 768d7dd2182a418fb9344db3f5cba48a
msgid ""
"❌ `OpenID Connect Session Management <https://openid.net/specs/openid-"
"connect-session-1_0.html>`_"
msgstr ""

#: ../development/specifications.rst:41 bffbc632d9bf4c89b64bb51cdece0844
msgid ""
"❌ `OpenID Connect Front Channel Logout <https://openid.net/specs/openid-"
"connect-frontchannel-1_0.html>`_"
msgstr ""

#: ../development/specifications.rst:42 3001306e82cc4e9b80078a4631c791f9
msgid ""
"❌ `OpenID Connect Back Channel Logout <https://openid.net/specs/openid-"
"connect-backchannel-1_0.html>`_"
msgstr ""

#: ../development/specifications.rst:43 3e1058c4a8154eb58a563e171a03a51b
msgid ""
"❌ `OpenID Connect Back Channel Authentication Flow <https://openid.net/"
"specs/openid-client-initiated-backchannel-authentication-core-1_0.html>`_"
msgstr ""

#: ../development/specifications.rst:44 7d20317b02f54007a0d6e9e79b82b243
msgid ""
"❌ `OpenID Connect Core Error Code unmet_authentication_requirements "
"<https://openid.net/specs/openid-connect-unmet-authentication-"
"requirements-1_0.html>`_"
msgstr ""

#: ../development/specifications.rst:45 cc695337a4a4431c9a62bdc2471f489d
msgid ""
"✅ `Initiating User Registration via OpenID Connect 1.0 <https://openid.net/"
"specs/openid-connect-prompt-create-1_0.html>`_"
msgstr ""

#: ../development/specifications.rst:46 6cfd3e82e2bb4f80a58d8864be2ef301
msgid ""
"❌  `OpenID Connect Profile for SCIM Services <https://openid.net/specs/"
"openid-connect-scim-profile-1_0.html>`_"
msgstr ""

#: ../development/specifications.rst:49 ../development/specifications.rst:108
#: d9278a9cbe784818b57f9fd9d76dda68
msgid "SCIM"
msgstr ""

#: ../development/specifications.rst:51 6599ee73d8ab49579b0e09836d421750
msgid "Canaille provides a basic SCIM server implementation."
msgstr ""

#: ../development/specifications.rst:53 c91f11a0512e4782981c5bb98a8038d7
msgid ""
"🟠 `RFC7642: System for Cross-domain Identity Management: Definitions, "
"Overview, Concepts, and Requirements <https://www.rfc-editor.org/rfc/"
"rfc7642>`_"
msgstr ""

#: ../development/specifications.rst:54 2f4ea31b4c80425a8e3075b8597ae8e5
msgid ""
"🟠 `RFC7643: System for Cross-domain Identity Management: Core Schema "
"<https://www.rfc-editor.org/rfc/rfc7642>`_"
msgstr ""

#: ../development/specifications.rst:55 6ffdb285557144afb301b05c33fecddf
msgid ""
"🟠 `RFC7644: System for Cross-domain Identity Management: Protocol <https://"
"www.rfc-editor.org/rfc/rfc7642>`_"
msgstr ""

#: ../development/specifications.rst:57 0b5af403924542a99c63f28eaab81ca5
msgid ""
"Client-side implementation (i.e. broadcasting changes on users and groups "
"among clients) and advanced features will be implemented in the future."
msgstr ""

#: ../development/specifications.rst:60 f4700ad912314bfc8d66be8471a4c772
msgid "What's implemented"
msgstr ""

#: ../development/specifications.rst:62 ../development/specifications.rst:83
#: a221acec85ca4725b2951cb9b51e20d5 a3820ca28394481b85c5906175c9211b
msgid "Endpoints:"
msgstr ""

#: ../development/specifications.rst:64 fda698ab71304acb81f54cb02fbeea05
msgid "/Users (GET, POST)"
msgstr ""

#: ../development/specifications.rst:65 888be4da4f194f319087de8e766157f2
msgid "/Users/<user_id> (GET, PUT, DELETE)"
msgstr ""

#: ../development/specifications.rst:66 172c39c33a9d4449b9fa08649f7e1db5
msgid "/Groups (GET, POST)"
msgstr ""

#: ../development/specifications.rst:67 351bfa9248414180b3e2e12f3e39a7cc
msgid "/Groups/<user_id> (GET, PUT, DELETE)"
msgstr ""

#: ../development/specifications.rst:68 0b3147e232df4562abe864dcc3c62600
msgid "/ServiceProviderConfig (GET)"
msgstr ""

#: ../development/specifications.rst:69 d12ef72fdb2a4faf91c5f3a6606e09d3
msgid "/Schemas (GET)"
msgstr ""

#: ../development/specifications.rst:70 3a2387dace19496d9539e3adb6b3a634
msgid "/Schemas/<schema_id> (GET)"
msgstr ""

#: ../development/specifications.rst:71 7bd1a03ce13a4a519529ffa633c39dad
msgid "/ResourceTypes (GET)"
msgstr ""

#: ../development/specifications.rst:72 7bc66e9808184fa28e9af54c0a2ca411
msgid "/ResourceTypes/<resource_type_id> (GET)"
msgstr ""

#: ../development/specifications.rst:74 65ccf2057cb044258e738dd9dcfb0582
msgid "Features:"
msgstr ""

#: ../development/specifications.rst:76 ef940c8ad25f4e97a8d4fa1ee9bfd786
msgid ":rfc:`pagination <7644#section-3.4.2.4>`"
msgstr ""

#: ../development/specifications.rst:81 f4700ad912314bfc8d66be8471a4c772
msgid "What is not implemented yet"
msgstr ""

#: ../development/specifications.rst:85 76085a65129e4d1387aa1ccb5b5b2bba
msgid "/Users (PATCH)"
msgstr ""

#: ../development/specifications.rst:86 da3a2dd71b204dd8941958051a0ca269
msgid "/Groups (PATCH)"
msgstr ""

#: ../development/specifications.rst:87 1936b0ba8c5743b397c3dcc914f453fc
msgid ":rfc:`/Me <7644#section-3.11>` (GET, POST, PUT, PATCH, DELETE)"
msgstr ""

#: ../development/specifications.rst:88 d6095a95a820448c8e93c6205907d2c0
msgid ":rfc:`/Bulk <7644#section-3.11>` (POST)"
msgstr ""

#: ../development/specifications.rst:89 8ae6230d4d04470587eabc0e85bfd237
msgid ":rfc:`/.search <7644#section-3.4.3>` (POST)"
msgstr ""

#: ../development/specifications.rst:91 ../features.rst:9
#: 8b8d299ade65429ab2a1739bbeca65b0 61a68141a485477a9fb49921e7b8aa3a
msgid "Features"
msgstr ""

#: ../development/specifications.rst:93 f85742cf16c0404a99264064c75cebbd
msgid ":rfc:`filtering <7644#section-3.4.2.2>`"
msgstr ""

#: ../development/specifications.rst:94 e20e4adefa5947319005523f6b6a9377
msgid ":rfc:`sorting <7644#section-3.4.2.3>`"
msgstr ""

#: ../development/specifications.rst:95 02742549d8f54bc18893ecb9c419809c
msgid ":rfc:`attributes selection <7644#section-3.4.2.5>`"
msgstr ""

#: ../development/specifications.rst:96 9e10ed15bc1b477ea12326a749bf64b8
msgid ":rfc:`ETags <7644#section-3.14>`"
msgstr ""

#: ../development/specifications.rst:99 ac600b38603f4fb999aebf5ffbe33cc7
msgid "Comparison with other providers"
msgstr ""

#: ../development/specifications.rst:101 2ef9567e17694a669ed5071c882661ad
msgid "Here is a feature comparison with other OpenID Connect server software."
msgstr ""

#: ../development/specifications.rst:103 d6d241980d3e46e192dd54a5082b0197
msgid ""
"Canaille voluntarily only implements the OpenID Connect protocol to keep its "
"codebase simple."
msgstr ""

#: ../development/specifications.rst:106 0b9a4fba353c483692ed6fb04227691e
msgid "Software"
msgstr ""

#: ../development/specifications.rst:106 62c2fe7c97644cfa8e7d297a337bfe36
msgid "Project"
msgstr ""

#: ../development/specifications.rst:106 f4700ad912314bfc8d66be8471a4c772
msgid "Protocols implementations"
msgstr ""

#: ../development/specifications.rst:108 ea237be2a99a4940be67516a1b95d97d
msgid "FLOSS"
msgstr ""

#: ../development/specifications.rst:108 55d5dd9174f94ca9850b999864598259
msgid "Language"
msgstr ""

#: ../development/specifications.rst:108 27002c409c6440d29ae89e91559a6994
msgid "LOC"
msgstr ""

#: ../development/specifications.rst:108 3ba35fd6c6d44150b4b049cf603e4a85
msgid "OIDC"
msgstr ""

#: ../development/specifications.rst:108 dc762bcd6eca4fc79dae1ca65c411351
msgid "SAML"
msgstr ""

#: ../development/specifications.rst:108 6ae5803282c4439a9e7b1c1570e4c505
msgid "CAS"
msgstr ""

#: ../development/specifications.rst:110 f4c4ac6fdea74558a74bc9a3cefbb5c7
msgid "Canaille"
msgstr ""

#: ../development/specifications.rst:110 ../development/specifications.rst:112
#: ../development/specifications.rst:114 ../development/specifications.rst:116
#: ../development/specifications.rst:118 ../development/specifications.rst:120
#: ../development/specifications.rst:122 ../development/specifications.rst:124
#: ../development/specifications.rst:126 ../development/specifications.rst:128
#: ../development/specifications.rst:130 ../development/specifications.rst:132
#: 33e7166b401144bcadff959d61e03c4c c2035a448fa9405a92d51c9c90277394
#: 7bba6b8427854a41b99c15b883290007 588ab8a50fca4528b9a471dbddfb7d4a
#: ba65de35554741a48a7eb4a72fc66433 4dd20636352243038f0bdad8d15e8449
#: 5b23071246ab41f1abd1bfa5596a4b46 c1aa2d442f2047f9a1194e38c2b1ddd1
#: ce03d94ab7954c02968bfb44eb0f72fd 9fb4e3e247d846419051f2852ffa3f31
#: f5e5911bcb704af19c073370f437c1b4 e063ffcc58474df4a66b2814eb4c0f61
#: cff48ca4a13545309d9e1b58c3dede80 e55ccef99f4a45be8fb35a1ed8bb1ac4
#: 4b09487097334807804aaba873d4dc7b c9b45500d9d145a8862c978d95329330
#: c34b7940cbbd4218af2cb94e8eb24fc7 8a394726b7b941dfbbd8af3e546782c1
#: f5320617a03e47dea905ac5a70208c70
msgid "✅"
msgstr ""

#: ../development/specifications.rst:110 ../development/specifications.rst:116
#: 86f975b8aaab4af9bfc62ef2df91ba28
msgid "Python"
msgstr ""

#: ../development/specifications.rst:110 3a757539fafc4e3aa92dbdec5227a2df
msgid "10k"
msgstr ""

#: ../development/specifications.rst:110 ../development/specifications.rst:112
#: ../development/specifications.rst:114 ../development/specifications.rst:116
#: ../development/specifications.rst:118 ../development/specifications.rst:120
#: ../development/specifications.rst:122 ../development/specifications.rst:126
#: ../development/specifications.rst:130 ../development/specifications.rst:132
#: 0baee04e46584b46ab2b5bd83dea4c0d 94a1a61f502a42569788cfe93ad6bcf7
msgid "❌"
msgstr ""

#: ../development/specifications.rst:110 c3172c68b79b46e1ac155f9af8f8729f
msgid "🟠"
msgstr ""

#: ../development/specifications.rst:112 41d7747dc9384c6b908b8394168b5b5a
msgid "`Auth0`_"
msgstr ""

#: ../development/specifications.rst:112 ../development/specifications.rst:122
#: ../development/specifications.rst:124 ../development/specifications.rst:132
#: 8f85eeab9d6945af894c55e2a4aa0b9b
msgid "❔"
msgstr ""

#: ../development/specifications.rst:114 47ff7b1213464f85b246c4282f3af933
msgid "`Authelia`_"
msgstr ""

#: ../development/specifications.rst:114 ../development/specifications.rst:118
#: ../development/specifications.rst:126 5db56fd3e64948f5a108d2f74f7070b4
msgid "Go"
msgstr ""

#: ../development/specifications.rst:114 ../development/specifications.rst:126
#: 741e97755b8c4478b7e19ba006898401
msgid "50k"
msgstr ""

#: ../development/specifications.rst:116 7fb71b70103e40eeb178e1281ea81de3
msgid "`Authentic2`_"
msgstr ""

#: ../development/specifications.rst:116 cb26c38797d9416fafe5d1a1b5c5b03b
msgid "65k"
msgstr ""

#: ../development/specifications.rst:118 6f7fc7bbb2694f09a12393a74ffc8013
msgid "`Authentik`_"
msgstr ""

#: ../development/specifications.rst:118 bb964534c0704925b6d856bd54af7c7f
msgid "55k"
msgstr ""

#: ../development/specifications.rst:120 4604cb0778044b63807b2be23ced893c
msgid "`CAS`_"
msgstr ""

#: ../development/specifications.rst:120 ../development/specifications.rst:124
#: ../development/specifications.rst:128 aa3618e441ac413e83acdfe56631d15a
msgid "Java"
msgstr ""

#: ../development/specifications.rst:120 c316893b4f00454a8c5745071e0888b1
msgid "360k"
msgstr ""

#: ../development/specifications.rst:122 c8a158afb8d841209c20b9ef42e563cb
msgid "`Connect2id`_"
msgstr ""

#: ../development/specifications.rst:124 a264cd68201c442faf08474397c550aa
msgid "`Gluu`_"
msgstr ""

#: ../development/specifications.rst:126 e54b53bfeafd4764b01095c1cd0077b7
msgid "`Hydra`_"
msgstr ""

#: ../development/specifications.rst:128 87594578370246d494ef5e63196a3a92
msgid "`Keycloak`_"
msgstr ""

#: ../development/specifications.rst:128 d6304d1f41714ad5af15edb6febbfbc5
msgid "600k"
msgstr ""

#: ../development/specifications.rst:130 2efe7957b848447dacfecb082a95c438
msgid "`LemonLDAP`_"
msgstr ""

#: ../development/specifications.rst:130 cdd25b565e5d4de4b4202f82f4407843
msgid "Perl"
msgstr ""

#: ../development/specifications.rst:130 51b2d4fcc1fc43d2a692826a2b2c62d1
msgid "130k"
msgstr ""

#: ../development/specifications.rst:132 4c2a5d27487345f7bc3c1bbd0c897c47
msgid "`Okta`_"
msgstr ""

#: ../features.rst:11 5dd070084abb440ebf87c36df501f197
msgid ""
"Here are the different features that Canaille provides. You can enable any "
"of those features with the :doc:`configuration <references/configuration>` "
"to fit any :doc:`use cases <usecases>` you may meet. Check our  :ref:"
"`roadmap <features:Roadmap>` to see what is coming next."
msgstr ""

#: ../features.rst:15 83eef1f1157b4d37b4627438618f31ab
msgid ""
"Users can interact with Canaille through its :ref:`web interface <features:"
"Web interface>` and administrators can also use its :ref:`command line "
"interface <feature_cli>`. Canaille can handle data stored in different :ref:"
"`database backends <feature_databases>`."
msgstr ""

#: ../features.rst:19 73c7e363c37147fc825deea06ee26975
msgid "User and group management"
msgstr ""

#: ../features.rst:21 e19b2b99a8544219b61bbedc1229e77c
msgid ""
"Canaille web interface can be used either in :doc:`production environments "
"<tutorial/deployment>` or locally for development purposes."
msgstr ""

#: ../features.rst:26 ../index.rst:27 759b0714ba194bc5a5d043350cb4cd14
#: dd79223676e0465293d1499d8929fa26
msgid "Profile management"
msgstr ""

#: ../features.rst:28 ../features.rst:231 53e5483c51ae4df28138ae990c16de07
#: 0a36f2261b84450b98131ff740f7ceb9
msgid "Profile"
msgstr ""

#: ../features.rst:33 864adfa77693422cad803b08d9187a5e
msgid "Canaille provides an interface to manage user profiles."
msgstr ""

#: ../features.rst:35 505ce537381249ec82445d38a4e093df
msgid ""
"The exact list of displayed fields, and whether they are :attr:`writable "
"<canaille.core.configuration.ACLSettings.WRITE>` or :attr:`read-only "
"<canaille.core.configuration.ACLSettings.READ>` depends on the user :class:"
"`Access Control List settings (ACL) <canaille.core.configuration."
"ACLSettings>`."
msgstr ""

#: ../features.rst:37 625c7cea8a034a7ba263a71ce0587a26
msgid ""
"Depending on their ACL :class:`permissions <canaille.core.configuration."
"Permission>`, users can either be allowed to edit their own profile, edit "
"any user profile, or do nothing at all."
msgstr ""

#: ../features.rst:42 530dac22b587444cbd5de9ba2d7a3a90
msgid "Email confirmation"
msgstr ""

#: ../features.rst:44 2c3acd412bb944ab81ff2631784bff71
msgid ""
"If the :attr:`email confirmation feature <canaille.core.configuration."
"CoreSettings.EMAIL_CONFIRMATION>` is enabled, any modification or addition "
"of a profile email will send a confirmation mail to the new address. The "
"mail will contain a link that users will need to click on to confirm their "
"email address."
msgstr ""

#: ../features.rst:46 8d597149b59e45f896eff2baa716fc20
msgid ""
"Users with :attr:`user management permission <canaille.core.configuration."
"Permission.MANAGE_USERS>` can set user emails without confirmation though."
msgstr ""

#: ../features.rst:51 4a6be5a6b71a4a5ea35d7c4a41630e35
msgid "Group management"
msgstr ""

#: ../features.rst:53 ../features.rst:140 4824338c1fbf4fdd8c2e01534219ee98
#: 3d8b9fc086e945d890bf9b3e01c82984
msgid "Group edition"
msgstr ""

#: ../features.rst:58 afc7e192d41148e0a2ef8ec6f8944729
msgid ""
"In a similar fashion than :ref:`profile management "
"<feature_profile_management>` Canaille provides an interface to manage user "
"groups."
msgstr ""

#: ../features.rst:60 b83c6d0af7fe45228496bb2c594cf88c
msgid ""
"The group management is quite simple at the moment and consists in a group "
"name and description, and the list of its members. Group membership can be "
"use as :attr:`ACL Filter <canaille.core.configuration.ACLSettings.FILTER>` "
"to define user permissions."
msgstr ""

#: ../features.rst:63 ../features.rst:83 ../features.rst:149
#: ../tutorial/deployment.rst:13 ../tutorial/provisioning.rst:21
#: 6fdf0a969ccb49e1bf9bfc28f4df9169 4065a0b70a1444058df3bb16f0abc445
#: bc0be7a805e04b5f91b89db28d7dffae 7ab21494d11e4287acffeb771f8f5244
#: 9df6890219304d7dbb04c9b7817147f5
msgid "Todo"
msgstr ""

#: ../features.rst:64 60eafd84b6934482b1ec0831e6aaa3b7
msgid ""
"At the moment adding an user to a group can only be achieved by the user "
"settings page, but we are :issue:`working to improve this <192>`."
msgstr ""

#: ../features.rst:66 6440e19e527d4d5f8abc44d99c8a3dba
msgid ""
"Group management can be enable with a :attr:`dedicated user permission "
"<canaille.core.configuration.Permission.MANAGE_GROUPS>`."
msgstr ""

#: ../features.rst:69 2382414ec97641a4925e741a26ae3148
msgid ""
"Due to limitations in the :ref:`LDAP backend <tutorial/databases:LDAP>`, "
"groups must have at least one member. Thus it is not possible to remove the "
"last user of a group without removing the group."
msgstr ""

#: ../features.rst:75 ../index.rst:34 b136f97d836d4c8dbb63cd671ceebe4e
#: 76d8725ced9e421f98de5fb1e1ee01a2
msgid "User authentication"
msgstr ""

#: ../features.rst:77 022b43e4ff7f4932aa151eaade78aeb6
msgid ""
"Unless their account is :ref:`locked <feature_account_locking>`, users can "
"authenticate with a login and a password."
msgstr ""

#: ../features.rst:81 1a8cb7dc227a452b81768be3758a8fb4
msgid ""
"For security reasons, it won't be told to users if they try to sign in with "
"an unexisting logging, unless explicitly :attr:`set in the configuration "
"<canaille.core.configuration.CoreSettings.HIDE_INVALID_LOGINS>`."
msgstr ""

#: ../features.rst:83 778349cb3c344689bd8cc06184005e10
msgid ""
":ref:`LDAP backend <tutorial/databases:LDAP>` users can define which :class:"
"`user field <canaille.core.models.User>` should be used as the login (such "
"as :attr:`~canaille.core.models.User.user_name` or :attr:`~canaille.core."
"models.User.emails`) using a :attr:`configuration parameter <canaille."
"backends.ldap.configuration.LDAPSettings.USER_FILTER>`, but other backends "
"can only login using :attr:`~canaille.core.models.User.user_name`. We are :"
"issue:`working to improve this <196>`."
msgstr ""

#: ../features.rst:88 aa467ae3118543ed94401a8ca23776f1
msgid "User registration"
msgstr ""

#: ../features.rst:90 c81ba8ba520c4d8bb6c8475fe023404b
msgid ""
"Users can create accounts on Canaille if the :attr:`registration feature "
"<canaille.core.configuration.CoreSettings.ENABLE_REGISTRATION>` is enabled. "
"They will be able to fill a registration form with the fields detailed in "
"the default :class:`ACL settings <canaille.core.configuration.ACLSettings>`."
msgstr ""

#: ../features.rst:92 c1f2442a948d414e9b9983d79aa91ae4
msgid ""
"If :attr:`email confirmation <canaille.core.configuration.CoreSettings."
"EMAIL_CONFIRMATION>` is also enabled, users will be sent a confirmation link "
"to their email address, on which they will need to click in order to "
"finalize their registration."
msgstr ""

#: ../features.rst:97 ../features.rst:99 3d200c871e19420db3ce1885f7414a3c
#: 7bf61d1ad01240f7b1ed2db4ab0fdf77
msgid "User invitation"
msgstr ""

#: ../features.rst:104 134f042cb892434e922c01d62222ed54
msgid ""
"If a :class:`mail server <canaille.core.configuration.SMTPSettings>` is "
"configured, users with :attr:`user management permission <canaille.core."
"configuration.Permission.MANAGE_USERS>` can create an invitation link for "
"one user."
msgstr ""

#: ../features.rst:106 e054dbb49f644364a6aaadcb2f5a0024
msgid ""
"The link goes to a registration form, even if regular :ref:`user "
"registration <feature_user_registration>` is disabled."
msgstr ""

#: ../features.rst:108 536cbb5eff1444dda4ac45998d356fe6
msgid "It can be automatically sent by email to the new user."
msgstr ""

#: ../features.rst:113 c24731829c1949aeb3f54f0167ed8b37
msgid "Account locking"
msgstr ""

#: ../features.rst:115 48e7bf2282b5487f9437be3863edc5ed
msgid ""
"If Canaille is plugged to a :ref:`backend <feature_databases>` that supports "
"it, user accounts can be locked by users with :attr:`user management "
"permission <canaille.core.configuration.Permission.MANAGE_USERS>`. The lock "
"date can be set instantly or at a given date in the future."
msgstr ""

#: ../features.rst:118 31e7e6b90652414ab1b450f98ddb7d53
msgid "At the moment a user account is locked:"
msgstr ""

#: ../features.rst:120 6be8caf7464643e99cb2614ce0138045
msgid "their open sessions will be closed;"
msgstr ""

#: ../features.rst:121 93da628150674abe85e3ff8f27e83c0a
msgid "they won't be able to sign in again;"
msgstr ""

#: ../features.rst:122 e5196d576eb445d9aa83989d6f241c42
msgid "no new OIDC token will be issued;"
msgstr ""

#: ../features.rst:124 c784a99a157b46028eb5c3543da73e38
msgid ""
"User accounts must be manually unlocked by an administrator for the users to "
"regain access to those actions."
msgstr ""

#: ../features.rst:129 da2f0b388508475cbb3fd080de1ff44c
msgid "Account deletion"
msgstr ""

#: ../features.rst:131 5bc09c4f89764a1a950c44dc255b98d2
msgid ""
"Users with the :attr:`account deletion permission <canaille.core."
"configuration.Permission.DELETE_ACCOUNT>` are allowed to delete their own "
"account."
msgstr ""

#: ../features.rst:133 85f4ea778e8f45f7841ddf39f1bc8b41
msgid ""
"Users that also have the :attr:`user management permission <canaille.core."
"configuration.Permission.MANAGE_USERS>` are also allowed to delete other "
"users accounts."
msgstr ""

#: ../features.rst:138 86a66e197de94dcbb90d559730b89318
msgid "Password recovery"
msgstr ""

#: ../features.rst:145 6693db5e96354da69ed660a259c109ce
msgid ""
"If a :class:`mail server <canaille.core.configuration.SMTPSettings>` is "
"configured and the :attr:`password recovery feature <canaille.core."
"configuration.CoreSettings.ENABLE_PASSWORD_RECOVERY>` is enabled, then users "
"can ask for a password reset email if they cannot remember their password."
msgstr ""

#: ../features.rst:147 2f356fab771549f9bdca5fa4f3ca2e5e
msgid ""
"The email will be sent to the email addresses filled in their profile, and "
"will contain a link that will allow them to choose a new password. ."
msgstr ""

#: ../features.rst:151 a603b57c4fc54e67ba04056b0037ae8e
msgid "Check that password recovery is disabled on locked accounts."
msgstr ""

#: ../features.rst:156 1bdb193d14a444a2a823f0dcef03e8ad
msgid "Password reset"
msgstr ""

#: ../features.rst:158 077ee41f3059484dad80b08733aae520
msgid ""
"If a :class:`mail server <canaille.core.configuration.SMTPSettings>` is "
"configured, :attr:`user management permission <canaille.core.configuration."
"Permission.MANAGE_USERS>` can send password reset mails to users. The mails "
"contains a link that allow users to choose a new password without having to "
"retrieve the old one."
msgstr ""

#: ../features.rst:164 c4e7b07761674e608a0e2bfdd50a659a
msgid "Password initialization"
msgstr ""

#: ../features.rst:166 5043df71775449a78e19ce0296f8d9ee
msgid ""
"User :attr:`passwords <canaille.core.models.User.password>` are optional. If "
"a :class:`mail server <canaille.core.configuration.SMTPSettings>` is "
"configured, when users with no password attempt to sign in, they are invited "
"to click a button that will send them a password initialization mail. The "
"mail contains a link that leads to a form that allows users to choose a "
"password."
msgstr ""

#: ../features.rst:173 412b386c0c794b5d8c71ea7b51278da8
msgid "Password compromission check"
msgstr ""

#: ../features.rst:175 35e11da6bbdf4e2da05a3a66c24e1dbe
msgid ""
"If :attr:`password compromission check feature <canaille.core.configuration."
"CoreSettings.ENABLE_PASSWORD_COMPROMISSION_CHECK>` is enabled, Canaille will "
"check for password compromise on HIBP (https://haveibeenpwned.com/) every "
"time a new password is register. You will need to set an :attr:`admin email "
"<canaille.core.configuration.CoreSettings.ADMIN_EMAIL>`."
msgstr ""

#: ../features.rst:180 478b4f7b443f4f728085a2ea686b0248
msgid "Multi-factor authentication"
msgstr ""

#: ../features.rst:182 2e2c9ae9e2e24bce942de98d12d7fb33
msgid ""
"If the :attr:`one-time password feature <canaille.core.configuration."
"CoreSettings.OTP_METHOD>` is set, then users will need to authenticate "
"themselves using a one-time password via an authenticator app. Two options "
"are supported : \"TOTP\" for time one-time password, and \"HOTP\" for HMAC-"
"based one-time password. In case of lost token, TOTP/HOTP authentication can "
"be reset by users with :attr:`user management permission <canaille.core."
"configuration.Permission.MANAGE_USERS>`. If a :class:`mail server <canaille."
"core.configuration.SMTPSettings>` is configured and the :attr:`email one-"
"time password feature <canaille.core.configuration.CoreSettings.EMAIL_OTP>` "
"is enabled, then users will need to authenticate themselves via a one-time "
"password sent to their primary email address. If a :class:`smpp server "
"<canaille.core.configuration.SMPPSettings>` is configured and the :attr:`sms "
"one-time password feature <canaille.core.configuration.CoreSettings."
"SMS_OTP>` is enabled, then users will need to authenticate themselves via a "
"one-time password sent to their primary phone number."
msgstr ""

#: ../features.rst:189 cbba3fccd9f84230b6eb0774cfd7e109
msgid "Web interface"
msgstr ""

#: ../features.rst:194 fab0081b9bd4460098de6df7d8c317b5
msgid "Internationalization"
msgstr ""

#: ../features.rst:196 46cf7a3a3e9047439aa7fa6654b07921
msgid "Translation state"
msgstr ""

#: ../features.rst:201 0a5afedc31de47a28d0bf7842a8558cd
msgid ""
"Canaile will display in your :attr:`preferred language <canaille.core.models."
"User.preferred_language>` if available, or your browser language if "
"available (and if it is not you can :ref:`help us with the translation "
"<development/contributing:Code translation>`). If you prefer, you can also :"
"attr:`force a language <canaille.core.configuration.CoreSettings.FAVICON>` "
"for every users."
msgstr ""

#: ../features.rst:207 2caebf718cab47029a83bb91253e36e5
msgid "Lightweight"
msgstr ""

#: ../features.rst:209 e3cbad3b2af0422287a92a4094559d8b
msgid ""
"The web interface is lightweight, so everything should load quickly. There "
"is a few Javascript here and there to smooth the experience, but no "
"Javascript at all is needed to use Canaille."
msgstr ""

#: ../features.rst:213 a7db848b637a46b1874f04fb542009e2
msgid "Customizable"
msgstr ""

#: ../features.rst:215 0c829a128889493fbc97247a60390954
msgid ""
"The default theme should be good enough for most usages. It has a dark "
"theme, display well on mobile, and let you choose a :attr:`logo <canaille."
"core.configuration.CoreSettings.LOGO>` and a :attr:`favicon <canaille.core."
"configuration.CoreSettings.FAVICON>`."
msgstr ""

#: ../features.rst:218 3a69d40c024744af967a1408c054aca0
msgid ""
"If you need more you can also use a :attr:`custom theme <canaille.core."
"configuration.CoreSettings.THEME>`."
msgstr ""

#: ../features.rst:225 003c4e8eee334a9d89486e2c0ae5d106
msgid ""
"Canaille implements a :ref:`subset<development/specifications:State of the "
"specs in Canaille>` of the OAuth2/OpenID Connect specifications . This "
"allows to provide :abbr:`SSO (Single Sign-On)` and :abbr:`SLO (Single Log-"
"On)` to applications plugged to Canaille."
msgstr ""

#: ../features.rst:229 51e9a6e1ddb04b99a6a73135fc8728e7
msgid "Consent management"
msgstr ""

#: ../features.rst:237 a613e3d10f1243f3bc5d4e796b278c89
msgid ""
"Users can give their consent to application requesting access to their "
"personal information, and then revoke those consent at their will."
msgstr ""

#: ../features.rst:241 115bec7ea8944f6ab98641d9bd2540ec
msgid "Application management"
msgstr ""

#: ../features.rst:243 526d36374a8747d6ad6280379bcf664c
msgid ""
"Users with the right :attr:`permission <canaille.core.configuration."
"Permission.MANAGE_OIDC>` can manager OIDC clients through the web interface."
msgstr ""

#: ../features.rst:245 79f0217902dc4b2ca73128ff6c16e7b5
msgid ""
"In some cases, it might be useful to avoid the consent page for some trusted "
"applications, so clients can be pre-consented."
msgstr ""

#: ../features.rst:248 d1f7f85df6404afe91d29e4dee44be1d
msgid "Discovery"
msgstr ""

#: ../features.rst:250 8b306f1c76664574a0f3d85805a46d87
msgid ""
"Canaille implements the :doc:`Discovery specifications <development/"
"specifications>` so most of the applications plugged to Canaille can auto-"
"configure themselves."
msgstr ""

#: ../features.rst:253 d5a2f0c4fa2f4363b5e87c4243376aaa
msgid "Dynamic Client Registration"
msgstr ""

#: ../features.rst:255 800aec57df82487f80fc7da359dc5c34
msgid ""
"Canaille implements the :doc:`Dynamic Client Registration specifications "
"<development/specifications>`, so when the :attr:`feature is enabled "
"<canaille.oidc.configuration.OIDCSettings."
"DYNAMIC_CLIENT_REGISTRATION_OPEN>`, clients can register themselves on "
"Canaille without an administrator intervention."
msgstr ""

#: ../features.rst:258 9cae9e0af58f499dac34354e9c12785d
msgid "System administration"
msgstr ""

#: ../features.rst:263 ../references/commands.rst:2
#: 9b5fcf18f6214856ae377f83005f8309 e2a97a5dfb5844f9a74c78b1a28ed23f
msgid "Command Line Interface"
msgstr ""

#: ../features.rst:265 98ef5f39d74944668dfff8b63d9d6199
msgid ""
"Canaille comes with a :abbr:`CLI (Command Line Interface)` to help "
"administrators in hosting and management."
msgstr ""

#: ../features.rst:267 9a30112ff2eb47c69263e73aa3c4ee15
msgid ""
"There are tools to :ref:`check your configuration <cli_check>` or to :ref:"
"`install missing parts <cli_install>`. You can use the CLI to :ref:`create "
"<cli_create>`, :ref:`read <cli_get>`, :ref:`update <cli_set>` and :ref:"
"`delete <cli_delete>` models such as :class:`users <canaille.core.models."
"User>`, :class:`groups <canaille.core.models.Group>` or  :class:`OIDC "
"clients <canaille.oidc.basemodels.Client>`."
msgstr ""

#: ../features.rst:270 02d13c90aa8f41f5b1007cd67fcea510
msgid ""
"There are also tools to :ref:`fill your database <cli_populate>` with random "
"objects, for tests purpose for instance."
msgstr ""

#: ../features.rst:275 ../tutorial/databases.rst:2
#: 0225297b7d884971a952f5ec904a15ac cf1fc0e0abb74b3ca66c1e92a5e773e9
msgid "Databases"
msgstr ""

#: ../features.rst:277 1a7af5dc07fa4f6c9231664737ee46a7
msgid ""
"Canaille can handle data from the most :ref:`common SQL databases <tutorial/"
"databases:SQL>` such as PostgreSQL, MariaDB or SQLite, as well as :ref:"
"`OpenLDAP <tutorial/databases:LDAP>`. It also comes with a no-dependency :"
"ref:`in-memory database <tutorial/databases:Memory>` that can be used in "
"unit tests suites."
msgstr ""

#: ../features.rst:283 a6a6a7334af54051aebed82d83027ea8
msgid "Logging"
msgstr ""

#: ../features.rst:285 9bc7705bd378459abf2f813381aa58a6
msgid ""
"Canaille writes :attr:`logs <canaille.core.configuration.CoreSettings."
"LOGGING>` for every important event happening, to help administrators "
"understand what is going on and debug funky situations."
msgstr ""

#: ../features.rst:287 2aeb5161276a4f048c40a7256c3d7f0e
msgid ""
"The following security events are logged with the log level \"security\" for "
"easy retrieval :"
msgstr ""

#: ../features.rst:289 ed4be0b57afe4ce9976c45f03c249444
msgid "Authentication attempt"
msgstr ""

#: ../features.rst:290 452456f9907e4bbd89439903c2fc9ebc
msgid "Password update"
msgstr ""

#: ../features.rst:291 9ccb4ef2a139403c85223576eb87a182
msgid "Email update"
msgstr ""

#: ../features.rst:292 bd0936deb7994f8fb59f2f0a47115edc
msgid "Forgotten password mail sent to user"
msgstr ""

#: ../features.rst:293 bd0936deb7994f8fb59f2f0a47115edc
msgid "One-time password mail sent to user"
msgstr ""

#: ../features.rst:294 478b4f7b443f4f728085a2ea686b0248
msgid "Multi-factor authentication reset"
msgstr ""

#: ../features.rst:295 02079fe76d2041aaba48a6b2079630f1
msgid "Token emission"
msgstr ""

#: ../features.rst:296 814519684d8c47a5b0b5ae6eaa9aa66e
msgid "Token refresh"
msgstr ""

#: ../features.rst:297 4489f99b64dd40248f28453fb8b4b0df
msgid "Token revokation"
msgstr ""

#: ../features.rst:298 99abcc04f85649c1b184e22e67b36f18
msgid "New consent given for client application"
msgstr ""

#: ../features.rst:299 c64802d623a74d678c4aca29f82c39d7
msgid "Consent revokation"
msgstr ""

#: ../features.rst:304 f9d92f5f76a745ee97ea36afc853c516
msgid "Development and testing tool"
msgstr ""

#: ../features.rst:309 9c0500515a5847c2bec5b1bb743f42fc
msgid "Unit-testing tool"
msgstr ""

#: ../features.rst:311 b1dc62a0c2024ff1bd6682408301766a
msgid ""
"Thanks to its lightweight :ref:`in-memory database <tutorial/databases:"
"Memory>` and its curated :ref:`dependency list <tutorial/install:Get the "
"code>`, Canaille can be used in the unit test suite of your application, so "
"you can check how it behaves against a real world OpenID Connect server. If "
"you work with python you might want to check :doc:`pytest-iam:index`."
msgstr ""

#: ../features.rst:314 ff4f45059bc2485eb5fa0145f5f01f9a
msgid "Development server"
msgstr ""

#: ../features.rst:316 a430530dc1ac42b680a9024e920dad7d
msgid ""
"It can also being launched in your development environment, if you find that "
"launching a Keycloak in a Docker container is too heavy for your little web "
"application."
msgstr ""

#: ../features.rst:321 3594d882079a4c89b28f0d9b25b5a647
msgid "Continuous Integration tools"
msgstr ""

#: ../features.rst:323 f7bb141a215c46df915ce63b47f13cdb
msgid ""
"It also fits well in continuous integration scenarios. Thanks to its :ref:"
"`CLI <feature_cli>`, you can prepare data in Canaille, let your application "
"interact with it, and then check the side effects."
msgstr ""

#: ../features.rst:326 beb39ccb89e040118104ba0c0f41eb71
msgid "Roadmap"
msgstr ""

#: ../features.rst:329 4fee3c311fe844bbb345bd5b562844ad
msgid "Bêta version"
msgstr ""

#: ../features.rst:331 f699343ae7fe4f12a9d12f4692c22827
msgid ""
"To go out of the current Alpha version we want to achieve the following "
"tasks:"
msgstr ""

#: ../features.rst:333 c8aec1fe7d574a789319e75cc64bd2e7
msgid ":issue:`Configuration validation using pydantic <138>`"
msgstr ""

#: ../features.rst:336 706d590389f54c40ba1b219877946bb5
msgid "Stable version"
msgstr ""

#: ../features.rst:338 54c0d4cc60054a5ebe7456575b1b70c3
msgid ""
"Before we push Canaille in stable version we want to achieve the following "
"tasks:"
msgstr ""

#: ../features.rst:341 7807e2d92e264bc78fd5b6a3c63beb3a
msgid "Security"
msgstr ""

#: ../features.rst:343 577ab46503ee45e89daa8c42938635e5
msgid ":issue:`Password hashing configuration <175>`"
msgstr ""

#: ../features.rst:344 a337cb0aac704dbca90dd70f1d68456d
msgid ":issue:`Authentication logging policy <177>`"
msgstr ""

#: ../features.rst:345 39adf64b80444b27bb6f9f11747a6960
msgid ":issue:`Intruder lockout <173>`"
msgstr ""

#: ../features.rst:346 3eeac7b1dec04fe9b990864b8810db50
msgid ":issue:`Password expiry policy <176>`"
msgstr ""

#: ../features.rst:347 4ad4707b7d02481ab507ded2d410eb70
msgid ":issue:`Multi-factor authentication: Email <47>`"
msgstr ""

#: ../features.rst:348 478b4f7b443f4f728085a2ea686b0248
msgid ":issue:`Multi-factor authentication: SMS <47>`"
msgstr ""

#: ../features.rst:349 fd624a7e3d404428830928ee05ec5348
msgid ":issue:`Multi-factor authentication: OTP <47>`"
msgstr ""

#: ../features.rst:352 a6acbc89a16a4fad8658fb33764830ad
msgid "Packaging"
msgstr ""

#: ../features.rst:354 575b556539994d1190e50cbfd0133bd4
msgid ":issue:`Nix package <190>`"
msgstr ""

#: ../features.rst:355 f8facef108bf4d668509e57200f732bb
msgid ":issue:`Docker / OCI package <59>`"
msgstr ""

#: ../features.rst:358 92825d26f07c4b718121c2784a9b6b81
msgid "And beyond"
msgstr ""

#: ../features.rst:360 ac17ddb06c4d400ebc190454535608c2
msgid ":issue:`OpenID Connect certification <182>`"
msgstr ""

#: ../features.rst:361 1b80703b0f434fe6ade3288840b9cf3c
msgid ":issue:`SCIM support <116>`"
msgstr ""

#: ../index.rst:15 2c1f5afe842843a6bbedd65606fde0f5
msgid "Lightweight Identity and Authorization Management"
msgstr ""

#: ../index.rst:19 0fa9dc97ee984c00a9460a07144eba66
msgid ""
"**Canaille** is a French word meaning *rascal*. It is roughly pronounced "
"**Can I?**, as in *Can I access your data?* Canaille is a lightweight "
"identity and authorization management software. It aims to be very light, "
"simple to install and simple to maintain. Its main features are :"
msgstr ""

#: ../index.rst:31 8b56e6fd5b374afbadf70d3371ad8538
msgid "User profile and groups management, Basic permissions"
msgstr ""

#: ../index.rst:38 ae2a113a2f63489ebb6a9696df422ed1
msgid ""
"Authentication, registration, email confirmation, \"I forgot my password\" "
"emails"
msgstr ""

#: ../index.rst:40 c4659885674a4b848e904b352c94b89c
msgid "SSO"
msgstr ""

#: ../index.rst:44 3dabf6a8010d4aff943f07dbf6fe52aa
msgid "OpenID Connect identity provider"
msgstr ""

#: ../index.rst:46 f7caa27d43354246a89db295901976cb
msgid "Multi-database support"
msgstr ""

#: ../index.rst:50 73b988c55cc241eeafe075a55fd037a0
msgid "PostgreSQL, Mariadb and OpenLDAP first-class citizenship"
msgstr ""

#: ../index.rst:52 9caead4464284ccca1a59bff67fbec2d
msgid "Customization"
msgstr ""

#: ../index.rst:56 e2604712b57b4583b53181a9fefcda0e
msgid "Put Canaille at yours colors by choosing a logo or use a custom theme!"
msgstr ""

#: ../index.rst:58 b168d0612c04400e8b259edb581dc6c7
msgid "Developers friendliness"
msgstr ""

#: ../index.rst:62 8b5f849ae22348f19d5d8feca1590032
msgid ""
"Canaille can easily fit in your unit tests suite or in your Continuous "
"Integration."
msgstr ""

#: ../index.rst:66 a4dbd4558bda425cab549061b5952854
msgid ":doc:`Full feature list <features>` :doc:`Common use cases <usecases>`"
msgstr ""

#: ../references/commands.rst:4 574cb073f7584f8599a4cc129a337c4a
msgid ""
"Canaille provide several commands to help administrator manage their data."
msgstr ""

#: ../references/commands.rst:6 aa7436e81d0347aca49e76837769f92b
msgid ""
"Generally, some configuration has to be loaded by `Canaille`. This can be "
"achieved by :ref:`configuration loading method<references/configuration:Load "
"the configuration>` available, but most of the time a ``CONFIG`` environment "
"variable is used. For the sake of readability, it is omitted in the "
"following examples."
msgstr ""

#: ../../canaille check:1 d3880ac07b8641fbb96a657384193437
msgid "Test the configuration file."
msgstr ""

#: ../../canaille check:1 8edd9caa824f4c3aa3298a3e0b28a418
msgid ""
"Attempt to reach the database and the SMTP server with the provided "
"credentials."
msgstr ""

#: ../../canaille clean:1 15fc7dadf416460fb034401cb2298ddc
msgid "Remove expired tokens and authorization codes."
msgstr ""

#: ../../canaille install:1 f58f2f270c9642208409eab2a078aa10
msgid "Installs canaille elements from the configuration."
msgstr ""

#: ../../canaille install:1 ee828128d3684eaea85f63a4d8efb295
msgid ""
"For instance, depending on the configuration, this can generate OIDC keys or "
"install LDAP schemas."
msgstr ""

#: ../../canaille populate:1 df2355b792904bae8c2adfdc44e3abc1
msgid "Populate the database with generated random data."
msgstr ""

#: ../references/commands.rst:0 25c273b3659241e5a58c4ccfc4d1aa62
#: 23e595a7ef3e40738c72964260d647d4 b9df5380bb904ef3b2c158886514b1f4
#: 810cab23bf5f4e0bbe5e403092b4739f 2b944a79e15441a28501202fb405ceec
#: 337385bfcd154b46942fd5cc685e3c53 3c51398f5ef14fafac576c18c1938015
#: f7857604a6af425d92b5f49a3a571724 50ab489bedfa413b941eaca1514e779e
#: 817fa12a167549c2b2dcda5cf8aca990 e144249ab1e4497a8e2b59433d28dd94
#: 8e13e364d31643ebbcbea2ec3c48cebb 93521a77f0084af9b274926a73bb1866
#: 979aef4626814c74bd3208394714d692 145d1e9e3fe74947b6695497c7f75b40
#: 7e7e2edd89534686997d302f673e5005 2d123fd2ca8b46dbb63d2f8cd67b8a9b
#: 658ca5556e9b484884784c60355dcaba ecc2c5a1d0ee4d75a8dabc1519c9b46f
#: e9427573b4fd4fea8baa73d3dfd6c901
msgid "Options"
msgstr ""

#: ../../canaille populate:1 757aacf7045343ac87f0d6123fe1e181
msgid "Number of items to create"
msgstr ""

#: ../../canaille populate groups:1 0e4a01018e724dc6a6ca0b638d66852a
msgid "Populate the database with generated random groups."
msgstr ""

#: ../../canaille populate groups:1 b8f050417d3e4d5cb1abef74d5b23fef
msgid "The maximum number of users that will randomly be affected in the group"
msgstr ""

#: ../../canaille populate users:1 27cbff2cac6c4d0ba3a881e593e6d298
msgid "Populate the database with generated random users."
msgstr ""

#: ../../canaille get:1 a991a3b616044f2c932b1b5781575930
msgid "Read information about models."
msgstr ""

#: ../../canaille get:1 ff29fb8d5ce14bc291589af023d25348
msgid "Options can be used to filter models::"
msgstr ""

#: ../../canaille get:1 ebb9a30bb4ad418b937898f33eb3154d
msgid "Displays the matching models in JSON format in the standard output."
msgstr ""

#: ../../canaille get authorizationcode:1 3b7cec01bf904fbd95a74ecc629450d4
msgid "Search for authorizationcodes and display the matching models as JSON."
msgstr ""

#: ../../canaille get client:1 04713bc174844fbc90ffcd66309a32d7
msgid "Search for clients and display the matching models as JSON."
msgstr ""

#: ../../canaille get consent:1 3d85785b1e954ca48fb3600e102060dc
msgid "Search for consents and display the matching models as JSON."
msgstr ""

#: ../../canaille get group:1 a7f5ed4db7ca4b6e990d3008e3df40dd
msgid "Search for groups and display the matching models as JSON."
msgstr ""

#: ../../canaille get token:1 f28ab88c832f4310ba8fce02409a0471
msgid "Search for tokens and display the matching models as JSON."
msgstr ""

#: ../../canaille get user:1 243977ad7e504fedbd9646f89f934592
msgid "Search for users and display the matching models as JSON."
msgstr ""

#: ../../canaille set:1 f1db85f49bf44d11a4bb25bef94995c7
msgid "Update models."
msgstr ""

#: ../../canaille set:1 81f6f6bde2db46419feea67dae446a01
msgid "The command takes an model ID and edit one or several attributes::"
msgstr ""

#: ../../canaille set:1 2605d2f99fff4a3685e4acb6c7d08749
msgid "Displays the edited model in JSON format in the standard output."
msgstr ""

#: ../../canaille set authorizationcode:1 0e3e63095aaa4d10827812a9df412418
msgid ""
"Update a authorizationcode and display the edited model in JSON format in "
"the standard output."
msgstr ""

#: ../../canaille delete authorizationcode:1 set
#: 272d0df08f904f519632f9fd2fe65385 2f9f07b54e574b76b44a885d2edcee5f
msgid "IDENTIFIER should be a authorizationcode id or authorization_code_id"
msgstr ""

#: ../references/commands.rst:0 68201cc09cab43ae872191c5e1e0de51
#: 797f38593b54447e9abe286cd709857c 5f7b7a34cec54b7bb8813914c7b1da9e
#: e2da0bdb8e364ad4ac3fa9a24108e9c9 7a653436ae5244b3915e22f7b337b441
#: 83d05fec78e043fcbf55d763d9664075 314878b93dce45baac9f4ab7248087c2
#: 59d47562162a44fcb07558824e722d39 811906b3e60e4f96bb46272adf7a2702
#: 9f85ada6864146db941a9b74f9dccdcc e15f98264ca3466aa879164b237471d4
#: 23cb9085c4df46c5919811da9786751a 22f22ab9560046afbb4b9dec19f5e0c6
msgid "Arguments"
msgstr ""

#: ../../canaille delete authorizationcode:1 client:1 consent:1 group:1 token:1
#: user:1 reset-otp:1 set cafe88a3ce2e428eac214691a4cceb5a
#: 7b2ff0501238407193726c30d9eca3c9 0ba51222ad4a4533b4b41b1757a35c64
#: ea0c5446d43d40c49f2b92c5b3541ce9 9ac86d8bfd664383a081e3c1ede9c96e
#: cd7e04caa435456ca0cf597a4cf2b866 8d3a56d3d2d8434a96e06ee1db5c7f74
#: ee33e52044104463b44bf754ebc2bfd3 ec1ed557213c433f960f06a20c6305f0
#: 79fcf662ca834cb9bad46e70395f5c0d a2446c9d8a43489f95b98774f9e95af2
#: c84e4574c2934d05b8911fbf5ff07255 bf9e0c9d41c44b8b8cdebcc4b7005f8f
msgid "Required argument"
msgstr ""

#: ../../canaille set client:1 8fd29a2556aa4939a91f5dff64f750f9
msgid ""
"Update a client and display the edited model in JSON format in the standard "
"output."
msgstr ""

#: ../../canaille delete client:1 set 1fe7624c6c204327b3dea4672369b25c
#: a507a2cde7be4e01b653d88b1143bcc1
msgid "IDENTIFIER should be a client id or client_id"
msgstr ""

#: ../../canaille set consent:1 bc9887077625496493e99ffd14864f21
msgid ""
"Update a consent and display the edited model in JSON format in the standard "
"output."
msgstr ""

#: ../../canaille delete consent:1 set c40a621613bb4a57ae61d0bf635d4be1
#: 36c566d3a8d64d98b3139d1d408e6e33
msgid "IDENTIFIER should be a consent id or consent_id"
msgstr ""

#: ../../canaille set group:1 24bf72192e064a11ba8f4408dc6cd2f2
msgid ""
"Update a group and display the edited model in JSON format in the standard "
"output."
msgstr ""

#: ../../canaille delete group:1 set f9bb7a0e3cb74e87bd9647b1d854d4c5
#: 2b44dcf76741473980e37c9fb1f972c9
msgid "IDENTIFIER should be a group id or display_name"
msgstr ""

#: ../../canaille set token:1 ed64c8271e11430f829f537ac1c9fb03
msgid ""
"Update a token and display the edited model in JSON format in the standard "
"output."
msgstr ""

#: ../../canaille delete token:1 set 5872d15912fa4904bc7429f1e6c4e4e5
#: 2e473a0a6bc4446eb92d334a50bad9e0
msgid "IDENTIFIER should be a token id or token_id"
msgstr ""

#: ../../canaille set user:1 6db0783b2700470888b19c5bc6144406
msgid ""
"Update a user and display the edited model in JSON format in the standard "
"output."
msgstr ""

#: ../../canaille delete user:1 reset-otp:1 set
#: e98462e8df9b4465af9a63c0bbf21546 d7cebb3763ed4824afd5b69c0a82f605
#: df12574865ac496e81bfdf5c8218cba0
msgid "IDENTIFIER should be a user id or user_name"
msgstr ""

#: ../../canaille create:1 3f6211fedcff4c49a1a05bb0d923b452
msgid "Create models."
msgstr ""

#: ../../canaille create:1 dabf2e993c7e4f4e958ecf36a3a64cfa
msgid "The model attributes can be passed as command options::"
msgstr ""

#: ../../canaille create:1 88fc347eb7814471b13dc9a6b562dd75
msgid "Displays the created model in JSON format in the standard output."
msgstr ""

#: ../../canaille create authorizationcode:1 428bc4494e3f4f6d875f2a701295e030
msgid ""
"Create a new authorizationcode and display the created model in JSON format "
"in the standard output."
msgstr ""

#: ../../canaille create client:1 4f234a94637b44698b95c220d5c3d59e
msgid ""
"Create a new client and display the created model in JSON format in the "
"standard output."
msgstr ""

#: ../../canaille create consent:1 741d27c2f5fb448da39ad4955e77518e
msgid ""
"Create a new consent and display the created model in JSON format in the "
"standard output."
msgstr ""

#: ../../canaille create group:1 973102f969a0499692c7a2416dd0f469
msgid ""
"Create a new group and display the created model in JSON format in the "
"standard output."
msgstr ""

#: ../../canaille create token:1 4f44ca45c9f8454b950534b228e8ef12
msgid ""
"Create a new token and display the created model in JSON format in the "
"standard output."
msgstr ""

#: ../../canaille create user:1 35ce000da38042699e6154f107a3e814
msgid ""
"Create a new user and display the created model in JSON format in the "
"standard output."
msgstr ""

#: ../../canaille delete:1 fd758e22b29a4fd4b7f1c92876768518
msgid "Delete models."
msgstr ""

#: ../../canaille delete:1 42450f0ac5674556be84bcf4cc34c98f
msgid "The command takes a model ID and deletes it::"
msgstr ""

#: ../../canaille delete authorizationcode:1 4607eae8cf4c40a3a37bef887f2254a1
msgid "Delete a authorizationcode."
msgstr ""

#: ../../canaille delete client:1 01b65f6e61a848c490034606d1d00095
msgid "Delete a client."
msgstr ""

#: ../../canaille delete consent:1 b1dfdb33eba94dc2a71f9172cff74acb
msgid "Delete a consent."
msgstr ""

#: ../../canaille delete group:1 6c79a439e1f54f4f81194cc8d6fc5944
msgid "Delete a group."
msgstr ""

#: ../../canaille delete token:1 1fb9fa8740c442ff82297d480fbba5ca
msgid "Delete a token."
msgstr ""

#: ../../canaille delete user:1 b0298caa666647268cd204cbd1cccd4d
msgid "Delete a user."
msgstr ""

#: ../../canaille reset-otp:1 541bd186f2b6471d823d13677e2477bb
msgid ""
"Reset one-time password authentication for a user and display the edited "
"user in JSON format in the standard output."
msgstr ""

#: ../references/configuration.rst:2 6c3d1ad364a84afb9586b1b62e42dedb
msgid "Configuration"
msgstr ""

#: ../references/configuration.rst:5 fca2326d4bf84702b7d8d0f5d3a65f20
msgid "Load the configuration"
msgstr ""

#: ../references/configuration.rst:7 51e2253170d4489ab9598217182b6f1d
msgid ""
"Canaille can be configured either by a environment variables, environment "
"file, or by a configuration file."
msgstr ""

#: ../references/configuration.rst:10 1560e71d7b2d42aa8ec0accc06131b3d
msgid "Configuration file"
msgstr ""

#: ../references/configuration.rst:14 0fc2b0bc764345caba3f9402376e279a
msgid ""
"The configuration can be written in `toml` configuration file which path is "
"passed in the :envvar:`CONFIG` environment variable."
msgstr ""

#: ../../canaille/app/configuration.py:docstring of
#: canaille.app.configuration.RootSettings:11
#: ../references/configuration.rst:16 ../references/configuration.rst:98
#: ../tutorial/databases.rst:23 ../tutorial/databases.rst:37
#: ../tutorial/databases.rst:138 3626de52eeca4eecbda8f1d47354a80c
#: f59eab2f20b542f1af3ae7e6e4856266 c1e56e5ab5ba40228c68cd9eb470348d
#: 8acf4c15626e4f6897aa81c2e5e8ef42 830059290ddc4cf1b2249c45fc303b98
msgid "config.toml"
msgstr ""

#: ../references/configuration.rst:28 4b63b3891e1c45788780ea1af554d1db
msgid ""
"You can have a look at the :ref:`example file <references/configuration:"
"Example file>` for inspiration."
msgstr ""

#: ../references/configuration.rst:31 8cbac0cd9e3e4bc3ad5fc60d82180568
msgid "Environment variables"
msgstr ""

#: ../references/configuration.rst:33 b909831b5aed44a4b439b37701feabb7
msgid ""
"In addition, parameters that have not been set in the configuration file can "
"be read from environment variables. The way environment variables are parsed "
"can be read from the `pydantic-settings documentation <https://docs.pydantic."
"dev/latest/concepts/pydantic_settings/#parsing-environment-variable-"
"values>`_."
msgstr ""

#: ../references/configuration.rst:38 fd22a354c18f4733b8b1962cfcbe2139
msgid ""
"For environment vars, the separator between sections and variables is a "
"double underscore: ``__``. For instance, the ``NAME`` var in the "
"``CANAILLE`` section shown above is ``CANAILLE__NAME``."
msgstr ""

#: ../references/configuration.rst:42 f12f0cbb606e4627be2fa3b2a895f162
msgid "Environment file"
msgstr ""

#: ../references/configuration.rst:44 434c11ee0d6a4a118f9b8802d407d447
msgid ""
"Any environment variable can also be written in an environment file, which "
"path should be passed in the ``ENV_FILE`` environment variable. For "
"instance, set ``ENV_FILE=.env`` to load a ``.env`` file."
msgstr ""

#: ../references/configuration.rst:47 83d91b20c3204d09b61a4a6de8c84769
msgid ".env"
msgstr ""

#: ../references/configuration.rst:65 8fc48610072c4e248c494befe2a4c8f6
msgid "Configuration methods priority"
msgstr ""

#: ../references/configuration.rst:67 d3fdde7c8d9841e49e92bcba763e33d8
msgid ""
"If a same configuration option is defined by different ways, here is how "
"Canaille will choose which one to use:"
msgstr ""

#: ../references/configuration.rst:69 b79bfecad485446b85a8866657222448
msgid ""
"environment vars have priority over the environment file and the "
"configuration file;"
msgstr ""

#: ../references/configuration.rst:70 63800f5a14d44e1fa3ed0266e19f5482
msgid "environment file will have priority over the configuration file."
msgstr ""

#: ../references/configuration.rst:73 e8e7a0f78d68479a9586036adf25e183
msgid "Parameters"
msgstr ""

#: ../../canaille/app/configuration.py:docstring of
#: canaille.app.configuration.RootSettings:1 ba32908d458e4689a5d90a46b386fdf3
msgid ""
"The top-level namespace contains the configuration settings unrelated to "
"Canaille."
msgstr ""

#: ../../canaille/app/configuration.py:docstring of
#: canaille.app.configuration.RootSettings:4 fffc30ea67ab47d99472750172be2a29
msgid "The configuration parameters from the following libraries can be used:"
msgstr ""

#: ../../canaille/app/configuration.py:docstring of
#: canaille.app.configuration.RootSettings:6 ae9ceb139bfc47f8b383dec852b507c2
msgid ":doc:`Flask <flask:config>`"
msgstr ""

#: ../../canaille/app/configuration.py:docstring of
#: canaille.app.configuration.RootSettings:7 3d01d0dc9cdc47e59420f5b121370277
msgid ":doc:`Flask-WTF <flask-wtf:config>`"
msgstr ""

#: ../../canaille/app/configuration.py:docstring of
#: canaille.app.configuration.RootSettings:8 d573a04c56154eaf857d49c057690bfd
msgid ":doc:`Flask-Babel <flask-babel:index>`"
msgstr ""

#: ../../canaille/app/configuration.py:docstring of
#: canaille.app.configuration.RootSettings:9 552391e3f12c4385abb3e1a2e3929cfa
msgid ":doc:`Authlib <authlib:flask/2/authorization-server>`"
msgstr ""

#: ../../docstring of canaille.app.configuration.RootSettings.DEBUG:1
#: 4309008dba2c4aa79584299f19987ac4
msgid "The Flask :external:py:data:`DEBUG` configuration setting."
msgstr ""

#: ../../docstring of canaille.app.configuration.RootSettings.DEBUG:3
#: f8cb9ba68ed14b818c2fb2bcfbffb16a
msgid "This enables debug options."
msgstr ""

#: ../../docstring of canaille.app.configuration.RootSettings.DEBUG:7
#: 553b378e895a4b74aa242c08cd29450f
msgid ""
"This is useful for development but should be absolutely avoided in "
"production environments."
msgstr ""

#: ../../docstring of
#: canaille.app.configuration.RootSettings.PREFERRED_URL_SCHEME:1
#: cb2cc7437e4a4d3c90895c4148186b25
msgid ""
"The Flask :external:py:data:`PREFERRED_URL_SCHEME` configuration setting."
msgstr ""

#: ../../docstring of
#: canaille.app.configuration.RootSettings.PREFERRED_URL_SCHEME:4
#: 530f78ce6f4842c983c10b38fe4c4b93
msgid "This sets the url scheme by which canaille will be served."
msgstr ""

#: ../../docstring of canaille.app.configuration.RootSettings.SECRET_KEY:1
#: 42e179fea274407eb26dd67e4a6d14a5
msgid "The Flask :external:py:data:`SECRET_KEY` configuration setting."
msgstr ""

#: ../../docstring of canaille.app.configuration.RootSettings.SECRET_KEY:3
#: b16e239dce5c4f199a2fba1707c82d1a
msgid "You MUST change this."
msgstr ""

#: ../../docstring of canaille.app.configuration.RootSettings.SERVER_NAME:1
#: 0f0f60195f334cf597f67857740b2ace
msgid "The Flask :external:py:data:`SERVER_NAME` configuration setting."
msgstr ""

#: ../../docstring of canaille.app.configuration.RootSettings.SERVER_NAME:3
#: 39edb89e79af4a10a154a5c42d51e86e
msgid "This sets domain name on which canaille will be served."
msgstr ""

#: ../../canaille/core/configuration.py:docstring of
#: canaille.core.configuration.CoreSettings:1 d831c1b108eb4e96bb11a6ddc92ed45e
msgid "The settings from the ``CANAILLE`` namespace."
msgstr ""

#: ../../canaille/core/configuration.py:docstring of
#: canaille.core.configuration.CoreSettings:3 a51801e81d914eb3bfe1fa4e649133c1
msgid ""
"Those are all the configuration parameters that controls the behavior of "
"Canaille."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.ACL:1
#: 89de24471b434051a4a84e39bc47aded
msgid ""
"Mapping of permission groups. See :class:`ACLSettings` for more details."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.ACL:3
#: 1f85af06bed64d9da4417c6e6f7e244e
msgid "The ACL name can be freely chosen. For example:"
msgstr ""

#: ../../docstring of
#: canaille.backends.sql.configuration.SQLSettings.DATABASE_URI:4
#: canaille.core.configuration.ACLSettings.PERMISSIONS:6
#: canaille.core.configuration.CoreSettings.ACL:5
#: canaille.core.configuration.CoreSettings.LOGGING:12
#: 56ce67b55d3b4d8eba9a07b4feed2587 d9b0f4816c2644679233ec3b797c2fc4
msgid "..code-block:: toml"
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.ACL:7
#: dc73b62baf4f465598787ebb33191c7b
msgid ""
"[CANAILLE.ACL.DEFAULT] PERMISSIONS = [\"edit_self\", \"use_oidc\"] READ = "
"[\"user_name\", \"groups\"] WRITE = [\"given_name\", \"family_name\"]"
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.ACL:12
#: 56d15bcfdbcc4556a3848702228b970f
msgid "[CANAILLE.ACL.ADMIN] WRITE = [\"user_name\", \"groups\"]"
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.ADMIN_EMAIL:1
#: e07c109febe5434e95b532da3dadf454
msgid "Administration email contact."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.ADMIN_EMAIL:3
#: 7a5e93e36d434fcb96b85beea8f1adc6
msgid ""
"In certain special cases (example : questioning about password corruption), "
"it is necessary to provide an administration contact email."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.EMAIL_CONFIRMATION:1
#: 478effaaf0da47a1a31b996b06b8c650
msgid ""
"If :py:data:`True`, users will need to click on a confirmation link sent by "
"email when they want to add a new email."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.EMAIL_CONFIRMATION:4
#: b82dc4dc6818409eb5fa256462c4ac19
msgid ""
"By default, this is true if ``SMTP`` is configured, else this is false. If "
"explicitly set to true and ``SMTP`` is disabled, the email field will be "
"read-only."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.EMAIL_OTP:1
#: 8e19d8a485fe456191ab16773f84483e
msgid ""
"If :py:data:`True`, then users will need to authenticate themselves via a "
"one-time password sent to their primary email address."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.ENABLE_PASSWORD_COMPROMISSION_CHECK:1
#: cb4478169a09415a9f17e3df16239ecd
msgid ""
"If :py:data:`True`, Canaille will check if passwords appears in "
"compromission databases such as `HIBP <https://haveibeenpwned.com>`_ when "
"users choose a new one."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.ENABLE_PASSWORD_RECOVERY:1
#: b70cf94037df4bd1ae8a74acc370b3a5
msgid ""
"If :py:data:`False`, then users cannot ask for a password recovery link by "
"email."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.ENABLE_REGISTRATION:1
#: 6ee78ec59c21456e8761778153d4f700
msgid ""
"If :py:data:`True`, then users can freely create an account at this instance."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.ENABLE_REGISTRATION:4
#: 979b9444b9c04354add2e781bd324752
msgid ""
"If email verification is available, users must confirm their email before "
"the account is created."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.FAVICON:1
#: 8931d55b0c264be0982765f04f83ae38
msgid "You favicon."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.FAVICON:3
#: 7991e0eec12c457dad401f49b34ad835
msgid "If unset and :attr:`LOGO` is set, then the logo will be used."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.HIDE_INVALID_LOGINS:1
#: 8e19d8a485fe456191ab16773f84483e
msgid ""
"If :py:data:`True`, when users try to sign in with an invalid login, a "
"message is shown indicating that the password is wrong, but does not give a "
"clue whether the login exists or not."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.HIDE_INVALID_LOGINS:5
#: dffe6e218f4f48e981ac5a9fa9a21e37
msgid ""
"If :py:data:`False`, when a user tries to sign in with an invalid login, a "
"message is shown indicating that the login does not exist."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.HTMX:1
#: b200882d189b46f3a83f217ff8b59551
msgid "Accelerates webpages loading with asynchronous requests."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.INVITATION_EXPIRATION:1
#: 2dc15bd9ea8a4386b7202dbdbab5de36
msgid "The validity duration of registration invitations, in seconds."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.INVITATION_EXPIRATION:3
#: c6aaae8719c34838aec54b8fea2d5101
msgid "Defaults to 2 days."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.JAVASCRIPT:1
#: 70d5c7fa2dfa4e6695c84f2b4ab547c9
msgid "Enables Javascript to smooth the user experience."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.LANGUAGE:1
#: 1e1cda3ec4c04a4aaeb2069ccc8f376f
msgid "If a language code is set, it will be used for every user."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.LANGUAGE:3
#: 6818acfcf652444db48e1c61878b6bb6
msgid "If unset, the language is guessed according to the users browser."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.LOGGING:1
#: 63800f5a14d44e1fa3ed0266e19f5482
msgid ""
"Configures the logging output using the python logging configuration format:"
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.LOGGING:3
#: 62d20006362a45ca8ff0f0a8fbb82bf4
msgid ""
"If :data:`None`, everything is logged in the standard error output. The log "
"level is :data:`~logging.DEBUG` if the :attr:`~canaille.app.configuration."
"RootSettings.DEBUG` setting is :py:data:`True`, else this is :py:data:"
"`~logging.INFO`."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.LOGGING:6
#: 44c6ded187ab4e44aac024c2cdb85303
msgid ""
"If this is a :class:`dict`, it is passed to :func:`logging.config."
"dictConfig`:"
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.LOGGING:7
#: 6e269ac8b9144e9699a5856c375d7a37
msgid ""
"If this is a :class:`str`, it is expected to be a file path that will be "
"passed to :func:`logging.config.fileConfig`."
msgstr ""

#: ../../docstring of canaille.core.configuration.ACLSettings.PERMISSIONS:4
#: canaille.core.configuration.CoreSettings.LOGGING:10
#: ba8b9d6794e2459492abfa778736328a
msgid "For example:"
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.LOGGING:14
#: 2eedaa2fba4545698dfd11007a2e0c9c
msgid ""
"[CANAILLE.LOGGING] version = 1 formatters.default.format = \"[%(asctime)s] "
"%(levelname)s in %(module)s: %(message)s\" root = {level = \"INFO\", "
"handlers = [\"canaille\"]}"
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.LOGGING:19
#: 4b44c1c288c3433fb0edba70dd9c1343
msgid ""
"[CANAILLE.LOGGING.handlers.canaille] class = \"logging.handlers."
"WatchedFileHandler\" filename = \"/var/log/canaille.log\" formatter = "
"\"default\""
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.LOGO:1
#: 851b93aeb7b54426872a6b4a2ed973b9
msgid ""
"The logo of your organization, this is useful to make your organization "
"recognizable on login screens."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.MAX_PASSWORD_LENGTH:1
#: 88cd67b65c954dc7a261df77d1823cda
msgid "User password maximum length."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.MAX_PASSWORD_LENGTH:3
#: 435e72d3f33642da9016c521a88f15e6
msgid ""
"There is a technical of 4096 characters with the SQL backend. If the value "
"is 0, :data:`None`, or greater than 4096, then 4096 will be retained."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.MIN_PASSWORD_LENGTH:1
#: b15846ed6b2a4ad49bbb19cde177023a
msgid "User password minimum length."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.MIN_PASSWORD_LENGTH:3
#: 820670101aa7436eb014aa61e1c1a7eb
msgid "If 0 or :data:`None`, password won't have a minimum length."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.NAME:1
#: a41944f564f5438fb8572449b5d13995
msgid "Your organization name."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.NAME:3
#: d61df1326c344b45b6d1c7b24e12b207
msgid "Used for display purpose."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.OTP_METHOD:1
#: 622f83bdd580459cad5b3b328fb2de3b
msgid ""
"If OTP_METHOD is defined, then users will need to authenticate themselves "
"using a one-time password (OTP) via an authenticator app. If set to "
"``TOTP``, the application will use time one-time passwords, If set to "
"``HOTP``, the application will use HMAC-based one-time passwords."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.CoreSettings.PASSWORD_COMPROMISSION_CHECK_API_URL:1
#: 4501d236ecc142e2ad045599ee19ac19
msgid "Have i been pwned api url for compromission checks."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.SENTRY_DSN:1
#: 0b234cbe21824f31b27a3b3c893fd37b
msgid "A `Sentry <https://sentry.io>`_ DSN to collect the exceptions."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.SENTRY_DSN:3
#: 2eab9799f4c0478aa5479f62e826b170
msgid "This is useful for tracking errors in test and production environments."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.SMPP:1
#: 79d66e38b7d94974a21563fac9a58149
msgid "The settings related to SMPP configuration."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.SMPP:3
#: 41d396512e7d40b28223841b21f8ed09
msgid ""
"If unset, sms-related features like sms one-time passwords won't be enabled."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.SMS_OTP:1
#: 8e19d8a485fe456191ab16773f84483e
msgid ""
"If :py:data:`True`, then users will need to authenticate themselves via a "
"one-time password sent to their primary phone number."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.SMTP:1
#: 79d66e38b7d94974a21563fac9a58149
msgid "The settings related to SMTP and mail configuration."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.SMTP:3
#: 41d396512e7d40b28223841b21f8ed09
msgid ""
"If unset, mail-related features like password recovery won't be enabled."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.THEME:1
#: e327a089ace6495285f29ade69226d1b
msgid "The name of a theme in the 'theme' directory, or a path to a theme."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.THEME:3
#: 641146b41ecc461d9fa7280687a462d9
msgid ""
"Defaults to ``default``. Theming is done with `flask-themer <https://github."
"com/tktech/flask-themer>`_."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.TIMEZONE:1
#: 421c3427b77b4cc4af9619406463c1c2
msgid ""
"The timezone in which datetimes will be displayed to the users (e.g. "
"``CEST``)."
msgstr ""

#: ../../docstring of canaille.core.configuration.CoreSettings.TIMEZONE:4
#: d8d80524578e4697a5bb9f7e83c7d113
msgid "If unset, the server timezone will be used."
msgstr ""

#: ../../canaille/core/configuration.py:docstring of
#: canaille.core.configuration.SMTPSettings:1 2f0178f9dbe747c695273f89e42da8c2
msgid ""
"The SMTP configuration. Belong in the ``CANAILLE.SMTP`` namespace. If unset, "
"mail related features will be disabled, such as mail verification or "
"password recovery emails."
msgstr ""

#: ../../canaille/core/configuration.py:docstring of
#: canaille.core.configuration.SMTPSettings:5 598e1ca109154455ad98b50d8853891d
msgid ""
"By default, Canaille will try to send mails from localhost without "
"authentication."
msgstr ""

#: ../../docstring of canaille.core.configuration.SMTPSettings.FROM_ADDR:1
#: 8ab9425f8a6b42dc9097b69e3eaa334a
msgid "The sender for Canaille mails."
msgstr ""

#: ../../docstring of canaille.core.configuration.SMTPSettings.FROM_ADDR:3
#: f8f5f1377e5147d4baf9782ff95b4aa3
msgid "Some mail provider might require a valid sender address."
msgstr ""

#: ../../docstring of canaille.core.configuration.SMTPSettings.HOST:1
#: 9059b29ae44849efb180f3b2da128c19
msgid "The SMTP host."
msgstr ""

#: ../../docstring of canaille.core.configuration.SMTPSettings.LOGIN:1
#: 0bf8168dc84545cb810a8f25bbb4abf7
msgid "The SMTP login."
msgstr ""

#: ../../docstring of canaille.core.configuration.SMTPSettings.PASSWORD:1
#: ec1b4f81894e45f5abcae80dfaee87a9
msgid "The SMTP password."
msgstr ""

#: ../../docstring of canaille.core.configuration.SMTPSettings.PORT:1
#: 514104bb8bcc4331b1e7fff12e550ba3
msgid "The SMTP port."
msgstr ""

#: ../../docstring of canaille.core.configuration.SMTPSettings.SSL:1
#: f4e65d7811cb43d5b7d86ec07af2576d
msgid "Whether to use SSL to connect to the SMTP server."
msgstr ""

#: ../../docstring of canaille.core.configuration.SMTPSettings.TLS:1
#: bd8dac0e38f14b6583d024fca1768b7d
msgid "Whether to use TLS to connect to the SMTP server."
msgstr ""

#: ../../canaille/core/configuration.py:docstring of
#: canaille.core.configuration.SMPPSettings:1 2f0178f9dbe747c695273f89e42da8c2
msgid ""
"The SMPP configuration. Belong in the ``CANAILLE.SMPP`` namespace. If not "
"set, sms related features such as sms one-time passwords will be disabled."
msgstr ""

#: ../../docstring of canaille.core.configuration.SMPPSettings.HOST:1
#: 9059b29ae44849efb180f3b2da128c19
msgid "The SMPP host."
msgstr ""

#: ../../docstring of canaille.core.configuration.SMPPSettings.LOGIN:1
#: 0bf8168dc84545cb810a8f25bbb4abf7
msgid "The SMPP login."
msgstr ""

#: ../../docstring of canaille.core.configuration.SMPPSettings.PASSWORD:1
#: ec1b4f81894e45f5abcae80dfaee87a9
msgid "The SMPP password."
msgstr ""

#: ../../docstring of canaille.core.configuration.SMPPSettings.PORT:1
#: 1c6040260eac4930a107d3f612c6ef6e
msgid "The SMPP port. Use 8775 for SMPP over TLS (recommended)."
msgstr ""

#: ../../canaille/core/configuration.py:docstring of
#: canaille.core.configuration.ACLSettings:1 45f3089188214078ab06f2b1cff3b0e0
msgid "Access Control List settings. Belong in the ``CANAILLE.ACL`` namespace."
msgstr ""

#: ../../canaille/core/configuration.py:docstring of
#: canaille.core.configuration.ACLSettings:3 733df203b313404eb417f40ed8708a2e
msgid ""
"You can define access controls that define what users can do on canaille. An "
"access control consists in a :attr:`FILTER` to match users, a list of :attr:"
"`PERMISSIONS` matched users will be able to perform, and fields users will "
"be able to :attr:`READ` and :attr:`WRITE`. Users matching several filters "
"will cumulate permissions."
msgstr ""

#: ../../docstring of canaille.core.configuration.ACLSettings.FILTER:1
#: a14933a4c7244138bb59a43c9d288955
msgid ":attr:`FILTER` can be:"
msgstr ""

#: ../../docstring of canaille.core.configuration.ACLSettings.FILTER:3
#: d0f71dfab2ec47fca2184767e58eec59
msgid ""
":py:data:`None`, in which case all the users will match this access control"
msgstr ""

#: ../../docstring of canaille.core.configuration.ACLSettings.FILTER:4
#: e33849bb0c954228951cb18c56a9e70d
msgid ""
"a mapping where keys are user attributes name and the values those user "
"attribute values. All the values must be matched for the user to be part of "
"the access control."
msgstr ""

#: ../../docstring of canaille.core.configuration.ACLSettings.FILTER:7
#: 2ed07fdd7da94cfd90167b2d1f4cb4eb
msgid ""
"a list of those mappings. If a user values match at least one mapping, then "
"the user will be part of the access control"
msgstr ""

#: ../../docstring of canaille.core.configuration.ACLSettings.FILTER:10
#: 657a11f5921947b88bfc47cf8affbe00
msgid "Here are some examples::"
msgstr ""

#: ../../docstring of canaille.core.configuration.ACLSettings.PERMISSIONS:1
#: df95253032c647229909e34386b1e5cc
msgid ""
"A list of :class:`Permission` users in the access control will be able to "
"manage."
msgstr ""

#: ../../docstring of canaille.core.configuration.ACLSettings.PERMISSIONS:8
#: 700fa74aeea44e9aa6dd204df7870e90
msgid ""
"PERMISSIONS = [\"manage_users\", \"manage_groups\", \"manage_oidc\", "
"\"delete_account\", \"impersonate_users\"]"
msgstr ""

#: ../../docstring of canaille.core.configuration.ACLSettings.READ:1
#: ab801708874c4b1bb937f62969614340
msgid ""
"A list of :class:`~canaille.core.models.User` attributes that users in the "
"ACL will be able to read."
msgstr ""

#: ../../docstring of canaille.core.configuration.ACLSettings.WRITE:1
#: 384d296240314638a1f1b6b7719c6bb6
msgid ""
"A list of :class:`~canaille.core.models.User` attributes that users in the "
"ACL will be able to edit."
msgstr ""

#: ../../canaille/core/configuration.py:docstring of
#: canaille.core.configuration.Permission:1 f9eec27878c64e608b2783b5e89172ed
msgid "The permissions that can be assigned to users."
msgstr ""

#: ../../canaille/core/configuration.py:docstring of
#: canaille.core.configuration.Permission:3 217cf0cc0b9b4a48a26abeaad488c131
msgid ""
"The permissions are intended to be used in :attr:`ACLSettings <canaille.core."
"configuration.ACLSettings.PERMISSIONS>`."
msgstr ""

#: ../../docstring of canaille.core.configuration.Permission.DELETE_ACCOUNT:1
#: 370dec6e2b8049d0b7353b085340b102
msgid "Allows users to delete their account."
msgstr ""

#: ../../docstring of canaille.core.configuration.Permission.DELETE_ACCOUNT:3
#: f7be239942c94727a948d27c6c93408e
msgid ""
"If used with :attr:`~canaille.core.configuration.Permission.MANAGE_USERS`, "
"users can delete any account."
msgstr ""

#: ../../docstring of canaille.core.configuration.Permission.EDIT_SELF:1
#: 1f716bb0d0ec481ab5dff0a02f5c9e37
msgid "Allows users to edit their own profile."
msgstr ""

#: ../../docstring of
#: canaille.core.configuration.Permission.IMPERSONATE_USERS:1
#: c9018bb9aceb40bc9536cc03320c5bad
msgid "Allows users to take the identity of another user."
msgstr ""

#: ../../docstring of canaille.core.configuration.Permission.MANAGE_GROUPS:1
#: 1072c369689f4922997715eb5337795a
msgid "Allows group edition and creation."
msgstr ""

#: ../../docstring of canaille.core.configuration.Permission.MANAGE_OIDC:1
#: 014b4028381e4f4d8dcc8dc8a5e3a26f
msgid "Allows OpenID Connect client managements."
msgstr ""

#: ../../docstring of canaille.core.configuration.Permission.MANAGE_USERS:1
#: ff39df8edc7143c7b23d22bb773b5198
msgid "Allows other users management."
msgstr ""

#: ../../docstring of canaille.core.configuration.Permission.USE_OIDC:1
#: c7e27c4618a9460e8373c17f558f8d1e
msgid "Allows OpenID Connect authentication."
msgstr ""

#: ../../canaille/oidc/configuration.py:docstring of
#: canaille.oidc.configuration.OIDCSettings:1 e2e226bd197b4d6f87291ee45a3004ef
msgid "OpenID Connect settings."
msgstr ""

#: ../../canaille/oidc/configuration.py:docstring of
#: canaille.oidc.configuration.OIDCSettings:3 db9af81a48ac4b1a914370a2e47bf4e0
msgid "Belong in the ``CANAILLE_OIDC`` namespace."
msgstr ""

#: ../../docstring of
#: canaille.oidc.configuration.OIDCSettings.DYNAMIC_CLIENT_REGISTRATION_OPEN:1
#: 092f0d4259994eb8b834b256a8f72453
msgid ""
"Whether a token is needed for the RFC7591 dynamical client registration."
msgstr ""

#: ../../docstring of
#: canaille.oidc.configuration.OIDCSettings.DYNAMIC_CLIENT_REGISTRATION_OPEN:3
#: 506f1fcd0f424df4bdafd9a69307f645
msgid ""
"If :py:data:`True`, no token is needed to register a client. If :py:data:"
"`False`, dynamical client registration needs a token defined in :attr:"
"`DYNAMIC_CLIENT_REGISTRATION_TOKENS`."
msgstr ""

#: ../../docstring of
#: canaille.oidc.configuration.OIDCSettings.DYNAMIC_CLIENT_REGISTRATION_TOKENS:1
#: 30861c9a3a294daf8105dd5ac9007282
msgid "A list of tokens that can be used for dynamic client registration."
msgstr ""

#: ../../docstring of canaille.oidc.configuration.OIDCSettings.JWT:1
#: 04e054bb3d094e4ea8f23ab6fdec9bf6
msgid "JSON Web Token settings."
msgstr ""

#: ../../docstring of canaille.oidc.configuration.OIDCSettings.REQUIRE_NONCE:1
#: 95b1ee4fd0da4ec2b30beb3e25944cd9
msgid "Force the nonce exchange during the authentication flows."
msgstr ""

#: ../../docstring of canaille.oidc.configuration.OIDCSettings.REQUIRE_NONCE:3
#: de680082bc4546a6883ff4826df0067b
msgid "This adds security but may not be supported by all clients."
msgstr ""

#: ../../canaille/oidc/configuration.py:docstring of
#: canaille.oidc.configuration.JWTSettings:1 750fbe7d77954d87855e68d3199c81e7
msgid "JSON Web Token settings. Belong in the ``CANAILLE_OIDC.JWT`` namespace."
msgstr ""

#: ../../canaille/oidc/configuration.py:docstring of
#: canaille.oidc.configuration.JWTSettings:3 03945dc4192c4f7abefbcd2b5c7c2bd9
msgid "You can generate a RSA keypair with::"
msgstr ""

#: ../../docstring of canaille.oidc.configuration.JWTSettings.ALG:1
#: d65a4aaf4cb64130ac59c97cddcffb0b
msgid "The key algorithm."
msgstr ""

#: ../../docstring of canaille.oidc.configuration.JWTSettings.EXP:1
#: c0c460480db94b1a9ebceea06528d426
msgid "The time the JWT will be valid, in seconds."
msgstr ""

#: ../../docstring of canaille.oidc.configuration.JWTSettings.ISS:1
#: 6501426215db4b27b7b5d217954ca6be
msgid "The URI of the identity provider."
msgstr ""

#: ../../docstring of canaille.oidc.configuration.JWTSettings.KTY:1
#: 3e338458e42e405fb025bfcfc53688f4
msgid "The key type."
msgstr ""

#: ../../docstring of canaille.oidc.configuration.JWTSettings.PRIVATE_KEY:1
#: 27a15f235d63447884175edd85e55cf4
msgid "The private key."
msgstr ""

#: ../../docstring of canaille.oidc.configuration.JWTSettings.PRIVATE_KEY:3
#: canaille.oidc.configuration.JWTSettings.PUBLIC_KEY:3
#: 29d2c1b105e74d46b80db01b78954711
msgid ""
"If :py:data:`None` and debug mode is enabled, then an in-memory key will be "
"used."
msgstr ""

#: ../../docstring of canaille.oidc.configuration.JWTSettings.PUBLIC_KEY:1
#: e88605c89e4b47989186fd27e5aff172
msgid "The public key."
msgstr ""

#: ../../canaille/oidc/configuration.py:docstring of
#: canaille.oidc.configuration.JWTMappingSettings:1
#: 235687b99f2c408aaf1c063061975f77
msgid "Mapping between the user model and the JWT fields."
msgstr ""

#: ../../canaille/oidc/configuration.py:docstring of
#: canaille.oidc.configuration.JWTMappingSettings:3
#: ebe87d5efdaa458b97451b5ab4fdeb3d
msgid "Fields are evaluated with jinja. A ``user`` var is available."
msgstr ""

#: ../../canaille/scim/configuration.py:docstring of
#: canaille.scim.configuration.SCIMSettings:1 e2e226bd197b4d6f87291ee45a3004ef
msgid "SCIM settings."
msgstr ""

#: ../../canaille/backends/sql/configuration.py:docstring of
#: canaille.backends.sql.configuration.SQLSettings:1
#: b7ccdac0ebd14f47be2d77ea52bd75d7
msgid "Settings related to the SQL backend."
msgstr ""

#: ../../canaille/backends/sql/configuration.py:docstring of
#: canaille.backends.sql.configuration.SQLSettings:3
#: 07e03b184cb54e0a92ca3a33033da5cd
msgid "Belong in the ``CANAILLE_SQL`` namespace."
msgstr ""

#: ../../docstring of
#: canaille.backends.sql.configuration.SQLSettings.DATABASE_URI:1
#: 4d1ff118c1a44a50a962e527d1a8e2a2
msgid "The SQL server URI. For example:"
msgstr ""

#: ../../docstring of
#: canaille.backends.sql.configuration.SQLSettings.DATABASE_URI:6
#: 4bb9ca2e412a461caacf1a146582247f
msgid "DATABASE_URI = \"postgresql://user:password@localhost/database_name\""
msgstr ""

#: ../../canaille/backends/ldap/configuration.py:docstring of
#: canaille.backends.ldap.configuration.LDAPSettings:1
#: e656ae1d120e45109618f653d29d845e
msgid "Settings related to the LDAP backend."
msgstr ""

#: ../../canaille/backends/ldap/configuration.py:docstring of
#: canaille.backends.ldap.configuration.LDAPSettings:3
#: 9877879932a3406b87f9893f4a6bf8f3
msgid "Belong in the ``CANAILLE_LDAP`` namespace."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.BIND_DN:1
#: 96d852cc067c459cabfcc201a7271cf0
msgid "The LDAP bind DN."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.BIND_PW:1
#: 084f3814a8604375aed794d649845045
msgid "The LDAP bind password."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.GROUP_BASE:1
#: 8f56c7d2bfb348afbcc36de24398dfac
msgid "The LDAP node under which groups will be looked for and saved."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.GROUP_BASE:3
#: 58cf9c9e87464b709e4e8508577fbd63
msgid "For instance `\"ou=groups,dc=mydomain,dc=tld\"`."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.GROUP_CLASS:1
#: 3b6a2121763e4302aa1780cb6d51d9d6
msgid "The object class to use for creating new groups."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.GROUP_NAME_ATTRIBUTE:1
#: 10d8bb8232bf4b30b6c631847ea70b2b
msgid "The attribute to use to identify a group."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.GROUP_RDN:1
#: 688132cb0d4e4f27973a02406d50edaa
msgid "The attribute to identify an object in the Group DN."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.ROOT_DN:1
#: 4428b1de4b664a55b077caa3969d6769
msgid "The LDAP root DN."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.TIMEOUT:1
#: 5a175d6a66e445458ee6bc473d614a45
msgid "The LDAP connection timeout."
msgstr ""

#: ../../docstring of canaille.backends.ldap.configuration.LDAPSettings.URI:1
#: 3172b80b5b86434699f226a3b713c52f
msgid "The LDAP server URI."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.USER_BASE:1
#: 0e03c3262f504b79b84847041ee442e5
msgid "The LDAP node under which users will be looked for and saved."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.USER_BASE:3
#: e1d16301542b40929d9e65c9a949b303
msgid "For instance `ou=users,dc=mydomain,dc=tld`."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.USER_CLASS:1
#: 92a1f8f8665848c9aaf4d5f9f1f3b6b7
msgid "The object class to use for creating new users."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.USER_FILTER:1
#: 228fcd64b4704fa0b4ea52ab85f48f08
msgid "Filter to match users on sign in."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.USER_FILTER:3
#: f61c66f7c0e94e67ae5a4ce5de0dc548
msgid ""
"For instance ``(|(uid={{ login }})(mail={{ login }}))``. Jinja syntax is "
"supported and a ``login`` variable is available, containing the value passed "
"in the login field."
msgstr ""

#: ../../docstring of
#: canaille.backends.ldap.configuration.LDAPSettings.USER_RDN:1
#: d49e7765b3d6440d9fdcb0ecb18c06c1
msgid "The attribute to identify an object in the User DN."
msgstr ""

#: ../references/configuration.rst:94 c4674c5a1b434e81944983c7ec2fb0f1
msgid "Example file"
msgstr ""

#: ../references/configuration.rst:96 87c3dcb2ef5a4f649ec0fa9005449a79
msgid "Here is a configuration file example:"
msgstr ""

#: ../references/index.rst:2 51ac90bb647f41b69879253e3e7c475e
msgid "References"
msgstr ""

#: ../references/models.rst:2 bf9a972313e94c6aa0e72470dfc9677c
msgid "Data models"
msgstr ""

#: ../references/models.rst:4 620f9112555349eba4cc5daecdb72217
msgid ""
"This reference details the data models used by Canaille. This is mostly "
"useful for developers."
msgstr ""

#: ../../canaille/backends/models.py:docstring of
#: canaille.backends.models.BackendModel:1 canaille.backends.models.Model:1
#: b407db3f81d14e789f9f7f2e2bec7613 b29fcc3a6bdc4ee582d1e14851e430b7
msgid "Bases: :py:class:`object`"
msgstr ""

#: ../../canaille/backends/models.py:docstring of
#: canaille.backends.models.BackendModel:1 664ca63468e648ddb0b2f2f957139ae9
msgid "The backend model abstract class."
msgstr ""

#: ../../canaille/backends/models.py:docstring of
#: canaille.backends.models.BackendModel:3 e16c978524f44a57affe6f2e15fdb5e2
msgid ""
"It details all the methods and attributes that are expected to be "
"implemented for every model and for every backend."
msgstr ""

#: ../../canaille/backends/models.py:docstring of
#: canaille.backends.models.Model:1 9f46b7e1801e4a57a346c598161cbdac
msgid "The model abstract class."
msgstr ""

#: ../../canaille/backends/models.py:docstring of
#: canaille.backends.models.Model:3 f4dad754b1d7448f842620b4f7b6069b
msgid "It details all the common attributes shared by every models."
msgstr ""

#: ../../docstring of canaille.backends.models.Model.created:1
#: 8685782e932b476a8b6f80256ebca659
msgid ""
"The :class:`~datetime.datetime` that the resource was added to the service "
"provider."
msgstr ""

#: ../../docstring of canaille.backends.models.Model.id:1
#: 112d9fd0a032418682875fe5f5685fc8
msgid ""
"A unique identifier for a SCIM resource as defined by the service provider. "
"Id will be :data:`None` until the ``Backend.save`` method is called."
msgstr ""

#: ../../docstring of canaille.backends.models.Model.id:5
#: fe3e4be3b44b43ebbbd11fe81fdc2613
msgid ""
"Each representation of the resource MUST include a non-empty \"id\" value.  "
"This identifier MUST be unique across the SCIM service provider's entire set "
"of resources.  It MUST be a stable, non- reassignable identifier that does "
"not change when the same resource is returned in subsequent requests.  The "
"value of the \"id\" attribute is always issued by the service provider and "
"MUST NOT be specified by the client.  The string \"bulkId\" is a reserved "
"keyword and MUST NOT be used within any unique identifier value.  The "
"attribute characteristics are \"caseExact\" as \"true\", a mutability of "
"\"readOnly\", and a \"returned\" characteristic of \"always\".  See Section "
"9 for additional considerations regarding privacy."
msgstr ""

#: ../../canaille/backends/models.py:docstring of
#: canaille.backends.models.Model.identifier:1 4f16f8a2628746e0bbb013e0ebdd53de
msgid ""
"Returns a unique value that will be used to identify the model instance."
msgstr ""

#: ../../canaille/backends/models.py:docstring of
#: canaille.backends.models.Model.identifier:4 570af0c54d8a4b9ca5e1180a154578c6
msgid ""
"This value will be used in URLs in canaille, so it should be unique and "
"short."
msgstr ""

#: ../../docstring of canaille.backends.models.Model.last_modified:1
#: a64d636f5ae843698bae18cbc27adae5
msgid ""
"The most recent :class:`~datetime.datetime` that the details of this "
"resource were updated at the service provider."
msgstr ""

#: ../../docstring of canaille.backends.models.Model.last_modified:4
#: 1478742051c64d3c8e8cb44b101c2337
msgid ""
"If this resource has never been modified since its initial creation, the "
"value MUST be the same as the value of :attr:`~canaille.backends.models."
"Model.created`."
msgstr ""

#: ../../canaille/core/models.py:docstring of canaille.core.models.Group:1
#: canaille.core.models.User:1 ../../canaille/oidc/basemodels.py:docstring
#: canaille.oidc.basemodels.AuthorizationCode:1
#: canaille.oidc.basemodels.Client:1 canaille.oidc.basemodels.Consent:1
#: canaille.oidc.basemodels.Token:1 31058fb082044629ab68e330524f37d4
#: 963c873782434df6bc7a6314e406858e ec3b5ed7c8e94f728377c74990bc94e6
msgid "Bases: :py:class:`~canaille.backends.models.Model`"
msgstr ""

#: ../../canaille/core/models.py:docstring of canaille.core.models.Group:1
#: d8d4759602c44e048e0d4f053dc5c895
msgid ""
"User model, based on the `SCIM Group schema <https://datatracker.ietf.org/"
"doc/html/rfc7643#section-4.2>`_."
msgstr ""

#: ../../docstring of canaille.core.models.Group.display_name:1
#: f557ae62a380458ca1e212165ff7ebd2
msgid "A human-readable name for the Group."
msgstr ""

#: ../../docstring of canaille.core.models.Group.display_name:3
#: canaille.oidc.basemodels.Client.client_id:1 3a782effac4c44f2b4084280c168f909
#: 038998149ec146249f6cd7993b6ea7c2
msgid "REQUIRED."
msgstr ""

#: ../../docstring of canaille.core.models.Group.members:1
#: 83c94299de834bb7899fc5d919567ddf
msgid "A list of members of the Group."
msgstr ""

#: ../../docstring of canaille.core.models.Group.members:3
#: f8395458983d4efd966c1f2bd3e771dc
msgid ""
"While values MAY be added or removed, sub-attributes of members are "
"\"immutable\".  The \"value\" sub-attribute contains the value of an \"id\" "
"attribute of a SCIM resource, and the \"$ref\" sub-attribute must be the URI "
"of a SCIM resource such as a \"User\", or a \"Group\".  The intention of the "
"\"Group\" type is to allow the service provider to support nested groups.  "
"Service providers MAY require clients to provide a non-empty value by "
"setting the \"required\" attribute characteristic of a sub-attribute of the "
"\"members\" attribute in the \"Group\" resource schema."
msgstr ""

#: ../../canaille/core/models.py:docstring of canaille.core.models.User:1
#: 3de74c338e4e45d4ada0909e1d6a2c1d
msgid ""
"User model, based on the `SCIM User schema <https://datatracker.ietf.org/doc/"
"html/rfc7643#section-4.1>`_, `Entreprise User Schema Extension <https://"
"datatracker.ietf.org/doc/html/rfc7643#section-4.3>`_ and `SCIM Password "
"Management Extension <https://datatracker.ietf.org/doc/html/draft-hunt-scim-"
"password-mgmt-00.html>`_ draft. Attribute description is based on SCIM and "
"put there for information purpose. The description may not fit the current "
"implementation in Canaille."
msgstr ""

#: ../../canaille/core/models.py:docstring of canaille.core.models.User.can:1
#: dd44c29c7f88458e923a6bdc89ff4bd8
msgid ""
"Whether or not the user has the :class:`~canaille.core.configuration."
"Permission` according to the :class:`configuration <canaille.core."
"configuration.ACLSettings>`."
msgstr ""

#: ../../docstring of canaille.core.models.User.department:1
#: d09b761f1c3d4bcda3c7c5841cb86768
msgid "Identifies the name of a department."
msgstr ""

#: ../../docstring of canaille.core.models.User.display_name:1
#: 7a92e34396f14701a901c6342ba43372
msgid "The name of the user, suitable for display to end-users."
msgstr ""

#: ../../docstring of canaille.core.models.User.display_name:3
#: e89fec83b2eb42deaac70264489240e3
msgid ""
"Each user returned MAY include a non-empty displayName value.  The name "
"SHOULD be the full name of the User being described, if known (e.g., \"Babs "
"Jensen\" or \"Ms. Barbara J Jensen, III\") but MAY be a username or handle, "
"if that is all that is available (e.g., \"bjensen\").  The value provided "
"SHOULD be the primary textual label by which this User is normally displayed "
"by the service provider when presenting it to end-users."
msgstr ""

#: ../../docstring of canaille.core.models.User.emails:1
#: 5383ce6b712040c4a0bba18c1bbef93d
msgid "Email addresses for the User."
msgstr ""

#: ../../docstring of canaille.core.models.User.emails:3
#: dcbfe09f878141a4bd5a20b9e2d9b6da
msgid ""
"The value SHOULD be specified according to [RFC5321].  Service providers "
"SHOULD canonicalize the value according to [RFC5321], e.g., "
"\"bjensen@example.com\" instead of \"bjensen@EXAMPLE.COM\".  The \"display\" "
"sub-attribute MAY be used to return the canonicalized representation of the "
"email value. The \"type\" sub-attribute is used to provide a classification "
"meaningful to the (human) user.  The user interface should encourage the use "
"of basic values of \"work\", \"home\", and \"other\" and MAY allow "
"additional type values to be used at the discretion of SCIM clients."
msgstr ""

#: ../../docstring of canaille.core.models.User.employee_number:1
#: 6cc0c003bd234628a0bc0a0c27cccaee
msgid ""
"A string identifier, typically numeric or alphanumeric, assigned to a "
"person, typically based on order of hire or association with an organization."
msgstr ""

#: ../../docstring of canaille.core.models.User.family_name:1
#: db1cbc1b88a44555ac36431d951ed1bc
msgid ""
"The family name of the User, or last name in most Western languages (e.g., "
"\"Jensen\" given the full name \"Ms. Barbara Jane Jensen, III\")."
msgstr ""

#: ../../docstring of canaille.core.models.User.formatted_address:1
#: 19bb2c52eb2747a8bae2df988b0f3226
msgid ""
"The full mailing address, formatted for display or use with a mailing label."
msgstr ""

#: ../../docstring of canaille.core.models.User.formatted_address:4
#: aaf2f2de713c468a8388bd976795c621
msgid "This attribute MAY contain newlines."
msgstr ""

#: ../../docstring of canaille.core.models.User.formatted_name:1
#: 6e02928b97a944b5929f0002f9c7b70c
msgid ""
"The full name, including all middle names, titles, and suffixes as "
"appropriate, formatted for display (e.g., \"Ms. Barbara Jane Jensen, III\")."
msgstr ""

#: ../../docstring of canaille.core.models.User.given_name:1
#: 0adf168d41024021aca8fcbf22e2b575
msgid ""
"The given name of the User, or first name in most Western languages (e.g., "
"\"Barbara\" given the full name \"Ms. Barbara Jane Jensen, III\")."
msgstr ""

#: ../../docstring of canaille.core.models.User.groups:1
#: ef755a48c32047c187a2405190a88b07
msgid ""
"A list of groups to which the user belongs, either through direct "
"membership, through nested groups, or dynamically calculated."
msgstr ""

#: ../../docstring of canaille.core.models.User.groups:4
#: 0d7136476f7649ddad322de96971e938
msgid ""
"The values are meant to enable expression of common group-based or role-"
"based access control models, although no explicit authorization model is "
"defined.  It is intended that the semantics of group membership and any "
"behavior or authorization granted as a result of membership are defined by "
"the service provider.  The canonical types \"direct\" and \"indirect\" are "
"defined to describe how the group membership was derived.  Direct group "
"membership indicates that the user is directly associated with the group and "
"SHOULD indicate that clients may modify membership through the \"Group\" "
"resource. Indirect membership indicates that user membership is transitive "
"or dynamic and implies that clients cannot modify indirect group membership "
"through the \"Group\" resource but MAY modify direct group membership "
"through the \"Group\" resource, which may influence indirect memberships.  "
"If the SCIM service provider exposes a \"Group\" resource, the \"value\" sub-"
"attribute MUST be the \"id\", and the \"$ref\" sub-attribute must be the URI "
"of the corresponding \"Group\" resources to which the user belongs.  Since "
"this attribute has a mutability of \"readOnly\", group membership changes "
"MUST be applied via the \"Group\" Resource (Section 4.2).  This attribute "
"has a mutability of \"readOnly\"."
msgstr ""

#: ../../canaille/core/models.py:docstring of
#: canaille.core.models.User.has_password:1 034f9fa73a5d455382726ac4b448c136
msgid "Check whether a password has been set for the user."
msgstr ""

#: ../../docstring of canaille.core.models.User.hotp_counter:1
#: 05380b82ddda46bfa9678288cebf85a7
msgid ""
"HMAC-based One Time Password counter, used for multi-factor authentication."
msgstr ""

#: ../../docstring of canaille.core.models.User.last_otp_login:1
#: bdfeb17b4cc24311b1945121f22d4e61
msgid ""
"A DateTime indicating when the user last logged in with a one-time password. "
"This attribute is currently used to check whether the user has activated one-"
"time password authentication or not."
msgstr ""

#: ../../docstring of canaille.core.models.User.locality:1
#: 3d50110e459f4ba3b06af609c8f2bef8
msgid "The city or locality component."
msgstr ""

#: ../../docstring of canaille.core.models.User.lock_date:1
#: bc9386fb2f7c41cc82308c45d919feb9
msgid "A DateTime indicating when the resource was locked."
msgstr ""

#: ../../canaille/core/models.py:docstring of
#: canaille.core.models.User.locked:1 8f227ede6e584fda946d50e86049afcb
msgid "Whether the user account has been locked or has expired."
msgstr ""

#: ../../docstring of canaille.core.models.User.one_time_password:1
#: 4f6ac05bac3845ea8325c2b34e8c0824
msgid "One time password used for email or sms multi-factor authentication."
msgstr ""

#: ../../docstring of
#: canaille.core.models.User.one_time_password_emission_date:1
#: cc1503678fc046f9bb759040e7e561e1
msgid ""
"A DateTime indicating when the user last emitted an email or sms one-time "
"password."
msgstr ""

#: ../../docstring of canaille.core.models.User.organization:1
#: 39b14adbf8ad42b39c2cdd9fb0fcf96c
msgid "Identifies the name of an organization."
msgstr ""

#: ../../docstring of canaille.core.models.User.password:1
#: a4ec9a6f72834b47b82db401e1ebed2f
msgid ""
"This attribute is intended to be used as a means to set, replace, or compare "
"(i.e., filter for equality) a password.  The cleartext value or the hashed "
"value of a password SHALL NOT be returnable by a service provider.  If a "
"service provider holds the value locally, the value SHOULD be hashed.  When "
"a password is set or changed by the client, the cleartext password SHOULD be "
"processed by the service provider as follows:"
msgstr ""

#: ../../docstring of canaille.core.models.User.password:9
#: 4a4c0608f0ac4739bbb358ebfffbc94c
msgid ""
"Prepare the cleartext value for international language comparison.  See "
"Section 7.8 of [RFC7644]."
msgstr ""

#: ../../docstring of canaille.core.models.User.password:12
#: 770cfb12f1c943188e281ef2e527ccb2
msgid ""
"Validate the value against server password policy.  Note: The definition and "
"enforcement of password policy are beyond the scope of this document."
msgstr ""

#: ../../docstring of canaille.core.models.User.password:16
#: 736bf805f27d4dfb8c1292b5afaca0be
msgid ""
"Ensure that the value is encrypted (e.g., hashed).  See Section 9.2 for "
"acceptable hashing and encryption handling when storing or persisting for "
"provisioning workflow reasons."
msgstr ""

#: ../../docstring of canaille.core.models.User.password:20
#: 605f5a91894e42ee9d14686ae2f346cd
msgid ""
"A service provider that immediately passes the cleartext value on to another "
"system or programming interface MUST pass the value directly over a secured "
"connection (e.g., Transport Layer Security (TLS)).  If the value needs to be "
"temporarily persisted for a period of time (e.g., because of a workflow) "
"before provisioning, then the value MUST be protected by some method, such "
"as encryption."
msgstr ""

#: ../../docstring of canaille.core.models.User.password:28
#: 198ed93545fe467ea461cef9a184362c
msgid ""
"Testing for an equality match MAY be supported if there is an existing "
"stored hashed value.  When testing for equality, the service provider:"
msgstr ""

#: ../../docstring of canaille.core.models.User.password:32
#: becd82e6d299471d94ab4906ce105218
msgid ""
"Prepares the filter value for international language comparison.  See "
"Section 7.8 of [RFC7644]."
msgstr ""

#: ../../docstring of canaille.core.models.User.password:35
#: ca91b3fdd3ae434dbb47d55b73ccbcb2
msgid ""
"Generates the salted hash of the filter value and tests for a match with the "
"locally held value."
msgstr ""

#: ../../docstring of canaille.core.models.User.password:38
#: 0c4d62a31f2d442981432c2f841abdac
msgid ""
"The mutability of the password attribute is \"writeOnly\", indicating that "
"the value MUST NOT be returned by a service provider in any form (the "
"attribute characteristic \"returned\" is \"never\")."
msgstr ""

#: ../../docstring of canaille.core.models.User.phone_numbers:1
#: 636757499c76498ca8a1cbad6ea4fbb7
msgid "Phone numbers for the user."
msgstr ""

#: ../../docstring of canaille.core.models.User.phone_numbers:3
#: dabf654512714fda965fded70f74aeac
msgid ""
"The value SHOULD be specified according to the format defined in [RFC3966], "
"e.g., 'tel:+1-201-555-0123'.  Service providers SHOULD canonicalize the "
"value according to [RFC3966] format, when appropriate.  The \"display\" sub-"
"attribute MAY be used to return the canonicalized representation of the "
"phone number value.  The sub- attribute \"type\" often has typical values of "
"\"work\", \"home\", \"mobile\", \"fax\", \"pager\", and \"other\" and MAY "
"allow more types to be defined by the SCIM clients."
msgstr ""

#: ../../docstring of canaille.core.models.User.photo:1
#: 27d8a36d06ce46858ed9974cfb3a9a9b
msgid ""
"A URI that is a uniform resource locator (as defined in Section 1.1.3 of "
"[RFC3986]) that points to a resource location representing the user's image."
msgstr ""

#: ../../docstring of canaille.core.models.User.photo:5
#: 8d0e8ca2555c48b0aad26fa7fdb102cf
msgid ""
"The resource MUST be a file (e.g., a GIF, JPEG, or PNG image file) rather "
"than a web page containing an image.  Service providers MAY return the same "
"image in different sizes, although it is recognized that no standard for "
"describing images of various sizes currently exists.  Note that this "
"attribute SHOULD NOT be used to send down arbitrary photos taken by this "
"user; instead, profile photos of the user that are suitable for display when "
"describing the user should be sent. Instead of the standard canonical values "
"for type, this attribute defines the following canonical values to represent "
"popular photo sizes: \"photo\" and \"thumbnail\"."
msgstr ""

#: ../../docstring of canaille.core.models.User.postal_code:1
#: ca9c10bc74eb4a2b90365bbd3473b1be
msgid "The zip code or postal code component."
msgstr ""

#: ../../docstring of canaille.core.models.User.preferred_language:1
#: 5c7d29d6e6334161b21068010f566af2
msgid ""
"Indicates the user's preferred written or spoken languages and is generally "
"used for selecting a localized user interface."
msgstr ""

#: ../../docstring of canaille.core.models.User.preferred_language:4
#: c45f7e1feb59446daa9dbea7cce24305
msgid ""
"The value indicates the set of natural languages that are preferred. The "
"format of the value is the same as the HTTP Accept-Language header field "
"(not including \"Accept-Language:\") and is specified in Section 5.3.5 of "
"[RFC7231].  The intent of this value is to enable cloud applications to "
"perform matching of language tags [RFC4647] to the user's language "
"preferences, regardless of what may be indicated by a user agent (which "
"might be shared), or in an interaction that does not involve a user (such as "
"in a delegated OAuth 2.0 [RFC6749] style interaction) where normal HTTP "
"Accept-Language header negotiation cannot take place."
msgstr ""

#: ../../docstring of canaille.core.models.User.profile_url:1
#: 267adc8c4ecf4750a9db3464eb2b8573
msgid ""
"A URI that is a uniform resource locator (as defined in Section 1.1.3 of "
"[RFC3986]) and that points to a location representing the user's online "
"profile (e.g., a web page)."
msgstr ""

#: ../../docstring of canaille.core.models.User.profile_url:5
#: 7f227419ab034b3da8303fe94affeb6c
msgid "URIs are canonicalized per Section 6.2 of [RFC3986]."
msgstr ""

#: ../../canaille/core/models.py:docstring of
#: canaille.core.models.User.readable_fields:1 e064888816ad4e228797af005daa0c1b
msgid ""
"The fields the user can read according to the :class:`configuration "
"<canaille.core.configuration.ACLSettings>` configuration."
msgstr ""

#: ../../canaille/core/models.py:docstring of
#: canaille.core.models.User.readable_fields:4 d51b5c9a3058444187f7f52aafcc57ce
msgid ""
"This does not include the :attr:`writable <canaille.core.models.User."
"writable_fields>` fields."
msgstr ""

#: ../../docstring of canaille.core.models.User.region:1
#: 7781da46bb4f45c19d4061a73efd1860
msgid "The state or region component."
msgstr ""

#: ../../docstring of canaille.core.models.User.secret_token:1
#: 3764681cd7844fdaa69cc2ab072ff732
msgid ""
"Unique token generated for each user, used for multi-factor authentication."
msgstr ""

#: ../../docstring of canaille.core.models.User.street:1
#: e15de46ed1a745e580399d0bf40e96b8
msgid ""
"The full street address component, which may include house number, street "
"name, P.O."
msgstr ""

#: ../../docstring of canaille.core.models.User.street:4
#: 663a1b080f3646f5bbc30492beccda49
msgid ""
"box, and multi-line extended street address information.  This attribute MAY "
"contain newlines."
msgstr ""

#: ../../docstring of canaille.core.models.User.title:1
#: 96571ab69f47443087e9de7cdf2af3ef
msgid "The user's title, such as \"Vice President\"."
msgstr ""

#: ../../docstring of canaille.core.models.User.user_name:1
#: 5a41c74aee6040d78b20e68feedbe91d
msgid ""
"A service provider's unique identifier for the user, typically used by the "
"user to directly authenticate to the service provider."
msgstr ""

#: ../../docstring of canaille.core.models.User.user_name:4
#: 305c46ac8a734b4fb513c2da9c0bd78d
msgid ""
"Often displayed to the user as their unique identifier within the system (as "
"opposed to \"id\" or \"externalId\", which are generally opaque and not user-"
"friendly identifiers).  Each User MUST include a non-empty userName value.  "
"This identifier MUST be unique across the service provider's entire set of "
"Users.  This attribute is REQUIRED and is case insensitive."
msgstr ""

#: ../../canaille/core/models.py:docstring of
#: canaille.core.models.User.writable_fields:1 f99945951b7f476484908fef5eb9bee4
msgid ""
"The fields the user can write according to the :class:`configuration "
"<canaille.core.configuration.ACLSettings>`."
msgstr ""

#: ../../canaille/core/models.py:docstring of
#: canaille.core.models.string_code:1 81f725c1782d45b395593f37c0776e41
msgid "Add leading 0 if the code length does not match the defined length."
msgstr ""

#: ../../canaille/core/models.py:docstring of
#: canaille.core.models.string_code:3 1cc69f629da14627a5d08132c7388c45
msgid ""
"For instance, parameter ``digit=6``, but ``code=123``, this method would "
"return ``000123``::"
msgstr ""

#: ../../canaille/oidc/basemodels.py:docstring of
#: canaille.oidc.basemodels.AuthorizationCode:1
#: 470216f2acc344a9bc4fe9408cf38b4c
msgid "OpenID Connect temporary authorization code definition."
msgstr ""

#: ../../canaille/oidc/basemodels.py:docstring of
#: canaille.oidc.basemodels.Client:1 b0248a05ffa44100bfcf4e84de0e154b
msgid ""
"OpenID Connect client definition, based on the `OAuth 2.0 Dynamic Client "
"Registration protocols <https://datatracker.ietf.org/doc/html/rfc7591."
"html>`_ and the `OpenID Connect RP-Initiated Logout <https://openid.net/"
"specs/openid-connect-rpinitiated-1_0.html>`_ specifications."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.client_id:3
#: 9630f3464163481993a425c28c308969
msgid ""
"OAuth 2.0 client identifier string.  It SHOULD NOT be currently valid for "
"any other registered client, though an authorization server MAY issue the "
"same client identifier to multiple instances of a registered client at its "
"discretion."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.client_id_issued_at:1
#: canaille.oidc.basemodels.Client.client_secret:1
#: canaille.oidc.basemodels.Client.post_logout_redirect_uris:1
#: 05d209d5010c49c99c2e88fd070c5595
msgid "OPTIONAL."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.client_id_issued_at:3
#: fb189c4d73054f559edc1f71e252013c
msgid ""
"Time at which the client identifier was issued.  The time is represented as "
"the number of seconds from 1970-01-01T00:00:00Z as measured in UTC until the "
"date/time of issuance."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.client_name:1
#: 90b1171c71784152b30c868ce6a69e92
msgid ""
"Human-readable string name of the client to be presented to the end-user "
"during authorization."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.client_name:4
#: 2f438f6285d3455f81459326d3ed2a3d
msgid ""
"If omitted, the authorization server MAY display the raw \"client_id\" value "
"to the end-user instead.  It is RECOMMENDED that clients always send this "
"field. The value of this field MAY be internationalized, as described in "
"Section 2.2."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.client_secret:3
#: b659e17a18ae49d6b460ce4bfd3ef720
msgid ""
"OAuth 2.0 client secret string.  If issued, this MUST be unique for each "
"\"client_id\" and SHOULD be unique for multiple instances of a client using "
"the same \"client_id\".  This value is used by confidential clients to "
"authenticate to the token endpoint, as described in OAuth 2.0 [RFC6749], "
"Section 2.3.1."
msgstr ""

#: ../../docstring of
#: canaille.oidc.basemodels.Client.client_secret_expires_at:1
#: fe3efeb714e642038fddaee69b85a240
msgid "REQUIRED if \"client_secret\" is issued."
msgstr ""

#: ../../docstring of
#: canaille.oidc.basemodels.Client.client_secret_expires_at:3
#: 8224ead887464588a9b93fc320780f69
msgid ""
"Time at which the client secret will expire or 0 if it will not expire.  The "
"time is represented as the number of seconds from 1970-01-01T00:00:00Z as "
"measured in UTC until the date/time of expiration."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.client_uri:1
#: c7ec8c5c04bd41fa87825f3d6f4e71b3
msgid "URL string of a web page providing information about the client."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.client_uri:3
#: 8be313c7ec5848419e7a0062beefd60c
msgid ""
"If present, the server SHOULD display this URL to the end-user in a "
"clickable fashion.  It is RECOMMENDED that clients always send this field.  "
"The value of this field MUST point to a valid web page.  The value of this "
"field MAY be internationalized, as described in Section 2.2."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.contacts:1
#: 133418eefb1d484ba26f492838063c04
msgid ""
"Array of strings representing ways to contact people responsible for this "
"client, typically email addresses."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.contacts:4
#: 4c4d89f737af445da4e7eb5882887e00
msgid ""
"The authorization server MAY make these contact addresses available to end-"
"users for support requests for the client.  See Section 6 for information on "
"Privacy Considerations."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.grant_types:1
#: 5105e93451e946fea6c3fd0b09c19683
msgid ""
"Array of OAuth 2.0 grant type strings that the client can use at the token "
"endpoint.  These grant types are defined as follows:"
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.grant_types:4
#: 471bb398e08d45d588f320d2c25cb025
msgid ""
"\"authorization_code\": The authorization code grant type defined in OAuth "
"2.0, Section 4.1."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.grant_types:7
#: c1785e60703f46e5a3a6e7131ba26894
msgid ""
"\"implicit\": The implicit grant type defined in OAuth 2.0, Section 4.2."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.grant_types:10
#: 99ec3801466340bd83367ab92a351ac3
msgid ""
"\"password\": The resource owner password credentials grant type defined in "
"OAuth 2.0, Section 4.3."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.grant_types:13
#: a62c7b8185ee4863aec423c5fe445ae5
msgid ""
"\"client_credentials\": The client credentials grant type defined in OAuth "
"2.0, Section 4.4."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.grant_types:16
#: 2fd298fce6974e4da2f670da31280955
msgid ""
"\"refresh_token\": The refresh token grant type defined in OAuth 2.0, "
"Section 6."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.grant_types:19
#: 2fb0f1de8f46429eb46970d53c954d91
msgid ""
"\"urn:ietf:params:oauth:grant-type:jwt-bearer\": The JWT Bearer Token Grant "
"Type defined in OAuth JWT Bearer Token Profiles [RFC7523]."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.grant_types:23
#: dd4f8e0551e048d599a3f95740ea3cf1
msgid ""
"\"urn:ietf:params:oauth:grant-type:saml2-bearer\": The SAML 2.0 Bearer "
"Assertion Grant defined in OAuth SAML 2 Bearer Token Profiles [RFC7522]."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.grant_types:27
#: 241768369988480b8f79cae93fa06ff4
msgid ""
"If the token endpoint is used in the grant type, the value of this parameter "
"MUST be the same as the value of the \"grant_type\" parameter passed to the "
"token endpoint defined in the grant type definition.  Authorization servers "
"MAY allow for other values as defined in the grant type extension process "
"described in OAuth 2.0, Section 4.5.  If omitted, the default behavior is "
"that the client will use only the \"authorization_code\" Grant Type."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.jwk:1
#: 779d5b8c355f4e469d0880100f197dbd
msgid ""
"Client's JSON Web Key Set [RFC7517] document value, which contains the "
"client's public keys."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.jwk:4
#: 786a840808f042fdb3a97eb1bd7f7a98
msgid ""
"The value of this field MUST be a JSON object containing a valid JWK Set.  "
"These keys can be used by higher-level protocols that use signing or "
"encryption.  This parameter is intended to be used by clients that cannot "
"use the \"jwks_uri\" parameter, such as native clients that cannot host "
"public URLs.  The \"jwks_uri\" and \"jwks\" parameters MUST NOT both be "
"present in the same request or response."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.jwks_uri:1
#: 29bbb97b4b0545df84cf23ec1e6b14cf
msgid ""
"URL string referencing the client's JSON Web Key (JWK) Set [RFC7517] "
"document, which contains the client's public keys."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.jwks_uri:4
#: 4021b5fbeabb464d938a3903ef7e718b
msgid ""
"The value of this field MUST point to a valid JWK Set document. These keys "
"can be used by higher-level protocols that use signing or encryption.  For "
"instance, these keys might be used by some applications for validating "
"signed requests made to the token endpoint when using JWTs for client "
"authentication [RFC7523].  Use of this parameter is preferred over the "
"\"jwks\" parameter, as it allows for easier key rotation.  The \"jwks_uri\" "
"and \"jwks\" parameters MUST NOT both be present in the same request or "
"response."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.logo_uri:1
#: 723f17b9b9df481394bcff341b2730b1
msgid "URL string that references a logo for the client."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.logo_uri:3
#: 6b1a034be4f248e98f185c7a0ef2c3b5
msgid ""
"If present, the server SHOULD display this image to the end-user during "
"approval. The value of this field MUST point to a valid image file.  The "
"value of this field MAY be internationalized, as described in Section 2.2."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.policy_uri:1
#: 92446c1f45fc4da9bf18fed32b046f26
msgid ""
"URL string that points to a human-readable privacy policy document that "
"describes how the deployment organization collects, uses, retains, and "
"discloses personal data."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.policy_uri:5
#: canaille.oidc.basemodels.Client.tos_uri:5 470f3a6ebe5a470d97207d2d724d7a50
msgid ""
"The authorization server SHOULD display this URL to the end-user if it is "
"provided.  The value of this field MUST point to a valid web page.  The "
"value of this field MAY be internationalized, as described in Section 2.2."
msgstr ""

#: ../../docstring of
#: canaille.oidc.basemodels.Client.post_logout_redirect_uris:3
#: 80775602163f4c4eae2aa73101fb4a59
msgid ""
"Array of URLs supplied by the RP to which it MAY request that the End-User's "
"User Agent be redirected using the post_logout_redirect_uri parameter after "
"a logout has been performed. These URLs SHOULD use the https scheme and MAY "
"contain port, path, and query parameter components; however, they MAY use "
"the http scheme, provided that the Client Type is confidential, as defined "
"in Section 2.1 of OAuth 2.0 [RFC6749], and provided the OP allows the use of "
"http RP URIs."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.redirect_uris:1
#: 9864218626a9495d837ca07ecabe2e83
msgid ""
"Array of redirection URI strings for use in redirect-based flows such as the "
"authorization code and implicit flows."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.redirect_uris:4
#: a1f4e7a342764daf9b91f5c582e0d704
msgid ""
"As required by Section 2 of OAuth 2.0 [RFC6749], clients using flows with "
"redirection MUST register their redirection URI values. Authorization "
"servers that support dynamic registration for redirect-based flows MUST "
"implement support for this metadata value."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.response_types:1
#: 2b675d8a76b64442baaf96288a99145f
msgid ""
"Array of the OAuth 2.0 response type strings that the client can use at the "
"authorization endpoint.  These response types are defined as follows:"
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.response_types:5
#: 3f19f3d3bf244c669c336230f4e548e5
msgid ""
"\"code\": The authorization code response type defined in OAuth 2.0, Section "
"4.1."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.response_types:8
#: 8be17e9ef4c642a0a227974a40450da2
msgid ""
"\"token\": The implicit response type defined in OAuth 2.0, Section 4.2."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.response_types:11
#: 3be1d7f3ab82407ebcf77c9ad6294934
msgid ""
"If the authorization endpoint is used by the grant type, the value of this "
"parameter MUST be the same as the value of the \"response_type\" parameter "
"passed to the authorization endpoint defined in the grant type definition.  "
"Authorization servers MAY allow for other values as defined in the grant "
"type extension process is described in OAuth 2.0, Section 4.5.  If omitted, "
"the default is that the client will use only the \"code\" response type."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.scope:1
#: 99bf5a0735f3490eb63943c7926eb165
msgid ""
"String containing a space-separated list of scope values (as described in "
"Section 3.3 of OAuth 2.0 [RFC6749]) that the client can use when requesting "
"access tokens."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.scope:5
#: d9c4d3be73ae454fbc08c0452c4cafba
msgid ""
"The semantics of values in this list are service specific.  If omitted, an "
"authorization server MAY register a client with a default set of scopes."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.software_id:1
#: ee3bd26091c94945b33584e781c19370
msgid ""
"A unique identifier string (e.g., a Universally Unique Identifier (UUID)) "
"assigned by the client developer or software publisher used by registration "
"endpoints to identify the client software to be dynamically registered."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.software_id:6
#: 8fd0e02b12354b72b7175ade2536eac3
msgid ""
"Unlike \"client_id\", which is issued by the authorization server and SHOULD "
"vary between instances, the \"software_id\" SHOULD remain the same for all "
"instances of the client software.  The \"software_id\" SHOULD remain the "
"same across multiple updates or versions of the same piece of software.  The "
"value of this field is not intended to be human readable and is usually "
"opaque to the client and authorization server."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.software_version:1
#: 2d69ee9b36d244ec98fb0ca3135ac74f
msgid ""
"A version identifier string for the client software identified by "
"\"software_id\"."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.software_version:4
#: 0da082aab3354aad8196b87ea111796f
msgid ""
"The value of the \"software_version\" SHOULD change on any update to the "
"client software identified by the same \"software_id\".  The value of this "
"field is intended to be compared using string equality matching and no other "
"comparison semantics are defined by this specification.  The value of this "
"field is outside the scope of this specification, but it is not intended to "
"be human readable and is usually opaque to the client and authorization "
"server.  The definition of what constitutes an update to client software "
"that would trigger a change to this value is specific to the software itself "
"and is outside the scope of this specification."
msgstr ""

#: ../../docstring of
#: canaille.oidc.basemodels.Client.token_endpoint_auth_method:1
#: e666c285e9d0483a8b06ed07b9596fd1
msgid ""
"String indicator of the requested authentication method for the token "
"endpoint.  Values defined by this specification are:"
msgstr ""

#: ../../docstring of
#: canaille.oidc.basemodels.Client.token_endpoint_auth_method:4
#: 75019e0ffa134fe0a48fc885130c97ee
msgid ""
"\"none\": The client is a public client as defined in OAuth 2.0, Section "
"2.1, and does not have a client secret."
msgstr ""

#: ../../docstring of
#: canaille.oidc.basemodels.Client.token_endpoint_auth_method:7
#: 6d1fcab0de3a41e18101687e93c45444
msgid ""
"\"client_secret_post\": The client uses the HTTP POST parameters as defined "
"in OAuth 2.0, Section 2.3.1."
msgstr ""

#: ../../docstring of
#: canaille.oidc.basemodels.Client.token_endpoint_auth_method:10
#: 75493a43244c4357842d2fdfa745f330
msgid ""
"\"client_secret_basic\": The client uses HTTP Basic as defined in OAuth 2.0, "
"Section 2.3.1."
msgstr ""

#: ../../docstring of
#: canaille.oidc.basemodels.Client.token_endpoint_auth_method:13
#: 070320a7585e4d9ba744cbaed1593208
msgid ""
"Additional values can be defined via the IANA \"OAuth Token Endpoint "
"Authentication Methods\" registry established in Section 4.2.  Absolute URIs "
"can also be used as values for this parameter without being registered.  If "
"unspecified or omitted, the default is \"client_secret_basic\", denoting the "
"HTTP Basic authentication scheme as specified in Section 2.3.1 of OAuth 2.0."
msgstr ""

#: ../../docstring of canaille.oidc.basemodels.Client.tos_uri:1
#: 95cc7b66c6da48e5a189a32abaa9c24e
msgid ""
"URL string that points to a human-readable terms of service document for the "
"client that describes a contractual relationship between the end-user and "
"the client that the end-user accepts when authorizing the client."
msgstr ""

#: ../../canaille/oidc/basemodels.py:docstring of
#: canaille.oidc.basemodels.Consent:1 bf6c359aadbc4404ba1967b1b8d26255
msgid "Long-term user consent to an application."
msgstr ""

#: ../../canaille/oidc/basemodels.py:docstring of
#: canaille.oidc.basemodels.Token:1 a20eaa516c854599a62222141346d76b
msgid "OpenID Connect token definition."
msgstr ""

#: ../references/templates.rst:2 25d974aba30140f4ad6e3445c3d71f50
msgid "Templates"
msgstr ""

#: ../tutorial/databases.rst:4 2934007ee99c4b5096855dd9bf47208b
msgid ""
"Canaille can read and save data in different databases. This page presents "
"the different database backends and their specificities:"
msgstr ""

#: ../tutorial/databases.rst:10 4d8d9b1634cf47eca9c118b3af6173df
msgid ""
"Canaille comes with a lightweight inmemory backend by default. It is used "
"when no other backend has been configured."
msgstr ""

#: ../tutorial/databases.rst:13 5383f833c2634382a279cf9c2e9efff5
msgid ""
"This backend is only for test purpose and should not be used in production "
"environments."
msgstr ""

#: ../tutorial/databases.rst:18 5c04f9416e954990a51ad770b994755d
msgid ""
"Canaille can use any database supported by `SQLAlchemy <https://www."
"sqlalchemy.org/>`_, such as sqlite, postgresql or mariadb."
msgstr ""

#: ../tutorial/databases.rst:21 5cef0f1dda384284a256492c7b8dfcca
msgid ""
"It is used when the ``CANAILLE_SQL`` configuration parameter is defined. For "
"instance:"
msgstr ""

#: ../tutorial/databases.rst:29 cedc3bb2dba0427b93cf11791b189c96
msgid ""
"You can find more details on the SQL configuration in the :class:`dedicated "
"section <canaille.backends.sql.configuration.SQLSettings>`."
msgstr ""

#: ../tutorial/databases.rst:34 fd9f8f823d184c72840274fd13de5b91
msgid ""
"Canaille can use OpenLDAP as its main database. It is used when the "
"``CANAILLE_LDAP`` configuration parameter is defined. For instance:"
msgstr ""

#: ../tutorial/databases.rst:52 dbd09fe39b724102813c8d259ad336f6
msgid ""
"If you want to use TOTP/HOTP authentication, you will need to add the "
"``oathHOTPToken`` class to the user:"
msgstr ""

#: ../tutorial/databases.rst:58 fcbc8501c455465daa5142894408bb38
msgid ""
"You can find more details on the LDAP configuration in the :class:`dedicated "
"section <canaille.backends.ldap.configuration.LDAPSettings>`."
msgstr ""

#: ../tutorial/databases.rst:61 2c710def18bc46539b2962ee1bde2bf6
msgid ""
"Currently, only the ``inetOrgPerson``, ``oathHOTPToken`` and "
"``groupOfNames`` schemas have been tested. If you want to use different "
"schemas or LDAP servers, adaptations may be needed. Patches are welcome."
msgstr ""

#: ../tutorial/databases.rst:66 b7014bf888504dcc865871e8275190f6
msgid "OpenLDAP overlays integration"
msgstr ""

#: ../tutorial/databases.rst:68 a67abbc0745e4c7e9353697969a4fbab
msgid "Canaille can integrate with several OpenLDAP overlays:"
msgstr ""

#: ../tutorial/databases.rst:71 b1eebe57d90648b3b24cb48cb49c5436
msgid "memberof / refint"
msgstr ""

#: ../tutorial/databases.rst:73 6bb596696373483ab0a52f0e8169ab9e
msgid ""
"`memberof <https://www.openldap.org/doc/admin26/overlays."
"html#Reverse%20Group%20Membership%20Maintenance>`_ and `refint <https://www."
"openldap.org/doc/admin26/overlays.html#Referential%20Integrity>`_ overlays "
"are needed for the Canaille group membership to work correctly."
msgstr ""

#: ../tutorial/databases.rst:77 ../tutorial/databases.rst:100
#: ../tutorial/databases.rst:123 bff8a12ffd4b4d179d6938a046810186
msgid "Here is a configuration example compatible with canaille:"
msgstr ""

#: ../tutorial/databases.rst:79 d8858049d6d44b7cae4cbd659f9f8ba2
msgid "memberof-config.ldif"
msgstr ""

#: ../tutorial/databases.rst:83 830059290ddc4cf1b2249c45fc303b98
msgid "refint-config.ldif"
msgstr ""

#: ../tutorial/databases.rst:87 ../tutorial/databases.rst:110
#: 4070700e524f481ba82662576453c6b3
msgid "You can adapt and load those configuration files with:"
msgstr ""

#: ../tutorial/databases.rst:96 e37e96d3eac048e191b4da59788b6096
msgid "ppolicy"
msgstr ""

#: ../tutorial/databases.rst:98 88ed660b0098483fa77e880febad6b52
msgid ""
"If the `ppolicy <https://www.ietf.org/archive/id/draft-behera-ldap-password-"
"policy-11.html>`_ overlay is configured and the ``pwdEndTime`` attribute is "
"available (since OpenLDAP 2.6), then account locking support will be enabled "
"in canaille. To allow users to manage account expiration, they need to have "
"a *write* permission on the :attr:`~canaille.core.models.User.lock_date` "
"attribute."
msgstr ""

#: ../tutorial/databases.rst:102 0194f8cb96554ed9a209784cd1a5a10e
msgid "ppolicy-config.ldif"
msgstr ""

#: ../tutorial/databases.rst:106 09776d76a5c54f6eb7d79e15a0dbed82
msgid "ppolicy.ldif"
msgstr ""

#: ../tutorial/databases.rst:119 7bb7048ad0234c28a245626aa50d9c62
msgid "otp"
msgstr ""

#: ../tutorial/databases.rst:121 89b862fd590f4c49a156ed490b778051
msgid ""
"If the `otp <https://www.openldap.org/software/man.cgi?query=slapo-otp>`_ "
"overlay is configured, you will be able to add one-time password "
"authentication in canaille."
msgstr ""

#: ../tutorial/databases.rst:125 0194f8cb96554ed9a209784cd1a5a10e
msgid "otp-config.ldif"
msgstr ""

#: ../tutorial/databases.rst:129 4070700e524f481ba82662576453c6b3
msgid "You can adapt and load this configuration file with:"
msgstr ""

#: ../tutorial/databases.rst:136 14e54c22e9114f30b809b1605c494c6f
msgid "You will also need to add the ``oathHOTPToken`` class to the user:"
msgstr ""

#: ../tutorial/deployment.rst:2 f396d7b4fa884f55bf66b57b6c046fdb
msgid "Deployment"
msgstr ""

#: ../tutorial/deployment.rst:5 2cbff8a64b41470396973c1f66482110
msgid "Application service"
msgstr ""

#: ../tutorial/deployment.rst:7 d60be98207bd489299d7492480a091c5
msgid ""
"After having finished Canaille installation you have to run it in a WSGI "
"application server. Here are some WSGI server configuration examples you can "
"pick. Do not forget to update the paths."
msgstr ""

#: ../tutorial/deployment.rst:11 cf41e4599bea477a8b6742ed38c09555
msgid "gunicorn"
msgstr ""

#: ../tutorial/deployment.rst:15 9f4888747a6d4f5d85d9b94bc2814aff
msgid "Write a gunicorn configuration sample file."
msgstr ""

#: ../tutorial/deployment.rst:18 beb61a6d85dc407c923f0a1797571b4b
msgid "uwsgi"
msgstr ""

#: ../tutorial/deployment.rst:42 804b59080cfb46a5bece65e9dfe52ae4
msgid "Webserver"
msgstr ""

#: ../tutorial/deployment.rst:44 3fd8ef72a9db483aaa18397b136708a4
msgid ""
"Now you have to plug your WSGI application server to your webserver so it is "
"accessible on the internet. Here are some webserver configuration examples "
"you can pick:"
msgstr ""

#: ../tutorial/deployment.rst:48 40d9837c5cdd4c9faf94797e578e409d
msgid "Nginx"
msgstr ""

#: ../tutorial/deployment.rst:114 5407fc49df8b4871a993d95ebe6b216e
msgid "Apache"
msgstr ""

#: ../tutorial/deployment.rst:153 9e1ca64c07984a218f094949ed99bc6e
msgid "Recurrent jobs"
msgstr ""

#: ../tutorial/deployment.rst:155 283551b28f2d465a830885e57a802334
msgid ""
"You might want to clean up your database to avoid it growing too much. You "
"can regularly delete expired tokens and authorization codes with:"
msgstr ""

#: ../tutorial/deployment.rst:164 3a91c9769ca04ed289ef4e08d71c84e0
msgid "Webfinger"
msgstr ""

#: ../tutorial/deployment.rst:166 c0c2aa060ee743e797e0e0e69ed34aad
msgid ""
"You may want to configure a `WebFinger`_ endpoint on your main website to "
"allow the automatic discovery of your Canaille installation based on the "
"account name of one of your users. For instance, suppose your domain is "
"``mydomain.example`` and your Canaille domain is ``auth.mydomain.example`` "
"and there is a user ``john.doe``. A third-party application could require to "
"authenticate the user and ask them for a user account. The user would give "
"their account ``john.doe@mydomain.example``, then the application would "
"perform a WebFinger request at ``https://mydomain.example/.well-known/"
"webfinger`` and the response would contain the address of the authentication "
"server ``https://auth.mydomain.example``. With this information the third "
"party application can redirect the user to the Canaille authentication page."
msgstr ""

#: ../tutorial/deployment.rst:168 d4f07f118d4443bcbd44e55144cf4d1f
msgid ""
"The difficulty here is that the WebFinger endpoint must be hosted at the top-"
"level domain (i.e. ``mydomain.example``) while the authentication server "
"might be hosted on a sublevel (i.e. ``auth.mydomain.example``). Canaille "
"provides a WebFinger endpoint, but if it is not hosted at the top-level "
"domain, a web redirection is required on the ``/.well-known/webfinger`` path."
msgstr ""

#: ../tutorial/deployment.rst:170 b305def4f6e74643b1c47e5491e46126
msgid "Here are configuration examples for Nginx or Apache:"
msgstr ""

#: ../tutorial/deployment.rst:172 f07e30950c0443ea830fb6d01181cbce
msgid "Nginx webfinger configuration for a top level domain"
msgstr ""

#: ../tutorial/deployment.rst:181 f166862da12146e286d09f1189b44637
msgid "Apache webfinger configuration for a top level domain"
msgstr ""

#: ../tutorial/deployment.rst:191 ed7f25a6ab90437984c0249217556b7a
msgid "Create the first user"
msgstr ""

#: ../tutorial/deployment.rst:193 e983e9c5998a475e9472c54742b25c9f
msgid ""
"Once canaille is installed, soon enough you will need to add users. To "
"create your first user you can use the :ref:`canaille create <cli_create>` "
"CLI."
msgstr ""

#: ../tutorial/index.rst:2 40de96b13f0b46ba88769f9f0c91bece
msgid "Tutorial"
msgstr ""

#: ../tutorial/install.rst:2 990b0c4570294a4c914942072b835544
msgid "Installation"
msgstr ""

#: ../tutorial/install.rst:6 1f5645b8ce114b08abc62b4f03e8d613
msgid ""
"Canaille is under heavy development and may not fit a production environment "
"yet."
msgstr ""

#: ../tutorial/install.rst:8 a76d3b71c19b4667a34e1d4b68261499
msgid ""
"The installation of canaille consist in several steps, some of which you can "
"do manually or with command line tool:"
msgstr ""

#: ../tutorial/install.rst:11 de05573555224e75869a68ac41471c97
msgid "Get the code"
msgstr ""

#: ../tutorial/install.rst:13 8d5ce5f2ad284774a673cad8e1be2cc5
msgid ""
"As the moment there is no distribution package for canaille. However, it can "
"be installed with the ``pip`` package manager. Let us choose a place for the "
"canaille environment, like ``/opt/canaille/env``."
msgstr ""

#: ../tutorial/install.rst:24 5e8dbf51cc8e401d8e7f2738c4c1e500
msgid "Extras"
msgstr ""

#: ../tutorial/install.rst:26 ff09c579e2834394992e462c1a7830e6
msgid "Canaille provides different package options:"
msgstr ""

#: ../tutorial/install.rst:28 fba9a7d4ab8f42c1ba19ec58827c49bb
msgid "`front` provides all the things needed to produce the user interface;"
msgstr ""

#: ../tutorial/install.rst:29 3c368569b3434d0c8821fcc5aa2a9fcd
msgid "`oidc` provides the dependencies to perform OAuth2/OIDC authentication;"
msgstr ""

#: ../tutorial/install.rst:30 d2fa3adf12b04e879e8eb1ad5a86d131
msgid "`ldap` provides the dependencies to enable the LDAP backend;"
msgstr ""

#: ../tutorial/install.rst:31 9f0ac2527c844d26999ac4722b7a3062
msgid "`sqlite` provides the dependencies to enable the SQLite backend;"
msgstr ""

#: ../tutorial/install.rst:32 9f8652296fdd460d9d0885fd934a924f
msgid ""
"`postgresql` provides the dependencies to enable the PostgreSQL backend;"
msgstr ""

#: ../tutorial/install.rst:33 dba3b5d89e9e46c6b3774b01bf2ae122
msgid "`mysql` provides the dependencies to enable the MySQL backend;"
msgstr ""

#: ../tutorial/install.rst:34 3284b40cd5ff4177a9369e471dcd1de2
msgid "`sentry` provides sentry integration to watch Canaille exceptions;"
msgstr ""

#: ../tutorial/install.rst:35 11d315c8ffbb415cab5068a2fb287590
msgid ""
"`otp` provides the dependencies to enable one-time password authentication;"
msgstr ""

#: ../tutorial/install.rst:36 c60670612f384704ad46fba12f41dcf9
msgid "`sms` provides the dependencies to enable sms sending;"
msgstr ""

#: ../tutorial/install.rst:37 dfd39313c050407193deac1f01f23e54
msgid "`all` provides all the extras above."
msgstr ""

#: ../tutorial/install.rst:39 3d0f7f47cc1a469e9762578aed91f002
msgid "They can be installed with:"
msgstr ""

#: ../tutorial/install.rst:46 b7732a260ca84ba3a4130bd6cb0d1619
msgid "Configure"
msgstr ""

#: ../tutorial/install.rst:48 86df5b7acf954ddfbb2982dbe0a51da1
msgid ""
"Choose a path where to store your configuration file. You can pass any "
"configuration path with the ``CONFIG`` environment variable."
msgstr ""

#: ../tutorial/install.rst:56 042753d9c5704f21b0da35d38a17a620
msgid ""
"You should then edit your configuration file to adapt the values to your "
"needs. Look at the configuration details in the :doc:`configuration <../"
"references/configuration>` page."
msgstr ""

#: ../tutorial/install.rst:59 a87138181fe64cd9891206619cad6d2d
msgid "Install"
msgstr ""

#: ../tutorial/install.rst:61 2a7cde9a8ef54f6fb6b527734b5e471d
msgid ""
"The :ref:`install command <cli_install>` will apply most of the things "
"needed to get Canaille working. Depending on the configured :doc:`database "
"<databases>` it will create the SQL tables, or install the LDAP schemas for "
"instance."
msgstr ""

#: ../tutorial/install.rst:70 faefbbda355349e19671492f478d3153
msgid "Check"
msgstr ""

#: ../tutorial/install.rst:72 ab77edb446f44686bf26ef04fbf3dc7d
msgid ""
"After a manual installation, you can check your configuration file using "
"the :ref:`check command <cli_install>`:"
msgstr ""

#: ../tutorial/provisioning.rst:2 96b0ed3d70cf436a80f82cf3cd89bf37
msgid "Provisioning"
msgstr ""

#: ../tutorial/provisioning.rst:4 a4047f8d0f904f6799d549e2f65181b2
msgid ""
"Canaille partially implement the :rfc:`SCIM <7642>` provisioning protocol at "
"the ``/scim/v2`` endpoint."
msgstr ""

#: ../tutorial/provisioning.rst:6 969c0c2d7d2a47de8fb1c7441ec62e2d
msgid ""
"At the moment, only the server part is implemented. It allows client "
"applications to manage user profiles directly in Canaille."
msgstr ""

#: ../tutorial/provisioning.rst:9 706556a4f4de43658b7ee3583115216a
msgid ""
"To allow clients to access the SCIM API, the client must have the "
"``client_credentials`` grant type configured. This allows clients to ask an "
"authentication token on their own behalf and use this token to perform "
"queries. Currently, user tokens are not supported."
msgstr ""

#: ../tutorial/provisioning.rst:13 5abc69c6a6ff4cd48e3f2b01cdaa1a52
msgid ""
"Then the :attr:`CANAILLE_SCIM.ENABLE_SERVER <canaille.scim.configuration."
"SCIMSettings.ENABLE_SERVER>` configuration parameter must be enabled."
msgstr ""

#: ../tutorial/provisioning.rst:23 37c0e4ee9eb54f9f94754fec060e0ac5
msgid ""
"Some SCIM :ref:`features and endpoints <scim_unimplemented>` are not "
"implemented. In addition to these, Canaille will implement in the future:"
msgstr ""

#: ../tutorial/provisioning.rst:26 a5d6aea95b444cbb9d10731986ae66ac
msgid ""
"Access control for clients on the SCIM API endpoint, to finely manage "
"permissions depending on clients."
msgstr ""

#: ../tutorial/provisioning.rst:27 98d88ce07bc640bcafedee10c9bbc98f
msgid ""
"Client-side implementation, to broadcast user and groups modifications among "
"all the clients."
msgstr ""

#: ../tutorial/troubleshooting.rst:2 d5cca3688aea45bb9ed015f84d324407
msgid "Troubleshooting"
msgstr ""

#: ../tutorial/troubleshooting.rst:5 584a62a0d78b4af391bfc8bd916e3934
msgid "The web interface throws useless error messages"
msgstr ""

#: ../tutorial/troubleshooting.rst:7 acc3175f98324e73b0154a833f4291de
msgid ""
"Unless the current user has admin :class:`permissions <canaille.core."
"configuration.Permission>`, or the installation is in :attr:`~canaille.app."
"configuration.RootSettings.DEBUG` mode, error messages won't be too "
"technical. For instance, you can see *The request you made is invalid*. To "
"enable detailed error messages, you can **temporarily** enable the :attr:"
"`~canaille.app.configuration.RootSettings.DEBUG` configuration parameter."
msgstr ""

#: ../tutorial/troubleshooting.rst:12 358b28e47d4a4b48ba2bde7ddd4bc5f3
msgid "How to manually install LDAP schemas?"
msgstr ""

#: ../tutorial/troubleshooting.rst:16 5e241c1fdd044454a5a27a9d4d609a6c
msgid ""
"Schema installation can be automatically done using the :ref:`install "
"command <cli_install>`."
msgstr ""

#: ../tutorial/troubleshooting.rst:18 fa20dff6817848489fee9434d3e8c154
msgid "As of OpenLDAP 2.4, two configuration methods are available:"
msgstr ""

#: ../tutorial/troubleshooting.rst:20 536b6d4fabea43d48240f3b1b4e256c6
msgid ""
"The `deprecated <https://www.openldap.org/doc/admin26/slapdconf2.html>`_ "
"one, based on a configuration file (generally ``/etc/ldap/slapd.conf``);"
msgstr ""

#: ../tutorial/troubleshooting.rst:21 2681e5ed98de4633ab3e958980570c61
msgid ""
"The new one, based on a configuration directory (generally ``/etc/ldap/slapd."
"d``)."
msgstr ""

#: ../tutorial/troubleshooting.rst:23 e623df73a33a4425874322d64990dd09
msgid ""
"Depending on the configuration method you use with your OpenLDAP "
"installation, you need to chose how to add the canaille schemas:"
msgstr ""

#: ../tutorial/troubleshooting.rst:26 7fa64ce5f9834bfc8a84a6b147776135
msgid "Old fashion: Copy the schemas in your filesystem"
msgstr ""

#: ../tutorial/troubleshooting.rst:35 89ec7d1a5b9c488898dd0aeec512eb0f
msgid "New fashion: Use slapadd to add the schemas"
msgstr ""

#: ../tutorial/troubleshooting.rst:37 cf355b0d0d224146b9aa9bde63c3285b
msgid "Be careful to stop your ldap server before running ``slapadd``"
msgstr ""

#: ../tutorial/troubleshooting.rst:46 b688808b89a1486ea46f0a30671f0772
msgid "How to manually generate the OIDC keypair?"
msgstr ""

#: ../tutorial/troubleshooting.rst:50 fe622e23c48a4ec0ba3a9e00e24cfb88
msgid ""
"The keypair generation can be automatically done using the :ref:`install "
"command <cli_install>`."
msgstr ""

#: ../tutorial/troubleshooting.rst:52 2467c8ae6d2a4ba19056d44a89656984
msgid ""
"Canaille needs a key pair to sign OIDC tokens. You can customize those "
"commands, as long as they match the ``JWT`` section of your configuration "
"file."
msgstr ""

#: ../usecases.rst:4 dde73820d8ff46128f0ae5a245d4f212
msgid "Use cases"
msgstr ""

#: ../usecases.rst:6 936471ec6e494f839a45d1a5048ddbe9
msgid ""
"Canaille is a lightweight IAM for simple needs. Here are a few use cases you "
"might recognize in, where Canaille would fit your needs."
msgstr ""

#: ../usecases.rst:10 0c06bc8fc0754db6bdfbae05fe718b2e
msgid "OpenID Connect provider on top of a LDAP directory"
msgstr ""

#: ../usecases.rst:12 0ec337c5784a4dc296538609b9d75dd6
msgid ""
"Your organization has an historic :ref:`LDAP directory <feature_databases>` "
"and you want to add a :ref:`OpenID Connect <feature_oidc>` :abbr:`SSO "
"(Single Sign-On)` layer on top of it, so users can use all your application "
"while signin-in only once, without any data migration."
msgstr ""

#: ../usecases.rst:15 35bb9bbb50064dc7a5383c9d5371adfd
msgid "Profile edition of LDAP users"
msgstr ""

#: ../usecases.rst:17 87226e31a4ef425585e8de20647d72a3
msgid ""
"Your organization has a :ref:`LDAP directory <feature_databases>` and you "
"want to provide a way to your users to :ref:`edit their personal information "
"<feature_profile_management>` by themselves, without requiring any "
"administrator intervention."
msgstr ""

#: ../usecases.rst:20 22ec6d0c58ed413b80cd6aca23f637b6
msgid "Password recovery with a LDAP directory"
msgstr ""

#: ../usecases.rst:22 46f418970c7640f9ace069002ed337bd
msgid ""
"Your organization has an historic :ref:`LDAP directory <feature_databases>` "
"and you want to provide a way to your users to :ref:`recover their password "
"<feature_password_recovery>` when they cannot remember it, without any "
"administrator intervention."
msgstr ""

#: ../usecases.rst:25 f44f325b29594fc7b31521d259e27d5f
msgid "A lightweight IAM for unit testing"
msgstr ""

#: ../usecases.rst:27 c9f537fbf3cd4b3cb0e6d140b8a2327b
msgid ""
"You are :ref:`developing <feature_development>` an application relying on "
"OAuth2 or OpenID Connect to authenticate the users. You don't want to mock "
"the calls to the identity provider in your unit tests, but you want to :ref:"
"`perform real OAuth2/OIDC requests <feature_testing>`, and test your "
"application against different identity provider tunings."
msgstr ""

#: ../usecases.rst:30 5b9b8e07b9154150a105088cc630ce6a
msgid "A lightweight IAM for developing"
msgstr ""

#: ../usecases.rst:32 7a4ff703b94e4706b5123edb0c2abe51
msgid ""
"You are :ref:`developing <feature_development>` an application relying on "
"OAuth2 or OpenID Connect to authenticate the users. You need a :ref:`IAM "
"server to develop <feature_development>` locally, but your old computer "
"cannot bear launching a full Keycloak in a Docker container."
msgstr ""

#: ../usecases.rst:35 e594e15fba204d65a3f483c36e7c0aab
msgid "A lightweight IAM for CIs"
msgstr ""

#: ../usecases.rst:37 ff03e5a191564f90af81c7d210a3de24
msgid ""
"You are :ref:`developing <feature_development>` an application relying on "
"OAuth2 or OpenID Connect to authenticate the users. You need a IAM server "
"that could can populate with custom data, and integrate in your :ref:"
"`continuous integration environment <feature_ci>`."
msgstr ""

#: ../usecases.rst:40 8a37de08f6594334a3ba6ed2f9a3b71e
msgid "A CLI to quickly edit LDAP directory users"
msgstr ""

#: ../usecases.rst:42 b9d55e6eeca547aabb9bbfef3998f6d2
msgid ""
"Your organization has an historic :ref:`LDAP directory <feature_databases>`. "
"You are tired to deal with *ldif* syntax to manage your users and group and "
"would prefer a simple human-readable CLI."
msgstr ""
