· 5 years ago · Mar 09, 2021, 09:14 AM
1######################
2# Tracim Config File #
3######################
4
5## Configuration
6# Parameters can be defined via environment variables or in the config file.
7# Environment parameters are used in priority if a variable is defined in both.
8
9## File Syntax
10# Comments start by `;` or `#`.
11# In the sample config file:
12# - `;` commented lines are used to indicate the default values used by Tracim;
13# - `#` commented lines are used for comments/examples.
14# Boolean values can be `True` or `False`
15# All parameters starting with `basic_setup` can be used as variables in other parameters.
16# For simple needs they are all you need to customize.
17
18## Special Parameter
19# The syntax "%(here)s" is automatically replaced by the directory of the config file.
20# If you do use it, please note that your config file directory may vary depending where you decide
21# to place your config file.
22
23## GENERAL TRACIM config:
24# These config are common for all app: REST API, Webdav, etc...
25
26[DEFAULT]
27
28###############
29# BASIC SETUP #
30###############
31
32# easy setup (shortcut) for setting most common config
33# search for "%(param)s" to check where those param are used and why
34
35## global info (need for email and links)
36basic_setup.website_title = Tracim
37# public address of tracim known by tracim (pushpin proxy-address)
38basic_setup.website_base_url = http://localhost:7999
39# listened host:port of tracim web
40basic_setup.listen = localhost:6543
41## storage path/connection
42basic_setup.sqlalchemy_url = sqlite:///%(here)s/tracim.sqlite
43basic_setup.uploaded_files_storage_type = local
44basic_setup.uploaded_files_storage_path = %(here)s/depot
45basic_setup.caldav_storage_dir = %(here)s/radicale_storage
46basic_setup.preview_cache_dir = %(here)s/previews
47basic_setup.sessions_data_root_dir = %(here)s
48
49## secret
50# This is needed for some feature like reply by email
51basic_setup.api_key =
52basic_setup.session_secret = change_this_value_please!
53
54##################
55# ADVANCED SETUP #
56##################
57
58####
59# CORE
60####
61
62# hapic debug mode: return python traceback of error
63; debug = False
64
65
66### Lang ###
67## default lang used in backend if user doesn't provided any lang.
68# Available parameter: en, fr, pt
69; default_lang = en
70
71### Apps ###
72
73## app enabled explicit list:
74# this allow you to explictly disable default app or enabled beta app now
75# already added to default list.
76# This parameter is a list of app slug separated by ',' char.
77# Not exhaustive list of available apps:
78# - "content/thread" -> thread/topic/discussion: allow to discuss about one
79# subject.
80# - content/file -> allow to upload all type of file like .pdf, .odt, .jpg, etc
81# - content/html-document -> allow to work on a standard html-based document
82# which is editable through Tracim.
83# - content/folder -> allow to put content into folder.
84# - agenda -> add caldav agenda feature (specific process need to be runned)
85# - collaborative_document_edition -> add support for collaborative document edition,
86# add support for collaborative edition server like collabora/libreofficeOnline.
87# - share_content -> allow user to share Tracim content with external user
88# - upload_permission -> allow external with permission to upload some file in a space.
89# - gallery -> add gallery app in Tracim
90# default app.enabled config explicit list config:
91; app.enabled = contents/thread,contents/file,contents/html-document,contents/folder,agenda,share_content,upload_permission,gallery
92# With all apps (add collaborative document edition):
93# app.enabled = contents/thread,contents/file,contents/html-document,contents/folder,agenda,collaborative_document_edition,share_content,upload_permission,gallery
94
95### Live Messages ###
96# control_uri for GRIP protocol reverse-proxy (PushPin)
97# this is the base url used for publishing new events to reverse-proxy.
98; live_messages.control_zmq_uri = tcp://localhost:5563
99# do tracim block until publishing is complete or not
100# by default it will be False if jobs.processing_mode is sync and True if processing_mode is async
101# as sync publishing is done during the HTTP request
102; live_messages.blocking_publish = False
103
104### Plugins ###
105# if provided, this allow Tracim to load package from this dir and if package follow
106# the convention "tracim_backend_{plugin_name}", hooks provided inside the package will
107# be loaded, allowing to add new feature to an existing Tracim.
108; plugin.folder_path = %(here)s/plugins
109
110### Workspace ###
111# list of access_type allowed for new workspaces. In Tracim; these values for access_type are available:
112# - confidential: not visible publicly, access only by invitation workspace_manager/admin
113# - on_request: publicly visible, access by invitation or request with validation by workspace manager/admin)
114# - open: publicly visible and access by invitation or request without validation
115; workspace.allowed_access_types = confidential,on_request,open
116# example:
117# workspace.allowed_access_types = confidential
118
119# When a user joins a space, messages from events that happened before are added to the user's activity feed.
120# 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.
121# 0 will completely disable the feature, leading to empty space activity feed when joining a space.
122# -1 means no limit.
123workspace.join.max_messages_history_count = -1
124
125## CORS Special config
126# you can override access control allowed origin here with list of comma separated
127# base_url, by default only website.base_url and api.base_url are allowed
128; cors.access-control-allowed-origin =
129# example:
130# cors.access-control-allowed-origin = http://localhost:6543,http://localhost:8090
131
132## Anonymized User
133# You can set default display name for anonymized user.
134; default_anonymized_user_display_name = "Deleted user"
135
136## Build Version
137# If you leave build_version empty or unsetted here, Tracim will automatically
138# try to get a meaningful value according to context, it will try to
139# use last commit tag or hash as build_version. If your Tracim code is not placed
140# in a git repository or git isn't installed on the server, default value will be
141# "unknown".
142# You can override predefined build version.
143# Leave as empty to let Tracim find automatically build_version value.
144; build_version =
145
146####
147# Content Security Policy
148#
149# Tracim can generate a content security policy header that only
150# enables script execution from Tracim frontend to avoid XSS attacks.
151# It also forbids <object> tags.
152# This behavior can be tuned by using "additional_directives" if some other
153# scripts/resources are needed for your installation or usage.
154# By default the header is generated.
155####
156# Enable or disable the content security policy header
157; content_security_policy.enabled = True
158# You can set this to an URI where browsers will report CSP failures.
159# Multiple URIs are possible by separating them with spaces (the config value is added as it is)
160# They must be secured by a valid SSL/TLS connection and certificate
161# Example: content_security_policy.report_uri = https://www.myreporturi.com https://www.another-reporturi.org
162; content_security_policy.report_uri =
163# If set to True, the generated header will be Content-Security-Policy-Report-Only.
164# Useful to test policy changes before enforcing them
165# If set to true, "report_uri" must also have a valid value.
166; content_security_policy.report_only = False
167# additional directives to tune the CSP header, they are added without any change to the header
168; content_security_policy.additional_directives =
169
170
171####
172# LIMITATION
173####
174
175# limit number of sharespaces any user can be owner, 0 mean not limit, default to 0
176; limitation.sharedspace_per_user = 0
177
178# max upload content length accepted by Tracim for file in bytes
179# by default 0 meaning no limit. 104857600 (100MB) is a good value
180; limitation.content_length_file_size = 0
181# example:
182# limitation.content_length_file_size = 104857600
183
184# max size of all files of a space in bytes
185# by default 0 meaning no limit. 1073741824(1GB) is a good value
186; limitation.workspace_size = 0
187# example:
188# limitation.workspace_size = 1073741824
189
190## default allowed space for new user if not provided in bytes, 0 mean no space
191## limit. Limit is on the sum of sizes of owned by user space.
192; limitation.user_default_allowed_space = 0
193
194####
195# STORAGE
196####
197
198### Database ###
199# to set database you need a proper sqlalchemy url, some example with supported
200# database (sqlite, postgresql, mysql/mariadb)
201## sqlite:
202# sqlalchemy.url = sqlite:///%(here)s/tracim.sqlite
203## mysql/mariadb:
204# sqlalchemy.url = mysql+pymysql://user:password@dbhost:dbport/dbname
205## postgresql:
206# sqlalchemy.url = postgresql://user:paswword@dbhost:dbport/dbname?client_encoding=utf8
207# see also for more info:
208# https://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine ##
209; sqlalchemy.url = sqlite:///%(here)s/tracim.sqlite
210sqlalchemy.url = %(basic_setup.sqlalchemy_url)s
211
212### Uploaded files ###
213
214; uploaded_files.storage.storage_name = tracim
215## storage type, can be either "local" (local dir), "memory" (ram storage) or "s3" (remote S3 compatible storage)
216uploaded_files.storage.storage_type = %(basic_setup.uploaded_files_storage_type)s
217
218## This is where the files uploaded by users will be stored if storage_type is "local"
219uploaded_files.storage.local.storage_path = %(basic_setup.uploaded_files_storage_path)s
220
221## S3 credentials (requires the boto3 packaqe):
222; uploaded_files.storage.s3.access_key_id =
223; uploaded_files.storage.s3.secret_access_key =
224; uploaded_files.storage.s3.bucket =
225; uploaded_files.storage.s3.region_name =
226## S3 canned ACL policy can be either "private" or "public-read"
227; uploaded_files.storage.s3.policy =
228## use specific s3 storage class
229; uploaded_files.storage.s3.storage_class =
230## allow to define other S3 provided than AWS
231; uploaded_files.storage.s3.endpoint_url =
232# permit to store file under specific prefix, trailing slash prefix like "dirname/" permit to store in subdirectory
233; uploaded_files.storage.s3.prefix =
234
235
236
237
238### Preview ###
239## preview cache directory
240; preview_cache_dir = %(here)s/previews
241preview_cache_dir = %(basic_setup.preview_cache_dir)s
242
243## You can parametrized allowed jpg preview dimension list, if not set, default
244## is 256x256. First {width}x{length} items is default preview dimensions.
245## All items should be separated by a coma.
246; preview.jpg.allowed_dims = 256x256
247# examples with multiples values:
248# preview.jpg.allowed_dims = 256x256,512x512,1024x1024
249## Preview dimensions can be set as restricted. If set as True, access
250## endpoint to get any other preview dimensions than allowed_dims will
251## return error
252; preview.jpg.restricted_dims = False
253
254### Session ###
255
256# Warning! if you decide to change the session parameters, we strongly encourage you to delete existing sessions
257# in order to avoid security issues. See the Tracim settings documentation (available in source code, see "settings.md").
258
259### pyramid_beaker parameters ###
260
261# session.type = file
262# needed for "file" storage config :
263; session.data_dir = %(here)s/sessions_data
264# session.data_dir = %(basic_setup.sessions_data_root_dir)s/sessions_data
265# needed for many session storage type, but not for file (leave as empty for file)
266# session.url =
267
268## "Redis" storage config sample:
269session.type = ext:redis
270# note: redis db name are integer (by default 16 database are available from 0 to 15 db)
271session.url = redis://localhost:6379/0
272
273; session.lock_dir = %(here)s/sessions_data
274session.lock_dir = %(basic_setup.sessions_data_root_dir)s/sessions_lock
275session.key = session_key
276session.secret = %(basic_setup.session_secret)s
277session.save_accessed_time = True
278## Delay in seconds
279session.cookie_expires = 604800
280session.timeout = 604800
281session.cookie_on_exception = True
282# enable or disable http-only for cookie, by default set as True. Disable it only
283# if you know what you're doing as this is less secure.
284session.httponly = True
285# enable or disable secure for cookie, by default set as False. We strongly
286# recommend you to set it a True if you are using https.
287session.secure = True
288
289####
290# AUTH
291####
292
293### API KEY AUTH ###
294# Api key auth allow to access to any authenticated user using
295# 'Tracim-Api-Key'(secret share between client and Tracim)
296# and 'Tracim-Api-Login' (mail of existing user) headers.
297
298## Api key auth is disabled by default,
299## you should set a not-null value to api.key to enable it:
300; api.key =
301api.key = %(basic_setup.api_key)s
302## base url of the backend API, default to same as website.base_url
303; api.base_url =
304
305### Remote User Auth ###
306# remote user auth give authorized access to user using a simple header with
307# email of user, if user does not exist, new user will be created.
308# This allow to delegate auth mechanism to webserver.
309# this a true auth mechanism like internal or ldap,
310# this mean user created this way will be attached to this mechanism.
311
312## Remote user header should be a CGI env var.
313## most common value is "REMOTE_USER".
314## You can also directly use HTTP header instead of standard CGI env var
315## using "HTTP_" CGI env var which are HTTP header
316## but be careful about spoofing, you should be sure that no-one can set
317## header and pretend to be anyone. Only trusted server should be able to
318## set remote_user_header.
319## remote user auth is disabled by default,
320## you should set a not-null value to auth_remote_header to enable it:
321; remote_user_header =
322
323## Auth type list (internal or ldap), can be a list of item separated by ','
324## and ordered by priority
325## auth_type 'remote' is not allowed there, set remote_auth_header.
326; auth_types = internal
327# If auth_type is ldap, uncomment following ldap_* parameters
328## LDAP server address
329; ldap_url = ldap://localhost:389
330## Bind dn to identify the search
331; ldap_bind_dn =
332# example:
333# ldap_bind_dn = cn=admin,dc=directory,dc=fsf,dc=org
334## The bind password
335; ldap_bind_pass =
336# example:
337# ldap_bind_pass = toor
338## Base dn to make queries of users
339; ldap_user_base_dn =
340# example:
341# ldap_user_base_dn = ou=Users,dc=directory,dc=fsf,dc=org
342## Attribute name of user record who contain user login (email)
343; ldap_login_attribute = mail
344## Attribute for default name of new user from ldap
345; ldap_name_attributes = givenName
346## TLS usage to communicate with your LDAP server
347; ldap_tls = False
348
349## User auth token validity in seconds (used to interfaces like web calendars)
350; user.auth_token.validity = 604800
351## user reset_password token lifetime (default to 900s -> 15 minutes)
352; user.reset_password.token_lifetime = 900
353## Default profile of created user, valid values are: users, trusted-users, administrators
354; user.default_profile = users
355
356## enable or disable filter on known user, if True, user cannot see at all informations about
357## member with no common space. If False, it can access to these informations.
358## This is used by search mechanism for invitation of user in space.
359; known_members.filter = True
360
361####
362# CUSTOM PROPERTIES
363####
364
365## User custom properties: This features allows defining custom instance-global fields on users of this instance.
366# See the Tracim settings documentation (available in source code, see "user_custom_properties.md") for more
367# information about it.
368; user.custom_properties.json_schema_file_path = %(here)s/tracim_backend/templates/user_custom_properties/default/schema.json
369; user.custom_properties.ui_schema_file_path = %(here)s/tracim_backend/templates/user_custom_properties/default/ui.json
370; user.custom_properties.translations_dir_path = %(here)s/tracim_backend/templates/user_custom_properties/default/locale
371## example with user.custom_properties.dir shortcut:
372# user.custom_properties.dir = %(here)s/tracim_backend/templates/user_custom_properties/default
373# user.custom_properties.json_schema_file_path = %(user.custom_properties.dir)s/schema.json
374# user.custom_properties.ui_schema_file_path = %(user.custom_properties.dir)s/ui.json
375# user.custom_properties.translations_dir_path = %(user.custom_properties.dir)s/locale
376
377####
378# IHM
379####
380
381### Website config ###
382## title of website, used in email
383; website.title = Tracim
384website.title = Tracim-test
385# The following base_url is used for links and icons
386# integrated in the email notifcations, it's the frontend config.
387; website.base_url = http://localhost:6543
388website.base_url = https://collabship.tameriberg.link
389
390### Frontend ###
391## if you want to use Tracim API without frontend, change this parameter
392; frontend.serve = True
393# You can set dist folder of Tracim frontend. By default, system
394# will try to get it automatically according to Tracim repository
395# organisation.
396; frontend.dist_folder_path =
397# example:
398# frontend.dist_folder_path = /home/user/tracim/frontend/dist
399
400# if you need to add custom javascript code into Tracim, you can use custom toolbox
401# feature. You add your javascript in this folder, all content
402# of this folder will be serve in /custom_toolbox-assets
403# and all javascript ".js" file will be added to index.html file.
404; frontend.custom_toolbox_folder_path =
405# example:
406# frontend.custom_toolbox_folder_path = /tmp/custom_toolbox
407
408# Cache token is used to force browser fetching of static files if Tracim version has changed.
409# If you leave frontend.cache_token empty here, Tracim will automatically
410# try to get a meaningful value according to context, it will try to
411# use last commit hash as cache_token. If your Tracim code is not placed
412# in a git repository or git isn't installed on the server, Tracim will use an
413# autogenerated uuid. This uuid will change at each restart of Tracim
414# You can override predefined cache_token here.
415# Leave as empty to let Tracim find automatically cache_token value.
416; frontend.cache_token =
417# example:
418# frontend.cache_token = QmlnIHN1cmljYXRlIGlzIHdhdGNoaW5nIHlvdSAh
419
420### Color ###
421# check for color.json file in Tracim, check by default in Tracim parent
422# directory of backend.
423## you can set a specific file path here
424; color.config_file_path =
425# example:
426# color.config_file_path = /home/user/tracim/color.json
427
428### Webdav ###
429# webdav url for client
430# url can be extended like localhost/webdav by setting webdav.root_path parameter
431# in this case, you have to create your own proxy behind this url.
432; webdav.base_url = http://localhost:3030
433; webdav.ui.enabled = True
434
435### Notifications ###
436# Comma-separated events listed in this setting are not displayed in notifications to the user.
437# Possible events are in the form ENTITY_TYPE.EVENT_TYPE or ENTITY_TYPE.EVENT_TYPE.CONTENT_TYPE where:
438# ENTITY_TYPE = user | workspace | content | mention | workspace_member
439# EVENT_TYPE = created | modified | deleted | undeleted
440# CONTENT_TYPE = html-document | file | thread | folder | comment
441# To include all notifications, use web.notifications.excluded = ""
442; web.notifications.excluded = user.created, user.modified, user.deleted, user.undeleted, workspace.modified, workspace.deleted, workspace.undeleted, workspace_member.modified, content.modified
443
444####
445# JOB EXECUTION
446####
447
448### configuration of potentially lengthy jobs ###
449# processing_mode may be sync or async,
450# if async is choosen, you need also to run:
451# - a custom rq worker (see backend/README.md)
452# - a redis server
453jobs.processing_mode = sync
454## with async, please also configure redis below
455; jobs.async.redis.host = localhost
456; jobs.async.redis.port = 6379
457# note: redis db name are integer (by default 16 database are available from 0 to 15 db)
458; jobs.async.redis.db = 0
459
460####
461# EMAIL-COMMON
462####
463# Require that every users have an email address associated with their account.
464# If disabled, users will be allowed to have accounts without an email address. In this case, the username is mandatory.
465; email.required = True
466
467####
468# EMAIL-NOTIFICATION
469####
470
471## send some notification when user make specific action in Tracim
472email.notification.activated = True
473## you can enable or disable if invited user to space will be notified
474## on this space by default.
475## NB: new users will not being notified until they login to Tracim a first time
476; email.notification.enabled_on_invitation = True
477# You can enable notification-specific logs using the 'tracim_email_notification' logger.
478
479
480### SMTP ###
481
482
483; email.notification.smtp.server =
484; email.notification.smtp.port =
485; email.notification.smtp.user =
486; email.notification.smtp.password =
487# configuration example:
488# email.notification.smtp.server = your_smtp_server
489# email.notification.smtp.port = 25
490# email.notification.smtp.user = your_smtp_user
491# email.notification.smtp.password = your_smtp_password
492
493# enable implicit ssl if you are using implicit smtp with encryption port like 465
494# by default, Tracim will try to use explicit smtp encryption using starttls, and unencrypted
495# connection as fallback.
496; email.notification.smtp.use_implicit_ssl = False
497
498### Headers ###
499; email.notification.from.default_label = Tracim Notifications
500
501# Note: items between {} are variable names. Do not remove / rename them
502# email notifications can be sent with the user_id added as an identifier
503# this way email clients like Thunderbird will be able to distinguish
504# notifications generated by a user or another one. 'content_id' for example is
505# needed in both 'reply_to' and 'references' header pattern
506# to have email_reply feature working correctly.
507
508# header for from, reply-to and references headers.
509# those allow to set one variable only one time in email pattern, this kind
510# of pattern with multiple variable will not work correctly:
511# reply+{content_id}{content_id}@domainname.tld
512
513
514## valid variable is 'user_id' for 'from' header:
515; email.notification.from.email =
516# example of recommanded pattern (for 'from' header):
517# email.notification.from.email = noreply+{user_id}@domainname.tld
518
519## valid variable is 'content_id' for 'reply_to' header:
520; email.notification.reply_to.email =
521# tagging reply_to header of email with content_id is needed for working
522# email_reply feature
523# example of recommanded pattern (for 'reply_to' header):
524# email.notification.reply_to.email = reply+{content_id}@domainname.tld
525# email.notification.reply_to.email = {content_id}@reply.domainname.tld
526# email.notification.reply_to.email = reply+cid{content_id}@domainname.tld
527
528## valid variable is 'content_id' for 'references' header:
529; email.notification.references.email =
530# tagging reference header of email with content_id is nice to have
531# all modification to a same content in a same email client thread
532# Note: reference doesn't need to be an existing email account but should
533# be a email like string.
534# example of recommanded pattern (for 'references' header):
535# email.notification.references.email = thread+{content_id}@domainname.tld
536
537# emails subjects:
538; email.notification.content_update.subject = [{website_title}] [{workspace_label}] {content_label} ({content_status_label})
539; email.notification.created_account.subject = [{website_title}] Someone created an account for you
540; email.notification.share_content_to_emitter.subject = [{website_title}] You shared "{content_filename}" with {nb_receivers} people
541; email.notification.share_content_to_receiver.subject = [{website_title}] {emitter_name} shared the file "{content_filename}" with you
542; email.notification.upload_permission_to_emitter.subject = [{website_title}] You invited {nb_receivers} people to upload files on "{workspace_name}"
543; email.notification.upload_permission_to_receiver.subject = {emitter_name} invited you to upload files on "{website_title}"
544
545### Templates ###
546
547# emails templates:
548; email.notification.content_update.template.html = %(here)s/tracim_backend/templates/mail/content_update_body_html.mak
549; email.notification.created_account.template.html = %(here)s/tracim_backend/templates/mail/created_account_body_html.mak
550; email.notification.reset_password_request.template.html = %(here)s/tracim_backend/templates/mail/reset_password_body_html.mak
551; email.notification.share_content_to_emitter.template.html = %(here)s/tracim_backend/templates/mail/shared_content_to_emitter_body_html.mak
552; email.notification.share_content_to_receiver.template.html = %(here)s/tracim_backend/templates/mail/shared_content_to_receiver_body_html.mak
553; email.notification.upload_permission_to_emitter.template.html = %(here)s/tracim_backend/templates/mail/upload_permission_to_emitter_body_html.mak
554; email.notification.upload_permission_to_receiver.template.html = %(here)s/tracim_backend/templates/mail/upload_permission_to_receiver_body_html.mak
555; email.notification.new_upload_event.template.html = %(here)s/tracim_backend/templates/mail/new_upload_event_body_html.mak
556
557
558# example with shortcut for template_dir path:
559; email.template_dir =
560# email.template_dir = %(here)s/tracim_backend/templates/mail
561# email.notification.content_update.template.html = %(email.template_dir)s/content_update_body_html.mak
562# email.notification.created_account.template.html = %(email.template_dir)s/created_account_body_html.mak
563# email.notification.reset_password_request.template.html = %(email.template_dir)s/reset_password_body_html.mak
564# email.notification.share_content_to_emitter.template.html = %(email.template_dir)s/shared_content_to_emitter_body_html.mak
565# email.notification.share_content_to_receiver.template.html = %(email.template_dir)s/shared_content_to_receiver_body_html.mak
566# email.notification.upload_permission_to_emitter.template.html = %(email.template_dir)s/upload_permission_to_emitter_body_html.mak
567# email.notification.upload_permission_to_receiver.template.html = %(email.template_dir)s/upload_permission_to_receiver_body_html.mak
568# email.notification.new_upload_event.template.html = %(email.template_dir)s/new_upload_event_body_html.mak
569
570####
571# EMAIL-REPLY
572####
573
574# Email reply configuration:
575# Reply by email feature: allow user to answer directly to Tracim in reply
576# to notification.
577# This need api.key with non-empty value
578# This feature need to run mail_fetcher daemons.
579# more info in README (Run daemons according to your config)
580; email.reply.activated = False
581
582### IMAP ###
583# Tracim email reply feature will read all mails in following IMAP,
584# to be able to transform email responses into Tracim app comments.
585
586; email.reply.imap.server =
587; email.reply.imap.port =
588; email.reply.imap.user =
589; email.reply.imap.password =
590# imap folder where email are retrieved for email fetcher,
591# valid name for inbox is INBOX. You need to set an existing directory.
592# you can use "INBOX/tracim_reply" for tracim_reply subdir, or directly "tracim_reply" if you don't use subdir.
593# to use this properly with a different value than INBOX,
594# you probably need to add rules to automatically move the new mail
595# to the correct dir.
596; email.reply.imap.folder = INBOX
597; email.reply.imap.use_ssl = True
598
599# example:
600# email.reply.imap.server = your_imap_server
601# email.reply.imap.port = 993
602# email.reply.imap.user = your_imap_user
603# email.reply.imap.password = your_imap_password
604
605
606# IMAP IDLE feature is for real-time notifications (its not necessary to use function send & receive)
607# if this option is available in your imap server, change this parameter to True
608; email.reply.imap.use_idle = False
609
610### Connection ###
611## Delay in seconds for re-new connection
612; email.reply.connection.max_lifetime = 600
613## Delay in seconds between each check
614; email.reply.check.heartbeat = 60
615
616### Parsing ###
617; email.reply.use_html_parsing = True
618; email.reply.use_txt_parsing = True
619
620### Lock ###
621# Lockfile path is required for email_reply feature,
622# it's just an empty file use to prevent concurrent access to imap unseen mail
623; email.reply.lockfile_path = %(here)s/email_fetcher.lock
624
625####
626# WEBDAV
627####
628
629### Main Webdav Config ###
630## webdav server hostname listen
631webdav.listen = localhost:3030
632## default root of webdav service
633## this params need to be modified in case of using webdav with proxy
634## if you want for example that path /webdav give access to webdav
635; webdav.root_path = /
636
637### Technical Webdav configuration ###
638## wsgidav block size in bytes
639; webdav.block_size = 8192
640## wsgidav verbose level
641## 0 - quiet
642## 1 - no output (excepting application exceptions)
643## 2 - warnings and errors only
644## 3 - show single line request summaries (HTTP logging)
645## 4 - show additional events
646## 5 - show full request/response header info (HTTP Logging)
647## request body and GET response bodies not shown
648; webdav.verbose.level = 1
649
650### Webdav HTML dir browser ###
651## Render HTML listing for GET requests on collections
652; webdav.dir_browser.enabled = True
653## Raw HTML code, appended as footer,
654## if not set, let Tracim created his own footer.
655; webav.dir_browser.footer =
656# example:
657# webdav.dir_browser.footer = Just another footer
658
659####
660# CALDAV (Radicale)
661####
662
663# This feature require application "agenda" in "app.enabled"
664
665### Radicale Proxy config ##
666## path to Tracim radicale server, usually at localhost:port
667; caldav.radicale_proxy.base_url = http://localhost:5232
668
669### Radicale config ###
670## those params are same as in config file of radicale but syntax
671## is different.
672## use syntax:
673## ```
674## caldav.radicale.section.param_name = value
675## ```
676## instead of radicale.ini syntax:
677## ```
678## [section]
679## param_name = value
680## ```
681
682caldav.radicale.server.host = localhost:5232
683## To make Tracim work, we need to disable auth and rights.
684caldav.radicale.auth.type = None
685caldav.radicale.rights.type = None
686## We do not need radicale web ui
687caldav.radicale.web.type = None
688## for Tracim we do use file storage.
689caldav.radicale.storage.type = multifilesystem
690; caldav.radicale.storage.filesystem_folder = %(here)s/radicale_storage
691caldav.radicale.storage.filesystem_folder = %(basic_setup.caldav_storage_dir)s
692# CORS config for radicale
693caldav.radicale.headers.Access-Control-Allow-Origin = *
694caldav.radicale.headers.Access-Control-Allow-Methods = GET, POST, OPTIONS, PROPFIND, PROPPATCH, REPORT, PUT, MOVE, DELETE, LOCK, UNLOCK
695caldav.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
696caldav.radicale.headers.Access-Control-Expose-Headers = Etag
697
698####
699# SEARCH (ElasticSearch)
700####
701# choose search engine to use, available value are: simple, elasticsearch.
702# simple need nothing more than Tracim but features are limited,
703# elasticsearch is more effective but need an elasticsearch server.
704; search.engine = simple
705# elasticsearch configuration
706; search.elasticsearch.host = localhost
707; search.elasticsearch.port = 9200
708# global elasticsearch timeout in seconds
709; search.elasticsearch.request_timeout = 60
710
711# prefix of the index aliases that will be used to store Tracim users, contents and workspaces for searching
712; search.elasticsearch.index_alias_prefix =
713# example:
714# search.elasticsearch.index_alias_prefix = my-tracim
715
716# template_name for all created indices. Currently only {index_alias} and {date} variable are usable.
717# be careful this template is used to find all indices to delete with tracimcli search delete command
718; search.elasticsearch.index_pattern_template = {index_alias}-{date}
719
720# if you use ingest mode in elasticsearch, you can enable file content ingest
721# for search
722; search.elasticsearch.use_ingest = False
723
724# define mimetypes to be plain-text indexed. List of mimetypes, separated by a coma ",".
725# if set to empty, index documents of any mimetype:
726; search.elasticsearch.ingest.mimetype_whitelist =
727# example:
728# search.elasticsearch.ingest.mimetype_whitelist = text/markdown,text/plain
729
730# exclude mimetypes from plain-text indexation. If a mimetype is both in whitelist and blacklist, it will be blacklisted.
731# if set to empty, do nothing. Default value is empty, meaning no blacklist:
732; search.elasticsearch.ingest.mimetype_blacklist =
733# example:
734# search.elasticsearch.ingest.mimetype_blacklist = application/gzip,application/zip
735
736# add size limit (in bytes) for elasticsearch ingest activation
737# if file content like a pdf of a content type file is bigger than the limit, it's content will
738# not be indexed using ingest mode.
739# default value to 52428800 = 50Mo
740; search.elasticsearch.ingest.size_limit = 52428800
741
742
743####
744# Collaborative Document Edition (Collabora, etc)
745####
746
747# This feature require application "collaborative_document_edition" in "app.enabled"
748
749# software used for collaborative document_edition
750; collaborative_document_edition.software =
751# "collabora" software value give support for
752# both CollaboraOnline and LibreofficeOnline, example:
753# collaborative_document_edition.software = collabora
754
755# base url where collabora server exist
756; collaborative_document_edition.collabora.base_url =
757# example:
758# collaborative_document_edition.collabora.base_url = http://localhost:9980
759
760# template dir for collaborative document edition:
761; collaborative_document_edition.file_template_dir = %(here)s/tracim_backend/templates/open_documents
762
763
764####
765# Translation service
766####
767
768
769# This feature provides comments and html-documents translation by using a third-party translation service
770
771; translation_service.enabled = False
772
773## Translation provider, currently only "systran" is supported
774; translation_service.provider =
775# example:
776# translation_service.provider = systran
777
778## Systran translation config parameters
779; translation_service.systran.api_url =
780; translation_service.systran.api_key =
781# example:
782# translation_service.systran.api_url = https://api-translate.systran.net
783# translation_service.systran.api_key = your-systran-api-key
784
785## all next lines are not directly concerned by syntax explain in beggining of this file.
786
787##############################
788# SPECIFIC CONFIG FOR WEBAPP #
789##############################
790
791### WEB REST API specific config ###
792# Rest API running pyramid framework
793[pipeline:main]
794pipeline = tracim_web
795[app:tracim_web]
796use = egg:tracim_backend
797
798### pyramid config ###
799pyramid.reload_templates = True
800pyramid.debug_authorization = False
801pyramid.debug_notfound = False
802pyramid.debug_routematch = False
803pyramid.default_locale_name = en
804## More info here:
805## https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/i18n.html#localization-deployment-settings
806
807### pyramid optionals plugins ###
808# required plugin are imported directly in Tracim source code,
809# for example:
810# ```
811# pyramid.includes =
812# pyramid_debugtoolbar
813# ```
814
815
816[pipeline:webdav]
817pipeline = tracim_webdav
818[app:tracim_webdav]
819use = egg:tracim_backend#webdav
820
821[pipeline:caldav]
822pipeline = tracim_caldav
823[app:tracim_caldav]
824use = egg:tracim_backend#caldav
825
826[server:main]
827use = egg:waitress#main
828listen = %(basic_setup.listen)s
829
830[server:webdav]
831use = egg:waitress#main
832listen = %(webdav.listen)s
833
834[server:caldav]
835use = egg:waitress#main
836listen = %(caldav.radicale.server.host)s
837######################
838# DATABASE MIGRATION #
839######################
840
841[alembic]
842## path to migration scripts
843script_location = tracim_backend/migration
844
845## template used to generate migration files
846; file_template = %%(rev)s_%%(slug)s
847
848# timezone to use when rendering the date
849# within the migration file as well as the filename.
850# string value is passed to dateutil.tz.gettz()
851## leave blank for localtime
852; timezone =
853
854## max length of characters to apply to the "slug" field
855; truncate_slug_length = 40
856
857# set to 'True' to run the environment during
858# the 'revision' command, regardless of autogenerate
859; revision_environment = False
860
861# set to 'True' to allow .pyc and .pyo files without
862# a source .py file to be detected as revisions in the
863# versions/ directory
864; sourceless = False
865
866# version location specification; this defaults to migrate/versions.
867# When using multiple version directories,
868# initial revisions must be specified with --version-path
869; version_locations = %(here)s/bar %(here)s/bat migrate/versions
870
871# the output encoding used when revision files
872# are written from script.py.mako
873; output_encoding = utf-8
874
875###########
876# LOGGERS #
877###########
878
879## more info here:
880## https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html
881
882## level possibilities
883# "level = INFO" logs SQL queries.
884# "level = DEBUG" logs SQL queries and results.
885# "level = WARN" logs neither (Recommended for production systems.)
886
887### LOGGERS ###
888[loggers]
889keys = root, tracim, sqlalchemy, alembic, hapic
890# add Tracim_email_notification logfile
891# this need to add tracim_email_notification handler and tracim_email_notification formatter
892# example:
893# keys = root, tracim, sqlalchemy, alembic, hapic, tracim_email_notification
894
895[logger_root]
896level = INFO
897handlers = console
898
899[logger_tracim]
900level = DEBUG
901handlers =
902qualname = tracim
903
904[logger_sqlalchemy]
905level = WARN
906handlers =
907qualname = sqlalchemy.engine
908
909[logger_alembic]
910level = INFO
911handlers =
912qualname = alembic
913
914[logger_hapic]
915level = DEBUG
916handlers =
917qualname = hapic
918
919[logger_tracim_email_notification]
920level = INFO
921handlers = tracim_email_notification
922qualname = tracim_email_notification
923propagate = 0
924
925### FORMATTER ###
926# colored log formatter for console (do not work properly with file)
927# this need coloredlog python package, you can install it in venv
928# with 'pip install colorlog'
929
930[formatters]
931keys = generic
932## colored log format (need colorlog)
933# keys = color
934
935[formatter_color]
936## use utc based date format:
937class=tracim_backend.lib.utils.logger.ColoredUTCFormatter
938## alternative date: use normal current date (localized):
939# class=colorlog.ColoredFormatter
940format = %(asctime)s %(log_color)s%(levelname)-5.5s %(reset)s[%(name)s:%(lineno)s][%(threadName)s] %(log_color)s%(message)s
941datefmt = %Y-%m-%d %H:%M:%S
942
943[formatter_generic]
944## use utc based date format:
945class=tracim_backend.lib.utils.logger.StandardUTCFormatter
946## alternative date: use normal current date (localized):
947# class=logging.Formatter
948format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s
949datefmt = %Y-%m-%d %H:%M:%S
950
951[formatter_tracim_email_notification]
952## use utc based date format:
953class=tracim_backend.lib.utils.logger.StandardUTCFormatter
954## alternative date: use normal current date (localized)
955# class=logging.Formatter
956format = %(asctime)s %(network)s %(action)s %(recipient)s %(subject)s %(message)s
957datefmt = %Y-%m-%d %H:%M:%S
958
959### HANDLERS ###
960[handlers]
961keys = console
962# use file log instead:
963# keys = logfile
964# add tracim_email_notification_handler
965# this logger is useful to log when notification is prepared
966# ( for email: email is build)
967# and when notification is send (for email: email is send):
968# keys = console, tracim_email_notification
969
970### Console log ###
971[handler_console]
972class = StreamHandler
973args = (sys.stderr,)
974level = NOTSET
975formatter = generic
976# colored console log (need colorlog python package):
977# formatter = color
978
979### Rotated file log ###
980[handler_logfile]
981class=handlers.RotatingFileHandler
982level=NOTSET
983# file name = tracim.log (created in current dir)
984# max log size = 10Mo
985# number of max log file = 5
986args=('tracim.log','a',10*1024*1024,5)
987formatter=generic
988
989# file log for tracim_email_notification
990[handler_tracim_email_notification]
991class=FileHandler
992level=INFO
993args=('tracim_email_notification.log','a')
994formatter=tracim_email_notification
995