Newline at end of file for sessionmanager
[prosody.git] / plugins / mod_saslauth.lua
index d0ba85422cdb533cea6e7ccf36015b7d759f67a2..bea1012ab533ad9b8a44437669536df60c58ce5b 100644 (file)
@@ -24,8 +24,6 @@ local sm_bind_resource = require "core.sessionmanager".bind_resource;
 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;
@@ -43,11 +41,13 @@ local new_sasl = require "util.sasl".new;
 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);
@@ -66,13 +66,14 @@ local function handle_status(session, 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
@@ -89,6 +90,7 @@ function sasl_handler(session, stanza)
        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"));
@@ -144,8 +146,6 @@ module:add_iq_handler("c2s", "urn:ietf:params:xml:ns:xmpp-bind",
                                        :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",