Mercurial > prosody-modules
comparison mod_muc_log/mod_muc_log.lua @ 976:0428009c1127
mod_muc_log: some cleanup and code refactor also force the plugin storage driver being internal.
| author | Marco Cirillo <maranda@lightwitch.org> |
|---|---|
| date | Mon, 08 Apr 2013 01:00:26 +0200 |
| parents | 0491aa849c91 |
| children | 290c21a5e0ee |
comparison
equal
deleted
inserted
replaced
| 975:08628703456a | 976:0428009c1127 |
|---|---|
| 1 -- Copyright (C) 2009 Thilo Cestonaro | |
| 2 -- | |
| 3 -- This project is MIT/X11 licensed. Please see the | |
| 4 -- COPYING file in the source package for more information. | |
| 5 -- | |
| 6 local prosody = prosody; | 1 local prosody = prosody; |
| 7 local tostring = _G.tostring; | 2 local tostring = tostring; |
| 8 local splitJid = require "util.jid".split; | 3 local splitJid = require "util.jid".split; |
| 9 local config_get = require "core.configmanager".get; | 4 local cm = require "core.configmanager"; |
| 10 local datamanager = require "util.datamanager"; | 5 local datamanager = require "util.datamanager"; |
| 11 local data_load, data_store, data_getpath = datamanager.load, datamanager.store, datamanager.getpath; | 6 local data_load, data_store, data_getpath = datamanager.load, datamanager.store, datamanager.getpath; |
| 12 local datastore = "muc_log"; | 7 local datastore = "muc_log"; |
| 8 local error_reply = require "util.stanza".error_reply; | |
| 9 local storagemanager = storagemanager; | |
| 10 | |
| 13 local mod_host = module:get_host(); | 11 local mod_host = module:get_host(); |
| 14 local config = nil; | 12 local config = nil; |
| 15 | 13 |
| 16 --[[ LuaFileSystem | 14 -- Helper Functions |
| 17 * URL: http://www.keplerproject.org/luafilesystem/index.html | |
| 18 * Install: luarocks install luafilesystem | |
| 19 * ]] | |
| 20 local lfs = require "lfs"; | |
| 21 | 15 |
| 22 local function checkDatastorePathExists(node, host, today, create) | 16 local function inject_storage_config() |
| 23 create = create or false; | 17 local _storage = cm.getconfig()[mod_host].storage; |
| 24 local path = data_getpath(node, host, datastore, "dat", true); | |
| 25 path = path:gsub("/[^/]*$", ""); | |
| 26 | 18 |
| 27 -- check existance | 19 module:log("debug", "injecting storage config..."); |
| 28 local attributes, err = lfs.attributes(path); | 20 if type(_storage) == "string" then cm.getconfig()[mod_host].default_storage = _storage; end |
| 29 if attributes == nil or attributes.mode ~= "directory" then | 21 if type(_storage) == "table" then -- append |
| 30 module:log("warn", "muc_log folder isn't a folder: %s", path); | 22 _storage.muc_log = "internal"; |
| 31 return false; | 23 else |
| 24 cm.getconfig()[mod_host].storage = { muc_log = "internal" }; | |
| 32 end | 25 end |
| 33 | 26 |
| 34 attributes, err = lfs.attributes(path .. "/" .. today); | 27 storagemanager.get_driver(mod_host, "muc_log"); -- init |
| 35 if attributes == nil then | |
| 36 if create then | |
| 37 return lfs.mkdir(path .. "/" .. today); | |
| 38 else | |
| 39 return false; | |
| 40 end | |
| 41 elseif attributes.mode == "directory" then | |
| 42 return true; | |
| 43 end | |
| 44 return false; | |
| 45 end | 28 end |
| 29 | |
| 30 -- Module Definitions | |
| 46 | 31 |
| 47 function logIfNeeded(e) | 32 function logIfNeeded(e) |
| 48 local stanza, origin = e.stanza, e.origin; | 33 local stanza, origin = e.stanza, e.origin; |
| 49 | 34 |
| 50 if (stanza.name == "presence") or | 35 if (stanza.name == "presence") or |
| 92 break; | 77 break; |
| 93 end | 78 end |
| 94 end | 79 end |
| 95 end | 80 end |
| 96 | 81 |
| 97 if (mucFrom ~= nil or mucTo ~= nil) and checkDatastorePathExists(node, host, today, true) then | 82 if (mucFrom ~= nil or mucTo ~= nil) then |
| 98 local data = data_load(node, host, datastore .. "/" .. today); | 83 local data = data_load(node, host, datastore .. "/" .. today); |
| 99 local realFrom = stanza.attr.from; | 84 local realFrom = stanza.attr.from; |
| 100 local realTo = stanza.attr.to; | 85 local realTo = stanza.attr.to; |
| 101 | 86 |
| 102 if data == nil then | 87 if data == nil then |
| 129 | 114 |
| 130 module:hook("message/bare", logIfNeeded, 500); | 115 module:hook("message/bare", logIfNeeded, 500); |
| 131 module:hook("iq/bare", logIfNeeded, 500); | 116 module:hook("iq/bare", logIfNeeded, 500); |
| 132 module:hook("presence/full", logIfNeeded, 500); | 117 module:hook("presence/full", logIfNeeded, 500); |
| 133 | 118 |
| 119 local function reload() | |
| 120 inject_storage_config(); | |
| 121 end | |
| 122 | |
| 123 function module.load() | |
| 124 inject_storage_config(); | |
| 125 end | |
| 126 | |
| 134 module:log("debug", "module mod_muc_log loaded!"); | 127 module:log("debug", "module mod_muc_log loaded!"); |
