1803
+ − 1 ---
+ − 2 labels:
+ − 3 summary: 'HTTP access to prosody’s storage mechanism'
+ − 4 ...
+ − 5
+ − 6 Introduction
+ − 7 ------------
+ − 8
+ − 9 This module gives HTTP access to prosody’s storage mechanism. It uses
+ − 10 normal HTTP verbs and [Basic HTTP
+ − 11 authentication ](http://tools.ietf.org/html/rfc2617 ), so you could call
+ − 12 it RESTful if you like buzzwords.
+ − 13
+ − 14 Syntax
+ − 15 ------
+ − 16
+ − 17 To Fetch data, issue a normal GET request
+ − 18
+ − 19 GET /data[/<host>/<user>]/<store>[/<format>] HTTP/1.1
+ − 20 Authorization: <base64(authzid:password)>
+ − 21
+ − 22 OR
+ − 23
+ − 24 PUT|POST /data[/<host>/<user>]/<store> HTTP/1.1
+ − 25 Content-Type: text/x-lua | application/json
+ − 26
+ − 27 <data>
+ − 28
+ − 29 These map to `datamanager.method(user, host, store, data)` , where choice
+ − 30 of `method` and its parameters are explained below.
+ − 31
+ − 32 ### Verbs
+ − 33
+ − 34 Verb Meaning datamanager method
+ − 35 -------- ------------------------------- ---------------------------
+ − 36 `GET` Just fetch data `load()` or `list_load()`
+ − 37 `PUT` Replace all data in the store `store()`
+ − 38 `POST` Append item to the store `list_append()`
+ − 39
+ − 40 Note: In a `GET` request, if `load()` returns `nil` , `list_load()` will
+ − 41 be tried instead.
+ − 42
+ − 43 ### Fields
+ − 44
+ − 45 Field Description Default
+ − 46 ---------- ----------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------
+ − 47 `host` Which virtual host to access Required. If not set in the path, the domain-part of the authzid is used.
+ − 48 `user` Which users storage to access Required. If not set in the path, uses the node part of the authzid.
+ − 49 `store` Which storage to access. Required.
+ − 50 `format` Which format to serialize to. `json` and `lua` are supported. When uploading data, the `Content-Type` header is used. `json`
+ − 51 `data` The actual data to upload in a `PUT` or `POST` request. `nil`
+ − 52
+ − 53 Note: Only admins can change data for users other than themselves.
+ − 54
+ − 55 ### Example usage
+ − 56
+ − 57 Here follows some example usage using `curl` .
+ − 58
+ − 59 Get your account details:
+ − 60
+ − 61 curl http://prosody.local:5280/data/accounts -u user@example.com:secr1t
+ − 62 {"password":"secr1t"}
+ − 63
+ − 64 Set someones account details:
+ − 65
+ − 66 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"}'
+ − 67
+ − 68 ### Client library
+ − 69
+ − 70 - https://metacpan.org/module/Prosody::Mod::Data::Access
+ − 71
+ − 72 ### TODO
+ − 73
+ − 74 - Use `Accept` header.