annotate mod_archive_muc/mod_archive_muc.lua @ 737:e4ea03b060ed

mod_archive: switch from/to The XEP-0136 is not very explicit about the meening of <from> and <to> elements, but the examples are clear: <from> means it comes from the user in the 'with' attribute of the collection. That is the opposite of what is currently implemented in that module. So for better compatibility with complient clients, this switch the 'from' and 'to' fields
author Olivier Goffart <ogoffart@woboq.com>
date Wed, 04 Jul 2012 14:08:43 +0200
parents bbe4df968099
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
1 -- Prosody IM
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
2 -- Copyright (C) 2010 Dai Zhiwei
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
3 --
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
4 -- This project is MIT/X11 licensed. Please see the
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
5 -- COPYING file in the source package for more information.
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
6 --
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
7
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
8 local st = require "util.stanza";
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
9 local dm = require "util.datamanager";
477
bbe4df968099 mod_archive_muc: A little refactoring to improve code search.
Waqas Hussain <waqas20@gmail.com>
parents: 476
diff changeset
10 local jid_compare, jid_split, jid_bare = require "util.jid".compare, require "util.jid".bare, require "util.jid".split;
bbe4df968099 mod_archive_muc: A little refactoring to improve code search.
Waqas Hussain <waqas20@gmail.com>
parents: 476
diff changeset
11 local datetime = require "util.datetime".datetime;
bbe4df968099 mod_archive_muc: A little refactoring to improve code search.
Waqas Hussain <waqas20@gmail.com>
parents: 476
diff changeset
12 local user_exists = require "core.usermanager".user_exists;
bbe4df968099 mod_archive_muc: A little refactoring to improve code search.
Waqas Hussain <waqas20@gmail.com>
parents: 476
diff changeset
13 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed;
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
14
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
15 local PREFS_DIR = "archive_muc_prefs";
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
16 local ARCHIVE_DIR = "archive_muc";
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
17
243
6202ce4d12d6 mod_archive: added some config options.
shinysky<shinysky1986(AT)gmail.com>
parents: 240
diff changeset
18 local AUTO_MUC_ARCHIVING_ENABLED = module:get_option_boolean("auto_muc_archiving_enabled", true);
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
19
476
2c85635318a5 mod_archive_muc: Fixed a nil global access.
Waqas Hussain <waqas20@gmail.com>
parents: 243
diff changeset
20 local NULL = {};
2c85635318a5 mod_archive_muc: Fixed a nil global access.
Waqas Hussain <waqas20@gmail.com>
parents: 243
diff changeset
21
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
22 module:add_feature("urn:xmpp:archive#preferences");
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
23 module:add_feature("urn:xmpp:archive#management");
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
24
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
25 ------------------------------------------------------------
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
26 -- Utils
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
27 ------------------------------------------------------------
240
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
28 local function trim(s)
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
29 return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
30 end
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
31
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
32 local function clean_up(t)
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
33 for i = #t, 1, -1 do
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
34 if type(t[i]) == 'table' then
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
35 clean_up(t[i]);
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
36 elseif type(t[i]) == 'string' and trim(t[i]) == '' then
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
37 table.remove(t, i);
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
38 end
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
39 end
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
40 end
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
41
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
42 local function load_prefs(node, host)
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
43 return st.deserialize(dm.load(node, host, PREFS_DIR));
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
44 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
45
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
46 local function store_prefs(data, node, host)
240
ef0b580f434d mod_archive_muc: clean up '\n ' in preference stanza
shinysky<shinysky1986(AT)gmail.com>
parents: 238
diff changeset
47 clean_up(data);
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
48 dm.store(node, host, PREFS_DIR, st.preserialize(data));
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
49 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
50
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
51 local function match_jid(rule, id)
477
bbe4df968099 mod_archive_muc: A little refactoring to improve code search.
Waqas Hussain <waqas20@gmail.com>
parents: 476
diff changeset
52 return not rule or jid_compare(id, rule);
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
53 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
54
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
55 local function is_earlier(start, coll_start)
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
56 return not start or start <= coll_start;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
57 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
58
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
59 local function is_later(endtime, coll_start)
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
60 return not endtime or endtime >= coll_start;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
61 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
62
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
63 ------------------------------------------------------------
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
64 -- Preferences
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
65 ------------------------------------------------------------
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
66 local function preferences_handler(event)
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
67 local origin, stanza = event.origin, event.stanza;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
68 module:log("debug", "-- Enter muc preferences_handler()");
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
69 module:log("debug", "-- muc pref:\n%s", tostring(stanza));
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
70 if stanza.attr.type == "get" then
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
71 local data = load_prefs(origin.username, origin.host);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
72 if data then
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
73 origin.send(st.reply(stanza):add_child(data));
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
74 else
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
75 origin.send(st.reply(stanza));
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
76 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
77 elseif stanza.attr.type == "set" then
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
78 local node, host = origin.username, origin.host;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
79 if stanza.tags[1] and stanza.tags[1].name == 'prefs' then
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
80 store_prefs(stanza.tags[1], node, host);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
81 origin.send(st.reply(stanza));
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
82 local user = bare_sessions[node.."@"..host];
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
83 local push = st.iq({type="set"});
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
84 push:add_child(stanza.tags[1]);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
85 for _, res in pairs(user and user.sessions or NULL) do -- broadcast to all resources
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
86 if res.presence then -- to resource
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
87 push.attr.to = res.full_jid;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
88 res.send(push);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
89 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
90 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
91 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
92 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
93 return true;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
94 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
95
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
96 ------------------------------------------------------------
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
97 -- Archive Management
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
98 ------------------------------------------------------------
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
99 local function management_handler(event)
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
100 module:log("debug", "-- Enter muc management_handler()");
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
101 local origin, stanza = event.origin, event.stanza;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
102 local node, host = origin.username, origin.host;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
103 local data = dm.list_load(node, host, ARCHIVE_DIR);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
104 local elem = stanza.tags[1];
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
105 local resset = {}
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
106 if data then
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
107 for i = #data, 1, -1 do
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
108 local forwarded = st.deserialize(data[i]);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
109 local res = (match_jid(elem.attr["with"], forwarded.tags[2].attr.from)
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
110 or match_jid(elem.attr["with"], forwarded.tags[2].attr.to))
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
111 and is_earlier(elem.attr["start"], forwarded.tags[1].attr["stamp"])
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
112 and is_later(elem.attr["end"], forwarded.tags[1].attr["stamp"]);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
113 if res then
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
114 table.insert(resset, forwarded);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
115 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
116 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
117 for i = #resset, 1, -1 do
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
118 local res = st.message({to = stanza.attr.from, id=st.new_id()});
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
119 res:add_child(resset[i]);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
120 origin.send(res);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
121 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
122 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
123 origin.send(st.reply(stanza));
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
124 return true;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
125 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
126
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
127 ------------------------------------------------------------
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
128 -- Message Handler
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
129 ------------------------------------------------------------
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
130 local function is_in(list, jid)
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
131 for _,v in ipairs(list) do
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
132 if match_jid(v:get_text(), jid) then -- JID Matching
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
133 return true;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
134 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
135 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
136 return false;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
137 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
138
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
139 local function apply_pref(node, host, jid)
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
140 local pref = load_prefs(node, host);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
141 if not pref then
243
6202ce4d12d6 mod_archive: added some config options.
shinysky<shinysky1986(AT)gmail.com>
parents: 240
diff changeset
142 return AUTO_MUC_ARCHIVING_ENABLED;
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
143 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
144 local always = pref:child_with_name('always');
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
145 if always and is_in(always, jid) then
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
146 return true;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
147 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
148 local never = pref:child_with_name('never');
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
149 if never and is_in(never, jid) then
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
150 return false;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
151 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
152 local default = pref.attr['default'];
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
153 if default == 'roster' then
477
bbe4df968099 mod_archive_muc: A little refactoring to improve code search.
Waqas Hussain <waqas20@gmail.com>
parents: 476
diff changeset
154 return is_contact_subscribed(node, host, jid_bare(jid));
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
155 elseif default == 'always' then
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
156 return true;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
157 elseif default == 'never' then
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
158 return false;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
159 end
243
6202ce4d12d6 mod_archive: added some config options.
shinysky<shinysky1986(AT)gmail.com>
parents: 240
diff changeset
160 return AUTO_MUC_ARCHIVING_ENABLED;
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
161 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
162
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
163 local function store_msg(msg, node, host)
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
164 local forwarded = st.stanza('forwarded', {xmlns='urn:xmpp:forward:tmp'});
477
bbe4df968099 mod_archive_muc: A little refactoring to improve code search.
Waqas Hussain <waqas20@gmail.com>
parents: 476
diff changeset
165 forwarded:tag('delay', {xmlns='urn:xmpp:delay',stamp=datetime()}):up();
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
166 forwarded:add_child(msg);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
167 dm.list_append(node, host, ARCHIVE_DIR, st.preserialize(forwarded));
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
168 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
169
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
170 local function msg_handler(data)
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
171 module:log("debug", "-- Enter muc msg_handler()");
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
172 local origin, stanza = data.origin, data.stanza;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
173 local body = stanza:child_with_name("body");
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
174 if body then
477
bbe4df968099 mod_archive_muc: A little refactoring to improve code search.
Waqas Hussain <waqas20@gmail.com>
parents: 476
diff changeset
175 local from_node, from_host = jid_split(stanza.attr.from);
bbe4df968099 mod_archive_muc: A little refactoring to improve code search.
Waqas Hussain <waqas20@gmail.com>
parents: 476
diff changeset
176 local to_node, to_host = jid_split(stanza.attr.to);
bbe4df968099 mod_archive_muc: A little refactoring to improve code search.
Waqas Hussain <waqas20@gmail.com>
parents: 476
diff changeset
177 if user_exists(from_node, from_host) and apply_pref(from_node, from_host, stanza.attr.to) then
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
178 store_msg(stanza, from_node, from_host);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
179 end
477
bbe4df968099 mod_archive_muc: A little refactoring to improve code search.
Waqas Hussain <waqas20@gmail.com>
parents: 476
diff changeset
180 if user_exists(to_node, to_host) and apply_pref(to_node, to_host, stanza.attr.from) then
237
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
181 store_msg(stanza, to_node, to_host);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
182 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
183 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
184
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
185 return nil;
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
186 end
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
187
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
188 -- Preferences
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
189 module:hook("iq/self/urn:xmpp:archive#preferences:prefs", preferences_handler);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
190 -- Archive management
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
191 module:hook("iq/self/urn:xmpp:archive#management:query", management_handler);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
192
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
193 module:hook("message/bare", msg_handler, 20);
d900be0dee3e mod_archive: minor fix;
shinysky<shinysky1986(AT)gmail.com>
parents:
diff changeset
194