comparison mod_profile/mod_profile.lua @ 1744:fbef84033fae

mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
author Kim Alvefur <zash@zash.se>
date Mon, 18 May 2015 02:56:41 +0200
parents 8fbe16c83807
children 851cb0b3d584
comparison
equal deleted inserted replaced
1743:8fbe16c83807 1744:fbef84033fae
90 local data = storage:get(username); 90 local data = storage:get(username);
91 if not data then 91 if not data then
92 data = legacy_storage:get(username); 92 data = legacy_storage:get(username);
93 data = data and st.deserialize(data); 93 data = data and st.deserialize(data);
94 if data then 94 if data then
95 return origin.send(st.reply(stanza):add_child(data)); 95 origin.send(st.reply(stanza):add_child(data));
96 return true;
96 end 97 end
97 end 98 end
98 if not data then 99 if not data then
99 return origin.send(st.error_reply(stanza, "cancel", "item-not-found")); 100 origin.send(st.error_reply(stanza, "cancel", "item-not-found"));
100 end 101 return true;
101 return origin.send(st.reply(stanza):add_child(vcard.to_xep54(data))); 102 end
103 origin.send(st.reply(stanza):add_child(vcard.to_xep54(data)));
104 return true;
102 end 105 end
103 106
104 local function handle_set(event) 107 local function handle_set(event)
105 local origin, stanza = event.origin, event.stanza; 108 local origin, stanza = event.origin, event.stanza;
106 local data = vcard.from_xep54(stanza.tags[1]); 109 local data = vcard.from_xep54(stanza.tags[1]);
107 local username = origin.username; 110 local username = origin.username;
108 local to = stanza.attr.to; 111 local to = stanza.attr.to;
109 if to then 112 if to then
110 if not is_admin(jid_bare(stanza.attr.from), module.host) then 113 if not is_admin(jid_bare(stanza.attr.from), module.host) then
111 return origin.send(st.error_reply(stanza, "auth", "forbidden")); 114 origin.send(st.error_reply(stanza, "auth", "forbidden"));
115 return true;
112 end 116 end
113 username = jid_split(to); 117 username = jid_split(to);
114 end 118 end
115 local ok, err = storage:set(username, data); 119 local ok, err = storage:set(username, data);
116 if not ok then 120 if not ok then
117 return origin.send(st.error_reply(stanza, "cancel", "internal-server-error", err)); 121 origin.send(st.error_reply(stanza, "cancel", "internal-server-error", err));
122 return true;
118 end 123 end
119 124
120 if pep_plus and username then 125 if pep_plus and username then
121 update_pep(username, data); 126 update_pep(username, data);
122 end 127 end
123 128
124 return origin.send(st.reply(stanza)); 129 origin.send(st.reply(stanza));
130 return true;
125 end 131 end
126 132
127 module:hook("iq-get/bare/vcard-temp:vCard", handle_get); 133 module:hook("iq-get/bare/vcard-temp:vCard", handle_get);
128 module:hook("iq-get/host/vcard-temp:vCard", handle_get); 134 module:hook("iq-get/host/vcard-temp:vCard", handle_get);
129 135
184 module:hook("iq-get/bare/urn:ietf:params:xml:ns:vcard-4.0:vcard", function(event) 190 module:hook("iq-get/bare/urn:ietf:params:xml:ns:vcard-4.0:vcard", function(event)
185 local origin, stanza = event.origin, event.stanza; 191 local origin, stanza = event.origin, event.stanza;
186 local username = jid_split(stanza.attr.to) or origin.username; 192 local username = jid_split(stanza.attr.to) or origin.username;
187 local data = storage:get(username); 193 local data = storage:get(username);
188 if not data then 194 if not data then
189 return origin.send(st.error_reply(stanza, "cancel", "item-not-found")); 195 origin.send(st.error_reply(stanza, "cancel", "item-not-found"));
190 end 196 return true;
191 return origin.send(st.reply(stanza):add_child(vcard.to_vcard4(data))); 197 end
198 origin.send(st.reply(stanza):add_child(vcard.to_vcard4(data)));
199 return true;
192 end); 200 end);
193 201
194 if vcard.from_vcard4 then 202 if vcard.from_vcard4 then
195 module:hook("iq-set/self/urn:ietf:params:xml:ns:vcard-4.0:vcard", function(event) 203 module:hook("iq-set/self/urn:ietf:params:xml:ns:vcard-4.0:vcard", function(event)
196 local origin, stanza = event.origin, event.stanza; 204 local origin, stanza = event.origin, event.stanza;
197 local ok, err = storage:set(origin.username, vcard.from_vcard4(stanza.tags[1])); 205 local ok, err = storage:set(origin.username, vcard.from_vcard4(stanza.tags[1]));
198 if not ok then 206 if not ok then
199 return origin.send(st.error_reply(stanza, "cancel", "internal-server-error", err)); 207 origin.send(st.error_reply(stanza, "cancel", "internal-server-error", err));
208 return true;
200 end 209 end
201 return origin.send(st.reply(stanza)); 210 origin.send(st.reply(stanza));
211 return true;
202 end); 212 end);
203 else 213 else
204 module:hook("iq-set/self/urn:ietf:params:xml:ns:vcard-4.0:vcard", function(event) 214 module:hook("iq-set/self/urn:ietf:params:xml:ns:vcard-4.0:vcard", function(event)
205 local origin, stanza = event.origin, event.stanza; 215 local origin, stanza = event.origin, event.stanza;
206 return origin.send(st.error_reply(stanza, "cancel", "feature-not-implemented")); 216 origin.send(st.error_reply(stanza, "cancel", "feature-not-implemented"));
217 return true;
207 end); 218 end);
208 end 219 end
209 end 220 end
210 221