File

mod_conversejs/mod_conversejs.lua @ 2919:0ea93da47db9

mod_conversejs: Allow passing arbitrary options trough to Converse.js
author Kim Alvefur <zash@zash.se>
date Sat, 10 Mar 2018 00:05:30 +0100
parent 2694:38c66b58b470
child 2921:3264058ae54f
line wrap: on
line source

-- mod_conversejs
-- Copyright (C) 2017 Kim Alvefur

local json_encode = require"util.json".encode;

module:depends"bosh";

local has_ws = pcall(function ()
	module:depends("websocket");
end);

local template = [[
<!DOCTYPE html>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.conversejs.org/css/converse.min.css">
<script src="https://cdn.conversejs.org/dist/converse.min.js"></script>
<body><script>converse.initialize(%s);</script>
]]

local more_options = module:get_option("conversejs_options");

module:provides("http", {
	route = {
		GET = function (event)
			local converse_options = {
				bosh_service_url = module:http_url("bosh","/http-bind");
				websocket_url = has_ws and module:http_url("websocket","xmpp-websocket"):gsub("^http", "ws") or nil;
				authentication = module:get_option_string("authentication") == "anonymous" and "anonymous" or "login";
				jid = module.host;
			};

			if type(more_options) == "table" then
				for k,v in pairs(more_options) do
					converse_options[k] = v;
				end
			end

			event.response.headers.content_type = "text/html";
			return template:format(json_encode(converse_options));
		end;
	}
});