net.http.server: Properly handle persistent connections
[prosody.git] / plugins / mod_privacy.lua
index 8dbc2bc48d359e100ce08325076e7a288c20c859..2d696154cce03701c584f4692909fe61a2faf51a 100644 (file)
@@ -7,6 +7,8 @@
 -- COPYING file in the source package for more information.
 --
 
+module:add_feature("jabber:iq:privacy");
+
 local prosody = prosody;
 local st = require "util.stanza";
 local datamanager = require "util.datamanager";
@@ -43,28 +45,6 @@ function isAnotherSessionUsingDefaultList(origin)
        end
 end
 
-function sendUnavailable(origin, to, from)
---[[ example unavailable presence stanza
-<presence from="node@host/resource" type="unavailable" to="node@host" >
-       <status>Logged out</status>
-</presence>
-]]--
-       local presence = st.presence({from=from, type="unavailable"});
-       presence:tag("status"):text("Logged out");
-
-       local node, host = jid_bare(to);
-       local bare = node .. "@" .. host;
-       
-       local user = bare_sessions[bare];
-       if user then
-               for resource, session in pairs(user.sessions) do
-                       presence.attr.to = session.full_jid;
-                       module:log("debug", "send unavailable to: %s; from: %s", tostring(presence.attr.to), tostring(presence.attr.from));
-                       origin.send(presence);
-               end
-       end
-end
-
 function declineList(privacy_lists, origin, stanza, which)
        if which == "default" then
                if isAnotherSessionUsingDefaultList(origin) then
@@ -93,8 +73,10 @@ function activateList(privacy_lists, origin, stanza, which, name)
        elseif which == "active" and list then
                origin.activePrivacyList = name;
                origin.send(st.reply(stanza));
+       elseif not list then
+               return {"cancel", "item-not-found", "No such list: "..name};
        else
-               return {"modify", "bad-request", "Either not active or default given or unknown list name specified."};
+               return {"modify", "bad-request", "No list chosen to be active or default."};
        end
        return true;
 end
@@ -119,7 +101,7 @@ function deleteList(privacy_lists, origin, stanza, name)
        return {"modify", "bad-request", "Not existing list specifed to be deleted."};
 end
 
-function createOrReplaceList (privacy_lists, origin, stanza, name, entries, roster)
+function createOrReplaceList (privacy_lists, origin, stanza, name, entries)
        local bare_jid = origin.username.."@"..origin.host;
        
        if privacy_lists.lists == nil then
@@ -199,7 +181,7 @@ function getList(privacy_lists, origin, stanza, name)
 
        if name == nil then
                if privacy_lists.lists then
-                       if origin.ActivePrivacyList then
+                       if origin.activePrivacyList then
                                reply:tag("active", {name=origin.activePrivacyList}):up();
                        end
                        if privacy_lists.default then
@@ -301,7 +283,7 @@ function checkIfNeedToBeBlocked(e, session)
        local origin, stanza = e.origin, e.stanza;
        local privacy_lists = datamanager.load(session.username, session.host, "privacy") or {};
        local bare_jid = session.username.."@"..session.host;
-       local to = stanza.attr.to;
+       local to = stanza.attr.to or bare_jid;
        local from = stanza.attr.from;
        
        local is_to_user = bare_jid == jid_bare(to);
@@ -319,7 +301,6 @@ function checkIfNeedToBeBlocked(e, session)
                return; -- from one of a user's resource to another => HANDS OFF!
        end
        
-       local item;
        local listname = session.activePrivacyList;
        if listname == nil then
                listname = privacy_lists.default; -- no active list selected, use default list
@@ -410,7 +391,6 @@ function preCheckIncoming(e)
                end
                if resource == nil then
                        local prio = 0;
-                       local session_;
                        if bare_sessions[node.."@"..host] ~= nil then
                                for resource, session_ in pairs(bare_sessions[node.."@"..host].sessions) do
                                        if session_.priority ~= nil and session_.priority > prio then