2024-05-24 09:26:32 +02:00
|
|
|
// SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
|
|
|
//
|
|
|
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
/* globals module */
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
/* DISCLAIMER:
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
There are two recommended methods of running a CryptPad instance:
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
1. Using a standalone nodejs server without HTTPS (suitable for local development)
|
|
|
|
2. Using NGINX to serve static assets and to handle HTTPS for API server's websocket traffic
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
We do not officially recommend or support Apache, Docker, Kubernetes, Traefik, or any other configuration.
|
|
|
|
Support requests for such setups should be directed to their authors.
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
If you're having difficulty difficulty configuring your instance
|
2024-05-24 09:26:32 +02:00
|
|
|
we suggest that you join the project's Matrix channel.
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
If you don't have any difficulty configuring your instance and you'd like to
|
|
|
|
support us for the work that went into making it pain-free we are quite happy
|
|
|
|
to accept donations via our opencollective page: https://opencollective.com/cryptpad
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
*/
|
|
|
|
module.exports = {
|
|
|
|
/* CryptPad is designed to serve its content over two domains.
|
|
|
|
* Account passwords and cryptographic content is handled on the 'main' domain,
|
|
|
|
* while the user interface is loaded on a 'sandbox' domain
|
|
|
|
* which can only access information which the main domain willingly shares.
|
|
|
|
*
|
|
|
|
* In the event of an XSS vulnerability in the UI (that's bad)
|
|
|
|
* this system prevents attackers from gaining access to your account (that's good).
|
|
|
|
*
|
|
|
|
* Most problems with new instances are related to this system blocking access
|
|
|
|
* because of incorrectly configured sandboxes. If you only see a white screen
|
|
|
|
* when you try to load CryptPad, this is probably the cause.
|
|
|
|
*
|
|
|
|
* PLEASE READ THE FOLLOWING COMMENTS CAREFULLY.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* httpUnsafeOrigin is the URL that clients will enter to load your instance.
|
|
|
|
* Any other URL that somehow points to your instance is supposed to be blocked.
|
|
|
|
* The default provided below assumes you are loading CryptPad from a server
|
|
|
|
* which is running on the same machine, using port 3000.
|
|
|
|
*
|
|
|
|
* In a production instance this should be available ONLY over HTTPS
|
|
|
|
* using the default port for HTTPS (443) ie. https://cryptpad.fr
|
2021-01-23 10:48:39 +01:00
|
|
|
* In such a case this should be also handled by NGINX, as documented in
|
2020-07-18 11:46:45 +02:00
|
|
|
* cryptpad/docs/example.nginx.conf (see the $main_domain variable)
|
|
|
|
*
|
|
|
|
*/
|
2021-07-08 00:04:31 +02:00
|
|
|
httpUnsafeOrigin: 'https://__DOMAIN__',
|
2020-07-18 11:46:45 +02:00
|
|
|
|
|
|
|
/* httpSafeOrigin is the URL that is used for the 'sandbox' described above.
|
|
|
|
* If you're testing or developing with CryptPad on your local machine then
|
|
|
|
* it is appropriate to leave this blank. The default behaviour is to serve
|
2024-05-24 09:26:32 +02:00
|
|
|
* the main domain over port 3000 and to serve the sandbox content over port 3001.
|
2020-07-18 11:46:45 +02:00
|
|
|
*
|
|
|
|
* This is not appropriate in a production environment where invasive networks
|
|
|
|
* may filter traffic going over abnormal ports.
|
|
|
|
* To correctly configure your production instance you must provide a URL
|
|
|
|
* with a different domain (a subdomain is sufficient).
|
|
|
|
* It will be used to load the UI in our 'sandbox' system.
|
|
|
|
*
|
|
|
|
* This value corresponds to the $sandbox_domain variable
|
|
|
|
* in the example nginx file.
|
|
|
|
*
|
2024-05-24 09:26:32 +02:00
|
|
|
* Note that in order for the sandboxing system to be effective
|
|
|
|
* httpSafeOrigin must be different from httpUnsafeOrigin.
|
|
|
|
*
|
2020-07-18 11:46:45 +02:00
|
|
|
* CUSTOMIZE AND UNCOMMENT THIS FOR PRODUCTION INSTALLATIONS.
|
|
|
|
*/
|
2023-02-13 10:56:17 +01:00
|
|
|
httpSafeOrigin: "https://__SANDBOXDOMAIN__",
|
2020-07-18 11:46:45 +02:00
|
|
|
|
|
|
|
/* httpAddress specifies the address on which the nodejs server
|
2024-05-24 09:26:32 +02:00
|
|
|
* should be accessible. By default it will listen on localhost
|
|
|
|
* (IPv4 & IPv6 if enabled). If you want it to listen on
|
|
|
|
* a specific address, specify it here. e.g '192.168.0.1'
|
2020-07-18 11:46:45 +02:00
|
|
|
*
|
|
|
|
*/
|
2024-05-24 11:10:41 +02:00
|
|
|
httpAddress: 'localhost',
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
/* httpPort specifies on which port the nodejs server should listen.
|
|
|
|
* By default it will serve content over port 3000, which is suitable
|
|
|
|
* for both local development and for use with the provided nginx example,
|
|
|
|
* which will proxy websocket traffic to your node server.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
httpPort: __PORT__,
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
/* httpSafePort allows you to specify an alternative port from which
|
|
|
|
* the node process should serve sandboxed assets. The default value is
|
|
|
|
* that of your httpPort + 1. You probably don't need to change this.
|
|
|
|
*
|
|
|
|
*/
|
2023-03-12 08:42:18 +01:00
|
|
|
httpSafePort: __PORT_PORTI__,
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2024-05-24 09:26:32 +02:00
|
|
|
/* Websockets need to be exposed on a separate port from the rest of
|
|
|
|
* the platform's HTTP traffic. Port 3003 is used by default.
|
|
|
|
* You can change this to a different port if it is in use by a
|
|
|
|
* different service, but under most circumstances you can leave this
|
|
|
|
* commented and it will work.
|
|
|
|
*
|
|
|
|
* In production environments, your reverse proxy (usually NGINX)
|
|
|
|
* will need to forward websocket traffic (/cryptpad_websocket)
|
|
|
|
* to this port.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
websocketPort: __PORT_SOCKET__,
|
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
/* CryptPad will launch a child process for every core available
|
|
|
|
* in order to perform CPU-intensive tasks in parallel.
|
|
|
|
* Some host environments may have a very large number of cores available
|
|
|
|
* or you may want to limit how much computing power CryptPad can take.
|
|
|
|
* If so, set 'maxWorkers' to a positive integer.
|
|
|
|
*/
|
|
|
|
// maxWorkers: 4,
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2019-10-01 19:30:18 +02:00
|
|
|
/* =====================
|
2024-05-24 09:26:32 +02:00
|
|
|
* Sessions
|
2019-10-01 19:30:18 +02:00
|
|
|
* ===================== */
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2024-05-24 09:26:32 +02:00
|
|
|
/* Accounts can be protected with an OTP (One Time Password) system
|
|
|
|
* to add a second authentication layer. Such accounts use a session
|
|
|
|
* with a given lifetime after which they are logged out and need
|
|
|
|
* to be re-authenticated. You can configure the lifetime of these
|
|
|
|
* sessions here.
|
|
|
|
*
|
|
|
|
* defaults to 7 days
|
2019-10-01 19:30:18 +02:00
|
|
|
*/
|
2024-05-24 09:26:32 +02:00
|
|
|
//otpSessionExpiration: 7*24, // hours
|
2019-10-01 19:30:18 +02:00
|
|
|
|
2024-05-24 09:26:32 +02:00
|
|
|
/* Registered users can be forced to protect their account
|
|
|
|
* with a Multi-factor Authentication (MFA) tool like a TOTP
|
|
|
|
* authenticator application.
|
2021-08-17 14:50:28 +02:00
|
|
|
*
|
2024-05-24 09:26:32 +02:00
|
|
|
* defaults to false
|
2021-08-17 14:50:28 +02:00
|
|
|
*/
|
2024-05-24 09:26:32 +02:00
|
|
|
//enforceMFA: false,
|
2021-08-17 14:50:28 +02:00
|
|
|
|
2024-05-24 09:26:32 +02:00
|
|
|
/* =====================
|
|
|
|
* Privacy
|
|
|
|
* ===================== */
|
2021-07-08 00:03:11 +02:00
|
|
|
|
2024-05-24 09:26:32 +02:00
|
|
|
/* Depending on where your instance is hosted, you may be required to log IP
|
|
|
|
* addresses of the users who make a change to a document. This setting allows you
|
|
|
|
* to do so. You can configure the logging system below in this config file.
|
|
|
|
* Setting this value to true will include a log for each websocket connection
|
|
|
|
* including this connection's unique ID, the user public key and the IP.
|
|
|
|
* NOTE: this option requires a log level of "info" or below.
|
2021-08-17 14:02:36 +02:00
|
|
|
*
|
2024-05-24 09:26:32 +02:00
|
|
|
* defaults to false
|
2021-08-17 14:02:36 +02:00
|
|
|
*/
|
2024-05-24 09:26:32 +02:00
|
|
|
//logIP: false,
|
|
|
|
|
|
|
|
/* =====================
|
|
|
|
* Admin
|
|
|
|
* ===================== */
|
2021-08-17 14:02:36 +02:00
|
|
|
|
2021-08-17 13:59:46 +02:00
|
|
|
/*
|
2024-05-24 09:26:32 +02:00
|
|
|
* CryptPad contains an administration panel. Its access is restricted to specific
|
|
|
|
* users using the following list.
|
|
|
|
* To give access to the admin panel to a user account, just add their public signing
|
|
|
|
* key, which can be found on the settings page for registered users.
|
|
|
|
* Entries should be strings separated by a comma.
|
|
|
|
* adminKeys: [
|
|
|
|
* "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]",
|
|
|
|
* "[cryptpad-user2@my.awesome.website/jA-9c5iNuG7SyxzGCjwJXVnk5NPfAOO8fQuQ0dC83RE=]",
|
|
|
|
* ]
|
2021-08-17 13:59:46 +02:00
|
|
|
*
|
|
|
|
*/
|
2024-05-24 09:26:32 +02:00
|
|
|
adminKeys: [
|
|
|
|
|
|
|
|
],
|
2021-08-17 13:59:46 +02:00
|
|
|
|
2019-10-01 19:30:18 +02:00
|
|
|
/* =====================
|
2020-07-18 11:46:45 +02:00
|
|
|
* STORAGE
|
2019-10-01 19:30:18 +02:00
|
|
|
* ===================== */
|
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
/* Pads that are not 'pinned' by any registered user can be set to expire
|
|
|
|
* after a configurable number of days of inactivity (default 90 days).
|
|
|
|
* The value can be changed or set to false to remove expiration.
|
|
|
|
* Expired pads can then be removed using a cron job calling the
|
|
|
|
* `evict-inactive.js` script with node
|
2018-12-05 23:14:08 +01:00
|
|
|
*
|
2020-07-18 11:46:45 +02:00
|
|
|
* defaults to 90 days if nothing is provided
|
2019-10-01 19:30:18 +02:00
|
|
|
*/
|
2020-07-18 11:46:45 +02:00
|
|
|
//inactiveTime: 90, // days
|
2019-10-01 19:30:18 +02:00
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
/* CryptPad archives some data instead of deleting it outright.
|
|
|
|
* This archived data still takes up space and so you'll probably still want to
|
|
|
|
* remove these files after a brief period.
|
|
|
|
*
|
2024-05-24 09:26:32 +02:00
|
|
|
* cryptpad/scripts/evict-archived.js is intended to be run daily
|
2020-07-18 11:46:45 +02:00
|
|
|
* from a crontab or similar scheduling service.
|
2018-12-05 23:14:08 +01:00
|
|
|
*
|
2020-07-18 11:46:45 +02:00
|
|
|
* The intent with this feature is to provide a safety net in case of accidental
|
|
|
|
* deletion. Set this value to the number of days you'd like to retain
|
|
|
|
* archived data before it's removed permanently.
|
|
|
|
*
|
|
|
|
* defaults to 15 days if nothing is provided
|
2018-12-05 23:14:08 +01:00
|
|
|
*/
|
2020-07-18 11:46:45 +02:00
|
|
|
//archiveRetentionTime: 15,
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2021-01-23 10:48:39 +01:00
|
|
|
/* It's possible to configure your instance to remove data
|
|
|
|
* stored on behalf of inactive accounts. Set 'accountRetentionTime'
|
|
|
|
* to the number of days an account can remain idle before its
|
|
|
|
* documents and other account data is removed.
|
|
|
|
*
|
|
|
|
* Leave this value commented out to preserve all data stored
|
|
|
|
* by user accounts regardless of inactivity.
|
|
|
|
*/
|
|
|
|
//accountRetentionTime: 365,
|
|
|
|
|
|
|
|
/* Starting with CryptPad 3.23.0, the server automatically runs
|
|
|
|
* the script responsible for removing inactive data according to
|
|
|
|
* your configured definition of inactivity. Set this value to `true`
|
|
|
|
* if you prefer not to remove inactive data, or if you prefer to
|
|
|
|
* do so manually using `scripts/evict-inactive.js`.
|
|
|
|
*/
|
|
|
|
//disableIntegratedEviction: true,
|
|
|
|
|
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
/* Max Upload Size (bytes)
|
|
|
|
* this sets the maximum size of any one file uploaded to the server.
|
|
|
|
* anything larger than this size will be rejected
|
|
|
|
* defaults to 20MB if no value is provided
|
2018-12-05 23:14:08 +01:00
|
|
|
*/
|
2020-07-18 11:46:45 +02:00
|
|
|
//maxUploadSize: 20 * 1024 * 1024,
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2020-07-18 11:46:45 +02:00
|
|
|
/* Users with premium accounts (those with a plan included in their customLimit)
|
|
|
|
* can benefit from an increased upload size limit. By default they are restricted to the same
|
|
|
|
* upload size as any other registered user.
|
2019-10-01 19:30:18 +02:00
|
|
|
*
|
|
|
|
*/
|
2020-07-18 11:46:45 +02:00
|
|
|
//premiumUploadSize: 100 * 1024 * 1024,
|
2019-10-01 19:30:18 +02:00
|
|
|
|
|
|
|
/* =====================
|
|
|
|
* DATABASE VOLUMES
|
|
|
|
* ===================== */
|
2018-12-05 23:14:08 +01:00
|
|
|
|
|
|
|
/*
|
2019-10-01 19:30:18 +02:00
|
|
|
* CryptPad stores each document in an individual file on your hard drive.
|
|
|
|
* Specify a directory where files should be stored.
|
|
|
|
* It will be created automatically if it does not already exist.
|
|
|
|
*/
|
2018-12-05 23:14:08 +01:00
|
|
|
filePath: './datastore/',
|
|
|
|
|
2019-10-01 19:30:18 +02:00
|
|
|
/* CryptPad offers the ability to archive data for a configurable period
|
|
|
|
* before deleting it, allowing a means of recovering data in the event
|
|
|
|
* that it was deleted accidentally.
|
|
|
|
*
|
|
|
|
* To set the location of this archive directory to a custom value, change
|
|
|
|
* the path below:
|
|
|
|
*/
|
|
|
|
archivePath: './data/archive',
|
|
|
|
|
2018-12-05 23:14:08 +01:00
|
|
|
/* CryptPad allows logged in users to request that particular documents be
|
|
|
|
* stored by the server indefinitely. This is called 'pinning'.
|
|
|
|
* Pin requests are stored in a pin-store. The location of this store is
|
|
|
|
* defined here.
|
|
|
|
*/
|
2020-07-18 11:46:45 +02:00
|
|
|
pinPath: './data/pins',
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2019-10-01 19:30:18 +02:00
|
|
|
/* if you would like the list of scheduled tasks to be stored in
|
|
|
|
a custom location, change the path below:
|
|
|
|
*/
|
2020-07-18 11:46:45 +02:00
|
|
|
taskPath: './data/tasks',
|
2019-10-01 19:30:18 +02:00
|
|
|
|
|
|
|
/* if you would like users' authenticated blocks to be stored in
|
|
|
|
a custom location, change the path below:
|
|
|
|
*/
|
|
|
|
blockPath: './block',
|
2018-12-05 23:14:08 +01:00
|
|
|
|
|
|
|
/* CryptPad allows logged in users to upload encrypted files. Files/blobs
|
|
|
|
* are stored in a 'blob-store'. Set its location here.
|
|
|
|
*/
|
|
|
|
blobPath: './blob',
|
|
|
|
|
|
|
|
/* CryptPad stores incomplete blobs in a 'staging' area until they are
|
|
|
|
* fully uploaded. Set its location here.
|
|
|
|
*/
|
2020-07-18 11:46:45 +02:00
|
|
|
blobStagingPath: './data/blobstage',
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2021-04-01 11:01:26 +02:00
|
|
|
decreePath: './data/decrees',
|
|
|
|
|
2019-10-01 19:30:18 +02:00
|
|
|
/* CryptPad supports logging events directly to the disk in a 'logs' directory
|
|
|
|
* Set its location here, or set it to false (or nothing) if you'd rather not log
|
2018-12-05 23:14:08 +01:00
|
|
|
*/
|
2019-10-01 19:30:18 +02:00
|
|
|
logPath: './data/logs',
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2019-10-01 19:30:18 +02:00
|
|
|
/* =====================
|
|
|
|
* Debugging
|
|
|
|
* ===================== */
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2019-10-01 19:30:18 +02:00
|
|
|
/* CryptPad can log activity to stdout
|
|
|
|
* This may be useful for debugging
|
2018-12-05 23:14:08 +01:00
|
|
|
*/
|
2019-10-01 19:30:18 +02:00
|
|
|
logToStdout: false,
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2019-10-01 19:30:18 +02:00
|
|
|
/* CryptPad can be configured to log more or less
|
|
|
|
* the various settings are listed below by order of importance
|
2018-12-05 23:14:08 +01:00
|
|
|
*
|
2019-10-01 19:30:18 +02:00
|
|
|
* silly, verbose, debug, feedback, info, warn, error
|
|
|
|
*
|
|
|
|
* Choose the least important level of logging you wish to see.
|
|
|
|
* For example, a 'silly' logLevel will display everything,
|
|
|
|
* while 'info' will display 'info', 'warn', and 'error' logs
|
|
|
|
*
|
|
|
|
* This will affect both logging to the console and the disk.
|
2018-12-05 23:14:08 +01:00
|
|
|
*/
|
2019-10-01 19:30:18 +02:00
|
|
|
logLevel: 'info',
|
2018-12-05 23:14:08 +01:00
|
|
|
|
|
|
|
/* clients can use the /settings/ app to opt out of usage feedback
|
|
|
|
* which informs the server of things like how much each app is being
|
|
|
|
* used, and whether certain clientside features are supported by
|
|
|
|
* the client's browser. The intent is to provide feedback to the admin
|
|
|
|
* such that the service can be improved. Enable this with `true`
|
|
|
|
* and ignore feedback with `false` or by commenting the attribute
|
2019-10-01 19:30:18 +02:00
|
|
|
*
|
|
|
|
* You will need to set your logLevel to include 'feedback'. Set this
|
|
|
|
* to false if you'd like to exclude feedback from your logs.
|
2018-12-05 23:14:08 +01:00
|
|
|
*/
|
2019-10-01 19:30:18 +02:00
|
|
|
logFeedback: false,
|
2018-12-05 23:14:08 +01:00
|
|
|
|
2019-10-01 19:30:18 +02:00
|
|
|
/* CryptPad supports verbose logging
|
|
|
|
* (false by default)
|
|
|
|
*/
|
|
|
|
verbose: false,
|
2021-07-07 13:07:57 +02:00
|
|
|
|
|
|
|
/* Surplus information:
|
|
|
|
*
|
|
|
|
* 'installMethod' is included in server telemetry to voluntarily
|
|
|
|
* indicate how many instances are using unofficial installation methods
|
|
|
|
* such as Docker.
|
|
|
|
*
|
|
|
|
*/
|
2023-02-10 15:36:15 +01:00
|
|
|
installMethod: 'yunohost',
|
2022-12-09 18:01:27 +01:00
|
|
|
};
|