3 |
3 |
4 function verse.plugins.sasl(stream) |
4 function verse.plugins.sasl(stream) |
5 local function handle_features(features_stanza) |
5 local function handle_features(features_stanza) |
6 if stream.authenticated then return; end |
6 if stream.authenticated then return; end |
7 stream:debug("Authenticating with SASL..."); |
7 stream:debug("Authenticating with SASL..."); |
8 local initial_data = base64("\0"..stream.username.."\0"..stream.password); |
|
9 |
|
10 --stream.sasl_state, initial_data = sasl_new({"PLAIN"}, stream.username, stream.password, stream.jid); |
8 --stream.sasl_state, initial_data = sasl_new({"PLAIN"}, stream.username, stream.password, stream.jid); |
11 |
9 local mechanism , initial_data |
12 stream:debug("Selecting PLAIN mechanism..."); |
10 if stream.username then |
13 local auth_stanza = verse.stanza("auth", { xmlns = xmlns_sasl, mechanism = "PLAIN" }); |
11 mechanism = "PLAIN" |
|
12 initial_data = base64("\0"..stream.username.."\0"..stream.password); |
|
13 else |
|
14 mechanism = "ANONYMOUS" |
|
15 end |
|
16 stream:debug("Selecting %s mechanism...",mechanism); |
|
17 local auth_stanza = verse.stanza("auth", { xmlns = xmlns_sasl, mechanism = mechanism }); |
14 if initial_data then |
18 if initial_data then |
15 auth_stanza:text(initial_data); |
19 auth_stanza:text(initial_data); |
16 end |
20 end |
17 stream:send(auth_stanza); |
21 stream:send(auth_stanza); |
18 return true; |
22 return true; |