Mercurial > prosody-modules
annotate mod_http_muc_log/mod_http_muc_log.lua @ 1559:96f11a1c8b37
mod_http_muc_log: Include the canonical URL in a meta tag
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 09 Nov 2014 17:14:44 +0100 |
| parents | 4e5d307c96d2 |
| children | 6c6c1fab4ee5 |
| rev | line source |
|---|---|
|
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"> |
|
1559
96f11a1c8b37
mod_http_muc_log: Include the canonical URL in a meta tag
Kim Alvefur <zash@zash.se>
parents:
1558
diff
changeset
|
60 <link rel="canonical" href="{canonical}"> |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 <title>{title}</title> |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 <style> |
| 1555 | 63 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
|
64 header,footer{margin:1ex 1em;} |
|
876af57a3983
mod_http_muc_log: Fix header margin
Kim Alvefur <zash@zash.se>
parents:
1556
diff
changeset
|
65 footer{font-size:smaller;color:#babdb6;} |
| 1555 | 66 .content{background-color:white;padding:1em;list-style-position:inside;} |
| 67 nav{font-size:x-large;margin:1ex 2em;} | |
| 68 nav a{text-decoration:none;} | |
| 69 nav a.up{font-size:smaller;} | |
| 70 nav a.next{float:right;} | |
| 71 a:link,a:visited{color:#2e3436;text-decoration:none;} | |
| 72 a:link:hover,a:visited:hover{color:#3465a4;} | |
| 73 ul,ol{padding:0;} | |
| 74 li{list-style:none;} | |
| 75 hr{display:none;} | |
| 76 li time{float:right;font-size:small;opacity:0.2;} | |
| 77 li:hover time{opacity:1;} | |
| 78 .room-list .name{font-size:larger;} | |
| 79 q.body::before,q.body::after{content:"";} | |
| 80 .presence .verb{font-style:normal;color:#30c030;} | |
| 81 .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
|
82 </style> |
| 1555 | 83 </head> |
| 84 <body> | |
|
1557
876af57a3983
mod_http_muc_log: Fix header margin
Kim Alvefur <zash@zash.se>
parents:
1556
diff
changeset
|
85 <header> |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 <h1>{title}</h1> |
| 1555 | 87 {header!} |
| 88 </header> | |
| 89 <hr> | |
| 90 <div class="content"> | |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
91 {body!} |
| 1555 | 92 </div> |
| 93 <hr> | |
| 94 <footer> | |
| 95 {footer!} | |
| 96 <div class="powered-by">Prosody {prosody_version?}</div> | |
| 97 </footer> | |
|
1558
4e5d307c96d2
mod_http_muc_log: Fix closing tag
Kim Alvefur <zash@zash.se>
parents:
1557
diff
changeset
|
98 </body> |
| 1555 | 99 </html> |
| 100 ]] { 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
|
101 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 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
|
103 title = "Logs for room {room}"; |
| 1555 | 104 header = [[ |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
105 <nav> |
| 1555 | 106 <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
|
107 </nav> |
| 1555 | 108 ]]; |
| 109 body = [[ | |
| 110 <nav> | |
| 111 <ul class="dates"> | |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
112 {lines!}</ul> |
| 1555 | 113 </nav> |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
114 ]]; |
| 1555 | 115 footer = ""; |
|
1549
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 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
118 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
|
119 <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
|
120 ]]; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
121 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
122 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
|
123 title = "Logs for room {room} on {date}"; |
| 1555 | 124 header = [[ |
| 125 <nav> | |
| 126 <a class="up" href=".">Back to date list</a> | |
| 127 <br> | |
| 128 <a class="prev" href="{prev}">← {prev}</a> | |
| 129 <a class="next" href="{next}">{next} →</a> | |
| 130 </nav> | |
| 131 ]]; | |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
132 body = [[ |
| 1555 | 133 <ol class="chat-logs"> |
| 134 {logs!}</ol> | |
| 135 ]]; | |
| 136 footer = [[ | |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
137 <nav> |
| 1555 | 138 <div> |
| 139 <a class="prev" href="{prev}">← {prev}</a> | |
| 140 <a class="next" href="{next}">{next} →</a> | |
| 141 </div> | |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
142 </nav> |
| 1555 | 143 <script> |
| 144 (function () { | |
| 145 var timeTags = document.getElementsByTagName("time"); | |
| 146 var i = 0; | |
| 147 var date; | |
| 148 while(timeTags[i]) { | |
| 149 date = new Date(timeTags[i].getAttribute("datetime")); | |
| 150 timeTags[i].textContent = date.toLocaleTimeString(); | |
| 151 timeTags[i].setAttribute("title", date.toString()); | |
| 152 i++; | |
| 153 } | |
| 154 })(); | |
| 155 </script> | |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
156 ]]; |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
157 }); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
158 |
| 1555 | 159 local line_template = template[[ |
| 160 <li class="{st_name} {st_type?}" id="{key}"> | |
| 161 <span class="time"> | |
| 162 <a href="#{key}"><time datetime="{datetime}">{time}</time></a> | |
| 163 </span> | |
| 164 <b class="nick">{nick}</b> | |
| 165 <em class="verb">{verb?}</em> | |
| 166 <q class="body">{body?}</q> | |
| 167 </li> | |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
168 ]]; |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
169 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
170 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
|
171 title = "Rooms on {host}"; |
| 1555 | 172 header = ""; |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
173 body = [[ |
| 1555 | 174 <dl class="room-list"> |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
175 {rooms!} |
|
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
176 </dl> |
|
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
177 ]]; |
| 1555 | 178 footer = ""; |
|
1549
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 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
181 local room_item_template = template[[ |
| 1555 | 182 <dt class="name"><a href="{room}/">{name}</a></dt> |
| 183 <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
|
184 ]]; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
185 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
186 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
|
187 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
|
188 room = get_room(room); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
189 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
190 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
|
191 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
192 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
193 -- 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
|
194 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
|
195 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
|
196 |
|
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
|
197 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
|
198 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
|
199 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
200 local dates, i = {}, 1; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
201 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
|
202 local next_day; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
203 repeat |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
204 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
|
205 ["start"] = next_day; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
206 limit = 1; |
|
1553
1398d2bbcd42
mod_http_muc_log: List only dates with messages
Kim Alvefur <zash@zash.se>
parents:
1552
diff
changeset
|
207 with = "message<groupchat"; |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
208 }) |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
209 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
|
210 next_day = nil; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
211 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
|
212 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
|
213 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
|
214 date = next_day; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
215 }, i + 1; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
216 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
|
217 break; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
218 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
219 until not next_day; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
220 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
221 return dates_template{ |
|
1559
96f11a1c8b37
mod_http_muc_log: Include the canonical URL in a meta tag
Kim Alvefur <zash@zash.se>
parents:
1558
diff
changeset
|
222 host = module.host; |
|
96f11a1c8b37
mod_http_muc_log: Include the canonical URL in a meta tag
Kim Alvefur <zash@zash.se>
parents:
1558
diff
changeset
|
223 canonical = module:http_url() .. "/" .. path; |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
224 room = room; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
225 lines = table.concat(dates); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
226 }; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
227 end |
|
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 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
|
230 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
|
231 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
232 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
|
233 room = nodeprep(room); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
234 if not room then |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
235 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
|
236 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
237 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
|
238 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
239 local logs, i = {}, 1; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
240 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
|
241 ["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
|
242 ["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
|
243 limit = math.huge; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
244 -- with = "message<groupchat"; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
245 }); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
246 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
|
247 |
| 1555 | 248 local verb, subject, body; |
| 249 for key, item, when in iter do | |
| 250 body = item:get_child_text("body"); | |
| 251 subject = item:get_child_text("subject"); | |
| 252 verb = nil; | |
| 253 if subject then | |
| 254 verb = "set the topic to"; | |
| 255 elseif body and body:sub(1,4) == "/me " then | |
| 256 verb, body = body:sub(5), nil; | |
| 257 elseif item.name == "presence" then | |
| 258 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
|
259 end |
| 1555 | 260 logs[i], i = line_template { |
| 261 key = key; | |
| 262 datetime = datetime.datetime(when); | |
| 263 time = datetime.time(when); | |
| 264 verb = verb; | |
| 265 body = subject or body; | |
| 266 nick = select(3, jid_split(item.attr.from)); | |
| 267 st_name = item.name; | |
| 268 st_type = item.attr.type; | |
| 269 }, i + 1; | |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
270 end |
|
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 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
|
273 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
|
274 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
275 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
|
276 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
|
277 ["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
|
278 limit = math.huge; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
279 }) do |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
280 next_when = when; |
|
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
281 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
|
282 break; |
|
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
283 end |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
284 |
|
1550
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
285 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
|
286 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
|
287 ["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
|
288 limit = math.huge; |
|
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
289 reverse = true; |
|
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
290 }) do |
|
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
291 prev_when = when; |
|
1b2823b41f7f
mod_http_muc_log: Strip some whitespace
Kim Alvefur <zash@zash.se>
parents:
1549
diff
changeset
|
292 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
|
293 break; |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
294 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
295 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
296 return page_template{ |
|
1559
96f11a1c8b37
mod_http_muc_log: Include the canonical URL in a meta tag
Kim Alvefur <zash@zash.se>
parents:
1558
diff
changeset
|
297 canonical = module:http_url() .. "/" .. path; |
|
96f11a1c8b37
mod_http_muc_log: Include the canonical URL in a meta tag
Kim Alvefur <zash@zash.se>
parents:
1558
diff
changeset
|
298 host = module.host; |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
299 room = room; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
300 date = date; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
301 logs = table.concat(logs); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
302 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
|
303 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
|
304 }; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
305 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
306 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
307 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
|
308 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
|
309 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
|
310 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
|
311 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
|
312 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
|
313 name = room:get_name(); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
314 description = room:get_description(); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
315 subject = room:get_subject(); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
316 }, i + 1; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
317 end |
|
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 return room_list_template { |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
320 host = module.host; |
|
1559
96f11a1c8b37
mod_http_muc_log: Include the canonical URL in a meta tag
Kim Alvefur <zash@zash.se>
parents:
1558
diff
changeset
|
321 canonical = module:http_url() .. "/"; |
|
1549
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
322 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
|
323 }; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
324 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
325 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
326 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
|
327 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
328 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
|
329 return function (event, path) |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
330 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
|
331 local ckey = path or ""; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
332 local cached = cache[ckey]; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
333 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
334 if cached then |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
335 local etag = cached.etag; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
336 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
|
337 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
|
338 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
|
339 return 304; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
340 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
341 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
|
342 response.headers.etag = etag; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
343 return cached[1]; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
344 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
345 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
346 local start = gettime(); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
347 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
|
348 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
|
349 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
350 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
|
351 local etag = uuid(); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
352 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
|
353 response.headers.etag = etag; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
354 cache[ckey] = cached; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
355 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
356 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
357 return render; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
358 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
359 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
360 |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
361 -- 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
|
362 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
|
363 local room = event.room; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
364 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
|
365 local today = datetime.date(); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
366 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
|
367 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
|
368 cache[room_name] = nil; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
369 end |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
370 end); |
|
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 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
|
373 module:provides("http", { |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
374 route = { |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
375 ["GET /"] = list_rooms; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
376 ["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
|
377 }; |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
378 }); |
|
f9f8bf82ece7
mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
379 |
