# 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.
#
#, fuzzy
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: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 2e9453d4722144fd9ad7f53b28a7cb37
#: 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
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 254357b217fe4a309d66a400497a104a
#: 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
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 839f52c15ed94f0ba4a9356f392f728b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
#: 13ee0de3f7db4046b8399917e8d52e0b
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
#: bc1a20b5783a4fe38fa201438a8075e5
#: 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
#: 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
#: readme.rst:6
#: ea5bd05b09984bcaa643efa7a1a7618c
#: ea5bd05b09984bcaa643efa7a1a7618c
#: 33490a8ff4a3465fb8648393ff65eb75
msgid "Message extraction"
msgstr ""

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

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

#: readme.rst:17
#: ../../canaille/translations/README.rst:19
#: readme.rst:17
#: 5429b47768e2472ea597ed48140a5621
#: 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
#: readme.rst:1
#: 35fff9d115334ec6aa6a99ec5da8a27f
#: 7abe83f2eeb54b3f9f3d1a8542696765
msgid "Translations are done with `Weblate <https://hosted.weblate.org/projects/canaille/documentation>`__."
msgstr ""

#: readme.rst:3
#: 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
#: 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
#: 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
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: 588ab8a50fca4528b9a471dbddfb7d4a
#: c2035a448fa9405a92d51c9c90277394
#: ba65de35554741a48a7eb4a72fc66433
#: c2035a448fa9405a92d51c9c90277394
#: 4dd20636352243038f0bdad8d15e8449
#: 5b23071246ab41f1abd1bfa5596a4b46
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c1aa2d442f2047f9a1194e38c2b1ddd1
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: ce03d94ab7954c02968bfb44eb0f72fd
#: 9fb4e3e247d846419051f2852ffa3f31
#: f5e5911bcb704af19c073370f437c1b4
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: e063ffcc58474df4a66b2814eb4c0f61
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: cff48ca4a13545309d9e1b58c3dede80
#: e55ccef99f4a45be8fb35a1ed8bb1ac4
#: 4b09487097334807804aaba873d4dc7b
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c9b45500d9d145a8862c978d95329330
#: c34b7940cbbd4218af2cb94e8eb24fc7
#: 8a394726b7b941dfbbd8af3e546782c1
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: f5320617a03e47dea905ac5a70208c70
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
#: c2035a448fa9405a92d51c9c90277394
msgid "✅"
msgstr ""

#: ../development/specifications.rst:110
#: ../development/specifications.rst:116
#: 86f975b8aaab4af9bfc62ef2df91ba28
#: 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
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 94a1a61f502a42569788cfe93ad6bcf7
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
#: 0baee04e46584b46ab2b5bd83dea4c0d
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
#: 8f85eeab9d6945af894c55e2a4aa0b9b
#: 8f85eeab9d6945af894c55e2a4aa0b9b
#: 8f85eeab9d6945af894c55e2a4aa0b9b
#: 8f85eeab9d6945af894c55e2a4aa0b9b
#: 8f85eeab9d6945af894c55e2a4aa0b9b
#: 8f85eeab9d6945af894c55e2a4aa0b9b
#: 8f85eeab9d6945af894c55e2a4aa0b9b
#: 8f85eeab9d6945af894c55e2a4aa0b9b
msgid "❔"
msgstr ""

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

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

#: ../development/specifications.rst:114
#: ../development/specifications.rst:126
#: 741e97755b8c4478b7e19ba006898401
#: 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
#: aa3618e441ac413e83acdfe56631d15a
#: 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
#: ../../canaille set authorizationcode:1
#: 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
#: ../../canaille delete client:1
#: ../../canaille delete consent:1
#: ../../canaille delete group:1
#: ../../canaille delete token:1
#: ../../canaille delete user:1
#: ../../canaille reset-otp:1
#: ../../canaille set authorizationcode:1
#: ../../canaille set client:1
#: ../../canaille set consent:1
#: ../../canaille set group:1
#: ../../canaille set token:1
#: ../../canaille set user:1
#: 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
#: ../../canaille set client:1
#: 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
#: ../../canaille set consent:1
#: 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
#: ../../canaille set group:1
#: 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
#: ../../canaille set token:1
#: 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
#: ../../canaille reset-otp:1
#: ../../canaille set user:1
#: 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
#: 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
#: ../../docstring of canaille.core.configuration.ACLSettings.PERMISSIONS:6
#: ../../docstring of canaille.core.configuration.CoreSettings.ACL:5
#: ../../docstring of canaille.core.configuration.CoreSettings.LOGGING:12
#: 56ce67b55d3b4d8eba9a07b4feed2587
#: d9b0f4816c2644679233ec3b797c2fc4
#: d9b0f4816c2644679233ec3b797c2fc4
#: 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
#: ../../docstring of canaille.core.configuration.CoreSettings.LOGGING:10
#: ba8b9d6794e2459492abfa778736328a
#: 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
#: ../../docstring of canaille.oidc.configuration.JWTSettings.PUBLIC_KEY:3
#: 29d2c1b105e74d46b80db01b78954711
#: 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.py:docstring of 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.py:docstring of canaille.core.models.User:1
#: ../../canaille/oidc/basemodels.py:docstring of canaille.oidc.basemodels.AuthorizationCode:1
#: ../../canaille/oidc/basemodels.py:docstring of canaille.oidc.basemodels.Client:1
#: ../../canaille/oidc/basemodels.py:docstring of canaille.oidc.basemodels.Consent:1
#: ../../canaille/oidc/basemodels.py:docstring of canaille.oidc.basemodels.Token:1
#: 31058fb082044629ab68e330524f37d4
#: 963c873782434df6bc7a6314e406858e
#: ec3b5ed7c8e94f728377c74990bc94e6
#: ec3b5ed7c8e94f728377c74990bc94e6
#: ec3b5ed7c8e94f728377c74990bc94e6
#: 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
#: ../../docstring of 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
#: ../../docstring of canaille.oidc.basemodels.Client.client_secret:1
#: ../../docstring of canaille.oidc.basemodels.Client.post_logout_redirect_uris:1
#: 05d209d5010c49c99c2e88fd070c5595
#: 05d209d5010c49c99c2e88fd070c5595
#: 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
#: ../../docstring of canaille.oidc.basemodels.Client.tos_uri:5
#: 470f3a6ebe5a470d97207d2d724d7a50
#: 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
#: bff8a12ffd4b4d179d6938a046810186
#: 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
#: 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 ""
