Software /
code /
prosody
Changeset
10053:4b2cc8a60449
Merge 0.11->trunk
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 20 Jun 2019 21:40:27 +0200 |
parents | 10049:c523642ea293 (current diff) 10052:0c35f353db68 (diff) |
children | 10054:0656bd283fa2 |
files | plugins/mod_blocklist.lua |
diffstat | 2 files changed, 176 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/mod_blocklist.lua Wed Jun 19 19:16:09 2019 +0200 +++ b/plugins/mod_blocklist.lua Thu Jun 20 21:40:27 2019 +0200 @@ -128,6 +128,7 @@ -- > only if the contact is allowed to receive presence notifications [...] -- So contacts we need to do that for are added to the set below. local send_unavailable = is_blocking and {}; + local send_available = not is_blocking and {}; -- Because blocking someone currently also blocks the ability to reject -- subscription requests, we'll preemptively reject such @@ -147,6 +148,8 @@ elseif is_contact_pending_in(username, module.host, jid) then remove_pending[jid] = true; end + elseif is_contact_subscribed(username, module.host, jid) then + send_available[jid] = true; end end @@ -203,6 +206,11 @@ save_roster(username, module.host, roster); -- Not much we can do about save failing here end + else + local user_bare = username .. "@" .. module.host; + for jid in pairs(send_available) do + module:send(st.presence({ type = "probe", to = user_bare, from = jid })); + end end local blocklist_push = st.iq({ type = "set", id = "blocklist-push" })
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/spec/scansion/blocking.scs Thu Jun 20 21:40:27 2019 +0200 @@ -0,0 +1,168 @@ +# XEP-0191: Blocking Command + +[Client] Romeo + jid: blocker@localhost + password: password + +[Client] Juliet + jid: blockee@localhost + password: password + +----- + +# The parties connect +Romeo connects + +Romeo sends: + <presence/> + +Romeo receives: + <presence from="${Romeo's full JID}"> + <x xmlns="vcard-temp:x:update"/> + </presence> + +Juliet connects + +Juliet sends: + <presence/> + +Juliet receives: + <presence from="${Juliet's full JID}"> + <x xmlns="vcard-temp:x:update"/> + </presence> + +# They add each other +Romeo sends: + <presence type="subscribe" to="${Juliet's JID}"/> + +Romeo receives: + <presence from="${Juliet's JID}" to="${Romeo's JID}" type="unavailable"/> + +Juliet receives: + <presence type="subscribe" to="${Juliet's JID}" from="${Romeo's JID}"/> + +Juliet sends: + <presence type="subscribed" to="${Romeo's JID}"/> + +Romeo receives: + <presence from="${Juliet's full JID}" to="${Romeo's JID}"> + <delay xmlns="urn:xmpp:delay" stamp="{scansion:any}" from="localhost"/> + <x xmlns="vcard-temp:x:update"/> + </presence> + +Juliet sends: + <presence type="subscribe" to="${Romeo's JID}"/> + +Juliet receives: + <presence from="${Romeo's JID}" to="${Juliet's JID}" type="unavailable"/> + +Romeo receives: + <presence type="subscribe" to="${Romeo's JID}" from="${Juliet's JID}"/> + +Romeo sends: + <presence type="subscribed" to="${Juliet's JID}"/> + +Juliet receives: + <presence from="${Romeo's full JID}" to="${Juliet's JID}"> + <delay xmlns="urn:xmpp:delay" stamp="{scansion:any}" from="localhost"/> + <x xmlns="vcard-temp:x:update"/> + </presence> + +Romeo receives: + <presence from="${Juliet's full JID}" to="${Romeo's JID}"> + <delay xmlns="urn:xmpp:delay" stamp="{scansion:any}" from="localhost"/> + <x xmlns="vcard-temp:x:update"/> + </presence> + +# They can now talk +Juliet sends: + <message type="chat" to="${Romeo's JID}"> + <body>ohai</body> + </message> + +Romeo receives: + <message type="chat" to="${Romeo's JID}" from="${Juliet's full JID}"> + <body>ohai</body> + </message> + +# And now to the blockining + +Romeo sends: + <iq type="set" id="lx2"> + <block xmlns="urn:xmpp:blocking"> + <item jid="${Juliet's JID}"/> + </block> + </iq> + +Romeo receives: + <iq type="result" id="lx2"/> + +Juliet receives: + <presence type="unavailable" to="${Juliet's JID}" from="${Romeo's full JID}"/> + +# Can"t talk anymore +Romeo sends: + <message type="chat" to="${Juliet's JID}"> + <body>hello?</body> + </message> + +Romeo receives: + <message type="error" from="${Juliet's JID}"> + <error type="cancel"> + <not-acceptable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/> + <text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">You have blocked this JID</text> + <blocked xmlns="urn:xmpp:blocking:errors"/> + </error> + </message> + +Juliet sends: + <message type="chat" to="${Romeo's JID}"/> + +Juliet receives: + <message type="error" from="${Romeo's JID}"> + <error type="cancel"> + <service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/> + </error> + </message> + +Romeo sends: + <iq type="set" id="lx3"> + <unblock xmlns="urn:xmpp:blocking"> + <item jid="${Juliet's JID}"/> + </unblock> + </iq> + +Juliet receives: + <presence to="${Juliet's JID}" from="${Romeo's full JID}"> + <delay xmlns="urn:xmpp:delay" stamp="{scansion:any}" from="localhost"/> + <x xmlns="vcard-temp:x:update"/> + </presence> + +Romeo receives: + <iq type="result" id="lx3"/> + +# Can talk again +Romeo sends: + <message type="chat" to="${Juliet's JID}"> + <body>hello!</body> + </message> + +Juliet receives: + <message type="chat" to="${Juliet's JID}" from="${Romeo's full JID}"> + <body>hello!</body> + </message> + +# Bye +Juliet disconnects + +Juliet sends: + <presence type="unavailable"/> + +Romeo receives: + <presence from="${Juliet's full JID}" to="${Romeo's JID}" type="unavailable"/> + +Romeo disconnects + +Romeo sends: + <presence type="unavailable"/> +