2010-09-07 11:32:14 +02:00
# Managing pubsub nodes through HTTP Atompub #
## Configuration ##
These options will be used by the service to know how to build URLs. Using the previous configuration items the service should be accessed through `http://notify.push.bbc.co.uk:5280/pshb/<host>/<node>/` .
Also, in the ejabberd_http handler configuration, add the identified line.
{5280, ejabberd_http, [
http_poll,
web_admin,
{request_handlers, [{["pshb"], pshb_http}]} % this should be added
]}
2010-09-07 17:23:13 +02:00
It will automatically detect the version of mod_pubsub (odbc or mnesia) and call the appropriate module.
2010-09-07 14:35:40 +02:00
## Important notice ##
In the current version of the code, some security checks are not done :
* node creation uses the default `all` access_createnode acl, not checking for the actual configuration.
2010-09-07 17:23:13 +02:00
* most read operations are successfully executed without authentication. HOWEVER listing items can only be done when the node access_model is "open". In all other cases, the service returns 403. A finer grained authentication will be implemented.
2010-09-07 11:32:14 +02:00
## Usage example with cURL ##
2010-09-07 16:22:57 +02:00
### Errors ###
HTTP status codes are used as intended. Additionally, the XMPP error stanza can also be set in the body :
$ curl -i -X POST -u cstar@localhost:encore -d @createnode .xml http://localhost:5280/pshb/localhost
HTTP/1.1 409 Conflict
Content-Type: text/html; charset=utf-8
Content-Length: 95
Content-type: application/xml
< error code = '409' type = 'cancel' > < conflict xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' / > < / error >
or
$ curl -i -X DELETE -u cstar@localhost:encore http://localhost:5280/pshb/localhost/princely_musings
HTTP/1.1 404 Not Found
Content-Type: text/html; charset=utf-8
Content-Length: 101
Content-type: application/xml
< error code = '404' type = 'cancel' > < item-not-found xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' / > < / error >
2010-09-07 11:32:14 +02:00
### Getting the service document ###
No authentication necessary. All nodes are listed.
2010-09-07 16:22:57 +02:00
$ curl -i http://host:port/pshb/domain/
2010-09-07 11:32:14 +02:00
### Getting items from a node ###
No authentication done, and all nodes are accessible.
2010-09-07 16:22:57 +02:00
$ curl -i http://host:port/pshb/domain/node/
2010-09-07 11:32:14 +02:00
### Posting a new item ###
2010-09-07 16:22:57 +02:00
$ curl -u jid:password -i -X POST -d @entry .atom http://post:port/pshb/domain/node
User ability to post is based on node configuration.
### Editing a new item ###
$ curl -u jid:password -i -X POST -d @entry .atom http://post:port/pshb/domain/node/itemid
2010-09-07 11:32:14 +02:00
User ability to post is based on node configuration.
2010-09-07 16:42:12 +02:00
### Deleting an item ###
$ curl -u jid:password -i -X DELETE http://post:port/pshb/domain/node/itemid
User ability to post is based on node configuration.
2010-09-07 11:32:14 +02:00
### Creating a new node ###
2010-09-07 14:35:40 +02:00
An instant node can be created if server configuration allows:
2010-09-07 11:32:14 +02:00
2010-09-07 16:22:57 +02:00
$ curl -X POST -u cstar@localhost:encore -d "" http://localhost:5280/pshb/localhost
2010-09-07 14:35:40 +02:00
or
2010-09-07 16:22:57 +02:00
$ curl -X POST -u cstar@localhost:encore -d "< pubsub > < create node = 'princely_musings' / > < / pubsub > " http://localhost:5280/pshb/localhost
2010-09-07 14:35:40 +02:00
configure element (as per XEP-60) can be passed in the pubsub body.
$ cat createnode.xml
< pubsub > < create node = 'princely_musings' type = 'flat' / >
< x xmlns = 'jabber:x:data' type = 'submit' >
< field var = 'FORM_TYPE' type = 'hidden' >
< value > http://jabber.org/protocol/pubsub#node_config< / value >
< / field >
< field var = 'pubsub#title' > < value > Princely Musings (Atom)< / value > < / field >
< field var = 'pubsub#max_payload_size' > < value > 1028< / value > < / field >
< field var = 'pubsub#type' > < value > Atom< / value > < / field >
< / x >
< / pubsub >
2010-09-07 16:22:57 +02:00
$ curl -i -X POST -u cstar@localhost:encore -d @createnode .xml http://localhost:5280/pshb/localhost
HTTP/1.1 200 OK
Content-Length: 130
Content-Type: application/xml
<?xml version="1.0" encoding="utf-8"?> < pubsub xmlns = 'http://jabber.org/protocol/pubsub' > < create node = 'princely_musings' / > < / pubsub >
### Editing a node configuration ###
$ cat editnode.xml
< pubsub xmlns = 'http://jabber.org/protocol/pubsub#owner' >
< configure node = 'princely_musings' >
< x xmlns = 'jabber:x:data' type = 'submit' >
< field var = 'FORM_TYPE' type = 'hidden' >
< value > http://jabber.org/protocol/pubsub#node_config< / value >
< / field >
< field var = 'pubsub#title' > < value > Princely Musings (Atom)< / value > < / field >
< field var = 'pubsub#deliver_notifications' > < value > 1< / value > < / field >
< field var = 'pubsub#deliver_payloads' > < value > 1< / value > < / field >
< field var = 'pubsub#persist_items' > < value > 1< / value > < / field >
< field var = 'pubsub#max_items' > < value > 10< / value > < / field >
< field var = 'pubsub#item_expire' > < value > 604800< / value > < / field >
< field var = 'pubsub#access_model' > < value > roster< / value > < / field >
< / x >
< / configure >
< / pubsub >
$ curl -i -X PUT -u cstar@localhost:encore -d @createnode .xml http://localhost:5280/pshb/localhost/princely_musings
2010-09-07 14:35:40 +02:00
### Deleting a node ###
A node is deleted by:
2010-09-07 16:22:57 +02:00
$ curl -X DELETE -u cstar@localhost:encore http://localhost:5280/pshb/localhost/princely_musings
2010-09-07 11:32:14 +02:00