Software /
code /
prosody-modules
Comparison
mod_mam_muc/mod_mam_muc.lua @ 1143:8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 10 Aug 2013 21:18:25 +0200 |
parent | 1142:fabdaa0d99e3 |
child | 1144:ccb0c5afe658 |
comparison
equal
deleted
inserted
replaced
1142:fabdaa0d99e3 | 1143:8098683b6d6f |
---|---|
4 -- This file is MIT/X11 licensed. | 4 -- This file is MIT/X11 licensed. |
5 | 5 |
6 local xmlns_mam = "urn:xmpp:mam:tmp"; | 6 local xmlns_mam = "urn:xmpp:mam:tmp"; |
7 local xmlns_delay = "urn:xmpp:delay"; | 7 local xmlns_delay = "urn:xmpp:delay"; |
8 local xmlns_forward = "urn:xmpp:forward:0"; | 8 local xmlns_forward = "urn:xmpp:forward:0"; |
9 local muc_form_config_option = "muc#roomconfig_enablelogging" | |
9 | 10 |
10 local st = require "util.stanza"; | 11 local st = require "util.stanza"; |
11 local rsm = module:require "mod_mam/rsm"; | 12 local rsm = module:require "mod_mam/rsm"; |
12 local jid_bare = require "util.jid".bare; | 13 local jid_bare = require "util.jid".bare; |
13 local jid_split = require "util.jid".split; | 14 local jid_split = require "util.jid".split; |
21 local time_now = os.time; | 22 local time_now = os.time; |
22 local m_min = math.min; | 23 local m_min = math.min; |
23 local timestamp, timestamp_parse = require "util.datetime".datetime, require "util.datetime".parse; | 24 local timestamp, timestamp_parse = require "util.datetime".datetime, require "util.datetime".parse; |
24 local default_max_items, max_max_items = 20, module:get_option_number("max_archive_query_results", 50); | 25 local default_max_items, max_max_items = 20, module:get_option_number("max_archive_query_results", 50); |
25 | 26 |
27 local log_all_rooms = module:get_option_boolean("muc_log_all_rooms", false); | |
28 local log_by_default = module:get_option_boolean("muc_log_by_default", true); | |
26 local advertise_archive = module:get_option_boolean("muc_log_advertise", true); | 29 local advertise_archive = module:get_option_boolean("muc_log_advertise", true); |
27 | 30 |
28 local archive = module:open_store("archive2", "archive"); | 31 local archive = module:open_store("archive2", "archive"); |
29 local rooms = hosts[module.host].modules.muc.rooms; | 32 local rooms = hosts[module.host].modules.muc.rooms; |
33 | |
34 module:hook("muc-config-form", function(event) | |
35 local room, form = event.room, event.form; | |
36 table.insert(form, | |
37 { | |
38 name = muc_form_config_option, | |
39 type = "boolean", | |
40 label = "Enable Logging?", | |
41 value = room._data.logging or false, | |
42 } | |
43 ); | |
44 end); | |
45 | |
46 module:hook("muc-config-submitted", function(event) | |
47 local room, fields, changed = event.room, event.fields, event.changed; | |
48 local new = fields[muc_form_config_option]; | |
49 if new ~= room._data.logging then | |
50 room._data.logging = new; | |
51 if type(changed) == "table" then | |
52 changed[muc_form_config_option] = true; | |
53 else | |
54 event.changed = true; | |
55 end | |
56 end | |
57 end); | |
58 | |
30 | 59 |
31 -- Handle archive queries | 60 -- Handle archive queries |
32 module:hook("iq-get/bare/"..xmlns_mam..":query", function(event) | 61 module:hook("iq-get/bare/"..xmlns_mam..":query", function(event) |
33 local origin, stanza = event.origin, event.stanza; | 62 local origin, stanza = event.origin, event.stanza; |
34 local room = jid_split(stanza.attr.to); | 63 local room = jid_split(stanza.attr.to); |
128 | 157 |
129 local room = jid_split(orig_to); | 158 local room = jid_split(orig_to); |
130 local room_obj = rooms[orig_to] | 159 local room_obj = rooms[orig_to] |
131 if not room_obj then return end -- No such room | 160 if not room_obj then return end -- No such room |
132 | 161 |
162 if not ( log_all_rooms == true -- Logging forced on all rooms | |
163 or (room_obj._data.logging == nil and log_by_default == true) | |
164 or room_obj._data.logging ) then return end -- Don't log | |
165 | |
133 local nick = room_obj._jid_nick[orig_from]; | 166 local nick = room_obj._jid_nick[orig_from]; |
134 if not nick then return end -- Message from someone not in the room? | 167 if not nick then return end -- Message from someone not in the room? |
135 | 168 |
136 stanza.attr.from = nick; | 169 stanza.attr.from = nick; |
137 -- And stash it | 170 -- And stash it |