Mercurial > prosody-modules
diff mod_http_roster_admin/mod_http_roster_admin.lua @ 2617:7c3a1688e385
Purge the roster from RAM when the user logs off.
Also.. the `download` flag was being checked for, but never set, causing the
roster to be fetched even if it was cached.
author | JC Brand <jc@opkode.com> |
---|---|
date | Tue, 14 Mar 2017 12:35:56 +0000 |
parents | 68ebc52222dc |
children | c4c51e43b788 |
line wrap: on
line diff
--- a/mod_http_roster_admin/mod_http_roster_admin.lua Tue Mar 14 04:20:02 2017 +0100 +++ b/mod_http_roster_admin/mod_http_roster_admin.lua Tue Mar 14 12:35:56 2017 +0000 @@ -22,6 +22,9 @@ local st = require "util.stanza"; local array = require "util.array"; +local bare_sessions = prosody.bare_sessions; +local storagemanager = require "core.storagemanager"; + local host = module.host; local sessions = hosts[host].sessions; @@ -213,13 +216,14 @@ -- Are we the first callback to handle the downloaded roster? local first = roster[false].downloaded == nil; - if first then -- Fill out new roster for jid, friend in pairs(friends) do roster[jid] = friend_to_roster_item(friend); end end + + roster[false].downloaded = true; -- Send full roster to client session.send(build_roster_reply(stanza, roster)); @@ -290,6 +294,14 @@ return true; end +module:hook("resource-unbind", function (event) + local user_bare_jid = event.session.username.."@"..event.session.host; + if not bare_sessions[user_bare_jid] then -- User went offline + -- We don't need this user's info cached anymore, clear it. + module:log("debug", "Purging the roster for %s", user_bare_jid); + storagemanager.open(event.session.host, "roster", "keyval").store[event.session.username] = nil; + end +end); module:provides("http", { route = {