TT#66583 fix load module error

* sql module was moved to util package
* no need to set encoding manually, is done in engine:connect()
* reuse engine if available, seems to be the way other modules
  behave

Change-Id: I39afeb5a08ca5199e3f096fb43a4e8c3eac779ea
changes/88/34988/8
Victor Seva 6 years ago
parent 937d0dd330
commit f9b0c6f6d6

@ -101,10 +101,9 @@ local function implode(delimiter, list, quoter)
return string
end
local mod_sql = module:require("sql");
local params = module:get_option("auth_sql", module:get_option("auth_sql"));
local engine = mod_sql:create_engine(params);
engine:execute("SET NAMES 'utf8' COLLATE 'utf8_bin';");
local sql = require "util.sql";
local default_params = module:get_option("sql");
local engine;
-- Reconnect to DB if necessary
local function reconect_check()
@ -121,24 +120,24 @@ local function lookup_buddy_id()
reconect_check();
local res = engine:select(lookupt_preference_id_query,
'shared_buddylist_visibility');
for row in res do
for row in res do -- luacheck: ignore 512
return row[1]
end
module:log("error", "no 'shared_buddylist_visiblility' preference found!");
end
local buddylist_preference_id = lookup_buddy_id();
local buddylist_preference_id;
-- returns the attribute_id of 'display_name' preference
local function lookup_displayname_id()
reconect_check();
local res = engine:select(lookupt_preference_id_query,
'display_name');
for row in res do
for row in res do -- luacheck: ignore 512
return row[1]
end
module:log("error", "no 'display_name' preference found!");
end
local displayname_preference_id = lookup_displayname_id();
local displayname_preference_id;
-- "roster-load" callback
@ -151,7 +150,7 @@ local function inject_roster_contacts(username, host, roster)
local function lookup_account_id()
--module:log("debug", "lookup user '%s@%s'", username, host);
reconect_check();
for row in engine:select(account_id_query, username, host) do
for row in engine:select(account_id_query, username, host) do -- luacheck: ignore 512
module:log("debug", "user '%s@%s' belongs to %d",
username, host, row[1]);
return row[1];
@ -262,7 +261,26 @@ local function inject_roster_contacts(username, host, roster)
end
end
local function normalize_params(params)
assert(params.driver and params.database,
"Configuration error: Both the SQL driver and the database need to be specified");
return params;
end
function module.load()
if prosody.prosodyctl then return; end
local engines = module:shared("/*/sql/connections");
local params = normalize_params(module:get_option("auth_sql", default_params));
engine = engines[sql.db2uri(params)];
if not engine then
module:log("debug", "Creating new engine");
engine = sql:create_engine(params);
engines[sql.db2uri(params)] = engine;
end
engine:connect();
buddylist_preference_id = lookup_buddy_id();
displayname_preference_id = lookup_displayname_id();
module:hook("roster-load", inject_roster_contacts);
module:log("info", "Groups loaded successfully");
module:log("debug", "Groups loaded successfully");
end

@ -4,9 +4,9 @@
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
local mod_sql = module:require("sql");
local params = module:get_option("sql", {});
local engine = mod_sql:create_engine(params);
local sql = require "util.sql";
local default_params = { driver = "MySQL" };
local engine;
local sipwise_offline = module:shared("sipwise_offline");
@ -41,7 +41,6 @@ local function reconect_check()
if not engine.conn:ping() then
engine.conn = nil;
engine:connect();
engine:execute("SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';");
end
end
@ -150,7 +149,23 @@ local function broadcast_offline(event)
return true;
end
local function normalize_params(params)
assert(params.driver and params.database,
"Configuration error: Both the SQL driver and the database need to be specified");
return params;
end
function module.load()
if prosody.prosodyctl then return; end
local engines = module:shared("/*/sql/connections");
local params = normalize_params(module:get_option("sql", default_params));
engine = engines[sql.db2uri(params)];
if not engine then
module:log("debug", "Creating new engine");
engine = sql:create_engine(params);
engines[sql.db2uri(params)] = engine;
end
engine:connect();
module:hook("message/offline/handle", handle_offline, 1);
module:hook("message/offline/broadcast", broadcast_offline, 1);
end

