Mercurial > prosody-modules
annotate mod_http_index/mod_http_index.lua @ 3336:4af114684e0a
mod_http_index: Allow listed modules to include a friendlier name
Example:
```
module:provides("http", {
name = "demo";
title = "Demo HTTP Module";
route = {
GET = function() return "Hello"; end;
};
});
```
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 27 Sep 2018 17:13:10 +0200 |
parents | 7953b7dde6e7 |
children | f169d9a513c6 |
rev | line source |
---|---|
1573
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 local url = require"socket.url"; |
1825
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
2 local render = require"util.interpolation".new("%b{}", require"util.stanza".xml_escape); |
1573
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 module:depends"http"; |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 |
1827
9376e870f0e1
mod_http_index: Move template out into a file and make it configurable
Kim Alvefur <zash@zash.se>
parents:
1826
diff
changeset
|
6 local base_template; |
9376e870f0e1
mod_http_index: Move template out into a file and make it configurable
Kim Alvefur <zash@zash.se>
parents:
1826
diff
changeset
|
7 do |
9376e870f0e1
mod_http_index: Move template out into a file and make it configurable
Kim Alvefur <zash@zash.se>
parents:
1826
diff
changeset
|
8 local template_file = module:get_option_string(module.name .. "_template", module.name .. ".html"); |
9376e870f0e1
mod_http_index: Move template out into a file and make it configurable
Kim Alvefur <zash@zash.se>
parents:
1826
diff
changeset
|
9 template_file = assert(module:load_resource(template_file)); |
9376e870f0e1
mod_http_index: Move template out into a file and make it configurable
Kim Alvefur <zash@zash.se>
parents:
1826
diff
changeset
|
10 base_template = template_file:read("*a"); |
9376e870f0e1
mod_http_index: Move template out into a file and make it configurable
Kim Alvefur <zash@zash.se>
parents:
1826
diff
changeset
|
11 template_file:close(); |
9376e870f0e1
mod_http_index: Move template out into a file and make it configurable
Kim Alvefur <zash@zash.se>
parents:
1826
diff
changeset
|
12 end |
1573
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 local canonical = module:http_url(nil, "/"); |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 local function relative(base, link) |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 base = url.parse(base); |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 link = url.parse(link); |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 for k,v in pairs(base) do |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 if link[k] == v then |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 link[k] = nil; |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 end |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 end |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 return url.build(link); |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 end |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 local function handler(event) |
1825
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
28 local host_items = module:get_host_items("http-provider"); |
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
29 local http_apps = {} |
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
30 for _, item in ipairs(host_items) do |
1573
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 if module.name ~= item._provided_by then |
1825
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
32 table.insert(http_apps, { |
3336
4af114684e0a
mod_http_index: Allow listed modules to include a friendlier name
Kim Alvefur <zash@zash.se>
parents:
2927
diff
changeset
|
33 title = item.title or item.name; |
1573
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 name = item.name; |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 module = "mod_" .. item._provided_by; |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 url = relative(canonical, module:http_url(item.name, item.default_path)); |
1825
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
37 }); |
1573
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 end |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 end |
2927
7953b7dde6e7
mod_http_index: Sort list of HTTP applications by name
Kim Alvefur <zash@zash.se>
parents:
1827
diff
changeset
|
40 table.sort(http_apps, function (a, b) return a.name < b.name; end); |
1573
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 event.response.headers.content_type = "text/html"; |
1825
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
42 return render(base_template, { |
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
43 title = "HTTP Apps"; |
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
44 items = http_apps; |
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
45 prosody_version = prosody.version; |
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
46 mod_name = module.name; |
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
47 canonical = canonical; |
1b5c817cb642
mod_http_index: Update to use util.interpolation (makes it depend on 0.10+)
Kim Alvefur <zash@zash.se>
parents:
1573
diff
changeset
|
48 }); |
1573
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 end |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 module:provides("http", { |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 route = { |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 ["GET /"] = handler; |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 }; |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 default_path = "/"; |
0d8cc6971cdb
mod_http_index: Generates an index of local HTTP apps
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 }); |