mod_conversejs/mod_conversejs.lua
author Kim Alvefur <zash@zash.se>
Mon, 10 Sep 2018 15:04:03 +0200
changeset 3316 e714be00aaad
parent 3314 908b2bc05d26
child 3317 d6b922191aeb
permissions -rw-r--r--
mod_conversejs: Factor JavaScript part out of HTML This will allow serving only the JS snippet in the future.
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
3316
e714be00aaad mod_conversejs: Factor JavaScript part out of HTML
Kim Alvefur <zash@zash.se>
parents: 3314
diff changeset
    12
local html_template = [[
2661
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">
3313
c34f9fd632a6 mod_conversejs: Pin to version 4.0.0
Kim Alvefur <zash@zash.se>
parents: 3309
diff changeset
    17
<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.conversejs.org/4.0.0/css/converse.min.css"/>
c34f9fd632a6 mod_conversejs: Pin to version 4.0.0
Kim Alvefur <zash@zash.se>
parents: 3309
diff changeset
    18
<script charset="utf-8" src="https://cdn.conversejs.org/4.0.0/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>
3043
df77580be2f0 mod_conversejs: Appologise for the JavaScript
Kim Alvefur <zash@zash.se>
parents: 3042
diff changeset
    20
<body>
df77580be2f0 mod_conversejs: Appologise for the JavaScript
Kim Alvefur <zash@zash.se>
parents: 3042
diff changeset
    21
<noscript>
df77580be2f0 mod_conversejs: Appologise for the JavaScript
Kim Alvefur <zash@zash.se>
parents: 3042
diff changeset
    22
<h1>Converse.js</h1>
df77580be2f0 mod_conversejs: Appologise for the JavaScript
Kim Alvefur <zash@zash.se>
parents: 3042
diff changeset
    23
<p>I&apos;m sorry, but this XMPP client application won&apos;t work without JavaScript.</p>
3044
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    24
<p>Perhaps you would like to try one of these clients:</p>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    25
<dl>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    26
<dt>Desktop</dt>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    27
<dd><ul>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    28
<li><a href="https://gajim.org/">Gajim</a></li>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    29
<li><a href="https://poez.io/">Poezio</a></li>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    30
<li><a href="https://swift.im/">Swift</a></li>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    31
</ul></dd>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    32
<dt>Mobile</dt>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    33
<dd><ul>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    34
<li><a href="https://github.com/siacs/Conversations">Conversations</a></li>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    35
<li><a href="https://yaxim.org/">Yaxim</a></li>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    36
</ul></dd>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    37
</dl>
81b75086a781 mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents: 3043
diff changeset
    38
<p><a href="https://xmpp.org/software/clients.html">More clients...</a></p>
3043
df77580be2f0 mod_conversejs: Appologise for the JavaScript
Kim Alvefur <zash@zash.se>
parents: 3042
diff changeset
    39
</noscript>
3316
e714be00aaad mod_conversejs: Factor JavaScript part out of HTML
Kim Alvefur <zash@zash.se>
parents: 3314
diff changeset
    40
<script>%s</script>
3043
df77580be2f0 mod_conversejs: Appologise for the JavaScript
Kim Alvefur <zash@zash.se>
parents: 3042
diff changeset
    41
</body>
3042
48cbf6a3f112 mod_conversejs: Make HTML more well-formed
Kim Alvefur <zash@zash.se>
parents: 3002
diff changeset
    42
</html>
2661
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
]]
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    44
3316
e714be00aaad mod_conversejs: Factor JavaScript part out of HTML
Kim Alvefur <zash@zash.se>
parents: 3314
diff changeset
    45
js_template = "converse.initialize(%s);";
e714be00aaad mod_conversejs: Factor JavaScript part out of HTML
Kim Alvefur <zash@zash.se>
parents: 3314
diff changeset
    46
2923
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    47
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
    48
2661
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    49
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
    50
	route = {
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    51
		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
    52
			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
    53
			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
    54
				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
    55
				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
    56
				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
    57
				jid = module.host;
2937
8858cef9ed27 mod_conversejs: Pass current domain as 'default_domain'
Kim Alvefur <zash@zash.se>
parents: 2925
diff changeset
    58
				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
    59
				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
    60
				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
    61
				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
    62
			};
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    63
3314
908b2bc05d26 mod_conversejs: Restore accidentally removed configuration option handling
Kim Alvefur <zash@zash.se>
parents: 3313
diff changeset
    64
			if type(more_options) == "table" then
908b2bc05d26 mod_conversejs: Restore accidentally removed configuration option handling
Kim Alvefur <zash@zash.se>
parents: 3313
diff changeset
    65
				for k,v in pairs(more_options) do
908b2bc05d26 mod_conversejs: Restore accidentally removed configuration option handling
Kim Alvefur <zash@zash.se>
parents: 3313
diff changeset
    66
					converse_options[k] = v;
908b2bc05d26 mod_conversejs: Restore accidentally removed configuration option handling
Kim Alvefur <zash@zash.se>
parents: 3313
diff changeset
    67
				end
908b2bc05d26 mod_conversejs: Restore accidentally removed configuration option handling
Kim Alvefur <zash@zash.se>
parents: 3313
diff changeset
    68
			end
908b2bc05d26 mod_conversejs: Restore accidentally removed configuration option handling
Kim Alvefur <zash@zash.se>
parents: 3313
diff changeset
    69
2923
0ea93da47db9 mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents: 2698
diff changeset
    70
			event.response.headers.content_type = "text/html";
3316
e714be00aaad mod_conversejs: Factor JavaScript part out of HTML
Kim Alvefur <zash@zash.se>
parents: 3314
diff changeset
    71
			return html_template:format(js_template:format(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
    72
		end;
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    73
	}
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    74
});
6f5c99c9f6cc mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    75