1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/tracim_ynh.git synced 2024-10-01 13:34:52 +02:00
tracim_ynh/conf/development.ini.sample
2022-04-11 15:05:02 +02:00

1101 lines
43 KiB
Text

######################
# Tracim Config File #
######################
## Configuration
# Parameters can be defined via environment variables or in the config file.
# Environment parameters are used in priority if a variable is defined in both.
## File Syntax
# Comments start by `;` or `#`.
# In the sample config file:
# - `;` commented lines are used to indicate the default values used by Tracim;
# - `#` commented lines are used for comments/examples.
# Boolean values can be `True` or `False`
# All parameters starting with `basic_setup` can be used as variables in other parameters.
# For simple needs they are all you need to customize.
## Special Parameter
# The syntax "%(here)s" is automatically replaced by the directory of the config file.
# If you do use it, please note that your config file directory may vary depending where you decide
# to place your config file.
## GENERAL TRACIM config:
# These config are common for all app: REST API, Webdav, etc...
[DEFAULT]
###############
# BASIC SETUP #
###############
# easy setup (shortcut) for setting most common config
# search for "%(param)s" to check where those param are used and why
## global info (need for email and links)
basic_setup.website_title = __WEBSITE_TITLE__
# public address of tracim known by tracim (pushpin proxy-address)
basic_setup.website_base_url = https://__DOMAIN__
# listened host:port of tracim web
basic_setup.listen = localhost:6543
## storage path/connection
basic_setup.sqlalchemy_url = postgresql://__DB_USER__:__DB_PWD__@localhost:5432/__DB_NAME__?client_encoding=utf8
basic_setup.uploaded_files_storage_type = local
basic_setup.uploaded_files_storage_path = __DATADIR__/depot
basic_setup.caldav_storage_dir = __DATADIR__/radicale_storage
basic_setup.preview_cache_dir = %(here)s/previews
basic_setup.sessions_data_root_dir = %(here)s
## secret
# This is needed for some feature like reply by email
basic_setup.api_key = __API_KEY__
basic_setup.session_secret = __SESSION_SECRET__
##################
# ADVANCED SETUP #
##################
####
# CORE
####
# hapic debug mode: return python traceback of error
; debug = False
### Language ###
## default language used in backend if user do not set any language.
# Available parameter: en, fr, pt, de, ar
default_lang = __LANGUAGE__
### Apps ###
## app enabled explicit list:
# this allow you to explictly disable default app or enabled beta app now
# already added to default list.
# This parameter is a list of app slug separated by ',' char.
# Not exhaustive list of available apps:
# - "content/thread" -> thread/topic/discussion: allow to discuss about one
# subject.
# - content/file -> allow to upload all type of file like .pdf, .odt, .jpg, etc
# - content/html-document -> allow to work on a standard html-based document
# which is editable through Tracim.
# - content/folder -> allow to put content into folder.
# - content/kanban -> allow to work with kanban-styled boards. It requires content/file to be enabled.
# - agenda -> add caldav agenda feature (specific process need to be runned)
# - collaborative_document_edition -> add support for collaborative document edition,
# add support for collaborative edition server like collabora/libreofficeOnline.
# - share_content -> allow user to share Tracim content with external user
# - upload_permission -> allow external with permission to upload some file in a space.
# - gallery -> add gallery app in Tracim
# default app.enabled config explicit list config:
; app.enabled = contents/thread,contents/file,contents/html-document,contents/folder,contents/kanban,agenda,share_content,upload_permission,gallery
# With all apps (add collaborative document edition):
# app.enabled = contents/thread,contents/file,contents/html-document,contents/folder,contents/kanban,agenda,collaborative_document_edition,share_content,upload_permission,gallery
### Live Messages ###
# control_uri for GRIP protocol reverse-proxy (PushPin)
# this is the base url used for publishing new events to reverse-proxy.
; live_messages.control_zmq_uri = tcp://localhost:5563
# stats socket uri for GRIP protocol reverse-proxy (PushPin)
# this is the base url used for listening to events related to connection to the
# reverse-proxy. If you are running pushpin using the docker-compose, set this
# parameter to tcp://localhost:5564
; live_messages.stats_zmq_uri = ipc:///var/run/pushpin/pushpin-stats
# do tracim block until publishing is complete or not
# by default it will be False if jobs.processing_mode is sync and True if processing_mode is async
# as sync publishing is done during the HTTP request
; live_messages.blocking_publish = False
### Plugins ###
# if provided, this allow Tracim to load package from this dir and if package follow
# the convention "tracim_backend_{plugin_name}", hooks provided inside the package will
# be loaded, allowing to add new feature to an existing Tracim.
; plugin.folder_path = %(here)s/plugins
### Workspace ###
# list of access_type allowed for new workspaces. In Tracim; these values for access_type are available:
# - confidential: not visible publicly, access only by invitation workspace_manager/admin
# - on_request: publicly visible, access by invitation or request with validation by workspace manager/admin)
# - open: publicly visible and access by invitation or request without validation
; workspace.allowed_access_types = confidential,on_request,open
# example:
# workspace.allowed_access_types = confidential
# When a user joins a space, messages from events that happened before are added to the user's recent activities.
# This setting limits the messages of events that are created to avoid cluttering the database and too much processing when a user joins a space.
# 0 will completely disable the feature, leading to empty space recent activities when joining a space.
# -1 means no limit.
workspace.join.max_messages_history_count = -1
## CORS Special config
# you can override access control allowed origin here with list of comma separated
# base_url, by default only website.base_url and api.base_url are allowed
; cors.access-control-allowed-origin =
# example:
# cors.access-control-allowed-origin = http://localhost:6543,http://localhost:8090
## Anonymized User
# You can set default display name for anonymized user.
; default_anonymized_user_display_name = "Deleted user"
## Build Version
# If you leave build_version empty or unsetted here, Tracim will automatically
# try to get a meaningful value according to context, it will try to
# use last commit tag or hash as build_version. If your Tracim code is not placed
# in a git repository or git isn't installed on the server, default value will be
# "unknown".
# You can override predefined build version.
# Leave as empty to let Tracim find automatically build_version value.
; build_version =
####
# Content Security Policy
#
# Tracim can generate a content security policy header that only
# enables script execution from Tracim frontend to avoid XSS attacks.
# It also forbids <object> tags.
# This behavior can be tuned by using "additional_directives" if some other
# scripts/resources are needed for your installation or usage.
# By default the header is generated.
####
# Enable or disable the content security policy header
; content_security_policy.enabled = True
# You can set this to an URI where browsers will report CSP failures.
# Multiple URIs are possible by separating them with spaces (the config value is added as it is)
# They must be secured by a valid SSL/TLS connection and certificate
# Example: content_security_policy.report_uri = https://www.myreporturi.com https://www.another-reporturi.org
; content_security_policy.report_uri =
# If set to True, the generated header will be Content-Security-Policy-Report-Only.
# Useful to test policy changes before enforcing them
# If set to true, "report_uri" must also have a valid value.
; content_security_policy.report_only = False
# additional directives to tune the CSP header, they are added without any change to the header
; content_security_policy.additional_directives =
###
# URL PREVIEW
###
# timeout for fetching URL preview (in sec).
; url_preview.fetch_timeout = 30
# max content length parsed for fetching URL preview (in bytes), default to 1048576 (1 Mo)
# note: setting to 0 will disallow the limitation, but is not recommanded for security and performance
# reason.
; url_preview.max_content_length = 1048576
####
# LIMITATION
####
# limit number of sharespaces any user can be owner, 0 mean not limit, default to 0
; limitation.sharedspace_per_user = 0
# max upload content length accepted by Tracim for file in bytes
# by default 0 meaning no limit. 104857600 (100MB) is a good value
; limitation.content_length_file_size = 0
# example:
# limitation.content_length_file_size = 104857600
# max size of all files of a space in bytes
# by default 0 meaning no limit. 1073741824(1GB) is a good value
; limitation.workspace_size = 0
# example:
# limitation.workspace_size = 1073741824
## default allowed space for new user if not provided in bytes, 0 mean no space
## limit. Limit is on the sum of sizes of owned by user space.
; limitation.user_default_allowed_space = 0
# maximum count of simulteanously online users, 0 means unlimited and is the default value.
; limitation.maximum_online_users = 0
# The customized error message shown to the user when the limit is reached.
# Empty by default. HTML is allowed.
; limitation.maximum_online_users_message =
# For instance:
# limitation.maximum_online_users_message = We suggest you contact your manager to upgrade your offer:<br /><b>Leslie Doe</b>, <a href="tel:+336123456789">+336123456789</a>, <a href="mailto:root@__DOMAIN__">root@__DOMAIN__</a>
####
# STORAGE
####
### Database ###
# to set database you need a proper sqlalchemy url, some example with supported
# database (sqlite, postgresql, mysql/mariadb)
## sqlite:
# sqlalchemy.url = sqlite:///%(here)s/tracim.sqlite
## mysql/mariadb:
# sqlalchemy.url = mysql+pymysql://user:password@dbhost:dbport/dbname
## postgresql:
# sqlalchemy.url = postgresql://user:paswword@dbhost:dbport/dbname?client_encoding=utf8
# see also for more info:
# https://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine ##
; sqlalchemy.url = sqlite:///%(here)s/tracim.sqlite
sqlalchemy.url = %(basic_setup.sqlalchemy_url)s
### Uploaded files ###
; uploaded_files.storage.storage_name = tracim
## storage type, can be either "local" (local dir), "memory" (ram storage) or "s3" (remote S3 compatible storage)
uploaded_files.storage.storage_type = %(basic_setup.uploaded_files_storage_type)s
## This is where the files uploaded by users will be stored if storage_type is "local"
uploaded_files.storage.local.storage_path = %(basic_setup.uploaded_files_storage_path)s
## S3 credentials (requires the boto3 packaqe):
; uploaded_files.storage.s3.access_key_id =
; uploaded_files.storage.s3.secret_access_key =
; uploaded_files.storage.s3.bucket =
; uploaded_files.storage.s3.region_name =
## S3 canned ACL policy can be either "private" or "public-read"
; uploaded_files.storage.s3.policy =
## use specific s3 storage class
; uploaded_files.storage.s3.storage_class =
## allow to define other S3 provided than AWS
; uploaded_files.storage.s3.endpoint_url =
# permit to store file under specific prefix, trailing slash prefix like "dirname/" permit to store in subdirectory
; uploaded_files.storage.s3.prefix =
### Preview ###
## preview cache directory
; preview_cache_dir = %(here)s/previews
preview_cache_dir = %(basic_setup.preview_cache_dir)s
## You can parametrized allowed jpg preview dimension list, if not set, default
## is 256x256. First {width}x{length} items is default preview dimensions.
## All items should be separated by a coma.
; preview.jpg.allowed_dims = 256x256
# examples with multiples values:
# preview.jpg.allowed_dims = 256x256,512x512,1024x1024
## Preview dimensions can be set as restricted. If set as True, access
## endpoint to get any other preview dimensions than allowed_dims will
## return error
; preview.jpg.restricted_dims = False
### Session ###
# Warning! if you decide to change the session parameters, we strongly encourage you to delete existing sessions
# in order to avoid security issues. See the Tracim settings documentation (available in source code, see "settings.md").
### pyramid_beaker parameters ###
session.type = file
# needed for "file" storage config :
; session.data_dir = %(here)s/sessions_data
session.data_dir = %(basic_setup.sessions_data_root_dir)s/sessions_data
# needed for many session storage type, but not for file (leave as empty for file)
session.url =
## "Redis" storage config sample:
# session.type = ext:redis
# note: redis db name are integer (by default 16 database are available from 0 to 15 db)
# session.url = redis://localhost:6379/0
; session.lock_dir = %(here)s/sessions_data
session.lock_dir = %(basic_setup.sessions_data_root_dir)s/sessions_lock
session.key = session_key
session.secret = %(basic_setup.session_secret)s
session.save_accessed_time = True
## Delay in seconds
session.cookie_expires = 604800
session.timeout = 604800
session.cookie_on_exception = True
# enable or disable http-only for cookie, by default set as True. Disable it only
# if you know what you're doing as this is less secure.
; session.httponly = True
# enable or disable secure for cookie, by default set as False. We strongly
# recommend you to set it a True if you are using https.
session.secure = True
####
# AUTH
####
### API KEY AUTH ###
# Api key auth allow to access to any authenticated user using
# 'Tracim-Api-Key'(secret share between client and Tracim)
# and 'Tracim-Api-Login' (mail of existing user) headers.
## Api key auth is disabled by default,
## you should set a not-null value to api.key to enable it:
; api.key =
api.key = %(basic_setup.api_key)s
## base url of the backend API, default to same as website.base_url
; api.base_url =
### Remote User Auth ###
# remote user auth give authorized access to user using a simple header with
# email of user, if user does not exist, new user will be created.
# This allow to delegate auth mechanism to webserver.
# this a true auth mechanism like internal or ldap,
# this mean user created this way will be attached to this mechanism.
## Remote user header should be a CGI env var.
## most common value is "REMOTE_USER".
## You can also directly use HTTP header instead of standard CGI env var
## using "HTTP_" CGI env var which are HTTP header
## but be careful about spoofing, you should be sure that no-one can set
## header and pretend to be anyone. Only trusted server should be able to
## set remote_user_header.
## remote user auth is disabled by default,
## you should set a not-null value to auth_remote_header to enable it:
; remote_user_header =
## Auth type list (internal or ldap), can be a list of item separated by ','
## and ordered by priority
## auth_type 'remote' is not allowed there, set remote_auth_header.
auth_types = internal,ldap
# If auth_type is ldap, uncomment following ldap_* parameters
## LDAP server address
ldap_url = ldap://127.0.0.1:389
## Bind dn to identify the search
ldap_bind_dn =
# example:
# ldap_bind_dn = cn=admin,dc=directory,dc=fsf,dc=org
## The bind password
ldap_bind_pass =
# example:
# ldap_bind_pass = toor
## Base dn to make queries of users
ldap_user_base_dn = ou=users,dc=yunohost,dc=org
# example:
# ldap_user_base_dn = ou=Users,dc=directory,dc=fsf,dc=org
## Attribute name of user record who contain user login (email)
ldap_login_attribute = mail
## Attribute for default name of new user from ldap
ldap_name_attributes = givenName
## TLS usage to communicate with your LDAP server
ldap_tls = False
## User auth token validity in seconds (used to interfaces like web calendars)
; user.auth_token.validity = 604800
## user reset_password token lifetime (default to 900s -> 15 minutes)
; user.reset_password.token_lifetime = 900
## Default profile of created user, valid values are: users, trusted-users, administrators
; user.default_profile = users
## Allow people to register/create an account themselves without authentication.
## The profile of those users will be user.default_profile
; user.self_registration.enabled = False
# The delay in seconds after which a user is considered offline after all
# connections to live messages are closed.
# NOTE: this setting is experimental and may be removed without notice in a
# later version of Tracim.
; user.online_timeout = 10
## enable or disable filter on known user, if True, user cannot see at all informations about
## member with no common space. If False, it can access to these informations.
## This is used by search mechanism for invitation of user in space.
; known_members.filter = True
####
# CUSTOM PROPERTIES
####
## User custom properties: This features allows defining custom instance-global fields on users of this instance.
# See the Tracim settings documentation (available in source code, see "user_custom_properties.md") for more
# information about it.
; user.custom_properties.json_schema_file_path = %(here)s/tracim_backend/templates/user_custom_properties/default/schema.json
; user.custom_properties.ui_schema_file_path = %(here)s/tracim_backend/templates/user_custom_properties/default/ui.json
; user.custom_properties.translations_dir_path = %(here)s/tracim_backend/templates/user_custom_properties/default/locale
## example with user.custom_properties.dir shortcut:
# user.custom_properties.dir = %(here)s/tracim_backend/templates/user_custom_properties/default
# user.custom_properties.json_schema_file_path = %(user.custom_properties.dir)s/schema.json
# user.custom_properties.ui_schema_file_path = %(user.custom_properties.dir)s/ui.json
# user.custom_properties.translations_dir_path = %(user.custom_properties.dir)s/locale
####
# IHM
####
### Website config ###
## title of website, used in email and is part of the title in browsers
; website.title = Tracim
website.title = %(basic_setup.website_title)s
## description of website, used by search engines to display their results
; website.description =
## Custom welcome page displayed during login
## The path of those files is relative to frontend/dist/assets/branding/
## Please read the documentation in doc/branding.md for further information
; website.welcome_page = welcome-simple.html
; website.welcome_page_style = welcome-simple.css
# The following base_url is used for links and icons
# integrated in the email notifcations, it's the frontend config.
; website.base_url = http://localhost:6543
website.base_url = %(basic_setup.website_base_url)s
# paths to usage conditions files (relative to frontend/dist/assets/branding)
# separated by ",", by default there are no usage conditions files.
website.usage_conditions =
### Frontend ###
## if you want to use Tracim API without frontend, change this parameter
; frontend.serve = True
# You can set dist folder of Tracim frontend. By default, system
# will try to get it automatically according to Tracim repository
# organisation.
; frontend.dist_folder_path =
# example:
# frontend.dist_folder_path = /home/user/tracim/frontend/dist
# if you need to add custom javascript code into Tracim, you can use custom toolbox
# feature. You add your javascript in this folder, all content
# of this folder will be serve in /custom_toolbox-assets
# and all javascript ".js" file will be added to index.html file.
; frontend.custom_toolbox_folder_path =
# example:
# frontend.custom_toolbox_folder_path = /tmp/custom_toolbox
# Cache token is used to force browser fetching of static files if Tracim version has changed.
# If you leave frontend.cache_token empty here, Tracim will automatically
# try to get a meaningful value according to context, it will try to
# use last commit hash as cache_token. If your Tracim code is not placed
# in a git repository or git isn't installed on the server, Tracim will use an
# autogenerated uuid. This uuid will change at each restart of Tracim
# You can override predefined cache_token here.
# Leave as empty to let Tracim find automatically cache_token value.
; frontend.cache_token =
# example:
# frontend.cache_token = QmlnIHN1cmljYXRlIGlzIHdhdGNoaW5nIHlvdSAh
### Color ###
# check for color.json file in Tracim, check by default in Tracim parent
# directory of backend.
## you can set a specific file path here
; color.config_file_path =
# example:
# color.config_file_path = /home/user/tracim/color.json
### Webdav ###
# webdav url for client
# url can be extended like localhost/webdav by setting webdav.root_path parameter
# in this case, you have to create your own proxy behind this url.
webdav.base_url = %(website.base_url)s
webdav.ui.enabled = True
### Notifications ###
# Comma-separated events listed in this setting are not displayed in recent activities and notifications to the user.
# Possible events are in the form ENTITY_TYPE.EVENT_TYPE or ENTITY_TYPE.EVENT_TYPE.CONTENT_TYPE where:
# ENTITY_TYPE = user_call | user | workspace | content | mention | workspace_member
# EVENT_TYPE = created | modified | deleted | undeleted
# CONTENT_TYPE = html-document | file | thread | folder | comment
# To include all notifications, use web.notifications.excluded = ""
# To exclude all notification of an entity, you can use wildcard syntax: for example "user.*" for user,
# will exclude those events: user.deleted, user.created, user.modified, user.undeleted...
; web.notifications.excluded = user_call.created, user.*, workspace.modified, workspace.deleted, workspace.undeleted, workspace_member.modified, content.modified, reaction.*, tag.*, content_tag.*
### UI Customization
# These parameters configure the user interface without affecting the backend proper
# Enable the parent space choice when creating a new space from the user interface.
; ui.spaces.creation.parent_space_choice.visible = True
####
# JOB EXECUTION
####
### configuration of potentially lengthy jobs ###
# processing_mode may be sync or async,
# if async is choosen, you need also to run:
# - a custom rq worker (see backend/README.md)
# - a redis server
; jobs.processing_mode = sync
## with async, please also configure redis below
; jobs.async.redis.host = localhost
; jobs.async.redis.port = 6379
# note: redis db name are integer (by default 16 database are available from 0 to 15 db)
; jobs.async.redis.db = 0
####
# EMAIL-COMMON
####
# Require that every users have an email address associated with their account.
# If disabled, users will be allowed to have accounts without an email address. In this case, the username is mandatory.
; email.required = True
####
# EMAIL-NOTIFICATION
####
## send some notification when user make specific action in Tracim
; email.notification.activated = False
## you can enable or disable if invited user to space will be notified
## on this space by default.
## NB: new users will not being notified until they login to Tracim a first time
; email.notification.enabled_on_invitation = True
# You can enable notification-specific logs using the 'tracim_email_notification' logger.
### SMTP ###
email.notification.smtp.server = localhost
email.notification.smtp.port = 25
; email.notification.smtp.user =__APP__@__DOMAIN__
; email.notification.smtp.password =
# configuration example:
# email.notification.smtp.server = your_smtp_server
# email.notification.smtp.port = 25
# email.notification.smtp.user = your_smtp_user
# email.notification.smtp.password = your_smtp_password
# enable implicit ssl if you are using implicit smtp with encryption port like 465
# by default, Tracim will try to use explicit smtp encryption using starttls, and unencrypted
# connection as fallback.
; email.notification.smtp.use_implicit_ssl = False
### Headers ###
; email.notification.from.default_label = Tracim Notifications
# Note: items between {} are variable names. Do not remove / rename them
# email notifications can be sent with the user_id added as an identifier
# this way email clients like Thunderbird will be able to distinguish
# notifications generated by a user or another one. 'content_id' for example is
# needed in both 'reply_to' and 'references' header pattern
# to have email_reply feature working correctly.
# header for from, reply-to and references headers.
# those allow to set one variable only one time in email pattern, this kind
# of pattern with multiple variable will not work correctly:
# reply+{content_id}{content_id}@domainname.tld
## valid variable is 'user_id' for 'from' header:
; email.notification.from.email =
# example of recommanded pattern (for 'from' header):
# email.notification.from.email = noreply+{user_id}@domainname.tld
## valid variable is 'content_id' for 'reply_to' header:
; email.notification.reply_to.email =
# tagging reply_to header of email with content_id is needed for working
# email_reply feature
# example of recommanded pattern (for 'reply_to' header):
# email.notification.reply_to.email = reply+{content_id}@domainname.tld
# email.notification.reply_to.email = {content_id}@reply.domainname.tld
# email.notification.reply_to.email = reply+cid{content_id}@domainname.tld
## valid variable is 'content_id' for 'references' header:
; email.notification.references.email =
# tagging reference header of email with content_id is nice to have
# all modification to a same content in a same email client thread
# Note: reference doesn't need to be an existing email account but should
# be a email like string.
# example of recommanded pattern (for 'references' header):
# email.notification.references.email = thread+{content_id}@domainname.tld
# emails subjects:
; email.notification.content_update.subject = [{website_title}] [{workspace_label}] {content_label} ({content_status_label})
; email.notification.created_account.subject = [{website_title}] Someone created an account for you
; email.notification.share_content_to_emitter.subject = [{website_title}] You shared "{content_filename}" with {nb_receivers} people
; email.notification.share_content_to_receiver.subject = [{website_title}] {emitter_name} shared the file "{content_filename}" with you
; email.notification.upload_permission_to_emitter.subject = [{website_title}] You invited {nb_receivers} people to upload files on "{workspace_name}"
; email.notification.upload_permission_to_receiver.subject = {emitter_name} invited you to upload files on "{website_title}"
### Templates ###
# emails templates:
; email.notification.content_update.template.html = %(here)s/tracim_backend/templates/mail/content_update_body_html.mak
; email.notification.created_account.template.html = %(here)s/tracim_backend/templates/mail/created_account_body_html.mak
; email.notification.reset_password_request.template.html = %(here)s/tracim_backend/templates/mail/reset_password_body_html.mak
; email.notification.share_content_to_emitter.template.html = %(here)s/tracim_backend/templates/mail/shared_content_to_emitter_body_html.mak
; email.notification.share_content_to_receiver.template.html = %(here)s/tracim_backend/templates/mail/shared_content_to_receiver_body_html.mak
; email.notification.upload_permission_to_emitter.template.html = %(here)s/tracim_backend/templates/mail/upload_permission_to_emitter_body_html.mak
; email.notification.upload_permission_to_receiver.template.html = %(here)s/tracim_backend/templates/mail/upload_permission_to_receiver_body_html.mak
; email.notification.new_upload_event.template.html = %(here)s/tracim_backend/templates/mail/new_upload_event_body_html.mak
# example with shortcut for template_dir path:
; email.template_dir =
# email.template_dir = %(here)s/tracim_backend/templates/mail
# email.notification.content_update.template.html = %(email.template_dir)s/content_update_body_html.mak
# email.notification.created_account.template.html = %(email.template_dir)s/created_account_body_html.mak
# email.notification.reset_password_request.template.html = %(email.template_dir)s/reset_password_body_html.mak
# email.notification.share_content_to_emitter.template.html = %(email.template_dir)s/shared_content_to_emitter_body_html.mak
# email.notification.share_content_to_receiver.template.html = %(email.template_dir)s/shared_content_to_receiver_body_html.mak
# email.notification.upload_permission_to_emitter.template.html = %(email.template_dir)s/upload_permission_to_emitter_body_html.mak
# email.notification.upload_permission_to_receiver.template.html = %(email.template_dir)s/upload_permission_to_receiver_body_html.mak
# email.notification.new_upload_event.template.html = %(email.template_dir)s/new_upload_event_body_html.mak
####
# EMAIL-REPLY
####
# Email reply configuration:
# Reply by email feature: allow user to answer directly to Tracim in reply
# to notification.
# This need api.key with non-empty value
# This feature need to run mail_fetcher daemons.
# more info in README (Run daemons according to your config)
; email.reply.activated = False
### IMAP ###
# Tracim email reply feature will read all mails in following IMAP,
# to be able to transform email responses into Tracim app comments.
; email.reply.imap.server =
; email.reply.imap.port =
; email.reply.imap.user =
; email.reply.imap.password =
# imap folder where email are retrieved for email fetcher,
# valid name for inbox is INBOX. You need to set an existing directory.
# you can use "INBOX/tracim_reply" for tracim_reply subdir, or directly "tracim_reply" if you don't use subdir.
# to use this properly with a different value than INBOX,
# you probably need to add rules to automatically move the new mail
# to the correct dir.
; email.reply.imap.folder = INBOX
; email.reply.imap.use_ssl = True
# example:
# email.reply.imap.server = your_imap_server
# email.reply.imap.port = 993
# email.reply.imap.user = your_imap_user
# email.reply.imap.password = your_imap_password
# IMAP IDLE feature is for real-time notifications (its not necessary to use function send & receive)
# if this option is available in your imap server, change this parameter to True
; email.reply.imap.use_idle = False
### Connection ###
## Delay in seconds for re-new connection
; email.reply.connection.max_lifetime = 600
## Delay in seconds between each check
; email.reply.check.heartbeat = 60
### Parsing ###
; email.reply.use_html_parsing = True
; email.reply.use_txt_parsing = True
### Lock ###
# Lockfile path is required for email_reply feature,
# it's just an empty file use to prevent concurrent access to imap unseen mail
; email.reply.lockfile_path = %(here)s/email_fetcher.lock
####
# WEBDAV
####
### Main Webdav Config ###
## webdav server hostname listen
webdav.listen = localhost:3030
## default root of webdav service
## this params need to be modified in case of using webdav with proxy
## if you want for example that path /webdav give access to webdav
webdav.root_path = /webdav
### Technical Webdav configuration ###
## wsgidav block size in bytes
; webdav.block_size = 8192
## wsgidav verbose level
## 0 - quiet
## 1 - no output (excepting application exceptions)
## 2 - warnings and errors only
## 3 - show single line request summaries (HTTP logging)
## 4 - show additional events
## 5 - show full request/response header info (HTTP Logging)
## request body and GET response bodies not shown
; webdav.verbose.level = 1
### Webdav HTML dir browser ###
## Render HTML listing for GET requests on collections
; webdav.dir_browser.enabled = True
## Raw HTML code, appended as footer,
## if not set, let Tracim created his own footer.
; webav.dir_browser.footer =
# example:
# webdav.dir_browser.footer = Just another footer
####
# CALDAV (Radicale)
####
# This feature require application "agenda" in "app.enabled"
### Radicale Proxy config ##
## path to Tracim radicale server, usually at localhost:port
; caldav.radicale_proxy.base_url = http://localhost:5232
### Radicale config ###
## those params are same as in config file of radicale but syntax
## is different.
## use syntax:
## ```
## caldav.radicale.section.param_name = value
## ```
## instead of radicale.ini syntax:
## ```
## [section]
## param_name = value
## ```
caldav.radicale.server.hosts = localhost:5232
## To make Tracim work, we need to disable auth and rights.
caldav.radicale.auth.type = none
caldav.radicale.rights.type = tracim_backend.radicale_plugins.allow_all_access_rights
## We do not need radicale web ui
caldav.radicale.web.type = none
## for Tracim we do use file storage.
caldav.radicale.storage.type = multifilesystem
; caldav.radicale.storage.filesystem_folder = %(here)s/radicale_storage
caldav.radicale.storage.filesystem_folder = %(basic_setup.caldav_storage_dir)s
# CORS config for radicale
caldav.radicale.headers.Access-Control-Allow-Origin = *
caldav.radicale.headers.Access-Control-Allow-Methods = GET, POST, OPTIONS, PROPFIND, PROPPATCH, REPORT, PUT, MOVE, DELETE, LOCK, UNLOCK
caldav.radicale.headers.Access-Control-Allow-Headers = User-Agent, Authorization, Content-type, Depth, If-match, If-None-Match, Lock-Token, Timeout, Destination, Overwrite, X-client, X-Requested-With, Prefer
caldav.radicale.headers.Access-Control-Expose-Headers = Etag
# in Tracim's Frontend, when creating a new event, the description (note) of the event will be pre-filled with the content
# of the file given in the following parameter. Leave empty if you don't want any pre-filling.
; caldav.pre_filled_event.description_file_path =
## example:
# caldav.pre_filled_event.description_file_path = %(here)s/tracim_backend/templates/pre-filled_agenda_event/test/description.txt
####
# SEARCH (ElasticSearch)
####
# choose search engine to use, available value are: simple, elasticsearch.
# simple need nothing more than Tracim but features are limited,
# elasticsearch is more effective but need an elasticsearch server.
; search.engine = simple
# elasticsearch configuration
; search.elasticsearch.host = localhost
; search.elasticsearch.port = 9200
# global elasticsearch timeout in seconds
; search.elasticsearch.request_timeout = 60
# prefix of the index aliases that will be used to store Tracim users, contents and workspaces for searching
; search.elasticsearch.index_alias_prefix =
# example:
# search.elasticsearch.index_alias_prefix = my-tracim
# template_name for all created indices. Currently only {index_alias} and {date} variable are usable.
# be careful this template is used to find all indices to delete with tracimcli search delete command
; search.elasticsearch.index_pattern_template = {index_alias}-{date}
# if you use ingest mode in elasticsearch, you can enable file content ingest
# for search
; search.elasticsearch.use_ingest = False
# define mimetypes to be plain-text indexed. List of mimetypes, separated by a coma ",".
# if set to empty, index documents of any mimetype:
; search.elasticsearch.ingest.mimetype_whitelist =
# example:
# search.elasticsearch.ingest.mimetype_whitelist = text/markdown,text/plain
# exclude mimetypes from plain-text indexation. If a mimetype is both in whitelist and blacklist, it will be blacklisted.
# if set to empty, do nothing. Default value is empty, meaning no blacklist:
; search.elasticsearch.ingest.mimetype_blacklist =
# example:
# search.elasticsearch.ingest.mimetype_blacklist = application/gzip,application/zip
# add size limit (in bytes) for elasticsearch ingest activation
# if file content like a pdf of a content type file is bigger than the limit, it's content will
# not be indexed using ingest mode.
# default value to 52428800 = 50Mo
; search.elasticsearch.ingest.size_limit = 52428800
####
# Collaborative Document Edition (Collabora, etc)
####
# This feature require application "collaborative_document_edition" in "app.enabled"
# software used for collaborative document_edition
; collaborative_document_edition.software =
# "collabora" software value give support for
# both CollaboraOnline and LibreofficeOnline, example:
# collaborative_document_edition.software = collabora
# list of extensions for which online edition will be provided.
# This list is used to filter the extensions returned by the collaborative edition software.
# It is also used to filter the list of template files.
# If empty (which is the default value),no filtering is done.
; collaborative_document_edition.enabled_extensions =
# collaborative_document_edition.enabled_extensions = odt,ods
# base url where collabora server exist
; collaborative_document_edition.collabora.base_url =
# example:
# collaborative_document_edition.collabora.base_url = http://localhost:9980
# template dir for collaborative document edition:
; collaborative_document_edition.file_template_dir = %(here)s/tracim_backend/templates/open_documents
####
# Translation service
####
# This feature provides comments and html-documents translation by using a third-party translation service
; translation_service.enabled = False
## Translation service target languages that will be proposed in Tracim's interface
# It is a comma-separated list of <ISO-639-1 language code>:<Language string to display> pairs.
# The string can use any UTF-8 character.
; translation_service.target_languages = en:English,fr:Français,pt:Português,de:Deutsch,ar:العربية
# example:
# translation_service.target_languages = fr:Français,ar:العربية,ja:日本語
## Translation service timeout in seconds.
# This timeout will be applied to each translation request.
; translation_service.timeout = 0
# example:
# translation_service.timeout = 20
## Translation provider, currently only "systran" is supported
; translation_service.provider =
# example:
# translation_service.provider = systran
## Systran translation config parameters
; translation_service.systran.api_url =
; translation_service.systran.api_key =
# example:
# translation_service.systran.api_url = https://api-translate.systran.net
# translation_service.systran.api_key = your-systran-api-key
## all next lines are not directly concerned by syntax explain in beggining of this file.
####
# Call service
####
# This feature allows to call other users by using a third-party call service.
; call.enabled = False
## Call provider, currently only "jitsi_meet" is supported
; call.provider =
# example:
# call.provider = jitsi_meet
## Jitsi Meet configuration parameters
; call.jitsi_meet.url =
# example:
# call.jitsi_meet.url = https://meet.jit.si
## Time (in seconds) before the call is considered unanswered
; call.unanswered_timeout = 30
# example: timeout after 60s
# call.unanswered_timeout = 60
##############################
# SPECIFIC CONFIG FOR WEBAPP #
##############################
### WEB REST API specific config ###
# Rest API running pyramid framework
[pipeline:main]
pipeline = tracim_web
[app:tracim_web]
use = egg:tracim_backend
### pyramid config ###
pyramid.reload_templates = True
pyramid.debug_authorization = False
pyramid.debug_notfound = False
pyramid.debug_routematch = False
pyramid.default_locale_name = en
## More info here:
## https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/i18n.html#localization-deployment-settings
### pyramid optionals plugins ###
# required plugin are imported directly in Tracim source code,
# for example:
# ```
# pyramid.includes =
# pyramid_debugtoolbar
# ```
# WARNING: pyramid_debugtoolbar won't work in Tracim's official docker image (multiple problems of multiprocess and reverse-proxy).
[pipeline:webdav]
pipeline = tracim_webdav
[app:tracim_webdav]
use = egg:tracim_backend#webdav
[pipeline:caldav]
pipeline = tracim_caldav
[app:tracim_caldav]
use = egg:tracim_backend#caldav
[server:main]
use = egg:waitress#main
listen = %(basic_setup.listen)s
[server:webdav]
use = egg:waitress#main
listen = %(webdav.listen)s
[server:caldav]
use = egg:waitress#main
listen = %(caldav.radicale.server.hosts)s
######################
# DATABASE MIGRATION #
######################
[alembic]
## path to migration scripts
script_location = tracim_backend/migration
## template used to generate migration files
; file_template = %%(rev)s_%%(slug)s
# timezone to use when rendering the date
# within the migration file as well as the filename.
# string value is passed to dateutil.tz.gettz()
## leave blank for localtime
; timezone =
## max length of characters to apply to the "slug" field
; truncate_slug_length = 40
# set to 'True' to run the environment during
# the 'revision' command, regardless of autogenerate
; revision_environment = False
# set to 'True' to allow .pyc and .pyo files without
# a source .py file to be detected as revisions in the
# versions/ directory
; sourceless = False
# version location specification; this defaults to migrate/versions.
# When using multiple version directories,
# initial revisions must be specified with --version-path
; version_locations = %(here)s/bar %(here)s/bat migrate/versions
# the output encoding used when revision files
# are written from script.py.mako
; output_encoding = utf-8
###########
# LOGGERS #
###########
## more info here:
## https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html
## level possibilities
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither (Recommended for production systems.)
### LOGGERS ###
[loggers]
keys = root, tracim, sqlalchemy, alembic, hapic
# add Tracim_email_notification logfile
# this need to add tracim_email_notification handler and tracim_email_notification formatter
# example:
# keys = root, tracim, sqlalchemy, alembic, hapic, tracim_email_notification
[logger_root]
level = INFO
handlers = console
[logger_tracim]
level = DEBUG
handlers =
qualname = tracim
[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine
[logger_alembic]
level = INFO
handlers =
qualname = alembic
[logger_hapic]
level = DEBUG
handlers =
qualname = hapic
[logger_tracim_email_notification]
level = INFO
handlers = tracim_email_notification
qualname = tracim_email_notification
propagate = 0
### FORMATTER ###
# colored log formatter for console (do not work properly with file)
# this need coloredlog python package, you can install it in venv
# with 'pip install colorlog'
[formatters]
keys = generic
## colored log format (need colorlog)
# keys = color
[formatter_color]
## use utc based date format:
class=tracim_backend.lib.utils.logger.ColoredUTCFormatter
## alternative date: use normal current date (localized):
# class=colorlog.ColoredFormatter
format = %(asctime)s %(log_color)s%(levelname)-5.5s %(reset)s[%(name)s:%(lineno)s][%(threadName)s] %(log_color)s%(message)s
datefmt = %Y-%m-%d %H:%M:%S
[formatter_generic]
## use utc based date format:
class=tracim_backend.lib.utils.logger.StandardUTCFormatter
## alternative date: use normal current date (localized):
# class=logging.Formatter
format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s
datefmt = %Y-%m-%d %H:%M:%S
[formatter_tracim_email_notification]
## use utc based date format:
class=tracim_backend.lib.utils.logger.StandardUTCFormatter
## alternative date: use normal current date (localized)
# class=logging.Formatter
format = %(asctime)s %(network)s %(action)s %(recipient)s %(subject)s %(message)s
datefmt = %Y-%m-%d %H:%M:%S
### HANDLERS ###
[handlers]
keys = console
# use file log instead:
# keys = logfile
# add tracim_email_notification_handler
# this logger is useful to log when notification is prepared
# ( for email: email is build)
# and when notification is send (for email: email is send):
# keys = console, tracim_email_notification
### Console log ###
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
# colored console log (need colorlog python package):
# formatter = color
### Rotated file log ###
[handler_logfile]
class=handlers.RotatingFileHandler
level=NOTSET
# file name = tracim.log (created in current dir)
# max log size = 10Mo
# number of max log file = 5
args=('tracim.log','a',10*1024*1024,5)
formatter=generic
# file log for tracim_email_notification
[handler_tracim_email_notification]
class=FileHandler
level=INFO
args=('tracim_email_notification.log','a')
formatter=tracim_email_notification