Diff

mod_http_roster_admin/README @ 2161:95a9f2d234da

Add mod_http_roster_admin
author JC Brand <jc@opkode.com>
date Fri, 15 Apr 2016 16:59:27 +0000
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_http_roster_admin/README	Fri Apr 15 16:59:27 2016 +0000
@@ -0,0 +1,91 @@
+mod_http_roster_admin
+=====================
+
+NOTE: THIS MODULE IS RELEASED UNDER THE MOZILLA PUBLIC LICENSE VERSION 2.
+
+Normally the XMPP server will store and maintain the users' contact
+rosters. This module lets you delegate roster management to an external
+service.
+
+Prosody will make an HTTP request to fetch the roster from the external
+service. The service will need to notify Prosody whenever a user's roster
+changes, so that Prosody can fetch a new roster for that user.
+
+Configuring this module
+-----------------------
+
+This module relies on `mod_storage_memory` and `mod_block_subscriptions`.
+
+In `.parts/prosody/etc/prosody/prosody.cfg.lua`, where your particular
+`VirtualHost` is being configured, add the following:
+
+    modules_enabled = {
+        "http_roster_admin",
+        "block_subscriptions",
+        "storage_memory",
+        "http_files"
+    }
+    modules_disabled = {
+         -- Prosody will get the roster from the backend app,
+         -- so we disable the default roster module.
+        "roster"
+    }
+    storage = { roster = "memory" }
+    http_roster_url = "http://localhost/contacts/%s" -- %s will be replaced by an URL-encoded username
+
+The `http_roster_url` parameter needs to be configured to point to the
+URL in the backend application which returns users' contacts rosters.
+
+In this URL, the pattern `%s` is replaced by an URL-encoded username.
+
+When the user *john* then connects to Prosody, and `http_roster_url` is
+set to “http://app.example.org/contacts/%s”, then Prosody will make a
+GET request to http://app.example.org/contacts/john
+
+Notifying Prosody of roster changes
+***********************************
+
+The external service needs to notify Prosody whenever a user's roster
+changes. To do this, it must make an HTTP POST request to either:
+
+* http://localhost:5280/roster_admin/refresh
+* https://localhost:5281/roster_admin/refresh
+
+Make sure that the "http_files" module is enabled in Prosody's configuration,
+for the above URLs to served.
+
+Ports 5280/5281 can be firewalled and the web server (i.e. Apache or Nginx)
+can be configured to reverse proxy those URLs to for example
+https://example.org/http-bind.
+
+The contents of the POST should be a JSON encoded array of usernames whose
+rosters have changed.
+
+For example, if user ‘john’ became friends with ‘aaron’, both john’s
+contact list and aaron’s contact lists have changed:
+
+```
+    ["john", "aaron"]
+```
+
+When the operation is complete Prosody will reply with a summary of the
+operation - a JSON object containing:
+
+* **status**: either “ok” (success) or “error” (operation completely failed)
+* **message**: A human-readable message (for logging and debugging purposes)
+* **updated**: The number of rosters successfully updated
+* **errors**: The number of rosters that failed to update
+
+Example:
+
+```
+    {
+        "status":  "ok",
+        "message": "roster update complete",
+        "updated": 2,
+        "errors":  0
+    }
+```
+
+Prosody may also return status codes `400` or `500` in case of errors (such
+as a missing/malformed body).