Mercurial > prosody-modules
comparison mod_invites/mod_invites.lua @ 4346:671bc55f0fc9
mod_invites: Add support to internal API for creating reusable and custom-TTL invites
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sun, 17 Jan 2021 17:42:49 +0000 |
parents | 844cfc8c4039 |
children | 0ec482e617bb |
comparison
equal
deleted
inserted
replaced
4345:1bb08e9ffa82 | 4346:671bc55f0fc9 |
---|---|
2 local it = require "util.iterators"; | 2 local it = require "util.iterators"; |
3 local url = require "socket.url"; | 3 local url = require "socket.url"; |
4 local jid_node = require "util.jid".node; | 4 local jid_node = require "util.jid".node; |
5 local jid_split = require "util.jid".split; | 5 local jid_split = require "util.jid".split; |
6 | 6 |
7 local invite_ttl = module:get_option_number("invite_expiry", 86400 * 7); | 7 local default_ttl = module:get_option_number("invite_expiry", 86400 * 7); |
8 | 8 |
9 local token_storage; | 9 local token_storage; |
10 if prosody.process_type == "prosody" or prosody.shutdown then | 10 if prosody.process_type == "prosody" or prosody.shutdown then |
11 token_storage = module:open_store("invite_token", "map"); | 11 token_storage = module:open_store("invite_token", "map"); |
12 end | 12 end |
17 path = jid, | 17 path = jid, |
18 query = action..";preauth="..token..(params and (";"..params) or ""), | 18 query = action..";preauth="..token..(params and (";"..params) or ""), |
19 }); | 19 }); |
20 end | 20 end |
21 | 21 |
22 local function create_invite(invite_action, invite_jid, allow_registration, additional_data) | 22 local function create_invite(invite_action, invite_jid, allow_registration, additional_data, ttl, reusable) |
23 local token = id.medium(); | 23 local token = id.medium(); |
24 | 24 |
25 local created_at = os.time(); | 25 local created_at = os.time(); |
26 local expires = created_at + invite_ttl; | 26 local expires = created_at + (ttl or default_ttl); |
27 | 27 |
28 local invite_params = (invite_action == "roster" and allow_registration) and "ibr=y" or nil; | 28 local invite_params = (invite_action == "roster" and allow_registration) and "ibr=y" or nil; |
29 | 29 |
30 local invite = { | 30 local invite = { |
31 type = invite_action; | 31 type = invite_action; |
37 | 37 |
38 uri = get_uri(invite_action, invite_jid, token, invite_params); | 38 uri = get_uri(invite_action, invite_jid, token, invite_params); |
39 | 39 |
40 created_at = created_at; | 40 created_at = created_at; |
41 expires = expires; | 41 expires = expires; |
42 | |
43 reusable = reusable; | |
42 }; | 44 }; |
43 | 45 |
44 module:fire_event("invite-created", invite); | 46 module:fire_event("invite-created", invite); |
45 | 47 |
46 if allow_registration then | 48 if allow_registration then |
115 | 117 |
116 local valid_invite_methods = {}; | 118 local valid_invite_methods = {}; |
117 local valid_invite_mt = { __index = valid_invite_methods }; | 119 local valid_invite_mt = { __index = valid_invite_methods }; |
118 | 120 |
119 function valid_invite_methods:use() | 121 function valid_invite_methods:use() |
122 if self.reusable then | |
123 return true; | |
124 end | |
125 | |
120 if self.username then | 126 if self.username then |
121 -- Also remove the contact invite if present, on the | 127 -- Also remove the contact invite if present, on the |
122 -- assumption that they now have a mutual subscription | 128 -- assumption that they now have a mutual subscription |
123 token_storage:set(self.username, self.token, nil); | 129 token_storage:set(self.username, self.token, nil); |
124 end | 130 end |
168 username = username; | 174 username = username; |
169 inviter = inviter; | 175 inviter = inviter; |
170 type = token_info and token_info.type or "roster"; | 176 type = token_info and token_info.type or "roster"; |
171 uri = token_info and token_info.uri or get_uri("roster", username.."@"..module.host, token); | 177 uri = token_info and token_info.uri or get_uri("roster", username.."@"..module.host, token); |
172 additional_data = token_info and token_info.additional_data or nil; | 178 additional_data = token_info and token_info.additional_data or nil; |
179 reusable = token_info.reusable; | |
173 }, valid_invite_mt); | 180 }, valid_invite_mt); |
174 end | 181 end |
175 | 182 |
176 function use(token) --luacheck: ignore 131/use | 183 function use(token) --luacheck: ignore 131/use |
177 local invite = get(token); | 184 local invite = get(token); |