# HG changeset patch # User Kim Alvefur # Date 1478560502 -3600 # Node ID 7d2fcc7a15f75dd15a51f1ad670d627169957ec1 # Parent ea97a87c3828dbed4e8a9aebed51b5d4aeceeca9 Example SASL mechanism implementation diff -r ea97a87c3828 -r 7d2fcc7a15f7 misc/sasl/example.lua --- /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);