comparison mod_storage_memory/mod_storage_memory.lua @ 2620:8b8cab2eb7fc

mod_storage_memory: Add support for clearing a user's data when they log out
author Matthew Wild <mwild1@gmail.com>
date Tue, 14 Mar 2017 17:46:51 +0000
parents 1e4bbff0a6fd
children 9e5015555fff
comparison
equal deleted inserted replaced
2619:1e4bbff0a6fd 2620:8b8cab2eb7fc
1 local auto_purge_enabled = module:get_option_boolean("storage_memory_temporary", false);
2 local auto_purge_stores = module:get_option_set("storage_memory_temporary_stores", {});
1 3
2 local memory = setmetatable({}, { 4 local memory = setmetatable({}, {
3 __index = function(t, k) 5 __index = function(t, k)
4 local store = module:shared(k) 6 local store = module:shared(k)
5 t[k] = store; 7 t[k] = store;
169 return setmetatable({ store = memory[store] }, store_mt); 171 return setmetatable({ store = memory[store] }, store_mt);
170 end 172 end
171 return nil, "unsupported-store"; 173 return nil, "unsupported-store";
172 end 174 end
173 175
176 if auto_purge_enabled then
177 module:hook("resource-unbind", function (event)
178 local user_bare_jid = event.session.username.."@"..event.session.host;
179 if not prosody.bare_sessions[user_bare_jid] then -- User went offline
180 module:log("debug", "Clearing store for offline user %s", user_bare_jid);
181 local f, s, v;
182 if auto_purge_stores:empty() then
183 f, s, v = pairs(memory);
184 else
185 f, s, v = auto_purge_stores:items();
186 end
187
188 for store_name in f, s, v do
189 if memory[store_name] then
190 memory[store_name][event.session.username] = nil;
191 end
192 end
193 end
194 end);
195 end
196
174 module:provides("storage", driver); 197 module:provides("storage", driver);