Software /
code /
prosody-modules
Annotate
mod_mam_muc/mod_mam_muc.lua @ 1268:854a3933cfcd
mod_muc_log_http: URL-encode room names. This allows special characters in room names to work. Ideally this escaping shouldn’t be done in the user visible content, but the module’s template system doesn’t currently allow that.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Sat, 04 Jan 2014 16:50:57 -0500 |
parent | 1146:9fa89dc7a86f |
child | 1275:50c427295767 |
rev | line source |
---|---|
820 | 1 -- XEP-0313: Message Archive Management for Prosody |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
2 -- Copyright (C) 2011-2013 Kim Alvefur |
820 | 3 -- |
4 -- This file is MIT/X11 licensed. | |
5 | |
6 local xmlns_mam = "urn:xmpp:mam:tmp"; | |
7 local xmlns_delay = "urn:xmpp:delay"; | |
8 local xmlns_forward = "urn:xmpp:forward:0"; | |
1143
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
9 local muc_form_config_option = "muc#roomconfig_enablelogging" |
820 | 10 |
11 local st = require "util.stanza"; | |
12 local rsm = module:require "mod_mam/rsm"; | |
13 local jid_bare = require "util.jid".bare; | |
14 local jid_split = require "util.jid".split; | |
15 | |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
16 local getmetatable = getmetatable; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
17 local function is_stanza(x) |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
18 return getmetatable(x) == st.stanza_mt; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
19 end |
820 | 20 |
21 local tostring = tostring; | |
22 local time_now = os.time; | |
23 local m_min = math.min; | |
24 local timestamp, timestamp_parse = require "util.datetime".datetime, require "util.datetime".parse; | |
25 local default_max_items, max_max_items = 20, module:get_option_number("max_archive_query_results", 50); | |
26 | |
1143
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
27 local log_all_rooms = module:get_option_boolean("muc_log_all_rooms", false); |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
28 local log_by_default = module:get_option_boolean("muc_log_by_default", true); |
1142
fabdaa0d99e3
mod_mam_muc: Stap archived messages
Kim Alvefur <zash@zash.se>
parents:
1141
diff
changeset
|
29 local advertise_archive = module:get_option_boolean("muc_log_advertise", true); |
fabdaa0d99e3
mod_mam_muc: Stap archived messages
Kim Alvefur <zash@zash.se>
parents:
1141
diff
changeset
|
30 |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
31 local archive = module:open_store("archive2", "archive"); |
1139
b32d65e41755
mod_mam_muc: Get room objects in a less awkward fashion
Kim Alvefur <zash@zash.se>
parents:
1138
diff
changeset
|
32 local rooms = hosts[module.host].modules.muc.rooms; |
820 | 33 |
1143
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
34 module:hook("muc-config-form", function(event) |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
35 local room, form = event.room, event.form; |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
36 table.insert(form, |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
37 { |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
38 name = muc_form_config_option, |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
39 type = "boolean", |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
40 label = "Enable Logging?", |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
41 value = room._data.logging or false, |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
42 } |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
43 ); |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
44 end); |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
45 |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
46 module:hook("muc-config-submitted", function(event) |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
47 local room, fields, changed = event.room, event.fields, event.changed; |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
48 local new = fields[muc_form_config_option]; |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
49 if new ~= room._data.logging then |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
50 room._data.logging = new; |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
51 if type(changed) == "table" then |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
52 changed[muc_form_config_option] = true; |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
53 else |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
54 event.changed = true; |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
55 end |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
56 end |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
57 end); |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
58 |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
59 |
820 | 60 -- Handle archive queries |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
61 module:hook("iq-get/bare/"..xmlns_mam..":query", function(event) |
820 | 62 local origin, stanza = event.origin, event.stanza; |
1144
ccb0c5afe658
mod_mam_muc: Fix room lookup, should be indexed by bare jid
Kim Alvefur <zash@zash.se>
parents:
1143
diff
changeset
|
63 local room = stanza.attr.to; |
1146
9fa89dc7a86f
mod_mam_muc: Search the rooms archive correctly (copypaste error from mod_mam)
Kim Alvefur <zash@zash.se>
parents:
1145
diff
changeset
|
64 local room_node = jid_split(room); |
820 | 65 local query = stanza.tags[1]; |
66 | |
1139
b32d65e41755
mod_mam_muc: Get room objects in a less awkward fashion
Kim Alvefur <zash@zash.se>
parents:
1138
diff
changeset
|
67 local room_obj = rooms[room]; |
820 | 68 if not room_obj then |
1145
5a00f9bec6e7
mod_mam_muc: Send item-not-found if the requested room does not exist
Kim Alvefur <zash@zash.se>
parents:
1144
diff
changeset
|
69 return origin.send(st.error_reply(stanza, "cancel", "item-not-found")) |
820 | 70 end |
71 local from = jid_bare(stanza.attr.from); | |
72 | |
1140
402cb9b604eb
mod_mam_muc: Send proper error reply when one is not allowed to query archive
Kim Alvefur <zash@zash.se>
parents:
1139
diff
changeset
|
73 -- Banned or not a member of a members-only room? |
820 | 74 if room_obj._affiliations[from] == "outcast" |
75 or room_obj._data.members_only and not room_obj._affiliations[from] then | |
1140
402cb9b604eb
mod_mam_muc: Send proper error reply when one is not allowed to query archive
Kim Alvefur <zash@zash.se>
parents:
1139
diff
changeset
|
76 return origin.send(st.error_reply(stanza, "auth", "forbidden")) |
820 | 77 end |
78 | |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
79 local qid = query.attr.queryid; |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
80 |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
81 -- Search query parameters |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
82 local qstart = query:get_child_text("start"); |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
83 local qend = query:get_child_text("end"); |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
84 module:log("debug", "Archive query, id %s from %s until %s)", |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
85 tostring(qid), qstart or "the dawn of time", qend or "now"); |
820 | 86 |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
87 if qstart or qend then -- Validate timestamps |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
88 local vstart, vend = (qstart and timestamp_parse(qstart)), (qend and timestamp_parse(qend)) |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
89 if (qstart and not vstart) or (qend and not vend) then |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
90 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid timestamp")) |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
91 return true |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
92 end |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
93 qstart, qend = vstart, vend; |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
94 end |
820 | 95 |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
96 -- RSM stuff |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
97 local qset = rsm.get(query); |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
98 local qmax = m_min(qset and qset.max or default_max_items, max_max_items); |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
99 local reverse = qset and qset.before or false; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
100 |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
101 local before, after = qset and qset.before, qset and qset.after; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
102 if type(before) ~= "string" then before = nil; end |
820 | 103 |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
104 -- Load all the data! |
1146
9fa89dc7a86f
mod_mam_muc: Search the rooms archive correctly (copypaste error from mod_mam)
Kim Alvefur <zash@zash.se>
parents:
1145
diff
changeset
|
105 local data, err = archive:find(room_node, { |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
106 start = qstart; ["end"] = qend; -- Time range |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
107 limit = qmax; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
108 before = before; after = after; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
109 reverse = reverse; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
110 total = true; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
111 }); |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
112 |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
113 if not data then |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
114 return origin.send(st.error_reply(stanza, "cancel", "internal-server-error")); |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
115 end |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
116 local count = err; |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
117 |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
118 -- Wrap it in stuff and deliver |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
119 local first, last; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
120 for id, item, when in data do |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
121 local fwd_st = st.message{ to = origin.full_jid } |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
122 :tag("result", { xmlns = xmlns_mam, queryid = qid, id = id }) |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
123 :tag("forwarded", { xmlns = xmlns_forward }) |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
124 :tag("delay", { xmlns = xmlns_delay, stamp = timestamp(when) }):up(); |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
125 |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
126 if not is_stanza(item) then |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
127 item = st.deserialize(item); |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
128 end |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
129 item.attr.xmlns = "jabber:client"; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
130 fwd_st:add_child(item); |
820 | 131 |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
132 if not first then first = id; end |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
133 last = id; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
134 |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
135 origin.send(fwd_st); |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
136 end |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
137 -- That's all folks! |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
138 module:log("debug", "Archive query %s completed", tostring(qid)); |
820 | 139 |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
140 if reverse then first, last = last, first; end |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
141 return origin.send(st.reply(stanza) |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
142 :query(xmlns_mam):add_child(rsm.generate { |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
143 first = first, last = last, count = count })); |
820 | 144 end); |
145 | |
146 -- Handle messages | |
147 local function message_handler(event) | |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
148 local stanza = event.stanza; |
820 | 149 local orig_type = stanza.attr.type or "normal"; |
150 local orig_to = stanza.attr.to; | |
151 local orig_from = stanza.attr.from; | |
152 | |
153 -- Only store groupchat messages | |
154 if not (orig_type == "groupchat" and (stanza:get_child("body") or stanza:get_child("subject"))) then | |
155 return; | |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
156 -- Chat states and other non-content messages, what TODO? |
820 | 157 end |
158 | |
159 local room = jid_split(orig_to); | |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
160 local room_obj = rooms[orig_to] |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
161 if not room_obj then return end -- No such room |
820 | 162 |
1143
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
163 if not ( log_all_rooms == true -- Logging forced on all rooms |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
164 or (room_obj._data.logging == nil and log_by_default == true) |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
165 or room_obj._data.logging ) then return end -- Don't log |
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
166 |
820 | 167 local nick = room_obj._jid_nick[orig_from]; |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
168 if not nick then return end -- Message from someone not in the room? |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
169 |
820 | 170 stanza.attr.from = nick; |
171 -- And stash it | |
1142
fabdaa0d99e3
mod_mam_muc: Stap archived messages
Kim Alvefur <zash@zash.se>
parents:
1141
diff
changeset
|
172 local ok, id = archive:append(room, time_now(), "", stanza); |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
173 stanza.attr.from = orig_from; |
1142
fabdaa0d99e3
mod_mam_muc: Stap archived messages
Kim Alvefur <zash@zash.se>
parents:
1141
diff
changeset
|
174 if ok and advertise_archive then |
fabdaa0d99e3
mod_mam_muc: Stap archived messages
Kim Alvefur <zash@zash.se>
parents:
1141
diff
changeset
|
175 stanza:tag("archived", { xmlns = xmlns_mam, by = jid_bare(orig_to), id = id }):up(); |
fabdaa0d99e3
mod_mam_muc: Stap archived messages
Kim Alvefur <zash@zash.se>
parents:
1141
diff
changeset
|
176 end |
820 | 177 end |
178 | |
179 module:hook("message/bare", message_handler, 2); | |
180 | |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
181 -- TODO should we perhaps log presence as well? |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
182 -- And role/affiliation changes? |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
183 |
820 | 184 module:add_feature(xmlns_mam); |