/** * THIS IS THE SETTINGS FILE THAT IS COPIED INSIDE THE DOCKER CONTAINER. * * By default, some runtime customizations are supported (see the * documentation). * * If you need more control, edit this file and rebuild the container. */ /* * This file must be valid JSON. But comments are allowed * * Please edit settings.json, not settings.json.template * * Please note that starting from Etherpad 1.6.0 you can store DB credentials in * a separate file (credentials.json). * * * ENVIRONMENT VARIABLE SUBSTITUTION * ================================= * * All the configuration values can be read from environment variables using the * syntax "${ENV_VAR}" or "${ENV_VAR:default_value}". * * This is useful, for example, when running in a Docker container. * * EXAMPLE: * "port": "${PORT:9001}" * "minify": "${MINIFY}" * "skinName": "${SKIN_NAME:colibris}" * * Would read the configuration values for those items from the environment * variables PORT, MINIFY and SKIN_NAME. * * If PORT and SKIN_NAME variables were not defined, the default values 9001 and * "colibris" would be used. * The configuration value "minify", on the other hand, does not have a * designated default value. Thus, if the environment variable MINIFY were * undefined, "minify" would be null. * * REMARKS: * 1) please note that variable substitution always needs to be quoted. * * "port": 9001, <-- Literal values. When not using * "minify": false substitution, only strings must be * "skinName": "colibris" quoted. Booleans and numbers must not. * * "port": "${PORT:9001}" <-- CORRECT: if you want to use a variable * "minify": "${MINIFY:true}" substitution, put quotes around its name, * "skinName": "${SKIN_NAME}" even if the required value is a number or * a boolean. * Etherpad will take care of rewriting it * to the proper type if necessary. * * "port": ${PORT:9001} <-- ERROR: this is not valid json. Quotes * "minify": ${MINIFY} around variable names are missing. * "skinName": ${SKIN_NAME} * * 2) Beware of undefined variables and default values: nulls and empty strings * are different! * * This is particularly important for user's passwords (see the relevant * section): * * "password": "${PASSW}" // if PASSW is not defined would result in password === null * "password": "${PASSW:}" // if PASSW is not defined would result in password === '' * * If you want to use an empty value (null) as default value for a variable, * simply do not set it, without putting any colons: "${ABIWORD}". * * 3) if you want to use newlines in the default value of a string parameter, * use "\n" as usual. * * "defaultPadText" : "${DEFAULT_PAD_TEXT}Line 1\nLine 2" */ { /* * Name your instance! */ "title": "{{title}}", /* * favicon default name * alternatively, set up a fully specified Url to your own favicon */ "favicon": "{{favicon}}", /* * Skin name. * * Its value has to be an existing directory under src/static/skins. * You can write your own, or use one of the included ones: * * - "no-skin": an empty skin (default). This yields the unmodified, * traditional Etherpad theme. * - "colibris": the new experimental skin (since Etherpad 1.8), candidate to * become the default in Etherpad 2.0 */ "skinName": "colibris", /* * Skin Variants * * Use the UI skin variants builder at /p/test#skinvariantsbuilder * * For the colibris skin only, you can choose how to render the three main * containers: * - toolbar (top menu with icons) * - editor (containing the text of the pad) * - background (area outside of editor, mostly visible when using page style) * * For each of the 3 containers you can choose 4 color combinations: * super-light, light, dark, super-dark. * * For example, to make the toolbar dark, you will include "dark-toolbar" into * skinVariants. * * You can provide multiple skin variants separated by spaces. Default * skinVariant is "super-light-toolbar super-light-editor light-background". * * For the editor container, you can also make it full width by adding * "full-width-editor" variant (by default editor is rendered as a page, with * a max-width of 900px). */ "skinVariants": "dark-toolbar super-light-editor super-dark-background", /* * IP and port which Etherpad should bind at. * * Binding to a Unix socket is also supported: just use an empty string for * the ip, and put the full path to the socket in the port parameter. * * EXAMPLE USING UNIX SOCKET: * "ip": "", // <-- has to be an empty string * "port" : "/somepath/etherpad.socket", // <-- path to a Unix socket */ "ip": "{{listen_ip}}", "port": "{{listen_port}}", /* * Option to hide/show the settings.json in admin page. * * Default option is set to true */ "showSettingsInAdminPage": true, /* * Node native SSL support * * This is disabled by default. * Make sure to have the minimum and correct file access permissions set so * that the Etherpad server can access them */ /* "ssl" : { "key" : "/path-to-your/epl-server.key", "cert" : "/path-to-your/epl-server.crt", "ca": ["/path-to-your/epl-intermediate-cert1.crt", "/path-to-your/epl-intermediate-cert2.crt"] }, */ /* * The type of the database. * * You can choose between many DB drivers, for example: dirty, postgres, * sqlite, mysql. * * You shouldn't use "dirty" for for anything else than testing or * development. * * * Database specific settings are dependent on dbType, and go in dbSettings. * Remember that since Etherpad 1.6.0 you can also store these informations in * credentials.json. * * For a complete list of the supported drivers, please refer to: * https://www.npmjs.com/package/ueberdb2 */ "dbType": "postgres", "dbSettings": { "host": "/var/run/postgresql", "database": "etherpad", "user": "etherpad", "password": "{{database_password}}", "charset": "utf8mb4" }, /** * The default text of a pad */ "defaultPadText" : "{{pad_default_text|replace("\n","\\n")}}", /* * Default Pad behavior. * * Change them if you want to override. */ "padOptions": { "noColors": false, "showControls": true, "showChat": true, "showLineNumbers": true, "useMonospaceFont": true, "userName": false, "userColor": false, "rtl": false, "alwaysShowChat": false, "chatAndUsers": false, "lang": "{{pad_lang}}" }, /* * Pad Shortcut Keys */ "padShortcutEnabled" : { "altF9": true, /* focus on the File Menu and/or editbar */ "altC": true, /* focus on the Chat window */ "cmdShift2": true, /* shows a gritter popup showing a line author */ "delete": true, "return": true, "esc": true, /* in mozilla versions 14-19 avoid reconnecting pad */ "cmdS": true, /* save a revision */ "tab": true, /* indent */ "cmdZ": true, /* undo/redo */ "cmdY": true, /* redo */ "cmdI": true, /* italic */ "cmdB": true, /* bold */ "cmdU": true, /* underline */ "cmd5": true, /* strike through */ "cmdShiftL": true, /* unordered list */ "cmdShiftN": true, /* ordered list */ "cmdShift1": true, /* ordered list */ "cmdShiftC": true, /* clear authorship */ "cmdH": true, /* backspace */ "ctrlHome": true, /* scroll to top of pad */ "pageUp": true, "pageDown": true }, /* * Should we suppress errors from being visible in the default Pad Text? */ "suppressErrorsInPadText": true, /* * If this option is enabled, a user must have a session to access pads. * This effectively allows only group pads to be accessed. */ "requireSession": false, /* * Users may edit pads but not create new ones. * * Pad creation is only via the API. * This applies both to group pads and regular pads. */ "editOnly": false, /* * If set to true, those users who have a valid session will automatically be * granted access to password protected pads. */ "sessionNoPassword": false, /* * If true, all css & js will be minified before sending to the client. * * This will improve the loading performance massively, but makes it difficult * to debug the javascript/css */ "minify": true, /* * How long may clients use served javascript code (in seconds)? * * Not setting this may cause problems during deployment. * Set to 0 to disable caching. */ "maxAge": 21600, // 60 * 60 * 6 = 6 hours /* * Absolute path to the Abiword executable. * * Abiword is needed to get advanced import/export features of pads. Setting * it to null disables Abiword and will only allow plain text and HTML * import/exports. */ "abiword": null, /* * This is the absolute path to the soffice executable. * * LibreOffice can be used in lieu of Abiword to export pads. * Setting it to null disables LibreOffice exporting. */ "soffice": "/usr/bin/soffice", /* * Path to the Tidy executable. * * Tidy is used to improve the quality of exported pads. * Setting it to null disables Tidy. */ "tidyHtml": "/usr/bin/tidy", /* * Allow import of file types other than the supported ones: * txt, doc, docx, rtf, odt, html & htm */ "allowUnknownFileEnds": true, /* * This setting is used if you require authentication of all users. * * Note: "/admin" always requires authentication. */ "requireAuthentication": false, /* * Require authorization by a module, or a user with is_admin set, see below. */ "requireAuthorization": false, /* * When you use NGINX or another proxy/load-balancer set this to true. * * This is especially necessary when the reverse proxy performs SSL * termination, otherwise the cookies will not have the "secure" flag. * * The other effect will be that the logs will contain the real client's IP, * instead of the reverse proxy's IP. */ "trustProxy": true, /* * Privacy: disable IP logging */ "disableIPlogging": true, /* * Time (in seconds) to automatically reconnect pad when a "Force reconnect" * message is shown to user. * * Set to 0 to disable automatic reconnection. */ "automaticReconnectionTimeout": 2, /* * By default, when caret is moved out of viewport, it scrolls the minimum * height needed to make this line visible. */ "scrollWhenFocusLineIsOutOfViewport": { /* * Percentage of viewport height to be additionally scrolled. * * E.g.: use "percentage.editionAboveViewport": 0.5, to place caret line in * the middle of viewport, when user edits a line above of the * viewport * * Set to 0 to disable extra scrolling */ "percentage": { "editionAboveViewport": 0.2, "editionBelowViewport": 0.2 }, /* * Time (in milliseconds) used to animate the scroll transition. * Set to 0 to disable animation */ "duration": 200, /* * Flag to control if it should scroll when user places the caret in the * last line of the viewport */ "scrollWhenCaretIsInTheLastLineOfViewport": true, /* * Percentage of viewport height to be additionally scrolled when user * presses arrow up in the line of the top of the viewport. * * Set to 0 to let the scroll to be handled as default by Etherpad */ "percentageToScrollWhenUserPressesArrowUp": 0 }, /* * Users for basic authentication. * * is_admin = true gives access to /admin. * If you do not uncomment this, /admin will not be available! * * WARNING: passwords should not be stored in plaintext in this file. * If you want to mitigate this, please install ep_hash_auth and * follow the section "secure your installation" in README.md */ "users": { "admin": { // 1) "password" can be replaced with "hash" if you install ep_hash_auth // 2) please note that if password is null, the user will not be created "password": "{{pad_admin_password}}", "is_admin": true }, }, /* * Restrict socket.io transport methods */ "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"], /* * Allow Load Testing tools to hit the Etherpad Instance. * * WARNING: this will disable security on the instance. */ "loadTest": false, /* * Disable indentation on new line when previous line ends with some special * chars (':', '[', '(', '{') */ /* "indentationOnNewLine": false, */ /* * From Etherpad 1.8.3 onwards, import and export of pads is always rate * limited. * * The default is to allow at most 10 requests per IP in a 90 seconds window. * After that the import/export request is rejected. * * See https://github.com/nfriedly/express-rate-limit for more options */ "importExportRateLimiting": { // duration of the rate limit window (milliseconds) "windowMs": 90000, // maximum number of requests per IP to allow during the rate limit window "max": 10 }, /* * From Etherpad 1.8.3 onwards, the maximum allowed size for a single imported * file is always bounded. * * File size is specified in bytes. Default is 50 MB. */ "importMaxFileSize": 52428800, // 50 * 1024 * 1024 /* * Toolbar buttons configuration. * * Uncomment to customize. */ /* "toolbar": { "left": [ ["bold", "italic", "underline", "strikethrough"], ["orderedlist", "unorderedlist", "indent", "outdent"], ["undo", "redo"], ["clearauthorship"] ], "right": [ ["importexport", "timeslider", "savedrevision"], ["settings", "embed"], ["showusers"] ], "timeslider": [ ["timeslider_export", "timeslider_returnToPad"] ] }, */ /* * Expose Etherpad version in the web interface and in the Server http header. * * Do not enable on production machines. */ "exposeVersion": false, /* * The log level we are using. * * Valid values: DEBUG, INFO, WARN, ERROR */ "loglevel": "{{log_level}}", /* * Logging configuration. See log4js documentation for further information: * https://github.com/nomiddlename/log4js-node * * You can add as many appenders as you want here. */ "logconfig" : { "appenders": [ { "type": "console" //, "category": "access"// only logs pad access } /* , { "type": "file" , "filename": "your-log-file-here.log" , "maxLogSize": 1024 , "backups": 3 // how many log files there're gonna be at max //, "category": "test" // only log a specific category } */ /* , { "type": "logLevelFilter" , "level": "warn" // filters out all log messages that have a lower level than "error" , "appender": { Use whatever appender you want here } } */ /* , { "type": "logLevelFilter" , "level": "error" // filters out all log messages that have a lower level than "error" , "appender": { "type": "smtp" , "subject": "An error occurred in your EPL instance!" , "recipients": "bar@blurdybloop.com, baz@blurdybloop.com" , "sendInterval": 300 // 60 * 5 = 5 minutes -- will buffer log messages; set to 0 to send a mail for every message , "transport": "SMTP", "SMTP": { // see https://github.com/andris9/Nodemailer#possible-transport-methods "host": "smtp.example.com", "port": 465, "secureConnection": true, "auth": { "user": "foo@example.com", "pass": "bar_foo" } } } } */ ] }, "ep_delete_after_delay_lite": { "delay": 86400, // one day, in seconds "loop": true, "loopDelay": 3600, // one hour, in seconds "deleteAtStart": true, "text": "{{pad_default_text|replace("\n","\\n")}}" }, "ep_toc": { "disable_by_default": true } }