11 local st = require "util.stanza"; |
11 local st = require "util.stanza"; |
12 local datamanager = require "util.datamanager"; |
12 local datamanager = require "util.datamanager"; |
13 local bare_sessions, full_sessions = bare_sessions, full_sessions; |
13 local bare_sessions, full_sessions = bare_sessions, full_sessions; |
14 local util_Jid = require "util.jid"; |
14 local util_Jid = require "util.jid"; |
15 local jid_bare = util_Jid.bare; |
15 local jid_bare = util_Jid.bare; |
16 local jid_split = util_Jid.split; |
16 local jid_split, jid_join = util_Jid.split, util_Jid.join; |
17 local load_roster = require "core.rostermanager".load_roster; |
17 local load_roster = require "core.rostermanager".load_roster; |
18 local to_number = tonumber; |
18 local to_number = tonumber; |
19 |
19 |
20 function isListUsed(origin, name, privacy_lists) |
20 function isListUsed(origin, name, privacy_lists) |
21 local user = bare_sessions[origin.username.."@"..origin.host]; |
21 local user = bare_sessions[origin.username.."@"..origin.host]; |
358 (evilJid.host and item.value == evilJid.host) then |
358 (evilJid.host and item.value == evilJid.host) then |
359 apply = true; |
359 apply = true; |
360 block = (item.action == "deny"); |
360 block = (item.action == "deny"); |
361 elseif item.type == "group" then |
361 elseif item.type == "group" then |
362 local roster = load_roster(session.username, session.host); |
362 local roster = load_roster(session.username, session.host); |
363 local groups = roster[evilJid.node .. "@" .. evilJid.host].groups; |
363 local roster_entry = roster[jid_join(evilJid.node, evilJid.host)]; |
364 for group in pairs(groups) do |
364 if roster_entry then |
365 if group == item.value then |
365 local groups = roster_entry.groups; |
366 apply = true; |
366 for group in pairs(groups) do |
367 block = (item.action == "deny"); |
367 if group == item.value then |
368 break; |
368 apply = true; |
|
369 block = (item.action == "deny"); |
|
370 break; |
|
371 end |
369 end |
372 end |
370 end |
373 end |
371 elseif item.type == "subscription" and evilJid.node ~= nil and evilJid.host ~= nil then -- we need a valid bare evil jid |
374 elseif item.type == "subscription" then -- we need a valid bare evil jid |
372 local roster = load_roster(session.username, session.host); |
375 local roster = load_roster(session.username, session.host); |
373 if roster[evilJid.node .. "@" .. evilJid.host].subscription == item.value then |
376 local roster_entry = roster[jid_join(evilJid.node, evilJid.host)]; |
|
377 if (not(roster_entry) and item.value == "none") |
|
378 or (roster_entry and roster_entry.subscription == item.value) then |
374 apply = true; |
379 apply = true; |
375 block = (item.action == "deny"); |
380 block = (item.action == "deny"); |
376 end |
381 end |
377 elseif item.type == nil then |
382 elseif item.type == nil then |
378 apply = true; |
383 apply = true; |