File

util/sasl/oauthbearer.lua @ 479:2bb12fb6fcbd

squishy: Updates for Prosody trunk (@ e77c607e8da8)
author Matthew Wild <mwild1@gmail.com>
date Fri, 17 Mar 2023 12:30:25 +0000
parent 477:b0a8d4e9934e
child 496:c4ae7aa2958a
line wrap: on
line source


return function (stream, name)
	if name == "OAUTHBEARER" and stream.username then
		return function (stream)
			local auth = stream.bearer_token and ("Bearer "..stream.bearer_token) or "";
			local message, data = coroutine.yield("n,a="..stream.username.."@"..stream.host..",\001auth="..auth.."\001");
			if message == "success" then
				return true;
			elseif message == "challenge" then
				stream:event("oauth-failure", {
					json = data;
				});
				-- Note: No code after the yield should generally execute, as "failure"
				-- doesn't get passed through to us (it contains no data anyway)
				if coroutine.yield("\001") ~= "failure" then
					error("Unexpected SASL state: expected failure after challenge");
				end
				return false;
			end
		end, stream.bearer_token and 6 or 4; -- Prefer OAUTHBEARER if we have a token, otherwise prefer password if we have one
	end
end