# 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///`. 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 ]} It will automatically detect the version of mod_pubsub (odbc or mnesia) and call the appropriate module. ## 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. * 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. ## Usage example with cURL ## ### 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 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 ### Getting the service document ### No authentication necessary. All nodes are listed. $ curl -i http://host:port/pshb/domain/ ### Getting items from a node ### No authentication done, and all nodes are accessible. $ curl -i http://host:port/pshb/domain/node/ ### Posting a new item ### $ 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 User ability to post is based on node configuration. ### 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. ### Creating a new node ### An instant node can be created if server configuration allows: $ curl -X POST -u cstar@localhost:encore -d "" http://localhost:5280/pshb/localhost or $ curl -X POST -u cstar@localhost:encore -d "" http://localhost:5280/pshb/localhost configure element (as per XEP-60) can be passed in the pubsub body. $ cat createnode.xml http://jabber.org/protocol/pubsub#node_config Princely Musings (Atom) 1028 Atom $ 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 ### Editing a node configuration ### $ cat editnode.xml http://jabber.org/protocol/pubsub#node_config Princely Musings (Atom) 1 1 1 10 604800 roster $ curl -i -X PUT -u cstar@localhost:encore -d @createnode.xml http://localhost:5280/pshb/localhost/princely_musings ### Deleting a node ### A node is deleted by: $ curl -X DELETE -u cstar@localhost:encore http://localhost:5280/pshb/localhost/princely_musings