This module gives HTTP access to prosody’s storage mechanism. It uses normal HTTP verbs and Basic HTTP authentication, so you could call it RESTful if you like buzzwords.
To Fetch data, issue a normal GET request
GET /data[/<host>/<user>]/<store>[/<format>] HTTP/1.1
Authorization: <base64(authzid:password)>
OR
PUT|POST /data[/<host>/<user>]/<store> HTTP/1.1
Content-Type: text/x-lua | application/json
<data>
These map to
datamanager.method(user, host, store, data)
, where choice
of method
and its parameters are explained below.
Verb | Meaning | datamanager method |
---|---|---|
GET |
Just fetch data | load() or
list_load() |
PUT |
Replace all data in the store | store() |
POST |
Append item to the store | list_append() |
Note: In a GET
request, if load()
returns
nil
, list_load()
will be tried instead.
Field | Description | Default |
---|---|---|
host |
Which virtual host to access | Required. If not set in the path, the domain-part of the authzid is used. |
user |
Which users storage to access | Required. If not set in the path, uses the node part of the authzid. |
store |
Which storage to access. | Required. |
format |
Which format to serialize to.
json and lua are supported. When uploading
data, the Content-Type header is used. |
json |
data |
The actual data to upload in a
PUT or POST request. |
nil |
Note: Only admins can change data for users other than themselves.
Here follows some example usage using curl
.
Get your account details:
curl http://prosody.local:5280/data/accounts -u user@example.com:secr1t
{"password":"secr1t"}
Set someones account details:
curl -X PUT http://prosody.local:5280/data/example.com/user/accounts -u admin@host:r00tp4ssw0rd --header 'Content-Type: application/json' --data-binary '{"password":"changeme"}'
Accept
header.trunk | Doesn’t work (uses is_admin) |
0.12 | Works? |
With the plugin installer in Prosody 0.12 you can use:
sudo prosodyctl install --server=https://modules.prosody.im/rocks/ mod_data_access
For earlier versions see the documentation for installing 3rd party modules