Comparison

plugins/mod_pep.lua @ 12088:e5028f6eb599 0.11

mod_pep: Prevent creation of services for non-existent users Using a dedicated service should give identical behavior, except for a possible timing difference in the user existence lookup.
author Kim Alvefur <zash@zash.se>
date Thu, 04 Nov 2021 00:55:59 +0100
parent 12087:19f67d44ec37
child 12089:76b4e3f12b53
comparison
equal deleted inserted replaced
12087:19f67d44ec37 12088:e5028f6eb599
7 local calculate_hash = require "util.caps".calculate_hash; 7 local calculate_hash = require "util.caps".calculate_hash;
8 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed; 8 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed;
9 local cache = require "util.cache"; 9 local cache = require "util.cache";
10 local set = require "util.set"; 10 local set = require "util.set";
11 local storagemanager = require "core.storagemanager"; 11 local storagemanager = require "core.storagemanager";
12 local usermanager = require "core.usermanager";
12 13
13 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; 14 local xmlns_pubsub = "http://jabber.org/protocol/pubsub";
14 local xmlns_pubsub_event = "http://jabber.org/protocol/pubsub#event"; 15 local xmlns_pubsub_event = "http://jabber.org/protocol/pubsub#event";
15 local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner"; 16 local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner";
16 17
172 end 173 end
173 return broadcast_to; 174 return broadcast_to;
174 end 175 end
175 end 176 end
176 177
178 local nobody_service = pubsub.new({
179 service = pubsub.new({
180 node_defaults = {
181 ["max_items"] = 1;
182 ["persist_items"] = false;
183 ["access_model"] = "presence";
184 ["send_last_published_item"] = "on_sub_and_presence";
185 };
186 });
187 });
188
177 function get_pep_service(username) 189 function get_pep_service(username)
178 module:log("debug", "get_pep_service(%q)", username); 190 module:log("debug", "get_pep_service(%q)", username);
179 local user_bare = jid_join(username, host); 191 local user_bare = jid_join(username, host);
180 local service = services[username]; 192 local service = services[username];
181 if service then 193 if service then
182 return service; 194 return service;
195 end
196 if not usermanager.user_exists(username, host) then
197 return nobody_service;
183 end 198 end
184 service = pubsub.new({ 199 service = pubsub.new({
185 pep_username = username; 200 pep_username = username;
186 node_defaults = { 201 node_defaults = {
187 ["max_items"] = 1; 202 ["max_items"] = 1;