Mercurial > prosody-hg
comparison plugins/mod_privacy.lua @ 5776:bd0ff8ae98a8
Remove all trailing whitespace
| author | Florian Zeitz <florob@babelmonkeys.de> |
|---|---|
| date | Fri, 09 Aug 2013 17:48:21 +0200 |
| parents | eeea0eb2602a |
| children | ba7c86406d31 |
comparison
equal
deleted
inserted
replaced
| 5775:a6c2b8933507 | 5776:bd0ff8ae98a8 |
|---|---|
| 1 -- Prosody IM | 1 -- Prosody IM |
| 2 -- Copyright (C) 2009-2010 Matthew Wild | 2 -- Copyright (C) 2009-2010 Matthew Wild |
| 3 -- Copyright (C) 2009-2010 Waqas Hussain | 3 -- Copyright (C) 2009-2010 Waqas Hussain |
| 4 -- Copyright (C) 2009 Thilo Cestonaro | 4 -- Copyright (C) 2009 Thilo Cestonaro |
| 5 -- | 5 -- |
| 6 -- This project is MIT/X11 licensed. Please see the | 6 -- This project is MIT/X11 licensed. Please see the |
| 7 -- COPYING file in the source package for more information. | 7 -- COPYING file in the source package for more information. |
| 8 -- | 8 -- |
| 9 | 9 |
| 10 module:add_feature("jabber:iq:privacy"); | 10 module:add_feature("jabber:iq:privacy"); |
| 101 return {"modify", "bad-request", "Not existing list specifed to be deleted."}; | 101 return {"modify", "bad-request", "Not existing list specifed to be deleted."}; |
| 102 end | 102 end |
| 103 | 103 |
| 104 function createOrReplaceList (privacy_lists, origin, stanza, name, entries) | 104 function createOrReplaceList (privacy_lists, origin, stanza, name, entries) |
| 105 local bare_jid = origin.username.."@"..origin.host; | 105 local bare_jid = origin.username.."@"..origin.host; |
| 106 | 106 |
| 107 if privacy_lists.lists == nil then | 107 if privacy_lists.lists == nil then |
| 108 privacy_lists.lists = {}; | 108 privacy_lists.lists = {}; |
| 109 end | 109 end |
| 110 | 110 |
| 111 local list = {}; | 111 local list = {}; |
| 117 | 117 |
| 118 for _,item in ipairs(entries) do | 118 for _,item in ipairs(entries) do |
| 119 if to_number(item.attr.order) == nil or to_number(item.attr.order) < 0 or orderCheck[item.attr.order] ~= nil then | 119 if to_number(item.attr.order) == nil or to_number(item.attr.order) < 0 or orderCheck[item.attr.order] ~= nil then |
| 120 return {"modify", "bad-request", "Order attribute not valid."}; | 120 return {"modify", "bad-request", "Order attribute not valid."}; |
| 121 end | 121 end |
| 122 | 122 |
| 123 if item.attr.type ~= nil and item.attr.type ~= "jid" and item.attr.type ~= "subscription" and item.attr.type ~= "group" then | 123 if item.attr.type ~= nil and item.attr.type ~= "jid" and item.attr.type ~= "subscription" and item.attr.type ~= "group" then |
| 124 return {"modify", "bad-request", "Type attribute not valid."}; | 124 return {"modify", "bad-request", "Type attribute not valid."}; |
| 125 end | 125 end |
| 126 | 126 |
| 127 local tmp = {}; | 127 local tmp = {}; |
| 128 orderCheck[item.attr.order] = true; | 128 orderCheck[item.attr.order] = true; |
| 129 | 129 |
| 130 tmp["type"] = item.attr.type; | 130 tmp["type"] = item.attr.type; |
| 131 tmp["value"] = item.attr.value; | 131 tmp["value"] = item.attr.value; |
| 132 tmp["action"] = item.attr.action; | 132 tmp["action"] = item.attr.action; |
| 133 tmp["order"] = to_number(item.attr.order); | 133 tmp["order"] = to_number(item.attr.order); |
| 134 tmp["presence-in"] = false; | 134 tmp["presence-in"] = false; |
| 135 tmp["presence-out"] = false; | 135 tmp["presence-out"] = false; |
| 136 tmp["message"] = false; | 136 tmp["message"] = false; |
| 137 tmp["iq"] = false; | 137 tmp["iq"] = false; |
| 138 | 138 |
| 139 if #item.tags > 0 then | 139 if #item.tags > 0 then |
| 140 for _,tag in ipairs(item.tags) do | 140 for _,tag in ipairs(item.tags) do |
| 141 tmp[tag.name] = true; | 141 tmp[tag.name] = true; |
| 142 end | 142 end |
| 143 end | 143 end |
| 144 | 144 |
| 145 if tmp.type == "subscription" then | 145 if tmp.type == "subscription" then |
| 146 if tmp.value ~= "both" and | 146 if tmp.value ~= "both" and |
| 147 tmp.value ~= "to" and | 147 tmp.value ~= "to" and |
| 148 tmp.value ~= "from" and | 148 tmp.value ~= "from" and |
| 149 tmp.value ~= "none" then | 149 tmp.value ~= "none" then |
| 150 return {"cancel", "bad-request", "Subscription value must be both, to, from or none."}; | 150 return {"cancel", "bad-request", "Subscription value must be both, to, from or none."}; |
| 151 end | 151 end |
| 152 end | 152 end |
| 153 | 153 |
| 154 if tmp.action ~= "deny" and tmp.action ~= "allow" then | 154 if tmp.action ~= "deny" and tmp.action ~= "allow" then |
| 155 return {"cancel", "bad-request", "Action must be either deny or allow."}; | 155 return {"cancel", "bad-request", "Action must be either deny or allow."}; |
| 156 end | 156 end |
| 157 list.items[#list.items + 1] = tmp; | 157 list.items[#list.items + 1] = tmp; |
| 158 end | 158 end |
| 159 | 159 |
| 160 table.sort(list, function(a, b) return a.order < b.order; end); | 160 table.sort(list, function(a, b) return a.order < b.order; end); |
| 161 | 161 |
| 162 origin.send(st.reply(stanza)); | 162 origin.send(st.reply(stanza)); |
| 163 if bare_sessions[bare_jid] ~= nil then | 163 if bare_sessions[bare_jid] ~= nil then |
| 164 local iq = st.iq ( { type = "set", id="push1" } ); | 164 local iq = st.iq ( { type = "set", id="push1" } ); |
| 205 end | 205 end |
| 206 else | 206 else |
| 207 return {"cancel", "item-not-found", "Unknown list specified."}; | 207 return {"cancel", "item-not-found", "Unknown list specified."}; |
| 208 end | 208 end |
| 209 end | 209 end |
| 210 | 210 |
| 211 origin.send(reply); | 211 origin.send(reply); |
| 212 return true; | 212 return true; |
| 213 end | 213 end |
| 214 | 214 |
| 215 module:hook("iq/bare/jabber:iq:privacy:query", function(data) | 215 module:hook("iq/bare/jabber:iq:privacy:query", function(data) |
| 216 local origin, stanza = data.origin, data.stanza; | 216 local origin, stanza = data.origin, data.stanza; |
| 217 | 217 |
| 218 if stanza.attr.to == nil then -- only service requests to own bare JID | 218 if stanza.attr.to == nil then -- only service requests to own bare JID |
| 219 local query = stanza.tags[1]; -- the query element | 219 local query = stanza.tags[1]; -- the query element |
| 220 local valid = false; | 220 local valid = false; |
| 221 local privacy_lists = privacy_storage:get(origin.username) or { lists = {} }; | 221 local privacy_lists = privacy_storage:get(origin.username) or { lists = {} }; |
| 222 | 222 |
| 283 local origin, stanza = e.origin, e.stanza; | 283 local origin, stanza = e.origin, e.stanza; |
| 284 local privacy_lists = privacy_storage:get(session.username) or {}; | 284 local privacy_lists = privacy_storage:get(session.username) or {}; |
| 285 local bare_jid = session.username.."@"..session.host; | 285 local bare_jid = session.username.."@"..session.host; |
| 286 local to = stanza.attr.to or bare_jid; | 286 local to = stanza.attr.to or bare_jid; |
| 287 local from = stanza.attr.from; | 287 local from = stanza.attr.from; |
| 288 | 288 |
| 289 local is_to_user = bare_jid == jid_bare(to); | 289 local is_to_user = bare_jid == jid_bare(to); |
| 290 local is_from_user = bare_jid == jid_bare(from); | 290 local is_from_user = bare_jid == jid_bare(from); |
| 291 | 291 |
| 292 --module:log("debug", "stanza: %s, to: %s, from: %s", tostring(stanza.name), tostring(to), tostring(from)); | 292 --module:log("debug", "stanza: %s, to: %s, from: %s", tostring(stanza.name), tostring(to), tostring(from)); |
| 293 | 293 |
| 294 if privacy_lists.lists == nil or | 294 if privacy_lists.lists == nil or |
| 295 not (session.activePrivacyList or privacy_lists.default) | 295 not (session.activePrivacyList or privacy_lists.default) |
| 296 then | 296 then |
| 297 return; -- Nothing to block, default is Allow all | 297 return; -- Nothing to block, default is Allow all |
| 298 end | 298 end |
| 299 if is_from_user and is_to_user then | 299 if is_from_user and is_to_user then |
| 300 --module:log("debug", "Not blocking communications between user's resources"); | 300 --module:log("debug", "Not blocking communications between user's resources"); |
| 301 return; -- from one of a user's resource to another => HANDS OFF! | 301 return; -- from one of a user's resource to another => HANDS OFF! |
| 302 end | 302 end |
| 303 | 303 |
| 304 local listname = session.activePrivacyList; | 304 local listname = session.activePrivacyList; |
| 305 if listname == nil then | 305 if listname == nil then |
| 306 listname = privacy_lists.default; -- no active list selected, use default list | 306 listname = privacy_lists.default; -- no active list selected, use default list |
| 307 end | 307 end |
| 308 local list = privacy_lists.lists[listname]; | 308 local list = privacy_lists.lists[listname]; |
