summaryrefslogtreecommitdiff
path: root/docs/server.rst
diff options
context:
space:
mode:
authordrebs <drebs@leap.se>2017-06-06 15:12:56 -0300
committerKali Kaneko <kali@leap.se>2017-06-06 20:35:46 +0200
commit9dd3ebe6bad0bfe05840782c805e961cf4a96c6a (patch)
tree0f8d4b3e907cbdb88a5fcdf0d954cdc600a1fd17 /docs/server.rst
parentddef89b093929387614c52896ae4e10b3714be65 (diff)
[doc] move sphinx up to root of docs dir
Diffstat (limited to 'docs/server.rst')
-rw-r--r--docs/server.rst71
1 files changed, 71 insertions, 0 deletions
diff --git a/docs/server.rst b/docs/server.rst
new file mode 100644
index 00000000..4f99f266
--- /dev/null
+++ b/docs/server.rst
@@ -0,0 +1,71 @@
+Soledad Server documentation
+============================
+
+A U1DB server that stores data using CouchDB as its persistence layer.
+
+.. contents::
+ :local:
+
+General information
+-------------------
+
+This is written as a Twisted application and intended to be run using the
+twistd command. To start the soledad server, run:
+
+.. code-block:: bash
+
+ twistd -n web \
+ --class=leap.soledad.server.entrypoint.SoledadEntrypoint \
+ --port=X
+
+An systemd script is included and will be installed system wide to make it
+feasible to start and stop the Soledad server service using a standard
+interface.
+
+Server database organization
+----------------------------
+
+Soledad Server works with one database per user and one shared database in
+which user's encrypted secrets might be stored.
+
+User database
+~~~~~~~~~~~~~
+
+Users' databases in the server are named 'user-<uuid>' and Soledad Client
+may perform synchronization between its local replicas and the user's
+database in the server. Authorization for creating, updating, deleting and
+retrieving information about the user database as well as performing
+synchronization is handled by the `leap.soledad.server.auth` module.
+
+Shared database
+~~~~~~~~~~~~~~~
+
+Each user may store password-encrypted recovery data in the shared database.
+
+Recovery documents are stored in the database without any information that
+may identify the user. In order to achieve this, the doc_id of recovery
+documents are obtained as a hash of the user's uid and the user's password.
+User's must have a valid token to interact with recovery documents, but the
+server does not perform further authentication because it has no way to know
+which recovery document belongs to each user.
+
+This has some implications:
+
+ * The security of the recovery document doc_id, and thus of access to the
+ recovery document (encrypted) content, as well as tampering with the
+ stored data, all rely on the difficulty of obtaining the user's password
+ (supposing the user's uid is somewhat public) and the security of the hash
+ function used to calculate the doc_id.
+
+ * The security of the content of a recovery document relies on the
+ difficulty of obtaining the user's password.
+
+ * If the user looses his/her password, he/she will not be able to obtain the
+ recovery document.
+
+ * Because of the above, it is recommended that recovery documents expire
+ (not implemented yet) to prevent excess storage.
+
+The authorization for creating, updating, deleting and retrieving recovery
+documents on the shared database is handled by `leap.soledad.server.auth`
+module.