@ -9,7 +9,7 @@ module:depends("sipwise_vcard_cusax");
module:depends("sipwise_pushd_blocking");
local datamanager = require "util.datamanager";
local mod_sql = module:require("sql");
local sql = require "util.sql";
local format = string.format;
local jid_split = require "util.jid".split;
local jid_bare = require "util.jid".bare;
@ -36,13 +36,6 @@ local pushd_config = {
msg_sound = 'incoming_message.caf',
muc_config = muc_config
};
local sql_config = {
driver = "MySQL",
database = "provisioning",
username = "prosody",
password = "PW_PROSODY",
host = "localhost"
};
local push_usr_query = [[
SELECT vp.attribute, vup.value FROM provisioning.voip_preferences vp
@ -73,8 +66,17 @@ WHERE vp.attribute = 'mobile_push_silent_list'
AND vup.value = ?;
]];
local default_params = module:get_option("sql");
local engine;
-- Reconnect to DB if necessary
local function reconect_check()
if not engine.conn:ping() then
engine.conn = nil;
engine:connect();
end
end
-- luacheck: ignore request
local function process_response(response, code, request)
if code >= 200 and code < 299 then
@ -87,11 +89,7 @@ local function process_response(response, code, request)
end
local function push_silent(username, domain, other)
-- Reconnect to DB if necessary
if not engine.conn:ping() then
engine.conn = nil;
engine:connect();
end
reconect_check();
for row in engine:select(push_silent_query, username, domain, other) do
if row[1] == "1" then
module:log("debug", "silent push preference mobile_push_silent_list matches");
@ -102,11 +100,7 @@ local function push_silent(username, domain, other)
end
local function push_enable(username, domain)
-- Reconnect to DB if necessary
if not engine.conn:ping() then
engine.conn = nil;
engine:connect();
end
reconect_check();
for row in engine:select(push_dom_query, domain) do
if row[2] == "1" then
module:log("debug", "domain mobile_push_enable pref set");
@ -561,13 +555,27 @@ end
module:hook("message/bare", handle_msg, 20);
module:hook("message/offline/handle", handle_offline, 20);
local function normalize_params(params)
assert(params.driver and params.database,
"Configuration error: Both the SQL driver and the database need to be specified");
return params;
end
function module.load()
if prosody.prosodyctl then return; end
local engines = module:shared("/*/sql/connections");
local params = normalize_params(module:get_option("auth_sql", default_params));
engine = engines[sql.db2uri(params)];
if not engine then
module:log("debug", "Creating new engine");
engine = sql:create_engine(params);
engines[sql.db2uri(params)] = engine;
end
engine:connect();
pushd_config = module:get_option("pushd_config", pushd_config);
if not pushd_config.muc_config then
pushd_config.muc_config = muc_config
end
sql_config = module:get_option("auth_sql", sql_config);
engine = mod_sql:create_engine(sql_config);
engine:execute("SET NAMES 'utf8' COLLATE 'utf8_bin';");
module:log("debug", "load OK");
end

@ -43,16 +43,9 @@ WHERE ps.username = ? AND pd.domain = ? ORDER BY pa.is_primary DESC;
]];
local um_user_exists = require "core.usermanager".user_exists;
local mod_sql = module:require("sql");
local params = module:get_option("auth_sql", {
driver = "MySQL",
database = "provisioning",
username = "prosody",
password = "PW_PROSODY",
host = "localhost"
});
local engine = mod_sql:create_engine(params);
engine:execute("SET NAMES 'utf8' COLLATE 'utf8_bin';");
local sql = require "util.sql";
local default_params = module:get_option("sql");
local engine;
module:add_feature("vcard-temp");
@ -60,7 +53,6 @@ local function reconect_check()
if not engine.conn:ping() then
engine.conn = nil;
engine:connect();
engine:execute("SET NAMES 'utf8' COLLATE 'utf8_bin';");
end
end
@ -181,3 +173,23 @@ end
module:hook("iq/bare/vcard-temp:vCard", handle_vcard);
module:hook("iq/host/vcard-temp:vCard", handle_vcard);
local function normalize_params(params)
assert(params.driver and params.database,
"Configuration error: Both the SQL driver and the database need to be specified");
return params;
end
function module.load()
if prosody.prosodyctl then return; end
local engines = module:shared("/*/sql/connections");
local params = normalize_params(module:get_option("auth_sql", default_params));
engine = engines[sql.db2uri(params)];
if not engine then
module:log("debug", "Creating new engine");
engine = sql:create_engine(params);
engines[sql.db2uri(params)] = engine;
end
engine:connect();
module:log("debug", "load OK");
end

