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()