annotate mod_privacy/mod_privacy.lua @ 234:abcb59ab355c

Add new motd_sequential module. This module lets you define numbered messages shown to each user in order, but only once per user, and persistent across server restarts. Useful for notifying users of added features and changes in an incremental fashion.
author Jeff Mitchell <jeffrey.mitchell@gmail.com>
date Wed, 04 Aug 2010 22:29:51 +0000
parents b07193056935
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
1 -- Prosody IM
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
2 -- Copyright (C) 2008-2009 Matthew Wild
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
3 -- Copyright (C) 2008-2009 Waqas Hussain
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
4 -- Copyright (C) 2009 Thilo Cestonaro
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
5 --
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
6 -- This project is MIT/X11 licensed. Please see the
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
7 -- COPYING file in the source package for more information.
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
8 --
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
9
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
10 local prosody = prosody;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
11 local st = require "util.stanza";
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
12 local datamanager = require "util.datamanager";
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
13 local bare_sessions = bare_sessions;
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
14 local util_Jid = require "util.jid";
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
15 local jid_bare = util_Jid.bare;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
16 local jid_split = util_Jid.split;
16
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
17 local load_roster = require "core.rostermanager".load_roster;
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
18 local to_number = _G.tonumber;
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
19
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
20 function findNamedList (privacy_lists, name)
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
21 local ret = nil
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
22 if privacy_lists.lists == nil then
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
23 return nil;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
24 end
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
25
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
26 for i=1, #privacy_lists.lists do
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
27 if privacy_lists.lists[i].name == name then
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
28 ret = i;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
29 break;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
30 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
31 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
32 return ret;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
33 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
34
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
35 function isListUsed(origin, name, privacy_lists)
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
36 if bare_sessions[origin.username.."@"..origin.host].sessions ~= nil then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
37 for resource, session in pairs(bare_sessions[origin.username.."@"..origin.host].sessions) do
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
38 if resource ~= origin.resource then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
39 if session.activePrivacyList == name then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
40 return true;
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
41 elseif session.activePrivacyList == nil and privacy_lists.default == name then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
42 return true;
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
43 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
44 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
45 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
46 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
47 return false;
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
48 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
49
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
50 function isAnotherSessionUsingDefaultList(origin)
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
51 local ret = false
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
52 if bare_sessions[origin.username.."@"..origin.host].sessions ~= nil then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
53 for resource, session in pairs(bare_sessions[origin.username.."@"..origin.host].sessions) do
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
54 if resource ~= origin.resource and session.activePrivacyList == nil then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
55 ret = true;
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
56 break;
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
57 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
58 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
59 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
60 return ret;
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
61 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
62
58
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
63 function sendUnavailable(to, from)
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
64 --[[ example unavailable presence stanza
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
65 <presence from="node@host/resource" type="unavailable" to="node@host" >
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
66 <status>Logged out</status>
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
67 </presence>
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
68 ]]--
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
69 local presence = st.presence({from=from, type="unavailable"})
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
70 presence:tag("status"):text("Logged out");
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
71
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
72 local node, host = jid_bare(to);
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
73 local bare = node .. "@" .. host;
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
74
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
75 if bare_sessions[bare].sessions ~= nil then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
76 for resource, session in pairs(bare_sessions[bare].sessions) do
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
77 presence.attr.to = session.full_jid;
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
78 module:log("debug", "send unavailable to: %s; from: %s", tostring(presence.attr.to), tostring(presence.attr.from));
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
79 origin.send(presence);
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
80 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
81 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
82 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
83
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
84 function sendNeededUnavailablePersences(origin, listnameOrItem) -- TODO implement it correctly!
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
85 if type(listnameOrItem) == "string" then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
86 local listname = listnameOrItem;
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
87 for _,list in ipairs(privacy_lists.lists) do
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
88 if list.name == listname then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
89 for _,item in ipairs(list.items) do
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
90 sendNeededUnavailablePersences(origin, item);
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
91 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
92 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
93 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
94 elseif type(listnameOrItem) == "table" then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
95 module:log("debug", "got an item, check wether to send unavailable presence stanza or not");
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
96 local item = listnameOrItem;
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
97 local serialize = require "util.serialization".serialize;
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
98
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
99
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
100 if item["presence-out"] == true then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
101 if item.type == "jid" then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
102 sendUnavailable(item.value, origin.full_jid);
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
103 elseif item.type == "group" then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
104 elseif item.type == "subscription" then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
105 elseif item.type == nil then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
106 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
107 elseif item["presence-in"] == true then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
108 if item.type == "jid" then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
109 sendUnavailable(origin.full_jid, item.value);
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
110 elseif item.type == "group" then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
111 elseif item.type == "subscription" then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
112 elseif item.type == nil then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
113 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
114 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
115 else
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
116 module:log("debug", "got unknown type: %s", type(listnameOrItem));
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
117 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
118 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
119
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
120 function declineList (privacy_lists, origin, stanza, which)
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
121 if which == "default" then
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
122 if isAnotherSessionUsingDefaultList(origin) then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
123 return { "cancel", "conflict", "Another session is online and using the default list."};
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
124 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
125 privacy_lists.default = nil;
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
126 origin.send(st.reply(stanza));
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
127 elseif which == "active" then
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
128 origin.activePrivacyList = nil;
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
129 origin.send(st.reply(stanza));
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
130 else
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
131 return {"modify", "bad-request", "Neither default nor active list specifed to decline."};
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
132 end
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
133 return true;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
134 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
135
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
136 function activateList (privacy_lists, origin, stanza, which, name)
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
137 local idx = findNamedList(privacy_lists, name);
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
138
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
139 if privacy_lists.default == nil then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
140 privacy_lists.default = "";
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
141 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
142 if origin.activePrivacyList == nil then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
143 origin.activePrivacyList = "";
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
144 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
145
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
146 if which == "default" and idx ~= nil then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
147 if isAnotherSessionUsingDefaultList(origin) then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
148 return {"cancel", "conflict", "Another session is online and using the default list."};
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
149 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
150 privacy_lists.default = name;
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
151 origin.send(st.reply(stanza));
58
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
152 --[[
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
153 if origin.activePrivacyList == nil then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
154 sendNeededUnavailablePersences(origin, name);
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
155 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
156 ]]--
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
157 elseif which == "active" and idx ~= nil then
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
158 origin.activePrivacyList = name;
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
159 origin.send(st.reply(stanza));
58
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
160 -- sendNeededUnavailablePersences(origin, name);
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
161 else
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
162 return {"modify", "bad-request", "Either not active or default given or unknown list name specified."};
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
163 end
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
164 return true;
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
165 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
166
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
167 function deleteList (privacy_lists, origin, stanza, name)
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
168 local idx = findNamedList(privacy_lists, name);
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
169
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
170 if idx ~= nil then
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
171 if isListUsed(origin, name, privacy_lists) then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
172 return {"cancel", "conflict", "Another session is online and using the list which should be deleted."};
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
173 end
27
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
174 if privacy_lists.default == name then
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
175 privacy_lists.default = "";
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
176 end
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
177 if origin.activePrivacyList == name then
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
178 origin.activePrivacyList = "";
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
179 end
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
180 table.remove(privacy_lists.lists, idx);
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
181 origin.send(st.reply(stanza));
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
182 return true;
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
183 end
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
184 return {"modify", "bad-request", "Not existing list specifed to be deleted."};
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
185 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
186
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
187 local function sortByOrder(a, b)
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
188 if a.order < b.order then
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
189 return true;
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
190 end
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
191 return false;
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
192 end
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
193
16
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
194 function createOrReplaceList (privacy_lists, origin, stanza, name, entries, roster)
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
195 local idx = findNamedList(privacy_lists, name);
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
196 local bare_jid = origin.username.."@"..origin.host;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
197
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
198 if privacy_lists.lists == nil then
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
199 privacy_lists.lists = {};
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
200 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
201
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
202 if idx == nil then
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
203 idx = #privacy_lists.lists + 1;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
204 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
205
16
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
206 local orderCheck = {};
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
207 local list = {};
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
208 list.name = name;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
209 list.items = {};
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
210
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
211 for _,item in ipairs(entries) do
16
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
212 if to_number(item.attr.order) == nil or to_number(item.attr.order) < 0 or orderCheck[item.attr.order] ~= nil then
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
213 return {"modify", "bad-request", "Order attribute not valid."};
16
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
214 end
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
215
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
216 if item.attr.type ~= nil and item.attr.type ~= "jid" and item.attr.type ~= "subscription" and item.attr.type ~= "group" then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
217 return {"modify", "bad-request", "Type attribute not valid."};
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
218 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
219
14
0892941186f2 mod_privacy: Make tmp variable a local
Matthew Wild <mwild1@gmail.com>
parents: 10
diff changeset
220 local tmp = {};
16
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
221 orderCheck[item.attr.order] = true;
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
222
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
223 tmp["type"] = item.attr.type;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
224 tmp["value"] = item.attr.value;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
225 tmp["action"] = item.attr.action;
16
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
226 tmp["order"] = to_number(item.attr.order);
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
227 tmp["presence-in"] = false;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
228 tmp["presence-out"] = false;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
229 tmp["message"] = false;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
230 tmp["iq"] = false;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
231
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
232 if #item.tags > 0 then
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
233 for _,tag in ipairs(item.tags) do
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
234 tmp[tag.name] = true;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
235 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
236 end
16
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
237
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
238 if tmp.type == "group" then
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
239 local found = false;
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
240 local roster = load_roster(origin.username, origin.host);
27
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
241 for jid,item in pairs(roster) do
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
242 if item.groups ~= nil then
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
243 for group in pairs(item.groups) do
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
244 if group == tmp.value then
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
245 found = true;
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
246 break;
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
247 end
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
248 end
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
249 if found == true then
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
250 break;
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
251 end
16
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
252 end
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
253 end
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
254 if found == false then
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
255 return {"cancel", "item-not-found", "Specifed roster group not existing."};
16
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
256 end
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
257 elseif tmp.type == "subscription" then
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
258 if tmp.value ~= "both" and
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
259 tmp.value ~= "to" and
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
260 tmp.value ~= "from" and
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
261 tmp.value ~= "none" then
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
262 return {"cancel", "bad-request", "Subscription value must be both, to, from or none."};
16
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
263 end
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
264 end
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
265
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
266 if tmp.action ~= "deny" and tmp.action ~= "allow" then
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
267 return {"cancel", "bad-request", "Action must be either deny or allow."};
16
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
268 end
35e74c1094a7 mod_privacy: order must be non-negativ integer and unique, group must be existing in the roster, subscription can only be to,from,both or none, action must be either deny or allow.
Thilo Cestonaro <thilo@cestona.ro>
parents: 15
diff changeset
269
58
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
270 --[[
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
271 if (privacy_lists.default == name and origin.activePrivacyList == nil) or origin.activePrivacyList == name then
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
272 module:log("debug", "calling sendNeededUnavailablePresences!");
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
273 -- item is valid and list is active, so send needed unavailable stanzas
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
274 sendNeededUnavailablePersences(origin, tmp);
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
275 end
b07193056935 mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
Thilo Cestonaro <thilo@cestona.ro>
parents: 46
diff changeset
276 ]]--
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
277 list.items[#list.items + 1] = tmp;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
278 end
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
279
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
280 table.sort(list, sortByOrder);
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
281
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
282 privacy_lists.lists[idx] = list;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
283 origin.send(st.reply(stanza));
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
284 if bare_sessions[bare_jid] ~= nil then
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
285 iq = st.iq ( { type = "set", id="push1" } );
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
286 iq:tag ("query", { xmlns = "jabber:iq:privacy" } );
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
287 iq:tag ("list", { name = list.name } ):up();
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
288 iq:up();
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
289 for resource, session in pairs(bare_sessions[bare_jid].sessions) do
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
290 iq.attr.to = bare_jid.."/"..resource
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
291 session.send(iq);
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
292 end
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
293 else
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
294 return {"cancel", "bad-request", "internal error."};
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
295 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
296 return true;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
297 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
298
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
299 function getList(privacy_lists, origin, stanza, name)
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
300 local reply = st.reply(stanza);
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
301 reply:tag("query", {xmlns="jabber:iq:privacy"});
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
302
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
303 if name == nil then
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
304 reply:tag("active", {name=origin.activePrivacyList or ""}):up();
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
305 reply:tag("default", {name=privacy_lists.default or ""}):up();
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
306 if privacy_lists.lists then
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
307 for _,list in ipairs(privacy_lists.lists) do
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
308 reply:tag("list", {name=list.name}):up();
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
309 end
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
310 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
311 else
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
312 local idx = findNamedList(privacy_lists, name);
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
313 if idx ~= nil then
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
314 list = privacy_lists.lists[idx];
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
315 reply = reply:tag("list", {name=list.name});
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
316 for _,item in ipairs(list.items) do
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
317 reply:tag("item", {type=item.type, value=item.value, action=item.action, order=item.order});
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
318 if item["message"] then reply:tag("message"):up(); end
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
319 if item["iq"] then reply:tag("iq"):up(); end
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
320 if item["presence-in"] then reply:tag("presence-in"):up(); end
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
321 if item["presence-out"] then reply:tag("presence-out"):up(); end
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
322 reply:up();
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
323 end
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
324 else
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
325 return {"cancel", "item-not-found", "Unknown list specified."};
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
326 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
327 end
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
328
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
329 origin.send(reply);
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
330 return true;
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
331 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
332
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
333 module:hook("iq/bare/jabber:iq:privacy:query", function(data)
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
334 local origin, stanza = data.origin, data.stanza;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
335
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
336 if stanza.attr.to == nil then -- only service requests to own bare JID
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
337 local query = stanza.tags[1]; -- the query element
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
338 local valid = false;
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
339 local privacy_lists = datamanager.load(origin.username, origin.host, "privacy") or {};
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
340
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
341 if stanza.attr.type == "set" then
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
342 if #query.tags == 1 then -- the <query/> element MUST NOT include more than one child element
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
343 for _,tag in ipairs(query.tags) do
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
344 if tag.name == "active" or tag.name == "default" then
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
345 if tag.attr.name == nil then -- Client declines the use of active / default list
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
346 valid = declineList(privacy_lists, origin, stanza, tag.name);
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
347 else -- Client requests change of active / default list
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
348 valid = activateList(privacy_lists, origin, stanza, tag.name, tag.attr.name);
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
349 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
350 elseif tag.name == "list" and tag.attr.name then -- Client adds / edits a privacy list
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
351 if #tag.tags == 0 then -- Client removes a privacy list
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
352 valid = deleteList(privacy_lists, origin, stanza, tag.attr.name);
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
353 else -- Client edits a privacy list
42
bbb3d3a90a70 mod_privacy: decrease the log messages count.
Thilo Cestonaro <thilo@cestona.ro>
parents: 41
diff changeset
354 valid = createOrReplaceList(privacy_lists, origin, stanza, tag.attr.name, tag.tags);
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
355 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
356 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
357 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
358 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
359 elseif stanza.attr.type == "get" then
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
360 local name = nil;
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
361 local listsToRetrieve = 0;
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
362 if #query.tags >= 1 then
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
363 for _,tag in ipairs(query.tags) do
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
364 if tag.name == "list" then -- Client requests a privacy list from server
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
365 name = tag.attr.name;
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
366 listsToRetrieve = listsToRetrieve + 1;
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
367 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
368 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
369 end
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
370 if listsToRetrieve == 0 or listsToRetrieve == 1 then
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
371 valid = getList(privacy_lists, origin, stanza, name);
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
372 end
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
373 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
374
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
375 if valid ~= true then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
376 if valid[0] == nil then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
377 valid[0] = "cancel";
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
378 end
20
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
379 if valid[1] == nil then
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
380 valid[1] = "bad-request";
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
381 end
2675dc25445b mod_privacy: overworked error returns while creating, editing, deleting or de/activating lists.
Thilo Cestonaro <thilo@cestona.ro>
parents: 19
diff changeset
382 origin.send(st.error_reply(stanza, valid[0], valid[1], valid[2]));
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
383 else
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
384 datamanager.store(origin.username, origin.host, "privacy", privacy_lists);
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
385 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
386 return true;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
387 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
388 return false;
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
389 end, 500);
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
390
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
391 function checkIfNeedToBeBlocked(e, session)
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
392 local origin, stanza = e.origin, e.stanza;
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
393 local privacy_lists = datamanager.load(session.username, session.host, "privacy") or {};
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
394 local bare_jid = session.username.."@"..session.host;
39
b84b2b026eb4 mod_privacy: never block communications from one of a user's resources to another.
Thilo Cestonaro <thilo@cestona.ro>
parents: 27
diff changeset
395
46
ea756d96584f mod_privacy: nicer debug logging ...
Thilo Cestonaro <thilo@cestona.ro>
parents: 45
diff changeset
396 module:log("debug", "stanza: %s, to: %s, from: %s", tostring(stanza.name), tostring(stanza.attr.to), tostring(stanza.attr.from));
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
397
27
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
398 if stanza.attr.to ~= nil and stanza.attr.from ~= nil then
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
399 if privacy_lists.lists == nil or
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
400 (session.activePrivacyList == nil or session.activePrivacyList == "") and
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
401 (privacy_lists.default == nil or privacy_lists.default == "")
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
402 then
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
403 return; -- Nothing to block, default is Allow all
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
404 end
39
b84b2b026eb4 mod_privacy: never block communications from one of a user's resources to another.
Thilo Cestonaro <thilo@cestona.ro>
parents: 27
diff changeset
405 if jid_bare(stanza.attr.from) == bare_jid and jid_bare(stanza.attr.to) == bare_jid then
b84b2b026eb4 mod_privacy: never block communications from one of a user's resources to another.
Thilo Cestonaro <thilo@cestona.ro>
parents: 27
diff changeset
406 module:log("debug", "Never block communications from one of a user's resources to another.");
b84b2b026eb4 mod_privacy: never block communications from one of a user's resources to another.
Thilo Cestonaro <thilo@cestona.ro>
parents: 27
diff changeset
407 return; -- from one of a user's resource to another => HANDS OFF!
b84b2b026eb4 mod_privacy: never block communications from one of a user's resources to another.
Thilo Cestonaro <thilo@cestona.ro>
parents: 27
diff changeset
408 end
41
0381d5d38c37 mod_privacy: fix bug where priority was nil and compared to a number (Thx flo for reporting!)
Thilo Cestonaro <thilo@cestona.ro>
parents: 39
diff changeset
409
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
410 local idx;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
411 local list;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
412 local item;
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
413 local listname = session.activePrivacyList;
27
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
414 if listname == nil or listname == "" then
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
415 listname = privacy_lists.default; -- no active list selected, use default list
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
416 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
417 idx = findNamedList(privacy_lists, listname);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
418 if idx == nil then
27
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
419 module:log("error", "given privacy listname not found. name: %s", listname);
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
420 return;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
421 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
422 list = privacy_lists.lists[idx];
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
423 if list == nil then
27
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
424 module:log("info", "privacy list index wrong. index: %d", idx);
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
425 return;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
426 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
427 for _,item in ipairs(list.items) do
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
428 local apply = false;
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
429 local block = false;
42
bbb3d3a90a70 mod_privacy: decrease the log messages count.
Thilo Cestonaro <thilo@cestona.ro>
parents: 41
diff changeset
430 if (
bbb3d3a90a70 mod_privacy: decrease the log messages count.
Thilo Cestonaro <thilo@cestona.ro>
parents: 41
diff changeset
431 (stanza.name == "message" and item.message) or
bbb3d3a90a70 mod_privacy: decrease the log messages count.
Thilo Cestonaro <thilo@cestona.ro>
parents: 41
diff changeset
432 (stanza.name == "iq" and item.iq) or
bbb3d3a90a70 mod_privacy: decrease the log messages count.
Thilo Cestonaro <thilo@cestona.ro>
parents: 41
diff changeset
433 (stanza.name == "presence" and jid_bare(stanza.attr.to) == bare_jid and item["presence-in"]) or
bbb3d3a90a70 mod_privacy: decrease the log messages count.
Thilo Cestonaro <thilo@cestona.ro>
parents: 41
diff changeset
434 (stanza.name == "presence" and jid_bare(stanza.attr.from) == bare_jid and item["presence-out"]) or
bbb3d3a90a70 mod_privacy: decrease the log messages count.
Thilo Cestonaro <thilo@cestona.ro>
parents: 41
diff changeset
435 (item.message == false and item.iq == false and item["presence-in"] == false and item["presence-in"] == false)
bbb3d3a90a70 mod_privacy: decrease the log messages count.
Thilo Cestonaro <thilo@cestona.ro>
parents: 41
diff changeset
436 ) then
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
437 apply = true;
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
438 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
439 if apply then
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
440 local evilJid = {};
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
441 apply = false;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
442 if jid_bare(stanza.attr.to) == bare_jid then
27
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
443 module:log("debug", "evil jid is (from): %s", stanza.attr.from);
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
444 evilJid.node, evilJid.host, evilJid.resource = jid_split(stanza.attr.from);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
445 else
27
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
446 module:log("debug", "evil jid is (to): %s", stanza.attr.to);
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
447 evilJid.node, evilJid.host, evilJid.resource = jid_split(stanza.attr.to);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
448 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
449 if item.type == "jid" and
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
450 (evilJid.node and evilJid.host and evilJid.resource and item.value == evilJid.node.."@"..evilJid.host.."/"..evilJid.resource) or
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
451 (evilJid.node and evilJid.host and item.value == evilJid.node.."@"..evilJid.host) or
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
452 (evilJid.host and evilJid.resource and item.value == evilJid.host.."/"..evilJid.resource) or
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
453 (evilJid.host and item.value == evilJid.host) then
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
454 apply = true;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
455 block = (item.action == "deny");
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
456 elseif item.type == "group" then
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
457 local roster = load_roster(session.username, session.host);
27
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
458 local groups = roster[evilJid.node .. "@" .. evilJid.host].groups;
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
459 for group in pairs(groups) do
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
460 if group == item.value then
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
461 apply = true;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
462 block = (item.action == "deny");
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
463 break;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
464 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
465 end
27
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
466 elseif item.type == "subscription" and evilJid.node ~= nil and evilJid.host ~= nil then -- we need a valid bare evil jid
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
467 local roster = load_roster(session.username, session.host);
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
468 if roster[evilJid.node .. "@" .. evilJid.host].subscription == item.value then
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
469 apply = true;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
470 block = (item.action == "deny");
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
471 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
472 elseif item.type == nil then
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
473 apply = true;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
474 block = (item.action == "deny");
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
475 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
476 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
477 if apply then
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
478 if block then
46
ea756d96584f mod_privacy: nicer debug logging ...
Thilo Cestonaro <thilo@cestona.ro>
parents: 45
diff changeset
479 module:log("info", "stanza blocked: %s, to: %s, from: %s", tostring(stanza.name), tostring(stanza.attr.to), tostring(stanza.attr.from));
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
480 if stanza.name == "message" then
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
481 origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
482 elseif stanza.name == "iq" and (stanza.attr.type == "get" or stanza.attr.type == "set") then
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
483 origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
484 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
485 return true; -- stanza blocked !
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
486 else
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
487 module:log("info", "stanza explicit allowed!")
27
d91cb13ef0ee mod_privacy: make the block function work; retrieve the roster groups correctly
Thilo Cestonaro <thilo@cestona.ro>
parents: 20
diff changeset
488 return;
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
489 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
490 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
491 end
10
7d70faba234c some error reporting during list editing
Thilo Cestonaro <thilo@cestona.ro>
parents: 8
diff changeset
492 end
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
493 return;
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
494 end
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
495
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
496 function preCheckIncoming(e)
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
497 local session;
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
498 if e.stanza.attr.to ~= nil then
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
499 local node, host, resource = jid_split(e.stanza.attr.to);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
500 if node == nil or host == nil then
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
501 return;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
502 end
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
503 if resource == nil then
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
504 local prio = 0;
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
505 local session_;
18
2df11ec081fe mod_privacy: make finding the right session working
Thilo Cestonaro <thilo@cestona.ro>
parents: 17
diff changeset
506 if bare_sessions[node.."@"..host] ~= nil then
2df11ec081fe mod_privacy: make finding the right session working
Thilo Cestonaro <thilo@cestona.ro>
parents: 17
diff changeset
507 for resource, session_ in pairs(bare_sessions[node.."@"..host].sessions) do
41
0381d5d38c37 mod_privacy: fix bug where priority was nil and compared to a number (Thx flo for reporting!)
Thilo Cestonaro <thilo@cestona.ro>
parents: 39
diff changeset
508 if session_.priority ~= nil and session_.priority > prio then
18
2df11ec081fe mod_privacy: make finding the right session working
Thilo Cestonaro <thilo@cestona.ro>
parents: 17
diff changeset
509 session = session_;
2df11ec081fe mod_privacy: make finding the right session working
Thilo Cestonaro <thilo@cestona.ro>
parents: 17
diff changeset
510 prio = session_.priority;
2df11ec081fe mod_privacy: make finding the right session working
Thilo Cestonaro <thilo@cestona.ro>
parents: 17
diff changeset
511 end
17
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
512 end
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
513 end
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
514 else
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
515 session = full_sessions[node.."@"..host.."/"..resource];
ccb07c0efc7e mod_privacy: prepare everything for the "is used" checking stuff...
Thilo Cestonaro <thilo@cestona.ro>
parents: 16
diff changeset
516 end
18
2df11ec081fe mod_privacy: make finding the right session working
Thilo Cestonaro <thilo@cestona.ro>
parents: 17
diff changeset
517 if session ~= nil then
2df11ec081fe mod_privacy: make finding the right session working
Thilo Cestonaro <thilo@cestona.ro>
parents: 17
diff changeset
518 return checkIfNeedToBeBlocked(e, session);
2df11ec081fe mod_privacy: make finding the right session working
Thilo Cestonaro <thilo@cestona.ro>
parents: 17
diff changeset
519 else
46
ea756d96584f mod_privacy: nicer debug logging ...
Thilo Cestonaro <thilo@cestona.ro>
parents: 45
diff changeset
520 module:log("debug", "preCheckIncoming: Couldn't get session for jid: %s@%s/%s", tostring(node), tostring(host), tostring(resource))
18
2df11ec081fe mod_privacy: make finding the right session working
Thilo Cestonaro <thilo@cestona.ro>
parents: 17
diff changeset
521 end
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
522 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
523 return;
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
524 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
525
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
526 function preCheckOutgoing(e)
39
b84b2b026eb4 mod_privacy: never block communications from one of a user's resources to another.
Thilo Cestonaro <thilo@cestona.ro>
parents: 27
diff changeset
527 local session = e.origin;
b84b2b026eb4 mod_privacy: never block communications from one of a user's resources to another.
Thilo Cestonaro <thilo@cestona.ro>
parents: 27
diff changeset
528 if e.stanza.attr.from == nil then
45
3f5bbd7c90d4 mod_privacy: it says "from" not "form" (thx flo for reporting!)
Thilo Cestonaro <thilo@cestona.ro>
parents: 42
diff changeset
529 e.stanza.attr.from = session.username .. "@" .. session.host;
39
b84b2b026eb4 mod_privacy: never block communications from one of a user's resources to another.
Thilo Cestonaro <thilo@cestona.ro>
parents: 27
diff changeset
530 if session.resource ~= nil then
45
3f5bbd7c90d4 mod_privacy: it says "from" not "form" (thx flo for reporting!)
Thilo Cestonaro <thilo@cestona.ro>
parents: 42
diff changeset
531 e.stanza.attr.from = e.stanza.attr.from .. "/" .. session.resource;
18
2df11ec081fe mod_privacy: make finding the right session working
Thilo Cestonaro <thilo@cestona.ro>
parents: 17
diff changeset
532 end
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
533 end
39
b84b2b026eb4 mod_privacy: never block communications from one of a user's resources to another.
Thilo Cestonaro <thilo@cestona.ro>
parents: 27
diff changeset
534 return checkIfNeedToBeBlocked(e, session);
11
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
535 end
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
536
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
537
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
538 module:hook("pre-message/full", preCheckOutgoing, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
539 module:hook("pre-message/bare", preCheckOutgoing, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
540 module:hook("pre-message/host", preCheckOutgoing, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
541 module:hook("pre-iq/full", preCheckOutgoing, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
542 module:hook("pre-iq/bare", preCheckOutgoing, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
543 module:hook("pre-iq/host", preCheckOutgoing, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
544 module:hook("pre-presence/full", preCheckOutgoing, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
545 module:hook("pre-presence/bare", preCheckOutgoing, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
546 module:hook("pre-presence/host", preCheckOutgoing, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
547
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
548 module:hook("message/full", preCheckIncoming, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
549 module:hook("message/bare", preCheckIncoming, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
550 module:hook("message/host", preCheckIncoming, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
551 module:hook("iq/full", preCheckIncoming, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
552 module:hook("iq/bare", preCheckIncoming, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
553 module:hook("iq/host", preCheckIncoming, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
554 module:hook("presence/full", preCheckIncoming, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
555 module:hook("presence/bare", preCheckIncoming, 500);
529819205379 do the first real blocking actions
Thilo Cestonaro <thilo@cestona.ro>
parents: 10
diff changeset
556 module:hook("presence/host", preCheckIncoming, 500);
8
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
557
10502594a49b adds mod_privacy; lists creating, editing and deletion working.
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
558 module:log("info", "mod_privacy loaded ...");