Mercurial > prosody-modules
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); |
