Mercurial > prosody-modules
diff mod_muc_log/mod_muc_log.lua @ 85:83494de806a4
mod_muc_log: Do not log other muc-component's rooms then the module was loaded for. Do neither log nor provide access to possible existing log if a room is private. (thx flo for spotting this)
author | Thilo Cestonaro <thilo@cestona.ro> |
---|---|
date | Sun, 08 Nov 2009 18:35:53 +0100 |
parents | 9ceeab822e40 |
children | fc7055efd568 |
line wrap: on
line diff
--- a/mod_muc_log/mod_muc_log.lua Sat Nov 07 00:37:51 2009 +0100 +++ b/mod_muc_log/mod_muc_log.lua Sun Nov 08 18:35:53 2009 +0100 @@ -12,6 +12,7 @@ local datamanager = require "util.datamanager"; local data_load, data_store, data_getpath = datamanager.load, datamanager.store, datamanager.getpath; local datastore = "muc_log"; +local muc_host = module:get_host(); local config = {}; @@ -100,13 +101,13 @@ path = path:gsub("/[^/]*$", ""); -- check existance - local attributes = lfs.attributes(path); - if attributes.mode ~= "directory" then + local attributes, err = lfs.attributes(path); + if attributes == nil or attributes.mode ~= "directory" then module:log("warn", "muc_log folder isn't a folder: %s", path); return false; end - attributes = lfs.attributes(path .. "/" .. today); + attributes, err = lfs.attributes(path .. "/" .. today); if attributes == nil then return lfs.mkdir(path .. "/" .. today); elseif attributes.mode == "directory" then @@ -125,14 +126,18 @@ local node, host, resource = splitJid(stanza.attr.to); if node ~= nil and host ~= nil then local bare = node .. "@" .. host; - if prosody.hosts[host] ~= nil and prosody.hosts[host].muc ~= nil and prosody.hosts[host].muc.rooms[bare] ~= nil then + if host == muc_host and prosody.hosts[host] ~= nil and prosody.hosts[host].muc ~= nil and prosody.hosts[host].muc.rooms[bare] ~= nil then local room = prosody.hosts[host].muc.rooms[bare] local today = os.date("%y%m%d"); local now = os.date("%X") local mucTo = nil local mucFrom = nil; local alreadyJoined = false; - + + if room._data.hidden then -- do not log any data of private rooms + return; + end + if stanza.name == "presence" and stanza.attr.type == nil then mucFrom = stanza.attr.to; if room._occupants ~= nil and room._occupants[stanza.attr.to] ~= nil then -- if true, the user has already joined the room @@ -248,9 +253,11 @@ local function generateRoomListSiteContent() local rooms = ""; for host, config in pairs(prosody.hosts) do - if prosody.hosts[host].muc ~= nil then + if host == muc_host and prosody.hosts[host].muc ~= nil then for jid, room in pairs(prosody.hosts[host].muc.rooms) do - rooms = rooms .. html.hosts.bit:gsub("###JID###", jid); + if not room._data.hidden then + rooms = rooms .. html.hosts.bit:gsub("###JID###", jid); + end end end end @@ -263,16 +270,28 @@ local tmp; local node, host, resource = splitJid(bareRoomJid); local path = data_getpath(node, host, datastore); + local room = nil; + local attributes = nil; + path = path:gsub("/[^/]*$", ""); - for file in lfs.dir(path) do - local year, month, day = file:match("^(%d%d)(%d%d)(%d%d)"); - if year ~= nil and month ~= nil and day ~= nil and - year ~= "" and month ~= "" and day ~= "" - then - tmp = html.days.bit; - tmp = tmp:gsub("###JID###", bareRoomJid); - tmp = tmp:gsub("###YEAR###", year):gsub("###MONTH###", month):gsub("###DAY###", day); - days = tmp .. days; + attributes = lfs.attributes(path); + if host == muc_host and prosody.hosts[host] ~= nil and prosody.hosts[host].muc ~= nil and prosody.hosts[host].muc.rooms[bareRoomJid] ~= nil then + room = prosody.hosts[host].muc.rooms[bareRoomJid]; + if room._data.hidden then + room = nil + end + end + if attributes ~= nil and room ~= nil then + for file in lfs.dir(path) do + local year, month, day = file:match("^(%d%d)(%d%d)(%d%d)"); + if year ~= nil and month ~= nil and day ~= nil and + year ~= "" and month ~= "" and day ~= "" + then + tmp = html.days.bit; + tmp = tmp:gsub("###JID###", bareRoomJid); + tmp = tmp:gsub("###YEAR###", year):gsub("###MONTH###", month):gsub("###DAY###", day); + days = tmp .. days; + end end end if days ~= "" then