8 -- |
8 -- |
9 |
9 |
10 module:add_feature("jabber:iq:privacy"); |
10 module:add_feature("jabber:iq:privacy"); |
11 |
11 |
12 local st = require "util.stanza"; |
12 local st = require "util.stanza"; |
13 local datamanager = require "util.datamanager"; |
|
14 local bare_sessions, full_sessions = prosody.bare_sessions, prosody.full_sessions; |
13 local bare_sessions, full_sessions = prosody.bare_sessions, prosody.full_sessions; |
15 local util_Jid = require "util.jid"; |
14 local util_Jid = require "util.jid"; |
16 local jid_bare = util_Jid.bare; |
15 local jid_bare = util_Jid.bare; |
17 local jid_split, jid_join = util_Jid.split, util_Jid.join; |
16 local jid_split, jid_join = util_Jid.split, util_Jid.join; |
18 local load_roster = require "core.rostermanager".load_roster; |
17 local load_roster = require "core.rostermanager".load_roster; |
19 local to_number = tonumber; |
18 local to_number = tonumber; |
|
19 |
|
20 local privacy_storage = module:open_store(); |
20 |
21 |
21 function isListUsed(origin, name, privacy_lists) |
22 function isListUsed(origin, name, privacy_lists) |
22 local user = bare_sessions[origin.username.."@"..origin.host]; |
23 local user = bare_sessions[origin.username.."@"..origin.host]; |
23 if user then |
24 if user then |
24 for resource, session in pairs(user.sessions) do |
25 for resource, session in pairs(user.sessions) do |
215 local origin, stanza = data.origin, data.stanza; |
216 local origin, stanza = data.origin, data.stanza; |
216 |
217 |
217 if stanza.attr.to == nil then -- only service requests to own bare JID |
218 if stanza.attr.to == nil then -- only service requests to own bare JID |
218 local query = stanza.tags[1]; -- the query element |
219 local query = stanza.tags[1]; -- the query element |
219 local valid = false; |
220 local valid = false; |
220 local privacy_lists = datamanager.load(origin.username, origin.host, "privacy") or { lists = {} }; |
221 local privacy_lists = privacy_storage:get(origin.username) or { lists = {} }; |
221 |
222 |
222 if privacy_lists.lists[1] then -- Code to migrate from old privacy lists format, remove in 0.8 |
223 if privacy_lists.lists[1] then -- Code to migrate from old privacy lists format, remove in 0.8 |
223 module:log("info", "Upgrading format of stored privacy lists for %s@%s", origin.username, origin.host); |
224 module:log("info", "Upgrading format of stored privacy lists for %s@%s", origin.username, origin.host); |
224 local lists = privacy_lists.lists; |
225 local lists = privacy_lists.lists; |
225 for idx, list in ipairs(lists) do |
226 for idx, list in ipairs(lists) do |
270 if valid[2] == nil then |
271 if valid[2] == nil then |
271 valid[2] = "bad-request"; |
272 valid[2] = "bad-request"; |
272 end |
273 end |
273 origin.send(st.error_reply(stanza, valid[1], valid[2], valid[3])); |
274 origin.send(st.error_reply(stanza, valid[1], valid[2], valid[3])); |
274 else |
275 else |
275 datamanager.store(origin.username, origin.host, "privacy", privacy_lists); |
276 privacy_storage:set(origin.username, privacy_lists); |
276 end |
277 end |
277 return true; |
278 return true; |
278 end |
279 end |
279 end); |
280 end); |
280 |
281 |
281 function checkIfNeedToBeBlocked(e, session) |
282 function checkIfNeedToBeBlocked(e, session) |
282 local origin, stanza = e.origin, e.stanza; |
283 local origin, stanza = e.origin, e.stanza; |
283 local privacy_lists = datamanager.load(session.username, session.host, "privacy") or {}; |
284 local privacy_lists = privacy_storage:get(session.username) or {}; |
284 local bare_jid = session.username.."@"..session.host; |
285 local bare_jid = session.username.."@"..session.host; |
285 local to = stanza.attr.to or bare_jid; |
286 local to = stanza.attr.to or bare_jid; |
286 local from = stanza.attr.from; |
287 local from = stanza.attr.from; |
287 |
288 |
288 local is_to_user = bare_jid == jid_bare(to); |
289 local is_to_user = bare_jid == jid_bare(to); |