Merge
authorMatthew Wild <mwild1@gmail.com>
Wed, 6 May 2015 18:21:29 +0000 (19:21 +0100)
committerMatthew Wild <mwild1@gmail.com>
Wed, 6 May 2015 18:21:29 +0000 (19:21 +0100)
core/moduleapi.lua
core/modulemanager.lua
core/portmanager.lua
core/rostermanager.lua
core/s2smanager.lua
core/sessionmanager.lua
core/stanza_router.lua
core/storagemanager.lua
core/usermanager.lua
util/events.lua
util/xml.lua

index f3326295b94b2b031137d5dbb7456958b8b921f3..0cb1f1e7f13a552bb532a6d82cfc1ad761101432 100644 (file)
@@ -10,11 +10,13 @@ local config = require "core.configmanager";
 local modulemanager; -- This gets set from modulemanager
 local array = require "util.array";
 local set = require "util.set";
+local it = require "util.iterators";
 local logger = require "util.logger";
 local pluginloader = require "util.pluginloader";
 local timer = require "util.timer";
 local resolve_relative_path = require"util.paths".resolve_relative_path;
 local measure = require "core.statsmanager".measure;
+local st = require "util.stanza";
 
 local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat;
 local error, setmetatable, type = error, setmetatable, type;
@@ -54,7 +56,7 @@ function api:set_global()
        self.host = "*";
        -- Update the logger
        local _log = logger.init("mod_"..self.name);
-       self.log = function (self, ...) return _log(...); end;
+       self.log = function (self, ...) return _log(...); end; --luacheck: ignore self
        self._log = _log;
        self.global = true;
 end
@@ -62,8 +64,8 @@ end
 function api:add_feature(xmlns)
        self:add_item("feature", xmlns);
 end
-function api:add_identity(category, type, name)
-       self:add_item("identity", {category = category, type = type, name = name});
+function api:add_identity(category, identity_type, name)
+       self:add_item("identity", {category = category, type = identity_type, name = name});
 end
 function api:add_extension(data)
        self:add_item("extension", data);
@@ -74,9 +76,9 @@ function api:has_feature(xmlns)
        end
        return false;
 end
-function api:has_identity(category, type, name)
+function api:has_identity(category, identity_type, name)
        for _, id in ipairs(self:get_host_items("identity")) do
-               if id.category == category and id.type == type and id.name == name then
+               if id.category == category and id.type == identity_type and id.name == name then
                        return true;
                end
        end
@@ -93,6 +95,7 @@ function api:hook_object_event(object, event, handler, priority)
 end
 
 function api:unhook_object_event(object, event, handler)
+       self.event_handlers:set(object, event, handler, nil);
        return object.remove_handler(event, handler);
 end
 
@@ -129,7 +132,7 @@ function api:wrap_event(event, handler)
 end
 
 function api:wrap_global(event, handler)
-       return self:hook_object_event(prosody.events, event, handler, priority);
+       return self:hook_object_event(prosody.events, event, handler);
 end
 
 function api:require(lib)
@@ -327,11 +330,11 @@ function api:get_host_items(key)
        return result;
 end
 
-function api:handle_items(type, added_cb, removed_cb, existing)
-       self:hook("item-added/"..type, added_cb);
-       self:hook("item-removed/"..type, removed_cb);
+function api:handle_items(item_type, added_cb, removed_cb, existing)
+       self:hook("item-added/"..item_type, added_cb);
+       self:hook("item-removed/"..item_type, removed_cb);
        if existing ~= false then
-               for _, item in ipairs(self:get_host_items(type)) do
+               for _, item in ipairs(self:get_host_items(item_type)) do
                        added_cb({ item = item });
                end
        end
@@ -362,6 +365,14 @@ function api:send(stanza)
        return core_post_stanza(hosts[self.host], stanza);
 end
 
