comparison mod_mam/mod_mam.lua @ 1681:d20cfc5ba827

mod_mam: Always return true when a stanza event has been handled
author Kim Alvefur <zash@zash.se>
date Sun, 03 May 2015 13:20:04 +0200
parents 9ee56cc1be2c
children 6b2122630b92
comparison
equal deleted inserted replaced
1680:a9df1f7e273d 1681:d20cfc5ba827
50 local origin, stanza = event.origin, event.stanza; 50 local origin, stanza = event.origin, event.stanza;
51 local user = origin.username; 51 local user = origin.username;
52 if stanza.attr.type == "get" then 52 if stanza.attr.type == "get" then
53 local prefs = prefs_to_stanza(get_prefs(user)); 53 local prefs = prefs_to_stanza(get_prefs(user));
54 local reply = st.reply(stanza):add_child(prefs); 54 local reply = st.reply(stanza):add_child(prefs);
55 return origin.send(reply); 55 origin.send(reply);
56 else -- type == "set" 56 else -- type == "set"
57 local new_prefs = stanza:get_child("prefs", xmlns_mam); 57 local new_prefs = stanza:get_child("prefs", xmlns_mam);
58 local prefs = prefs_from_stanza(new_prefs); 58 local prefs = prefs_from_stanza(new_prefs);
59 local ok, err = set_prefs(user, prefs); 59 local ok, err = set_prefs(user, prefs);
60 if not ok then 60 if not ok then
61 return origin.send(st.error_reply(stanza, "cancel", "internal-server-error", "Error storing preferences: "..tostring(err))); 61 origin.send(st.error_reply(stanza, "cancel", "internal-server-error", "Error storing preferences: "..tostring(err)));
62 end 62 else
63 return origin.send(st.reply(stanza)); 63 origin.send(st.reply(stanza));
64 end 64 end
65 end
66 return true;
65 end); 67 end);
66 68
67 local query_form = dataform { 69 local query_form = dataform {
68 { name = "FORM_TYPE"; type = "hidden"; value = xmlns_mam; }; 70 { name = "FORM_TYPE"; type = "hidden"; value = xmlns_mam; };
69 { name = "with"; type = "jid-single"; }; 71 { name = "with"; type = "jid-single"; };
72 }; 74 };
73 75
74 -- Serve form 76 -- Serve form
75 module:hook("iq-get/self/"..xmlns_mam..":query", function(event) 77 module:hook("iq-get/self/"..xmlns_mam..":query", function(event)
76 local origin, stanza = event.origin, event.stanza; 78 local origin, stanza = event.origin, event.stanza;
77 return origin.send(st.reply(stanza):add_child(query_form:form())); 79 origin.send(st.reply(stanza):add_child(query_form:form()));
80 return true;
78 end); 81 end);
79 82
80 -- Handle archive queries 83 -- Handle archive queries
81 module:hook("iq-set/self/"..xmlns_mam..":query", function(event) 84 module:hook("iq-set/self/"..xmlns_mam..":query", function(event)
82 local origin, stanza = event.origin, event.stanza; 85 local origin, stanza = event.origin, event.stanza;
88 local form = query:get_child("x", "jabber:x:data"); 91 local form = query:get_child("x", "jabber:x:data");
89 if form then 92 if form then
90 local err; 93 local err;
91 form, err = query_form:data(form); 94 form, err = query_form:data(form);
92 if err then 95 if err then
93 return origin.send(st.error_reply(stanza, "modify", "bad-request", select(2, next(err)))) 96 origin.send(st.error_reply(stanza, "modify", "bad-request", select(2, next(err))))
97 return true;
94 end 98 end
95 qwith, qstart, qend = form["with"], form["start"], form["end"]; 99 qwith, qstart, qend = form["with"], form["start"], form["end"];
96 qwith = qwith and jid_bare(qwith); -- dataforms does jidprep 100 qwith = qwith and jid_bare(qwith); -- dataforms does jidprep
97 end 101 end
98 102
125 reverse = reverse; 129 reverse = reverse;
126 total = true; 130 total = true;
127 }); 131 });
128 132
129 if not data then 133 if not data then
130 return origin.send(st.error_reply(stanza, "cancel", "internal-server-error", err)); 134 origin.send(st.error_reply(stanza, "cancel", "internal-server-error", err));
135 return true;
131 end 136 end
132 local count = err; 137 local count = err;
133 138
134 origin.send(st.reply(stanza)) 139 origin.send(st.reply(stanza))
135 local msg_reply_attr = { to = stanza.attr.from, from = stanza.attr.to }; 140 local msg_reply_attr = { to = stanza.attr.from, from = stanza.attr.to };
155 end 160 end
156 -- That's all folks! 161 -- That's all folks!
157 module:log("debug", "Archive query %s completed", tostring(qid)); 162 module:log("debug", "Archive query %s completed", tostring(qid));
158 163
159 if reverse then first, last = last, first; end 164 if reverse then first, last = last, first; end
160 return origin.send(st.message(msg_reply_attr) 165 origin.send(st.message(msg_reply_attr)
161 :tag("fin", { xmlns = xmlns_mam, queryid = qid }) 166 :tag("fin", { xmlns = xmlns_mam, queryid = qid })
162 :add_child(rsm.generate { 167 :add_child(rsm.generate {
163 first = first, last = last, count = count })); 168 first = first, last = last, count = count }));
169 return true;
164 end); 170 end);
165 171
166 local function has_in_roster(user, who) 172 local function has_in_roster(user, who)
167 local roster = rm_load_roster(user, host); 173 local roster = rm_load_roster(user, host);
168 module:log("debug", "%s has %s in roster? %s", user, who, roster[who] and "yes" or "no"); 174 module:log("debug", "%s has %s in roster? %s", user, who, roster[who] and "yes" or "no");