Database¶
CryptPad takes an unusual approach to storing documents on the server. User data is simply stored on the file system rather than a database.
Key points¶
Each CryptPad document has information stored on the server in a location determined by a channel id
The content of each document is encrypted using the encryption key, so that the server cannot read it
Clients send the channel id to the server to:
get the latest information about a document
subscribe to ongoing updates while they are connected
modify the contents of the document
each channel is stored within its own file on the server
each change to the document is encoded on a single line of that file
Understanding document URLs¶
Everything that a client needs in order to interact with a CryptPad document is stored in its URL.
Let's look at an example:
https://cryptpad.fr/code/#/2/code/edit/plpAeHfQ4YO49fczV5erSCgd/
Browsers do not send the information after the #
symbol to the server when loading a page, so it is safe to encode private information there.
The information before #
tells the browser which server to connect to, and what resources to download.
This part of the URL https://cryptpad.fr/code/
tells the server to load the code editor.
The remaining information #/2/code/edit/plpAeHfQ4YO49fczV5erSCgd/
is handled with Javascript by the browser.
There are several pieces of information there, separated by slashes.
URL encoding version: 2
editor mode: edit
Encryption seed: plpAeHfQ4YO49fczV5erSCgd
Finding a document¶
It is possible to run code provided by the CryptPad server in your browser console. To extract the channel id of a document you have open:
File > Properties > Document identifier
Alternatively you can run this snippet:
require([
"/common/common-hash.js"
], function (Hash) {
var url = window.location.href;
var password = "";
var parsed = Hash.parsePadUrl(url);
var secret = Hash.getSecrets(parsed.type, parsed.hash, password);
console.log(secret.channel);
});
Either method will give a channel id that looks similar to bb1edc4cb7648605284db30dfcd2eebf
.
The corresponding file would be stored on the server, in your CryptPad instance's directory, at cryptpad/datastore/bb/bb1edc4cb7648605284db30dfcd2eebf.ndjson
.
For more information on administering the database including backups, migration, and more, please see Database administration in the administrator guide.