2019-07-25 19:56:11 +02:00
|
|
|
/*
|
|
|
|
* This file must be valid JSON. But comments are allowed
|
|
|
|
*
|
|
|
|
* Please edit settings.json, not settings.json.template
|
|
|
|
*
|
2019-11-01 11:32:07 +01:00
|
|
|
* 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.
|
2020-02-02 23:55:37 +01:00
|
|
|
*
|
2019-11-01 11:32:07 +01:00
|
|
|
* 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 default indicated. Thus, if the environment variable
|
|
|
|
* MINIFY were undefined, "minify" would be null (do not do this).
|
|
|
|
*
|
|
|
|
* REMARKS:
|
|
|
|
* 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}
|
|
|
|
*
|
2019-07-25 19:56:11 +02:00
|
|
|
*/
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
* Name your instance!
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"title": "${TITLE:Etherpad}",
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* favicon default name
|
|
|
|
* alternatively, set up a fully specified Url to your own favicon
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"favicon": "${FAVICON:favicon.ico}",
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
2019-11-01 11:32:07 +01:00
|
|
|
* 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
|
2019-07-25 19:56:11 +02:00
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"skinName": "${SKIN_NAME:colibris}",
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* IP and port which etherpad should bind at
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"ip": "${IP:0.0.0.0}",
|
|
|
|
"port": "${PORT:9001}",
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Option to hide/show the settings.json in admin page.
|
|
|
|
*
|
|
|
|
* Default option is set to true
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"showSettingsInAdminPage": "${SHOW_SETTINGS_IN_ADMIN_PAGE:true}",
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
*
|
2019-11-01 11:32:07 +01:00
|
|
|
* Database specific settings are dependent on dbType, and go in dbSettings.
|
2019-07-25 19:56:11 +02:00
|
|
|
* Remember that since Etherpad 1.6.0 you can also store these informations in
|
|
|
|
* credentials.json.
|
2019-11-01 11:32:07 +01:00
|
|
|
*
|
|
|
|
* For a complete list of the supported drivers, please refer to:
|
|
|
|
* https://www.npmjs.com/package/ueberdb2
|
2019-07-25 19:56:11 +02:00
|
|
|
*/
|
2019-11-01 11:32:07 +01:00
|
|
|
|
2020-02-02 23:55:37 +01:00
|
|
|
"dbType": "postgres",
|
|
|
|
"dbSettings": {
|
2021-03-10 19:20:36 +01:00
|
|
|
"host": "10.128.0.96",
|
2020-02-02 23:55:37 +01:00
|
|
|
"port": 5432,
|
|
|
|
"database": "etherpad",
|
|
|
|
"user": "etherpad",
|
|
|
|
"password": "${POSTGRES_PASSWORD}"
|
|
|
|
},
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* The default text of a pad
|
|
|
|
*/
|
|
|
|
"defaultPadText" : "Bienvenue sur l'EtherPad d'Aurore !\n\nCe pad est public.\n",
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Default Pad behavior.
|
|
|
|
*
|
|
|
|
* Change them if you want to override.
|
|
|
|
*/
|
|
|
|
"padOptions": {
|
2020-02-02 23:55:37 +01:00
|
|
|
"noColors": false,
|
|
|
|
"showControls": true,
|
|
|
|
"showChat": true,
|
|
|
|
"showLineNumbers": true,
|
2019-07-25 19:56:11 +02:00
|
|
|
"useMonospaceFont": false,
|
2020-02-02 23:55:37 +01:00
|
|
|
"userName": false,
|
|
|
|
"userColor": false,
|
|
|
|
"rtl": false,
|
|
|
|
"alwaysShowChat": false,
|
|
|
|
"chatAndUsers": false,
|
|
|
|
"lang": "en-gb"
|
2019-07-25 19:56:11 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Pad Shortcut Keys
|
|
|
|
*/
|
|
|
|
"padShortcutEnabled" : {
|
2020-02-02 23:55:37 +01:00
|
|
|
"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
|
2019-07-25 19:56:11 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Should we suppress errors from being visible in the default Pad Text?
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"suppressErrorsInPadText": false,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* If this option is enabled, a user must have a session to access pads.
|
|
|
|
* This effectively allows only group pads to be accessed.
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"requireSession": false,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* 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.
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"editOnly": false,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* If set to true, those users who have a valid session will automatically be
|
|
|
|
* granted access to password protected pads.
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"sessionNoPassword": false,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* 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
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"minify": true,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* How long may clients use served javascript code (in seconds)?
|
|
|
|
*
|
|
|
|
* Not setting this may cause problems during deployment.
|
|
|
|
* Set to 0 to disable caching.
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"maxAge": 21600, // 60 * 60 * 6 = 6 hours
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* 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.
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"abiword": null,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* 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.
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"soffice": null,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Path to the Tidy executable.
|
|
|
|
*
|
|
|
|
* Tidy is used to improve the quality of exported pads.
|
|
|
|
* Setting it to null disables Tidy.
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"tidyHtml": null,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Allow import of file types other than the supported ones:
|
|
|
|
* txt, doc, docx, rtf, odt, html & htm
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"allowUnknownFileEnds": true,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* This setting is used if you require authentication of all users.
|
|
|
|
*
|
|
|
|
* Note: "/admin" always requires authentication.
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"requireAuthentication": false,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Require authorization by a module, or a user with is_admin set, see below.
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"requireAuthorization": false,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* When you use NGINX or another proxy/load-balancer set this to true.
|
2020-02-02 23:55:37 +01:00
|
|
|
*
|
|
|
|
* 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.
|
2019-07-25 19:56:11 +02:00
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"trustProxy": "${TRUST_PROXY:false}",
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Privacy: disable IP logging
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"disableIPlogging": false,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Time (in seconds) to automatically reconnect pad when a "Force reconnect"
|
|
|
|
* message is shown to user.
|
|
|
|
*
|
|
|
|
* Set to 0 to disable automatic reconnection.
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"automaticReconnectionTimeout": 0,
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* 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,
|
|
|
|
"editionBelowViewport": 0
|
|
|
|
},
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Time (in milliseconds) used to animate the scroll transition.
|
|
|
|
* Set to 0 to disable animation
|
|
|
|
*/
|
|
|
|
"duration": 0,
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Flag to control if it should scroll when user places the caret in the
|
|
|
|
* last line of the viewport
|
|
|
|
*/
|
|
|
|
"scrollWhenCaretIsInTheLastLineOfViewport": false,
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 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": {
|
2020-02-02 23:55:37 +01:00
|
|
|
// 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": "${ADMIN_PASSWORD}",
|
2019-07-25 19:56:11 +02:00
|
|
|
"is_admin": true
|
|
|
|
},
|
|
|
|
"user": {
|
2020-02-02 23:55:37 +01:00
|
|
|
// 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": "${USER_PASSWORD}",
|
2019-07-25 19:56:11 +02:00
|
|
|
"is_admin": false
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 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,
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 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"]
|
|
|
|
]
|
|
|
|
},
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
2019-11-01 11:32:07 +01:00
|
|
|
* Expose Etherpad version in the web interface and in the Server http header.
|
|
|
|
*
|
|
|
|
* Do not enable on production machines.
|
|
|
|
*/
|
|
|
|
"exposeVersion": false,
|
|
|
|
|
2020-02-02 23:55:37 +01:00
|
|
|
/*
|
2019-07-25 19:56:11 +02:00
|
|
|
* The log level we are using.
|
|
|
|
*
|
|
|
|
* Valid values: DEBUG, INFO, WARN, ERROR
|
|
|
|
*/
|
2020-02-02 23:55:37 +01:00
|
|
|
"loglevel": "${LOGLEVEL:INFO}",
|
2019-07-25 19:56:11 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* 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"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
|
|
|
|
]
|
|
|
|
} // logconfig
|
|
|
|
}
|
|
|
|
|