Mercurial > prosody-modules
annotate mod_presence_cache/mod_presence_cache.lua @ 5193:2bb29ece216b
mod_http_oauth2: Implement stateless dynamic client registration
Replaces previous explicit registration that required either the
additional module mod_adhoc_oauth2_client or manually editing the
database. That method was enough to have something to test with, but
would not probably not scale easily.
Dynamic client registration allows creating clients on the fly, which
may be even easier in theory.
In order to not allow basically unauthenticated writes to the database,
we implement a stateless model here.
per_host_key := HMAC(config -> oauth2_registration_key, hostname)
client_id := JWT { client metadata } signed with per_host_key
client_secret := HMAC(per_host_key, client_id)
This should ensure everything we need to know is part of the client_id,
allowing redirects etc to be validated, and the client_secret can be
validated with only the client_id and the per_host_key.
A nonce injected into the client_id JWT should ensure nobody can submit
the same client metadata and retrieve the same client_secret
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 03 Mar 2023 21:14:19 +0100 |
parents | 830a01443a2f |
children |
rev | line source |
---|---|
2176
b76b062e77db
mod_presence_cache: Add copyright header
Kim Alvefur <zash@zash.se>
parents:
2175
diff
changeset
|
1 -- XEP-0280: Message Carbons implementation for Prosody |
b76b062e77db
mod_presence_cache: Add copyright header
Kim Alvefur <zash@zash.se>
parents:
2175
diff
changeset
|
2 -- Copyright (C) 2015-2016 Kim Alvefur |
b76b062e77db
mod_presence_cache: Add copyright header
Kim Alvefur <zash@zash.se>
parents:
2175
diff
changeset
|
3 -- |
b76b062e77db
mod_presence_cache: Add copyright header
Kim Alvefur <zash@zash.se>
parents:
2175
diff
changeset
|
4 -- This file is MIT/X11 licensed. |
b76b062e77db
mod_presence_cache: Add copyright header
Kim Alvefur <zash@zash.se>
parents:
2175
diff
changeset
|
5 |
1952
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 local is_contact_subscribed = require"core.rostermanager".is_contact_subscribed; |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 local jid_split = require"util.jid".split; |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 local jid_bare = require"util.jid".bare; |
3183
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
9 local jid_host = require"util.jid".host; |
1952
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local st = require"util.stanza"; |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 local datetime = require"util.datetime"; |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
12 local cache = require "util.cache"; |
1952
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
14 local cache_size = module:get_option_number("presence_cache_size", 100); |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
15 |
2175
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
16 local bare_cache = {}; -- [username NUL bare_jid] = { [full_jid] = { timestamp, ... } } |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
17 |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
18 local function on_evict(cache_key) |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
19 local bare_cache_key = cache_key:match("^%Z+%z[^/]+"); |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
20 local full_jid = cache_key:match("%z(.*)$"); |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
21 local jids = bare_cache[bare_cache_key]; |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
22 |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
23 if jids then |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
24 jids[full_jid] = nil; |
2153
aa24d49c47ef
mod_presence_cache: Only check set set is empty if it exists
Kim Alvefur <zash@zash.se>
parents:
2152
diff
changeset
|
25 if next(jids) == nil then |
aa24d49c47ef
mod_presence_cache: Only check set set is empty if it exists
Kim Alvefur <zash@zash.se>
parents:
2152
diff
changeset
|
26 bare_cache[bare_cache_key] = nil; |
aa24d49c47ef
mod_presence_cache: Only check set set is empty if it exists
Kim Alvefur <zash@zash.se>
parents:
2152
diff
changeset
|
27 end |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
28 end |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
29 end |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
30 |
2152
bb4a2e4b7ba7
mod_presence_cache: Forget about cached presence when receiving unavailable
Kim Alvefur <zash@zash.se>
parents:
2147
diff
changeset
|
31 -- used indirectly for the on_evict callback |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
32 local presence_cache = cache.new(cache_size, on_evict); |
1952
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 local function cache_hook(event) |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 local origin, stanza = event.origin, event.stanza; |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 local typ = stanza.attr.type; |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 module:log("debug", "Cache hook, got %s from a %s", stanza:top_tag(), origin.type); |
2145
f965f86a5cad
mod_presence_cache: Check stanzas only from s2sin (not needed, even with mod_bidi)
Kim Alvefur <zash@zash.se>
parents:
2123
diff
changeset
|
38 if origin.type == "s2sin" and ( typ == nil or typ == "unavailable" ) then |
1952
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
40 local contact_full = stanza.attr.from; |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
41 local contact_bare = jid_bare(contact_full); |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
42 local username, host = jid_split(stanza.attr.to); |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
43 |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
44 if not is_contact_subscribed(username, host, contact_bare) then |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
45 module:log("debug", "Presence from jid not in roster"); |
1952
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 return; |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 end |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
49 local cache_key = username .. "\0" .. contact_full; |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
50 local bare_cache_key = username .. "\0" .. contact_bare; |
2152
bb4a2e4b7ba7
mod_presence_cache: Forget about cached presence when receiving unavailable
Kim Alvefur <zash@zash.se>
parents:
2147
diff
changeset
|
51 |
bb4a2e4b7ba7
mod_presence_cache: Forget about cached presence when receiving unavailable
Kim Alvefur <zash@zash.se>
parents:
2147
diff
changeset
|
52 local jids = bare_cache[bare_cache_key]; |
bb4a2e4b7ba7
mod_presence_cache: Forget about cached presence when receiving unavailable
Kim Alvefur <zash@zash.se>
parents:
2147
diff
changeset
|
53 |
bb4a2e4b7ba7
mod_presence_cache: Forget about cached presence when receiving unavailable
Kim Alvefur <zash@zash.se>
parents:
2147
diff
changeset
|
54 if typ == "unavailable" then -- remove from cache |
bb4a2e4b7ba7
mod_presence_cache: Forget about cached presence when receiving unavailable
Kim Alvefur <zash@zash.se>
parents:
2147
diff
changeset
|
55 presence_cache:set(cache_key, nil); |
bb4a2e4b7ba7
mod_presence_cache: Forget about cached presence when receiving unavailable
Kim Alvefur <zash@zash.se>
parents:
2147
diff
changeset
|
56 on_evict(cache_key); |
bb4a2e4b7ba7
mod_presence_cache: Forget about cached presence when receiving unavailable
Kim Alvefur <zash@zash.se>
parents:
2147
diff
changeset
|
57 return; |
bb4a2e4b7ba7
mod_presence_cache: Forget about cached presence when receiving unavailable
Kim Alvefur <zash@zash.se>
parents:
2147
diff
changeset
|
58 end |
bb4a2e4b7ba7
mod_presence_cache: Forget about cached presence when receiving unavailable
Kim Alvefur <zash@zash.se>
parents:
2147
diff
changeset
|
59 |
2175
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
60 local presence_bits = { |
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
61 stamp = datetime.datetime(); |
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
62 show = stanza:get_child_text("show"); |
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
63 }; |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
64 if jids then |
2175
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
65 jids[contact_full] = presence_bits; |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
66 else |
2175
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
67 jids = { [contact_full] = presence_bits }; |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
68 bare_cache[bare_cache_key] = jids; |
1952
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 end |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
70 presence_cache:set(cache_key, true); |
1952
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 end |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 end |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 module:hook("presence/bare", cache_hook, 10); |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 -- module:hook("presence/full", cache_hook, 10); |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 local function answer_probe_from_cache(event) |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 local origin, stanza = event.origin, event.stanza; |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 if stanza.attr.type ~= "probe" then return; end |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
80 |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
81 local username = origin.username; |
1952
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 local contact_bare = stanza.attr.to; |
2292
54f44365a378
mod_presence_cache: Ignore stanzas to self (fixes traceback on probe to self)
Kim Alvefur <zash@zash.se>
parents:
2176
diff
changeset
|
83 if not contact_bare then return; end -- probe to self |
1952
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
85 local bare_cache_key = username .. "\0" .. contact_bare; |
1952
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
87 local cached = bare_cache[bare_cache_key]; |
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
88 if not cached then return end |
3373
322e8e7ba7d4
mod_presence_cache: Set delay source to bare JID instead of host
Kim Alvefur <zash@zash.se>
parents:
3183
diff
changeset
|
89 local user_bare = jid_bare(origin.full_jid); |
2175
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
90 for jid, presence_bits in pairs(cached) do |
2147
ed2bb50d4f91
mod_presence_cache: Switch to using util.cache for limiting size of cache
Kim Alvefur <zash@zash.se>
parents:
2146
diff
changeset
|
91 local presence = st.presence({ to = origin.full_jid, from = jid }) |
2175
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
92 if presence_bits.show then |
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
93 presence:tag("show"):text(presence_bits.show):up(); |
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
94 end |
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
95 if presence_bits.stamp then |
3373
322e8e7ba7d4
mod_presence_cache: Set delay source to bare JID instead of host
Kim Alvefur <zash@zash.se>
parents:
3183
diff
changeset
|
96 presence:tag("delay", { xmlns = "urn:xmpp:delay", from = user_bare, stamp = presence_bits.stamp }):up(); |
2175
cc0cf6748885
mod_presence_cache: Also cache the 'show' value
Kim Alvefur <zash@zash.se>
parents:
2153
diff
changeset
|
97 end |
1952
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 origin.send(presence); |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 end |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 end |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 |
9d0c33ebbcc5
mod_presence_cache: Cache incoming presence broadcasts in order to get clients up to speed with who is online faster
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 module:hook("pre-presence/bare", answer_probe_from_cache, 10); |
3183
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
103 |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
104 local function clear_cache_from_s2s(remote, reason) |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
105 if not remote then return end |
3760
830a01443a2f
mod_presence_cache: Fix traceback due to changes in trunk
Kim Alvefur <zash@zash.se>
parents:
3373
diff
changeset
|
106 -- FIXME Ignore if connection closed for being idle |
3183
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
107 |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
108 module:log("debug", "Dropping cached presence from host %s", remote); |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
109 |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
110 for bare, cached in pairs(bare_cache) do |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
111 if jid_host(bare) == remote then |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
112 for jid in pairs(cached) do |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
113 presence_cache:set(jid, nil); |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
114 end |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
115 bare_cache[bare] = nil; |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
116 end |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
117 end |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
118 end |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
119 |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
120 module:hook("s2sin-destroyed", function (event) |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
121 return clear_cache_from_s2s(event.session.from_host, event.reason); |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
122 end); |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
123 |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
124 module:hook("s2sout-destroyed", function (event) |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
125 return clear_cache_from_s2s(event.session.to_host, event.reason); |
b718092e442f
mod_presence_cache: Forget cached presence on s2s close
Kim Alvefur <zash@zash.se>
parents:
2292
diff
changeset
|
126 end); |