Mercurial > prosody-modules
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 |
| 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 |
