Diff

plugins/mod_tls.lua @ 2605:ade70495fe7f

mod_tls: Cleanup.
author Waqas Hussain <waqas20@gmail.com>
date Fri, 12 Feb 2010 03:46:48 +0500
parent 2604:ed32f7bad620
child 2607:35a5d1c5ea28
line wrap: on
line diff
--- a/plugins/mod_tls.lua	Fri Feb 12 03:14:53 2010 +0500
+++ b/plugins/mod_tls.lua	Fri Feb 12 03:46:48 2010 +0500
@@ -8,18 +8,25 @@
 
 local st = require "util.stanza";
 
-local xmlns_stream = 'http://etherx.jabber.org/streams';
-local xmlns_starttls = 'urn:ietf:params:xml:ns:xmpp-tls';
-
 local secure_auth_only = module:get_option("c2s_require_encryption") or module:get_option("require_encryption");
 local secure_s2s_only = module:get_option("s2s_require_encryption");
 
+local xmlns_starttls = 'urn:ietf:params:xml:ns:xmpp-tls';
+local starttls_attr = { xmlns = xmlns_starttls };
+local starttls_proceed = st.stanza("proceed", starttls_attr);
+local starttls_failure = st.stanza("failure", starttls_attr);
+local c2s_feature = st.stanza("starttls", starttls_attr);
+local s2s_feature = st.stanza("starttls", starttls_attr);
+if secure_auth_only then c2s_feature:tag("required"):up(); end
+if secure_s2s_only then s2s_feature:tag("required"):up(); end
+
 local global_ssl_ctx = prosody.global_ssl_ctx;
 
+-- Hook <starttls/>
 module:hook("stanza/urn:ietf:params:xml:ns:xmpp-tls:starttls", function(event)
 	local origin = event.origin;
 	if origin.conn.starttls then
-		(origin.sends2s or origin.send)(st.stanza("proceed", { xmlns = xmlns_starttls }));
+		(origin.sends2s or origin.send)(starttls_proceed);
 		origin:reset_stream();
 		local host = origin.to_host or origin.host;
 		local ssl_ctx = host and hosts[host].ssl_ctx_in or global_ssl_ctx;
@@ -28,56 +35,39 @@
 		origin.secure = false;
 	else
 		origin.log("warn", "Attempt to start TLS, but TLS is not available on this %s connection", origin.type);
-		(origin.sends2s or origin.send)(st.stanza("failure", { xmlns = xmlns_starttls }));
+		(origin.sends2s or origin.send)(starttls_failure);
 		origin:close();
 	end
 	return true;
 end);
 
-
-local starttls_attr = { xmlns = xmlns_starttls };
-module:add_event_hook("stream-features", 
-		function (session, features)
-			if not session.username and session.conn.starttls then
-				features:tag("starttls", starttls_attr);
-				if secure_auth_only then
-					features:tag("required"):up():up();
-				else
-					features:up();
-				end
-			end
-		end);
-
-module:hook("s2s-stream-features", 
-		function (data)
-			local session, features = data.session, data.features;
-			if session.to_host and session.type ~= "s2sin" and session.conn.starttls then
-				features:tag("starttls", starttls_attr)
-				if secure_s2s_only then
-					features:tag("required"):up():up();
-				else
-					features:up();
-				end
-			end
-		end);
+-- Advertize stream feature
+module:add_event_hook("stream-features", function(session, features)
+	if not session.username and session.conn.starttls then
+		features:add_child(c2s_feature);
+	end
+end);
+module:hook("s2s-stream-features", function(event)
+	local session, features = event.session, event.features;
+	if session.to_host and session.type ~= "s2sin" and session.conn.starttls then
+		features:add_child(s2s_feature);
+	end
+end);
 
 -- For s2sout connections, start TLS if we can
-module:hook_stanza(xmlns_stream, "features",
-		function (session, stanza)
-			module:log("debug", "Received features element");
-			if session.conn.starttls and stanza:child_with_ns(xmlns_starttls) then
-				module:log("%s is offering TLS, taking up the offer...", session.to_host);
-				session.sends2s("<starttls xmlns='"..xmlns_starttls.."'/>");
-				return true;
-			end
-		end, 500);
-
-module:hook_stanza(xmlns_starttls, "proceed",
-		function (session, stanza)
-			module:log("debug", "Proceeding with TLS on s2sout...");
-			session:reset_stream();
-			local ssl_ctx = session.from_host and hosts[session.from_host].ssl_ctx or global_ssl_ctx;
-			session.conn:starttls(ssl_ctx, true);
-			session.secure = false;
-			return true;
-		end);
+module:hook_stanza("http://etherx.jabber.org/streams", "features", function (session, stanza)
+	module:log("debug", "Received features element");
+	if session.conn.starttls and stanza:child_with_ns(xmlns_starttls) then
+		module:log("%s is offering TLS, taking up the offer...", session.to_host);
+		session.sends2s("<starttls xmlns='"..xmlns_starttls.."'/>");
+		return true;
+	end
+end, 500);
+module:hook_stanza(xmlns_starttls, "proceed", function (session, stanza)
+	module:log("debug", "Proceeding with TLS on s2sout...");
+	session:reset_stream();
+	local ssl_ctx = session.from_host and hosts[session.from_host].ssl_ctx or global_ssl_ctx;
+	session.conn:starttls(ssl_ctx, true);
+	session.secure = false;
+	return true;
+end);