Mercurial > prosody-modules
comparison mod_push2/mod_push2.lua @ 6162:aa240145aa22
mod_push2: support for disabling push notifications
For example when logging out
| author | Stephen Paul Weber <singpolyma@singpolyma.net> |
|---|---|
| date | Wed, 05 Feb 2025 11:04:15 -0500 |
| parents | 1cf563a94620 |
| children | 051974b4c900 |
comparison
equal
deleted
inserted
replaced
| 6161:72b7e0ca71ab | 6162:aa240145aa22 |
|---|---|
| 103 origin.send(st.reply(stanza)) | 103 origin.send(st.reply(stanza)) |
| 104 end | 104 end |
| 105 return true | 105 return true |
| 106 end | 106 end |
| 107 module:hook("iq-set/self/"..xmlns_push..":enable", push_enable) | 107 module:hook("iq-set/self/"..xmlns_push..":enable", push_enable) |
| 108 | |
| 109 local function push_disable(event) | |
| 110 local origin, stanza = event.origin, event.stanza; | |
| 111 local enable = stanza.tags[1]; | |
| 112 origin.log("debug", "Attempting to disable push notifications") | |
| 113 -- Tie registration to client, via client_id with sasl2 or else fallback to resource | |
| 114 local registration_id = origin.client_id or origin.resource | |
| 115 -- TODO: can we move to keyval+ on trunk? | |
| 116 local registrations = push2_registrations:get(origin.username) or {} | |
| 117 registrations[registration_id] = nil | |
| 118 if not push2_registrations:set(origin.username, registrations) then | |
| 119 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); | |
| 120 else | |
| 121 origin.push_registration_id = nil | |
| 122 origin.push_registration = nil | |
| 123 origin.first_hibernated_push = nil | |
| 124 origin.log("info", "Push notifications disabled for %s (%s)", tostring(stanza.attr.from), registration_id) | |
| 125 origin.send(st.reply(stanza)) | |
| 126 end | |
| 127 return true | |
| 128 end | |
| 129 module:hook("iq-set/self/"..xmlns_push..":disable", push_disable) | |
| 108 | 130 |
| 109 -- urgent stanzas should be delivered without delay | 131 -- urgent stanzas should be delivered without delay |
| 110 local function is_voip(stanza) | 132 local function is_voip(stanza) |
| 111 if stanza.name == "message" then | 133 if stanza.name == "message" then |
| 112 if stanza:get_child("propose", "urn:xmpp:jingle-message:0") then | 134 if stanza:get_child("propose", "urn:xmpp:jingle-message:0") then |
