Mercurial > prosody-modules
annotate mod_http_muc_log/mod_http_muc_log.lua @ 5298:12f7d8b901e0
mod_audit: Support for adding location (GeoIP) to audit events
This can be more privacy-friendly than logging full IP addresses, and also
more informative to a user - IP addresses don't mean much to the average
person, however if they see activity from outside their expected country, they
can immediately identify suspicious activity.
As with IPs, this field is configurable for deployments that would like to
disable it. Location is also not logged when the geoip library is not
available.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 01 Apr 2023 13:11:53 +0100 |
parents | 7bce75e74f86 |
children | df483d9056f5 |
rev | line source |
---|---|
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
1 local mt = require"util.multitable"; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 local datetime = require"util.datetime"; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 local jid_split = require"util.jid".split; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 local nodeprep = require"util.encodings".stringprep.nodeprep; |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
5 local url = require"socket.url"; |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
6 local os_time, os_date = os.time, os.date; |
3485
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
7 local httplib = require "util.http"; |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
8 local render_funcs = {}; |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
9 local render = require"util.interpolation".new("%b{}", require"util.stanza".xml_escape, render_funcs); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 |
1571
eed7db9f3157
mod_mam_muc, mod_http_muc_log: Change store name from 'archive2' to 'muc_log' to distinguish it from personal MAM archives. Old data will require migration.
Kim Alvefur <zash@zash.se>
parents:
1564
diff
changeset
|
11 local archive = module:open_store("muc_log", "archive"); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 |
4970
8c7b7db69f5b
mod_http_muc_log: Drop support for pre-0.11 MUC API
Kim Alvefur <zash@zash.se>
parents:
4963
diff
changeset
|
13 -- Prosody 0.11+ MUC API |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 local mod_muc = module:depends"muc"; |
4970
8c7b7db69f5b
mod_http_muc_log: Drop support for pre-0.11 MUC API
Kim Alvefur <zash@zash.se>
parents:
4963
diff
changeset
|
15 local each_room = mod_muc.each_room; |
8c7b7db69f5b
mod_http_muc_log: Drop support for pre-0.11 MUC API
Kim Alvefur <zash@zash.se>
parents:
4963
diff
changeset
|
16 local get_room_from_jid = mod_muc.get_room_from_jid; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 local function get_room(name) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 local jid = name .. '@' .. module.host; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 return get_room_from_jid(jid); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 |
3582
444e2306c99a
mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents:
3578
diff
changeset
|
23 local use_oob = module:get_option_boolean(module.name .. "_show_images", false); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 module:depends"http"; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
26 local template; |
1582
8e282eb0c70c
mod_http_muc_log: Split out template into a configurable file.
Kim Alvefur <zash@zash.se>
parents:
1581
diff
changeset
|
27 do |
4182
1890115b2773
mod_http_muc_log: Move template into a directory to ease packaging
Kim Alvefur <zash@zash.se>
parents:
4034
diff
changeset
|
28 local template_filename = module:get_option_string(module.name .. "_template", "res/" .. module.name .. ".html"); |
3066
cefc375d0929
mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents:
3064
diff
changeset
|
29 local template_file, err = module:load_resource(template_filename); |
cefc375d0929
mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents:
3064
diff
changeset
|
30 if template_file then |
cefc375d0929
mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents:
3064
diff
changeset
|
31 template, err = template_file:read("*a"); |
cefc375d0929
mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents:
3064
diff
changeset
|
32 template_file:close(); |
cefc375d0929
mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents:
3064
diff
changeset
|
33 end |
cefc375d0929
mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents:
3064
diff
changeset
|
34 if not template then |
cefc375d0929
mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents:
3064
diff
changeset
|
35 module:log("error", "Error loading template: %s", err); |
3486
887ce59cf396
mod_http_muc_log: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3485
diff
changeset
|
36 template = render("<h1>mod_{module} could not read the template</h1>\ |
887ce59cf396
mod_http_muc_log: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3485
diff
changeset
|
37 <p>Tried to open <b>{filename}</b></p>\ |
887ce59cf396
mod_http_muc_log: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3485
diff
changeset
|
38 <pre>{error}</pre>", |
3066
cefc375d0929
mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents:
3064
diff
changeset
|
39 { module = module.name, filename = template_filename, error = err }); |
cefc375d0929
mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents:
3064
diff
changeset
|
40 end |
1582
8e282eb0c70c
mod_http_muc_log: Split out template into a configurable file.
Kim Alvefur <zash@zash.se>
parents:
1581
diff
changeset
|
41 end |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 |
5104
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
43 local resources = module:get_option_path(module.name .. "_resources", "static"); |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
44 |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
45 -- local base_url = module:http_url() .. '/'; -- TODO: Generate links in a smart way |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
46 local get_link do |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
47 local link, path = { path = '/' }, { "", "", is_directory = true }; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
48 function get_link(room, date) |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
49 path[1], path[2] = room, date; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
50 path.is_directory = not date; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
51 link.path = url.build_path(path); |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
52 return url.build(link); |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
53 end |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
54 end |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 |
3593
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
56 local function get_absolute_link(room, date) |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
57 local link = url.parse(module:http_url()); |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
58 local path = url.parse_path(link.path); |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
59 if room then |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
60 table.insert(path, room); |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
61 if date then |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
62 table.insert(path, date) |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
63 path.is_directory = false; |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
64 else |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
65 path.is_directory = true; |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
66 end |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
67 end |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
68 link.path = url.build_path(path) |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
69 return url.build(link) |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
70 end |
0b670831ace3
mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents:
3592
diff
changeset
|
71 |
3059
14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents:
3058
diff
changeset
|
72 -- Whether room can be joined by anyone |
14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents:
3058
diff
changeset
|
73 local function open_room(room) -- : boolean |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 if type(room) == "string" then |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 room = get_room(room); |
3061
25eecbb195d9
mod_http_muc_log: Add comment about argument to policy function
Kim Alvefur <zash@zash.se>
parents:
3060
diff
changeset
|
76 -- assumed to be a room object otherwise |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 end |
3057
f69a2e97d912
mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents:
2846
diff
changeset
|
78 if not room then |
f69a2e97d912
mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents:
2846
diff
changeset
|
79 return nil; |
f69a2e97d912
mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents:
2846
diff
changeset
|
80 end |
f69a2e97d912
mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents:
2846
diff
changeset
|
81 |
3059
14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents:
3058
diff
changeset
|
82 if (room.get_members_only or room.is_members_only)(room) then |
14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents:
3058
diff
changeset
|
83 return false; |
3057
f69a2e97d912
mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents:
2846
diff
changeset
|
84 end |
f69a2e97d912
mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents:
2846
diff
changeset
|
85 |
3059
14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents:
3058
diff
changeset
|
86 if room:get_password() then |
3057
f69a2e97d912
mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents:
2846
diff
changeset
|
87 return false; |
f69a2e97d912
mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents:
2846
diff
changeset
|
88 end |
f69a2e97d912
mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents:
2846
diff
changeset
|
89 |
f69a2e97d912
mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents:
2846
diff
changeset
|
90 return true; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
91 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
92 |
3596
6e529f53b3c3
mod_http_muc_log: Allow specifying the default view
Kim Alvefur <zash@zash.se>
parents:
3595
diff
changeset
|
93 -- Can be set to "latest" |
6e529f53b3c3
mod_http_muc_log: Allow specifying the default view
Kim Alvefur <zash@zash.se>
parents:
3595
diff
changeset
|
94 local default_view = module:get_option_string(module.name .. "_default_view", nil); |
6e529f53b3c3
mod_http_muc_log: Allow specifying the default view
Kim Alvefur <zash@zash.se>
parents:
3595
diff
changeset
|
95 |
3064
ce61f1826f1f
mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents:
3063
diff
changeset
|
96 module:hook("muc-disco#info", function (event) |
ce61f1826f1f
mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents:
3063
diff
changeset
|
97 local room = event.room; |
ce61f1826f1f
mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents:
3063
diff
changeset
|
98 if open_room(room) then |
ce61f1826f1f
mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents:
3063
diff
changeset
|
99 table.insert(event.form, { name = "muc#roominfo_logs", type="text-single" }); |
3596
6e529f53b3c3
mod_http_muc_log: Allow specifying the default view
Kim Alvefur <zash@zash.se>
parents:
3595
diff
changeset
|
100 event.formdata["muc#roominfo_logs"] = get_absolute_link(jid_split(event.room.jid), default_view); |
3064
ce61f1826f1f
mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents:
3063
diff
changeset
|
101 end |
ce61f1826f1f
mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents:
3063
diff
changeset
|
102 end); |
ce61f1826f1f
mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents:
3063
diff
changeset
|
103 |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
104 local function sort_Y(a,b) return a.year > b.year end |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
105 local function sort_m(a,b) return a.n > b.n end |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
106 |
2590
63dd3e525f13
mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents:
2236
diff
changeset
|
107 -- Time zone hack? |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
108 local t_diff = os_time(os_date("*t")) - os_time(os_date("!*t")); |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
109 local function time(t) |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
110 return os_time(t) + t_diff; |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
111 end |
2836
52a7c0f6aea1
mod_http_muc_log: Add a function for rounding timestamps down to midnight
Kim Alvefur <zash@zash.se>
parents:
2826
diff
changeset
|
112 local function date_floor(t) |
52a7c0f6aea1
mod_http_muc_log: Add a function for rounding timestamps down to midnight
Kim Alvefur <zash@zash.se>
parents:
2826
diff
changeset
|
113 return t - t % 86400; |
52a7c0f6aea1
mod_http_muc_log: Add a function for rounding timestamps down to midnight
Kim Alvefur <zash@zash.se>
parents:
2826
diff
changeset
|
114 end |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
115 |
2590
63dd3e525f13
mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents:
2236
diff
changeset
|
116 -- Fetch one item |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
117 local function find_once(room, query, retval) |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
118 if query then query.limit = 1; else query = { limit = 1 }; end |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
119 local iter, err = archive:find(room, query); |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
120 if not iter then return iter, err; end |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
121 if retval then |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
122 return select(retval, iter()); |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
123 end |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
124 return iter(); |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
125 end |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
126 |
2826
ed26608920d4
mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents:
2763
diff
changeset
|
127 local lazy = module:get_option_boolean(module.name .. "_lazy_calendar", true); |
ed26608920d4
mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents:
2763
diff
changeset
|
128 |
3597
da7ec4ed6ddf
mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents:
3596
diff
changeset
|
129 local presence_logged = module:get_option_boolean("muc_log_presences", false); |
da7ec4ed6ddf
mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents:
3596
diff
changeset
|
130 |
3485
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
131 local function hide_presence(request) |
3597
da7ec4ed6ddf
mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents:
3596
diff
changeset
|
132 if not presence_logged then |
da7ec4ed6ddf
mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents:
3596
diff
changeset
|
133 return false; |
da7ec4ed6ddf
mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents:
3596
diff
changeset
|
134 end |
3485
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
135 if request.url.query then |
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
136 local data = httplib.formdecode(request.url.query); |
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
137 if data then |
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
138 return data.p == "h" |
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
139 end |
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
140 end |
5117
2b94ee74d1f1
Backed out changeset 85882735fd33
Jonas Schäfer <jonas@wielicki.name>
parents:
5116
diff
changeset
|
141 return false; |
3485
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
142 end |
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
143 |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
144 local function get_dates(room) --> { integer, ... } |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
145 local date_list = archive.dates and archive:dates(room); |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
146 if date_list then |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
147 for i = 1, #date_list do |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
148 date_list[i] = datetime.parse(date_list[i].."T00:00:00Z"); |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
149 end |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
150 return date_list; |
3059
14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents:
3058
diff
changeset
|
151 end |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
152 |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
153 if lazy then |
2826
ed26608920d4
mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents:
2763
diff
changeset
|
154 -- Lazy with many false positives |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
155 date_list = {}; |
2826
ed26608920d4
mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents:
2763
diff
changeset
|
156 local first_day = find_once(room, nil, 3); |
ed26608920d4
mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents:
2763
diff
changeset
|
157 local last_day = find_once(room, { reverse = true }, 3); |
2839
7738d7158dd0
mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents:
2838
diff
changeset
|
158 if first_day and last_day then |
7738d7158dd0
mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents:
2838
diff
changeset
|
159 first_day = date_floor(first_day); |
7738d7158dd0
mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents:
2838
diff
changeset
|
160 last_day = date_floor(last_day); |
7738d7158dd0
mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents:
2838
diff
changeset
|
161 for when = first_day, last_day, 86400 do |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
162 table.insert(date_list, when); |
2839
7738d7158dd0
mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents:
2838
diff
changeset
|
163 end |
7738d7158dd0
mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents:
2838
diff
changeset
|
164 else |
7738d7158dd0
mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents:
2838
diff
changeset
|
165 return; -- 404 |
2826
ed26608920d4
mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents:
2763
diff
changeset
|
166 end |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
167 return date_list; |
1832
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
168 end |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
169 |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
170 -- Collect date the hard way |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
171 module:log("debug", "Find all dates with messages"); |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
172 date_list = {}; |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
173 local next_day; |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
174 repeat |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
175 local when = find_once(room, { start = next_day; }, 3); |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
176 if not when then break; end |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
177 table.insert(date_list, when); |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
178 next_day = date_floor(when) + 86400; |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
179 until not next_day; |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
180 return date_list; |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
181 end |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
182 |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
183 function render_funcs.calendarize(date_list) |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
184 -- convert array of timestamps to a year / month / day tree |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
185 local dates = mt.new(); |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
186 for _, when in ipairs(date_list) do |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
187 local t = os_date("!*t", when); |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
188 dates:set(t.year, t.month, t.day, when); |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
189 end |
2590
63dd3e525f13
mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents:
2236
diff
changeset
|
190 -- Wrangle Y/m/d tree into year / month / week / day tree for calendar view |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
191 local years = {}; |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
192 for current_year, months_t in pairs(dates.data) do |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
193 local t = { year = current_year, month = 1, day = 1 }; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
194 local months = { }; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
195 local year = { year = current_year, months = months }; |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
196 years[#years+1] = year; |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
197 for current_month, days_t in pairs(months_t) do |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
198 t.day = 1; |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
199 t.month = current_month; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
200 local tmp = os_date("!*t", time(t)); |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
201 local days = {}; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
202 local week = { days = days } |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
203 local weeks = { week }; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
204 local month = { year = year.year, month = os_date("!%B", time(t)), n = current_month, weeks = weeks }; |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
205 months[#months+1] = month; |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
206 local current_day = 1; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
207 for _=1, (tmp.wday+5)%7 do |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
208 days[current_day], current_day = {}, current_day+1; |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
209 end |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
210 for i = 1, 31 do |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
211 t.day = i; |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
212 tmp = os_date("!*t", time(t)); |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
213 if tmp.month ~= current_month then break end |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
214 if i > 1 and tmp.wday == 2 then |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
215 days = {}; |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
216 weeks[#weeks+1] = { days = days }; |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
217 current_day = 1; |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
218 end |
2685
cd5781ca782d
mod_http_muc_log: Remove caching
Kim Alvefur <zash@zash.se>
parents:
2593
diff
changeset
|
219 days[current_day] = { |
cd5781ca782d
mod_http_muc_log: Remove caching
Kim Alvefur <zash@zash.se>
parents:
2593
diff
changeset
|
220 wday = tmp.wday, day = i, href = days_t[i] and datetime.date(days_t[i]) |
cd5781ca782d
mod_http_muc_log: Remove caching
Kim Alvefur <zash@zash.se>
parents:
2593
diff
changeset
|
221 }; |
cd5781ca782d
mod_http_muc_log: Remove caching
Kim Alvefur <zash@zash.se>
parents:
2593
diff
changeset
|
222 current_day = current_day+1; |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
223 end |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
224 end |
3749
cb61f0e06de3
mod_http_muc_log: Fix sorting months
Kim Alvefur <zash@zash.se>
parents:
3722
diff
changeset
|
225 table.sort(months, sort_m); |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
226 end |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
227 table.sort(years, sort_Y); |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
228 return years; |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
229 end |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
230 |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
231 -- Produce the calendar view |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
232 local function years_page(event, path) |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
233 local request, response = event.request, event.response; |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
234 |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
235 local room = nodeprep(path:match("^(.*)/$")); |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
236 local is_open = open_room(room); |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
237 if is_open == nil then |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
238 return -- implicit 404 |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
239 elseif is_open == false then |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
240 return 403; |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
241 end |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
242 |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
243 local date_list = get_dates(room); |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
244 if not date_list then |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
245 return; -- 404 |
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
246 end |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
247 |
2590
63dd3e525f13
mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents:
2236
diff
changeset
|
248 -- Phew, all wrangled, all that's left is rendering it with the template |
63dd3e525f13
mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents:
2236
diff
changeset
|
249 |
1579
9e784ddac236
mod_http_muc_log: Include charset in Content-Type header
Kim Alvefur <zash@zash.se>
parents:
1578
diff
changeset
|
250 response.headers.content_type = "text/html; charset=utf-8"; |
3892
96a2e5097fc4
mod_http_muc_log: Reduce hashtable lookups
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3757
diff
changeset
|
251 local room_obj = get_room(room); |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
252 return render(template, { |
5104
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
253 static = "../@static"; |
3892
96a2e5097fc4
mod_http_muc_log: Reduce hashtable lookups
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3757
diff
changeset
|
254 room = room_obj._data; |
96a2e5097fc4
mod_http_muc_log: Reduce hashtable lookups
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3757
diff
changeset
|
255 jid = room_obj.jid; |
96a2e5097fc4
mod_http_muc_log: Reduce hashtable lookups
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3757
diff
changeset
|
256 jid_node = jid_split(room_obj.jid); |
3485
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
257 hide_presence = hide_presence(request); |
3597
da7ec4ed6ddf
mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents:
3596
diff
changeset
|
258 presence_available = presence_logged; |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
259 dates = date_list; |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
260 links = { |
2840
683a2f25223d
mod_http_muc_log: Reword "back" links
Kim Alvefur <zash@zash.se>
parents:
2839
diff
changeset
|
261 { href = "../", rel = "up", text = "Room list" }, |
3718
cc6f7e2e4a59
mod_http_muc_log: Add arrow to 'latest' link like on other navigation
Kim Alvefur <zash@zash.se>
parents:
3715
diff
changeset
|
262 { href = "latest", rel = "last", text = "Latest" }, |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
263 }; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
264 }); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
265 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
266 |
2590
63dd3e525f13
mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents:
2236
diff
changeset
|
267 -- Produce the chat log view |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
268 local function logs_page(event, path) |
3485
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
269 local request, response = event.request, event.response; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
270 |
3591 | 271 local room, date = path:match("^([^/]+)/([^/]*)/?$"); |
4931
13070c6a7ce8
mod_http_muc_log: Fix exception on lack of trailing slash in room path
Kim Alvefur <zash@zash.se>
parents:
4781
diff
changeset
|
272 if not room then |
13070c6a7ce8
mod_http_muc_log: Fix exception on lack of trailing slash in room path
Kim Alvefur <zash@zash.se>
parents:
4781
diff
changeset
|
273 response.headers.location = url.build({ path = path .. "/" }); |
13070c6a7ce8
mod_http_muc_log: Fix exception on lack of trailing slash in room path
Kim Alvefur <zash@zash.se>
parents:
4781
diff
changeset
|
274 return 303; |
13070c6a7ce8
mod_http_muc_log: Fix exception on lack of trailing slash in room path
Kim Alvefur <zash@zash.se>
parents:
4781
diff
changeset
|
275 end |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
276 room = nodeprep(room); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
277 if not room then |
3591 | 278 return 400; |
279 elseif date == "" then | |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
280 return years_page(event, path); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
281 end |
3059
14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents:
3058
diff
changeset
|
282 local is_open = open_room(room); |
14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents:
3058
diff
changeset
|
283 if is_open == nil then |
14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents:
3058
diff
changeset
|
284 return -- implicit 404 |
14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents:
3058
diff
changeset
|
285 elseif is_open == false then |
14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents:
3058
diff
changeset
|
286 return 403; |
14d8f2a9d5f4
mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents:
3058
diff
changeset
|
287 end |
3592
61a9c087730a
mod_http_muc_log: Provide a redirect to 'latest' day with logs (fixes #1360)
Kim Alvefur <zash@zash.se>
parents:
3591
diff
changeset
|
288 if date == "latest" then |
61a9c087730a
mod_http_muc_log: Provide a redirect to 'latest' day with logs (fixes #1360)
Kim Alvefur <zash@zash.se>
parents:
3591
diff
changeset
|
289 local last_day = find_once(room, { reverse = true }, 3); |
3595
00a848ede42d
mod_http_muc_log: Preserve ?query part in redirect
Kim Alvefur <zash@zash.se>
parents:
3594
diff
changeset
|
290 response.headers.location = url.build({ path = datetime.date(last_day), query = request.url.query }); |
3592
61a9c087730a
mod_http_muc_log: Provide a redirect to 'latest' day with logs (fixes #1360)
Kim Alvefur <zash@zash.se>
parents:
3591
diff
changeset
|
291 return 303; |
61a9c087730a
mod_http_muc_log: Provide a redirect to 'latest' day with logs (fixes #1360)
Kim Alvefur <zash@zash.se>
parents:
3591
diff
changeset
|
292 end |
2841
462dece0a3c2
mod_http_muc_log: Parse date out of path once
Kim Alvefur <zash@zash.se>
parents:
2840
diff
changeset
|
293 local day_start = datetime.parse(date.."T00:00:00Z"); |
3591 | 294 if not day_start then |
295 module:log("debug", "Invalid date format: %q", date); | |
296 return 400; | |
297 end | |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
298 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
299 local logs, i = {}, 1; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
300 local iter, err = archive:find(room, { |
2841
462dece0a3c2
mod_http_muc_log: Parse date out of path once
Kim Alvefur <zash@zash.se>
parents:
2840
diff
changeset
|
301 ["start"] = day_start; |
462dece0a3c2
mod_http_muc_log: Parse date out of path once
Kim Alvefur <zash@zash.se>
parents:
2840
diff
changeset
|
302 ["end"] = day_start + 86399; |
3485
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
303 ["with"] = hide_presence(request) and "message<groupchat" or nil; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
304 }); |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
305 if not iter then |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
306 module:log("warn", "Could not search archive: %s", err or "no error"); |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
307 return 500; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
308 end |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
309 |
1577
0a6974f2cb55
mod_http_muc_log: Use archive IDs to find next and previous dates that contain messages
Kim Alvefur <zash@zash.se>
parents:
1576
diff
changeset
|
310 local first, last; |
4990
d55b10878e43
mod_http_muc_log: Rename variable for improved clarity
Kim Alvefur <zash@zash.se>
parents:
4989
diff
changeset
|
311 for archive_id, item, when in iter do |
3703
7244ff1d62a8
mod_http_muc_log: Expose xml:lang from each message/body #a11y
Kim Alvefur <zash@zash.se>
parents:
3702
diff
changeset
|
312 local body_tag = item:get_child("body"); |
7244ff1d62a8
mod_http_muc_log: Expose xml:lang from each message/body #a11y
Kim Alvefur <zash@zash.se>
parents:
3702
diff
changeset
|
313 local body = body_tag and body_tag:get_text(); |
2591
3e1a85c5194c
mod_http_muc_log: Move scope of variables into loop
Kim Alvefur <zash@zash.se>
parents:
2590
diff
changeset
|
314 local subject = item:get_child_text("subject"); |
3e1a85c5194c
mod_http_muc_log: Move scope of variables into loop
Kim Alvefur <zash@zash.se>
parents:
2590
diff
changeset
|
315 local verb = nil; |
3703
7244ff1d62a8
mod_http_muc_log: Expose xml:lang from each message/body #a11y
Kim Alvefur <zash@zash.se>
parents:
3702
diff
changeset
|
316 local lang = body_tag and body_tag.attr["xml:lang"] or item.attr["xml:lang"]; |
4589
45ab9152a51c
mod_http_muc_log: Add some spacing around code for readability
Kim Alvefur <zash@zash.se>
parents:
4182
diff
changeset
|
317 |
4991
b17d63ef5bdf
mod_http_muc_log: Use XEP-0359 ID if available
Kim Alvefur <zash@zash.se>
parents:
4990
diff
changeset
|
318 -- XEP-0359: Unique and Stable Stanza IDs |
b17d63ef5bdf
mod_http_muc_log: Use XEP-0359 ID if available
Kim Alvefur <zash@zash.se>
parents:
4990
diff
changeset
|
319 local message_id = item:find("{urn:xmpp:sid:0}origin-id@id") or item.attr.id; |
b17d63ef5bdf
mod_http_muc_log: Use XEP-0359 ID if available
Kim Alvefur <zash@zash.se>
parents:
4990
diff
changeset
|
320 |
1555 | 321 if subject then |
1578
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
322 verb, body = "set the topic to", subject; |
1555 | 323 elseif body and body:sub(1,4) == "/me " then |
324 verb, body = body:sub(5), nil; | |
325 elseif item.name == "presence" then | |
3060
982668000163
mod_http_muc_log: Add a note about changing how presence is treated
Kim Alvefur <zash@zash.se>
parents:
3059
diff
changeset
|
326 -- TODO Distinguish between join and presence update |
1555 | 327 verb = item.attr.type == "unavailable" and "has left" or "has joined"; |
3703
7244ff1d62a8
mod_http_muc_log: Expose xml:lang from each message/body #a11y
Kim Alvefur <zash@zash.se>
parents:
3702
diff
changeset
|
328 lang = "en"; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
329 end |
4589
45ab9152a51c
mod_http_muc_log: Add some spacing around code for readability
Kim Alvefur <zash@zash.se>
parents:
4182
diff
changeset
|
330 |
4590
3145823992cb
mod_http_muc_log: Move out nickname into a variable for future reuse
Kim Alvefur <zash@zash.se>
parents:
4589
diff
changeset
|
331 local nick = select(3, jid_split(item.attr.from)); |
4992
ed5abb8b8fa8
mod_http_muc_log: Use XEP-0421 ID over nickname for XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4991
diff
changeset
|
332 local occupant_id = item:find("{urn:xmpp:occupant-id:0}occupant-id@id") or nick; |
4986
3bcefa9cf1ca
mod_http_muc_log: Mention relevant XEPs in comments
Kim Alvefur <zash@zash.se>
parents:
4970
diff
changeset
|
333 |
3bcefa9cf1ca
mod_http_muc_log: Mention relevant XEPs in comments
Kim Alvefur <zash@zash.se>
parents:
4970
diff
changeset
|
334 -- XEP-0066: Out of Band Data |
3582
444e2306c99a
mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents:
3578
diff
changeset
|
335 local oob = use_oob and item:get_child("x", "jabber:x:oob"); |
4589
45ab9152a51c
mod_http_muc_log: Add some spacing around code for readability
Kim Alvefur <zash@zash.se>
parents:
4182
diff
changeset
|
336 |
4986
3bcefa9cf1ca
mod_http_muc_log: Mention relevant XEPs in comments
Kim Alvefur <zash@zash.se>
parents:
4970
diff
changeset
|
337 -- XEP-0425: Message Moderation |
4781
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
338 local moderated = item:get_child("moderated", "urn:xmpp:message-moderate:0"); |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
339 if moderated then |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
340 local actor = moderated.attr.by; |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
341 if actor then actor = select(3, jid_split(actor)); end |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
342 verb = "removed by " .. (actor or "moderator"); |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
343 body = moderated:get_child_text("reason") or ""; |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
344 end |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
345 |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
346 local moderation = item:find("{urn:xmpp:fasten:0}apply-to/{urn:xmpp:message-moderate:0}moderated"); |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
347 if moderation then |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
348 nick = nick or "a moderator"; |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
349 verb = "removed a message"; |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
350 body = moderation:get_child_text("reason") or ""; |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
351 end |
306066898e5f
mod_http_muc_log: Show messages moderated using XEP-0425
Kim Alvefur <zash@zash.se>
parents:
4677
diff
changeset
|
352 |
4986
3bcefa9cf1ca
mod_http_muc_log: Mention relevant XEPs in comments
Kim Alvefur <zash@zash.se>
parents:
4970
diff
changeset
|
353 -- XEP-0308: Last Message Correction |
4592
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
354 local edit = item:find("{urn:xmpp:message-correct:0}replace/@id"); |
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
355 if edit then |
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
356 local found = false; |
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
357 for n = i-1, 1, -1 do |
4992
ed5abb8b8fa8
mod_http_muc_log: Use XEP-0421 ID over nickname for XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4991
diff
changeset
|
358 if logs[n].message_id == edit and occupant_id == logs[n].occupant_id then |
4592
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
359 found = true; |
4990
d55b10878e43
mod_http_muc_log: Rename variable for improved clarity
Kim Alvefur <zash@zash.se>
parents:
4989
diff
changeset
|
360 logs[n].edited = archive_id; |
d55b10878e43
mod_http_muc_log: Rename variable for improved clarity
Kim Alvefur <zash@zash.se>
parents:
4989
diff
changeset
|
361 edit = logs[n].archive_id; |
4592
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
362 break; |
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
363 end |
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
364 end |
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
365 if not found then |
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
366 -- Ignore unresolved edit. |
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
367 edit = nil; |
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
368 end |
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
369 end |
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
370 |
4986
3bcefa9cf1ca
mod_http_muc_log: Mention relevant XEPs in comments
Kim Alvefur <zash@zash.se>
parents:
4970
diff
changeset
|
371 -- XEP-0444: Message Reactions |
4963
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
372 local reactions = item:get_child("reactions", "urn:xmpp:reactions:0"); |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
373 if reactions then |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
374 -- COMPAT Movim uses an @to attribute instead of the correct @id |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
375 local target_id = reactions.attr.id or reactions.attr.to; |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
376 for n = i - 1, 1, -1 do |
4990
d55b10878e43
mod_http_muc_log: Rename variable for improved clarity
Kim Alvefur <zash@zash.se>
parents:
4989
diff
changeset
|
377 if logs[n].archive_id == target_id then |
4963
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
378 local react_map = logs[n].reactions; -- { string : integer } |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
379 if not react_map then |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
380 react_map = {}; |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
381 logs[n].reactions = react_map; |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
382 end |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
383 for reaction_tag in reactions:childtags("reaction") do |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
384 -- FIXME This doesn't replace previous reactions by the same user |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
385 -- on the same message. |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
386 local reaction_text = reaction_tag:get_text() or "�"; |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
387 react_map[reaction_text] = (react_map[reaction_text] or 0) + 1; |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
388 end |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
389 break |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
390 end |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
391 end |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
392 end |
479d618c9e6d
mod_http_muc_log: Show XEP-0444 reactions
Kim Alvefur <zash@zash.se>
parents:
4931
diff
changeset
|
393 |
4987
8a8ec909ac20
mod_http_muc_log: Link to replied-to message using XEP-0461: Message Replies
Kim Alvefur <zash@zash.se>
parents:
4986
diff
changeset
|
394 -- XEP-0461: Message Replies |
4993
f36d15107c15
mod_http_muc_log: Use stanza:find to save a few bytes
Kim Alvefur <zash@zash.se>
parents:
4992
diff
changeset
|
395 local reply = item:find("{urn:xmpp:reply:0}reply@id"); |
4987
8a8ec909ac20
mod_http_muc_log: Link to replied-to message using XEP-0461: Message Replies
Kim Alvefur <zash@zash.se>
parents:
4986
diff
changeset
|
396 |
3582
444e2306c99a
mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents:
3578
diff
changeset
|
397 if body or verb or oob then |
444e2306c99a
mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents:
3578
diff
changeset
|
398 local line = { |
4991
b17d63ef5bdf
mod_http_muc_log: Use XEP-0359 ID if available
Kim Alvefur <zash@zash.se>
parents:
4990
diff
changeset
|
399 message_id = message_id; |
4990
d55b10878e43
mod_http_muc_log: Rename variable for improved clarity
Kim Alvefur <zash@zash.se>
parents:
4989
diff
changeset
|
400 archive_id = archive_id; |
4992
ed5abb8b8fa8
mod_http_muc_log: Use XEP-0421 ID over nickname for XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4991
diff
changeset
|
401 occupant_id = occupant_id; |
1578
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
402 datetime = datetime.datetime(when); |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
403 time = datetime.time(when); |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
404 verb = verb; |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
405 body = body; |
3703
7244ff1d62a8
mod_http_muc_log: Expose xml:lang from each message/body #a11y
Kim Alvefur <zash@zash.se>
parents:
3702
diff
changeset
|
406 lang = lang; |
4590
3145823992cb
mod_http_muc_log: Move out nickname into a variable for future reuse
Kim Alvefur <zash@zash.se>
parents:
4589
diff
changeset
|
407 nick = nick; |
1578
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
408 st_name = item.name; |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
409 st_type = item.attr.type; |
4592
38f501dca618
mod_http_muc_log: Find edit relations using XEP-0308
Kim Alvefur <zash@zash.se>
parents:
4590
diff
changeset
|
410 edit = edit; |
4993
f36d15107c15
mod_http_muc_log: Use stanza:find to save a few bytes
Kim Alvefur <zash@zash.se>
parents:
4992
diff
changeset
|
411 reply = reply; |
4990
d55b10878e43
mod_http_muc_log: Rename variable for improved clarity
Kim Alvefur <zash@zash.se>
parents:
4989
diff
changeset
|
412 -- COMPAT |
d55b10878e43
mod_http_muc_log: Rename variable for improved clarity
Kim Alvefur <zash@zash.se>
parents:
4989
diff
changeset
|
413 key = archive_id; |
3582
444e2306c99a
mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents:
3578
diff
changeset
|
414 }; |
444e2306c99a
mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents:
3578
diff
changeset
|
415 if oob then |
444e2306c99a
mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents:
3578
diff
changeset
|
416 line.oob = { |
444e2306c99a
mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents:
3578
diff
changeset
|
417 url = oob:get_child_text("url"); |
444e2306c99a
mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents:
3578
diff
changeset
|
418 desc = oob:get_child_text("desc"); |
444e2306c99a
mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents:
3578
diff
changeset
|
419 } |
444e2306c99a
mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents:
3578
diff
changeset
|
420 end |
444e2306c99a
mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents:
3578
diff
changeset
|
421 logs[i], i = line, i + 1; |
1578
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
422 end |
4589
45ab9152a51c
mod_http_muc_log: Add some spacing around code for readability
Kim Alvefur <zash@zash.se>
parents:
4182
diff
changeset
|
423 |
4990
d55b10878e43
mod_http_muc_log: Rename variable for improved clarity
Kim Alvefur <zash@zash.se>
parents:
4989
diff
changeset
|
424 first = first or archive_id; |
d55b10878e43
mod_http_muc_log: Rename variable for improved clarity
Kim Alvefur <zash@zash.se>
parents:
4989
diff
changeset
|
425 last = archive_id; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
426 end |
2846
7eb23a4e7fde
mod_http_muc_log: Generate empty pages in lazy mode, so that one can navigate past quiet days
Kim Alvefur <zash@zash.se>
parents:
2845
diff
changeset
|
427 if i == 1 and not lazy then return end -- No items |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
428 |
2236
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
429 local next_when, prev_when = "", ""; |
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
430 local date_list = archive.dates and archive:dates(room); |
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
431 if date_list then |
2592
fb1987d4ac62
mod_http_muc_log: Rename loop variable to avoid name clash
Kim Alvefur <zash@zash.se>
parents:
2591
diff
changeset
|
432 for j = 1, #date_list do |
fb1987d4ac62
mod_http_muc_log: Rename loop variable to avoid name clash
Kim Alvefur <zash@zash.se>
parents:
2591
diff
changeset
|
433 if date_list[j] == date then |
fb1987d4ac62
mod_http_muc_log: Rename loop variable to avoid name clash
Kim Alvefur <zash@zash.se>
parents:
2591
diff
changeset
|
434 next_when = date_list[j+1] or ""; |
fb1987d4ac62
mod_http_muc_log: Rename loop variable to avoid name clash
Kim Alvefur <zash@zash.se>
parents:
2591
diff
changeset
|
435 prev_when = date_list[j-1] or ""; |
2236
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
436 break; |
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
437 end |
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
438 end |
2844
9fac07bba402
mod_http_muc_log: Lazy nex/prev link generation
Kim Alvefur <zash@zash.se>
parents:
2843
diff
changeset
|
439 elseif lazy then |
9fac07bba402
mod_http_muc_log: Lazy nex/prev link generation
Kim Alvefur <zash@zash.se>
parents:
2843
diff
changeset
|
440 next_when = datetime.date(day_start + 86400); |
9fac07bba402
mod_http_muc_log: Lazy nex/prev link generation
Kim Alvefur <zash@zash.se>
parents:
2843
diff
changeset
|
441 prev_when = datetime.date(day_start - 86400); |
2845
0de6ed2ae9bd
mod_http_muc_log: Check that there are timestamps to work with
Kim Alvefur <zash@zash.se>
parents:
2844
diff
changeset
|
442 elseif first and last then |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
443 |
2236
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
444 module:log("debug", "Find next date with messages"); |
2593
b61b0ff1c0f9
mod_http_muc_log: Fix prev/next date finding
Kim Alvefur <zash@zash.se>
parents:
2592
diff
changeset
|
445 next_when = find_once(room, { after = last }, 3); |
2236
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
446 if next_when then |
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
447 next_when = datetime.date(next_when); |
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
448 module:log("debug", "Next message: %s", next_when); |
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
449 end |
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
450 |
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
451 module:log("debug", "Find prev date with messages"); |
2593
b61b0ff1c0f9
mod_http_muc_log: Fix prev/next date finding
Kim Alvefur <zash@zash.se>
parents:
2592
diff
changeset
|
452 prev_when = find_once(room, { before = first, reverse = true }, 3); |
2236
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
453 if prev_when then |
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
454 prev_when = datetime.date(prev_when); |
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
455 module:log("debug", "Previous message: %s", prev_when); |
86bc6e1d9d4d
mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents:
2235
diff
changeset
|
456 end |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
457 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
458 |
3690
8c0a6d4541d5
mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents:
3597
diff
changeset
|
459 local links = { |
4034
a359972d246e
mod_http_muc_log: Add link to room list from logs page
Kim Alvefur <zash@zash.se>
parents:
3893
diff
changeset
|
460 { href = "../", rel = "up", text = "Room list" }, |
3690
8c0a6d4541d5
mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents:
3597
diff
changeset
|
461 { href = "./", rel = "up", text = "Calendar" }, |
8c0a6d4541d5
mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents:
3597
diff
changeset
|
462 }; |
8c0a6d4541d5
mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents:
3597
diff
changeset
|
463 if prev_when ~= "" then |
8c0a6d4541d5
mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents:
3597
diff
changeset
|
464 table.insert(links, { href = prev_when, rel = "prev", text = prev_when}); |
8c0a6d4541d5
mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents:
3597
diff
changeset
|
465 end |
8c0a6d4541d5
mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents:
3597
diff
changeset
|
466 if next_when ~= "" then |
8c0a6d4541d5
mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents:
3597
diff
changeset
|
467 table.insert(links, { href = next_when, rel = "next", text = next_when}); |
8c0a6d4541d5
mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents:
3597
diff
changeset
|
468 end |
8c0a6d4541d5
mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents:
3597
diff
changeset
|
469 |
1579
9e784ddac236
mod_http_muc_log: Include charset in Content-Type header
Kim Alvefur <zash@zash.se>
parents:
1578
diff
changeset
|
470 response.headers.content_type = "text/html; charset=utf-8"; |
3892
96a2e5097fc4
mod_http_muc_log: Reduce hashtable lookups
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3757
diff
changeset
|
471 local room_obj = get_room(room); |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
472 return render(template, { |
5104
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
473 static = "../@static"; |
3714
04ff0de40ba9
mod_http_muc_log: Add date metadata to log pages
Kim Alvefur <zash@zash.se>
parents:
3703
diff
changeset
|
474 date = date; |
3892
96a2e5097fc4
mod_http_muc_log: Reduce hashtable lookups
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3757
diff
changeset
|
475 room = room_obj._data; |
96a2e5097fc4
mod_http_muc_log: Reduce hashtable lookups
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3757
diff
changeset
|
476 jid = room_obj.jid; |
96a2e5097fc4
mod_http_muc_log: Reduce hashtable lookups
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3757
diff
changeset
|
477 jid_node = jid_split(room_obj.jid); |
3485
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
478 hide_presence = hide_presence(request); |
3597
da7ec4ed6ddf
mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents:
3596
diff
changeset
|
479 presence_available = presence_logged; |
3892
96a2e5097fc4
mod_http_muc_log: Reduce hashtable lookups
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3757
diff
changeset
|
480 lang = room_obj.get_language and room_obj:get_language(); |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
481 lines = logs; |
3690
8c0a6d4541d5
mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents:
3597
diff
changeset
|
482 links = links; |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
483 dates = {}; -- COMPAT util.interpolation {nil|func#...} bug |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
484 }); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
485 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
486 |
4676
a2cf3b69a3d6
mod_http_muc_log: Add way to list certain rooms in a specified order
Kim Alvefur <zash@zash.se>
parents:
4592
diff
changeset
|
487 local room_weights = setmetatable(module:get_option_array(module.name.."_list_order", {}):reverse(), nil); |
a2cf3b69a3d6
mod_http_muc_log: Add way to list certain rooms in a specified order
Kim Alvefur <zash@zash.se>
parents:
4592
diff
changeset
|
488 for i = #room_weights, 1, -1 do |
a2cf3b69a3d6
mod_http_muc_log: Add way to list certain rooms in a specified order
Kim Alvefur <zash@zash.se>
parents:
4592
diff
changeset
|
489 local room_jid = room_weights[i]; |
a2cf3b69a3d6
mod_http_muc_log: Add way to list certain rooms in a specified order
Kim Alvefur <zash@zash.se>
parents:
4592
diff
changeset
|
490 room_weights[i] = nil; |
a2cf3b69a3d6
mod_http_muc_log: Add way to list certain rooms in a specified order
Kim Alvefur <zash@zash.se>
parents:
4592
diff
changeset
|
491 room_weights[room_jid] = i; |
a2cf3b69a3d6
mod_http_muc_log: Add way to list certain rooms in a specified order
Kim Alvefur <zash@zash.se>
parents:
4592
diff
changeset
|
492 end |
a2cf3b69a3d6
mod_http_muc_log: Add way to list certain rooms in a specified order
Kim Alvefur <zash@zash.se>
parents:
4592
diff
changeset
|
493 |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
494 local function list_rooms(event) |
3485
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
495 local request, response = event.request, event.response; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
496 local room_list, i = {}, 1; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
497 for room in each_room() do |
3062
37a78e365b46
mod_http_muc_log: Fix inverted logic
Kim Alvefur <zash@zash.se>
parents:
3061
diff
changeset
|
498 if not (room.get_hidden or room.is_hidden)(room) then |
3893
3f20b7c88afb
mod_http_muc_log: Expose JID localpart to the template
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3892
diff
changeset
|
499 local localpart = jid_split(room.jid); |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
500 room_list[i], i = { |
3578
ea63dc0cc824
mod_http_muc_log: Sort room listing by jid for stable order
Kim Alvefur <zash@zash.se>
parents:
3560
diff
changeset
|
501 jid = room.jid; |
3893
3f20b7c88afb
mod_http_muc_log: Expose JID localpart to the template
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3892
diff
changeset
|
502 localpart = localpart; |
3f20b7c88afb
mod_http_muc_log: Expose JID localpart to the template
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3892
diff
changeset
|
503 href = get_link(localpart, default_view); |
4182
1890115b2773
mod_http_muc_log: Move template into a directory to ease packaging
Kim Alvefur <zash@zash.se>
parents:
4034
diff
changeset
|
504 name = room:get_name() or localpart; |
3702
caf27826c7b2
mod_http_muc_log: Use configured room language in room title/desc #a11y
Kim Alvefur <zash@zash.se>
parents:
3692
diff
changeset
|
505 lang = room.get_language and room:get_language(); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
506 description = room:get_description(); |
4676
a2cf3b69a3d6
mod_http_muc_log: Add way to list certain rooms in a specified order
Kim Alvefur <zash@zash.se>
parents:
4592
diff
changeset
|
507 priority = room_weights[ room.jid ] or 0; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
508 }, i + 1; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
509 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
510 end |
1576
91b91052e0e8
mod_http_muc_log: Send a HTML mime type with responses
Kim Alvefur <zash@zash.se>
parents:
1575
diff
changeset
|
511 |
3578
ea63dc0cc824
mod_http_muc_log: Sort room listing by jid for stable order
Kim Alvefur <zash@zash.se>
parents:
3560
diff
changeset
|
512 table.sort(room_list, function (a, b) |
4676
a2cf3b69a3d6
mod_http_muc_log: Add way to list certain rooms in a specified order
Kim Alvefur <zash@zash.se>
parents:
4592
diff
changeset
|
513 if a.priority ~= b.priority then return a.priority > b.priority; end |
4677
823370bc2e4c
mod_http_muc_log: Sort rooms with a description before those without
Kim Alvefur <zash@zash.se>
parents:
4676
diff
changeset
|
514 if a.description ~= nil and b.description == nil then |
823370bc2e4c
mod_http_muc_log: Sort rooms with a description before those without
Kim Alvefur <zash@zash.se>
parents:
4676
diff
changeset
|
515 return true; |
823370bc2e4c
mod_http_muc_log: Sort rooms with a description before those without
Kim Alvefur <zash@zash.se>
parents:
4676
diff
changeset
|
516 elseif a.description == nil and b.description ~= nil then |
823370bc2e4c
mod_http_muc_log: Sort rooms with a description before those without
Kim Alvefur <zash@zash.se>
parents:
4676
diff
changeset
|
517 return false; |
823370bc2e4c
mod_http_muc_log: Sort rooms with a description before those without
Kim Alvefur <zash@zash.se>
parents:
4676
diff
changeset
|
518 end |
3583
a36412d4fafd
mod_http_muc_log: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents:
3582
diff
changeset
|
519 return a.jid < b.jid; |
3578
ea63dc0cc824
mod_http_muc_log: Sort room listing by jid for stable order
Kim Alvefur <zash@zash.se>
parents:
3560
diff
changeset
|
520 end); |
ea63dc0cc824
mod_http_muc_log: Sort room listing by jid for stable order
Kim Alvefur <zash@zash.se>
parents:
3560
diff
changeset
|
521 |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
522 response.headers.content_type = "text/html; charset=utf-8"; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
523 return render(template, { |
5104
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
524 static = "./@static"; |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
525 title = module:get_option_string("name", "Prosody Chatrooms"); |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
526 jid = module.host; |
3485
181561d0aae5
mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents:
3283
diff
changeset
|
527 hide_presence = hide_presence(request); |
3597
da7ec4ed6ddf
mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents:
3596
diff
changeset
|
528 presence_available = presence_logged; |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
529 rooms = room_list; |
3750
9002c8a2165f
mod_http_muc_log: Refactor calendarization of date list into a template filter BC
Kim Alvefur <zash@zash.se>
parents:
3749
diff
changeset
|
530 dates = {}; -- COMPAT util.interpolation {nil|func#...} bug |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
531 }); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
532 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
533 |
5104
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
534 local serve_static |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
535 do |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
536 if prosody.process_type == "prosody" then |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
537 -- Prosody >= 0.12 |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
538 local http_files = require "net.http.files"; |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
539 serve = http_files.serve; |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
540 else |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
541 -- Prosody <= 0.11 |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
542 serve = module:depends "http_files".serve; |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
543 end |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
544 local mime_map = module:shared("/*/http_files/mime").types or { css = "text/css"; js = "application/javascript" }; |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
545 serve_static = serve({ path = resources; mime_map = mime_map }); |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
546 end |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
547 |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
548 module:provides("http", { |
3757
971417eedfee
mod_http_muc_log: Set a http app title
Kim Alvefur <zash@zash.se>
parents:
3750
diff
changeset
|
549 title = module:get_option_string("name", "Chatroom logs"); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
550 route = { |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
551 ["GET /"] = list_rooms; |
2685
cd5781ca782d
mod_http_muc_log: Remove caching
Kim Alvefur <zash@zash.se>
parents:
2593
diff
changeset
|
552 ["GET /*"] = logs_page; |
3722
bdbbf11eac0c
mod_http_muc_log: Add comment about the routing of years and logs pages
Kim Alvefur <zash@zash.se>
parents:
3718
diff
changeset
|
553 -- mod_http only supports one wildcard so logs_page will dispatch to years_page if the path contains no date |
bdbbf11eac0c
mod_http_muc_log: Add comment about the routing of years and logs pages
Kim Alvefur <zash@zash.se>
parents:
3718
diff
changeset
|
554 -- thus: |
bdbbf11eac0c
mod_http_muc_log: Add comment about the routing of years and logs pages
Kim Alvefur <zash@zash.se>
parents:
3718
diff
changeset
|
555 -- GET /room --> years_page (via logs_page) |
bdbbf11eac0c
mod_http_muc_log: Add comment about the routing of years and logs pages
Kim Alvefur <zash@zash.se>
parents:
3718
diff
changeset
|
556 -- GET /room/yyyy-mm-dd --> logs_page (for real) |
5104
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
557 |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
558 ["GET /@static/*"] = serve_static; |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
559 -- There are not many ASCII characters that are safe to use in URLs but not |
d4b0a995e5e3
mod_http_muc_log: Move CSS and JS out of template
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
560 -- valid in JID localparts, '@' seemed the only option. |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
561 }; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
562 }); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
563 |