Mercurial > prosody-modules
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 |
