mod_pep: Don't store contacts' subscriptions to a user's nodes when that user is...
authorMatthew Wild <mwild1@gmail.com>
Fri, 25 Sep 2015 15:48:25 +0000 (16:48 +0100)
committerMatthew Wild <mwild1@gmail.com>
Fri, 25 Sep 2015 15:48:25 +0000 (16:48 +0100)
plugins/mod_pep.lua

index 7b4c5ddc185532902a31cc813cdedd3c3f1a2d5f..227908691cb80f5565420f20be71253cebb4fab4 100644 (file)
@@ -16,6 +16,7 @@ local next = next;
 local type = type;
 local calculate_hash = require "util.caps".calculate_hash;
 local core_post_stanza = prosody.core_post_stanza;
+local bare_sessions = prosody.bare_sessions;
 
 -- Used as canonical 'empty table'
 local NULL = {};
@@ -122,6 +123,9 @@ module:hook("presence/bare", function(event)
        local t = stanza.attr.type;
        local self = not stanza.attr.to;
 
+       -- Only cache subscriptions if user is online
+       if not bare_sessions[user] then return; end
+
        if not t then -- available presence
                if self or subscription_presence(user, stanza.attr.from) then
                        local recipient = stanza.attr.from;
@@ -283,3 +287,11 @@ module:hook("account-disco-items", function(event)
                end
        end
 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 info cached anymore, clear it.
+               recipients[user_bare_jid] = nil;
+       end
+end);