உள்ளமைவு

Load the உள்ளமைவு

Canaille can be configured either by a சூழல் variables, சூழல் file, or by a உள்ளமைவு file.

உள்ளமைவு கோப்பு

CANAILLE_CONFIG

The உள்ளமைவு can be written in toml உள்ளமைவு கோப்பு which பாதை is passed in the CANAILLE_CONFIG சூழல் variable.

config.toml
SECRET_KEY = "very-secret"

[CANAILLE]
NAME = "My organization"

[CANAILLE_SQL]
DATABASE_URI = "postgresql://user:password@localhost/database"
...

You can have a look at the example கோப்பு க்கு inspiration.

சூழல் மாறிகள்

In addition, parameters that have not been கணம் in the உள்ளமைவு கோப்பு can be read இருந்து சூழல் variables. The way சூழல் மாறிகள் அரே parsed can be read இருந்து the pydantic-settings ஆவணப்படுத்துதல்.

Tip

க்கு சூழல் vars, the பிரிப்பான் between பிரிவுகள் and மாறிகள் is a இரட்டை underscore: __. க்கு instance, the NAME var in the CANAILLE பிரிவு shown above is CANAILLE__NAME.

சூழல் கோப்பு

Any சூழல் variable can also be written in an சூழல் file, which பாதை should be passed in the CANAILLE_ENV சூழல் variable. க்கு instance, கணம் CANAILLE_ENV=.env பெறுநர் load a .env file.

.env
SECRET_KEY="very-secret"
CANAILLE__NAME="My organization"
CANAILLE_SQL__DATABASE_URI="postgresql://user:password@localhost/database"

உள்ளமைவு முறைகள் முன்னுரிமை

ஒரே கட்டமைப்பு விருப்பம் வெவ்வேறு வழிகளில் வரையறுக்கப்பட்டால், எதைப் பயன்படுத்த வேண்டும் என்பதை Canaille எப்படித் தேர்ந்தெடுக்கும் என்பது இங்கே:

  • சூழல் கோப்பு மற்றும் உள்ளமைவு கோப்பில் சூழல் vars முன்னுரிமை உள்ளது;

  • சூழல் கோப்பிற்கு கட்டமைப்பு கோப்பினை விட முன்னுரிமை இருக்கும்;

  • எந்த உள்ளமைவு முறையும் பயன்படுத்தப்படாவிட்டால், தற்போது செயல்படும் கோப்பகத்தில் canaille.toml உள்ளமைவு கோப்பை Canaille தேடும்.

அளவுருக்கள்

canaille.app.configuration.RootSettings[source]

மேல்-நிலை பெயர்வெளியில் Canaille உடன் தொடர்பில்லாத கட்டமைப்பு அமைப்புகள் உள்ளன.

பின்வரும் நூலகங்களிலிருந்து உள்ளமைவு அளவுருக்கள் பயன்படுத்தப்படலாம்:

config.toml
SECRET_KEY = "very-secret"
SERVER_NAME = "auth.mydomain.example"
PREFERRED_URL_SCHEME = "https"
DEBUG = false

[CANAILLE]
NAME = "My organization"
...
BROKER: str | None = None

தரகர் வகுப்பிற்கான புள்ளிகள்.

எதுவும் இல்லை என்றால், BROKER_URL இன் மதிப்பிலிருந்து இது யூகிக்கப்படும்:

  • தரகர் முகவரி அமைக்கப்படாமல் இருந்தால் dramatiq_eager_broker:EagerBroker` பயன்படுத்தப்படும்.

    இந்த தரகர் அதை ஒத்திசைவாகச் செயல்படுத்துகிறார், அதாவது பணிப் பணியாளரை இயக்க வேண்டிய அவசியமில்லை.

  • முகவரி AMQP முகவரி ஆக இருந்தால் dramatiq.brokers.rabbitmq:RabbitmqBroker` பயன்படுத்தப்படும்.

  • முகவரி ஆனது redis முகவரி ஆக இருந்தால் dramatiq.brokers.redis:RedisBroker` பயன்படுத்தப்படும்.

BROKER_URL: str | None = None

இயங்கும் பணிப் பணியாளரின் URL.

இது தரகர் வகுப்பிற்கு url முக்கிய சொல் வாதமாக அனுப்பப்பட்டது. உதாரணமாக:

  • redis://localhost:6379

  • amqp://localhost

  • redis://username:password@redis.example:6379/0

  • amqp://guest:guest@localhost:5672/?heartbeat=30&connection_timeout=10

எதுவுமில்லை எனில், பணிப் பணியாளரை இயக்கத் தேவையில்லாமல் அனைத்துப் பணிகளும் ஒத்திசைவாகச் செயல்படுத்தப்படும். இது மோசமான செயல்திறனைக் கொண்டுள்ளது, ஆனால் சோதனைச் சூழல்களில் பயனுள்ளதாக இருக்கும்.

CACHE_TYPE: str = 'SimpleCache'

கேச் வகை.

இயல்புநிலை SimpleCache என்பது இலகுரக நினைவகத்தில் உள்ள தற்காலிக சேமிப்பாகும். மேலும் விவரங்களுக்கு Flask-Caching ஆவணங்களை பார்க்கவும்.

DEBUG: bool = False

Flask DEBUG கட்டமைப்பு அமைப்பு.

இது பிழைத்திருத்த விருப்பங்களை செயல்படுத்துகிறது.

Danger

இது வளர்ச்சிக்கு பயனுள்ளதாக இருக்கும் ஆனால் விளைவாக்கம் சூழல்களில் முற்றிலும் தவிர்க்கப்பட வேண்டும்.

PERMANENT_SESSION_LIFETIME: timedelta = datetime.timedelta(days=30)

Flask PERMANENT_SESSION_LIFETIME உள்ளமைவு அமைப்பு.

இது நிரந்தர அமர்வின் வாழ்நாளை அமைக்கிறது. உள்நுழைவின் போது "என்னை நினைவில் கொள்ளுங்கள்" தேர்வுப்பெட்டியை சரிபார்க்கும் போது பயனர் அமர்வுகள் நிரந்தரமாக இருக்கும்.

மதிப்பு ISO8601 கால வடிவமைப்பில் வெளிப்படுத்தப்படுகிறது. உதாரணமாக:

  • P365D 365 நாட்களுக்கு

  • P30D 30 நாட்களுக்கு

  • 1 வாரத்திற்கு P1W

  • 12 மணிநேரத்திற்கு PT12H

  • P1DT12H 1 நாள் மற்றும் 12 மணிநேரம்

PREFERRED_URL_SCHEME: str = 'https'

Flask PREFERRED_URL_SCHEME உள்ளமைவு அமைப்பு.

இது canaille வழங்கப்படும் முகவரி திட்டத்தை அமைக்கிறது.

SECRET_KEY: str | None = None

Flask SECRET_KEY கட்டமைப்பு அமைப்பு.

உற்பத்தியில் பயன்படுத்துவதற்கு முன் நீங்கள் ஒரு மதிப்பை அமைக்க வேண்டும்.

SERVER_NAME: str | None = None

Flask SERVER_NAME கட்டமைப்பு அமைப்பு.

இது canaille வழங்கப்படும் டொமைன் பெயரை அமைக்கிறது.

SESSION_TYPE: Literal['redis', 'memcached', 'filesystem', 'sqlalchemy', 'mongodb', 'cachelib', 'dynamodb'] | None = None

Flask-Session பின்தள வகை.

ஒன்றுமில்லை (இயல்புநிலை) எனில், பிளாச்கின் இயல்புநிலை அமர்வு செயலாக்கம் பயன்படுத்தப்படும் (கிளையன்ட் கையொப்பமிடப்பட்ட குக்கீகள்). அமைக்கப்படும் போது, குறிப்பிட்ட பின்தளத்தைப் பயன்படுத்தி அமர்வுகள் சர்வர் பக்கத்தில் சேமிக்கப்படும்.

கிடைக்கும் பின்தளங்கள்:

  • redis: ரெடிசில் கடை அமர்வு (இயல்புநிலையாக உள்ளக ஓச்ட்:6379 உடன் இணைக்கவும்)

  • memcached: Memcached இல் கடை அமர்வுகள் (இயல்புநிலையாக உள்ளக ஓச்ட்:11211 உடன் இணைக்கப்படும்)

  • கோப்பு முறை: உள்ளக கோப்புகளில் அமர்வுகளை சேமிக்கவும் (இயல்புநிலையாக /tmp/flask-session ஐப் பயன்படுத்துகிறது)

  • sqlalchemy: கவிமொ தரவுத்தளத்தில் அமர்வுகளை சேமிக்கவும்

  • mongodb: MongoDB இல் அமர்வுகளை சேமிக்கவும்

  • cachelib: cachelib பின்தளத்தைப் பயன்படுத்தி அமர்வுகளை சேமிக்கவும்

  • dynamodb: DynamoDB இல் கடை அமர்வுகள்

பின்தளத்தில் குறிப்பிட்ட விவரங்களுக்கு Flask-Session ஆவணங்களை பார்க்கவும்.

TRUSTED_HOSTS: list[str] | None = None

Flask TRUSTED_HOSTS கட்டமைப்பு அமைப்பு.

இது ஓச்ட்களுக்கு நம்பகமான மதிப்புகளை அமைக்கிறது மற்றும் கோரிக்கைகளின் போது ஓச்ட்களை சரிபார்க்கிறது.

canaille.core.configuration.CoreSettings[source]

CANAILLE பெயர்வெளியில் இருந்து அமைப்புகள்.

அவை அனைத்தும் கேனாய்லின் நடத்தையைக் கட்டுப்படுத்தும் உள்ளமைவு அளவுருக்கள்.

ACL: dict[str, ACLSettings] | None [Optional]

இசைவு குழுக்களின் மேப்பிங். மேலும் விவரங்களுக்கு ACLSettings ஐப் பார்க்கவும்.

ACL பெயரை சுதந்திரமாக தேர்வு செய்யலாம். உதாரணமாக:

[CANAILLE.ACL.DEFAULT]
PERMISSIONS = ["edit_self", "use_oidc"]
READ = ["user_name", "groups"]
WRITE = ["given_name", "family_name"]

[CANAILLE.ACL.ADMIN]
WRITE = ["user_name", "groups"]

இயல்புநிலை ACL ஆனது நிர்வாகம் பயனர் பெயரைக் கொண்ட பயனர்களுக்கும், நிர்வாகம் எனப்படும் குழுவின் உறுப்பினர்களுக்கும் அனைத்து அனுமதிகளையும் வழங்குகிறது.

ADMIN_EMAIL: str | None = None

நிர்வாக மின்னஞ்சல் தொடர்பு.

சில சிறப்பு சந்தர்ப்பங்களில் (எடுத்துக்காட்டு : கடவுச்சொல் ஊழல் பற்றி கேள்வி), நிர்வாக தொடர்பு மின்னஞ்சலை வழங்குவது தேவை.

AUTHENTICATION_FACTORS: list[str] = ['password']

அங்கீகார காரணிகள்.

இந்தப் பட்டியலின் வரிசையில் உள்ள காரணிகளைக் கொண்டு பயனர்கள் அங்கீகரிக்க வேண்டும். உதாரணமாக, இது கடவுச்சொல் படிவத்தைக் காண்பிக்கும், பின்னர் ஒரு முறை கடவுக்குறியீட்டைக் கேட்கும்:

செல்லுபடியாகும் காரணிகள் கடவுச்சொல், otp, மின்னஞ்சல், sms மற்றும் ``fido2`.

