comparison mod_cloud_notify/mod_cloud_notify.lua @ 4325:9b95241c6ae5

mod_cloud_notify: Fire register and push events for integration with other modules
author Matthew Wild <mwild1@gmail.com>
date Tue, 12 Jan 2021 15:21:46 +0000
parents 45dcf5d4cd6c
children 5a30daf2ac02
comparison
equal deleted inserted replaced
4324:45dcf5d4cd6c 4325:9b95241c6ae5
187 node = push_node; 187 node = push_node;
188 include_payload = include_payload; 188 include_payload = include_payload;
189 options = publish_options and st.preserialize(publish_options); 189 options = publish_options and st.preserialize(publish_options);
190 timestamp = os_time(); 190 timestamp = os_time();
191 }; 191 };
192 local allow_registration = module:fire_event("cloud_notify/registration", {
193 origin = origin, stanza = stanza, push_info = push_service;
194 });
195 if allow_registration == false then
196 return true; -- Assume error reply already sent
197 end
192 push_store:set_identifier(origin.username, push_identifier, push_service); 198 push_store:set_identifier(origin.username, push_identifier, push_service);
193 local ok = push_store:flush_to_disk(origin.username); 199 local ok = push_store:flush_to_disk(origin.username);
194 if not ok then 200 if not ok then
195 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); 201 origin.send(st.error_reply(stanza, "wait", "internal-server-error"));
196 else 202 else
345 module:log("debug", "Sending %s push notification for %s@%s to %s (%s)", 351 module:log("debug", "Sending %s push notification for %s@%s to %s (%s)",
346 form_data["last-message-body"] and "important" or "unimportant", 352 form_data["last-message-body"] and "important" or "unimportant",
347 node, module.host, push_info.jid, tostring(push_info.node) 353 node, module.host, push_info.jid, tostring(push_info.node)
348 ); 354 );
349 -- module:log("debug", "PUSH STANZA: %s", tostring(push_publish)); 355 -- module:log("debug", "PUSH STANZA: %s", tostring(push_publish));
350 -- handle push errors for this node 356 local push_event = {
351 if push_errors[push_identifier] == nil then 357 notification_stanza = push_publish;
352 push_errors[push_identifier] = 0; 358 original_stanza = stanza;
353 end 359 node = node;
354 module:hook("iq-error/host/"..stanza_id, handle_push_error); 360 push_info = push_info;
355 module:hook("iq-result/host/"..stanza_id, handle_push_success); 361 push_summary = form_data;
356 id2node[stanza_id] = node; 362 };
357 id2identifier[stanza_id] = push_identifier; 363
358 module:send(push_publish); 364 if module:fire_event("cloud_notify/push", push_event) then
359 pushes = pushes + 1; 365 module:log("debug", "Push was blocked by event handler: %s", push_event.reason or "Unknown reason");
366 else
367 -- handle push errors for this node
368 if push_errors[push_identifier] == nil then
369 push_errors[push_identifier] = 0;
370 end
371 module:hook("iq-error/host/"..stanza_id, handle_push_error);
372 module:hook("iq-result/host/"..stanza_id, handle_push_success);
373 id2node[stanza_id] = node;
374 id2identifier[stanza_id] = push_identifier;
375 module:send(push_publish);
376 pushes = pushes + 1;
377 end
360 end 378 end
361 end 379 end
362 return pushes; 380 return pushes;
363 end 381 end
364 382