Mercurial > prosody-modules
comparison mod_invites/mod_invites.lua @ 4341:a104440c20a4
mod_invites: Add internal API to list, read and delete account invites
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sun, 17 Jan 2021 12:47:47 +0000 |
| parents | 24f4eb35ab60 |
| children | 84e60c3d6e61 |
comparison
equal
deleted
inserted
replaced
| 4340:7cd3b7ec59e9 | 4341:a104440c20a4 |
|---|---|
| 1 local id = require "util.id"; | 1 local id = require "util.id"; |
| 2 local it = require "util.iterators"; | |
| 2 local url = require "socket.url"; | 3 local url = require "socket.url"; |
| 3 local jid_node = require "util.jid".node; | 4 local jid_node = require "util.jid".node; |
| 4 local jid_split = require "util.jid".split; | 5 local jid_split = require "util.jid".split; |
| 5 | 6 |
| 6 local invite_ttl = module:get_option_number("invite_expiry", 86400 * 7); | 7 local invite_ttl = module:get_option_number("invite_expiry", 86400 * 7); |
| 76 -- Create invitation to become a contact of a local user | 77 -- Create invitation to become a contact of a local user |
| 77 function create_contact(username, allow_registration, additional_data) --luacheck: ignore 131/create_contact | 78 function create_contact(username, allow_registration, additional_data) --luacheck: ignore 131/create_contact |
| 78 return create_invite("roster", username.."@"..module.host, allow_registration, additional_data); | 79 return create_invite("roster", username.."@"..module.host, allow_registration, additional_data); |
| 79 end | 80 end |
| 80 | 81 |
| 82 -- Iterates pending (non-expired, unused) invites that allow registration | |
| 83 function pending_account_invites() --luacheck: ignore 131/pending_account_invites | |
| 84 local store = module:open_store("invite_token"); | |
| 85 local now = os.time(); | |
| 86 local function is_valid_invite(_, invite) | |
| 87 return invite.expires > now; | |
| 88 end | |
| 89 return it.filter(is_valid_invite, pairs(store:get(nil) or {})); | |
| 90 end | |
| 91 | |
| 92 function get_account_invite_info(token) | |
| 93 if not token then | |
| 94 return nil, "no-token"; | |
| 95 end | |
| 96 | |
| 97 -- Fetch from host store (account invite) | |
| 98 local token_info = token_storage:get(nil, token); | |
| 99 if not token_info then | |
| 100 return nil, "token-invalid"; | |
| 101 elseif os.time() > token_info.expires then | |
| 102 return nil, "token-expired"; | |
| 103 end | |
| 104 | |
| 105 return token_info; | |
| 106 end | |
| 107 | |
| 108 function delete_account_invite(token) | |
| 109 if not token then | |
| 110 return nil, "no-token"; | |
| 111 end | |
| 112 | |
| 113 return token_storage:set(nil, token, nil); | |
| 114 end | |
| 81 | 115 |
| 82 local valid_invite_methods = {}; | 116 local valid_invite_methods = {}; |
| 83 local valid_invite_mt = { __index = valid_invite_methods }; | 117 local valid_invite_mt = { __index = valid_invite_methods }; |
| 84 | 118 |
| 85 function valid_invite_methods:use() | 119 function valid_invite_methods:use() |