AUTHENTICATION_FACTORS = ["password", "otp"]
CAPTCHA_ENABLED: bool = True

ஏற்பு மற்றும் பதிவு படிவங்களில் CAPTCHA ஐ இயக்கவும்.

CAPTCHA_FAILURE_THRESHOLD: int = 3

CAPTCHA ஐக் காண்பிக்கும் முன் தோல்வியுற்ற உள்நுழைவு முயற்சிகளின் எண்ணிக்கை.

  • 0 எனில், CAPTCHA எப்போதும் காட்டப்படும்.

  • > 0 எனில், N தோல்வியுற்ற முயற்சிகளுக்குப் பிறகு CAPTCHA தோன்றும் மற்றும் வெற்றிகரமான உள்நுழைவு வரை தொடர்ந்து இருக்கும்.

  • பதிவு படிவங்களில், CAPTCHA இயக்கப்பட்டிருக்கும் போது எப்போதும் காண்பிக்கப்படும்.

CAPTCHA_LENGTH: int = 5

CAPTCHA நீளம் (எழுத்துகளின் எண்ணிக்கை).

DATABASE: str [Optional]

பயன்படுத்த வேண்டிய தரவுத்தள பின்தளம்.

இருந்தால் இயல்புநிலை "sql", இல்லையெனில் "நினைவகம்".

EMAIL_CONFIRMATION: bool | None = None

True எனில், பயனர்கள் புதிய மின்னஞ்சலைச் சேர்க்க விரும்பும் போது மின்னஞ்சலில் அனுப்பப்பட்ட உறுதிப்படுத்தல் இணைப்பைக் சொடுக்கு செய்ய வேண்டும்.

இயல்பாக, SMTP கட்டமைக்கப்பட்டிருந்தால் இது உண்மையாகும், இல்லையெனில் இது தவறானது. வெளிப்படையாக உண்மை என அமைக்கப்பட்டு, SMTP முடக்கப்பட்டால், மின்னஞ்சல் புலம் படிக்க மட்டுமே இருக்கும்.

ENABLE_INTRUDER_LOCKOUT: bool = False

True எனில், ஒவ்வொரு தோல்வியுற்ற உள்நுழைவு முயற்சிக்கும் இடையே பயனர்கள் அதிக நேரம் காத்திருக்க வேண்டியிருக்கும்.

ENABLE_PASSWORD_COMPROMISSION_CHECK: bool = False

True எனில், பயனர்கள் புதிய ஒன்றைத் தேர்ந்தெடுக்கும்போது, HIBP போன்ற சமரசத் தரவுத்தளங்களில் கடவுச்சொற்கள் தோன்றுகிறதா என்பதை Canaille சரிபார்க்கும்.

ENABLE_PASSWORD_RECOVERY: bool = True

False எனில், பயனர்கள் மின்னஞ்சல் மூலம் கடவுச்சொல் மீட்பு இணைப்பைக் கேட்க முடியாது.

ENABLE_REGISTRATION: bool = False

True எனில், இந்த நிகழ்வில் பயனர்கள் சுதந்திரமாக ஒரு கணக்கை உருவாக்க முடியும்.

மின்னஞ்சல் சரிபார்ப்பு இருந்தால், கணக்கை உருவாக்குவதற்கு முன்பு பயனர்கள் தங்கள் மின்னஞ்சலை உறுதிப்படுத்த வேண்டும்.

FAVICON: str | None = '/static/img/canaille-c.webp'

நீங்கள் ஃபேவிகான்.

அமைக்காமல் மற்றும் LOGO அமைக்கப்பட்டால், லோகோ பயன்படுத்தப்படும்.

FIDO_ATTESTATION: Literal['none', 'indirect', 'direct'] = 'none'

FIDO2/WebAuthnக்கான சான்றளிப்பு கடத்தல் விருப்பம்.

பதிவின் போது அங்கீகரிப்பாளரின் அடையாளத்தை (உற்பத்தியாளர், மாதிரி) சரிபார்க்க சர்வர் அனுமதிக்கிறது. குறிப்பிட்ட சான்றளிக்கப்பட்ட அங்கீகரிப்பாளர்கள் மட்டுமே அனுமதிக்கப்பட வேண்டிய உயர்-பாதுகாப்பு சூழல்களில் இது பயனுள்ளதாக இருக்கும்.

  • இல்லை: சான்றொப்பம் கோரப்படவில்லை. சர்வரால் அங்கீகரிப்பு வகையை அடையாளம் காண முடியவில்லை. பெரும்பாலான தனியுரிமை-பாதுகாப்பு விருப்பம், பெரும்பாலான பயன்பாட்டு நிகழ்வுகளுக்கு பரிந்துரைக்கப்படுகிறது.

  • மறைமுக: அநாமதேய சான்றிதழ். சரியான மாதிரியை வெளிப்படுத்தாமல், அங்கீகரிப்பாளர் உற்பத்தியாளர் தகவலை வழங்கலாம்.

  • நேரடி: முழு சான்றொப்பம். அங்கீகரிப்பாளர் கையொப்பமிடப்பட்ட சான்றிதழை அதன் உற்பத்தியாளர் மற்றும் மாதிரியை அடையாளப்படுத்துகிறார். நம்பகமான அங்கீகரிப்பாளர்கள் மட்டுமே ஏற்றுக்கொள்ளப்படுவதை உறுதிசெய்ய, FIDO அலையன்ச் மேனிலை தரவு சேவைக்கு (MDS) எதிராக இது சரிபார்க்கப்படலாம்.

"நேரடியாக" இருந்தாலும், அங்கீகரிப்பாளர்கள் தனியுரிமை காரணங்களுக்காக சான்றளிப்பை வழங்க மறுக்கலாம். கூடுதலாக, சான்றளிப்புச் சான்றிதழ்களைச் சரிபார்ப்பதற்கு கூடுதல் சர்வர்-பக்கம் செயல்படுத்தல் தேவைப்படுகிறது.

FIDO_MAX_CREDENTIALS: int = 5

Maximum number of passkeys per user.

FIDO_TIMEOUT: timedelta = datetime.timedelta(seconds=60)

FIDO2/WebAuthn செயல்பாடுகளுக்கான நேரம் முடிந்தது.

FIDO_USER_VERIFICATION: Literal['required', 'preferred', 'discouraged'] = 'preferred'

FIDO2/WebAuthn க்கான பயனர் சரிபார்ப்பு தேவை.

  • தேவை: பயனர் சரிபார்ப்பு (PIN/பயோமெட்ரிக்) தேவை.

  • preferred: பயனர் சரிபார்ப்பு விரும்பப்படுகிறது ஆனால் தேவையில்லை.

  • `` ஊக்கமளிக்கவில்லை``: பயனர் சரிபார்ப்பைப் பயன்படுத்தக் கூடாது.

FORCE_HTTPS: bool = False

http கோரிக்கைகளை https க்கு குறைக்குமாறு கட்டாயப்படுத்த வேண்டுமா.

HIDE_INVALID_LOGINS: bool = True

True எனில், தவறான உள்நுழைவுடன் பயனர்கள் உள்நுழைய முயற்சிக்கும் போது, கடவுச்சொல் தவறானது என்று ஒரு செய்தி காட்டப்படும், ஆனால் உள்நுழைவு இருக்கிறதா இல்லையா என்பதைத் தெரிவிக்காது.

False எனில், ஒரு பயனர் தவறான உள்நுழைவுடன் உள்நுழைய முயற்சிக்கும் போது, உள்நுழைவு இல்லை என்பதைக் குறிக்கும் செய்தி காட்டப்படும்.

HTMX: bool = True

ஒத்திசைவற்ற கோரிக்கைகளுடன் வலைப்பக்கங்களை ஏற்றுவதை துரிதப்படுத்துகிறது.

INVITATION_EXPIRATION: int = 172800

பதிவு அழைப்பிதழ்களின் செல்லுபடியாகும் காலம், நொடிகளில்.

இயல்புநிலை 2 நாட்களுக்கு.

JAVASCRIPT: bool = True

பயனர் அனுபவத்தை மென்மையாக்க சாவாகைஉரை ஐ இயக்குகிறது.

LANGUAGE: str | None = None

மொழி குறியீடு அமைக்கப்பட்டால், அது ஒவ்வொரு பயனருக்கும் பயன்படுத்தப்படும்.

அமைக்கப்படாவிட்டால், பயனர் உலாவியின்படி மொழி யூகிக்கப்படும்.

LOGGING: str | dict | None = None

பைதான் லாக்கிங் உள்ளமைவு வடிவமைப்பைப் பயன்படுத்தி பதிவு வெளியீட்டை உள்ளமைக்கிறது:

  • None எனில், அனைத்தும் நிலையான பிழை வெளியீட்டில் உள்நுழைந்திருக்கும். பதிவு நிலை DEBUG அமைப்பு True எனில் DEBUG, இல்லையெனில் இது INFO.

  • இது dict எனில், logging.config.dictConfig():

  • இது str எனில், அது logging.config.fileConfig() க்கு அனுப்பப்படும் கோப்பு பாதையாக இருக்கும் என எதிர்பார்க்கப்படுகிறது.

உதாரணமாக:

[CANAILLE.LOGGING]
version = 1
formatters.default.format = "[%(asctime)s] - %(ip)s - %(levelname)s in %(module)s: %(message)s"
root = {level = "INFO", handlers = ["canaille"]}

[CANAILLE.LOGGING.handlers.canaille]
class = "logging.handlers.WatchedFileHandler"
filename = "/var/log/canaille.log"
formatter = "default"
LOGIN_ATTRIBUTES: list[str] | dict[str, str] = ['user_name', 'emails']

