Software / code / prosody-modules
Comparison
mod_cloud_notify/mod_cloud_notify.lua @ 1907:7fe7bd7b33b6
mod_cloud_notify: Allow the 'node' to be left out when disabling, clients MAY include it (and therefore leave it out)
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 14 Oct 2015 13:41:03 +0200 |
| parent | 1784:1656d4fd71d0 |
| child | 1908:eba279ddc050 |
comparison
equal
deleted
inserted
replaced
| 1906:5849d70bcd37 | 1907:7fe7bd7b33b6 |
|---|---|
| 11 | 11 |
| 12 module:add_feature(xmlns_push); | 12 module:add_feature(xmlns_push); |
| 13 | 13 |
| 14 local push_enabled = module:shared("push-enabled-users"); | 14 local push_enabled = module:shared("push-enabled-users"); |
| 15 | 15 |
| 16 -- http://xmpp.org/extensions/xep-0357.html#enabling | |
| 16 module:hook("iq-set/self/"..xmlns_push..":enable", function (event) | 17 module:hook("iq-set/self/"..xmlns_push..":enable", function (event) |
| 17 local origin, stanza = event.origin, event.stanza; | 18 local origin, stanza = event.origin, event.stanza; |
| 18 local push_jid, push_node = stanza.tags[1].attr.jid, stanza.tags[1].attr.node; | 19 -- MUST contain a 'jid' attribute of the XMPP Push Service being enabled |
| 19 if not push_jid or not push_node then | 20 local push_jid = stanza.tags[1].attr.jid; |
| 20 origin.send(st.error_reply(stanza, "modify", "bad-request", "Missing jid or node")); | 21 -- SHOULD contain a 'node' attribute |
| 22 local push_node = stanza.tags[1].attr.node; | |
| 23 if not push_jid then | |
| 24 origin.send(st.error_reply(stanza, "modify", "bad-request", "Missing jid")); | |
| 21 return true; | 25 return true; |
| 22 end | 26 end |
| 23 local publish_options = stanza.tags[1].tags[1]; | 27 local publish_options = stanza.tags[1].tags[1]; |
| 24 if publish_options and ( publish_options.name ~= "x" or publish_options.attr.xmlns ~= "jabber:x:data" ) then | 28 if publish_options and ( publish_options.name ~= "x" or publish_options.attr.xmlns ~= "jabber:x:data" ) then |
| 25 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid publish options")); | 29 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid publish options")); |
| 27 end | 31 end |
| 28 local user_push_services = push_enabled[origin.username]; | 32 local user_push_services = push_enabled[origin.username]; |
| 29 if not user_push_services then | 33 if not user_push_services then |
| 30 user_push_services = {}; | 34 user_push_services = {}; |
| 31 end | 35 end |
| 32 user_push_services[push_jid .. "<" .. push_node] = { | 36 user_push_services[push_jid .. "<" .. (push_node or "")] = { |
| 33 jid = push_jid; | 37 jid = push_jid; |
| 34 node = push_node; | 38 node = push_node; |
| 35 count = 0; | 39 count = 0; |
| 36 options = publish_options; | 40 options = publish_options; |
| 37 }; | 41 }; |
| 38 origin.send(st.reply(stanza)); | 42 origin.send(st.reply(stanza)); |
| 39 return true; | 43 return true; |
| 40 end); | 44 end); |
| 41 | 45 |
| 46 -- http://xmpp.org/extensions/xep-0357.html#disabling | |
| 42 module:hook("iq-set/self/"..xmlns_push..":disable", function (event) | 47 module:hook("iq-set/self/"..xmlns_push..":disable", function (event) |
| 43 local origin, stanza = event.origin, event.stanza; | 48 local origin, stanza = event.origin, event.stanza; |
| 44 local push_jid, push_node = stanza.tags[1].attr.jid, stanza.tags[1].attr.node; | 49 local push_jid = stanza.tags[1].attr.jid; -- MUST include a 'jid' attribute |
| 45 if not push_jid or not push_node then | 50 local push_node = stanza.tags[1].attr.node; -- A 'node' attribute MAY be included |
| 46 origin.send(st.error_reply(stanza, "modify", "bad-request", "Missing jid or node")); | 51 if not push_jid then |
| 52 origin.send(st.error_reply(stanza, "modify", "bad-request", "Missing jid")); | |
| 47 return true; | 53 return true; |
| 48 end | 54 end |
| 49 local user_push_services = push_enabled[origin.username]; | 55 local user_push_services = push_enabled[origin.username]; |
| 50 if user_push_services then | 56 for key, push_info in pairs(user_push_services) do |
| 51 user_push_services[push_jid .. "<" .. push_node] = nil; | 57 if push_info.jid == push_jid and (not push_node or push_info.node == push_node) then |
| 58 user_push_services[key] = nil; | |
| 59 end | |
| 52 end | 60 end |
| 53 origin.send(st.reply(stanza)); | 61 origin.send(st.reply(stanza)); |
| 54 return true; | 62 return true; |
| 55 end); | 63 end); |
| 56 | 64 |
| 60 { name = "pending-subscription-count"; type = "text-single"; }; | 68 { name = "pending-subscription-count"; type = "text-single"; }; |
| 61 { name = "last-message-sender"; type = "jid-single"; }; | 69 { name = "last-message-sender"; type = "jid-single"; }; |
| 62 { name = "last-message-body"; type = "text-single"; }; | 70 { name = "last-message-body"; type = "text-single"; }; |
| 63 }; | 71 }; |
| 64 | 72 |
| 73 -- http://xmpp.org/extensions/xep-0357.html#publishing | |
| 65 module:hook("message/offline/handle", function(event) | 74 module:hook("message/offline/handle", function(event) |
| 66 local origin, stanza = event.origin, event.stanza; | 75 local origin, stanza = event.origin, event.stanza; |
| 67 local to = stanza.attr.to; | 76 local to = stanza.attr.to; |
| 68 local node = to and jid.split(to) or origin.username; | 77 local node = to and jid.split(to) or origin.username; |
| 69 local user_push_services = push_enabled[node]; | 78 local user_push_services = push_enabled[node]; |