Mercurial > prosody-modules
annotate mod_mam_muc/mod_mam_muc.lua @ 4362:116c88c28532
mod_http_admin_api: restructure group-related info in API
- Return the members of the group right in the get_group_by_id
call. This is an O(1) of extra work.
- Remove the groups attribute from get_user_by_name as that is
O(n) of work and rarely immediately needed.
The replacement for the group membership information in the user
is for now to use the group API and iterate; future work may fix
that.
author | Jonas Schäfer <jonas@wielicki.name> |
---|---|
date | Wed, 20 Jan 2021 15:30:29 +0100 |
parents | 264eab9d501c |
children |
rev | line source |
---|---|
1313 | 1 -- XEP-0313: Message Archive Management for Prosody MUC |
2626
17883c405df3
mod_mam_muc: Shorten some lines [luacheck]
Kim Alvefur <zash@zash.se>
parents:
2507
diff
changeset
|
2 -- Copyright (C) 2011-2017 Kim Alvefur |
820 | 3 -- |
4 -- This file is MIT/X11 licensed. | |
5 | |
1973
9329a11c03a6
mod_mam_muc: Add guard to prevent loading on normal hosts
Kim Alvefur <zash@zash.se>
parents:
1865
diff
changeset
|
6 if module:get_host_type() ~= "component" then |
9329a11c03a6
mod_mam_muc: Add guard to prevent loading on normal hosts
Kim Alvefur <zash@zash.se>
parents:
1865
diff
changeset
|
7 module:log("error", "mod_%s should be loaded only on a MUC component, not normal hosts", module.name); |
9329a11c03a6
mod_mam_muc: Add guard to prevent loading on normal hosts
Kim Alvefur <zash@zash.se>
parents:
1865
diff
changeset
|
8 return; |
9329a11c03a6
mod_mam_muc: Add guard to prevent loading on normal hosts
Kim Alvefur <zash@zash.se>
parents:
1865
diff
changeset
|
9 end |
9329a11c03a6
mod_mam_muc: Add guard to prevent loading on normal hosts
Kim Alvefur <zash@zash.se>
parents:
1865
diff
changeset
|
10 |
3036
f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
Kim Alvefur <zash@zash.se>
parents:
2949
diff
changeset
|
11 -- Note: Can't implement urn:xmpp:mam:2 because we catch messages after |
f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
Kim Alvefur <zash@zash.se>
parents:
2949
diff
changeset
|
12 -- they have already been broadcast, so they can no longer be modified. |
f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
Kim Alvefur <zash@zash.se>
parents:
2949
diff
changeset
|
13 |
f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
Kim Alvefur <zash@zash.se>
parents:
2949
diff
changeset
|
14 local xmlns_mam = "urn:xmpp:mam:1"; |
820 | 15 local xmlns_delay = "urn:xmpp:delay"; |
16 local xmlns_forward = "urn:xmpp:forward:0"; | |
2627
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
17 local xmlns_st_id = "urn:xmpp:sid:0"; |
2721
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
18 local xmlns_muc_user = "http://jabber.org/protocol/muc#user"; |
2716
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
19 local muc_form_enable = "muc#roomconfig_enablearchiving" |
820 | 20 |
21 local st = require "util.stanza"; | |
2497
c6761ebe613b
mod_mam_muc: Use util.rsm (fixes #829, depends on a recent 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2429
diff
changeset
|
22 local rsm = require "util.rsm"; |
820 | 23 local jid_bare = require "util.jid".bare; |
24 local jid_split = require "util.jid".split; | |
2627
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
25 local jid_prep = require "util.jid".prep; |
1536
4fb280768efc
mod_mam_muc: Add missing import and change the namespace to MAM v0.3
Kim Alvefur <zash@zash.se>
parents:
1535
diff
changeset
|
26 local dataform = require "util.dataforms".new; |
1551
5127f4db9d39
mod_mam_muc: Try to use new MUC API for getting room objects (fixes queries to not yet initialized rooms)
Kim Alvefur <zash@zash.se>
parents:
1548
diff
changeset
|
27 local it = require"util.iterators"; |
1534
4dd6eebc8fbd
mod_mam_muc: Minor moving about of variables
Kim Alvefur <zash@zash.se>
parents:
1533
diff
changeset
|
28 |
1551
5127f4db9d39
mod_mam_muc: Try to use new MUC API for getting room objects (fixes queries to not yet initialized rooms)
Kim Alvefur <zash@zash.se>
parents:
1548
diff
changeset
|
29 -- Support both old and new MUC code |
1534
4dd6eebc8fbd
mod_mam_muc: Minor moving about of variables
Kim Alvefur <zash@zash.se>
parents:
1533
diff
changeset
|
30 local mod_muc = module:depends"muc"; |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
31 local rooms = rawget(mod_muc, "rooms"); |
3036
f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
Kim Alvefur <zash@zash.se>
parents:
2949
diff
changeset
|
32 if not rooms then |
f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
Kim Alvefur <zash@zash.se>
parents:
2949
diff
changeset
|
33 module:log("warn", "mod_mam_muc is compatible with Prosody up to 0.10.x, use mod_muc_mam with later versions"); |
f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
Kim Alvefur <zash@zash.se>
parents:
2949
diff
changeset
|
34 module:depends("muc_mam"); |
f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
Kim Alvefur <zash@zash.se>
parents:
2949
diff
changeset
|
35 return; |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
36 end |
3036
f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
Kim Alvefur <zash@zash.se>
parents:
2949
diff
changeset
|
37 local each_room = function() return it.values(rooms); end; |
f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
Kim Alvefur <zash@zash.se>
parents:
2949
diff
changeset
|
38 local get_room_from_jid = function (jid) return rooms[jid]; end |
820 | 39 |
2498
e065e94f0ac6
mod_mam_muc: Remove fallback for util.stanza.is_stanza, it should be available
Kim Alvefur <zash@zash.se>
parents:
2497
diff
changeset
|
40 local is_stanza = st.is_stanza; |
820 | 41 local tostring = tostring; |
42 local time_now = os.time; | |
43 local m_min = math.min; | |
44 local timestamp, timestamp_parse = require "util.datetime".datetime, require "util.datetime".parse; | |
2831
d65868fed77a
mod_mam_muc: Copy max_archive_query_results option from mod_mam
Kim Alvefur <zash@zash.se>
parents:
2723
diff
changeset
|
45 local default_max_items, max_max_items = 20, module:get_option_number("max_archive_query_results", 50); |
2718
02d688ba7739
mod_mam_muc: Make calculation of max history length more like in mod_muc
Kim Alvefur <zash@zash.se>
parents:
2716
diff
changeset
|
46 |
02d688ba7739
mod_mam_muc: Make calculation of max history length more like in mod_muc
Kim Alvefur <zash@zash.se>
parents:
2716
diff
changeset
|
47 local default_history_length = 20; |
02d688ba7739
mod_mam_muc: Make calculation of max history length more like in mod_muc
Kim Alvefur <zash@zash.se>
parents:
2716
diff
changeset
|
48 local max_history_length = module:get_option_number("max_history_messages", math.huge); |
02d688ba7739
mod_mam_muc: Make calculation of max history length more like in mod_muc
Kim Alvefur <zash@zash.se>
parents:
2716
diff
changeset
|
49 |
02d688ba7739
mod_mam_muc: Make calculation of max history length more like in mod_muc
Kim Alvefur <zash@zash.se>
parents:
2716
diff
changeset
|
50 local function get_historylength(room) |
02d688ba7739
mod_mam_muc: Make calculation of max history length more like in mod_muc
Kim Alvefur <zash@zash.se>
parents:
2716
diff
changeset
|
51 return math.min(room._data.history_length or default_history_length, max_history_length); |
02d688ba7739
mod_mam_muc: Make calculation of max history length more like in mod_muc
Kim Alvefur <zash@zash.se>
parents:
2716
diff
changeset
|
52 end |
820 | 53 |
1143
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
54 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
|
55 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
|
56 |
1571
eed7db9f3157
mod_mam_muc, mod_http_muc_log: Change store name from 'archive2' to 'muc_log' to distinguish it from personal MAM archives. Old data will require migration.
Kim Alvefur <zash@zash.se>
parents:
1551
diff
changeset
|
57 local archive_store = "muc_log"; |
1311
27b2a357c73c
mod_mam_muc: porting archive checks from mod_mam (to avoid tracebacks about calling null functions)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
1279
diff
changeset
|
58 local archive = module:open_store(archive_store, "archive"); |
2031
f21147d56bc4
mod_mam_muc: Yell loudly when archive store can't be opened
Kim Alvefur <zash@zash.se>
parents:
1973
diff
changeset
|
59 |
f21147d56bc4
mod_mam_muc: Yell loudly when archive store can't be opened
Kim Alvefur <zash@zash.se>
parents:
1973
diff
changeset
|
60 if archive.name == "null" or not archive.find then |
f21147d56bc4
mod_mam_muc: Yell loudly when archive store can't be opened
Kim Alvefur <zash@zash.se>
parents:
1973
diff
changeset
|
61 if not archive.find then |
2626
17883c405df3
mod_mam_muc: Shorten some lines [luacheck]
Kim Alvefur <zash@zash.se>
parents:
2507
diff
changeset
|
62 module:log("error", "Attempt to open archive storage returned a driver without archive API support"); |
17883c405df3
mod_mam_muc: Shorten some lines [luacheck]
Kim Alvefur <zash@zash.se>
parents:
2507
diff
changeset
|
63 module:log("error", "mod_%s does not support archiving", |
17883c405df3
mod_mam_muc: Shorten some lines [luacheck]
Kim Alvefur <zash@zash.se>
parents:
2507
diff
changeset
|
64 archive._provided_by or archive.name and "storage_"..archive.name.."(?)" or "<unknown>"); |
2031
f21147d56bc4
mod_mam_muc: Yell loudly when archive store can't be opened
Kim Alvefur <zash@zash.se>
parents:
1973
diff
changeset
|
65 else |
f21147d56bc4
mod_mam_muc: Yell loudly when archive store can't be opened
Kim Alvefur <zash@zash.se>
parents:
1973
diff
changeset
|
66 module:log("error", "Attempt to open archive storage returned null driver"); |
f21147d56bc4
mod_mam_muc: Yell loudly when archive store can't be opened
Kim Alvefur <zash@zash.se>
parents:
1973
diff
changeset
|
67 end |
f21147d56bc4
mod_mam_muc: Yell loudly when archive store can't be opened
Kim Alvefur <zash@zash.se>
parents:
1973
diff
changeset
|
68 module:log("info", "See https://prosody.im/doc/storage and https://prosody.im/doc/archiving for more information"); |
f21147d56bc4
mod_mam_muc: Yell loudly when archive store can't be opened
Kim Alvefur <zash@zash.se>
parents:
1973
diff
changeset
|
69 return false; |
1311
27b2a357c73c
mod_mam_muc: porting archive checks from mod_mam (to avoid tracebacks about calling null functions)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
1279
diff
changeset
|
70 end |
27b2a357c73c
mod_mam_muc: porting archive checks from mod_mam (to avoid tracebacks about calling null functions)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
1279
diff
changeset
|
71 |
2716
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
72 local function archiving_enabled(room) |
1542
ccb9dc624ebd
mod_mam_muc: Split logic for determining if logging is enabled into a function
Kim Alvefur <zash@zash.se>
parents:
1541
diff
changeset
|
73 if log_all_rooms then |
ccb9dc624ebd
mod_mam_muc: Split logic for determining if logging is enabled into a function
Kim Alvefur <zash@zash.se>
parents:
1541
diff
changeset
|
74 return true; |
ccb9dc624ebd
mod_mam_muc: Split logic for determining if logging is enabled into a function
Kim Alvefur <zash@zash.se>
parents:
1541
diff
changeset
|
75 end |
2716
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
76 local enabled = room._data.archiving; |
1542
ccb9dc624ebd
mod_mam_muc: Split logic for determining if logging is enabled into a function
Kim Alvefur <zash@zash.se>
parents:
1541
diff
changeset
|
77 if enabled == nil then |
ccb9dc624ebd
mod_mam_muc: Split logic for determining if logging is enabled into a function
Kim Alvefur <zash@zash.se>
parents:
1541
diff
changeset
|
78 return log_by_default; |
ccb9dc624ebd
mod_mam_muc: Split logic for determining if logging is enabled into a function
Kim Alvefur <zash@zash.se>
parents:
1541
diff
changeset
|
79 end |
ccb9dc624ebd
mod_mam_muc: Split logic for determining if logging is enabled into a function
Kim Alvefur <zash@zash.se>
parents:
1541
diff
changeset
|
80 return enabled; |
ccb9dc624ebd
mod_mam_muc: Split logic for determining if logging is enabled into a function
Kim Alvefur <zash@zash.se>
parents:
1541
diff
changeset
|
81 end |
ccb9dc624ebd
mod_mam_muc: Split logic for determining if logging is enabled into a function
Kim Alvefur <zash@zash.se>
parents:
1541
diff
changeset
|
82 |
1314
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
83 local send_history, save_to_history; |
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
84 |
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
85 -- Override history methods for all rooms. |
3036
f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
Kim Alvefur <zash@zash.se>
parents:
2949
diff
changeset
|
86 do -- 0.10 or older |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
87 module:hook("muc-room-created", function (event) |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
88 local room = event.room; |
2716
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
89 if archiving_enabled(room) then |
1533
915bdcb35e79
mod_mam_muc: Restructure initialization
Kim Alvefur <zash@zash.se>
parents:
1532
diff
changeset
|
90 room.send_history = send_history; |
915bdcb35e79
mod_mam_muc: Restructure initialization
Kim Alvefur <zash@zash.se>
parents:
1532
diff
changeset
|
91 room.save_to_history = save_to_history; |
1314
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
92 end |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
93 end); |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
94 |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
95 function module.load() |
1551
5127f4db9d39
mod_mam_muc: Try to use new MUC API for getting room objects (fixes queries to not yet initialized rooms)
Kim Alvefur <zash@zash.se>
parents:
1548
diff
changeset
|
96 for room in each_room() do |
2716
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
97 if archiving_enabled(room) then |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
98 room.send_history = send_history; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
99 room.save_to_history = save_to_history; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
100 end |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
101 end |
1314
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
102 end |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
103 function module.unload() |
1551
5127f4db9d39
mod_mam_muc: Try to use new MUC API for getting room objects (fixes queries to not yet initialized rooms)
Kim Alvefur <zash@zash.se>
parents:
1548
diff
changeset
|
104 for room in each_room() do |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
105 if room.send_history == send_history then |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
106 room.send_history = nil; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
107 room.save_to_history = nil; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
108 end |
1314
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
109 end |
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
110 end |
1533
915bdcb35e79
mod_mam_muc: Restructure initialization
Kim Alvefur <zash@zash.se>
parents:
1532
diff
changeset
|
111 end |
915bdcb35e79
mod_mam_muc: Restructure initialization
Kim Alvefur <zash@zash.se>
parents:
1532
diff
changeset
|
112 |
915bdcb35e79
mod_mam_muc: Restructure initialization
Kim Alvefur <zash@zash.se>
parents:
1532
diff
changeset
|
113 if not log_all_rooms then |
1276
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
114 module:hook("muc-config-form", function(event) |
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
115 local room, form = event.room, event.form; |
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
116 table.insert(form, |
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
117 { |
2716
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
118 name = muc_form_enable, |
1276
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
119 type = "boolean", |
2716
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
120 label = "Enable archiving?", |
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
121 value = archiving_enabled(room), |
1276
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
122 } |
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
123 ); |
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
124 end); |
1143
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
125 |
1276
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
126 module:hook("muc-config-submitted", function(event) |
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
127 local room, fields, changed = event.room, event.fields, event.changed; |
2716
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
128 local new = fields[muc_form_enable]; |
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
129 if new ~= room._data.archiving then |
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
130 room._data.archiving = new; |
1276
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
131 if type(changed) == "table" then |
2716
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
132 changed[muc_form_enable] = true; |
1276
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
133 else |
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
134 event.changed = true; |
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
135 end |
1314
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
136 if new then |
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
137 room.send_history = send_history; |
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
138 room.save_to_history = save_to_history; |
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
139 else |
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
140 room.send_history = nil; |
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
141 room.save_to_history = nil; |
cc9831033f5d
mod_mam_muc: Add and remove method overrides based on configuration instead of modifying room metatable
Kim Alvefur <zash@zash.se>
parents:
1313
diff
changeset
|
142 end |
1143
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
143 end |
1276
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
144 end); |
01dfaf2f2782
mod_mam_muc: Hide logging option from room configuration if set to log all rooms
Kim Alvefur <zash@zash.se>
parents:
1275
diff
changeset
|
145 end |
1143
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
146 |
1546
fff2858c554f
mod_mam_muc: Remove parsing of 'with' field in MAM form, we currently ignore it anyways
Kim Alvefur <zash@zash.se>
parents:
1543
diff
changeset
|
147 -- Note: We ignore the 'with' field as this is internally used for stanza types |
1535
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
148 local query_form = dataform { |
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
149 { name = "FORM_TYPE"; type = "hidden"; value = xmlns_mam; }; |
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
150 { name = "with"; type = "jid-single"; }; |
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
151 { name = "start"; type = "text-single" }; |
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
152 { name = "end"; type = "text-single"; }; |
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
153 }; |
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
154 |
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
155 -- Serve form |
1627
458c80904525
mod_mam_muc: fix <iq type='get' to='room-bare-jid'> query
Stuart Carnie <stuart.carnie@gmail.com>
parents:
1616
diff
changeset
|
156 module:hook("iq-get/bare/"..xmlns_mam..":query", function(event) |
1535
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
157 local origin, stanza = event.origin, event.stanza; |
1691
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
158 origin.send(st.reply(stanza):add_child(query_form:form())); |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
159 return true; |
1535
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
160 end); |
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
161 |
820 | 162 -- Handle archive queries |
1535
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
163 module:hook("iq-set/bare/"..xmlns_mam..":query", function(event) |
820 | 164 local origin, stanza = event.origin, event.stanza; |
2426
deedb77c4f96
mod_mam_muc: Rename room and room JID variables for consistency
Kim Alvefur <zash@zash.se>
parents:
2414
diff
changeset
|
165 local room_jid = stanza.attr.to; |
deedb77c4f96
mod_mam_muc: Rename room and room JID variables for consistency
Kim Alvefur <zash@zash.se>
parents:
2414
diff
changeset
|
166 local room_node = jid_split(room_jid); |
1382
ba17268490b7
mod_mam_muc: Fix to, from on result messages (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents:
1369
diff
changeset
|
167 local orig_from = stanza.attr.from; |
820 | 168 local query = stanza.tags[1]; |
169 | |
2426
deedb77c4f96
mod_mam_muc: Rename room and room JID variables for consistency
Kim Alvefur <zash@zash.se>
parents:
2414
diff
changeset
|
170 local room = get_room_from_jid(room_jid); |
deedb77c4f96
mod_mam_muc: Rename room and room JID variables for consistency
Kim Alvefur <zash@zash.se>
parents:
2414
diff
changeset
|
171 if not room then |
1865
db8b256f51ff
mod_admin_web,mod_carbons,mod_csi_compat,mod_mam_muc,mod_tcpproxy: Explicitly return true
Kim Alvefur <zash@zash.se>
parents:
1691
diff
changeset
|
172 origin.send(st.error_reply(stanza, "cancel", "item-not-found")) |
db8b256f51ff
mod_admin_web,mod_carbons,mod_csi_compat,mod_mam_muc,mod_tcpproxy: Explicitly return true
Kim Alvefur <zash@zash.se>
parents:
1691
diff
changeset
|
173 return true; |
820 | 174 end |
1382
ba17268490b7
mod_mam_muc: Fix to, from on result messages (thanks daurnimator)
Kim Alvefur <zash@zash.se>
parents:
1369
diff
changeset
|
175 local from = jid_bare(orig_from); |
820 | 176 |
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
|
177 -- Banned or not a member of a members-only room? |
2426
deedb77c4f96
mod_mam_muc: Rename room and room JID variables for consistency
Kim Alvefur <zash@zash.se>
parents:
2414
diff
changeset
|
178 local from_affiliation = room:get_affiliation(from); |
1312
a48cf3ccdf9c
mod_mam_muc: Use public API of rooms for authorization check
Kim Alvefur <zash@zash.se>
parents:
1311
diff
changeset
|
179 if from_affiliation == "outcast" -- banned |
2426
deedb77c4f96
mod_mam_muc: Rename room and room JID variables for consistency
Kim Alvefur <zash@zash.se>
parents:
2414
diff
changeset
|
180 or room:get_members_only() and not from_affiliation then -- members-only, not a member |
1865
db8b256f51ff
mod_admin_web,mod_carbons,mod_csi_compat,mod_mam_muc,mod_tcpproxy: Explicitly return true
Kim Alvefur <zash@zash.se>
parents:
1691
diff
changeset
|
181 origin.send(st.error_reply(stanza, "auth", "forbidden")) |
db8b256f51ff
mod_admin_web,mod_carbons,mod_csi_compat,mod_mam_muc,mod_tcpproxy: Explicitly return true
Kim Alvefur <zash@zash.se>
parents:
1691
diff
changeset
|
182 return true; |
820 | 183 end |
184 | |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
185 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
|
186 |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
187 -- Search query parameters |
1546
fff2858c554f
mod_mam_muc: Remove parsing of 'with' field in MAM form, we currently ignore it anyways
Kim Alvefur <zash@zash.se>
parents:
1543
diff
changeset
|
188 local qstart, qend; |
1535
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
189 local form = query:get_child("x", "jabber:x:data"); |
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
190 if form then |
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
191 local err; |
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
192 form, err = query_form:data(form); |
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
193 if err then |
1691
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
194 origin.send(st.error_reply(stanza, "modify", "bad-request", select(2, next(err)))); |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
195 return true; |
1535
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
196 end |
1546
fff2858c554f
mod_mam_muc: Remove parsing of 'with' field in MAM form, we currently ignore it anyways
Kim Alvefur <zash@zash.se>
parents:
1543
diff
changeset
|
197 qstart, qend = form["start"], form["end"]; |
1535
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
198 end |
820 | 199 |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
200 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
|
201 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
|
202 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
|
203 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid timestamp")) |
2500
ec046f915506
mod_mam_muc: Minor syntax change
Kim Alvefur <zash@zash.se>
parents:
2498
diff
changeset
|
204 return true; |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
205 end |
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
206 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
|
207 end |
820 | 208 |
2719
7568157bf998
mod_mam_muc: Add debug logging like in mod_mam
Kim Alvefur <zash@zash.se>
parents:
2718
diff
changeset
|
209 module:log("debug", "Archive query id %s from %s until %s)", |
7568157bf998
mod_mam_muc: Add debug logging like in mod_mam
Kim Alvefur <zash@zash.se>
parents:
2718
diff
changeset
|
210 tostring(qid), |
7568157bf998
mod_mam_muc: Add debug logging like in mod_mam
Kim Alvefur <zash@zash.se>
parents:
2718
diff
changeset
|
211 qstart and timestamp(qstart) or "the dawn of time", |
7568157bf998
mod_mam_muc: Add debug logging like in mod_mam
Kim Alvefur <zash@zash.se>
parents:
2718
diff
changeset
|
212 qend and timestamp(qend) or "now"); |
7568157bf998
mod_mam_muc: Add debug logging like in mod_mam
Kim Alvefur <zash@zash.se>
parents:
2718
diff
changeset
|
213 |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
214 -- RSM stuff |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
215 local qset = rsm.get(query); |
2831
d65868fed77a
mod_mam_muc: Copy max_archive_query_results option from mod_mam
Kim Alvefur <zash@zash.se>
parents:
2723
diff
changeset
|
216 local qmax = m_min(qset and qset.max or default_max_items, max_max_items); |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
217 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
|
218 |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
219 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
|
220 if type(before) ~= "string" then before = nil; end |
820 | 221 |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
222 -- 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
|
223 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
|
224 start = qstart; ["end"] = qend; -- Time range |
1691
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
225 limit = qmax + 1; |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
226 before = before; after = after; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
227 reverse = reverse; |
1547
e98c335c6554
mod_mam_muc: Limit search to groupchat messages (we use the internal 'with' field stanza types)
Kim Alvefur <zash@zash.se>
parents:
1546
diff
changeset
|
228 with = "message<groupchat"; |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
229 }); |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
230 |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
231 if not data then |
1865
db8b256f51ff
mod_admin_web,mod_carbons,mod_csi_compat,mod_mam_muc,mod_tcpproxy: Explicitly return true
Kim Alvefur <zash@zash.se>
parents:
1691
diff
changeset
|
232 origin.send(st.error_reply(stanza, "cancel", "internal-server-error")); |
db8b256f51ff
mod_admin_web,mod_carbons,mod_csi_compat,mod_mam_muc,mod_tcpproxy: Explicitly return true
Kim Alvefur <zash@zash.se>
parents:
1691
diff
changeset
|
233 return true; |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
234 end |
2832
15a9d508c5f7
mod_mam_muc: Pass along the size of the matching set, if returned from storage driver
Kim Alvefur <zash@zash.se>
parents:
2831
diff
changeset
|
235 local total = tonumber(err); |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
236 |
1534
4dd6eebc8fbd
mod_mam_muc: Minor moving about of variables
Kim Alvefur <zash@zash.se>
parents:
1533
diff
changeset
|
237 local msg_reply_attr = { to = stanza.attr.from, from = stanza.attr.to }; |
4dd6eebc8fbd
mod_mam_muc: Minor moving about of variables
Kim Alvefur <zash@zash.se>
parents:
1533
diff
changeset
|
238 |
1691
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
239 local results = {}; |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
240 |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
241 -- Wrap it in stuff and deliver |
1691
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
242 local first, last; |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
243 local count = 0; |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
244 local complete = "true"; |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
245 for id, item, when in data do |
1691
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
246 count = count + 1; |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
247 if count > qmax then |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
248 complete = nil; |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
249 break; |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
250 end |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
251 local fwd_st = st.message(msg_reply_attr) |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
252 :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
|
253 :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
|
254 :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
|
255 |
2833
4f9466be7b46
mod_mam_muc: Add comment describing stripping of <x> tag in results
Kim Alvefur <zash@zash.se>
parents:
2832
diff
changeset
|
256 -- Strip <x> tag, containing the original senders JID, unless the room makes this public |
2721
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
257 if room:get_whois() ~= "anyone" then |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
258 item:maptags(function (tag) |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
259 if tag.name == "x" and tag.attr.xmlns == xmlns_muc_user then |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
260 return nil; |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
261 end |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
262 return tag; |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
263 end); |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
264 end |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
265 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
|
266 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
|
267 end |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
268 item.attr.xmlns = "jabber:client"; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
269 fwd_st:add_child(item); |
820 | 270 |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
271 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
|
272 last = id; |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
273 |
1691
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
274 if reverse then |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
275 results[count] = fwd_st; |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
276 else |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
277 origin.send(fwd_st); |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
278 end |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
279 end |
2500
ec046f915506
mod_mam_muc: Minor syntax change
Kim Alvefur <zash@zash.se>
parents:
2498
diff
changeset
|
280 |
1691
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
281 if reverse then |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
282 for i = #results, 1, -1 do |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
283 origin.send(results[i]); |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
284 end |
2502
f576ac1cad65
mod_mam_muc: Move swapping of reversed variables (like 5fb917b86838 for mod_mam)
Kim Alvefur <zash@zash.se>
parents:
2501
diff
changeset
|
285 first, last = last, first; |
1691
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
286 end |
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
287 |
1138
5c97ee75cadb
mod_mam_muc: Switch to iq-get hook and drop some indentation
Kim Alvefur <zash@zash.se>
parents:
820
diff
changeset
|
288 -- 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
|
289 module:log("debug", "Archive query %s completed", tostring(qid)); |
820 | 290 |
2507
b8a66805459e
mod_mam_muc: Update to XEP-0313 0.5.1
Kim Alvefur <zash@zash.se>
parents:
2502
diff
changeset
|
291 origin.send(st.reply(stanza) |
1691
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
292 :tag("fin", { xmlns = xmlns_mam, queryid = qid, complete = complete }) |
1535
efbb047c01e7
mod_mam_muc: Update to XEP-0313 v 0.3
Kim Alvefur <zash@zash.se>
parents:
1534
diff
changeset
|
293 :add_child(rsm.generate { |
2832
15a9d508c5f7
mod_mam_muc: Pass along the size of the matching set, if returned from storage driver
Kim Alvefur <zash@zash.se>
parents:
2831
diff
changeset
|
294 first = first, last = last, count = total })); |
1691
1a8c791d365f
mod_mam_muc: d20cfc5ba827 .. cd87a2eba8f2 here too (uh, duplicated code)
Kim Alvefur <zash@zash.se>
parents:
1679
diff
changeset
|
295 return true; |
820 | 296 end); |
297 | |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
298 module:hook("muc-get-history", function (event) |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
299 local room = event.room; |
2716
02a7f9fe44fa
mod_mam_muc: Rename various fields from "logging" to "archiving"
Kim Alvefur <zash@zash.se>
parents:
2628
diff
changeset
|
300 if not archiving_enabled(room) then return end |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
301 local room_jid = room.jid; |
2723
ec02ee02a04b
mod_mam_muc: Handle missing maxstanzas (thanks Martin)
Kim Alvefur <zash@zash.se>
parents:
2722
diff
changeset
|
302 local maxstanzas = event.maxstanzas or math.huge; |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
303 local maxchars = event.maxchars; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
304 local since = event.since; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
305 local to = event.to; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
306 |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
307 -- Load all the data! |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
308 local query = { |
2718
02d688ba7739
mod_mam_muc: Make calculation of max history length more like in mod_muc
Kim Alvefur <zash@zash.se>
parents:
2716
diff
changeset
|
309 limit = math.min(maxstanzas, get_historylength(room)); |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
310 start = since; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
311 reverse = true; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
312 with = "message<groupchat"; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
313 } |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
314 local data, err = archive:find(jid_split(room_jid), query); |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
315 |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
316 if not data then |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
317 module:log("error", "Could not fetch history: %s", tostring(err)); |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
318 return |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
319 end |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
320 |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
321 local history, i = {}, 1; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
322 |
2628
fbb26a56a667
mod_mam_muc: Include stanza-id in history replay
Kim Alvefur <zash@zash.se>
parents:
2627
diff
changeset
|
323 for id, item, when in data do |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
324 item.attr.to = to; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
325 item:tag("delay", { xmlns = "urn:xmpp:delay", from = room_jid, stamp = timestamp(when) }):up(); -- XEP-0203 |
2628
fbb26a56a667
mod_mam_muc: Include stanza-id in history replay
Kim Alvefur <zash@zash.se>
parents:
2627
diff
changeset
|
326 item:tag("stanza-id", { xmlns = xmlns_st_id, by = room_jid, id = id }):up(); |
2721
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
327 if room:get_whois() ~= "anyone" then |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
328 item:maptags(function (tag) |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
329 if tag.name == "x" and tag.attr.xmlns == xmlns_muc_user then |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
330 return nil; |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
331 end |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
332 return tag; |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
333 end); |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
334 end |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
335 if maxchars then |
1649
ab4073468dfb
mod_mam_muc: Fix character limit again(?)
Kim Alvefur <zash@zash.se>
parents:
1636
diff
changeset
|
336 local chars = #tostring(item); |
1636
7fa0c41792c7
mod_mam_muc: Fix character limit
Kim Alvefur <zash@zash.se>
parents:
1627
diff
changeset
|
337 if maxchars - chars < 0 then |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
338 break |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
339 end |
1649
ab4073468dfb
mod_mam_muc: Fix character limit again(?)
Kim Alvefur <zash@zash.se>
parents:
1636
diff
changeset
|
340 maxchars = maxchars - chars; |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
341 end |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
342 history[i], i = item, i+1; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
343 -- module:log("debug", tostring(item)); |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
344 end |
1650
66d67f0bae16
mod_mam_muc: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
1649
diff
changeset
|
345 function event.next_stanza() |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
346 i = i - 1; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
347 return history[i]; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
348 end |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
349 return true; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
350 end, 1); |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
351 |
1519
67c80abe742e
mod_mam_muc: Fix add/removal of room method overrides
Kim Alvefur <zash@zash.se>
parents:
1430
diff
changeset
|
352 function send_history(self, to, stanza) |
1278
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
353 local maxchars, maxstanzas, seconds, since; |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
354 local history_tag = stanza:find("{http://jabber.org/protocol/muc}x/history") |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
355 if history_tag then |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
356 module:log("debug", tostring(history_tag)); |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
357 local history_attr = history_tag.attr; |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
358 maxchars = tonumber(history_attr.maxchars); |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
359 maxstanzas = tonumber(history_attr.maxstanzas); |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
360 seconds = tonumber(history_attr.seconds); |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
361 since = history_attr.since; |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
362 if since then |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
363 since = timestamp_parse(since); |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
364 end |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
365 if seconds then |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
366 since = math.max(os.time() - seconds, since or 0); |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
367 end |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
368 end |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
369 |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
370 local event = { |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
371 room = self; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
372 to = to; -- `to` is required to calculate the character count for `maxchars` |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
373 maxchars = maxchars, maxstanzas = maxstanzas, since = since; |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
374 next_stanza = function() end; -- events should define this iterator |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
375 }; |
1278
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
376 |
1543
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
377 for msg in event.next_stanza, event do |
57fb9ce21f9c
mod_mam_muc: Add compatibility with the new MUC code in trunk
Kim Alvefur <zash@zash.se>
parents:
1542
diff
changeset
|
378 self:_route_stanza(msg); |
1278
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
379 end |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
380 end |
40f077b18dfe
mod_mam_muc: Override sending of room history and use archives
Kim Alvefur <zash@zash.se>
parents:
1277
diff
changeset
|
381 |
820 | 382 -- Handle messages |
1519
67c80abe742e
mod_mam_muc: Fix add/removal of room method overrides
Kim Alvefur <zash@zash.se>
parents:
1430
diff
changeset
|
383 function save_to_history(self, stanza) |
2627
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
384 local room_node, room_host = jid_split(self.jid); |
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
385 |
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
386 -- Filter out <stanza-id> that claim to be from us |
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
387 stanza:maptags(function (tag) |
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
388 if tag.name == "stanza-id" and tag.attr.xmlns == xmlns_st_id |
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
389 and jid_prep(tag.attr.by) == self.jid then |
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
390 return nil; |
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
391 end |
2721
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
392 if tag.name == "x" and tag.attr.xmlns == xmlns_muc_user then |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
393 return nil; |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
394 end |
2627
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
395 return tag; |
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
396 end); |
820 | 397 |
2721
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
398 local stored_stanza = stanza; |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
399 |
2722
e32bf5e19acd
mod_mam_muc: Only collect original JID for messages (unavailable presence seems to cause an error)
Kim Alvefur <zash@zash.se>
parents:
2721
diff
changeset
|
400 if stanza.name == "message" and self:get_whois() == "anyone" then |
2721
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
401 stored_stanza = st.clone(stanza); |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
402 local actor = jid_bare(self._occupants[stanza.attr.from].jid); |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
403 local affiliation = self:get_affiliation(actor) or "none"; |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
404 local role = self:get_role(actor) or self:get_default_role(affiliation); |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
405 stored_stanza:add_direct_child(st.stanza("x", { xmlns = xmlns_muc_user }) |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
406 :tag("item", { affiliation = affiliation; role = role; jid = actor })); |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
407 end |
391c508e0b75
mod_mam_muc: Store and return original JID, role and affiliation (fixes #903)
Kim Alvefur <zash@zash.se>
parents:
2720
diff
changeset
|
408 |
1279
2118a2eeb1d5
mod_mam_muc: Override method for storing history messages instead of hooking stanza events
Kim Alvefur <zash@zash.se>
parents:
1278
diff
changeset
|
409 -- Policy check |
3364
264eab9d501c
mod_mam_muc: Log to debug log whether a message is archived or not
Kim Alvefur <zash@zash.se>
parents:
3036
diff
changeset
|
410 if not archiving_enabled(self) then -- Don't log |
264eab9d501c
mod_mam_muc: Log to debug log whether a message is archived or not
Kim Alvefur <zash@zash.se>
parents:
3036
diff
changeset
|
411 module:log("debug", "Not archiving %s", stanza:top_tag()); |
264eab9d501c
mod_mam_muc: Log to debug log whether a message is archived or not
Kim Alvefur <zash@zash.se>
parents:
3036
diff
changeset
|
412 return; |
264eab9d501c
mod_mam_muc: Log to debug log whether a message is archived or not
Kim Alvefur <zash@zash.se>
parents:
3036
diff
changeset
|
413 end |
264eab9d501c
mod_mam_muc: Log to debug log whether a message is archived or not
Kim Alvefur <zash@zash.se>
parents:
3036
diff
changeset
|
414 module:log("debug", "Archiving %s", stanza:top_tag()); |
1143
8098683b6d6f
mod_mam_muc: Allow archiving to be enabled trough in the room configuration
Kim Alvefur <zash@zash.se>
parents:
1142
diff
changeset
|
415 |
820 | 416 -- And stash it |
1385
da9469e68dee
mod_mam_muc: Place stanza type in 'with' column; when sending history, only send messages with type=groupchat
daurnimator <quae@daurnimator.com>
parents:
1382
diff
changeset
|
417 local with = stanza.name |
da9469e68dee
mod_mam_muc: Place stanza type in 'with' column; when sending history, only send messages with type=groupchat
daurnimator <quae@daurnimator.com>
parents:
1382
diff
changeset
|
418 if stanza.attr.type then |
da9469e68dee
mod_mam_muc: Place stanza type in 'with' column; when sending history, only send messages with type=groupchat
daurnimator <quae@daurnimator.com>
parents:
1382
diff
changeset
|
419 with = with .. "<" .. stanza.attr.type |
da9469e68dee
mod_mam_muc: Place stanza type in 'with' column; when sending history, only send messages with type=groupchat
daurnimator <quae@daurnimator.com>
parents:
1382
diff
changeset
|
420 end |
2627
3f166242b460
mod_mam_muc: Add stanza-id tags (updates to XEP-0313 v0.6)
Kim Alvefur <zash@zash.se>
parents:
2626
diff
changeset
|
421 |
3036
f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
Kim Alvefur <zash@zash.se>
parents:
2949
diff
changeset
|
422 archive:append(room_node, nil, stored_stanza, time_now(), with); |
1616
28411e97db94
mod_mam_muc: support to disable presence logging via muc_log_presences
Stuart Carnie <stuart.carnie@gmail.com>
parents:
1571
diff
changeset
|
423 end |
1548
d3c847070618
mod_mam_muc: Store joins and leaves
Kim Alvefur <zash@zash.se>
parents:
1547
diff
changeset
|
424 |
2835
b69ef062806e
mod_mam_muc: Warn if the storage driver is missing the deletion API (instead of a traceback) (thanks asterix)
Kim Alvefur <zash@zash.se>
parents:
2833
diff
changeset
|
425 if not archive.delete then |
b69ef062806e
mod_mam_muc: Warn if the storage driver is missing the deletion API (instead of a traceback) (thanks asterix)
Kim Alvefur <zash@zash.se>
parents:
2833
diff
changeset
|
426 module:log("warn", "Storage driver %s does not support deletion", archive._provided_by); |
b69ef062806e
mod_mam_muc: Warn if the storage driver is missing the deletion API (instead of a traceback) (thanks asterix)
Kim Alvefur <zash@zash.se>
parents:
2833
diff
changeset
|
427 module:log("warn", "Archived message will persist after a room has been destroyed"); |
b69ef062806e
mod_mam_muc: Warn if the storage driver is missing the deletion API (instead of a traceback) (thanks asterix)
Kim Alvefur <zash@zash.se>
parents:
2833
diff
changeset
|
428 else |
b69ef062806e
mod_mam_muc: Warn if the storage driver is missing the deletion API (instead of a traceback) (thanks asterix)
Kim Alvefur <zash@zash.se>
parents:
2833
diff
changeset
|
429 module:hook("muc-room-destroyed", function(event) |
b69ef062806e
mod_mam_muc: Warn if the storage driver is missing the deletion API (instead of a traceback) (thanks asterix)
Kim Alvefur <zash@zash.se>
parents:
2833
diff
changeset
|
430 local room_node = jid_split(event.room.jid); |
b69ef062806e
mod_mam_muc: Warn if the storage driver is missing the deletion API (instead of a traceback) (thanks asterix)
Kim Alvefur <zash@zash.se>
parents:
2833
diff
changeset
|
431 archive:delete(room_node); |
b69ef062806e
mod_mam_muc: Warn if the storage driver is missing the deletion API (instead of a traceback) (thanks asterix)
Kim Alvefur <zash@zash.se>
parents:
2833
diff
changeset
|
432 end); |
b69ef062806e
mod_mam_muc: Warn if the storage driver is missing the deletion API (instead of a traceback) (thanks asterix)
Kim Alvefur <zash@zash.se>
parents:
2833
diff
changeset
|
433 end |
1277
999891a9ae5d
mod_mam_muc: Remove archives when a room is destroyed
Kim Alvefur <zash@zash.se>
parents:
1276
diff
changeset
|
434 |
1141
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
435 -- And role/affiliation changes? |
1091be1c3aba
mod_mam_muc: Switch to new stanza storage API
Kim Alvefur <zash@zash.se>
parents:
1140
diff
changeset
|
436 |
820 | 437 module:add_feature(xmlns_mam); |
1679
c77e9522dc66
mod_mam_muc: Advertise MAM feature on bare JID room disco#info (only effective after prosody 57bc52f67564)
Kim Alvefur <zash@zash.se>
parents:
1650
diff
changeset
|
438 |
c77e9522dc66
mod_mam_muc: Advertise MAM feature on bare JID room disco#info (only effective after prosody 57bc52f67564)
Kim Alvefur <zash@zash.se>
parents:
1650
diff
changeset
|
439 module:hook("muc-disco#info", function(event) |
c77e9522dc66
mod_mam_muc: Advertise MAM feature on bare JID room disco#info (only effective after prosody 57bc52f67564)
Kim Alvefur <zash@zash.se>
parents:
1650
diff
changeset
|
440 event.reply:tag("feature", {var=xmlns_mam}):up(); |
c77e9522dc66
mod_mam_muc: Advertise MAM feature on bare JID room disco#info (only effective after prosody 57bc52f67564)
Kim Alvefur <zash@zash.se>
parents:
1650
diff
changeset
|
441 end); |