Software / code / prosody-modules
Comparison
mod_invites_api/README.markdown @ 4115:165ade4ce97b
mod_invites_api: New module to create new invites over HTTP
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sun, 13 Sep 2020 11:05:19 +0100 |
| child | 4223:4ec755c13e9b |
comparison
equal
deleted
inserted
replaced
| 4114:4656a64e59be | 4115:165ade4ce97b |
|---|---|
| 1 --- | |
| 2 labels: | |
| 3 - 'Stage-Beta' | |
| 4 summary: 'Authenticated HTTP API to create invites' | |
| 5 rockspec: | |
| 6 dependencies: | |
| 7 - mod_invites | |
| 8 ... | |
| 9 | |
| 10 Introduction | |
| 11 ============ | |
| 12 | |
| 13 This module is part of the suite of modules that implement invite-based | |
| 14 account registration for Prosody. The other modules are: | |
| 15 | |
| 16 - mod_invites | |
| 17 - mod_invites_adhoc | |
| 18 - mod_invites_page | |
| 19 - mod_invites_register | |
| 20 - mod_invites_register_web | |
| 21 - mod_register_apps | |
| 22 | |
| 23 For details and a full overview, start with the mod_invites documentation. | |
| 24 | |
| 25 Details | |
| 26 ======= | |
| 27 | |
| 28 mod_invites_api provides an authenticated HTTP API to create invites | |
| 29 using mod_invites. | |
| 30 | |
| 31 You can use the command-line to create and manage API keys. | |
| 32 | |
| 33 Configuration | |
| 34 ============= | |
| 35 | |
| 36 There are no specific configuration options for this module. | |
| 37 | |
| 38 All the usual [HTTP configuration options](https://prosody.im/doc/http) | |
| 39 can be used to configure this module. | |
| 40 | |
| 41 API usage | |
| 42 ========= | |
| 43 | |
| 44 Step 1: Create an API key, with an optional name to help you remember what | |
| 45 it is for | |
| 46 | |
| 47 ``` | |
| 48 $ prosodyctl mod_invites_api create example.com "My test key" | |
| 49 ``` | |
| 50 | |
| 51 **Tip:** Remember to put quotes around your key name if it contains spaces. | |
| 52 | |
| 53 The command will print out a key: | |
| 54 | |
| 55 ``` | |
| 56 HTwALnKL/73UUylA-2ZJbu9x1XMATuIbjWpip8ow1 | |
| 57 ``` | |
| 58 | |
| 59 Step 2: Make a HTTP request to Prosody, containing the key | |
| 60 | |
| 61 ``` | |
| 62 $ curl -v https://example.com:5281/invites_api?key=HTwALnKL/73UUylA-2ZJbu9x1XMATuIbjWpip8ow1 | |
| 63 ``` | |
| 64 | |
| 65 Prosody will respond with a HTTP status code "201 Created" to indicate | |
| 66 creation of the invite, and per HTTP's usual rules, the URL of the created | |
| 67 invite page will be in the `Location` header: | |
| 68 | |
| 69 ``` | |
| 70 < HTTP/1.1 201 Created | |
| 71 < Access-Control-Max-Age: 7200 | |
| 72 < Connection: Keep-Alive | |
| 73 < Access-Control-Allow-Origin: * | |
| 74 < Date: Sun, 13 Sep 2020 09:50:19 GMT | |
| 75 < Access-Control-Allow-Headers: Content-Type | |
| 76 < Access-Control-Allow-Methods: OPTIONS, GET | |
| 77 < Content-Length: 0 | |
| 78 < Location: https://example.com/invite?c-vhJjyB5Pb4HpAf | |
| 79 ``` | |
| 80 | |
| 81 Sometimes for convenience, you may want to just visit the URL in the | |
| 82 browser. Append `&redirect=true` to the URL, and instead Prosody will | |
| 83 return a `303 See Other` response code, which will tell the browser to | |
| 84 redirect straight to the newly-created invite. This is super handy in a | |
| 85 bookmark :) | |
| 86 | |
| 87 If using the API programmatically, it is recommended to put the key in | |
| 88 the `Authorization` header if possible. This is quite simple: | |
| 89 | |
| 90 ``` | |
| 91 Authorization: Bearer HTwALnKL/73UUylA-2ZJbu9x1XMATuIbjWpip8ow1 | |
| 92 ``` | |
| 93 | |
| 94 Key management | |
| 95 ============== | |
| 96 | |
| 97 At any time you can view authorized keys using: | |
| 98 | |
| 99 ``` | |
| 100 prosodyctl mod_invites_api list example.com | |
| 101 ``` | |
| 102 | |
| 103 This will list out the id of each key, and the name if set: | |
| 104 | |
| 105 ``` | |
| 106 HTwALnKL My test key | |
| 107 ``` | |
| 108 | |
| 109 You can revoke a key by passing this key id to the 'delete` sub-command: | |
| 110 | |
| 111 ``` | |
| 112 prosodyctl mod_invites_api delete example.com HTwALnKL | |
| 113 ``` |