+function api:broadcast(jids, stanza, iter)
+       for jid in (iter or it.values)(jids) do
+               local new_stanza = st.clone(stanza);
+               new_stanza.attr.to = jid;
+               core_post_stanza(hosts[self.host], new_stanza);
+       end
+end
+
 function api:add_timer(delay, callback)
        return timer.add_task(delay, function (t)
                if self.loaded == false then return; end
@@ -379,19 +390,19 @@ function api:load_resource(path, mode)
        return io.open(path, mode);
 end
 
-function api:open_store(name, type)
-       return require"core.storagemanager".open(self.host, name or self.name, type);
+function api:open_store(name, store_type)
+       return require"core.storagemanager".open(self.host, name or self.name, store_type);
 end
 
-function api:measure(name, type)
-       return measure(type, "/"..self.host.."/mod_"..self.name.."/"..name);
+function api:measure(name, stat_type)
+       return measure(stat_type, "/"..self.host.."/mod_"..self.name.."/"..name);
 end
 
 function api:measure_object_event(events_object, event_name, stat_name)
        local m = self:measure(stat_name or event_name, "duration");
-       local function handler(handlers, event_name, event_data)
+       local function handler(handlers, _event_name, _event_data)
                local finished = m();
-               local ret = handlers(event_name, event_data);
+               local ret = handlers(_event_name, _event_data);
                finished();
                return ret;
        end
@@ -399,11 +410,11 @@ function api:measure_object_event(events_object, event_name, stat_name)
 end
 
 function api:measure_event(event_name, stat_name)
-       return self:hook_object_event((hosts[self.host] or prosody).events.wrappers, event_name, handler);
+       return self:measure_object_event((hosts[self.host] or prosody).events.wrappers, event_name, stat_name);
 end
 
 function api:measure_global_event(event_name, stat_name)
-       return self:hook_object_event(prosody.events.wrappers, event_name, handler);
+       return self:measure_object_event(prosody.events.wrappers, event_name, stat_name);
 end
 
 function api.init(mm)
index 92372ac32f2b62f232addb683538d188cfaaeb03..e629b00571c49dee40e96183f443aca2f2e67693 100644 (file)
@@ -17,13 +17,13 @@ local new_multitable = require "util.multitable".new;
 local hosts = hosts;
 local prosody = prosody;
 
-local pcall, xpcall = pcall, xpcall;
+local xpcall = xpcall;
 local setmetatable, rawget = setmetatable, rawget;
 local ipairs, pairs, type, tostring, t_insert = ipairs, pairs, type, tostring, table.insert;
 
 local debug_traceback = debug.traceback;
 local unpack, select = unpack, select;
-pcall = function(f, ...)
+local pcall = function(f, ...)
        local n = select("#", ...);
        local params = {...};
        return xpcall(function() return f(unpack(params, 1, n)) end, function(e) return tostring(e).."\n"..debug_traceback(); end);
@@ -131,7 +131,7 @@ local function do_load_module(host, module_name, state)
                        local _log = logger.init(host..":"..module_name);
                        local host_module_api = setmetatable({
                                host = host, event_handlers = new_multitable(), items = {};
-                               _log = _log, log = function (self, ...) return _log(...); end;
+                               _log = _log, log = function (self, ...) return _log(...); end; --luacheck: ignore 212/self
                        },{
                                __index = modulemap["*"][module_name].module;
                        });
@@ -152,8 +152,9 @@ local function do_load_module(host, module_name, state)
 
        local _log = logger.init(host..":"..module_name);
        local api_instance = setmetatable({ name = module_name, host = host,
-               _log = _log, log = function (self, ...) return _log(...); end, event_handlers = new_multitable(),
-               reloading = not not state, saved_state = state~=true and state or nil }
+               _log = _log, log = function (self, ...) return _log(...); end, --luacheck: ignore 212/self
+               event_handlers = new_multitable(), reloading = not not state,
+               saved_state = state~=true and state or nil }
                , { __index = api });
 
        local pluginenv = setmetatable({ module = api_instance }, { __index = _G });
index eab2412a8fe7ade02547d463bd5a3fb8aed08bb7..bbb7c215ff92bcaa2c3477d45e4908b7d668a444 100644 (file)
@@ -41,7 +41,7 @@ local active_services = multitable.new();
 
 --- Private helpers
 
-local function error_to_friendly_message(service_name, port, err)
+local function error_to_friendly_message(service_name, port, err) --luacheck: ignore 212/service_name
        local friendly_message = err;
        if err:match(" in use") then
                -- FIXME: Use service_name here
index 612a349fd9adccd7382f82399f34cd43f3253436..a9b26f23892d5b5b1079b309e149fc980992feb0 100644 (file)
@@ -213,10 +213,10 @@ end
 function is_contact_subscribed(username, host, jid)
        do
                local selfjid = username.."@"..host;
-               local subscription = _get_online_roster_subscription(selfjid, jid);
-               if subscription then return (subscription == "both" or subscription == "from"); end
-               local subscription = _get_online_roster_subscription(jid, selfjid);
-               if subscription then return (subscription == "both" or subscription == "to"); end
+               local user_subscription = _get_online_roster_subscription(selfjid, jid);
+               if user_subscription then return (user_subscription == "both" or user_subscription == "from"); end
+               local contact_subscription = _get_online_roster_subscription(jid, selfjid);
+               if contact_subscription then return (contact_subscription == "both" or contact_subscription == "to"); end
        end
        local roster, err = load_roster(username, host);
        local item = roster[jid];
