Software /
code /
prosody-modules
Annotate
mod_muc_log/mod_muc_log.lua @ 56:e9de45beaf5e
mod_muc_log: templify the html stuff
author | Thilo Cestonaro <thilo@cestona.ro> |
---|---|
date | Mon, 19 Oct 2009 22:15:57 +0200 |
parent | 55:d9749ed44f6e |
child | 57:cddcea7c091a |
rev | line source |
---|---|
47
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
1 -- Copyright (C) 2009 Thilo Cestonaro |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
2 -- |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
3 -- This project is MIT/X11 licensed. Please see the |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
4 -- COPYING file in the source package for more information. |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
5 -- |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
6 local prosody = prosody; |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
7 local splitJid = require "util.jid".split; |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
8 local bareJid = require "util.jid".bare; |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
9 local config_get = require "core.configmanager".get; |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
10 local httpserver = require "net.httpserver"; |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
11 local serialize = require "util.serialization".serialize; |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
12 local config = {}; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
13 |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
14 |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
15 --[[ LuaFileSystem |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
16 * URL: http://www.keplerproject.org/luafilesystem/index.html |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
17 * Install: luarocks install luafilesystem |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
18 * ]] |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
19 local lfs = require "lfs"; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
20 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
21 local lom = require "lxp.lom"; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
22 |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
23 |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
24 --[[ |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
25 * Default templates for the html output. |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
26 ]]-- |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
27 local html = {}; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
28 html.doc = [[<html> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
29 <head> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
30 <title>muc_log</title> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
31 </head> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
32 <style type="text/css"> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
33 <!-- |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
34 .timestuff {color: #AAAAAA; text-decoration: none;} |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
35 .muc_join {color: #009900; font-style: italic;} |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
36 .muc_leave {color: #009900; font-style: italic;} |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
37 .muc_statusChange {color: #009900; font-style: italic;} |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
38 .muc_title {color: #009900;} |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
39 .muc_titlenick {color: #009900; font-style: italic;} |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
40 .muc_kick {color: #009900; font-style: italic;} |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
41 .muc_bann {color: #009900; font-style: italic;} |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
42 .muc_name {color: #0000AA;} |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
43 //--> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
44 </style> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
45 <body> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
46 ###BODY_STUFF### |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
47 </body> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
48 </html>]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
49 |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
50 html.hosts = {}; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
51 html.hosts.bit = [[<a href="/muc_log/###JID###">###JID###</a><br />]] |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
52 html.hosts.body = [[<h2>Rooms hosted on this server:</h2><hr /><p> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
53 ###HOSTS_STUFF### |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
54 </p><hr />]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
55 |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
56 html.days = {}; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
57 html.days.bit = [[<a href="/muc_log/###JID###/?year=###YEAR###&month=###MONTH###&day=###DAY###">20###YEAR###/###MONTH###/###DAY###</a><br />]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
58 html.days.body = [[<h2>available logged days of room: ###JID###</h2><hr /><p> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
59 ###DAYS_STUFF### |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
60 </p><hr />]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
61 |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
62 html.day = {}; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
63 html.day.time = [[<a name="###TIME###" href="####TIME###" class="timestuff">[###TIME###]</a> ]]; -- the one ####TIME### need to stay! it will evaluate to e.g. #09:10:56 which is an anker then |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
64 html.day.presence = {}; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
65 html.day.presence.join = [[###TIME_STUFF###<font class="muc_join"> *** ###NICK### joins the room</font><br />]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
66 html.day.presence.leave = [[###TIME_STUFF###<font class="muc_leave"> *** ###NICK### leaves the room</font><br />]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
67 html.day.presence.statusChange = [[###TIME_STUFF###<font class="muc_statusChange"> *** ###NICK### changed his/her status to: ###STATUS###</font><br />]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
68 html.day.message = [[###TIME_STUFF###<font class="muc_name"><###NICK###></font> ###MSG###<br />]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
69 html.day.titleChange = [[###TIME_STUFF###<font class="muc_titlenick"> *** ###NICK### change title to:</font> <font class="muc_title">###MSG###</font><br />]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
70 html.day.kick = [[###TIME_STUFF###<font class="muc_titlenick"> *** ###NICK### kicked ###VICTIM###</font><br />]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
71 html.day.bann = [[###TIME_STUFF###<font class="muc_titlenick"> *** ###NICK### banned ###VICTIM###</font><br />]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
72 html.day.body = [[<h2>room ###JID### logging of 20###YEAR###/###MONTH###/###DAY###</h2><hr /><p> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
73 ###DAY_STUFF### |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
74 </p><hr />]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
75 |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
76 html.help = [[ |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
77 MUC logging is not configured correctly.<br /> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
78 Here is a example config:<br /> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
79 Component "rooms.example.com" "muc"<br /> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
80 modules_enabled = {<br /> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
81 "muc_log";<br /> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
82 }<br /> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
83 muc_log = {<br /> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
84 folder = "/opt/local/var/log/prosody/rooms";<br /> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
85 http_port = "/opt/local/var/log/prosody/rooms";<br /> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
86 }<br /> |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
87 ]]; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
88 |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
89 function validateLogFolder() |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
90 if config.folder == nil then |
52
11d1d4ff8037
mod_muclogging: renamed to mod_muc_log; s/muclogging/muc_log/
Thilo Cestonaro <thilo@cestona.ro>
parents:
51
diff
changeset
|
91 module:log("warn", "muc_log folder isn't configured. configure it please!"); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
92 return false; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
93 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
94 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
95 -- check existance |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
96 local attributes = lfs.attributes(config.folder); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
97 if attributes == nil then |
52
11d1d4ff8037
mod_muclogging: renamed to mod_muc_log; s/muclogging/muc_log/
Thilo Cestonaro <thilo@cestona.ro>
parents:
51
diff
changeset
|
98 module:log("warn", "muc_log folder doesn't exist. create it please!"); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
99 return false; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
100 elseif attributes.mode ~= "directory" then |
52
11d1d4ff8037
mod_muclogging: renamed to mod_muc_log; s/muclogging/muc_log/
Thilo Cestonaro <thilo@cestona.ro>
parents:
51
diff
changeset
|
101 module:log("warn", "muc_log folder isn't a folder, it's a %s. change this please!", attributes.mode); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
102 return false; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
103 end --TODO: check for write rights! |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
104 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
105 return true; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
106 end |
47
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
107 |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
108 function logIfNeeded(e) |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
109 local stanza, origin = e.stanza, e.origin; |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
110 if validateLogFolder() == false then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
111 return; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
112 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
113 |
55
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
114 if (stanza.name == "presence") or |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
115 (stanza.name == "message" and tostring(stanza.attr.type) == "groupchat") |
47
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
116 then |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
117 local node, host, resource = splitJid(stanza.attr.to); |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
118 if node ~= nil and host ~= nil then |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
119 local bare = node .. "@" .. host; |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
120 if prosody.hosts[host] ~= nil and prosody.hosts[host].muc ~= nil and prosody.hosts[host].muc.rooms[bare] ~= nil then |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
121 local room = prosody.hosts[host].muc.rooms[bare] |
55
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
122 local today = os.date("%y%m%d"); |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
123 local now = os.date("%X") |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
124 local fn = config.folder .. "/" .. today .. "_" .. bare .. ".log"; |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
125 local mucFrom = nil; |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
126 |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
127 if stanza.name == "presence" and stanza.attr.type == nil then |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
128 mucFrom = stanza.attr.to; |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
129 else |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
130 for jid, nick in pairs(room._jid_nick) do |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
131 if jid == stanza.attr.from then |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
132 mucFrom = nick; |
47
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
133 end |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
134 end |
55
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
135 end |
47
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
136 |
55
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
137 if mucFrom ~= nil then |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
138 module:log("debug", "try to open room log: %s", fn); |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
139 local f = assert(io.open(fn, "a")); |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
140 local realFrom = stanza.attr.from; |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
141 local realTo = stanza.attr.to; |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
142 stanza.attr.from = mucFrom; |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
143 stanza.attr.to = nil; |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
144 f:write("<stanza time=\"".. now .. "\">" .. tostring(stanza) .. "</stanza>\n"); |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
145 stanza.attr.from = realFrom; |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
146 stanza.attr.to = realTo; |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
147 f:close() |
47
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
148 end |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
149 end |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
150 end |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
151 end |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
152 return; |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
153 end |
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
154 |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
155 function createDoc(body) |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
156 return html.doc:gsub("###BODY_STUFF###", body); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
157 end |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
158 |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
159 local function htmlEscape(t) |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
160 t = t:gsub("\n", "<br />"); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
161 -- TODO link text into klickable link and such stuff |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
162 return t; |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
163 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
164 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
165 function splitQuery(query) |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
166 local ret = {}; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
167 if query == nil then return ret; end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
168 local last = 1; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
169 local idx = query:find("&", last); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
170 while idx ~= nil do |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
171 ret[#ret + 1] = query:sub(last, idx - 1); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
172 last = idx + 1; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
173 idx = query:find("&", last); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
174 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
175 ret[#ret + 1] = query:sub(last); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
176 return ret; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
177 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
178 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
179 function grepRoomJid(url) |
52
11d1d4ff8037
mod_muclogging: renamed to mod_muc_log; s/muclogging/muc_log/
Thilo Cestonaro <thilo@cestona.ro>
parents:
51
diff
changeset
|
180 local tmp = url:sub(string.len("/muc_log/") + 1); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
181 local node = nil; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
182 local host = nil; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
183 local at = nil; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
184 local slash = nil; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
185 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
186 at = tmp:find("@"); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
187 slash = tmp:find("/"); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
188 if slash ~= nil then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
189 slash = slash - 1; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
190 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
191 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
192 if at ~= nil then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
193 node = tmp:sub(1, at - 1); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
194 host = tmp:sub(at + 1, slash); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
195 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
196 return node, host; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
197 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
198 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
199 local function generateRoomListSiteContent() |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
200 local rooms = ""; |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
201 for host, config in pairs(prosody.hosts) do |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
202 if prosody.hosts[host].muc ~= nil then |
55
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
203 for jid, room in pairs(prosody.hosts[host].muc.rooms) do |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
204 rooms = rooms .. html.hosts.bit:gsub("###JID###", jid); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
205 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
206 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
207 end |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
208 |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
209 return html.hosts.body:gsub("###HOSTS_STUFF###", rooms); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
210 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
211 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
212 local function generateDayListSiteContentByRoom(bareRoomJid) |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
213 local days = ""; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
214 local tmp; |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
215 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
216 for file in lfs.dir(config.folder) do |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
217 local year, month, day = file:match("^(%d%d)(%d%d)(%d%d)_" .. bareRoomJid .. ".log"); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
218 if year ~= nil and month ~= nil and day ~= nil and |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
219 year ~= "" and month ~= "" and day ~= "" |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
220 then |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
221 tmp = html.days.bit; |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
222 tmp = tmp:gsub("###JID###", bareRoomJid); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
223 tmp = tmp:gsub("###YEAR###", year); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
224 tmp = tmp:gsub("###MONTH###", month); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
225 tmp = tmp:gsub("###DAY###", day); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
226 days = tmp .. days; |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
227 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
228 end |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
229 if days ~= "" then |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
230 tmp = html.days.body:gsub("###DAYS_STUFF###", days); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
231 return tmp:gsub("###JID###", bareRoomJid); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
232 else |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
233 return generateRoomListSiteContent(); -- fallback |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
234 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
235 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
236 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
237 local function parseDay(bareRoomJid, query) |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
238 local ret = ""; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
239 local year; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
240 local month; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
241 local day; |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
242 local tmp; |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
243 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
244 for _,str in ipairs(query) do |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
245 local name, value; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
246 name, value = str:match("^(%a+)=(%d+)$"); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
247 if name == "year" then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
248 year = value; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
249 elseif name == "month" then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
250 month = value; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
251 elseif name == "day" then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
252 day = value; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
253 else |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
254 log("warn", "unknown query value"); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
255 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
256 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
257 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
258 if year ~= nil and month ~= nil and day ~= nil then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
259 local file = config.folder .. "/" .. year .. month .. day .. "_" .. bareRoomJid .. ".log"; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
260 local f, err = io.open(file, "r"); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
261 if f ~= nil then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
262 local content = f:read("*a"); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
263 local parsed = lom.parse("<xml>" .. content .. "</xml>"); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
264 if parsed ~= nil then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
265 for _,stanza in ipairs(parsed) do |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
266 if stanza.attr ~= nil and stanza.attr.time ~= nil then |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
267 local timeStuff = html.day.time:gsub("###TIME###", stanza.attr.time); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
268 if stanza[1] ~= nil then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
269 local nick; |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
270 |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
271 -- grep nick from "from" resource |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
272 if stanza[1].attr.from ~= nil then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
273 nick = stanza[1].attr.from:match("/(.+)$"); |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
274 end |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
275 |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
276 if stanza[1].tag == "presence" and nick ~= nil then |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
277 |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
278 if stanza[1].attr.type == nil then |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
279 tmp = html.day.presence.join:gsub("###TIME_STUFF###", timeStuff); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
280 ret = ret .. tmp:gsub("###NICK###", nick); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
281 elseif stanza[1].attr.type ~= nil and stanza[1].attr.type == "unavailable" then |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
282 tmp = html.day.presence.leave:gsub("###TIME_STUFF###", timeStuff); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
283 ret = ret .. tmp:gsub("###NICK###", nick); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
284 else |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
285 tmp = html.day.presence.leave:gsub("###TIME_STUFF###", timeStuff); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
286 tmp = tmp:gsub("###STATUS###", stanza[1].attr.type); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
287 ret = ret .. tmp:gsub("###NICK###", nick); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
288 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
289 elseif stanza[1].tag == "message" then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
290 local body; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
291 for _,tag in ipairs(stanza[1]) do |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
292 if tag.tag == "body" then |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
293 body = htmlEscape(tag[1]); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
294 if nick ~= nil then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
295 break; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
296 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
297 elseif tag.tag == "nick" and nick == nil then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
298 nick = tag[1]; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
299 if body ~= nil then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
300 break; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
301 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
302 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
303 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
304 if nick ~= nil and body ~= nil then |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
305 tmp = html.day.message:gsub("###TIME_STUFF###", timeStuff); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
306 tmp = tmp:gsub("###NICK###", nick); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
307 ret = ret .. tmp:gsub("###MSG###", body); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
308 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
309 else |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
310 module:log("info", "unknown stanza subtag in log found. room: %s; day: %s", bareRoomJid, year .. "/" .. month .. "/" .. day); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
311 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
312 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
313 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
314 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
315 else |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
316 module:log("warn", "could not parse room log. room: %s; day: %s", bareRoomJid, year .. "/" .. month .. "/" .. day); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
317 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
318 f:close(); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
319 else |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
320 ret = err; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
321 end |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
322 tmp = html.day.body:gsub("###DAY_STUFF###", ret); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
323 tmp = tmp:gsub("###JID###", bareRoomJid); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
324 tmp = tmp:gsub("###YEAR###", year); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
325 tmp = tmp:gsub("###MONTH###", month); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
326 tmp = tmp:gsub("###DAY###", day); |
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
327 return tmp; |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
328 else |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
329 return generateDayListSiteContentByRoom(bareRoomJid); -- fallback |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
330 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
331 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
332 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
333 function handle_request(method, body, request) |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
334 module:log("debug", "got a request ...") |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
335 local query = splitQuery(request.url.query); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
336 local node, host = grepRoomJid(request.url.path); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
337 |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
338 if validateLogFolder() == false then |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
339 return createDoc(html.help); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
340 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
341 if node ~= nil and host ~= nil then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
342 local bare = node .. "@" .. host; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
343 if prosody.hosts[host] ~= nil and prosody.hosts[host].muc ~= nil and prosody.hosts[host].muc.rooms[bare] ~= nil then |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
344 local room = prosody.hosts[host].muc.rooms[bare]; |
55
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
345 if request.url.query == nil then |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
346 return createDoc(generateDayListSiteContentByRoom(bare)); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
347 else |
55
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
348 return createDoc(parseDay(bare, query)); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
349 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
350 else |
55
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
351 module:log("warn", "room instance not found. bare room jid: %s", tostring(bare)); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
352 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
353 else |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
354 return createDoc(generateRoomListSiteContent()); |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
355 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
356 return; |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
357 end |
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
358 |
55
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
359 config = config_get(module:get_host(), "core", "muc_log"); |
56
e9de45beaf5e
mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents:
55
diff
changeset
|
360 module:log("debug", serialize(config)); |
55
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
361 |
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
362 httpserver.new_from_config({ config.http_port or true }, handle_request, { base = "muc_log" }); |
50
a96d3f37d845
mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents:
47
diff
changeset
|
363 |
55
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
364 module:hook("message/bare", logIfNeeded, 500); |
47
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
365 module:hook("pre-message/bare", logIfNeeded, 500); |
55
d9749ed44f6e
mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents:
54
diff
changeset
|
366 module:hook("presence/full", logIfNeeded, 500); |
47
99ff520519fe
mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff
changeset
|
367 module:hook("pre-presence/full", logIfNeeded, 500); |