Software /
code /
prosody-modules
Annotate
mod_rest/README.markdown @ 4920:bdac7c717c91
mod_rest: Support parameters in callback URL
E.g.
rest_callback_url = "http://myapi.example:5000/api/{kind}/{type}"
which results in e.g. requests to /api/message/chat
Allows using path routing in web frameworks for dispatch instead of
having to pick apart the payload to further dispatch it.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 09 Apr 2022 00:41:18 +0200 |
parent | 4919:b9f8dd9a7fdb |
child | 4922:c83b009b5bc5 |
rev | line source |
---|---|
3794
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 --- |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 labels: |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 - 'Stage-Alpha' |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 summary: RESTful XMPP API |
4168
7191d4638393
mod_rest: Add packaging metadata to include jsonmap lib and examples
Kim Alvefur <zash@zash.se>
parents:
4069
diff
changeset
|
5 rockspec: |
7191d4638393
mod_rest: Add packaging metadata to include jsonmap lib and examples
Kim Alvefur <zash@zash.se>
parents:
4069
diff
changeset
|
6 build: |
7191d4638393
mod_rest: Add packaging metadata to include jsonmap lib and examples
Kim Alvefur <zash@zash.se>
parents:
4069
diff
changeset
|
7 modules: |
7191d4638393
mod_rest: Add packaging metadata to include jsonmap lib and examples
Kim Alvefur <zash@zash.se>
parents:
4069
diff
changeset
|
8 mod_rest.jsonmap: jsonmap.lib.lua |
7191d4638393
mod_rest: Add packaging metadata to include jsonmap lib and examples
Kim Alvefur <zash@zash.se>
parents:
4069
diff
changeset
|
9 copy_directories: |
7191d4638393
mod_rest: Add packaging metadata to include jsonmap lib and examples
Kim Alvefur <zash@zash.se>
parents:
4069
diff
changeset
|
10 - example |
4518
073f5397c1d2
mod_rest: Replace most mappings by using util.datamapper
Kim Alvefur <zash@zash.se>
parents:
4506
diff
changeset
|
11 - res |
3794
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 --- |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 # Introduction |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 |
3795
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
16 This is yet another RESTful API for sending and receiving stanzas via |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
17 Prosody. It can be used to build bots and components implemented as HTTP |
4535
dc35d2932d3e
mod_rest/README: Mention other modules this one is a superset of
Kim Alvefur <zash@zash.se>
parents:
4518
diff
changeset
|
18 services. It is the spiritual successor to [mod_post_msg] and absorbs |
dc35d2932d3e
mod_rest/README: Mention other modules this one is a superset of
Kim Alvefur <zash@zash.se>
parents:
4518
diff
changeset
|
19 use cases from [mod_http_rest] and [mod_component_http] and other such |
dc35d2932d3e
mod_rest/README: Mention other modules this one is a superset of
Kim Alvefur <zash@zash.se>
parents:
4518
diff
changeset
|
20 modules floating around the Internet. |
3794
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 # Usage |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
4067
5790c3cf615b
mod_rest/README: Describe use on VirtualHosts
Kim Alvefur <zash@zash.se>
parents:
3953
diff
changeset
|
24 ## On VirtualHosts |
5790c3cf615b
mod_rest/README: Describe use on VirtualHosts
Kim Alvefur <zash@zash.se>
parents:
3953
diff
changeset
|
25 |
5790c3cf615b
mod_rest/README: Describe use on VirtualHosts
Kim Alvefur <zash@zash.se>
parents:
3953
diff
changeset
|
26 ```lua |
5790c3cf615b
mod_rest/README: Describe use on VirtualHosts
Kim Alvefur <zash@zash.se>
parents:
3953
diff
changeset
|
27 VirtualHost "example.com" |
5790c3cf615b
mod_rest/README: Describe use on VirtualHosts
Kim Alvefur <zash@zash.se>
parents:
3953
diff
changeset
|
28 modules_enabled = {"rest"} |
5790c3cf615b
mod_rest/README: Describe use on VirtualHosts
Kim Alvefur <zash@zash.se>
parents:
3953
diff
changeset
|
29 ``` |
5790c3cf615b
mod_rest/README: Describe use on VirtualHosts
Kim Alvefur <zash@zash.se>
parents:
3953
diff
changeset
|
30 |
5790c3cf615b
mod_rest/README: Describe use on VirtualHosts
Kim Alvefur <zash@zash.se>
parents:
3953
diff
changeset
|
31 ## As a Component |
3794
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 ``` {.lua} |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 Component "rest.example.net" "rest" |
4068 | 35 component_secret = "dmVyeSBzZWNyZXQgdG9rZW4K" |
36 modules_enabled = {"http_oauth2"} | |
3794
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 ``` |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 |
4068 | 39 ## OAuth2 |
40 | |
41 [mod_http_oauth2] can be used to grant bearer tokens which are | |
42 accepted by mod_rest. | |
43 | |
3794
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 ## Sending stanzas |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 The API endpoint becomes available at the path `/rest`, so the full URL |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 will be something like `https://your-prosody.example:5281/rest`. |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 To try it, simply `curl` an XML stanza payload: |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 ``` {.sh} |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 curl https://prosody.example:5281/rest \ |
4068 | 53 --user username \ |
3794
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 -H 'Content-Type: application/xmpp+xml' \ |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 --data-binary '<message type="chat" to="user@example.org"> |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 <body>Hello!</body> |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 </body>' |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 ``` |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 |
3813 | 60 or a JSON payload: |
61 | |
62 ``` {.sh} | |
63 curl https://prosody.example:5281/rest \ | |
64 --oauth2-bearer dmVyeSBzZWNyZXQgdG9rZW4K \ | |
65 -H 'Content-Type: application/json' \ | |
66 --data-binary '{ | |
67 "body" : "Hello!", | |
68 "kind" : "message", | |
69 "to" : "user@example.org", | |
70 "type" : "chat" | |
71 }' | |
72 ``` | |
73 | |
74 The `Content-Type` header is important! | |
3794
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 |
4477
8df6cc648963
mod_rest: Add more REST-looking way to send stanzas
Kim Alvefur <zash@zash.se>
parents:
4275
diff
changeset
|
76 ### Parameters in path |
8df6cc648963
mod_rest: Add more REST-looking way to send stanzas
Kim Alvefur <zash@zash.se>
parents:
4275
diff
changeset
|
77 |
8df6cc648963
mod_rest: Add more REST-looking way to send stanzas
Kim Alvefur <zash@zash.se>
parents:
4275
diff
changeset
|
78 New alternative format with the parameters `kind`, `type`, and `to` |
8df6cc648963
mod_rest: Add more REST-looking way to send stanzas
Kim Alvefur <zash@zash.se>
parents:
4275
diff
changeset
|
79 embedded in the path: |
8df6cc648963
mod_rest: Add more REST-looking way to send stanzas
Kim Alvefur <zash@zash.se>
parents:
4275
diff
changeset
|
80 |
8df6cc648963
mod_rest: Add more REST-looking way to send stanzas
Kim Alvefur <zash@zash.se>
parents:
4275
diff
changeset
|
81 ``` |
8df6cc648963
mod_rest: Add more REST-looking way to send stanzas
Kim Alvefur <zash@zash.se>
parents:
4275
diff
changeset
|
82 curl https://prosody.example:5281/rest/message/chat/john@example.com \ |
8df6cc648963
mod_rest: Add more REST-looking way to send stanzas
Kim Alvefur <zash@zash.se>
parents:
4275
diff
changeset
|
83 --oauth2-bearer dmVyeSBzZWNyZXQgdG9rZW4K \ |
8df6cc648963
mod_rest: Add more REST-looking way to send stanzas
Kim Alvefur <zash@zash.se>
parents:
4275
diff
changeset
|
84 -H 'Content-Type: text/plain' \ |
8df6cc648963
mod_rest: Add more REST-looking way to send stanzas
Kim Alvefur <zash@zash.se>
parents:
4275
diff
changeset
|
85 --data-binary 'Hello John!' |
8df6cc648963
mod_rest: Add more REST-looking way to send stanzas
Kim Alvefur <zash@zash.se>
parents:
4275
diff
changeset
|
86 ``` |
8df6cc648963
mod_rest: Add more REST-looking way to send stanzas
Kim Alvefur <zash@zash.se>
parents:
4275
diff
changeset
|
87 |
3794
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 ### Replies |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 A POST containing an `<iq>` stanza automatically wait for the reply, |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
91 long-polling style. |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
92 |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 ``` {.sh} |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 curl https://prosody.example:5281/rest \ |
3802
f88e07630e4e
mod_rest: Add support for simple Bearer token auth
Kim Alvefur <zash@zash.se>
parents:
3801
diff
changeset
|
95 --oauth2-bearer dmVyeSBzZWNyZXQgdG9rZW4K \ |
3794
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 -H 'Content-Type: application/xmpp+xml' \ |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 --data-binary '<iq type="get" to="example.net"> |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 <ping xmlns="urn:xmpp:ping"/> |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 </iq>' |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 ``` |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 |
3796
d1ad10b76b00
mod_rest: Catch one (1) reply to a POST-ed stanza from an internal source
Kim Alvefur <zash@zash.se>
parents:
3795
diff
changeset
|
102 Replies to other kinds of stanzas that are generated by the same Prosody |
d1ad10b76b00
mod_rest: Catch one (1) reply to a POST-ed stanza from an internal source
Kim Alvefur <zash@zash.se>
parents:
3795
diff
changeset
|
103 instance *MAY* be returned in the HTTP response. Replies from other |
d1ad10b76b00
mod_rest: Catch one (1) reply to a POST-ed stanza from an internal source
Kim Alvefur <zash@zash.se>
parents:
3795
diff
changeset
|
104 entities (connected clients or remote servers) will not be returned, but |
d1ad10b76b00
mod_rest: Catch one (1) reply to a POST-ed stanza from an internal source
Kim Alvefur <zash@zash.se>
parents:
3795
diff
changeset
|
105 can be forwarded via the callback API described in the next section. |
d1ad10b76b00
mod_rest: Catch one (1) reply to a POST-ed stanza from an internal source
Kim Alvefur <zash@zash.se>
parents:
3795
diff
changeset
|
106 |
4478
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
107 ### Simple info queries |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
108 |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
109 A subset of IQ stanzas can be sent as simple GET requests |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
110 |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
111 ``` |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
112 curl https://prosody.example:5281/rest/version/example.com \ |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
113 --oauth2-bearer dmVyeSBzZWNyZXQgdG9rZW4K \ |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
114 -H 'Accept: application/json' |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
115 ``` |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
116 |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
117 The supported queries are |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
118 |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
119 - `disco` |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
120 - `items` |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
121 - `version` |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
122 - `ping` |
7ab0c423688a
mod_rest: Support GET for certain IQ queries
Kim Alvefur <zash@zash.se>
parents:
4477
diff
changeset
|
123 |
3795
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
124 ## Receiving stanzas |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
125 |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
126 TL;DR: Set this webhook callback URL, get XML `POST`-ed there. |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
127 |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
128 ``` {.lua} |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
129 Component "rest.example.net" "rest" |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
130 rest_callback_url = "http://my-api.example:9999/stanzas" |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
131 ``` |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
132 |
4920
bdac7c717c91
mod_rest: Support parameters in callback URL
Kim Alvefur <zash@zash.se>
parents:
4919
diff
changeset
|
133 The callback URL supports a few variables from the stanza being sent, |
bdac7c717c91
mod_rest: Support parameters in callback URL
Kim Alvefur <zash@zash.se>
parents:
4919
diff
changeset
|
134 namely `{kind}` (e.g. message, presence, iq or meta) and ones |
bdac7c717c91
mod_rest: Support parameters in callback URL
Kim Alvefur <zash@zash.se>
parents:
4919
diff
changeset
|
135 corresponding to stanza attributes: `{type}`, `{to}` and `{from}`. |
bdac7c717c91
mod_rest: Support parameters in callback URL
Kim Alvefur <zash@zash.se>
parents:
4919
diff
changeset
|
136 |
4919
b9f8dd9a7fdb
mod_rest/README: Mention the OPTIONS probe fired at the callback
Kim Alvefur <zash@zash.se>
parents:
4535
diff
changeset
|
137 The preferred format can be indicated via the Accept header in response |
b9f8dd9a7fdb
mod_rest/README: Mention the OPTIONS probe fired at the callback
Kim Alvefur <zash@zash.se>
parents:
4535
diff
changeset
|
138 to an OPTIONS probe that mod_rest does on startup, or by configuring: |
3813 | 139 |
140 ``` {.lua} | |
141 rest_callback_content_type = "application/json" | |
142 ``` | |
143 | |
3795
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
144 Example callback looks like: |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
145 |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
146 ``` {.xml} |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
147 POST /stanzas HTTP/1.1 |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
148 Content-Type: application/xmpp+xml |
3813 | 149 Content-Length: 102 |
3795
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
150 |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
151 <message to="bot@rest.example.net" from="user@example.com" type="chat"> |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
152 <body>Hello</body> |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
153 </message> |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
154 ``` |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
155 |
3813 | 156 or as JSON: |
157 | |
158 ``` {.json} | |
159 POST /stanzas HTTP/1.1 | |
160 Content-Type: application/json | |
161 Content-Length: 133 | |
162 | |
163 { | |
164 "body" : "Hello", | |
165 "from" : "user@example.com", | |
166 "kind" : "message", | |
167 "to" : "bot@rest.example.net", | |
168 "type" : "chat" | |
169 } | |
170 ``` | |
171 | |
3795
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
172 ### Replying |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
173 |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
174 To accept the stanza without returning a reply, respond with HTTP status |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
175 code `202` or `204`. |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
176 |
3797
ed5d7586a61e
mod_rest: Map various HTTP status codes to XMPP stanza errors
Kim Alvefur <zash@zash.se>
parents:
3796
diff
changeset
|
177 HTTP status codes in the `4xx` and `5xx` range are mapped to an |
ed5d7586a61e
mod_rest: Map various HTTP status codes to XMPP stanza errors
Kim Alvefur <zash@zash.se>
parents:
3796
diff
changeset
|
178 appropriate stanza error. |
ed5d7586a61e
mod_rest: Map various HTTP status codes to XMPP stanza errors
Kim Alvefur <zash@zash.se>
parents:
3796
diff
changeset
|
179 |
3795
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
180 For full control over the response, set the `Content-Type` header to |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
181 `application/xmpp+xml` and return an XMPP stanza as an XML snippet. |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
182 |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
183 ``` {.xml} |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
184 HTTP/1.1 200 Ok |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
185 Content-Type: application/xmpp+xml |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
186 |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
187 <message type="chat"> |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
188 <body>Yes, this is bot</body> |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
189 </message> |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
190 ``` |
f51308fcba83
mod_rest: Allow specifying a webhook/callback to handle incoming stanzas
Kim Alvefur <zash@zash.se>
parents:
3794
diff
changeset
|
191 |
3800
cfa00eea896f
mod_rest: Add some text about the payload format
Kim Alvefur <zash@zash.se>
parents:
3797
diff
changeset
|
192 ## Payload format |
cfa00eea896f
mod_rest: Add some text about the payload format
Kim Alvefur <zash@zash.se>
parents:
3797
diff
changeset
|
193 |
3813 | 194 ### JSON |
195 | |
196 ``` {.json} | |
197 { | |
198 "body" : "Hello!", | |
199 "kind" : "message", | |
200 "type" : "chat" | |
201 } | |
202 ``` | |
203 | |
3826
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
204 Further JSON object keys as follows: |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
205 |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
206 #### Messages |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
207 |
3827
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
208 `kind` |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
209 : `"message"` |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
210 |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
211 `type` |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
212 : Commonly `"chat"` for 1-to-1 messages and `"groupchat"` for group |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
213 chat messages. Others include `"normal"`, `"headline"` and |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
214 `"error"`. |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
215 |
3826
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
216 `body` |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
217 : Human-readable message text. |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
218 |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
219 `subject` |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
220 : Message subject or MUC topic. |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
221 |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
222 `html` |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
223 : HTML. |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
224 |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
225 `oob_url` |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
226 : URL of an out-of-band resource, often used for images. |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
227 |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
228 #### Presence |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
229 |
3827
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
230 `kind` |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
231 : `"presence"` |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
232 |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
233 `type` |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
234 : Empty for online or `"unavailable"` for offline. |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
235 |
3826
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
236 `show` |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
237 : [Online |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
238 status](https://xmpp.org/rfcs/rfc6121.html#presence-syntax-children-show), |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
239 `away`, `dnd` etc. |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
240 |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
241 `status` |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
242 : Human-readable status message. |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
243 |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
244 `join` |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
245 : Boolean. Join a group chat. |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
246 |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
247 #### Info-Queries |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
248 |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
249 Only one type of payload can be included in an `iq`. |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
250 |
3827
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
251 `kind` |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
252 : `"iq"` |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
253 |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
254 `type` |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
255 : `"get"` or `"set"` for queries, `"response"` or `"error"` for |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
256 replies. |
7d909976ca88
mod_rest: Describe kind and type fields
Kim Alvefur <zash@zash.se>
parents:
3826
diff
changeset
|
257 |
3826
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
258 `ping` |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
259 : Send a ping. Get a pong. Maybe. |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
260 |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
261 `disco` |
21ffca4d3aae
mod_rest: Document most of JSON mappings
Kim Alvefur <zash@zash.se>
parents:
3820
diff
changeset
|
262 : Retrieve service discovery information about an entity. |
3813 | 263 |
3828
a8aa11cc351d
mod_rest: And the disco#items mapping
Kim Alvefur <zash@zash.se>
parents:
3827
diff
changeset
|
264 `items` |
a8aa11cc351d
mod_rest: And the disco#items mapping
Kim Alvefur <zash@zash.se>
parents:
3827
diff
changeset
|
265 : Discover list of items (other services, groupchats etc). |
a8aa11cc351d
mod_rest: And the disco#items mapping
Kim Alvefur <zash@zash.se>
parents:
3827
diff
changeset
|
266 |
3813 | 267 ### XML |
268 | |
3800
cfa00eea896f
mod_rest: Add some text about the payload format
Kim Alvefur <zash@zash.se>
parents:
3797
diff
changeset
|
269 ``` {.xml} |
cfa00eea896f
mod_rest: Add some text about the payload format
Kim Alvefur <zash@zash.se>
parents:
3797
diff
changeset
|
270 <message type="" id="" to="" from="" xml:lang=""> |
cfa00eea896f
mod_rest: Add some text about the payload format
Kim Alvefur <zash@zash.se>
parents:
3797
diff
changeset
|
271 ... |
cfa00eea896f
mod_rest: Add some text about the payload format
Kim Alvefur <zash@zash.se>
parents:
3797
diff
changeset
|
272 </message> |
cfa00eea896f
mod_rest: Add some text about the payload format
Kim Alvefur <zash@zash.se>
parents:
3797
diff
changeset
|
273 ``` |
cfa00eea896f
mod_rest: Add some text about the payload format
Kim Alvefur <zash@zash.se>
parents:
3797
diff
changeset
|
274 |
cfa00eea896f
mod_rest: Add some text about the payload format
Kim Alvefur <zash@zash.se>
parents:
3797
diff
changeset
|
275 An XML declaration (`<?xml?>`) **MUST NOT** be included. |
cfa00eea896f
mod_rest: Add some text about the payload format
Kim Alvefur <zash@zash.se>
parents:
3797
diff
changeset
|
276 |
cfa00eea896f
mod_rest: Add some text about the payload format
Kim Alvefur <zash@zash.se>
parents:
3797
diff
changeset
|
277 The payload MUST contain one (1) `message`, `presence` or `iq` stanza. |
cfa00eea896f
mod_rest: Add some text about the payload format
Kim Alvefur <zash@zash.se>
parents:
3797
diff
changeset
|
278 |
3801
d59fb4dcf100
mod_rest: Verify that @xmlns is left empty
Kim Alvefur <zash@zash.se>
parents:
3800
diff
changeset
|
279 The stanzas MUST NOT have an `xmlns` attribute, and the default/empty |
d59fb4dcf100
mod_rest: Verify that @xmlns is left empty
Kim Alvefur <zash@zash.se>
parents:
3800
diff
changeset
|
280 namespace is treated as `jabber:client`. |
d59fb4dcf100
mod_rest: Verify that @xmlns is left empty
Kim Alvefur <zash@zash.se>
parents:
3800
diff
changeset
|
281 |
3808
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
282 # Examples |
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
283 |
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
284 ## Python / Flask |
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
285 |
3820
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
286 Simple echo bot that responds to messages as XML: |
3808
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
287 |
3813 | 288 ``` {.python} |
3808
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
289 from flask import Flask, Response, request |
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
290 import xml.etree.ElementTree as ET |
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
291 |
3809
a70f5a6c7f01
mod_rest: Apply Python source formatting on example
Kim Alvefur <zash@zash.se>
parents:
3808
diff
changeset
|
292 app = Flask("echobot") |
a70f5a6c7f01
mod_rest: Apply Python source formatting on example
Kim Alvefur <zash@zash.se>
parents:
3808
diff
changeset
|
293 |
3808
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
294 |
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
295 @app.before_request |
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
296 def parse(): |
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
297 request.stanza = ET.fromstring(request.data) |
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
298 |
3809
a70f5a6c7f01
mod_rest: Apply Python source formatting on example
Kim Alvefur <zash@zash.se>
parents:
3808
diff
changeset
|
299 |
a70f5a6c7f01
mod_rest: Apply Python source formatting on example
Kim Alvefur <zash@zash.se>
parents:
3808
diff
changeset
|
300 @app.route("/", methods=["POST"]) |
3808
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
301 def hello(): |
3809
a70f5a6c7f01
mod_rest: Apply Python source formatting on example
Kim Alvefur <zash@zash.se>
parents:
3808
diff
changeset
|
302 if request.stanza.tag == "message": |
a70f5a6c7f01
mod_rest: Apply Python source formatting on example
Kim Alvefur <zash@zash.se>
parents:
3808
diff
changeset
|
303 return Response( |
a70f5a6c7f01
mod_rest: Apply Python source formatting on example
Kim Alvefur <zash@zash.se>
parents:
3808
diff
changeset
|
304 "<message><body>Yes this is bot</body></message>", |
a70f5a6c7f01
mod_rest: Apply Python source formatting on example
Kim Alvefur <zash@zash.se>
parents:
3808
diff
changeset
|
305 content_type="application/xmpp+xml", |
a70f5a6c7f01
mod_rest: Apply Python source formatting on example
Kim Alvefur <zash@zash.se>
parents:
3808
diff
changeset
|
306 ) |
3808
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
307 |
3809
a70f5a6c7f01
mod_rest: Apply Python source formatting on example
Kim Alvefur <zash@zash.se>
parents:
3808
diff
changeset
|
308 return Response(status=501) |
3808
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
309 |
3809
a70f5a6c7f01
mod_rest: Apply Python source formatting on example
Kim Alvefur <zash@zash.se>
parents:
3808
diff
changeset
|
310 |
a70f5a6c7f01
mod_rest: Apply Python source formatting on example
Kim Alvefur <zash@zash.se>
parents:
3808
diff
changeset
|
311 if __name__ == "__main__": |
3808
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
312 app.run() |
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
313 ``` |
02164f8aebac
mod_rest: Add an example Flask thing
Kim Alvefur <zash@zash.se>
parents:
3802
diff
changeset
|
314 |
3820
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
315 And a JSON variant: |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
316 |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
317 ``` {.python} |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
318 from flask import Flask, Response, request, jsonify |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
319 |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
320 app = Flask("echobot") |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
321 |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
322 |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
323 @app.route("/", methods=["POST"]) |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
324 def hello(): |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
325 print(request.data) |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
326 if request.is_json: |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
327 data = request.get_json() |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
328 if data["kind"] == "message": |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
329 return jsonify({"body": "hello"}) |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
330 |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
331 return Response(status=501) |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
332 |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
333 |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
334 if __name__ == "__main__": |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
335 app.run() |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
336 ``` |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
337 |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
338 Remember to set `rest_callback_content_type = "application/json"` for |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
339 this to work. |
d3757e089433
mod_rest: Add a JSON callback example
Kim Alvefur <zash@zash.se>
parents:
3813
diff
changeset
|
340 |
3857
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
341 # JSON mapping |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
342 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
343 This section describes the JSON mapping. It can't represent any possible |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
344 stanza, for full flexibility use the XML mode. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
345 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
346 ## Stanza basics |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
347 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
348 `kind` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
349 : String representing the kind of stanza, one of `"message"`, |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
350 `"presence"` or `"iq"`. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
351 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
352 `type` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
353 : String with the type of stanza, appropriate values vary depending on |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
354 `kind`, see [RFC 6121]. E.g.`"chat"` for *message* stanzas etc. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
355 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
356 `to` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
357 : String containing the XMPP Address of the destination / recipient of |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
358 the stanza. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
359 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
360 `from` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
361 : String containing the XMPP Address of the sender the stanza. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
362 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
363 `id` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
364 : String with a reasonably unique identifier for the stanza. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
365 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
366 ## Basic Payloads |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
367 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
368 ### Messages |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
369 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
370 `body` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
371 : String, human readable text message. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
372 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
373 `subject` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
374 : String, human readable summary equivalent to an email subject or the |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
375 chat room topic in a `type:groupchat` message. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
376 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
377 ### Presence |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
378 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
379 `show` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
380 : String representing availability, e.g. `"away"`, `"dnd"`. No value |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
381 means a normal online status. See [RFC 6121] for the full list. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
382 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
383 `status` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
384 : String with a human readable text message describing availability. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
385 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
386 ## More payloads |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
387 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
388 ### Messages |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
389 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
390 `state` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
391 : String with current chat state, e.g. `"active"` (default) and |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
392 `"composing"` (typing). |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
393 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
394 `html` |
4506
508cb880b163
mod_rest: Fix typos [codespell]
Kim Alvefur <zash@zash.se>
parents:
4478
diff
changeset
|
395 : String with HTML allowing rich formatting. **MUST** be contained in a |
3857
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
396 `<body>` element. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
397 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
398 `oob_url` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
399 : String with an URL of an external resource. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
400 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
401 ### Presence |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
402 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
403 `join` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
404 : Boolean, used to join group chats. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
405 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
406 ### IQ |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
407 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
408 `ping` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
409 : Boolean, a simple ping query. "Pongs" have only basic fields |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
410 presents. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
411 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
412 `version` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
413 : Map with `name`, `version` fields, and optionally an `os` field, to |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
414 describe the software. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
415 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
416 #### Service Discovery |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
417 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
418 `disco` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
419 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
420 : Boolean `true` in a `kind:iq` `type:get` for a service discovery |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
421 query. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
422 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
423 Responses have a map containing an array of available features in |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
424 the `features` key and an array of "identities" in the `identities` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
425 key. Each identity has a `category` and `type` field as well as an |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
426 optional `name` field. See [XEP-0030] for further details. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
427 |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
428 `items` |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
429 : Boolean `true` in a `kind:iq` `type:get` for a service discovery |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
430 items list query. The response contain an array of items like |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
431 `{"jid":"xmpp.address.here","name":"Description of item"}`. |
8752e5b5dd08
mod_rest/README: Add a section describing the JSON mapping
Kim Alvefur <zash@zash.se>
parents:
3828
diff
changeset
|
432 |
3953
2c6d5734ae04
mod_rest: Add JSON mapping of XEP-0128: Service Discovery Extensions
Kim Alvefur <zash@zash.se>
parents:
3946
diff
changeset
|
433 `extensions` |
2c6d5734ae04
mod_rest: Add JSON mapping of XEP-0128: Service Discovery Extensions
Kim Alvefur <zash@zash.se>
parents:
3946
diff
changeset
|
434 : Map of extended feature discovery (see [XEP-0128]) data with |
2c6d5734ae04
mod_rest: Add JSON mapping of XEP-0128: Service Discovery Extensions
Kim Alvefur <zash@zash.se>
parents:
3946
diff
changeset
|
435 `FORM_DATA` fields as the keys pointing at maps with the rest of the |
2c6d5734ae04
mod_rest: Add JSON mapping of XEP-0128: Service Discovery Extensions
Kim Alvefur <zash@zash.se>
parents:
3946
diff
changeset
|
436 data. |
2c6d5734ae04
mod_rest: Add JSON mapping of XEP-0128: Service Discovery Extensions
Kim Alvefur <zash@zash.se>
parents:
3946
diff
changeset
|
437 |
3890
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
438 #### Ad-Hoc Commands |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
439 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
440 Used to execute arbitrary commands on supporting entities. |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
441 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
442 `command` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
443 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
444 : String representing the command `node` or Map with the following |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
445 possible fields: |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
446 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
447 `node` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
448 : Required string with node from disco\#items query for the |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
449 command to execute. |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
450 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
451 `action` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
452 : Optional enum string defaulting to `"execute"`. Multi-step |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
453 commands may involve `"next"`, `"prev"`, `"complete"` or |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
454 `"cancel"`. |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
455 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
456 `actions` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
457 : Set (map of strings to `true`) with available actions to proceed |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
458 with in multi-step commands. |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
459 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
460 `status` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
461 : String describing the status of the command, normally |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
462 `"executing"`. |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
463 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
464 `sessionid` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
465 : Random session ID issued by the responder to identify the |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
466 session in multi-step commands. |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
467 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
468 `note` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
469 : Map with `"type"` and `"text"` fields that carry simple result |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
470 information. |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
471 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
472 `form` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
473 : Data form with description of expected input and data types in |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
474 the next step of multi-step commands. **TODO** document format. |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
475 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
476 `data` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
477 : Map with only the data for result dataforms. Fields may be |
4506
508cb880b163
mod_rest: Fix typos [codespell]
Kim Alvefur <zash@zash.se>
parents:
4478
diff
changeset
|
478 strings or arrays of strings. |
3890
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
479 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
480 ##### Example |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
481 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
482 Discovering commands: |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
483 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
484 ``` {.json} |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
485 { |
3946
2a5b42e4db07
mod_rest/README: Fix adhoc example
Kim Alvefur <zash@zash.se>
parents:
3890
diff
changeset
|
486 "items" : { |
3890
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
487 "node" : "http://jabber.org/protocol/commands" |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
488 }, |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
489 "id" : "8iN9hwdAAcfTBchm", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
490 "kind" : "iq", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
491 "to" : "example.com", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
492 "type" : "get" |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
493 } |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
494 ``` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
495 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
496 Response: |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
497 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
498 ``` {.json} |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
499 { |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
500 "from" : "example.com", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
501 "id" : "8iN9hwdAAcfTBchm", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
502 "items" : [ |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
503 { |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
504 "jid" : "example.com", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
505 "name" : "Get uptime", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
506 "node" : "uptime" |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
507 } |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
508 ], |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
509 "kind" : "iq", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
510 "type" : "result" |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
511 } |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
512 ``` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
513 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
514 Execute the command: |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
515 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
516 ``` {.json} |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
517 { |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
518 "command" : { |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
519 "node" : "uptime" |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
520 }, |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
521 "id" : "Jv-87nRaP6Mnrp8l", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
522 "kind" : "iq", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
523 "to" : "example.com", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
524 "type" : "set" |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
525 } |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
526 ``` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
527 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
528 Executed: |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
529 |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
530 ``` {.json} |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
531 { |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
532 "command" : { |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
533 "node" : "uptime", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
534 "note" : { |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
535 "text" : "This server has been running for 0 days, 20 hours and 54 minutes (since Fri Feb 7 18:05:30 2020)", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
536 "type" : "info" |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
537 }, |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
538 "sessionid" : "6380880a-93e9-4f13-8ee2-171927a40e67", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
539 "status" : "completed" |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
540 }, |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
541 "from" : "example.com", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
542 "id" : "Jv-87nRaP6Mnrp8l", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
543 "kind" : "iq", |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
544 "type" : "result" |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
545 } |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
546 ``` |
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
547 |
4275 | 548 # TODO |
549 | |
550 - Describe multi-step commands with dataforms. | |
551 - Versioned API, i.e. /v1/stanzas | |
552 - Bind resource to webhook/callback | |
3890
117a979ef930
mod_rest/README: Describe Ad-Hoc command mapping
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
553 |
3794
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
554 # Compatibility |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
555 |
4b258329e6e4
mod_rest: Initial commit of another RESTful API module
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
556 Requires Prosody trunk / 0.12 |