@ -13,7 +13,7 @@ local configmanager = require "core.configmanager";
local ut = require "util.table";
local connection;
local params = module:get_option("auth_sql", module:get_option("auth_sql"));
local params = module:get_option("auth_sql", module:get_option("sql"));
local prosody = _G.prosody;
local function test_connection()

@ -7,7 +7,7 @@
module:depends("disco");
local ut_jid = require "util.jid";
local mod_sql = module:require("sql");
local sql = require "util.sql";
local st = require "util.stanza";
local template = require "util.template";
local rex = require "rex_pcre";
@ -97,7 +97,9 @@ SELECT vrr.match_pattern, vrr.replace_pattern FROM provisioning.voip_preferences
LEFT JOIN provisioning.voip_subscribers vs ON vs.id = vup.subscriber_id
LEFT JOIN provisioning.voip_domains vd ON vd.id = vs.domain_id
LEFT JOIN provisioning.voip_rewrite_rule_sets vrrs ON vrrs.callee_in_dpid = vup.value
LEFT JOIN provisioning.voip_rewrite_rules vrr ON vrr.set_id = vrrs.id AND vrr.direction = 'in' AND vrr.field = 'callee'
LEFT JOIN provisioning.voip_rewrite_rules vrr ON vrr.set_id = vrrs.id
AND vrr.direction = 'in'
AND vrr.field = 'callee'
WHERE vp.attribute = 'rewrite_callee_in_dpid' AND vs.username = ? AND vd.domain = ?
ORDER BY vrr.priority ASC;
]];
@ -107,7 +109,8 @@ SELECT vrr.match_pattern, vrr.replace_pattern FROM provisioning.voip_preferences
LEFT JOIN provisioning.voip_dom_preferences vdp ON vdp.attribute_id = vp.id
LEFT JOIN provisioning.voip_domains vd ON vd.id = vdp.domain_id
LEFT JOIN provisioning.voip_rewrite_rule_sets vrrs ON vrrs.callee_in_dpid = vdp.value
LEFT JOIN provisioning.voip_rewrite_rules vrr ON vrr.set_id = vrrs.id AND vrr.direction = 'in' AND vrr.field = 'callee'
LEFT JOIN provisioning.voip_rewrite_rules vrr ON vrr.set_id = vrrs.id
AND vrr.direction = 'in' AND vrr.field = 'callee'
WHERE vp.attribute = 'rewrite_callee_in_dpid' AND vd.domain = ?
ORDER BY vrr.priority ASC;
]];
@ -127,22 +130,14 @@ SELECT username,domain FROM kamailio.dbaliases
WHERE alias_username=?;
]];
local params = module:get_option("auth_sql", {
driver = "MySQL",
database = "provisioning",
username = "prosody",
password = "PW_PROSODY",
host = "localhost"
});
local engine = mod_sql:create_engine(params);
engine:execute("SET NAMES 'utf8' COLLATE 'utf8_bin';");
local default_params = module:get_option("sql");
local engine;
-- Reconnect to DB if necessary
local function reconect_check()
if not engine.conn:ping() then
engine.conn = nil;
engine:connect();
engine:execute("SET NAMES 'utf8' COLLATE 'utf8_bin';");
end
end
@ -316,3 +311,23 @@ module:hook("iq/host/jabber:iq:search:query", function(event)
return origin.send(reply);
end
end);
local function normalize_params(params)
assert(params.driver and params.database,
"Configuration error: Both the SQL driver and the database need to be specified");
return params;
end
function module.load()
if prosody.prosodyctl then return; end
local engines = module:shared("/*/sql/connections");
local params = normalize_params(module:get_option("auth_sql", default_params));
engine = engines[sql.db2uri(params)];
if not engine then
module:log("debug", "Creating new engine");
engine = sql:create_engine(params);
engines[sql.db2uri(params)] = engine;
end
engine:connect();
module:log("debug", "load OK");
end

Loading…
Cancel
Save