author | Kim Alvefur <zash@zash.se> |
Sun, 09 Nov 2014 08:41:36 +0100 | |
changeset 1557 | 876af57a3983 |
parent 1556 | 0b80a02c2e3d |
child 1558 | 4e5d307c96d2 |
permissions | -rw-r--r-- |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 |
local st = require "util.stanza"; |
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; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 |
local archive = module:open_store("archive2", "archive"); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 |
-- 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
|
12 |
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
|
13 |
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
|
14 |
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
|
15 |
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
|
16 |
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
|
17 |
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
|
18 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 |
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
|
20 |
function (jid) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 |
return rooms[jid]; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 |
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
|
25 |
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
|
26 |
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
|
27 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 |
module:depends"http"; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 |
local function template(data) |
1555 | 32 |
--[[ DOC |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 |
Like util.template, but deals with plain text |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 |
Returns a closure that is called with a table of values |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 |
{name} is substituted for values["name"] and is XML escaped |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 |
{name!} is substituted without XML escaping |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 |
{name?} is optional and is replaced with an empty string if no value exists |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 |
]] |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 |
return function(values) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 |
return (data:gsub("{([^!}]-)(%p?)}", function (name, opt) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 |
local value = values[name]; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 |
if value then |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 |
if opt ~= "!" then |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 |
return st.xml_escape(value); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 |
return value; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 |
elseif opt == "?" then |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 |
return ""; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 |
end)); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 |
|
1555 | 54 |
-- TODO Move templates into files |
55 |
local base = template(template[[ |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 |
<!DOCTYPE html> |
1555 | 57 |
<html> |
58 |
<head> |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 |
<meta charset="utf-8"> |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 |
<title>{title}</title> |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 |
<style> |
1555 | 62 |
body{background-color:#eeeeec;margin:1ex 0;padding-bottom:3em;font-family:Arial,Helvetica,sans-serif;} |
1557
876af57a3983
mod_http_muc_log: Fix header margin
Kim Alvefur <zash@zash.se>
parents:
1556
diff
changeset
|
63 |
header,footer{margin:1ex 1em;} |
876af57a3983
mod_http_muc_log: Fix header margin
Kim Alvefur <zash@zash.se>
parents:
1556
diff
changeset
|
64 |
footer{font-size:smaller;color:#babdb6;} |
1555 | 65 |
.content{background-color:white;padding:1em;list-style-position:inside;} |
66 |
nav{font-size:x-large;margin:1ex 2em;} |
|
67 |
nav a{text-decoration:none;} |
|
68 |
nav a.up{font-size:smaller;} |
|
69 |
nav a.next{float:right;} |
|
70 |
a:link,a:visited{color:#2e3436;text-decoration:none;} |
|
71 |
a:link:hover,a:visited:hover{color:#3465a4;} |
|
72 |
ul,ol{padding:0;} |
|
73 |
li{list-style:none;} |
|
74 |
hr{display:none;} |
|
75 |
li time{float:right;font-size:small;opacity:0.2;} |
|
76 |
li:hover time{opacity:1;} |
|
77 |
.room-list .name{font-size:larger;} |
|
78 |
q.body::before,q.body::after{content:"";} |
|
79 |
.presence .verb{font-style:normal;color:#30c030;} |
|
80 |
.presence.unavailable .verb{color:#c03030;} |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 |
</style> |
1555 | 82 |
</head> |
83 |
<body> |
|
1557
876af57a3983
mod_http_muc_log: Fix header margin
Kim Alvefur <zash@zash.se>
parents:
1556
diff
changeset
|
84 |
<header> |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 |
<h1>{title}</h1> |
1555 | 86 |
{header!} |
87 |
</header> |
|
88 |
<hr> |
|
89 |
<div class="content"> |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 |
{body!} |
1555 | 91 |
</div> |
92 |
<hr> |
|
93 |
<footer> |
|
94 |
{footer!} |
|
95 |
<div class="powered-by">Prosody {prosody_version?}</div> |
|
96 |
</footer> |
|
97 |
</head> |
|
98 |
</html> |
|
99 |
]] { prosody_version = prosody.version }); |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 |
local dates_template = template(base{ |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 |
title = "Logs for room {room}"; |
1555 | 103 |
header = [[ |
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
104 |
<nav> |
1555 | 105 |
<a href=".." class="up">Back to room list</a> |
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
106 |
</nav> |
1555 | 107 |
]]; |
108 |
body = [[ |
|
109 |
<nav> |
|
110 |
<ul class="dates"> |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
111 |
{lines!}</ul> |
1555 | 112 |
</nav> |
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
113 |
]]; |
1555 | 114 |
footer = ""; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
115 |
}) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
116 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
117 |
local date_line_template = template[[ |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
118 |
<li><a href="{date}">{date}</a></li> |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
119 |
]]; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
120 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
121 |
local page_template = template(base{ |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
122 |
title = "Logs for room {room} on {date}"; |
1555 | 123 |
header = [[ |
124 |
<nav> |
|
125 |
<a class="up" href=".">Back to date list</a> |
|
126 |
<br> |
|
127 |
<a class="prev" href="{prev}">← {prev}</a> |
|
128 |
<a class="next" href="{next}">{next} →</a> |
|
129 |
</nav> |
|
130 |
]]; |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
131 |
body = [[ |
1555 | 132 |
<ol class="chat-logs"> |
133 |
{logs!}</ol> |
|
134 |
]]; |
|
135 |
footer = [[ |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
136 |
<nav> |
1555 | 137 |
<div> |
138 |
<a class="prev" href="{prev}">← {prev}</a> |
|
139 |
<a class="next" href="{next}">{next} →</a> |
|
140 |
</div> |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
141 |
</nav> |
1555 | 142 |
<script> |
143 |
(function () { |
|
144 |
var timeTags = document.getElementsByTagName("time"); |
|
145 |
var i = 0; |
|
146 |
var date; |
|
147 |
while(timeTags[i]) { |
|
148 |
date = new Date(timeTags[i].getAttribute("datetime")); |
|
149 |
timeTags[i].textContent = date.toLocaleTimeString(); |
|
150 |
timeTags[i].setAttribute("title", date.toString()); |
|
151 |
i++; |
|
152 |
} |
|
153 |
})(); |
|
154 |
</script> |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
155 |
]]; |
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 |
|
1555 | 158 |
local line_template = template[[ |
159 |
<li class="{st_name} {st_type?}" id="{key}"> |
|
160 |
<span class="time"> |
|
161 |
<a href="#{key}"><time datetime="{datetime}">{time}</time></a> |
|
162 |
</span> |
|
163 |
<b class="nick">{nick}</b> |
|
164 |
<em class="verb">{verb?}</em> |
|
165 |
<q class="body">{body?}</q> |
|
166 |
</li> |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
167 |
]]; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
168 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
169 |
local room_list_template = template(base{ |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
170 |
title = "Rooms on {host}"; |
1555 | 171 |
header = ""; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
172 |
body = [[ |
1555 | 173 |
<dl class="room-list"> |
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
174 |
{rooms!} |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
175 |
</dl> |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
176 |
]]; |
1555 | 177 |
footer = ""; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
178 |
}); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
179 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
180 |
local room_item_template = template[[ |
1555 | 181 |
<dt class="name"><a href="{room}/">{name}</a></dt> |
182 |
<dd class="description">{description?}</dd> |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
183 |
]]; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
184 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
185 |
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
|
186 |
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
|
187 |
room = get_room(room); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
188 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
189 |
return room and not room:get_hidden() and not room:get_members_only() and room._data.logging ~= false; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
190 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
191 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
192 |
-- FIXME Invent some more efficient API for this |
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
|
193 |
local function dates_page(event, path) |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
194 |
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
|
195 |
|
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
|
196 |
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
|
197 |
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
|
198 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
199 |
local dates, i = {}, 1; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
200 |
module:log("debug", "Find all dates with messages"); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
201 |
local next_day; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
202 |
repeat |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
203 |
local iter = archive:find(room, { |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
204 |
["start"] = next_day; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
205 |
limit = 1; |
1553
1398d2bbcd42
mod_http_muc_log: List only dates with messages
Kim Alvefur <zash@zash.se>
parents:
1552
diff
changeset
|
206 |
with = "message<groupchat"; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
207 |
}) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
208 |
if not iter then break end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
209 |
next_day = nil; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
210 |
for key, message, when in iter do |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
211 |
next_day = datetime.date(when); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
212 |
dates[i], i = date_line_template{ |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
213 |
date = next_day; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
214 |
}, i + 1; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
215 |
next_day = datetime.parse(next_day .. "T23:59:59Z") + 1; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
216 |
break; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
217 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
218 |
until not next_day; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
219 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
220 |
return dates_template{ |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
221 |
room = room; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
222 |
lines = table.concat(dates); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
223 |
}; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
224 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
225 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
226 |
local function logs_page(event, path) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
227 |
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
|
228 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
229 |
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
|
230 |
room = nodeprep(room); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
231 |
if not room then |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
232 |
return dates_page(event, path); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
233 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
234 |
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
|
235 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
236 |
local logs, i = {}, 1; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
237 |
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
|
238 |
["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
|
239 |
["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
|
240 |
limit = math.huge; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
241 |
-- with = "message<groupchat"; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
242 |
}); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
243 |
if not iter then return 500; end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
244 |
|
1555 | 245 |
local verb, subject, body; |
246 |
for key, item, when in iter do |
|
247 |
body = item:get_child_text("body"); |
|
248 |
subject = item:get_child_text("subject"); |
|
249 |
verb = nil; |
|
250 |
if subject then |
|
251 |
verb = "set the topic to"; |
|
252 |
elseif body and body:sub(1,4) == "/me " then |
|
253 |
verb, body = body:sub(5), nil; |
|
254 |
elseif item.name == "presence" then |
|
255 |
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
|
256 |
end |
1555 | 257 |
logs[i], i = line_template { |
258 |
key = key; |
|
259 |
datetime = datetime.datetime(when); |
|
260 |
time = datetime.time(when); |
|
261 |
verb = verb; |
|
262 |
body = subject or body; |
|
263 |
nick = select(3, jid_split(item.attr.from)); |
|
264 |
st_name = item.name; |
|
265 |
st_type = item.attr.type; |
|
266 |
}, i + 1; |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
267 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
268 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
269 |
local next_when = datetime.parse(date.."T12:00:00Z") + 86400; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
270 |
local prev_when = datetime.parse(date.."T12:00:00Z") - 86400; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
271 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
272 |
module:log("debug", "Find next date with messages"); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
273 |
for key, message, when in archive:find(room, { |
1556
0b80a02c2e3d
mod_http_muc_log: Search for next date with messages from 00:00:00, not 00:00:01
Kim Alvefur <zash@zash.se>
parents:
1555
diff
changeset
|
274 |
["start"] = datetime.parse(date.."T00:00:00Z") + 86400; |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
275 |
limit = math.huge; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
276 |
}) do |
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
277 |
next_when = when; |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
278 |
module:log("debug", "Next message: %s", datetime.datetime(when)); |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
279 |
break; |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
280 |
end |
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
281 |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
282 |
module:log("debug", "Find prev date with messages"); |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
283 |
for key, message, when in archive:find(room, { |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
284 |
["end"] = datetime.parse(date.."T00:00:00Z") - 1; |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
285 |
limit = math.huge; |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
286 |
reverse = true; |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
287 |
}) do |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
288 |
prev_when = when; |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
289 |
module:log("debug", "Previous message: %s", datetime.datetime(when)); |
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
290 |
break; |
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 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
293 |
return page_template{ |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
294 |
room = room; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
295 |
date = date; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
296 |
logs = table.concat(logs); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
297 |
next = datetime.date(next_when); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
298 |
prev = datetime.date(prev_when); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
299 |
}; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
300 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
301 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
302 |
local function list_rooms(event) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
303 |
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
|
304 |
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
|
305 |
if public_room(room) then |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
306 |
room_list[i], i = room_item_template { |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
307 |
room = jid_split(room.jid); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
308 |
name = room:get_name(); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
309 |
description = room:get_description(); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
310 |
subject = room:get_subject(); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
311 |
}, i + 1; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
312 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
313 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
314 |
return room_list_template { |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
315 |
host = module.host; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
316 |
rooms = table.concat(room_list); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
317 |
}; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
318 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
319 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
320 |
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
|
321 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
322 |
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
|
323 |
return function (event, path) |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
324 |
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
|
325 |
local ckey = path or ""; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
326 |
local cached = cache[ckey]; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
327 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
328 |
if cached then |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
329 |
local etag = cached.etag; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
330 |
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
|
331 |
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
|
332 |
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
|
333 |
return 304; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
334 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
335 |
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
|
336 |
response.headers.etag = etag; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
337 |
return cached[1]; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
338 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
339 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
340 |
local start = gettime(); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
341 |
local render = f(event, path); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
342 |
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
|
343 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
344 |
if type(render) == "string" then |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
345 |
local etag = uuid(); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
346 |
cached = { render, etag = etag, date = datetime.date() }; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
347 |
response.headers.etag = etag; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
348 |
cache[ckey] = cached; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
349 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
350 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
351 |
return render; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
352 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
353 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
354 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
355 |
-- 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
|
356 |
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
|
357 |
local room = event.room; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
358 |
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
|
359 |
local today = datetime.date(); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
360 |
cache[ room_name .. "/" .. today ] = nil; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
361 |
if cache[room_name] and cache[room_name].date ~= today then |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
362 |
cache[room_name] = nil; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
363 |
end |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
364 |
end); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
365 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
366 |
module:log("info", module:http_url()); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
367 |
module:provides("http", { |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
368 |
route = { |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
369 |
["GET /"] = list_rooms; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
370 |
["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
|
371 |
}; |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
372 |
}); |
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
373 |