Software /
code /
prosody-modules
Diff
mod_delegation/README.markdown @ 1803:4d73a1a6ba68
Convert all wiki pages to Markdown
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 28 Aug 2015 18:03:58 +0200 |
parent | 1782:29f3d6b7ad16 |
child | 1993:66aaf7c3cb29 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_delegation/README.markdown Fri Aug 28 18:03:58 2015 +0200 @@ -0,0 +1,110 @@ +--- +labels: +- 'Stage-Alpha' +summary: 'XEP-0355 (Namespace Delegation) implementation' +... + +Introduction +============ + +Namespace Delegation is an extension which allows server to delegate +some features handling to an entity/component. Typical use case is an +external PEP service, but it can be used more generally when your +prefered server lack one internal feature and you found an external +component which can do it. + +Details +======= + +You can have all the details by reading the +[XEP-0355](http://xmpp.org/extensions/xep-0355.html). Only the admin +mode is implemented so far. + +If you use it with a component, you need to patch +core/mod\_component.lua to fire a new signal. To do it, copy the +following patch in a, for example, /tmp/component.patch file: + + diff --git a/plugins/mod_component.lua b/plugins/mod_component.lua + --- a/plugins/mod_component.lua + +++ b/plugins/mod_component.lua + @@ -85,6 +85,7 @@ + session.type = "component"; + module:log("info", "External component successfully authenticated"); + session.send(st.stanza("handshake")); + + module:fire_event("component-authenticated", { session = session }); + + return true; + end + +Then, at the root of prosody, enter: + +`patch -p1 < /tmp/component.patch` + +Usage +===== + +To use the module, like usual add **"delegation"** to your +modules\_enabled. Note that if you use it with a local component, you +also need to activate the module in your component section: + + modules_enabled = { + [...] + + "delegation"; + } + + [...] + + Component "youcomponent.yourdomain.tld" + component_secret = "yourpassword" + modules_enabled = {"delegation"} + +then specify delegated namespaces **in your host section** like that: + + VirtualHost "yourdomain.tld" + + delegations = { + ["urn:xmpp:mam:0"] = { + filtering = {"node"}; + jid = "pubsub.yourdomain.tld"; + }, + ["http://jabber.org/protocol/pubsub"] = { + jid = "pubsub.yourdomain.tld"; + }, + } + +Here all MAM requests with a "node" attribute (i.e. all MAM pubsub +request) will be delegated to pubsub.yourdomain.tld. Similarly, all +pubsub request to the host (i.e. the PEP requests) will be delegated to +pubsub.yourdomain.tld. + +**/! Be extra careful when you give a delegation to an entity/component, +it's a powerful access, only do it if you absoly trust the +component/entity, and you know where the software is coming from** + +Configuration +============= + +The configuration is done with a table which map delegated namespace to +namespace data. Namespace data MUST have a **jid** (in the form **jid = +"delegated@domain.tld"**) and MAY have an additional **filtering** +array. If filtering is present, request with attributes in the array +will be delegated, other will be treated normally (i.e. by Prosody). + +If your are not a developper, the delegated namespace(s)/attribute(s) +are most probably specified with the external component/entity you want +to use. + +Compatibility +============= + + ----- ---------------------------------------------------- + dev Need a patched core/mod\_component.lua (see above) + 0.9 Need a patched core/mod\_component.lua (see above) + ----- ---------------------------------------------------- + +Note +==== + +This module is often used with mod\_privilege (c.f. XEP for more +details)