SleekPubsub icon indicating copy to clipboard operation
SleekPubsub copied to clipboard

Publish-Subscribe Component w/ XMPP, REST, and Ad-hoc interfaces

SleekPubsub is an XMPP Publish-Subscribe implementation that aims to be a creative and flexible solution to your publish-subscribe needs. SleekPubsub implements a XEP-0060 interface, an HTTP RESTful interface, a XEP-0050 (Ad Hoc Commands) interface, and a bot/chat interface.

Credits

Author: Nathan Fritz jid: xmpp:[email protected]

Contributors: Michael Garvin

Unusual Features

  • many node types -- start by overriding leaf and create your own behavior
  • payloads can optionally create chat IM without pubsub payload.
  • subscribe to the component and it can automatically subscribe you to a node
  • subscribe to a node and the full jid that you subscribe to can be the source of all of your updates, rather than the bare component jid

RESTful Interface

All HTTP calls are protected with http-auth which is configured in the ini [rest] section

So far:

GET /default/ get the default config in json

POST /node/[node] create or reconfigure node w/ config via json

GET /node/[node] retrieve config in json

DELETE /node/[node] remove a node

GET /subscribe/[node]?jid=[jid] subscribe a jid to node

GET /unsubscribe/[node]?jid=[jid]&subid=[subscription id] unsubscribe a jid from a node

POST /publish/[node] publish to a node via xml body

GET /affiliation/[node] get node affiliations

POST /affiliations/[node] update node affiliations

**NOTE: POSTS needs to be content-type of text/json or text/xml

Usage: publish_subscribe.py [options]

Options: -h, --help show this help message and exit --daemon run as daemon -q, --quiet set logging to ERROR -d, --debug set logging to DEBUG -v, --verbose set logging to COMM -c CONFIGFILE, --config=CONFIGFILE set config file to use

Requirements

SleekXMPP github master (will tag a release soon) Python 3.x (will make 2.6 compatible soon)

Quickstart

See INSTALL file

Gotchas

  • The sqlite3 db will not work if you switch between python2.6 and 3.x