aboutsummaryrefslogtreecommitdiff
path: root/doc/http_post.md
blob: 359fb2adf4fa5778c877dfe69258e1afcaf0e0ec (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# 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
	]}

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
	
	<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>

### 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 "<pubsub><create node='princely_musings'/></pubsub>" http://localhost:5280/pshb/localhost
	
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>
	
	$ 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
	
	
	
### Deleting a node ###

A node is deleted by: 

	$ curl -X DELETE -u cstar@localhost:encore http://localhost:5280/pshb/localhost/princely_musings