Comparison

mod_privacy/mod_privacy.lua @ 58:b07193056935

mod_privacy: save the part already coded for presence-out/-in getting active stuff but disabled it.
author Thilo Cestonaro <thilo@cestona.ro>
date Tue, 20 Oct 2009 20:27:10 +0200
parent 46:ea756d96584f
comparison
equal deleted inserted replaced
57:cddcea7c091a 58:b07193056935
58 end 58 end
59 end 59 end
60 return ret; 60 return ret;
61 end 61 end
62 62
63 function sendUnavailable(to, from)
64 --[[ example unavailable presence stanza
65 <presence from="node@host/resource" type="unavailable" to="node@host" >
66 <status>Logged out</status>
67 </presence>
68 ]]--
69 local presence = st.presence({from=from, type="unavailable"})
70 presence:tag("status"):text("Logged out");
71
72 local node, host = jid_bare(to);
73 local bare = node .. "@" .. host;
74
75 if bare_sessions[bare].sessions ~= nil then
76 for resource, session in pairs(bare_sessions[bare].sessions) do
77 presence.attr.to = session.full_jid;
78 module:log("debug", "send unavailable to: %s; from: %s", tostring(presence.attr.to), tostring(presence.attr.from));
79 origin.send(presence);
80 end
81 end
82 end
83
84 function sendNeededUnavailablePersences(origin, listnameOrItem) -- TODO implement it correctly!
85 if type(listnameOrItem) == "string" then
86 local listname = listnameOrItem;
87 for _,list in ipairs(privacy_lists.lists) do
88 if list.name == listname then
89 for _,item in ipairs(list.items) do
90 sendNeededUnavailablePersences(origin, item);
91 end
92 end
93 end
94 elseif type(listnameOrItem) == "table" then
95 module:log("debug", "got an item, check wether to send unavailable presence stanza or not");
96 local item = listnameOrItem;
97 local serialize = require "util.serialization".serialize;
98
99
100 if item["presence-out"] == true then
101 if item.type == "jid" then
102 sendUnavailable(item.value, origin.full_jid);
103 elseif item.type == "group" then
104 elseif item.type == "subscription" then
105 elseif item.type == nil then
106 end
107 elseif item["presence-in"] == true then
108 if item.type == "jid" then
109 sendUnavailable(origin.full_jid, item.value);
110 elseif item.type == "group" then
111 elseif item.type == "subscription" then
112 elseif item.type == nil then
113 end
114 end
115 else
116 module:log("debug", "got unknown type: %s", type(listnameOrItem));
117 end
118 end
119
63 function declineList (privacy_lists, origin, stanza, which) 120 function declineList (privacy_lists, origin, stanza, which)
64 if which == "default" then 121 if which == "default" then
65 if isAnotherSessionUsingDefaultList(origin) then 122 if isAnotherSessionUsingDefaultList(origin) then
66 return { "cancel", "conflict", "Another session is online and using the default list."}; 123 return { "cancel", "conflict", "Another session is online and using the default list."};
67 end 124 end
90 if isAnotherSessionUsingDefaultList(origin) then 147 if isAnotherSessionUsingDefaultList(origin) then
91 return {"cancel", "conflict", "Another session is online and using the default list."}; 148 return {"cancel", "conflict", "Another session is online and using the default list."};
92 end 149 end
93 privacy_lists.default = name; 150 privacy_lists.default = name;
94 origin.send(st.reply(stanza)); 151 origin.send(st.reply(stanza));
152 --[[
153 if origin.activePrivacyList == nil then
154 sendNeededUnavailablePersences(origin, name);
155 end
156 ]]--
95 elseif which == "active" and idx ~= nil then 157 elseif which == "active" and idx ~= nil then
96 origin.activePrivacyList = name; 158 origin.activePrivacyList = name;
97 origin.send(st.reply(stanza)); 159 origin.send(st.reply(stanza));
160 -- sendNeededUnavailablePersences(origin, name);
98 else 161 else
99 return {"modify", "bad-request", "Either not active or default given or unknown list name specified."}; 162 return {"modify", "bad-request", "Either not active or default given or unknown list name specified."};
100 end 163 end
101 return true; 164 return true;
102 end 165 end
202 265
203 if tmp.action ~= "deny" and tmp.action ~= "allow" then 266 if tmp.action ~= "deny" and tmp.action ~= "allow" then
204 return {"cancel", "bad-request", "Action must be either deny or allow."}; 267 return {"cancel", "bad-request", "Action must be either deny or allow."};
205 end 268 end
206 269
270 --[[
271 if (privacy_lists.default == name and origin.activePrivacyList == nil) or origin.activePrivacyList == name then
272 module:log("debug", "calling sendNeededUnavailablePresences!");
273 -- item is valid and list is active, so send needed unavailable stanzas
274 sendNeededUnavailablePersences(origin, tmp);
275 end
276 ]]--
207 list.items[#list.items + 1] = tmp; 277 list.items[#list.items + 1] = tmp;
208 end 278 end
209 279
210 table.sort(list, sortByOrder); 280 table.sort(list, sortByOrder);
211 281