local jid
local base64 = require "util.encodings".base64;
-local gettime = require "socket".gettime;
-
local usermanager_validate_credentials = require "core.usermanager".validate_credentials;
local t_concat, t_insert = table.concat, table.insert;
local tostring = tostring;
local function build_reply(status, ret, err_msg)
local reply = st.stanza(status, {xmlns = xmlns_sasl});
if status == "challenge" then
+ log("challenge", ret or "");
reply:text(base64.encode(ret or ""));
elseif status == "failure" then
reply:tag(ret):up();
if err_msg then reply:tag("text"):text(err_msg); end
elseif status == "success" then
+ log("success", ret or "");
reply:text(base64.encode(ret or ""));
else
error("Unknown sasl status: "..status);
end
end
-local function password_callback(node, host, mechanism)
+local function password_callback(node, host, mechanism, decoder)
local password = (datamanager.load(node, host, "accounts") or {}).password; -- FIXME handle hashed passwords
local func = function(x) return x; end;
if password then
if mechanism == "PLAIN" then
return func, password;
elseif mechanism == "DIGEST-MD5" then
+ if decoder then node, host, password = decoder(node), decoder(host), decoder(password); end
return func, md5(node..":"..host..":"..password);
end
end
local text = stanza[1];
if text then
text = base64.decode(text);
+ log("recieved", text);
if not text then
session.sasl_handler = nil;
session.send(build_reply("failure", "incorrect-encoding"));
:tag("bind", { xmlns = xmlns_bind})
:tag("jid"):text(session.full_jid));
end
-
- session.log("******", "Connection took "..tostring(session.conntimetotal).." seconds");
end);
module:add_iq_handler("c2s", "urn:ietf:params:xml:ns:xmpp-session",