Mercurial > prosody-modules
annotate mod_conversejs/mod_conversejs.lua @ 3368:76fc915647ab
mod_bob: Don’t try to access XHTML-IM when it isn’t present.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sun, 04 Nov 2018 18:38:06 +0100 |
parents | 2681f74750b2 |
children | f59334da6df9 |
rev | line source |
---|---|
2657
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 |
3329
43d0e298ddda
mod_conversejs: Explicitly depend on mod_http
Kim Alvefur <zash@zash.se>
parents:
3324
diff
changeset
|
6 module:depends"http"; |
3363
2681f74750b2
mod_conversejs: Weaken dependency on mod_bosh
Kim Alvefur <zash@zash.se>
parents:
3348
diff
changeset
|
7 |
2681f74750b2
mod_conversejs: Weaken dependency on mod_bosh
Kim Alvefur <zash@zash.se>
parents:
3348
diff
changeset
|
8 local has_bosh = pcall(function () |
2681f74750b2
mod_conversejs: Weaken dependency on mod_bosh
Kim Alvefur <zash@zash.se>
parents:
3348
diff
changeset
|
9 module:depends"bosh"; |
2681f74750b2
mod_conversejs: Weaken dependency on mod_bosh
Kim Alvefur <zash@zash.se>
parents:
3348
diff
changeset
|
10 end); |
2657
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 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
|
13 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
|
14 end); |
6f5c99c9f6cc
mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 |
3331
d98341bca458
mod_conversejs: Allow overriding CDN URL, or script/css URLs independently
Matthew Wild <mwild1@gmail.com>
parents:
3329
diff
changeset
|
16 local cdn_url = module:get_option_string("conversejs_cdn", "https://cdn.conversejs.org"); |
d98341bca458
mod_conversejs: Allow overriding CDN URL, or script/css URLs independently
Matthew Wild <mwild1@gmail.com>
parents:
3329
diff
changeset
|
17 |
3348
f753cf4f7224
mod_conversejs: Default to latest version of Converse.js
Kim Alvefur <zash@zash.se>
parents:
3347
diff
changeset
|
18 local version = module:get_option_string("conversejs_version", ""); |
3347
823156d5885b
mod_conversejs: Strip extra slash if version is set to the empty string
Kim Alvefur <zash@zash.se>
parents:
3337
diff
changeset
|
19 if version ~= "" then version = "/" .. version end |
823156d5885b
mod_conversejs: Strip extra slash if version is set to the empty string
Kim Alvefur <zash@zash.se>
parents:
3337
diff
changeset
|
20 local js_url = module:get_option_string("conversejs_script", cdn_url..version.."/dist/converse.min.js"); |
823156d5885b
mod_conversejs: Strip extra slash if version is set to the empty string
Kim Alvefur <zash@zash.se>
parents:
3337
diff
changeset
|
21 local css_url = module:get_option_string("conversejs_css", cdn_url..version.."/css/converse.min.css"); |
3331
d98341bca458
mod_conversejs: Allow overriding CDN URL, or script/css URLs independently
Matthew Wild <mwild1@gmail.com>
parents:
3329
diff
changeset
|
22 |
d98341bca458
mod_conversejs: Allow overriding CDN URL, or script/css URLs independently
Matthew Wild <mwild1@gmail.com>
parents:
3329
diff
changeset
|
23 local html_template = ([[ |
2657
6f5c99c9f6cc
mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 <!DOCTYPE html> |
3038
48cbf6a3f112
mod_conversejs: Make HTML more well-formed
Kim Alvefur <zash@zash.se>
parents:
2998
diff
changeset
|
25 <html> |
48cbf6a3f112
mod_conversejs: Make HTML more well-formed
Kim Alvefur <zash@zash.se>
parents:
2998
diff
changeset
|
26 <head> |
2657
6f5c99c9f6cc
mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 <meta charset="utf-8"> |
3331
d98341bca458
mod_conversejs: Allow overriding CDN URL, or script/css URLs independently
Matthew Wild <mwild1@gmail.com>
parents:
3329
diff
changeset
|
28 <link rel="stylesheet" type="text/css" media="screen" href="$css_url"/> |
d98341bca458
mod_conversejs: Allow overriding CDN URL, or script/css URLs independently
Matthew Wild <mwild1@gmail.com>
parents:
3329
diff
changeset
|
29 <script charset="utf-8" src="$js_url"></script> |
3324
3114b403362d
mod_conversejs: Add a page title
Kim Alvefur <zash@zash.se>
parents:
3323
diff
changeset
|
30 <title>Prosody IM and Converse.js</title> |
3038
48cbf6a3f112
mod_conversejs: Make HTML more well-formed
Kim Alvefur <zash@zash.se>
parents:
2998
diff
changeset
|
31 </head> |
3039
df77580be2f0
mod_conversejs: Appologise for the JavaScript
Kim Alvefur <zash@zash.se>
parents:
3038
diff
changeset
|
32 <body> |
df77580be2f0
mod_conversejs: Appologise for the JavaScript
Kim Alvefur <zash@zash.se>
parents:
3038
diff
changeset
|
33 <noscript> |
df77580be2f0
mod_conversejs: Appologise for the JavaScript
Kim Alvefur <zash@zash.se>
parents:
3038
diff
changeset
|
34 <h1>Converse.js</h1> |
df77580be2f0
mod_conversejs: Appologise for the JavaScript
Kim Alvefur <zash@zash.se>
parents:
3038
diff
changeset
|
35 <p>I'm sorry, but this XMPP client application won't work without JavaScript.</p> |
3040
81b75086a781
mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents:
3039
diff
changeset
|
36 <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:
3039
diff
changeset
|
37 <dl> |
81b75086a781
mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents:
3039
diff
changeset
|
38 <dt>Desktop</dt> |
81b75086a781
mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents:
3039
diff
changeset
|
39 <dd><ul> |
81b75086a781
mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents:
3039
diff
changeset
|
40 <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:
3039
diff
changeset
|
41 <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:
3039
diff
changeset
|
42 <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:
3039
diff
changeset
|
43 </ul></dd> |
81b75086a781
mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents:
3039
diff
changeset
|
44 <dt>Mobile</dt> |
81b75086a781
mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents:
3039
diff
changeset
|
45 <dd><ul> |
81b75086a781
mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents:
3039
diff
changeset
|
46 <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:
3039
diff
changeset
|
47 <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:
3039
diff
changeset
|
48 </ul></dd> |
81b75086a781
mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents:
3039
diff
changeset
|
49 </dl> |
81b75086a781
mod_conversejs: Suggest some alternative cliets if JavaScript is disabled
Kim Alvefur <zash@zash.se>
parents:
3039
diff
changeset
|
50 <p><a href="https://xmpp.org/software/clients.html">More clients...</a></p> |
3039
df77580be2f0
mod_conversejs: Appologise for the JavaScript
Kim Alvefur <zash@zash.se>
parents:
3038
diff
changeset
|
51 </noscript> |
3312
e714be00aaad
mod_conversejs: Factor JavaScript part out of HTML
Kim Alvefur <zash@zash.se>
parents:
3310
diff
changeset
|
52 <script>%s</script> |
3039
df77580be2f0
mod_conversejs: Appologise for the JavaScript
Kim Alvefur <zash@zash.se>
parents:
3038
diff
changeset
|
53 </body> |
3038
48cbf6a3f112
mod_conversejs: Make HTML more well-formed
Kim Alvefur <zash@zash.se>
parents:
2998
diff
changeset
|
54 </html> |
3331
d98341bca458
mod_conversejs: Allow overriding CDN URL, or script/css URLs independently
Matthew Wild <mwild1@gmail.com>
parents:
3329
diff
changeset
|
55 ]]):gsub("$([%w_]+)", { js_url = js_url, css_url = css_url }); |
2657
6f5c99c9f6cc
mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 |
3312
e714be00aaad
mod_conversejs: Factor JavaScript part out of HTML
Kim Alvefur <zash@zash.se>
parents:
3310
diff
changeset
|
57 js_template = "converse.initialize(%s);"; |
e714be00aaad
mod_conversejs: Factor JavaScript part out of HTML
Kim Alvefur <zash@zash.se>
parents:
3310
diff
changeset
|
58 |
3332
4fdd8b77da54
mod_conversejs: Variable rename for clarity (user may override options)
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
59 local user_options = module:get_option("conversejs_options"); |
2919
0ea93da47db9
mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents:
2694
diff
changeset
|
60 |
3313
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
61 local function get_converse_options() |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
62 local allow_registration = module:get_option_boolean("allow_registration", false); |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
63 local converse_options = { |
3363
2681f74750b2
mod_conversejs: Weaken dependency on mod_bosh
Kim Alvefur <zash@zash.se>
parents:
3348
diff
changeset
|
64 bosh_service_url = has_bosh and module:http_url("bosh","/http-bind") or nil; |
3313
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
65 websocket_url = has_ws and module:http_url("websocket","xmpp-websocket"):gsub("^http", "ws") or nil; |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
66 authentication = module:get_option_string("authentication") == "anonymous" and "anonymous" or "login"; |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
67 jid = module.host; |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
68 default_domain = module.host; |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
69 domain_placeholder = module.host; |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
70 allow_registration = allow_registration; |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
71 registration_domain = allow_registration and module.host or nil; |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
72 }; |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
73 |
3332
4fdd8b77da54
mod_conversejs: Variable rename for clarity (user may override options)
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
74 if type(user_options) == "table" then |
4fdd8b77da54
mod_conversejs: Variable rename for clarity (user may override options)
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
75 for k,v in pairs(user_options) do |
3313
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
76 converse_options[k] = v; |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
77 end |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
78 end |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
79 |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
80 return converse_options; |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
81 end |
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
82 |
3333
5be90562e14b
mod_conversejs: Allow custom tags to be inserted into the generated HTML
Matthew Wild <mwild1@gmail.com>
parents:
3332
diff
changeset
|
83 local add_tags = module:get_option_set("conversejs_tags"); |
5be90562e14b
mod_conversejs: Allow custom tags to be inserted into the generated HTML
Matthew Wild <mwild1@gmail.com>
parents:
3332
diff
changeset
|
84 |
5be90562e14b
mod_conversejs: Allow custom tags to be inserted into the generated HTML
Matthew Wild <mwild1@gmail.com>
parents:
3332
diff
changeset
|
85 if add_tags then |
5be90562e14b
mod_conversejs: Allow custom tags to be inserted into the generated HTML
Matthew Wild <mwild1@gmail.com>
parents:
3332
diff
changeset
|
86 local tags = {}; |
5be90562e14b
mod_conversejs: Allow custom tags to be inserted into the generated HTML
Matthew Wild <mwild1@gmail.com>
parents:
3332
diff
changeset
|
87 for tag in add_tags do |
5be90562e14b
mod_conversejs: Allow custom tags to be inserted into the generated HTML
Matthew Wild <mwild1@gmail.com>
parents:
3332
diff
changeset
|
88 table.insert(tags, tag); |
5be90562e14b
mod_conversejs: Allow custom tags to be inserted into the generated HTML
Matthew Wild <mwild1@gmail.com>
parents:
3332
diff
changeset
|
89 end |
5be90562e14b
mod_conversejs: Allow custom tags to be inserted into the generated HTML
Matthew Wild <mwild1@gmail.com>
parents:
3332
diff
changeset
|
90 html_template = html_template:gsub("</head>", table.concat(tags, "\n"):gsub("%%", "%%").."\n</head>"); |
5be90562e14b
mod_conversejs: Allow custom tags to be inserted into the generated HTML
Matthew Wild <mwild1@gmail.com>
parents:
3332
diff
changeset
|
91 end |
5be90562e14b
mod_conversejs: Allow custom tags to be inserted into the generated HTML
Matthew Wild <mwild1@gmail.com>
parents:
3332
diff
changeset
|
92 |
2657
6f5c99c9f6cc
mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 module:provides("http", { |
3337
b46bb9392efe
mod_conversejs: Set a friendly name for mod_http_index
Kim Alvefur <zash@zash.se>
parents:
3333
diff
changeset
|
94 title = "Converse.js"; |
2657
6f5c99c9f6cc
mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 route = { |
6f5c99c9f6cc
mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 GET = function (event) |
3313
d6b922191aeb
mod_conversejs: Factor out option handling into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
3312
diff
changeset
|
97 local converse_options = get_converse_options(); |
3310
908b2bc05d26
mod_conversejs: Restore accidentally removed configuration option handling
Kim Alvefur <zash@zash.se>
parents:
3309
diff
changeset
|
98 |
2919
0ea93da47db9
mod_conversejs: Allow passing arbitrary options trough to Converse.js
Kim Alvefur <zash@zash.se>
parents:
2694
diff
changeset
|
99 event.response.headers.content_type = "text/html"; |
3312
e714be00aaad
mod_conversejs: Factor JavaScript part out of HTML
Kim Alvefur <zash@zash.se>
parents:
3310
diff
changeset
|
100 return html_template:format(js_template:format(json_encode(converse_options))); |
2657
6f5c99c9f6cc
mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 end; |
3314
ab67f222d88b
mod_conversejs: Add an endpoint returning only initialization snippet
Kim Alvefur <zash@zash.se>
parents:
3313
diff
changeset
|
102 |
ab67f222d88b
mod_conversejs: Add an endpoint returning only initialization snippet
Kim Alvefur <zash@zash.se>
parents:
3313
diff
changeset
|
103 ["GET /prosody-converse.js"] = function (event) |
ab67f222d88b
mod_conversejs: Add an endpoint returning only initialization snippet
Kim Alvefur <zash@zash.se>
parents:
3313
diff
changeset
|
104 local converse_options = get_converse_options(); |
ab67f222d88b
mod_conversejs: Add an endpoint returning only initialization snippet
Kim Alvefur <zash@zash.se>
parents:
3313
diff
changeset
|
105 |
ab67f222d88b
mod_conversejs: Add an endpoint returning only initialization snippet
Kim Alvefur <zash@zash.se>
parents:
3313
diff
changeset
|
106 event.response.headers.content_type = "application/javascript"; |
ab67f222d88b
mod_conversejs: Add an endpoint returning only initialization snippet
Kim Alvefur <zash@zash.se>
parents:
3313
diff
changeset
|
107 return js_template:format(json_encode(converse_options)); |
ab67f222d88b
mod_conversejs: Add an endpoint returning only initialization snippet
Kim Alvefur <zash@zash.se>
parents:
3313
diff
changeset
|
108 end; |
2657
6f5c99c9f6cc
mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
109 } |
6f5c99c9f6cc
mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
110 }); |
6f5c99c9f6cc
mod_conversejs: Simple demo module for serving converse.js from internal http server
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
111 |