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