annotate mod_muc_log/mod_muc_log.lua @ 57:cddcea7c091a

mod_muc_log: set content-type header; escape some html stuff in messages (>, <, \n, http://....)
author Thilo Cestonaro <thilo@cestona.ro>
date Mon, 19 Oct 2009 22:43:30 +0200
parents e9de45beaf5e
children 50e3d5b87119
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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>
57
cddcea7c091a mod_muc_log: set content-type header; escape some html stuff in messages (>, <, \n, http://....)
Thilo Cestonaro <thilo@cestona.ro>
parents: 56
diff changeset
29 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
30 <head>
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
31 <title>muc_log</title>
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
32 </head>
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
33 <style type="text/css">
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
34 <!--
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
35 .timestuff {color: #AAAAAA; text-decoration: none;}
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
36 .muc_join {color: #009900; font-style: italic;}
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
37 .muc_leave {color: #009900; font-style: italic;}
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
38 .muc_statusChange {color: #009900; font-style: italic;}
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
39 .muc_title {color: #009900;}
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
40 .muc_titlenick {color: #009900; font-style: italic;}
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
41 .muc_kick {color: #009900; font-style: italic;}
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
42 .muc_bann {color: #009900; font-style: italic;}
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
43 .muc_name {color: #0000AA;}
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
44 //-->
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
45 </style>
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
46 <body>
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
47 ###BODY_STUFF###
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
48 </body>
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
49 </html>]];
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
50
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
51 html.hosts = {};
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
52 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
53 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
54 ###HOSTS_STUFF###
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
55 </p><hr />]];
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
57 html.days = {};
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
58 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
59 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
60 ###DAYS_STUFF###
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
61 </p><hr />]];
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
62
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
63 html.day = {};
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
64 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
65 html.day.presence = {};
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
66 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
67 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
68 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
69 html.day.message = [[###TIME_STUFF###<font class="muc_name">&lt;###NICK###&gt;</font> ###MSG###<br />]];
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
70 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
71 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
72 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
73 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
74 ###DAY_STUFF###
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
75 </p><hr />]];
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
76
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
77 html.help = [[
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
78 MUC logging is not configured correctly.<br />
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
79 Here is a example config:<br />
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
80 Component "rooms.example.com" "muc"<br />
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
81 &nbsp;&nbsp;modules_enabled = {<br />
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
82 &nbsp;&nbsp;&nbsp;&nbsp;"muc_log";<br />
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
83 &nbsp;&nbsp;}<br />
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
84 &nbsp;&nbsp;muc_log = {<br />
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
85 &nbsp;&nbsp;&nbsp;&nbsp;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
86 &nbsp;&nbsp;&nbsp;&nbsp;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
87 &nbsp;&nbsp;}<br />
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
88 ]];
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
89
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
90 function validateLogFolder()
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
91 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
92 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
93 return false;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
94 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
95
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
96 -- check existance
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
97 local attributes = lfs.attributes(config.folder);
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
98 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
99 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
100 return false;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
101 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
102 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
103 return false;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
104 end --TODO: check for write rights!
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
105
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
106 return true;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
107 end
47
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
108
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
109 function logIfNeeded(e)
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
110 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
111 if validateLogFolder() == false then
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
112 return;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
113 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
114
55
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
115 if (stanza.name == "presence") or
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
116 (stanza.name == "message" and tostring(stanza.attr.type) == "groupchat")
47
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
117 then
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
118 local node, host, resource = splitJid(stanza.attr.to);
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
119 if node ~= nil and host ~= nil then
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
120 local bare = node .. "@" .. host;
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
121 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
122 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
123 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
124 local now = os.date("%X")
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
125 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
126 local mucFrom = nil;
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
127
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
128 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
129 mucFrom = stanza.attr.to;
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
130 else
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
131 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
132 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
133 mucFrom = nick;
47
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
134 end
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
135 end
55
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
136 end
47
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
137
55
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
138 if mucFrom ~= nil then
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
139 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
140 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
141 local realFrom = stanza.attr.from;
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
142 local realTo = stanza.attr.to;
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
143 stanza.attr.from = mucFrom;
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
144 stanza.attr.to = nil;
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
145 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
146 stanza.attr.from = realFrom;
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
147 stanza.attr.to = realTo;
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
148 f:close()
47
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 end
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
153 return;
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
154 end
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
155
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
156 function createDoc(body)
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
157 return html.doc:gsub("###BODY_STUFF###", body);
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
158 end
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
159
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
160 local function htmlEscape(t)
57
cddcea7c091a mod_muc_log: set content-type header; escape some html stuff in messages (>, <, \n, http://....)
Thilo Cestonaro <thilo@cestona.ro>
parents: 56
diff changeset
161 t = t:gsub("<", "&lt;");
cddcea7c091a mod_muc_log: set content-type header; escape some html stuff in messages (>, <, \n, http://....)
Thilo Cestonaro <thilo@cestona.ro>
parents: 56
diff changeset
162 t = t:gsub(">", "&gt;");
cddcea7c091a mod_muc_log: set content-type header; escape some html stuff in messages (>, <, \n, http://....)
Thilo Cestonaro <thilo@cestona.ro>
parents: 56
diff changeset
163 t = t:gsub("(http://[%a%d@%.:/&%?=%-_#]+)", [[<a href="%1">%1</a>]]);
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
164 t = t:gsub("\n", "<br />");
57
cddcea7c091a mod_muc_log: set content-type header; escape some html stuff in messages (>, <, \n, http://....)
Thilo Cestonaro <thilo@cestona.ro>
parents: 56
diff changeset
165 -- TODO do any html escaping stuff ...
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
166 return t;
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
167 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
168
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
169 function splitQuery(query)
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
170 local ret = {};
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
171 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
172 local last = 1;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
173 local idx = query:find("&", last);
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
174 while idx ~= nil do
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, idx - 1);
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
176 last = idx + 1;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
177 idx = query:find("&", last);
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
178 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
179 ret[#ret + 1] = query:sub(last);
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
180 return ret;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
181 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
182
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
183 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
184 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
185 local node = nil;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
186 local host = nil;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
187 local at = nil;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
188 local slash = nil;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
189
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
190 at = tmp:find("@");
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
191 slash = tmp:find("/");
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
192 if slash ~= nil then
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
193 slash = slash - 1;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
194 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
195
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
196 if at ~= nil then
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
197 node = tmp:sub(1, at - 1);
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
198 host = tmp:sub(at + 1, slash);
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
199 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
200 return node, host;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
201 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
202
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
203 local function generateRoomListSiteContent()
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
204 local rooms = "";
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
205 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
206 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
207 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
208 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
209 end
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 end
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
212
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
213 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
214 end
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 local function generateDayListSiteContentByRoom(bareRoomJid)
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
217 local days = "";
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
218 local tmp;
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
219
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
220 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
221 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
222 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
223 year ~= "" and month ~= "" and day ~= ""
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
224 then
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
225 tmp = html.days.bit;
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
226 tmp = tmp:gsub("###JID###", bareRoomJid);
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
227 tmp = tmp:gsub("###YEAR###", year);
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
228 tmp = tmp:gsub("###MONTH###", month);
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
229 tmp = tmp:gsub("###DAY###", day);
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
230 days = tmp .. days;
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
231 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
232 end
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
233 if days ~= "" then
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
234 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
235 return tmp:gsub("###JID###", bareRoomJid);
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
236 else
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
237 return generateRoomListSiteContent(); -- fallback
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
238 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
239 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
240
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
241 local function parseDay(bareRoomJid, query)
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
242 local ret = "";
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
243 local year;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
244 local month;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
245 local day;
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
246 local tmp;
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
247
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
248 for _,str in ipairs(query) do
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
249 local name, value;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
250 name, value = str:match("^(%a+)=(%d+)$");
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
251 if name == "year" then
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
252 year = value;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
253 elseif name == "month" then
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
254 month = value;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
255 elseif name == "day" then
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
256 day = value;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
257 else
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
258 log("warn", "unknown query value");
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
259 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
260 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
261
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
262 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
263 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
264 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
265 if f ~= nil then
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
266 local content = f:read("*a");
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
267 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
268 if parsed ~= nil then
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
269 for _,stanza in ipairs(parsed) do
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
270 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
271 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
272 if stanza[1] ~= nil then
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
273 local nick;
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
274
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
275 -- grep nick from "from" resource
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
276 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
277 nick = stanza[1].attr.from:match("/(.+)$");
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
278 end
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
279
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
280 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
281
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
282 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
283 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
284 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
285 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
286 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
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 else
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
289 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
290 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
291 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
292 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
293 elseif stanza[1].tag == "message" then
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
294 local body;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
295 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
296 if tag.tag == "body" then
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
297 body = htmlEscape(tag[1]);
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
298 if nick ~= nil then
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
299 break;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
300 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
301 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
302 nick = tag[1];
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
303 if body ~= nil then
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
304 break;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
305 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
306 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
307 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
308 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
309 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
310 tmp = tmp:gsub("###NICK###", nick);
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
311 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
312 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
313 else
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
314 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
315 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
316 end
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 end
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 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
321 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
322 f:close();
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
323 else
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
324 ret = err;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
325 end
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
326 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
327 tmp = tmp:gsub("###JID###", bareRoomJid);
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
328 tmp = tmp:gsub("###YEAR###", year);
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
329 tmp = tmp:gsub("###MONTH###", month);
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
330 tmp = tmp:gsub("###DAY###", day);
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
331 return tmp;
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
332 else
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
333 return generateDayListSiteContentByRoom(bareRoomJid); -- fallback
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
334 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
335 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
336
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
337 function handle_request(method, body, request)
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
338 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
339 local query = splitQuery(request.url.query);
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
340 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
341
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
342 if validateLogFolder() == false then
56
e9de45beaf5e mod_muc_log: templify the html stuff
Thilo Cestonaro <thilo@cestona.ro>
parents: 55
diff changeset
343 return createDoc(html.help);
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
344 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
345 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
346 local bare = node .. "@" .. host;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
347 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
348 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
349 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
350 return createDoc(generateDayListSiteContentByRoom(bare));
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
351 else
55
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
352 return createDoc(parseDay(bare, query));
50
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
353 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
354 else
55
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
355 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
356 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
357 else
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
358 return createDoc(generateRoomListSiteContent());
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
359 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
360 return;
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
361 end
a96d3f37d845 mod_muclogging: with http_server part for viewing
Thilo Cestonaro <thilo@cestona.ro>
parents: 47
diff changeset
362
55
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
363 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
364 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
365
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
366 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
367
55
d9749ed44f6e mod_muc_log: make it recognize s2s messages/presences
Thilo Cestonaro <thilo@cestona.ro>
parents: 54
diff changeset
368 module:hook("message/bare", logIfNeeded, 500);
47
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
369 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
370 module:hook("presence/full", logIfNeeded, 500);
47
99ff520519fe mod_muclogging: initial checkin
Thilo Cestonaro <thilo@cestona.ro>
parents:
diff changeset
371 module:hook("pre-presence/full", logIfNeeded, 500);