பொதுவாக user_name, emails மற்றும் :attr:`~canaille.core.models.Umbers.phone

  • இது list ஆக இருக்கும்போது, பண்புக்கூறு பெயர்கள் பொருந்த வேண்டும் என்று எதிர்பார்க்கிறது.

  • இது dict ஆக இருக்கும் போது, விசைகள் பொருந்தக்கூடிய பண்புக்கூறு பெயர்களாக இருக்கும், மேலும் மதிப்புகள் ஒரு login மாறியுடன் கிடைக்கும் Jinja சரமாகும். இது பயனர் உள்ளீட்டை மாற்றியமைக்க பயன்படுகிறது, எடுத்துக்காட்டாக ஒரு டொமைன் பெயரை நீக்கவும்.

LOGIN_ATTRIBUTES = ["user_name", "emails"]
LOGIN_ATTRIBUTES = {user_name = "{{ login | replace('@example.org', '') }}", emails = "{{ login }}"}

உங்கள் நிறுவனத்தின் லோகோ, உள்நுழைவுத் திரைகளில் உங்கள் நிறுவனத்தை அடையாளம் காண இது பயனுள்ளதாக இருக்கும்.

MAX_PASSWORD_LENGTH: int = 1000

பயனர் கடவுச்சொல் அதிகபட்ச நீளம்.

Note

கவிமொ பின்தளத்தில் 4096 எழுத்துகளின் தொழில்நுட்ப வரம்பு உள்ளது. மதிப்பு 0, இல்லை அல்லது 4096 ஐ விட அதிகமாக இருந்தால், 4096 தக்கவைக்கப்படும்.

MIN_PASSWORD_LENGTH: int = 8

பயனர் கடவுச்சொல் குறைந்தபட்ச நீளம்.

0 அல்லது இல்லை எனில், கடவுச்சொல் குறைந்தபட்ச நீளத்தைக் கொண்டிருக்காது.

NAME: str = 'Canaille'

உங்கள் நிறுவனத்தின் பெயர்.

காட்சி நோக்கத்திற்காக பயன்படுத்தப்படுகிறது.

OTP_LIFETIME: timedelta = datetime.timedelta(seconds=600)

ஒரு முறை கடவுச்சொல் செல்லுபடியாகும் காலம்.

மின்னஞ்சல் மற்றும் SMS ஒரு முறை கடவுச்சொற்கள் செல்லுபடியாகும் காலம். மதிப்பு ISO8601 கால வடிவமைப்பில் வெளிப்படுத்தப்படுகிறது.

எடுத்துக்காட்டுகள்:

  • 10 நிமிடங்களுக்கு PT10M

  • 5 நிமிடங்களுக்கு PT5M

  • 30 வினாடிகளுக்கு PT30S

OTP_METHOD: OTPMethod = OTPMethod.TOTP

The OTP method to use if otp is set in AUTHENTICATION_FACTORS. If set to TOTP, the application will use time-based one-time passcodes, If set to HOTP, the application will use HMAC-based one-time passcodes.

PASSWORD_COMPROMISSION_CHECK_API_URL: str = 'https://api.pwnedpasswords.com/range/'

சமரசச் சரிபார்ப்புகளுக்காக நான் பநிஇ முகவரி ஐப் பெற்றுள்ளேனா?

PASSWORD_LIFETIME: str | None = None

கடவுச்சொல் செல்லுபடியாகும் காலம்.

அமைக்கப்பட்டால், இந்த தாமதத்திற்குப் பிறகு பயனர் கடவுச்சொற்கள் காலாவதியாகிவிடும். கடவுச்சொல்லின் வாழ்நாள் முடிந்ததும் பயனர்கள் தங்கள் கடவுச்சொல்லை மாற்ற வேண்டிய கட்டாயத்தில் உள்ளனர். கால மதிப்பு ISO8601 வடிவத்தில் இல் வெளிப்படுத்தப்படுகிறது. எடுத்துக்காட்டாக, 60 நாட்கள் நேரந்தவறுகை "P60D" என்று எழுதப்பட்டுள்ளது.

SENTRY_DSN: str | None = None

விதிவிலக்குகளைச் சேகரிக்க ஒரு சென்ட்ரி DSN.

சோதனை மற்றும் விளைவாக்கம் சூழல்களில் ஏற்படும் பிழைகளைக் கண்காணிப்பதற்கு இது பயனுள்ளதாக இருக்கும்.

SMPP: SMPPSettings | None = None

SMPP கட்டமைப்பு தொடர்பான அமைப்புகள்.

அமைக்கப்படவில்லை என்றால், sms ஒருமுறை கடவுக்குறியீடுகள் போன்ற sms தொடர்பான நற்பொருத்தங்கள் இயக்கப்படாது.

SMTP: SMTPSettings | None [Optional]

SMTP மற்றும் அஞ்சல் கட்டமைப்பு தொடர்பான அமைப்புகள்.

அமைக்கப்படாவிட்டால், கடவுச்சொல் மீட்பு போன்ற அஞ்சல் தொடர்பான நற்பொருத்தங்கள் இயக்கப்படாது.

THEME: Annotated[Path, PathType(path_type=dir)] | None = None

ஒரு கருப்பொருளுக்கான பாதை.

மேலும் விவரங்களுக்கு theming ஆவணப்படுத்துதல் ஐப் பார்க்கவும்.

TIMEZONE: str | None = None

பயனர்களுக்கு தேதி நேரங்கள் காட்டப்படும் நேர மண்டலம் (எ.கா. CEST).

அமைக்கப்படாவிட்டால், சேவையக நேர மண்டலம் பயன்படுத்தப்படும்.

TOTP_LIFETIME: timedelta = datetime.timedelta(seconds=30)

TOTP குறியீடுகளுக்கான செல்லுபடியாகும் காலம்.

ISO8601 கால வடிவத்தில் வழங்கப்பட வேண்டும் (எ.கா., "PT30S" 30 வினாடிகள், "PT1M" 1 நிமிடம்).

canaille.core.configuration.SMTPSettings[source]

SMTP உள்ளமைவு. CANAILLE.SMTP பெயர்வெளியில் உள்ளது.

அமைக்கப்படாவிட்டால், அஞ்சல் சரிபார்ப்பு அல்லது கடவுச்சொல் மீட்பு மின்னஞ்சல்கள் போன்ற அஞ்சல் தொடர்பான நற்பொருத்தங்கள் முடக்கப்படும்.

இயல்பாக, ஏற்பு இல்லாமல் உள்ளக ஓச்டிலிருந்து அஞ்சல்களை அனுப்ப Canaille முயற்சிக்கும்.

FROM_ADDR: str | None = None

Canaille அஞ்சல்களை அனுப்புபவர்.

சில அஞ்சல் வழங்குநருக்கு சரியான அனுப்புநர் முகவரி தேவைப்படலாம்.

HOST: str | None = 'localhost'

SMTP புரவலன்.

LOGIN: str | None = None

SMTP உள்நுழைவு.

PASSWORD: str | None = None

SMTP கடவுச்சொல்.

PORT: int | None = 25

SMTP துறைமுகம்.

SSL: bool | None = False

SMTP சேவையகத்துடன் இணைக்க SSL ஐப் பயன்படுத்த வேண்டுமா.

TLS: bool | None = False

SMTP சேவையகத்துடன் இணைக்க TLS ஐப் பயன்படுத்த வேண்டுமா.

canaille.core.configuration.SMPPSettings[source]

SMPP கட்டமைப்பு. CANAILLE.SMPP பெயர்வெளியில் உள்ளது.

அமைக்கவில்லை என்றால், sms ஒருமுறை கடவுக்குறியீடுகள் போன்ற sms தொடர்பான நற்பொருத்தங்கள் முடக்கப்படும்.

HOST: str | None = 'localhost'

SMPP ஓச்ட்கள்.

LOGIN: str | None = None

SMPP உள்நுழைவு.

PASSWORD: str | None = None

SMPP கடவுச்சொல்.

PORT: int | None = 2775

SMPP துறைமுகம். TLS மூலம் SMPPக்கு 8775 ஐப் பயன்படுத்தவும் (பரிந்துரைக்கப்பட்டது).

canaille.core.configuration.ACLSettings[source]

கட்டுப்பாட்டு பட்டியல் அமைப்புகளை அணுகவும். CANAILLE.ACL பெயர்வெளியில் உள்ளது.

canaille இல் பயனர்கள் என்ன செய்ய முடியும் என்பதை வரையறுக்கும் அணுகல் கட்டுப்பாடுகளை நீங்கள் வரையறுக்கலாம். ஒரு அணுகல் கட்டுப்பாடு பயனர்களுடன் பொருந்துவதற்கு:attr:FILTER இல் உள்ளது, PERMISSIONS பொருந்திய பயனர்களின் பட்டியல் செயல்படும், மேலும் பயனர்கள் READ மற்றும் WRITE ஆகியவற்றைக் களமிறக்க முடியும். பல வடிப்பான்களைப் பொருத்தும் பயனர்கள் அனுமதிகளைக் குவிப்பார்கள்.

FILTER: dict[str, str] | list[dict[str, str]] | None = None

FILTER ஆக இருக்கலாம்:

  • இல்லை, இந்த அணுகல் கட்டுப்பாட்டுடன் அனைத்து பயனர்களும் பொருந்துவார்கள்

  • விசைகள் பயனர் பண்புக்கூறுகளின் பெயர் மற்றும் அந்த பயனர் பண்புக்கூறு மதிப்புகள் ஆகியவை மேப்பிங். அணுகல் கட்டுப்பாட்டின் ஒரு பகுதியாக பயனர் இருக்க அனைத்து மதிப்புகளும் பொருந்த வேண்டும்.

  • அந்த வரைபடங்களின் பட்டியல். ஒரு பயனர் மதிப்புகள் குறைந்தது ஒரு மேப்பிங்கில் பொருந்தினால், பயனர் அணுகல் கட்டுப்பாட்டின் ஒரு பகுதியாக இருப்பார்

இதோ சில உதாரணங்கள்:

FILTER = {user_name = 'admin'}
FILTER = [
    {groups = 'admin},
    {groups = 'moderators'},
]
PERMISSIONS: list[Permission] = [Permission.EDIT_SELF, Permission.USE_OIDC, Permission.MANAGE_OWN_GROUPS]

அணுகல் கட்டுப்பாட்டில் உள்ள Permission பயனர்களின் பட்டியலை நிர்வகிக்க முடியும்.

இயல்பாக, பயனர்கள் தங்கள் சொந்த சுயவிவரத்தைத் திருத்தலாம், OpenID இணைப்பைப் பயன்படுத்தலாம் மற்றும் தங்கள் சொந்த குழுக்களை நிர்வகிக்கலாம்.

உதாரணமாக:

PERMISSIONS = [
    "manage_users",
    "manage_all_groups",
    "manage_oidc",
    "delete_account",
    "impersonate_users",
]
READ: list[str] = ['user_name', 'groups', 'lock_date']

ACL இல் உள்ள பயனர்கள் படிக்கக்கூடிய User பண்புக்கூறுகளின் பட்டியல்.

WRITE: list[str] = ['photo', 'given_name', 'family_name', 'display_name', 'password', 'phone_numbers', 'emails', 'profile_url', 'formatted_address', 'street', 'postal_code', 'locality', 'region', 'preferred_language', 'employee_number', 'department', 'title', 'organization']

ACL இல் உள்ள பயனர்கள் திருத்தக்கூடிய User பண்புக்கூறுகளின் பட்டியல்.

class canaille.core.configuration.Permission(*values)[source]

பயனர்களுக்கு ஒதுக்கக்கூடிய அனுமதிகள்.

அனுமதிகள் ACLSettings இல் பயன்படுத்தப்பட வேண்டும்.

DELETE_ACCOUNT = 'delete_account'

பயனர்கள் தங்கள் கணக்கை நீக்க அனுமதிக்கிறது.

MANAGE_USERS உடன் பயன்படுத்தினால், பயனர்கள் எந்தக் கணக்கையும் நீக்கலாம்.

EDIT_SELF = 'edit_self'

பயனர்கள் தங்கள் சொந்த சுயவிவரத்தைத் திருத்த அனுமதிக்கிறது.

IMPERSONATE_USERS = 'impersonate_users'

மற்றொரு பயனரின் அடையாளத்தை எடுக்க பயனர்களை அனுமதிக்கிறது.

MANAGE_ALL_GROUPS = 'manage_all_groups'

அனைத்து குழுக்களின் பதிப்பு மற்றும் உருவாக்கத்தை அனுமதிக்கிறது (நிர்வாகி அனுமதி).

MANAGE_OIDC = 'manage_oidc'

OpenID இணை கிளையன்ட் நிர்வாகத்தை அனுமதிக்கவும்.

MANAGE_OWN_GROUPS = 'manage_own_groups'

பயனர்கள் தங்கள் சொந்த குழுக்களை உருவாக்க மற்றும் அவர்களுக்கு சொந்தமான குழுக்களை நிர்வகிக்க அனுமதிக்கிறது.

MANAGE_USERS = 'manage_users'

பிற பயனர் நிர்வாகத்தை அனுமதிக்கிறது.

USE_OIDC = 'use_oidc'

OpenID இணைப்பு அங்கீகாரத்தை அனுமதிக்கிறது.

canaille.oidc.configuration.OIDCSettings[source]

OpenID இணைப்பு அமைப்புகள்.

CANAILLE_OIDC பெயர்வெளியில் உள்ளது.

ACTIVE_JWKS: list[dict[str, str] | str] | None = None

செயலில் உள்ள சாதொபொகு இணைய விசைகள் தொகுப்பு.

JWT களில் கையொப்பமிடவும் சரிபார்க்கவும் அந்த விசைகள் பயன்படுத்தப்படுகின்றன. விசைகள் JWK டிக்ட் அல்லது ரா கீகள் வடிவத்தில் இருக்கலாம்.

DYNAMIC_CLIENT_REGISTRATION_OPEN: bool = False

RFC7591 டைனமிகல் கிளையன்ட் பதிவுக்கு கிள்ளாக்கு தேவையா.

If True, no token is needed to register a client. If False, dynamical client registration requires a valid JWT token generated by the canaille jwt registration command.

ENABLE_OIDC: bool = True

ஒற்றை உள்நுழைவு நற்பொருத்தம் மற்றும் OpenID இணை பநிஇ இயக்கப்பட்டுள்ளதா.

INACTIVE_JWKS: list[dict[str, str] | str] | None = None

செயலற்ற சாதொபொகு இணைய விசைகள் தொகுப்பு.

அந்த விசைகள் JWTகளை சரிபார்க்க மட்டுமே பயன்படுத்தப்படும். விசைகள் JWK டிக்ட் அல்லது ரா கீகள் வடிவத்தில் இருக்கலாம்.

REQUIRE_NONCE: bool = True

அங்கீகரிப்பு ஓட்டங்களின் போது, பரிமாற்றத்தை கட்டாயப்படுத்தவும்.

இது பாதுகாப்பைச் சேர்க்கிறது ஆனால் எல்லா வாடிக்கையாளர்களாலும் ஆதரிக்கப்படாமல் போகலாம்.

TRUSTED_DOMAINS: Annotated[list[str], NoDecode, BeforeValidator(func=parse_comma_separated, json_schema_input_type=PydanticUndefined)] = ['.localhost', '127.0.0.1']

தானியங்கி வாடிக்கையாளர் நம்பிக்கைக்கான நம்பகமான டொமைன்கள்.

இந்த டொமைன்களுடன் பொருந்தக்கூடிய client_uri உள்ள வாடிக்கையாளர்கள் தானாக நம்பகமானவர்களாகக் கருதப்படுவார்கள் மேலும் பயனர்களுக்கு ஒப்புதல் பக்கத்தைக் காட்ட மாட்டார்கள். வளர்ச்சி சூழல்களுக்கு இது மிகவும் பயனுள்ளதாக இருக்கும்.

இந்த வடிவங்களை ஆதரிக்கிறது:

  • சரியான பொருத்தம்: example.com பொருந்துகிறது example.com

  • வைல்டு அட்டை பொருத்தம்: .example.com example.com மற்றும் அதன் அனைத்து துணை டொமைன்களுடன் பொருந்தும்

எடுத்துக்காட்டுகள்:

  • [".localhost", "127.0.0.1"] (மேம்பாட்டிற்கான இயல்புநிலை)

  • [".dev.company.com", "staging.company.com"]

  • [".லோக்கல்", "உள்ளக ஓச்ட்"]

கட்டுப்பாடுகள்:
  • __module__ = pydantic_settings.sources.types

  • __முதல்லைனோ__ = 22

  • __doc__ = புல மதிப்பின் குறியாக்கத்தைத் தடுப்பதற்கான சிறுகுறிப்பு.

  • __static_attributes__ = ()

  • __dict__ = {'__module__': 'pydantic_settings.sources.types', '__firstlineno__': 22, '__doc__': 'ஒரு புல மதிப்பை டிகோடிங்கைத் தடுப்பதற்கான சிறுகுறிப்பு.', '__static_attributes__': (), '__dicttributes__': (), '__ஆணைப்பொருள்__': <adtribute' '__weakref__': <'NoDecode' பொருள்களின் '__weakref__' பண்பு>}

  • __weakref__ = <'NoDecode' பொருட்களின் பண்பு '__weakref__'>

  • func = <function parse_comma_separated at 0x7ef5dd514220>

  • json_schema_input_type = PydanticUndefined

USERINFO_MAPPING: UserInfoMappingSettings | None = UserInfoMappingSettings(SUB='{{ user.user_name }}', NAME='{% if user.formatted_name %}{{ user.formatted_name }}{% endif %}', PHONE_NUMBER='{% if user.phone_numbers %}{{ user.phone_numbers[0] }}{% endif %}', EMAIL='{% if user.preferred_email %}{{ user.preferred_email }}{% endif %}', GIVEN_NAME='{% if user.given_name %}{{ user.given_name }}{% endif %}', FAMILY_NAME='{% if user.family_name %}{{ user.family_name }}{% endif %}', PREFERRED_USERNAME='{% if user.display_name %}{{ user.display_name }}{% endif %}', LOCALE='{% if user.preferred_language %}{{ user.preferred_language }}{% endif %}', ADDRESS='{% if user.formatted_address %}{{ user.formatted_address }}{% endif %}', PICTURE='{% if user.photo %}{{ user | photo_url(external=True) }}{% endif %}', WEBSITE='{% if user.profile_url %}{{ user.profile_url }}{% endif %}', UPDATED_AT='{% if user.last_modified %}{{ user.last_modified.timestamp() }}{% endif %}')

"OIDC UserInfo பொருளை உருவாக்க பண்புக்கூறு மேப்பிங் பயன்படுத்தப்படுகிறது.

id_token மற்றும் userinfo இறுதிப்புள்ளியை நிரப்ப UserInfo பயன்படுகிறது.

canaille.oidc.configuration.UserInfoMappingSettings[source]

பயனர் மாதிரி மற்றும் JWT புலங்களுக்கு இடையில் மேப்பிங்.

புலங்கள் சின்சா மூலம் மதிப்பீடு செய்யப்படுகின்றன. பயனர் var உள்ளது.

ADDRESS: str | None = '{% if user.formatted_address %}{{ user.formatted_address }}{% endif %}'
EMAIL: str | None = '{% if user.preferred_email %}{{ user.preferred_email }}{% endif %}'
FAMILY_NAME: str | None = '{% if user.family_name %}{{ user.family_name }}{% endif %}'
GIVEN_NAME: str | None = '{% if user.given_name %}{{ user.given_name }}{% endif %}'
LOCALE: str | None = '{% if user.preferred_language %}{{ user.preferred_language }}{% endif %}'
NAME: str | None = '{% if user.formatted_name %}{{ user.formatted_name }}{% endif %}'
PHONE_NUMBER: str | None = '{% if user.phone_numbers %}{{ user.phone_numbers[0] }}{% endif %}'
PICTURE: str | None = '{% if user.photo %}{{ user | photo_url(external=True) }}{% endif %}'
PREFERRED_USERNAME: str | None = '{% if user.display_name %}{{ user.display_name }}{% endif %}'
SUB: str | None = '{{ user.user_name }}'
UPDATED_AT: str | None = '{% if user.last_modified %}{{ user.last_modified.timestamp() }}{% endif %}'
WEBSITE: str | None = '{% if user.profile_url %}{{ user.profile_url }}{% endif %}'
canaille.scim.configuration.SCIMSettings[source]

SCIM அமைப்புகள்.

ENABLE_CLIENT: bool = False

SCIM நெறிமுறையைப் பயன்படுத்தி வாடிக்கையாளர்களுக்கு User மற்றும் Group ஆகியவற்றின் நிலை ஒளிபரப்பப்படுமா.

இயக்கப்பட்டால், கிளையன்ட் அல்லது குழுவின் உருவாக்கம், பதிப்பு அல்லது நீக்கம் ஆகியவை SCIM நெறிமுறையைச் செயல்படுத்தும் கிளையண்டுகளில் பிரதிபலிக்கப்படும்.

ENABLE_SERVER: bool = True

SCIM சேவையக பநிஇ இயக்கப்பட்டுள்ளதா.

இயக்கப்பட்டால், Canaille இல் இணைக்கப்பட்ட சேவைகள் பநிஇ ஐப் பயன்படுத்தி பயனர்களையும் குழுக்களையும் புதுப்பிக்க முடியும்.

canaille.backends.sql.configuration.SQLSettings[source]

கவிமொ பின்தளத்துடன் தொடர்புடைய அமைப்புகள்.

CANAILLE_SQL பெயர்வெளியில் உள்ளது.

AUTO_MIGRATE: bool = True

தரவுத்தள இடம்பெயர்வுகளை தானாகப் பயன்படுத்த வேண்டுமா.

True எனில், Canaille இணையப் பயன்பாடு தொடங்கப்படும்போது தரவுத்தள இடம்பெயர்வு தானாகவே பயன்படுத்தப்படும். False எனில், இடம்பெயர்வுகளை canaille db upgrade உடன் கைமுறையாகப் பயன்படுத்த வேண்டும்.

Note

CLI ஐ இயக்கும் போது, இடம்பெயர்வுகள் ஒருபோதும் பயன்படுத்தப்படாது.

DATABASE_URI: str = 'sqlite:///canaille.sqlite'

கவிமொ சர்வர் URI. உதாரணமாக:

DATABASE_URI = "postgresql://user:password@localhost/database_name"
PASSWORD_HASH_PARAMS: dict [Optional]

கடவுச்சொல் ஆசிங்கிற்கான கூடுதல் அளவுருக்கள்.

இந்த அளவுருக்கள் நேரடியாக passlib இன் :class:`~passlib.context.CryptContext`க்கு அனுப்பப்படும். சுற்றுகள்/மறு செய்கைகள் போன்ற ஆச் அளவுருக்களைத் தனிப்பயனாக்க பயனுள்ளதாக இருக்கும்.

PBKDF2 ஐ மாற்றுவதற்கான எடுத்துக்காட்டு:

[CANAILLE_SQL]
PASSWORD_HASH_PARAMS = { "pbkdf2_sha512__rounds" = 100000 }
PASSWORD_SCHEMES: str = 'pbkdf2_sha512'

கடவுச்சொல் ஏசிங் திட்டம்.

கவிமொ தரவுத்தளத்தில் கடவுச்சொல் ஏசிங் திட்டத்தை வரையறுக்கிறது. கிடைக்கக்கூடிய திட்டங்களின் முழுமையான பட்டியலுக்கு passlib.hash ஆவணத்தைப் பார்க்கவும்.

எடுத்துக்காட்டுகள்: "mssql2000", "ldap_salted_sha1", "pbkdf2_sha512", "argon2", "scrypt"

POOL_MAX_OVERFLOW: int = 10

The number of connections to allow in overflow beyond POOL_SIZE.

When all persistent connections are in use, additional connections will be created up to this limit. Set to -1 to indicate no overflow limit. See the max_overflow parameter of sqlalchemy.create_engine().

POOL_PRE_PING: bool = False

Whether to test connections for liveness upon each checkout.

When enabled, a SELECT 1 is emitted before each connection use to detect stale connections (e.g. after a database restart). The overhead is negligible compared to the cost of failed requests. See the pool_pre_ping parameter of sqlalchemy.create_engine().

POOL_RECYCLE: int = -1

Number of seconds after which a connection is automatically recycled.

Useful to prevent the database server from closing idle connections. For example, MySQL/MariaDB closes idle connections after wait_timeout (default 8 hours). Set this to a value below the server's timeout (e.g. 3600 for one hour). -1 disables recycling. See the pool_recycle parameter of sqlalchemy.create_engine().

POOL_SIZE: int = 5

The number of connections to keep persistently in the pool.

Set to 0 to indicate no size limit (not recommended in production). See the pool_size parameter of sqlalchemy.create_engine().

canaille.backends.ldap.configuration.LDAPSettings[source]

LDAP பின்தளத்துடன் தொடர்புடைய அமைப்புகள்.

CANAILLE_LDAP பெயர்வெளியில் உள்ளது.

BIND_DN: str = 'cn=admin,dc=example,dc=org'

LDAP பிணைப்பு DN.

BIND_PW: str = 'admin'

LDAP பைண்ட் கடவுச்சொல்.

GROUP_BASE: str [Required]

LDAP முனையின் கீழ் குழுக்கள் தேடப்பட்டு சேமிக்கப்படும்.

உதாரணமாக "ou=groups,dc=example,dc=org".

GROUP_CLASS: str = 'groupOfNames'

புதிய குழுக்களை உருவாக்க பயன்படும் பொருள் வகுப்பு.

GROUP_NAME_ATTRIBUTE: str = 'cn'

ஒரு குழுவை அடையாளம் காண பயன்படுத்த வேண்டிய பண்பு.

GROUP_RDN: str = 'cn'

குழு DN இல் உள்ள ஒரு பொருளை அடையாளம் காணும் பண்பு.

POOL_MAX_LIFETIME: int = 600

Maximum lifetime of a connection in seconds.

Connections older than this are automatically closed and replaced. Set to 0 to disable lifetime-based recycling. See the max_lifetime parameter of ldappool.ConnectionManager.

POOL_RETRY_DELAY: float = 0.1

Delay in seconds between connection retry attempts.

See the retry_delay parameter of ldappool.ConnectionManager.

POOL_RETRY_MAX: int = 3

Number of retry attempts when a connection fails.

See the retry_max parameter of ldappool.ConnectionManager.

POOL_SIZE: int = 10

The number of connections to keep in the pool.

See the size parameter of ldappool.ConnectionManager.

ROOT_DN: str = 'dc=example,dc=org'

LDAP ரூட் DN.

TIMEOUT: float = -1

LDAP இணைப்பு நேரம் முடிந்தது.

URI: str = 'ldap://localhost'

LDAP சர்வர் URI.

USER_BASE: str [Required]

LDAP முனையின் கீழ் பயனர்கள் தேடப்பட்டு சேமிக்கப்படும்.

உதாரணமாக ou=users,dc=example,dc=org.

USER_CLASS: list[str] = ['inetOrgPerson']

புதிய பயனர்களை உருவாக்குவதற்குப் பயன்படுத்த வேண்டிய பொருள் வகுப்பு.

USER_RDN: str = 'uid'

பயனர் DN இல் உள்ள ஒரு பொருளை அடையாளம் காணும் பண்பு.

canaille.hypercorn.configuration.HypercornSettings[source]

சூழல் மாறிகள் வழியாக ஐப்பர்கார்ன் சர்வர் உள்ளமைவு.

ACCESSLOG: str | None = None

The target க்கு access log outputs.

ACCESS_LOG_FORMAT: str | None = None

The access log format.

ALPN_PROTOCOLS: Annotated[list[str], NoDecode, BeforeValidator(func=parse_comma_separated, json_schema_input_type=PydanticUndefined)] = []

The ALPN protocols பெறுநர் advertise.

கட்டுப்பாடுகள்:
  • __module__ = pydantic_settings.sources.types

  • __முதல்லைனோ__ = 22

  • __doc__ = புல மதிப்பின் குறியாக்கத்தைத் தடுப்பதற்கான சிறுகுறிப்பு.

  • __static_attributes__ = ()

  • __dict__ = {'__module__': 'pydantic_settings.sources.types', '__firstlineno__': 22, '__doc__': 'ஒரு புல மதிப்பை டிகோடிங்கைத் தடுப்பதற்கான சிறுகுறிப்பு.', '__static_attributes__': (), '__dicttributes__': (), '__ஆணைப்பொருள்__': <adtribute' '__weakref__': <'NoDecode' பொருள்களின் '__weakref__' பண்பு>}

  • __weakref__ = <'NoDecode' பொருட்களின் பண்பு '__weakref__'>

  • func = <function parse_comma_separated at 0x7ef5dd514220>

  • json_schema_input_type = PydanticUndefined

ALT_SVC_HEADERS: Annotated[list[str], NoDecode, BeforeValidator(func=parse_comma_separated, json_schema_input_type=PydanticUndefined)] = []

The alt-svc தலைப்பி values பெறுநர் advertise.

கட்டுப்பாடுகள்:
  • __module__ = pydantic_settings.sources.types

  • __முதல்லைனோ__ = 22

  • __doc__ = புல மதிப்பின் குறியாக்கத்தைத் தடுப்பதற்கான சிறுகுறிப்பு.

  • __static_attributes__ = ()

  • __dict__ = {'__module__': 'pydantic_settings.sources.types', '__firstlineno__': 22, '__doc__': 'ஒரு புல மதிப்பை டிகோடிங்கைத் தடுப்பதற்கான சிறுகுறிப்பு.', '__static_attributes__': (), '__dicttributes__': (), '__ஆணைப்பொருள்__': <adtribute' '__weakref__': <'NoDecode' பொருள்களின் '__weakref__' பண்பு>}

  • __weakref__ = <'NoDecode' பொருட்களின் பண்பு '__weakref__'>

  • func = <function parse_comma_separated at 0x7ef5dd514220>

  • json_schema_input_type = PydanticUndefined

BACKLOG: int | None = None

The பெருமம் எண் of pending connections.

BIND: Annotated[list[str], NoDecode, BeforeValidator(func=parse_comma_separated, json_schema_input_type=PydanticUndefined)] = []

The TCP host/address பெறுநர் bind to.

கட்டுப்பாடுகள்:
  • __module__ = pydantic_settings.sources.types

  • __முதல்லைனோ__ = 22

  • __doc__ = புல மதிப்பின் குறியாக்கத்தைத் தடுப்பதற்கான சிறுகுறிப்பு.

  • __static_attributes__ = ()

  • __dict__ = {'__module__': 'pydantic_settings.sources.types', '__firstlineno__': 22, '__doc__': 'ஒரு புல மதிப்பை டிகோடிங்கைத் தடுப்பதற்கான சிறுகுறிப்பு.', '__static_attributes__': (), '__dicttributes__': (), '__ஆணைப்பொருள்__': <adtribute' '__weakref__': <'NoDecode' பொருள்களின் '__weakref__' பண்பு>}

  • __weakref__ = <'NoDecode' பொருட்களின் பண்பு '__weakref__'>

  • func = <function parse_comma_separated at 0x7ef5dd514220>

  • json_schema_input_type = PydanticUndefined

CA_CERTS: str | None = None

பாதை பெறுநர் the SSL CA certificate file.

CERTFILE: str | None = None

பாதை பெறுநர் the SSL certificate file.

CIPHERS: str | None = None

The available ciphers க்கு SSL connections.

DEBUG: bool | None = None

Enable debug mode.

DOGSTATSD_TAGS: str | None = None

Comma separated பட்டியல் of குறிச்சொற்கள் பெறுநர் be applied பெறுநர் அனைத்தும் StatsD metrics.

ERRORLOG: str | None = None

The target க்கு பிழை log outputs.

GRACEFUL_TIMEOUT: float | None = None

Time பெறுநர் wait க்கு workers பெறுநர் finish மின்னோட்ட்ம், ஓட்டம் requests during graceful shutdown.

GROUP: int | None = None

The குழு அடையாளம் பெறுநர் ஆளி, நிலைமாறி to.

H11_MAX_INCOMPLETE_SIZE: int | None = None

The பெருமம் அளவு of the incomplete request/response body.

H11_PASS_RAW_HEADERS: bool | None = None

கணவாய் raw தலைப்பிகளுக்கு பெறுநர் the application.

H2_MAX_CONCURRENT_STREAMS: int | None = None

The பெருமம் எண் of concurrent streams per HTTP/2 connection.

H2_MAX_HEADER_LIST_SIZE: int | None = None

The பெருமம் அளவு of the தலைப்பி list.

H2_MAX_INBOUND_FRAME_SIZE: int | None = None

The பெருமம் அளவு of an inbound HTTP/2 frame.

INCLUDE_DATE_HEADER: bool | None = None

Include a திகதி தலைப்பி in the response.

INCLUDE_SERVER_HEADER: bool | None = None

Include a சேவையகம் தலைப்பி in the response.

INSECURE_BIND: Annotated[list[str], NoDecode, BeforeValidator(func=parse_comma_separated, json_schema_input_type=PydanticUndefined)] = []

The TCP host/address பெறுநர் bind பெறுநர் க்கு insecure connections.

கட்டுப்பாடுகள்:
  • __module__ = pydantic_settings.sources.types

  • __முதல்லைனோ__ = 22

  • __doc__ = புல மதிப்பின் குறியாக்கத்தைத் தடுப்பதற்கான சிறுகுறிப்பு.

  • __static_attributes__ = ()

  • __dict__ = {'__module__': 'pydantic_settings.sources.types', '__firstlineno__': 22, '__doc__': 'ஒரு புல மதிப்பை டிகோடிங்கைத் தடுப்பதற்கான சிறுகுறிப்பு.', '__static_attributes__': (), '__dicttributes__': (), '__ஆணைப்பொருள்__': <adtribute' '__weakref__': <'NoDecode' பொருள்களின் '__weakref__' பண்பு>}

  • __weakref__ = <'NoDecode' பொருட்களின் பண்பு '__weakref__'>

  • func = <function parse_comma_separated at 0x7ef5dd514220>

  • json_schema_input_type = PydanticUndefined

KEEP_ALIVE_MAX_REQUESTS: int | None = None

The பெருமம் எண் of requests per keep-alive connection.

KEEP_ALIVE_TIMEOUT: float | None = None

நொடிகள் பெறுநர் wait before closing keep-alive connections.

KEYFILE: str | None = None

பாதை பெறுநர் the SSL key file.

KEYFILE_PASSWORD: str | None = None

The password க்கு the SSL key file.

LOGCONFIG: str | None = None

The log கட்டமைப்பு கோப்பு path.

LOGCONFIG_DICT: str | None = None

The log கட்டமைப்பு dictionary.

LOGLEVEL: str | None = None

The (error) log level.

MAX_APP_QUEUE_SIZE: int | None = None

The பெருமம் அளவு of the application task queue.

MAX_REQUESTS: int | None = None

The பெருமம் எண் of requests a worker can கைப்பிடி before restarting.

MAX_REQUESTS_JITTER: int | None = None

The பெருமம் jitter பெறுநர் கூட்டு பெறுநர் the max_requests setting.

PID_PATH: str | None = None

பாதை பெறுநர் write the process id.

PROXY_MODE: str | None = None

Proxy தலைப்பிகளுக்கு handling mode: எதுவுமில்லை (no proxy), legacy (X-Forwarded-*), or modern (RFC 7239 Forwarded).

PROXY_TRUSTED_HOPS: int = 1

எண் of trusted proxy hops when PROXY_MODE is set.

QUIC_BIND: Annotated[list[str], NoDecode, BeforeValidator(func=parse_comma_separated, json_schema_input_type=PydanticUndefined)] = []

The UDP மாட்டி பெறுநர் bind க்கு QUIC.

கட்டுப்பாடுகள்:
  • __module__ = pydantic_settings.sources.types

  • __முதல்லைனோ__ = 22

  • __doc__ = புல மதிப்பின் குறியாக்கத்தைத் தடுப்பதற்கான சிறுகுறிப்பு.

  • __static_attributes__ = ()

  • __dict__ = {'__module__': 'pydantic_settings.sources.types', '__firstlineno__': 22, '__doc__': 'ஒரு புல மதிப்பை டிகோடிங்கைத் தடுப்பதற்கான சிறுகுறிப்பு.', '__static_attributes__': (), '__dicttributes__': (), '__ஆணைப்பொருள்__': <adtribute' '__weakref__': <'NoDecode' பொருள்களின் '__weakref__' பண்பு>}

  • __weakref__ = <'NoDecode' பொருட்களின் பண்பு '__weakref__'>

  • func = <function parse_comma_separated at 0x7ef5dd514220>

  • json_schema_input_type = PydanticUndefined

READ_TIMEOUT: int | None = None

The timeout க்கு படித்தல் இருந்து connections.

ROOT_PATH: str | None = None

The ASGI root_path variable.

SERVER_NAMES: Annotated[list[str], NoDecode, BeforeValidator(func=parse_comma_separated, json_schema_input_type=PydanticUndefined)] = []

A comma separated பட்டியல் of சேவையகம் names.

கட்டுப்பாடுகள்:
  • __module__ = pydantic_settings.sources.types

  • __முதல்லைனோ__ = 22

  • __doc__ = புல மதிப்பின் குறியாக்கத்தைத் தடுப்பதற்கான சிறுகுறிப்பு.

  • __static_attributes__ = ()

  • __dict__ = {'__module__': 'pydantic_settings.sources.types', '__firstlineno__': 22, '__doc__': 'ஒரு புல மதிப்பை டிகோடிங்கைத் தடுப்பதற்கான சிறுகுறிப்பு.', '__static_attributes__': (), '__dicttributes__': (), '__ஆணைப்பொருள்__': <adtribute' '__weakref__': <'NoDecode' பொருள்களின் '__weakref__' பண்பு>}

  • __weakref__ = <'NoDecode' பொருட்களின் பண்பு '__weakref__'>

  • func = <function parse_comma_separated at 0x7ef5dd514220>

  • json_schema_input_type = PydanticUndefined

SHUTDOWN_TIMEOUT: float | None = None

Time பெறுநர் wait க்கு workers பெறுநர் shutdown during graceful shutdown.

SSL_HANDSHAKE_TIMEOUT: float | None = None

The SSL handshake timeout.

STARTUP_TIMEOUT: float | None = None

Time பெறுநர் wait க்கு workers பெறுநர் தொடங்கு during startup.

STATSD_HOST: str | None = None

The host:port of the statsd server.

STATSD_PREFIX: str | None = None

Prefix க்கு statsd messages.

UMASK: int | None = None

The umask பெறுநர் கணம் க்கு the process.

USER: int | None = None

The பயனர் அடையாளம் பெறுநர் ஆளி, நிலைமாறி to.

USE_RELOADER: bool | None = None

Enable automatic reloading on குறியீடு changes.

VERIFY_FLAGS: str | None = None

The SSL verify flags.

VERIFY_MODE: str | None = None

The SSL verify mode.

WEBSOCKET_MAX_MESSAGE_SIZE: int | None = None

The பெருமம் அளவு of a WebSocket message.

WEBSOCKET_PING_INTERVAL: float | None = None

If கணம் the time in நொடிகள் between pings.

WORKERS: int | None = None

The எண் of worker processes.

WORKER_CLASS: str | None = None

The வகை of worker பெறுநர் use.

WSGI_MAX_BODY_SIZE: int | None = None

The பெருமம் அளவு of WSGI request body.

எடுத்துக்காட்டு கோப்பு

இதோ canaille கட்டமைப்பு dump கட்டளை மூலம் உருவாக்கக்கூடிய உள்ளமைவு கோப்பு உதாரணம்:

config.toml
# The Flask SECRET_KEY configuration setting.
#
# You MUST set a value before deploying in production.
# SECRET_KEY =

# The Flask SERVER_NAME configuration setting.
#
# This sets domain name on which canaille will be served.
# SERVER_NAME =

# The Flask TRUSTED_HOSTS configuration setting.
#
# This sets trusted values for hosts and validates hosts during requests.
# TRUSTED_HOSTS =

# The URL of the running task worker.
#
# It is passed as url keyword argument to broker class. For example:
#
# - redis://localhost:6379
# - amqp://localhost
# - redis://username:password@redis.example:6379/0
# - amqp://guest:guest@localhost:5672/?heartbeat=30&connection_timeout=10
#
# If none, all the tasks are executed synchronously without requiring to run a
# task worker. This has poor performance but can be useful in tests environments.
# BROKER_URL =

# Points to the broker class.
#
# If none, this will be guessed from the value of BROKER_URL:
#
# - dramatiq_eager_broker:EagerBroker is used if the broker URL is unset.
#    This broker executes that's synchronously, meaning there is no need to run a task worker.
# - dramatiq.brokers.rabbitmq:RabbitmqBroker is used if the URL is an AMQP URL.
# - dramatiq.brokers.redis:RedisBroker is used if the URL is a redis URL.
# BROKER =
BROKER = "dramatiq_eager_broker:EagerBroker"

# The Flask PREFERRED_URL_SCHEME configuration setting.
#
# This sets the url scheme by which canaille will be served.
# PREFERRED_URL_SCHEME = "https"

# The Flask DEBUG configuration setting.
#
# This enables debug options.
#
#     This is useful for development but should be absolutely
#     avoided in production environments.
# DEBUG = false

# The cache type.
#
# The default SimpleCache is a lightweight in-memory cache. See the Flask-Caching
# documentation for further details.
# CACHE_TYPE = "SimpleCache"

# The Flask PERMANENT_SESSION_LIFETIME configuration setting.
#
# This sets the lifetime of a permanent session. Users sessions are permanent when
# they check the "Remember me" checkbox during login.
#
# The value is expressed in ISO8601 duration format
# (https://en.wikipedia.org/wiki/ISO_8601#Durations). For example:
#
# - P365D for 365 days
# - P30D for 30 days
# - P1W for 1 week
# - PT12H for 12 hours
# - P1DT12H for 1 day and 12 hours
# PERMANENT_SESSION_LIFETIME = "P30D"

# The Flask-Session backend type.
#
# If None (default), Flask's default session implementation is used (client-side
# signed cookies). When set, sessions are stored server-side using the specified
# backend.
#
# Available backends:
#
# - redis: Store sessions in Redis (connects to localhost:6379 by default)
# - memcached: Store sessions in Memcached (connects to localhost:11211 by default)
# - filesystem: Store sessions in local files (uses /tmp/flask-session by default)
# - sqlalchemy: Store sessions in a SQL database
# - mongodb: Store sessions in MongoDB
# - cachelib: Store sessions using a cachelib backend
# - dynamodb: Store sessions in DynamoDB
#
# See the Flask-Session documentation for backend-specific details.
# SESSION_TYPE =

[CANAILLE]
# Your organization name.
#
# Used for display purpose.
# NAME = "Canaille"

# The database backend to use.
#
# Default is "sql" if available, else "memory".
# DATABASE =
DATABASE = "memory"

# The logo of your organization, this is useful to make your organization
# recognizable on login screens.
# LOGO = "/static/img/canaille-head.webp"

# You favicon.
#
# If unset and LOGO is set, then the logo will be used.
# FAVICON = "/static/img/canaille-c.webp"

# A path to a theme.
#
# See the theming documentation for more details.
# THEME =

# If a language code is set, it will be used for every user.
#
# If unset, the language is guessed according to the users browser.
# LANGUAGE =

# The timezone in which datetimes will be displayed to the users (e.g. CEST).
#
# If unset, the server timezone will be used.
# TIMEZONE =

# A Sentry (https://sentry.io) DSN to collect the exceptions.
#
# This is useful for tracking errors in test and production environments.
# SENTRY_DSN =

# Whether to force the rediction of http requests to https.
# FORCE_HTTPS = false

# Enables Javascript to smooth the user experience.
# JAVASCRIPT = true

# Accelerates webpages loading with asynchronous requests.
# HTMX = true

# If True, users will need to click on a confirmation link sent by email when they
# want to add a new email.
#
# 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.
# EMAIL_CONFIRMATION =

# If True, then users can freely create an account at this instance.
#
# If email verification is available, users must confirm their email before the
# account is created.
# ENABLE_REGISTRATION = false

# The attributes users can use to identify themselves, generally a combination of
# user_name, emails and phone_numbers.
#
# - When this is a list, it expects the attribute names to match.
# - When this is a dict, keys are expected to be the attribute names to match,
#   and values are a jinja:index string with a login variable available.
#   This can be used to tune the user input, and for example remove a domain name.
#
#     LOGIN_ATTRIBUTES = ["user_name", "emails"]
#     LOGIN_ATTRIBUTES = {user_name = "{{ login | replace('@example.org', '') }}", emails = "{{ login }}"}
# LOGIN_ATTRIBUTES = ["user_name", "emails"]

# If 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.
#
# If False, when a user tries to sign in with an invalid login, a message is shown
# indicating that the login does not exist.
# HIDE_INVALID_LOGINS = true

# If False, then users cannot ask for a password recovery link by email.
# ENABLE_PASSWORD_RECOVERY = true

# If True, then users will have to wait for an increasingly long time between each
# failed login attempt.
# ENABLE_INTRUDER_LOCKOUT = false

# The authentication factors.
#
# Users will need to authenticate with factors in the order of this list. For
# instance, this will show a password form and then ask for a one-time passcode:
#
# Valid factors are password, otp, email, sms and fido2.
#
#     AUTHENTICATION_FACTORS = ["password", "otp"]
# AUTHENTICATION_FACTORS = ["password"]

# The OTP method to use if otp is set in AUTHENTICATION_FACTORS. If set to TOTP,
# the application will use time-based one-time passcodes, If set to HOTP, the
# application will use HMAC-based one-time passcodes.
# OTP_METHOD = "TOTP"

# The validity period for TOTP codes.
#
# Should be provided in ISO8601 duration format (e.g., "PT30S" for 30 seconds,
# "PT1M" for 1 minute).
# TOTP_LIFETIME = "PT30S"

# Timeout for FIDO2/WebAuthn operations.
# FIDO_TIMEOUT = "PT1M"

# User verification requirement for FIDO2/WebAuthn.
#
# - required: User verification (PIN/biometric) is required.
# - preferred: User verification is preferred but not required.
# - discouraged: User verification should not be used.
# FIDO_USER_VERIFICATION = "preferred"

# Attestation conveyance preference for FIDO2/WebAuthn.
#
# Attestation allows the server to verify the authenticator's identity
# (manufacturer, model) during registration. This is useful in high-security
# environments where only specific certified authenticators should be allowed.
#
# - none: No attestation requested. The server cannot identify the
#   authenticator type. Most privacy-preserving option, recommended for
#   most use cases.
# - indirect: Anonymized attestation. The authenticator may provide
#   manufacturer information without revealing the exact model.
# - direct: Full attestation. The authenticator provides a signed
#   certificate identifying its manufacturer and model. This can be validated
#   against the FIDO Alliance Metadata Service (MDS) to ensure only trusted
#   authenticators are accepted.
#
# Note that even with "direct", authenticators may refuse to provide attestation
# for privacy reasons. Additionally, validating attestation certificates requires
# additional server-side implementation.
# FIDO_ATTESTATION = "none"

# Maximum number of passkeys per user.
# FIDO_MAX_CREDENTIALS = 5

# The validity duration of registration invitations, in seconds.
#
# Defaults to 2 days.
# INVITATION_EXPIRATION = 172800

# User password minimum length.
#
# If 0 or None, password won't have a minimum length.
# MIN_PASSWORD_LENGTH = 8

# User password maximum length.
#
#     There is a technical limit of 4096 characters with the SQL backend.
#     If the value is 0, None, or greater than 4096,
#     then 4096 will be retained.
# MAX_PASSWORD_LENGTH = 1000

# Administration email contact.
#
# In certain special cases (example : questioning about password corruption), it
# is necessary to provide an administration contact email.
# ADMIN_EMAIL =

# If True, Canaille will check if passwords appears in compromission databases
# such as HIBP (https://haveibeenpwned.com) when users choose a new one.
# ENABLE_PASSWORD_COMPROMISSION_CHECK = false

# Have i been pwned api url for compromission checks.
# PASSWORD_COMPROMISSION_CHECK_API_URL = "https://api.pwnedpasswords.com/range/"

# Enable CAPTCHA on authentication and registration forms.
# CAPTCHA_ENABLED = true

# CAPTCHA length (number of characters).
# CAPTCHA_LENGTH = 5

# Number of failed login attempts before showing CAPTCHA.
#
# - If 0, CAPTCHA is always shown.
# - If > 0, CAPTCHA appears after N failed attempts and persists until successful login.
# - On registration forms, CAPTCHA is always shown when enabled.
# CAPTCHA_FAILURE_THRESHOLD = 3

# One-time password validity duration.
#
# Duration for which email and SMS one-time passwords remain valid. The value is
# expressed in ISO8601 duration format
# (https://en.wikipedia.org/wiki/ISO_8601#Durations).
#
# Examples:
#
# - PT10M for 10 minutes
# - PT5M for 5 minutes
# - PT30S for 30 seconds
# OTP_LIFETIME = "PT10M"

# Password validity duration.
#
# If set, user passwords expire after this delay. Users are forced to change their
# password when the lifetime of the password is over. The duration value is
# expressed in ISO8601 format (https://en.wikipedia.org/wiki/ISO_8601#Durations).
# For example, delay of 60 days is written "P60D".
# PASSWORD_LIFETIME =

# Configures the logging output using the python logging configuration format:
#
# - If None, everything is logged in the standard error output.
#   The log level is DEBUG if the DEBUG
#   setting is True, else this is INFO.
# - If this is a dict, it is passed to logging.config.dictConfig:
# - If this is a str, it is expected to be a file path that will be passed
#   to logging.config.fileConfig.
#
# For example:
#
#     [CANAILLE.LOGGING]
#     version = 1
#     formatters.default.format = "[%(asctime)s] - %(ip)s - %(levelname)s in %(module)s: %(message)s"
#     root = {level = "INFO", handlers = ["canaille"]}
#
#     [CANAILLE.LOGGING.handlers.canaille]
#     class = "logging.handlers.WatchedFileHandler"
#     filename = "/var/log/canaille.log"
#     formatter = "default"
# LOGGING =

# The settings related to SMTP and mail configuration.
#
# If unset, mail-related features like password recovery won't be enabled.

[CANAILLE.SMTP]
# The SMTP host.
# HOST = "localhost"

# The SMTP port.
# PORT = 25

# Whether to use TLS to connect to the SMTP server.
# TLS = false

# Whether to use SSL to connect to the SMTP server.
# SSL = false

# The SMTP login.
# LOGIN =

# The SMTP password.
# PASSWORD =

# The sender for Canaille mails.
#
# Some mail provider might require a valid sender address.
# FROM_ADDR =

# The settings related to SMPP configuration.
#
# If unset, sms-related features like sms one-time passcodes won't be enabled.

[CANAILLE.SMPP]
# The SMPP host.
# HOST = "localhost"

# The SMPP port. Use 8775 for SMPP over TLS (recommended).
# PORT = 2775

# The SMPP login.
# LOGIN =

# The SMPP password.
# PASSWORD =

# Mapping of permission groups. See ACLSettings for more details.
#
# The ACL name can be freely chosen. For example:
#
#     [CANAILLE.ACL.DEFAULT]
#     PERMISSIONS = ["edit_self", "use_oidc"]
#     READ = ["user_name", "groups"]
#     WRITE = ["given_name", "family_name"]
#
#     [CANAILLE.ACL.ADMIN]
#     WRITE = ["user_name", "groups"]
#
# The default ACL gives all permissions to users with the `admin` user name, and
# members of a group called `admin`.

[CANAILLE.ACL.DEFAULT]
# A list of Permission users in the access control will be able to manage.
#
# By default, users can edit their own profile, use OpenID Connect, and manage
# their own groups.
#
# For example:
#
#     PERMISSIONS = [
#         "manage_users",
#         "manage_all_groups",
#         "manage_oidc",
#         "delete_account",
#         "impersonate_users",
#     ]
# PERMISSIONS = ["edit_self", "use_oidc", "manage_own_groups"]

# A list of User attributes that users in the ACL will be able to read.
# READ = ["user_name", "groups", "lock_date"]

# A list of User attributes that users in the ACL will be able to edit.
# WRITE = ["photo", "given_name", "family_name", "display_name", "password", "phone_numbers", "emails", "profile_url", "formatted_address", "street", "postal_code", "locality", "region", "preferred_language", "employee_number", "department", "title", "organization"]

# FILTER can be:
#
# - None, in which case all the users will match this access control
# - 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.
# - a list of those mappings. If a user values match at least one mapping,
#   then the user will be part of the access control
#
# Here are some examples:
#
#     FILTER = {user_name = 'admin'}
#     FILTER = [
#         {groups = 'admin},
#         {groups = 'moderators'},
#     ]
# FILTER =

[CANAILLE.ACL.ADMIN]
# A list of Permission users in the access control will be able to manage.
#
# By default, users can edit their own profile, use OpenID Connect, and manage
# their own groups.
#
# For example:
#
#     PERMISSIONS = [
#         "manage_users",
#         "manage_all_groups",
#         "manage_oidc",
#         "delete_account",
#         "impersonate_users",
#     ]
# PERMISSIONS = ["edit_self", "use_oidc", "manage_own_groups"]
PERMISSIONS = [
    "manage_oidc",
    "manage_users",
    "manage_all_groups",
    "delete_account",
    "impersonate_users",
]

# A list of User attributes that users in the ACL will be able to read.
# READ = ["user_name", "groups", "lock_date"]

# A list of User attributes that users in the ACL will be able to edit.
# WRITE = ["photo", "given_name", "family_name", "display_name", "password", "phone_numbers", "emails", "profile_url", "formatted_address", "street", "postal_code", "locality", "region", "preferred_language", "employee_number", "department", "title", "organization"]
WRITE = ["groups", "lock_date"]

# FILTER can be:
#
# - None, in which case all the users will match this access control
# - 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.
# - a list of those mappings. If a user values match at least one mapping,
#   then the user will be part of the access control
#
# Here are some examples:
#
#     FILTER = {user_name = 'admin'}
#     FILTER = [
#         {groups = 'admin},
#         {groups = 'moderators'},
#     ]
FILTER = [{user_name = "admin"}, {groups = "admin"}]

[CANAILLE_SQL]
# The SQL server URI. For example:
#
#     DATABASE_URI = "postgresql://user:password@localhost/database_name"
# DATABASE_URI = "sqlite:///canaille.sqlite"

# Password hashing scheme.
#
# Defines password hashing scheme in SQL database. See the passlib.hash
# documentation for a complete list of available schemes.
#
# Examples: "mssql2000", "ldap_salted_sha1", "pbkdf2_sha512", "argon2", "scrypt"
# PASSWORD_SCHEMES = "pbkdf2_sha512"

# Additional parameters for password hashing.
#
# These parameters are passed directly to passlib's CryptContext. Useful for
# customizing hash parameters like rounds/iterations.
#
# Example to tune PBKDF2:
#
#     [CANAILLE_SQL]
#     PASSWORD_HASH_PARAMS = { "pbkdf2_sha512__rounds" = 100000 }
# PASSWORD_HASH_PARAMS =
PASSWORD_HASH_PARAMS = {}

# The number of connections to keep persistently in the pool.
#
# Set to 0 to indicate no size limit (not recommended in production). See the
# pool_size parameter of sqlalchemy.create_engine.
# POOL_SIZE = 5

# The number of connections to allow in overflow beyond POOL_SIZE.
#
# When all persistent connections are in use, additional connections will be
# created up to this limit. Set to -1 to indicate no overflow limit. See the
# max_overflow parameter of sqlalchemy.create_engine.
# POOL_MAX_OVERFLOW = 10

# Number of seconds after which a connection is automatically recycled.
#
# Useful to prevent the database server from closing idle connections. For
# example, MySQL/MariaDB closes idle connections after wait_timeout (default 8
# hours). Set this to a value below the server's timeout (e.g. 3600 for one hour).
# -1 disables recycling. See the pool_recycle parameter of
# sqlalchemy.create_engine.
# POOL_RECYCLE = -1

# Whether to test connections for liveness upon each checkout.
#
# When enabled, a SELECT 1 is emitted before each connection use to detect stale
# connections (e.g. after a database restart). The overhead is negligible compared
# to the cost of failed requests. See the pool_pre_ping parameter of
# sqlalchemy.create_engine.
# POOL_PRE_PING = false

# Whether to automatically apply database migrations.
#
# If True, database migrations will be automatically applied when Canaille web
# application is launched. If False, migrations must be applied manually with
# canaille db upgrade.
#
#     When running the CLI, migrations will never be applied.
# AUTO_MIGRATE = true

[CANAILLE_LDAP]
# The LDAP server URI.
# URI = "ldap://localhost"

# The LDAP root DN.
# ROOT_DN = "dc=example,dc=org"

# The LDAP bind DN.
# BIND_DN = "cn=admin,dc=example,dc=org"

# The LDAP bind password.
# BIND_PW = "admin"

# The LDAP connection timeout.
# TIMEOUT = -1

# The LDAP node under which users will be looked for and saved.
#
# For instance `ou=users,dc=example,dc=org`.
# USER_BASE =
USER_BASE = "ou=users,dc=example,dc=org"

# The object class to use for creating new users.
# USER_CLASS = ["inetOrgPerson"]

# The attribute to identify an object in the User DN.
# USER_RDN = "uid"

# The LDAP node under which groups will be looked for and saved.
#
# For instance `"ou=groups,dc=example,dc=org"`.
# GROUP_BASE =
GROUP_BASE = "ou=groups,dc=example,dc=org"

# The object class to use for creating new groups.
# GROUP_CLASS = "groupOfNames"

# The attribute to identify an object in the Group DN.
# GROUP_RDN = "cn"

# The attribute to use to identify a group.
# GROUP_NAME_ATTRIBUTE = "cn"

# The number of connections to keep in the pool.
#
# See the size parameter of ldappool.ConnectionManager.
# POOL_SIZE = 10

# Maximum lifetime of a connection in seconds.
#
# Connections older than this are automatically closed and replaced. Set to 0 to
# disable lifetime-based recycling. See the max_lifetime parameter of
# ldappool.ConnectionManager.
# POOL_MAX_LIFETIME = 600

# Number of retry attempts when a connection fails.
#
# See the retry_max parameter of ldappool.ConnectionManager.
# POOL_RETRY_MAX = 3

# Delay in seconds between connection retry attempts.
#
# See the retry_delay parameter of ldappool.ConnectionManager.
# POOL_RETRY_DELAY = 0.1

[CANAILLE_OIDC]
# Whether the Single Sign-On feature and the OpenID Connect API is enabled.
# ENABLE_OIDC = true

# Whether a token is needed for the RFC7591 dynamical client registration.
#
# If True, no token is needed to register a client. If False, dynamical client
# registration requires a valid JWT token generated by the canaille jwt
# registration command.
# DYNAMIC_CLIENT_REGISTRATION_OPEN = false

# Force the nonce exchange during the authentication flows.
#
# This adds security but may not be supported by all clients.
# REQUIRE_NONCE = true

# The active JSON Web Keys Set.
#
# Those keys are used to sign and verify JWTs. The keys can be in the form of JWK
# dict or raw keys.
# ACTIVE_JWKS =

# The inactive JSON Web Keys Set.
#
# Those keys are only used to verify JWTs. The keys can be in the form of JWK dict
# or raw keys.
# INACTIVE_JWKS =

# Trusted domains for automatic client trust.
#
# Clients with a client_uri matching these domains will be automatically
# considered as trusted and will not display the consent page to users. This is
# particularly useful for development environments.
#
# Supports these patterns:
#
# - Exact match: example.com matches example.com
# - Wildcard match: .example.com matches example.com and all its subdomains
#
# Examples:
#
# - [".localhost", "127.0.0.1"] (default for development)
# - [".dev.company.com", "staging.company.com"]
# - [".local", "localhost"]
# TRUSTED_DOMAINS = [".localhost", "127.0.0.1"]

# "Attribute mapping used to build an OIDC UserInfo object.
#
# UserInfo is used to fill the id_token and the userinfo endpoint.

[CANAILLE_OIDC.USERINFO_MAPPING]
# SUB = "{{ user.user_name }}"

# NAME = "{% if user.formatted_name %}{{ user.formatted_name }}{% endif %}"

# PHONE_NUMBER = "{% if user.phone_numbers %}{{ user.phone_numbers[0] }}{% endif %}"

# EMAIL = "{% if user.preferred_email %}{{ user.preferred_email }}{% endif %}"

# GIVEN_NAME = "{% if user.given_name %}{{ user.given_name }}{% endif %}"

# FAMILY_NAME = "{% if user.family_name %}{{ user.family_name }}{% endif %}"

# PREFERRED_USERNAME = "{% if user.display_name %}{{ user.display_name }}{% endif %}"

# LOCALE = "{% if user.preferred_language %}{{ user.preferred_language }}{% endif %}"

# ADDRESS = "{% if user.formatted_address %}{{ user.formatted_address }}{% endif %}"

# PICTURE = "{% if user.photo %}{{ user | photo_url(external=True) }}{% endif %}"

# WEBSITE = "{% if user.profile_url %}{{ user.profile_url }}{% endif %}"

# UPDATED_AT = "{% if user.last_modified %}{{ user.last_modified.timestamp() }}{% endif %}"

[CANAILLE_SCIM]
# Whether the SCIM server API is enabled.
#
# When enabled, services plugged to Canaille can update users and groups using the
# API.
# ENABLE_SERVER = true

# Whether the state of User and Group are broadcasted to clients using the SCIM
# protocol.
#
# When enabled, any creation, edition or deletion of a client or a group will be
# replicated on clients that implement the SCIM protocol.
# ENABLE_CLIENT = false

[CANAILLE_HYPERCORN]
# The access log format.
# ACCESS_LOG_FORMAT =

# The target for access log outputs.
# ACCESSLOG =

# The ALPN protocols to advertise.
# ALPN_PROTOCOLS = []

# The alt-svc header values to advertise.
# ALT_SVC_HEADERS = []

# The maximum number of pending connections.
# BACKLOG =

# The TCP host/address to bind to.
# BIND = []

# Path to the SSL CA certificate file.
# CA_CERTS =

# Path to the SSL certificate file.
# CERTFILE =

# The available ciphers for SSL connections.
# CIPHERS =

# Enable debug mode.
# DEBUG =

# Comma separated list of tags to be applied to all StatsD metrics.
# DOGSTATSD_TAGS =

# The target for error log outputs.
# ERRORLOG =

# Time to wait for workers to finish current requests during graceful shutdown.
# GRACEFUL_TIMEOUT =

# The group id to switch to.
# GROUP =

# The maximum size of the incomplete request/response body.
# H11_MAX_INCOMPLETE_SIZE =

# Pass raw headers to the application.
# H11_PASS_RAW_HEADERS =

# The maximum number of concurrent streams per HTTP/2 connection.
# H2_MAX_CONCURRENT_STREAMS =

# The maximum size of the header list.
# H2_MAX_HEADER_LIST_SIZE =

# The maximum size of an inbound HTTP/2 frame.
# H2_MAX_INBOUND_FRAME_SIZE =

# Include a date header in the response.
# INCLUDE_DATE_HEADER =

# Include a server header in the response.
# INCLUDE_SERVER_HEADER =

# The TCP host/address to bind to for insecure connections.
# INSECURE_BIND = []

# The maximum number of requests per keep-alive connection.
# KEEP_ALIVE_MAX_REQUESTS =

# Seconds to wait before closing keep-alive connections.
# KEEP_ALIVE_TIMEOUT =

# Path to the SSL key file.
# KEYFILE =

# The password for the SSL key file.
# KEYFILE_PASSWORD =

# The log config file path.
# LOGCONFIG =

# The log config dictionary.
# LOGCONFIG_DICT =

# The (error) log level.
# LOGLEVEL =

# The maximum size of the application task queue.
# MAX_APP_QUEUE_SIZE =

# The maximum number of requests a worker can handle before restarting.
# MAX_REQUESTS =

# The maximum jitter to add to the max_requests setting.
# MAX_REQUESTS_JITTER =

# Path to write the process id.
# PID_PATH =

# Proxy headers handling mode: None (no proxy), legacy (X-Forwarded-*), or modern
# (RFC 7239 Forwarded).
# PROXY_MODE =

# Number of trusted proxy hops when PROXY_MODE is set.
# PROXY_TRUSTED_HOPS = 1

# The UDP socket to bind for QUIC.
# QUIC_BIND = []

# The timeout for reading from connections.
# READ_TIMEOUT =

# The ASGI root_path variable.
# ROOT_PATH =

# A comma separated list of server names.
# SERVER_NAMES = []

# Time to wait for workers to shutdown during graceful shutdown.
# SHUTDOWN_TIMEOUT =

# The SSL handshake timeout.
# SSL_HANDSHAKE_TIMEOUT =

# Time to wait for workers to start during startup.
# STARTUP_TIMEOUT =

# The host:port of the statsd server.
# STATSD_HOST =

# Prefix for statsd messages.
# STATSD_PREFIX =

# The umask to set for the process.
# UMASK =

# Enable automatic reloading on code changes.
# USE_RELOADER =

# The user id to switch to.
# USER =

# The SSL verify flags.
# VERIFY_FLAGS =

# The SSL verify mode.
# VERIFY_MODE =

# The maximum size of a WebSocket message.
# WEBSOCKET_MAX_MESSAGE_SIZE =

# If set the time in seconds between pings.
# WEBSOCKET_PING_INTERVAL =

# The type of worker to use.
# WORKER_CLASS =

# The number of worker processes.
# WORKERS =

# The maximum size of WSGI request body.
# WSGI_MAX_BODY_SIZE =