Software /
code /
prosody-modules
Annotate
mod_http_muc_log/mod_http_muc_log.lua @ 2049:50c188cf0ae3
mod_mam: Include 'w' (week) in pattern for "archive_expires_after" option (fixes #627)
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 15 Feb 2016 23:56:12 +0100 |
parent | 1832:48125f2c358b |
child | 2235:c5ee48e27d01 |
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; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 local uuid = require"util.uuid".generate; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 local it = require"util.iterators"; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 local gettime = require"socket".gettime; |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
8 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
|
9 local os_time, os_date = os.time, os.date; |
1750
3b839db88412
mod_http_muc_log: Template engine thing moved into util.interpolation
Kim Alvefur <zash@zash.se>
parents:
1671
diff
changeset
|
10 local render = require"util.interpolation".new("%b{}", require"util.stanza".xml_escape); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 |
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
|
12 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
|
13 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 -- Support both old and new MUC code |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 local mod_muc = module:depends"muc"; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 local rooms = rawget(mod_muc, "rooms"); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 local each_room = rawget(mod_muc, "each_room") or function() return it.values(rooms); end; |
1554
8059b7cdaf17
mod_http_muc_log: Make MUC local code identical to mod_mam_muc
Kim Alvefur <zash@zash.se>
parents:
1553
diff
changeset
|
18 local new_muc = not rooms; |
8059b7cdaf17
mod_http_muc_log: Make MUC local code identical to mod_mam_muc
Kim Alvefur <zash@zash.se>
parents:
1553
diff
changeset
|
19 if new_muc then |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 rooms = module:shared"muc/rooms"; |
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 local get_room_from_jid = rawget(mod_muc, "get_room_from_jid") or |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 function (jid) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 return rooms[jid]; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 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
|
28 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
|
29 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
|
30 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 module:depends"http"; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
34 local template; |
1582
8e282eb0c70c
mod_http_muc_log: Split out template into a configurable file.
Kim Alvefur <zash@zash.se>
parents:
1581
diff
changeset
|
35 do |
8e282eb0c70c
mod_http_muc_log: Split out template into a configurable file.
Kim Alvefur <zash@zash.se>
parents:
1581
diff
changeset
|
36 local template_file = module:get_option_string(module.name .. "_template", module.name .. ".html"); |
8e282eb0c70c
mod_http_muc_log: Split out template into a configurable file.
Kim Alvefur <zash@zash.se>
parents:
1581
diff
changeset
|
37 template_file = assert(module:load_resource(template_file)); |
8e282eb0c70c
mod_http_muc_log: Split out template into a configurable file.
Kim Alvefur <zash@zash.se>
parents:
1581
diff
changeset
|
38 template = template_file:read("*a"); |
8e282eb0c70c
mod_http_muc_log: Split out template into a configurable file.
Kim Alvefur <zash@zash.se>
parents:
1581
diff
changeset
|
39 template_file:close(); |
8e282eb0c70c
mod_http_muc_log: Split out template into a configurable file.
Kim Alvefur <zash@zash.se>
parents:
1581
diff
changeset
|
40 end |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
42 -- 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
|
43 local get_link do |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
44 local link, path = { path = '/' }, { "", "", is_directory = true }; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
45 function get_link(room, date) |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
46 path[1], path[2] = room, date; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
47 path.is_directory = not date; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
48 link.path = url.build_path(path); |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
49 return url.build(link); |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
50 end |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
51 end |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 local function public_room(room) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 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
|
55 room = get_room(room); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 end |
1575
464ed6bc5a73
mod_http_muc_log: Fix use with old (until 0.10) MUC API
Kim Alvefur <zash@zash.se>
parents:
1571
diff
changeset
|
57 return (room |
464ed6bc5a73
mod_http_muc_log: Fix use with old (until 0.10) MUC API
Kim Alvefur <zash@zash.se>
parents:
1571
diff
changeset
|
58 and not (room.get_hidden or room.is_hidden)(room) |
464ed6bc5a73
mod_http_muc_log: Fix use with old (until 0.10) MUC API
Kim Alvefur <zash@zash.se>
parents:
1571
diff
changeset
|
59 and not (room.get_members_only or room.is_members_only)(room) |
1580
63571115302f
mod_http_muc_log: List rooms with logging explicitly enabled
Kim Alvefur <zash@zash.se>
parents:
1579
diff
changeset
|
60 and room._data.logging == true); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
63 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
|
64 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
|
65 |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
66 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
|
67 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
|
68 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
|
69 end |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
70 |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
71 local function find_once(room, query, retval) |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
72 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
|
73 local iter, err = archive:find(room, query); |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
74 if not iter then return iter, err; end |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
75 if retval then |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
76 return select(retval, iter()); |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
77 end |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
78 return iter(); |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
79 end |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
80 |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
81 local function years_page(event, path) |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
82 local response = event.response; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 |
1552
81b3599c02fb
mod_http_muc_log: Have URL of date list page end with a slash
Kim Alvefur <zash@zash.se>
parents:
1550
diff
changeset
|
84 local room = nodeprep(path:match("^(.*)/$")); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 if not room or not public_room(room) then return end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 |
1832
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
87 local date_list = archive.dates and archive:dates(room); |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
88 local dates = mt.new(); |
1832
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
89 if date_list then |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
90 for _, date in ipairs(date_list) do |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
91 local when = datetime.parse(date.."T00:00:00Z"); |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
92 local t = os_date("!*t", when); |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
93 dates:set(t.year, t.month, t.day, when); |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
94 end |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
95 else |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
96 module:log("debug", "Find all dates with messages"); |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
97 local next_day; |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
98 repeat |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
99 local when = find_once(room, { start = next_day; with = "message<groupchat"; }, 3); |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
100 if not when then break; end |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
101 local t = os_date("!*t", when); |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
102 dates:set(t.year, t.month, t.day, when ); |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
103 next_day = when + (86400 - (when % 86400)); |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
104 until not next_day; |
48125f2c358b
mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents:
1750
diff
changeset
|
105 end |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
106 |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
107 local years = {}; |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
108 |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
109 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
|
110 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
|
111 local months = { }; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
112 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
|
113 years[#years+1] = year; |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
114 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
|
115 t.day = 1; |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
116 t.month = current_month; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
117 local tmp = os_date("!*t", time(t)); |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
118 local days = {}; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
119 local week = { days = days } |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
120 local weeks = { week }; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
121 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
|
122 months[#months+1] = month; |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
123 local current_day = 1; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
124 for _=1, (tmp.wday+5)%7 do |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
125 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
|
126 end |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
127 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
|
128 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
|
129 tmp = os_date("!*t", time(t)); |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
130 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
|
131 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
|
132 days = {}; |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
133 weeks[#weeks+1] = { days = days }; |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
134 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
|
135 end |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
136 days[current_day], current_day = { wday = tmp.wday, day = i, href = days_t[i] and datetime.date(days_t[i]) }, 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
|
137 end |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
138 end |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
139 table.sort(year, sort_m); |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
140 end |
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
141 table.sort(years, sort_Y); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
142 |
1579
9e784ddac236
mod_http_muc_log: Include charset in Content-Type header
Kim Alvefur <zash@zash.se>
parents:
1578
diff
changeset
|
143 response.headers.content_type = "text/html; charset=utf-8"; |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
144 return render(template, { |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
145 title = get_room(room):get_name(); |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
146 jid = get_room(room).jid; |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
147 years = years; |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
148 links = { |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
149 { href = "../", rel = "up", text = "Back to room list" }, |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
150 }; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
151 }); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
152 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
153 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
154 local function logs_page(event, path) |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
155 local response = event.response; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
156 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
157 local room, date = path:match("^(.-)/(%d%d%d%d%-%d%d%-%d%d)$"); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
158 room = nodeprep(room); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
159 if not room then |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
160 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
|
161 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
162 if not public_room(room) then return end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
163 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
164 local logs, i = {}, 1; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
165 local iter, err = archive:find(room, { |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
166 ["start"] = datetime.parse(date.."T00:00:00Z"); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
167 ["end"] = datetime.parse(date.."T23:59:59Z"); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
168 -- with = "message<groupchat"; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
169 }); |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
170 if not iter then |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
171 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
|
172 return 500; |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
173 end |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
174 |
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
|
175 local first, last; |
1555 | 176 local verb, subject, body; |
177 for key, item, when in iter do | |
178 body = item:get_child_text("body"); | |
179 subject = item:get_child_text("subject"); | |
180 verb = nil; | |
181 if subject then | |
1578
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
182 verb, body = "set the topic to", subject; |
1555 | 183 elseif body and body:sub(1,4) == "/me " then |
184 verb, body = body:sub(5), nil; | |
185 elseif item.name == "presence" then | |
186 verb = item.attr.type == "unavailable" and "has left" or "has joined"; | |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
187 end |
1578
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
188 if body or verb then |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
189 logs[i], i = { |
1578
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
190 key = key; |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
191 datetime = datetime.datetime(when); |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
192 time = datetime.time(when); |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
193 verb = verb; |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
194 body = body; |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
195 nick = select(3, jid_split(item.attr.from)); |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
196 st_name = item.name; |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
197 st_type = item.attr.type; |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
198 }, i + 1; |
a68ec7a2dc02
mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents:
1577
diff
changeset
|
199 end |
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
|
200 first = first or key; |
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
|
201 last = key; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
202 end |
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
|
203 if i == 1 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
|
204 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
205 module:log("debug", "Find next date with messages"); |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
206 local next_when = find_once(room, { after = last }, 3); |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
207 if next_when then |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
208 next_when = datetime.date(next_when); |
1671
c813b69ae279
mod_http_muc_log: Fix passing dates trough util.datetime twice;
Kim Alvefur <zash@zash.se>
parents:
1654
diff
changeset
|
209 module:log("debug", "Next message: %s", next_when); |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
210 else |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
211 next_when = ""; |
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
212 end |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
213 |
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
214 module:log("debug", "Find prev date with messages"); |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
215 local prev_when = find_once(room, { before = first, reverse = true }, 3); |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
216 if prev_when then |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
217 prev_when = datetime.date(prev_when); |
1671
c813b69ae279
mod_http_muc_log: Fix passing dates trough util.datetime twice;
Kim Alvefur <zash@zash.se>
parents:
1654
diff
changeset
|
218 module:log("debug", "Previous message: %s", prev_when); |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
219 else |
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
220 prev_when = ""; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
221 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
222 |
1579
9e784ddac236
mod_http_muc_log: Include charset in Content-Type header
Kim Alvefur <zash@zash.se>
parents:
1578
diff
changeset
|
223 response.headers.content_type = "text/html; charset=utf-8"; |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
224 return render(template, { |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
225 title = ("%s - %s"):format(get_room(room):get_name(), date); |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
226 jid = get_room(room).jid; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
227 lines = logs; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
228 links = { |
1606
2c8b985ebde5
mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents:
1605
diff
changeset
|
229 { href = "./", rel = "up", text = "Back to calendar" }, |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
230 { href = prev_when, rel = "prev", text = prev_when}, |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
231 { href = next_when, rel = "next", text = next_when}, |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
232 }; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
233 }); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
234 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
235 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
236 local function list_rooms(event) |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
237 local response = event.response; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
238 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
|
239 for room in each_room() do |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
240 if public_room(room) then |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
241 room_list[i], i = { |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
242 href = get_link(jid_split(room.jid), nil); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
243 name = room:get_name(); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
244 description = room:get_description(); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
245 }, i + 1; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
246 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
247 end |
1576
91b91052e0e8
mod_http_muc_log: Send a HTML mime type with responses
Kim Alvefur <zash@zash.se>
parents:
1575
diff
changeset
|
248 |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
249 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
|
250 return render(template, { |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
251 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
|
252 jid = module.host; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
253 rooms = room_list; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
254 }); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
255 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
256 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
257 local cache = setmetatable({}, {__mode = 'v'}); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
258 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
259 local function with_cache(f) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
260 return function (event, path) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
261 local request, response = event.request, event.response; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
262 local ckey = path or ""; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
263 local cached = cache[ckey]; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
264 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
265 if cached then |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
266 local etag = cached.etag; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
267 local if_none_match = request.headers.if_none_match; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
268 if etag == if_none_match then |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
269 module:log("debug", "Client cache hit"); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
270 return 304; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
271 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
272 module:log("debug", "Server cache hit"); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
273 response.headers.etag = etag; |
1579
9e784ddac236
mod_http_muc_log: Include charset in Content-Type header
Kim Alvefur <zash@zash.se>
parents:
1578
diff
changeset
|
274 response.headers.content_type = "text/html; charset=utf-8"; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
275 return cached[1]; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
276 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
277 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
278 local start = gettime(); |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
279 local rendered = f(event, path); |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
280 module:log("debug", "Rendering took %dms", math.floor( (gettime() - start) * 1000 + 0.5)); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
281 |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
282 if type(rendered) == "string" then |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
283 local etag = uuid(); |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
284 cached = { rendered, etag = etag, date = datetime.date() }; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
285 response.headers.etag = etag; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
286 cache[ckey] = cached; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
287 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
288 |
1579
9e784ddac236
mod_http_muc_log: Include charset in Content-Type header
Kim Alvefur <zash@zash.se>
parents:
1578
diff
changeset
|
289 response.headers.content_type = "text/html; charset=utf-8"; |
1654
1a6d6221c5f6
mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1625
diff
changeset
|
290 return rendered; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
291 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
292 end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
293 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
294 -- How is cache invalidation a hard problem? ;) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
295 module:hook("muc-broadcast-message", function (event) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
296 local room = event.room; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
297 local room_name = jid_split(room.jid); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
298 local today = datetime.date(); |
1581
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
299 cache[get_link(room_name)] = nil; |
9f6cd252d233
mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents:
1580
diff
changeset
|
300 cache[get_link(room_name, today)] = nil; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
301 end); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
302 |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
303 module:provides("http", { |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
304 route = { |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
305 ["GET /"] = list_rooms; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
306 ["GET /*"] = with_cache(logs_page); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
307 }; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
308 }); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
309 |