Diff

misc/sasl/example.lua @ 2354:7d2fcc7a15f7

Example SASL mechanism implementation
author Kim Alvefur <zash@zash.se>
date Tue, 08 Nov 2016 00:15:02 +0100
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/sasl/example.lua	Tue Nov 08 00:15:02 2016 +0100
@@ -0,0 +1,47 @@
+local method = {}
+local method_mt = { __index = method }
+
+-- This should return a set of supported mechanisms
+function method:mechanisms()
+	return {
+		["OAUTH-SOMETHING"] = true;
+	}
+end
+
+-- Called when a mechanism is selecetd
+function method:select(mechanism)
+	return mechanism == "OAUTH-SOMETHING";
+end
+
+-- Called for each message received
+function method:process(message)
+	-- parse the message
+	if false then
+		-- To send a SASL challenge:
+		return "challenge", "respond-to-this";
+	end
+
+	if false then
+		-- To fail, send:
+		return "failure", "not-authorized", "Helpful error message here";
+	end
+
+	self.username = "someone";
+	return "success";
+end
+
+local function new_sasl()
+	return setmetatable({}, method_mt);
+end
+
+function method:clean_clone()
+	return setmetatable({}, method_mt);
+end
+
+local provider = {}
+
+function provider.get_sasl_handler()
+	return new_sasl();
+end
+
+module:provides("auth", provider);