comparison mod_privacy/mod_privacy.lua @ 39:b84b2b026eb4

mod_privacy: never block communications from one of a user's resources to another.
author Thilo Cestonaro <thilo@cestona.ro>
date Tue, 13 Oct 2009 23:03:58 +0200
parents d91cb13ef0ee
children 0381d5d38c37
comparison
equal deleted inserted replaced
38:b9bf8a35b064 39:b84b2b026eb4
329 end 329 end
330 return false; 330 return false;
331 end, 500); 331 end, 500);
332 332
333 function checkIfNeedToBeBlocked(e, session) 333 function checkIfNeedToBeBlocked(e, session)
334
335 local origin, stanza = e.origin, e.stanza; 334 local origin, stanza = e.origin, e.stanza;
336 local privacy_lists = datamanager.load(session.username, session.host, "privacy") or {}; 335 local privacy_lists = datamanager.load(session.username, session.host, "privacy") or {};
337 local bare_jid = session.username.."@"..session.host; 336 local bare_jid = session.username.."@"..session.host;
338 337
339 -- module:log("debug", "Where are we from: %s", debug.traceback())
340 module:log("debug", "checkIfNeedToBeBlocked: username: %s, host: %s", session.username, session.host); 338 module:log("debug", "checkIfNeedToBeBlocked: username: %s, host: %s", session.username, session.host);
341 module:log("debug", "stanza: %s, to: %s, form: %s", stanza.name, stanza.attr.to or "nil", stanza.attr.from or "nil"); 339 module:log("debug", "stanza: %s, to: %s, form: %s", stanza.name, stanza.attr.to or "nil", stanza.attr.from or "nil");
342 340
343 if stanza.attr.to ~= nil and stanza.attr.from ~= nil then 341 if stanza.attr.to ~= nil and stanza.attr.from ~= nil then
344 module:log("debug", "privacy_lists.lists: %s", tostring(privacy_lists.lists)); 342 module:log("debug", "privacy_lists.lists: %s", tostring(privacy_lists.lists));
349 (privacy_lists.default == nil or privacy_lists.default == "") 347 (privacy_lists.default == nil or privacy_lists.default == "")
350 then 348 then
351 module:log("debug", "neither active nor default list set (both are nil) or privacy_lists totally nil. So nothing to do => default is Allow All."); 349 module:log("debug", "neither active nor default list set (both are nil) or privacy_lists totally nil. So nothing to do => default is Allow All.");
352 return; -- Nothing to block, default is Allow all 350 return; -- Nothing to block, default is Allow all
353 end 351 end
354 352 if jid_bare(stanza.attr.from) == bare_jid and jid_bare(stanza.attr.to) == bare_jid then
353 module:log("debug", "Never block communications from one of a user's resources to another.");
354 return; -- from one of a user's resource to another => HANDS OFF!
355 end
356
355 local idx; 357 local idx;
356 local list; 358 local list;
357 local item; 359 local item;
358 local listname = session.activePrivacyList; 360 local listname = session.activePrivacyList;
359 if listname == nil or listname == "" then 361 if listname == nil or listname == "" then
480 end 482 end
481 return; 483 return;
482 end 484 end
483 485
484 function preCheckOutgoing(e) 486 function preCheckOutgoing(e)
485 local session; 487 local session = e.origin;
486 if e.stanza.attr.from ~= nil then 488 if e.stanza.attr.from == nil then
487 local node, host, resource = jid_split(e.stanza.attr.from); 489 e.stanza.attr.form = session.username .. "@" .. session.host;
488 if node == nil or host == nil then 490 if session.resource ~= nil then
489 return; 491 e.stanza.attr.from = e.stanza.attr.form .. "/" .. session.resource;
490 end 492 end
491 if resource == nil then 493 end
492 local prio = 0; 494 return checkIfNeedToBeBlocked(e, session);
493 local session_;
494 if bare_sessions[node.."@"..host] ~= nil then
495 for resource, session_ in pairs(bare_sessions[node.."@"..host].sessions) do
496 if session_.priority > prio then
497 session = session_;
498 prio = session_.priority;
499 end
500 end
501 end
502 else
503 session = full_sessions[node.."@"..host.."/"..resource];
504 end
505 if session ~= nil then
506 return checkIfNeedToBeBlocked(e, session);
507 else
508 module:log("debug", "preCheckOutgoing: Couldn't get session for jid: %s@%s/%s", node or "nil", host or "nil", resource or "nil")
509 end
510 end
511 return;
512 end 495 end
513 496
514 497
515 module:hook("pre-message/full", preCheckOutgoing, 500); 498 module:hook("pre-message/full", preCheckOutgoing, 500);
516 module:hook("pre-message/bare", preCheckOutgoing, 500); 499 module:hook("pre-message/bare", preCheckOutgoing, 500);