Software / code / prosody
Comparison
plugins/mod_saslauth.lua @ 278:770a78cd38d7
Forward response stanzas to sasl.lua and some other stuff.
| author | Tobias Markmann <tm@ayena.de> |
|---|---|
| date | Mon, 10 Nov 2008 16:28:15 +0100 |
| parent | 120:ef964468f174 |
| child | 282:80e7de32b618 |
comparison
equal
deleted
inserted
replaced
| 277:00c2fc751f50 | 278:770a78cd38d7 |
|---|---|
| 13 local xmlns_bind ='urn:ietf:params:xml:ns:xmpp-bind'; | 13 local xmlns_bind ='urn:ietf:params:xml:ns:xmpp-bind'; |
| 14 local xmlns_stanzas ='urn:ietf:params:xml:ns:xmpp-stanzas'; | 14 local xmlns_stanzas ='urn:ietf:params:xml:ns:xmpp-stanzas'; |
| 15 | 15 |
| 16 local new_sasl = require "util.sasl".new; | 16 local new_sasl = require "util.sasl".new; |
| 17 | 17 |
| 18 add_handler("c2s_unauthed", "auth", xmlns_sasl, | 18 add_handler("c2s_unauthed", "auth", xmlns_sasl, function (session, stanza) |
| 19 function (session, stanza) | 19 if not session.sasl_handler then |
| 20 if not session.sasl_handler then | 20 session.sasl_handler = new_sasl(stanza.attr.mechanism, |
| 21 session.sasl_handler = new_sasl(stanza.attr.mechanism, | 21 function (username, password) |
| 22 function (username, password) | 22 -- onAuth |
| 23 -- onAuth | 23 require "core.usermanager" |
| 24 require "core.usermanager" | 24 if usermanager_validate_credentials(session.host, username, password) then |
| 25 if usermanager_validate_credentials(session.host, username, password) then | 25 return true; |
| 26 return true; | 26 end |
| 27 end | 27 return false; |
| 28 return false; | 28 end, |
| 29 end, | 29 function (username) |
| 30 function (username) | 30 -- onSuccess |
| 31 -- onSuccess | 31 local success, err = sessionmanager.make_authenticated(session, username); |
| 32 local success, err = sessionmanager.make_authenticated(session, username); | 32 if not success then |
| 33 if not success then | 33 sessionmanager.destroy_session(session); |
| 34 sessionmanager.destroy_session(session); | 34 return; |
| 35 return; | 35 end |
| 36 end | 36 session.sasl_handler = nil; |
| 37 session.sasl_handler = nil; | 37 session:reset_stream(); |
| 38 session:reset_stream(); | 38 end, |
| 39 end, | 39 function (reason) |
| 40 function (reason) | 40 -- onFail |
| 41 -- onFail | 41 log("debug", "SASL failure, reason: %s", reason); |
| 42 log("debug", "SASL failure, reason: %s", reason); | 42 end, |
| 43 end, | 43 function (stanza) |
| 44 function (stanza) | 44 -- onWrite |
| 45 -- onWrite | 45 log("debug", "SASL writes: %s", tostring(stanza)); |
| 46 log("debug", "SASL writes: %s", tostring(stanza)); | 46 send(session, stanza); |
| 47 send(session, stanza); | |
| 48 end | |
| 49 ); | |
| 50 session.sasl_handler:feed(stanza); | |
| 51 else | |
| 52 error("Client tried to negotiate SASL again", 0); | |
| 53 end | 47 end |
| 54 | 48 ); |
| 55 end); | 49 session.sasl_handler:feed(stanza); |
| 50 else | |
| 51 error("Client tried to negotiate SASL again", 0); | |
| 52 end | |
| 53 end); | |
| 54 | |
| 55 add_handler("c2s_unauthed", "response", xmlns_sasl, function (session, stanza) | |
| 56 if session.sasl_handler then | |
| 57 session.sasl_handler:feed(stanza); | |
| 58 end | |
| 59 end); | |
| 56 | 60 |
| 57 add_event_hook("stream-features", | 61 add_event_hook("stream-features", |
| 58 function (session, features) | 62 function (session, features) |
| 59 if not session.username then | 63 if not session.username then |
| 60 t_insert(features, "<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>"); | 64 t_insert(features, "<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>"); |
| 61 t_insert(features, "<mechanism>PLAIN</mechanism>"); | 65 t_insert(features, "<mechanism>PLAIN</mechanism>"); |
| 66 t_insert(features, "<mechanism>DIGEST-MD5</mechanism>"); | |
| 62 t_insert(features, "</mechanisms>"); | 67 t_insert(features, "</mechanisms>"); |
| 63 else | 68 else |
| 64 t_insert(features, "<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><required/></bind>"); | 69 t_insert(features, "<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><required/></bind>"); |
| 65 t_insert(features, "<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>"); | 70 t_insert(features, "<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>"); |
| 66 end | 71 end |