mod_conversejs/mod_conversejs.lua
author Kim Alvefur <zash@zash.se>
Sat, 07 Apr 2018 14:32:50 +0200
changeset 3042 48cbf6a3f112
parent 3002 719b76ee0578
child 3043 df77580be2f0
permissions -rw-r--r--
mod_conversejs: Make HTML more well-formed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2661
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
-- mod_conversejs
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
-- Copyright (C) 2017 Kim Alvefur
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
local json_encode = require"util.json".encode;
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
module:depends"bosh";
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
local has_ws = pcall(function ()
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
	module:depends("websocket");
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
end);
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
local template = [[
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
<!DOCTYPE html>
3042
48cbf6a3f112 mod_conversejs: Make HTML more well-formed
Kim Alvefur <zash@zash.se>
parents: 3002
diff changeset
    14
<html>
48cbf6a3f112 mod_conversejs: Make HTML more well-formed
Kim Alvefur <zash@zash.se>
parents: 3002
diff changeset
    15
<head>
2661
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
<meta charset="utf-8">
2925
3264058ae54f mod_conversejs: Hack in support for changing the CSS if InVerse mode is enabled
Kim Alvefur <zash@zash.se>
parents: 2923
diff changeset
    17
<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.conversejs.org/css/%s.min.css">
2984
ba6466fa6823 mod_conversejs: Specify a charset on script tag to prevent Browser from guessing
Kim Alvefur <zash@zash.se>
parents: 2938
diff changeset
    18
<script charset="utf-8" src="https://cdn.conversejs.org/dist/converse.min.js"></script>
3042
48cbf6a3f112 mod_conversejs: Make HTML more well-formed
Kim Alvefur <zash@zash.se>
parents: 3002
diff changeset
    19
</head>
48cbf6a3f112 mod_conversejs: Make HTML more well-formed
Kim Alvefur <zash@zash.se>
parents: 3002
diff changeset
    20
<body><script>converse.initialize(%s);</script></body>
48cbf6a3f112 mod_conversejs: Make HTML more well-formed
Kim Alvefur <zash@zash.se>
parents: 3002
diff changeset
    21
</html>
2661
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
]]
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
2923
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    24
local more_options = module:get_option("conversejs_options");
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    25
2661
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
module:provides("http", {
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
	route = {
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
		GET = function (event)
3002
719b76ee0578 mod_conversejs: Offer the current domain if registration is enabled to skip the server selection and improve UX
Kim Alvefur <zash@zash.se>
parents: 2984
diff changeset
    29
			local allow_registration = module:get_option_boolean("allow_registration", false);
2923
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    30
			local converse_options = {
2661
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
				bosh_service_url = module:http_url("bosh","/http-bind");
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
				websocket_url = has_ws and module:http_url("websocket","xmpp-websocket"):gsub("^http", "ws") or nil;
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
				authentication = module:get_option_string("authentication") == "anonymous" and "anonymous" or "login";
2698
38c66b58b470 mod_conversejs: Pass host jid (needed for anonymous auth)
Kim Alvefur <zash@zash.se>
parents: 2668
diff changeset
    34
				jid = module.host;
2937
8858cef9ed27 mod_conversejs: Pass current domain as 'default_domain'
Kim Alvefur <zash@zash.se>
parents: 2925
diff changeset
    35
				default_domain = module.host;
2938
5c60df8b1a07 mod_conversejs: Pass information about if and how of account registration
Kim Alvefur <zash@zash.se>
parents: 2937
diff changeset
    36
				domain_placeholder = module.host;
3002
719b76ee0578 mod_conversejs: Offer the current domain if registration is enabled to skip the server selection and improve UX
Kim Alvefur <zash@zash.se>
parents: 2984
diff changeset
    37
				allow_registration = allow_registration;
719b76ee0578 mod_conversejs: Offer the current domain if registration is enabled to skip the server selection and improve UX
Kim Alvefur <zash@zash.se>
parents: 2984
diff changeset
    38
				registration_domain = allow_registration and module.host or nil;
2923
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    39
			};
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    40
2925
3264058ae54f mod_conversejs: Hack in support for changing the CSS if InVerse mode is enabled
Kim Alvefur <zash@zash.se>
parents: 2923
diff changeset
    41
			local view_mode_css = "converse";
2923
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    42
			if type(more_options) == "table" then
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    43
				for k,v in pairs(more_options) do
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    44
					converse_options[k] = v;
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    45
				end
2925
3264058ae54f mod_conversejs: Hack in support for changing the CSS if InVerse mode is enabled
Kim Alvefur <zash@zash.se>
parents: 2923
diff changeset
    46
				if more_options.view_mode == "fullscreen" then
3264058ae54f mod_conversejs: Hack in support for changing the CSS if InVerse mode is enabled
Kim Alvefur <zash@zash.se>
parents: 2923
diff changeset
    47
					view_mode_css = "inverse";
3264058ae54f mod_conversejs: Hack in support for changing the CSS if InVerse mode is enabled
Kim Alvefur <zash@zash.se>
parents: 2923
diff changeset
    48
				end
2923
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    49
			end
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    50
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    51
			event.response.headers.content_type = "text/html";
2925
3264058ae54f mod_conversejs: Hack in support for changing the CSS if InVerse mode is enabled
Kim Alvefur <zash@zash.se>
parents: 2923
diff changeset
    52
			return template:format(view_mode_css, json_encode(converse_options));
2661
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    53
		end;
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    54
	}
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    55
});
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    56