Software /
code /
verse
File
plugins/sasl.lua @ 230:44a6da432e7e
doc/example_pubsub.lua: Example plugins.pubsub usage
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 06 Nov 2011 21:09:07 +0100 |
parent | 197:7e98cf2c1d8d |
child | 302:0c83cb476246 |
line wrap: on
line source
local base64 = require "mime".b64; local xmlns_sasl = "urn:ietf:params:xml:ns:xmpp-sasl"; function verse.plugins.sasl(stream) local function handle_features(features_stanza) if stream.authenticated then return; end stream:debug("Authenticating with SASL..."); local initial_data = base64("\0"..stream.username.."\0"..stream.password); --stream.sasl_state, initial_data = sasl_new({"PLAIN"}, stream.username, stream.password, stream.jid); stream:debug("Selecting PLAIN mechanism..."); local auth_stanza = verse.stanza("auth", { xmlns = xmlns_sasl, mechanism = "PLAIN" }); if initial_data then auth_stanza:text(initial_data); end stream:send(auth_stanza); return true; end local function handle_sasl(sasl_stanza) if sasl_stanza.name == "success" then stream.authenticated = true; stream:event("authentication-success"); elseif sasl_stanza.name == "failure" then local err = sasl_stanza.tags[1]; stream:event("authentication-failure", { condition = err.name }); end stream:reopen(); return true; end stream:hook("stream-features", handle_features, 300); stream:hook("stream/"..xmlns_sasl, handle_sasl); return true; end