index 59c1831b5eea054805283ea4c8339243523aa461..a3a8702a8bfe69359c5f49894e688207c728c20d 100644 (file)
@@ -49,11 +49,11 @@ local resting_session = { -- Resting, not dead
                close = function (session)
                        session.log("debug", "Attempt to close already-closed session");
                end;
-               filter = function (type, data) return data; end;
+               filter = function (type, data) return data; end; --luacheck: ignore 212/type
        }; resting_session.__index = resting_session;
 
 function retire_session(session, reason)
-       local log = session.log or log;
+       local log = session.log or log; --luacheck: ignore 431/log
        for k in pairs(session) do
                if k ~= "log" and k ~= "id" and k ~= "conn" then
                        session[k] = nil;
index d833dbe50f409538d0592beca373a238f2e2345a..5e4e2991fd97aa256aca8c7fb3735017e6e917a8 100644 (file)
@@ -54,11 +54,11 @@ local resting_session = { -- Resting, not dead
                close = function (session)
                        session.log("debug", "Attempt to close already-closed session");
                end;
-               filter = function (type, data) return data; end;
+               filter = function (type, data) return data; end; --luacheck: ignore 212/type
        }; resting_session.__index = resting_session;
 
 function retire_session(session)
-       local log = session.log or log;
+       local log = session.log or log; --luacheck: ignore 431/log
        for k in pairs(session) do
                if k ~= "log" and k ~= "id" then
                        session[k] = nil;
index 8e86b16f58d4c7af99c9bd1a0c81723e855168b6..55c94bf4b51261ebf897f238c3de0c9cede45c3e 100644 (file)
@@ -30,7 +30,7 @@ deprecated_warning"core_process_stanza";
 deprecated_warning"core_route_stanza";
 
 local valid_stanzas = { message = true, presence = true, iq = true };
-local function handle_unhandled_stanza(host, origin, stanza)
+local function handle_unhandled_stanza(host, origin, stanza) --luacheck: ignore 212/host
        local name, xmlns, origin_type = stanza.name, stanza.attr.xmlns or "jabber:client", origin.type;
        if xmlns == "jabber:client" and valid_stanzas[name] then
                -- A normal stanza
@@ -221,6 +221,8 @@ function core_route_stanza(origin, stanza)
                end
        end
 end
+
+--luacheck: ignore 122/prosody
 prosody.core_process_stanza = core_process_stanza;
 prosody.core_post_stanza = core_post_stanza;
 prosody.core_route_stanza = core_route_stanza;
index ad31eb80cf449f5d187f5845e592018f9eb010ec..0b6679d87c8acd237dcfcd2f92091e3f5c39bd06 100644 (file)
@@ -23,7 +23,7 @@ local null_storage_driver = setmetatable(
                name = "null",
                open = function (self) return self; end
        }, {
-               __index = function (self, method)
+               __index = function (self, method) --luacheck: ignore 212
                        return null_storage_method;
                end
        }
index 900531ca28763786ae206333a26e8acfa20753d5..3a2b23a252a1b78e09463a791888e28154e5e8c0 100644 (file)
@@ -29,7 +29,7 @@ function new_null_provider()
        local function dummy() return nil, "method not implemented"; end;
        local function dummy_get_sasl_handler() return sasl_new(nil, {}); end
        return setmetatable({name = "null", get_sasl_handler = dummy_get_sasl_handler}, {
-               __index = function(self, method) return dummy; end
+               __index = function(self, method) return dummy; end --luacheck: ignore 212
        });
 end
 
index 81fbc13fc127e285c96f78b1d4d2d9d418c8891e..d19da98b9165587659166ee2233b95f951fc9bf9 100644 (file)
@@ -53,6 +53,9 @@ function new()
                        end
                end
        end;
+       local function get_handlers(event)
+               return handlers[event];
+       end;
        local function add_handlers(handlers)
                for event, handler in pairs(handlers) do
                        add_handler(event, handler);
@@ -135,6 +138,7 @@ function new()
                remove_handler = remove_handler;
                add_handlers = add_handlers;
                remove_handlers = remove_handlers;
+               get_handlers = get_handlers;
                wrappers = {
                        add_handler = add_wrapper;
                        remove_handler = remove_wrapper;
index 6dbed65d2f5b1c144890b17cec5511386a8643cd..3c1d3e5192708f013fff345ea80818fa017d6754 100644 (file)
@@ -11,6 +11,7 @@ local parse_xml = (function()
        local ns_separator = "\1";
        local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$";
        return function(xml)
+               --luacheck: ignore 212/self
                local handler = {};
                local stanza = st.stanza("root");
                function handler:StartElement(tagname, attr)