verse.plugins.tls: Support for TLS encryption! (thanks Azelphur for the final push)

Tue, 11 May 2010 22:41:09 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Tue, 11 May 2010 22:41:09 +0100
changeset 61
6adddfdf974b
parent 60
1f47ddab3499
child 62
d4b6f9e33c6e

verse.plugins.tls: Support for TLS encryption! (thanks Azelphur for the final push)

plugins/tls.lua file | annotate | diff | comparison | revisions
squishy file | annotate | diff | comparison | revisions
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/tls.lua	Tue May 11 22:41:09 2010 +0100
@@ -0,0 +1,30 @@
+local st = require "util.stanza";
+local xmlns_tls = "urn:ietf:params:xml:ns:xmpp-tls";
+
+function verse.plugins.tls(stream)
+	local function handle_features(features_stanza)
+		if stream.authenticated then return; end
+		if features_stanza:get_child("starttls", xmlns_tls) then
+			stream:debug("Negotiating TLS...");
+			stream:send(st.stanza("starttls", { xmlns = xmlns_tls }));
+			return true;
+		else
+			stream:debug("Server doesn't offer TLS :(");
+		end
+	end
+	local function handle_tls(tls_status)
+		if tls_status.name == "proceed" then
+			stream:debug("Server says proceed, handshake starting...");
+			stream.conn:starttls({mode="client", protocol="sslv23", options="no_sslv2"}, true);
+		end
+	end
+	local function handle_status(new_status)
+		if new_status == "ssl-handshake-complete" then
+			stream:debug("Re-opening stream...");
+			stream:reopen();
+		end
+	end
+	stream:hook("stream-features", handle_features, 400);
+	stream:hook("stream/"..xmlns_tls, handle_tls);
+	stream:hook("status", handle_status, 400);
+end
--- a/squishy	Tue May 11 22:40:13 2010 +0100
+++ b/squishy	Tue May 11 22:41:09 2010 +0100
@@ -19,6 +19,7 @@
 Module "util.sha1"		"util/sha1.lua"
 
 -- Verse plugins
+Module "verse.plugins.tls"      "plugins/tls.lua"
 Module "verse.plugins.sasl"	"plugins/sasl.lua"
 Module "verse.plugins.bind"	"plugins/bind.lua"
 Module "verse.plugins.version"	"plugins/version.lua"

mercurial