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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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