Software / code / prosody-modules
Annotate
mod_pubsub_serverinfo/mod_pubsub_serverinfo.lua @ 6310:30adcea825c3
mod_conversejs: Fix hostname set as default username (thanks roughnecks)
In login mode, it seems jid is used as default value in the login field
but it was only needed in anonymous mode.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 18 Jun 2025 14:28:38 +0200 |
| parent | 6059:25b091cbb471 |
| rev | line source |
|---|---|
|
5840
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
1 local http = require "net.http"; |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
2 local json = require "util.json"; |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
3 local st = require "util.stanza"; |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
4 local new_id = require"util.id".medium; |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
5 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
6 local local_domain = module:get_host(); |
|
5908
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5867
diff
changeset
|
7 local service = module:get_option_string(module.name .. "_service"); |
|
5910
2c85397d7241
mod_pubsub_serverinfo: node is a string, not a number
Matthew Wild <mwild1@gmail.com>
parents:
5909
diff
changeset
|
8 local node = module:get_option_string(module.name .. "_node", "serverinfo"); |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
9 local actor = module.host .. "/modules/" .. module.name; |
|
5909
54b451c3790c
mod_pubsub_serverinfo: Fix for compatibility with 0.12 option getters
Matthew Wild <mwild1@gmail.com>
parents:
5908
diff
changeset
|
10 local publication_interval = module:get_option_number(module.name .. "_publication_interval", 300); |
|
54b451c3790c
mod_pubsub_serverinfo: Fix for compatibility with 0.12 option getters
Matthew Wild <mwild1@gmail.com>
parents:
5908
diff
changeset
|
11 local cache_ttl = module:get_option_number(module.name .. "_cache_ttl", 3600); |
|
5840
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
12 local public_providers_url = module:get_option_string(module.name.."_public_providers_url", "https://data.xmpp.net/providers/v2/providers-Ds.json"); |
|
5839
45d0802d0787
mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents:
5838
diff
changeset
|
13 local delete_node_on_unload = module:get_option_boolean(module.name.."_delete_node_on_unload", false); |
|
45d0802d0787
mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents:
5838
diff
changeset
|
14 local persist_items = module:get_option_boolean(module.name.."_persist_items", true); |
|
6059
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
15 local include_user_count = module:get_option_boolean(module.name.."_publish_user_count", false); |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
16 |
|
5908
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5867
diff
changeset
|
17 if not service and prosody.hosts["pubsub."..module.host] then |
|
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5867
diff
changeset
|
18 service = "pubsub."..module.host; |
|
5941
5c4e102e2563
mod_pubsub_serverinfo: fix bool logic when reading config
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5910
diff
changeset
|
19 end |
|
5946
d4a8644a1cc5
mod_pubsub_serverinfo: fix syntax error
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5941
diff
changeset
|
20 if not service then |
|
5908
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5867
diff
changeset
|
21 module:log_status("warn", "No pubsub service specified - module not activated"); |
|
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5867
diff
changeset
|
22 return; |
|
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5867
diff
changeset
|
23 end |
|
49b0873932ca
mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents:
5867
diff
changeset
|
24 |
|
6059
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
25 local metric_registry = require "core.statsmanager".get_metric_registry(); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
26 if include_user_count then |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
27 module:depends("measure_active_users"); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
28 end |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
29 |
|
5838
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5837
diff
changeset
|
30 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
31 |
|
5947
99ecfe44910b
mod_pubsub_serverinfo: Explicitly depend on mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
5946
diff
changeset
|
32 -- Needed to publish server-info-fields |
|
99ecfe44910b
mod_pubsub_serverinfo: Explicitly depend on mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
5946
diff
changeset
|
33 module:depends("server_info"); |
|
99ecfe44910b
mod_pubsub_serverinfo: Explicitly depend on mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
5946
diff
changeset
|
34 |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
35 function module.load() |
|
5827
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
36 discover_node():next( |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
37 function(exists) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
38 if not exists then create_node() end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
39 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
40 ):catch( |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
41 function(error) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
42 module:log("warn", "Error prevented discovery or creation of pub/sub node at %s: %s", service, error) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
43 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
44 ) |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
45 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
46 module:add_feature("urn:xmpp:serverinfo:0"); |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
47 |
|
5867
79ae71f52c81
mod_pubsub_serverinfo: Update to use mod_server_info (fixes #1841)
Matthew Wild <mwild1@gmail.com>
parents:
5840
diff
changeset
|
48 module:add_item("server-info-fields", { |
|
79ae71f52c81
mod_pubsub_serverinfo: Update to use mod_server_info (fixes #1841)
Matthew Wild <mwild1@gmail.com>
parents:
5840
diff
changeset
|
49 { name = "serverinfo-pubsub-node", type = "text-single", value = ("xmpp:%s?;node=%s"):format(service, node) }; |
|
79ae71f52c81
mod_pubsub_serverinfo: Update to use mod_server_info (fixes #1841)
Matthew Wild <mwild1@gmail.com>
parents:
5840
diff
changeset
|
50 }); |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
51 |
|
5836
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5835
diff
changeset
|
52 if cache_ttl < publication_interval then |
|
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5835
diff
changeset
|
53 module:log("warn", "It is recommended to have a cache interval higher than the publication interval"); |
|
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5835
diff
changeset
|
54 end |
|
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5835
diff
changeset
|
55 |
|
5833
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
56 cache_warm_up() |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
57 module:add_timer(10, publish_serverinfo); |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
58 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
59 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
60 function module.unload() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
61 -- This removes all subscribers, which may or may not be desirable, depending on the reason for the unload. |
|
5839
45d0802d0787
mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents:
5838
diff
changeset
|
62 if delete_node_on_unload then |
|
45d0802d0787
mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents:
5838
diff
changeset
|
63 delete_node(); |
|
45d0802d0787
mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents:
5838
diff
changeset
|
64 end |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
65 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
66 |
|
5827
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
67 -- Returns a promise of a boolean |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
68 function discover_node() |
|
5833
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
69 local request = st.iq({ type = "get", to = service, from = actor, id = new_id() }) |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
70 :tag("query", { xmlns = "http://jabber.org/protocol/disco#items" }) |
|
5827
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
71 |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
72 module:log("debug", "Sending request to discover existence of pub/sub node '%s' at %s", node, service) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
73 return module:send_iq(request):next( |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
74 function(response) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
75 if response.stanza == nil or response.stanza.attr.type ~= "result" then |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
76 module:log("warn", "Unexpected response to service discovery items request at %s: %s", service, response.stanza) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
77 return false |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
78 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
79 |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
80 local query = response.stanza:get_child("query", "http://jabber.org/protocol/disco#items") |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
81 if query ~= nil then |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
82 for item in query:childtags("item") do |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
83 if item.attr.jid == service and item.attr.node == node then |
|
5836
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5835
diff
changeset
|
84 module:log("debug", "pub/sub node '%s' at %s does exist.", node, service) |
|
5827
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
85 return true |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
86 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
87 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
88 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
89 module:log("debug", "pub/sub node '%s' at %s does not exist.", node, service) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
90 return false; |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
91 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
92 ); |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
93 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
94 |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
95 -- Returns a promise of a boolean |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
96 function create_node() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
97 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() }) |
|
5838
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5837
diff
changeset
|
98 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5837
diff
changeset
|
99 :tag("create", { node = node, xmlns = xmlns_pubsub }):up() |
|
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5837
diff
changeset
|
100 :tag("configure", { xmlns = xmlns_pubsub }) |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
101 :tag("x", { xmlns = "jabber:x:data", type = "submit" }) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
102 :tag("field", { var = "FORM_TYPE", type = "hidden"}) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
103 :text_tag("value", "http://jabber.org/protocol/pubsub#node_config") |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
104 :up() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
105 :tag("field", { var = "pubsub#max_items" }) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
106 :text_tag("value", "1") |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
107 :up() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
108 :tag("field", { var = "pubsub#persist_items" }) |
|
5839
45d0802d0787
mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents:
5838
diff
changeset
|
109 :text_tag("value", persist_items and "1" or "0") |
|
5827
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
110 |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
111 module:log("debug", "Sending request to create pub/sub node '%s' at %s", node, service) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
112 return module:send_iq(request):next( |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
113 function(response) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
114 if response.stanza == nil or response.stanza.attr.type ~= "result" then |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
115 module:log("warn", "Unexpected response to pub/sub node '%s' creation request at %s: %s", node, service, response.stanza) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
116 return false |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
117 else |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
118 module:log("debug", "Successfully created pub/sub node '%s' at %s", node, service) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
119 return true |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
120 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
121 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
122 ) |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
123 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
124 |
|
5827
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
125 -- Returns a promise of a boolean |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
126 function delete_node() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
127 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() }) |
|
5838
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5837
diff
changeset
|
128 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5837
diff
changeset
|
129 :tag("delete", { node = node, xmlns = xmlns_pubsub }); |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
130 |
|
5827
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
131 module:log("debug", "Sending request to delete pub/sub node '%s' at %s", node, service) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
132 return module:send_iq(request):next( |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
133 function(response) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
134 if response.stanza == nil or response.stanza.attr.type ~= "result" then |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
135 module:log("warn", "Unexpected response to pub/sub node '%s' deletion request at %s: %s", node, service, response.stanza) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
136 return false |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
137 else |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
138 module:log("debug", "Successfully deleted pub/sub node '%s' at %s", node, service) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
139 return true |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
140 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
141 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
142 ) |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
143 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
144 |
|
5833
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
145 function get_remote_domain_names() |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
146 -- Iterate over s2s sessions, adding them to a multimap, where the key is the local domain name, |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
147 -- mapped to a collection of remote domain names. De-duplicate all remote domain names by using |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
148 -- them as an index in a table. |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
149 local domains_by_host = {} |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
150 for session, _ in pairs(prosody.incoming_s2s) do |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
151 if session ~= nil and session.from_host ~= nil and local_domain == session.to_host then |
|
5831
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
152 module:log("debug", "Local host '%s' has remote '%s' (inbound)", session.to_host, session.from_host); |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
153 local sessions = domains_by_host[session.to_host] |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
154 if sessions == nil then sessions = {} end; -- instantiate a new entry if none existed |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
155 sessions[session.from_host] = true |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
156 domains_by_host[session.to_host] = sessions |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
157 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
158 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
159 |
|
5831
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
160 -- At an earlier stage, the code iterated over all prosody.hosts, trying to generate one pubsub item for all local hosts. That turned out to be |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
161 -- to noisy. Instead, this code now creates an item that includes the local vhost only. It is assumed that this module will also be loaded for |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
162 -- other vhosts. Their data should then be published to distinct pub/sub services and nodes. |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
163 |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
164 -- for host, data in pairs(prosody.hosts) do |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
165 local host = local_domain |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
166 local data = prosody.hosts[host] |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
167 if data ~= nil then |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
168 local sessions = domains_by_host[host] |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
169 if sessions == nil then sessions = {} end; -- instantiate a new entry if none existed |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
170 if data.s2sout ~= nil then |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
171 for _, session in pairs(data.s2sout) do |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
172 if session.to_host ~= nil then |
|
5831
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
173 module:log("debug", "Local host '%s' has remote '%s' (outbound)", host, session.to_host); |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
174 sessions[session.to_host] = true |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
175 domains_by_host[host] = sessions |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
176 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
177 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
178 end |
|
5831
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
179 |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
180 -- When the instance of Prosody hosts more than one host, the other hosts can be thought of as having a 'permanent' s2s connection. |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
181 for host_name, host_info in pairs(prosody.hosts) do |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
182 if host ~= host_name and host_info.type ~= "component" then |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
183 module:log("debug", "Local host '%s' has remote '%s' (vhost)", host, host_name); |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
184 sessions[host_name] = true; |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
185 domains_by_host[host] = sessions |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
186 end |
|
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
187 end |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
188 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
189 |
|
5833
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
190 return domains_by_host |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
191 end |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
192 |
|
6059
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
193 local function get_gauge_metric(name) |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
194 return (metric_registry.families[name].data:get(module.host) or {}).value; |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
195 end |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
196 |
|
5833
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
197 function publish_serverinfo() |
|
5836
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5835
diff
changeset
|
198 module:log("debug", "Publishing server info..."); |
|
5833
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
199 local domains_by_host = get_remote_domain_names() |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
200 |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
201 -- Build the publication stanza. |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
202 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() }) |
|
5838
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5837
diff
changeset
|
203 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5837
diff
changeset
|
204 :tag("publish", { node = node, xmlns = xmlns_pubsub }) |
|
77c5709bd57a
mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents:
5837
diff
changeset
|
205 :tag("item", { id = "current", xmlns = xmlns_pubsub }) |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
206 :tag("serverinfo", { xmlns = "urn:xmpp:serverinfo:0" }) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
207 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
208 request:tag("domain", { name = local_domain }) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
209 :tag("federation") |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
210 |
|
5833
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
211 local remotes = domains_by_host[local_domain] |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
212 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
213 if remotes ~= nil then |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
214 for remote, _ in pairs(remotes) do |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
215 -- include a domain name for remote domains, but only if they advertise support. |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
216 if does_opt_in(remote) then |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
217 request:tag("remote-domain", { name = remote }):up() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
218 else |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
219 request:tag("remote-domain"):up() |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
220 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
221 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
222 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
223 |
|
6059
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
224 request:up(); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
225 |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
226 if include_user_count then |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
227 local mau = get_gauge_metric("prosody_mod_measure_active_users/active_users_30d"); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
228 request:tag("users", { xmlns = "xmpp:prosody.im/protocol/serverinfo" }); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
229 if mau then |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
230 request:text_tag("active", ("%d"):format(mau)); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
231 end |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
232 request:up(); |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
233 end |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
234 |
|
25b091cbb471
mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents:
5947
diff
changeset
|
235 request:up() |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
236 |
|
5827
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
237 module:send_iq(request):next( |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
238 function(response) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
239 if response.stanza == nil or response.stanza.attr.type ~= "result" then |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
240 module:log("warn", "Unexpected response to item publication at pub/sub node '%s' on %s: %s", node, service, response.stanza) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
241 return false |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
242 else |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
243 module:log("debug", "Successfully published item on pub/sub node '%s' at %s", node, service) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
244 return true |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
245 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
246 end, |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
247 function(error) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
248 module:log("warn", "Error prevented publication of item on pub/sub node at %s: %s", service, error) |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
249 end |
|
c3eeeb968403
mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5826
diff
changeset
|
250 ) |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
251 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
252 return publication_interval; |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
253 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
254 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
255 local opt_in_cache = {} |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
256 |
|
5840
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
257 -- Public providers are already public, so we fetch the list of providers |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
258 -- registered on providers.xmpp.net so we don't have to disco them individually |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
259 local function update_public_providers() |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
260 return http.request(public_providers_url) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
261 :next(function (response) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
262 assert( |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
263 response.headers["content-type"] == "application/json", |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
264 "invalid mimetype: "..tostring(response.headers["content-type"]) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
265 ); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
266 return json.decode(response.body); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
267 end) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
268 :next(function (public_server_domains) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
269 module:log("debug", "Retrieved list of %d public providers", #public_server_domains); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
270 for _, domain in ipairs(public_server_domains) do |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
271 opt_in_cache[domain] = { |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
272 opt_in = true; |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
273 expires = os.time() + (86400 * 1.5); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
274 }; |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
275 end |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
276 end, function (err) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
277 module:log("warn", "Failed to fetch/decode provider list: %s", err); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
278 end); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
279 end |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
280 |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
281 module:daily("update public provider list", update_public_providers); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
282 |
|
5833
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
283 function cache_warm_up() |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
284 module:log("debug", "Warming up opt-in cache") |
|
5840
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
285 |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
286 update_public_providers():finally(function () |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
287 module:log("debug", "Querying known domains for opt-in cache..."); |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
288 local domains_by_host = get_remote_domain_names() |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
289 local remotes = domains_by_host[local_domain] |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
290 if remotes ~= nil then |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
291 for remote in pairs(remotes) do |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
292 does_opt_in(remote) |
|
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
293 end |
|
5833
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
294 end |
|
5840
7905766d01f6
mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents:
5839
diff
changeset
|
295 end); |
|
5833
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
296 end |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
297 |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
298 function does_opt_in(remoteDomain) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
299 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
300 -- try to read answer from cache. |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
301 local cached_value = opt_in_cache[remoteDomain] |
|
5835
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5833
diff
changeset
|
302 local ttl = cached_value and os.difftime(cached_value.expires, os.time()); |
|
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5833
diff
changeset
|
303 if cached_value and ttl > (publication_interval + 60) then |
|
5831
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
304 module:log("debug", "Opt-in status (from cache) for '%s': %s", remoteDomain, cached_value.opt_in) |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
305 return cached_value.opt_in; |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
306 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
307 |
|
5835
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5833
diff
changeset
|
308 -- We don't have a cached value, or it is nearing expiration - refresh it now |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
309 -- TODO worry about not having multiple requests in flight to the same domain.cached_value |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
310 |
|
5836
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5835
diff
changeset
|
311 module:log("debug", "%s: performing disco/info to determine opt-in", remoteDomain) |
|
5833
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
312 local discoRequest = st.iq({ type = "get", to = remoteDomain, from = actor, id = new_id() }) |
|
76b57bcfe1b2
mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5832
diff
changeset
|
313 :tag("query", { xmlns = "http://jabber.org/protocol/disco#info" }) |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
314 |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
315 module:send_iq(discoRequest):next( |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
316 function(response) |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
317 if response.stanza ~= nil and response.stanza.attr.type == "result" then |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
318 local query = response.stanza:get_child("query", "http://jabber.org/protocol/disco#info") |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
319 if query ~= nil then |
|
5832
a8cae8322b7c
mod_pubsub_serverinfo: Fix namespace parsing issue with disco/info
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5831
diff
changeset
|
320 for feature in query:childtags("feature") do |
|
5836
d38772479891
mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents:
5835
diff
changeset
|
321 --module:log("debug", "Disco/info feature for '%s': %s", remoteDomain, feature) |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
322 if feature.attr.var == 'urn:xmpp:serverinfo:0' then |
|
5831
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
323 module:log("debug", "Disco/info response included opt-in for '%s'", remoteDomain) |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
324 opt_in_cache[remoteDomain] = { |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
325 opt_in = true; |
|
5828
55b99f593c3a
mod_pubsub_serverinfo: Disco/info cache TTL should be configurable
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5827
diff
changeset
|
326 expires = os.time() + cache_ttl; |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
327 } |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
328 return; -- prevent 'false' to be cached, down below. |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
329 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
330 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
331 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
332 end |
|
5831
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
333 module:log("debug", "Disco/info response did not include opt-in for '%s'", remoteDomain) |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
334 opt_in_cache[remoteDomain] = { |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
335 opt_in = false; |
|
5828
55b99f593c3a
mod_pubsub_serverinfo: Disco/info cache TTL should be configurable
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5827
diff
changeset
|
336 expires = os.time() + cache_ttl; |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
337 } |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
338 end, |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
339 function(response) |
|
5831
2465d5191ae9
mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5828
diff
changeset
|
340 module:log("debug", "An error occurred while performing a disco/info request to determine opt-in for '%s'", remoteDomain, response) |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
341 opt_in_cache[remoteDomain] = { |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
342 opt_in = false; |
|
5828
55b99f593c3a
mod_pubsub_serverinfo: Disco/info cache TTL should be configurable
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5827
diff
changeset
|
343 expires = os.time() + cache_ttl; |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
344 } |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
345 end |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
346 ); |
|
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
347 |
|
5835
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5833
diff
changeset
|
348 if ttl and ttl <= 0 then |
|
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5833
diff
changeset
|
349 -- Cache entry expired, remove it and assume not opted in |
|
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5833
diff
changeset
|
350 opt_in_cache[remoteDomain] = nil; |
|
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5833
diff
changeset
|
351 return false; |
|
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5833
diff
changeset
|
352 end |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
353 |
|
5835
cf5f77491323
mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents:
5833
diff
changeset
|
354 return cached_value and cached_value.opt_in; |
|
5826
f55e65315ba0
mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents:
5824
diff
changeset
|
355 end |