annotate mod_pubsub_serverinfo/mod_pubsub_serverinfo.lua @ 6556:7477e97a9045

mod_firewall: Apply pre-reload state before re-reading config This change makes load/reload a bit more robust. module.load() runs before module.restore() and it reads from the config and updates the state (if needed). However, after this, module.restore() could run and apply the old state again.
author Matthew Wild <mwild1@gmail.com>
date Sun, 24 May 2026 20:03:20 +0100
parents 01d8bfbfc435
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6519
01d8bfbfc435 mod_pubsub_serverinfo: Fix check for local domain
Matthew Wild <mwild1@gmail.com>
parents: 6403
diff changeset
1 local config = require "core.configmanager";
5817
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
2 local http = require "net.http";
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
3 local json = require "util.json";
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
4 local st = require "util.stanza";
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
5 local new_id = require"util.id".medium;
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
6
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
7 local local_domain = module:get_host();
5884
49b0873932ca mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents: 5843
diff changeset
8 local service = module:get_option_string(module.name .. "_service");
6403
13c61a068c71 mod_pubsub_serverinfo: Include hostname in default pubsub node name
Matthew Wild <mwild1@gmail.com>
parents: 6369
diff changeset
9 local node = module:get_option_string(module.name .. "_node", "serverinfo/"..module.host);
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
10 local actor = module.host .. "/modules/" .. module.name;
5885
54b451c3790c mod_pubsub_serverinfo: Fix for compatibility with 0.12 option getters
Matthew Wild <mwild1@gmail.com>
parents: 5884
diff changeset
11 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: 5884
diff changeset
12 local cache_ttl = module:get_option_number(module.name .. "_cache_ttl", 3600);
5817
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
13 local public_providers_url = module:get_option_string(module.name.."_public_providers_url", "https://data.xmpp.net/providers/v2/providers-Ds.json");
5816
45d0802d0787 mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents: 5815
diff changeset
14 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: 5815
diff changeset
15 local persist_items = module:get_option_boolean(module.name.."_persist_items", true);
6031
25b091cbb471 mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents: 5919
diff changeset
16 local include_user_count = module:get_option_boolean(module.name.."_publish_user_count", false);
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
17
6519
01d8bfbfc435 mod_pubsub_serverinfo: Fix check for local domain
Matthew Wild <mwild1@gmail.com>
parents: 6403
diff changeset
18 if not service and config.getconfig()["pubsub."..module.host] then
01d8bfbfc435 mod_pubsub_serverinfo: Fix check for local domain
Matthew Wild <mwild1@gmail.com>
parents: 6403
diff changeset
19 -- Only use this default if such a domain is found in the config
5884
49b0873932ca mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents: 5843
diff changeset
20 service = "pubsub."..module.host;
5917
5c4e102e2563 mod_pubsub_serverinfo: fix bool logic when reading config
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5886
diff changeset
21 end
5918
d4a8644a1cc5 mod_pubsub_serverinfo: fix syntax error
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5917
diff changeset
22 if not service then
5884
49b0873932ca mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents: 5843
diff changeset
23 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: 5843
diff changeset
24 return;
49b0873932ca mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents: 5843
diff changeset
25 end
49b0873932ca mod_pubsub_serverinfo: Don't default to non-local pubsub servers (thanks roughnecks)
Matthew Wild <mwild1@gmail.com>
parents: 5843
diff changeset
26
6031
25b091cbb471 mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents: 5919
diff changeset
27 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: 5919
diff changeset
28 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: 5919
diff changeset
29 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: 5919
diff changeset
30 end
25b091cbb471 mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents: 5919
diff changeset
31
5815
77c5709bd57a mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents: 5814
diff changeset
32 local xmlns_pubsub = "http://jabber.org/protocol/pubsub";
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
33
5919
99ecfe44910b mod_pubsub_serverinfo: Explicitly depend on mod_server_info
Matthew Wild <mwild1@gmail.com>
parents: 5918
diff changeset
34 -- Needed to publish server-info-fields
99ecfe44910b mod_pubsub_serverinfo: Explicitly depend on mod_server_info
Matthew Wild <mwild1@gmail.com>
parents: 5918
diff changeset
35 module:depends("server_info");
99ecfe44910b mod_pubsub_serverinfo: Explicitly depend on mod_server_info
Matthew Wild <mwild1@gmail.com>
parents: 5918
diff changeset
36
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
37 function module.load()
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
38 discover_node():next(
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
39 function(exists)
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
40 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: 5803
diff changeset
41 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
42 ):catch(
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
43 function(error)
6357
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
44 module:log("warn", "Error prevented discovery or creation of pubsub node at %s: %s", service, error)
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
45 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
46 )
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
47
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
48 module:add_feature("urn:xmpp:serverinfo:0");
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
49
5843
79ae71f52c81 mod_pubsub_serverinfo: Update to use mod_server_info (fixes #1841)
Matthew Wild <mwild1@gmail.com>
parents: 5817
diff changeset
50 module:add_item("server-info-fields", {
79ae71f52c81 mod_pubsub_serverinfo: Update to use mod_server_info (fixes #1841)
Matthew Wild <mwild1@gmail.com>
parents: 5817
diff changeset
51 { 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: 5817
diff changeset
52 });
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
53
5813
d38772479891 mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents: 5812
diff changeset
54 if cache_ttl < publication_interval then
d38772479891 mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents: 5812
diff changeset
55 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: 5812
diff changeset
56 end
d38772479891 mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents: 5812
diff changeset
57
5810
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
58 cache_warm_up()
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
59 module:add_timer(10, publish_serverinfo);
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
60 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
61
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
62 function module.unload()
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
63 -- This removes all subscribers, which may or may not be desirable, depending on the reason for the unload.
5816
45d0802d0787 mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents: 5815
diff changeset
64 if delete_node_on_unload then
45d0802d0787 mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents: 5815
diff changeset
65 delete_node();
45d0802d0787 mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents: 5815
diff changeset
66 end
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
67 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
68
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
69 -- 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: 5803
diff changeset
70 function discover_node()
5810
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
71 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: 5809
diff changeset
72 :tag("query", { xmlns = "http://jabber.org/protocol/disco#items" })
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
73
6357
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
74 module:log("debug", "Sending request to discover existence of pubsub node '%s' at %s", node, service)
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
75 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: 5803
diff changeset
76 function(response)
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
77 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: 5803
diff changeset
78 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: 5803
diff changeset
79 return false
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
80 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
81
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
82 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: 5803
diff changeset
83 if query ~= nil then
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
84 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: 5803
diff changeset
85 if item.attr.jid == service and item.attr.node == node then
6357
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
86 module:log("debug", "pubsub node '%s' at %s does exist.", node, service)
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
87 return true
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
88 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
89 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
90 end
6357
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
91 module:log("debug", "pubsub node '%s' at %s does not exist.", node, service)
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
92 return false;
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
93 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
94 );
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
95 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
96
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
97 -- Returns a promise of a boolean
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
98 function create_node()
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
99 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() })
5815
77c5709bd57a mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents: 5814
diff changeset
100 :tag("pubsub", { xmlns = xmlns_pubsub })
77c5709bd57a mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents: 5814
diff changeset
101 :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: 5814
diff changeset
102 :tag("configure", { xmlns = xmlns_pubsub })
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
103 :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: 5801
diff changeset
104 :tag("field", { var = "FORM_TYPE", type = "hidden"})
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
105 :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: 5801
diff changeset
106 :up()
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
107 :tag("field", { var = "pubsub#max_items" })
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
108 :text_tag("value", "1")
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
109 :up()
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
110 :tag("field", { var = "pubsub#persist_items" })
5816
45d0802d0787 mod_pubsub_serverinfo: Allow configuration of node persistence/deletion
Matthew Wild <mwild1@gmail.com>
parents: 5815
diff changeset
111 :text_tag("value", persist_items and "1" or "0")
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
112
6357
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
113 module:log("debug", "Sending request to create pubsub node '%s' at %s", node, service)
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
114 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: 5803
diff changeset
115 function(response)
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
116 if response.stanza == nil or response.stanza.attr.type ~= "result" then
6357
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
117 module:log("warn", "Unexpected response to pubsub node '%s' creation request at %s: %s", node, service, response.stanza)
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
118 return false
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
119 else
6357
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
120 module:log("debug", "Successfully created pubsub node '%s' at %s", node, service)
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
121 return true
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
122 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
123 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
124 )
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
125 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
126
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
127 -- Returns a promise of a boolean
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
128 function delete_node()
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
129 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() })
5815
77c5709bd57a mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents: 5814
diff changeset
130 :tag("pubsub", { xmlns = xmlns_pubsub })
77c5709bd57a mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents: 5814
diff changeset
131 :tag("delete", { node = node, xmlns = xmlns_pubsub });
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
132
6357
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
133 module:log("debug", "Sending request to delete pubsub node '%s' at %s", node, service)
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
134 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: 5803
diff changeset
135 function(response)
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
136 if response.stanza == nil or response.stanza.attr.type ~= "result" then
6357
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
137 module:log("warn", "Unexpected response to pubsub node '%s' deletion request at %s: %s", node, service, response.stanza)
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
138 return false
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
139 else
6357
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
140 module:log("debug", "Successfully deleted pubsub node '%s' at %s", node, service)
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
141 return true
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
142 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
143 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
144 )
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
145 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
146
5810
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
147 function get_remote_domain_names()
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
148 -- 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: 5801
diff changeset
149 -- 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: 5801
diff changeset
150 -- them as an index in a table.
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
151 local domains_by_host = {}
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
152 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: 5801
diff changeset
153 if session ~= nil and session.from_host ~= nil and local_domain == session.to_host then
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
154 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: 5801
diff changeset
155 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: 5801
diff changeset
156 sessions[session.from_host] = true
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
157 domains_by_host[session.to_host] = sessions
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
158 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
159 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
160
5808
2465d5191ae9 mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5805
diff changeset
161 -- 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
6357
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
162 -- too 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
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
163 -- other vhosts. Their data should then be published to distinct pubsub services and nodes.
5808
2465d5191ae9 mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5805
diff changeset
164
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
165 local host = local_domain
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
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: 5801
diff changeset
167 if data ~= nil then
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
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: 5801
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: 5801
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: 5801
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: 5801
diff changeset
172 if session.to_host ~= nil then
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
173 sessions[session.to_host] = true
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
174 domains_by_host[host] = sessions
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
175 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
176 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
177 end
5808
2465d5191ae9 mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5805
diff changeset
178
2465d5191ae9 mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5805
diff changeset
179 -- 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: 5805
diff changeset
180 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: 5805
diff changeset
181 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: 5805
diff changeset
182 sessions[host_name] = true;
2465d5191ae9 mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5805
diff changeset
183 domains_by_host[host] = sessions
2465d5191ae9 mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5805
diff changeset
184 end
2465d5191ae9 mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5805
diff changeset
185 end
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
186 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
187
5810
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
188 return domains_by_host
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
189 end
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
190
6031
25b091cbb471 mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents: 5919
diff changeset
191 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: 5919
diff changeset
192 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: 5919
diff changeset
193 end
25b091cbb471 mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents: 5919
diff changeset
194
5810
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
195 function publish_serverinfo()
5813
d38772479891 mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents: 5812
diff changeset
196 module:log("debug", "Publishing server info...");
5810
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
197 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: 5809
diff changeset
198
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
199 -- Build the publication stanza.
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
200 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() })
5815
77c5709bd57a mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents: 5814
diff changeset
201 :tag("pubsub", { xmlns = xmlns_pubsub })
77c5709bd57a mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents: 5814
diff changeset
202 :tag("publish", { node = node, xmlns = xmlns_pubsub })
77c5709bd57a mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags
Matthew Wild <mwild1@gmail.com>
parents: 5814
diff changeset
203 :tag("item", { id = "current", xmlns = xmlns_pubsub })
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
204 :tag("serverinfo", { xmlns = "urn:xmpp:serverinfo:0" })
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
205
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
206 request:tag("domain", { name = local_domain })
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
207 :tag("federation")
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
208
5810
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
209 local remotes = domains_by_host[local_domain]
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
210
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
211 if remotes ~= nil then
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
212 for remote, _ in pairs(remotes) do
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
213 -- 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: 5801
diff changeset
214 if does_opt_in(remote) then
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
215 request:tag("remote-domain", { name = remote }):up()
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
216 else
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
217 request:tag("remote-domain"):up()
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
218 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
219 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
220 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
221
6031
25b091cbb471 mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents: 5919
diff changeset
222 request:up();
25b091cbb471 mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents: 5919
diff changeset
223
25b091cbb471 mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents: 5919
diff changeset
224 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: 5919
diff changeset
225 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: 5919
diff changeset
226 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: 5919
diff changeset
227 if mau then
25b091cbb471 mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents: 5919
diff changeset
228 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: 5919
diff changeset
229 end
25b091cbb471 mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents: 5919
diff changeset
230 request:up();
25b091cbb471 mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents: 5919
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: 5919
diff changeset
232
25b091cbb471 mod_pubsub_serverinfo: Allow including the count of active users in the published info
Matthew Wild <mwild1@gmail.com>
parents: 5919
diff changeset
233 request:up()
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
234
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
235 module:send_iq(request):next(
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
236 function(response)
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
237 if response.stanza == nil or response.stanza.attr.type ~= "result" then
6358
de2651ba8bae mod_pubsub_serverinfo: Use log_status to preserve last publication result
Matthew Wild <mwild1@gmail.com>
parents: 6357
diff changeset
238 module:log_status("warn", "Unexpected response to item publication at pubsub node '%s' on %s: %s", node, service, response.stanza)
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
239 return false
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
240 else
6369
2b272065439c mod_pubsub_serverinfo/mod_pubsub_serverinfo.lua: fix last logging error that was made by trying to fix previous error.
Menel <menel@snikket.de>
parents: 6368
diff changeset
241 module:log("debug", "Successfully published item on pubsub node '%s' at %s", node, service)
2b272065439c mod_pubsub_serverinfo/mod_pubsub_serverinfo.lua: fix last logging error that was made by trying to fix previous error.
Menel <menel@snikket.de>
parents: 6368
diff changeset
242 module:set_status("info", "Successfully published item on pubsub node")
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
243 return true
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
244 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
245 end,
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
246 function(error)
6357
f24ff3e6e180 mod_pubsub_serverinfo: Some minor style/code tidying
Matthew Wild <mwild1@gmail.com>
parents: 6356
diff changeset
247 module:log("warn", "Error prevented publication of item on pubsub node at %s: %s", service, error)
5804
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
248 end
c3eeeb968403 mod_pubsub_serverinfo: Detect existence of pub/sub node
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5803
diff changeset
249 )
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
250
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
251 return publication_interval;
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
252 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
253
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
254 local opt_in_cache = {}
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
255
5817
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
256 -- 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: 5816
diff changeset
257 -- 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: 5816
diff changeset
258 local function update_public_providers()
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
259 return http.request(public_providers_url)
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
260 :next(function (response)
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
261 assert(
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
262 response.headers["content-type"] == "application/json",
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
263 "invalid mimetype: "..tostring(response.headers["content-type"])
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
264 );
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
265 return json.decode(response.body);
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
266 end)
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
267 :next(function (public_server_domains)
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
268 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: 5816
diff changeset
269 for _, domain in ipairs(public_server_domains) do
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
270 opt_in_cache[domain] = {
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
271 opt_in = true;
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
272 expires = os.time() + (86400 * 1.5);
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
273 };
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
274 end
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
275 end, function (err)
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
276 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: 5816
diff changeset
277 end);
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
278 end
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
279
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
280 module:daily("update public provider list", update_public_providers);
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
281
5810
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
282 function cache_warm_up()
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
283 module:log("debug", "Warming up opt-in cache")
5817
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
284
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
285 update_public_providers():finally(function ()
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
286 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: 5816
diff changeset
287 local domains_by_host = get_remote_domain_names()
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
288 local remotes = domains_by_host[local_domain]
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
289 if remotes ~= nil then
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
290 for remote in pairs(remotes) do
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
291 does_opt_in(remote)
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
292 end
5810
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
293 end
5817
7905766d01f6 mod_pubsub_serverinfo: Treat public providers as public
Matthew Wild <mwild1@gmail.com>
parents: 5816
diff changeset
294 end);
5810
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
295 end
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
296
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
297 function does_opt_in(remoteDomain)
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
298
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
299 -- try to read answer from cache.
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
300 local cached_value = opt_in_cache[remoteDomain]
5812
cf5f77491323 mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents: 5810
diff changeset
301 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: 5810
diff changeset
302 if cached_value and ttl > (publication_interval + 60) then
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
303 return cached_value.opt_in;
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
304 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
305
5812
cf5f77491323 mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents: 5810
diff changeset
306 -- We don't have a cached value, or it is nearing expiration - refresh it now
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
307 -- 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: 5801
diff changeset
308
5813
d38772479891 mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents: 5812
diff changeset
309 module:log("debug", "%s: performing disco/info to determine opt-in", remoteDomain)
5810
76b57bcfe1b2 mod_pubsub_serverinfo: Warm-up opt-in cache
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5809
diff changeset
310 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: 5809
diff changeset
311 :tag("query", { xmlns = "http://jabber.org/protocol/disco#info" })
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
312
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
313 module:send_iq(discoRequest):next(
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
314 function(response)
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
315 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: 5801
diff changeset
316 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: 5801
diff changeset
317 if query ~= nil then
5809
a8cae8322b7c mod_pubsub_serverinfo: Fix namespace parsing issue with disco/info
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5808
diff changeset
318 for feature in query:childtags("feature") do
5813
d38772479891 mod_pubsub_serverinfo: Some logging improvements
Matthew Wild <mwild1@gmail.com>
parents: 5812
diff changeset
319 --module:log("debug", "Disco/info feature for '%s': %s", remoteDomain, feature)
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
320 if feature.attr.var == 'urn:xmpp:serverinfo:0' then
5808
2465d5191ae9 mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5805
diff changeset
321 module:log("debug", "Disco/info response included opt-in for '%s'", remoteDomain)
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
322 opt_in_cache[remoteDomain] = {
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
323 opt_in = true;
5805
55b99f593c3a mod_pubsub_serverinfo: Disco/info cache TTL should be configurable
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5804
diff changeset
324 expires = os.time() + cache_ttl;
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
325 }
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
326 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: 5801
diff changeset
327 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
328 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
329 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
330 end
5808
2465d5191ae9 mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5805
diff changeset
331 module:log("debug", "Disco/info response did not include opt-in for '%s'", remoteDomain)
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
332 opt_in_cache[remoteDomain] = {
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
333 opt_in = false;
5805
55b99f593c3a mod_pubsub_serverinfo: Disco/info cache TTL should be configurable
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5804
diff changeset
334 expires = os.time() + cache_ttl;
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
335 }
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
336 end,
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
337 function(response)
5808
2465d5191ae9 mod_pubsub_serverinfo: Consider sibling vhosts 'connected'
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5805
diff changeset
338 module:log("debug", "An error occurred while performing a disco/info request to determine opt-in for '%s'", remoteDomain, response)
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
339 opt_in_cache[remoteDomain] = {
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
340 opt_in = false;
5805
55b99f593c3a mod_pubsub_serverinfo: Disco/info cache TTL should be configurable
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5804
diff changeset
341 expires = os.time() + cache_ttl;
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
342 }
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
343 end
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
344 );
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
345
5812
cf5f77491323 mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents: 5810
diff changeset
346 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: 5810
diff changeset
347 -- 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: 5810
diff changeset
348 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: 5810
diff changeset
349 return false;
cf5f77491323 mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents: 5810
diff changeset
350 end
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
351
5812
cf5f77491323 mod_pubsub_serverinfo: Refresh cache entries if they will expire before next run
Matthew Wild <mwild1@gmail.com>
parents: 5810
diff changeset
352 return cached_value and cached_value.opt_in;
5803
f55e65315ba0 mod_pubsub_serverinfo: implemented all basic features
Guus der Kinderen <guus.der.kinderen@gmail.com>
parents: 5801
diff changeset
353 end