comparison mod_pubsub_serverinfo/mod_pubsub_serverinfo.lua @ 5813:d38772479891

mod_pubsub_serverinfo: Some logging improvements
author Matthew Wild <mwild1@gmail.com>
date Mon, 08 Jan 2024 15:51:52 +0000
parents cf5f77491323
children fa28fc2ee465
comparison
equal deleted inserted replaced
5812:cf5f77491323 5813:d38772479891
27 module:add_extension(dataform { 27 module:add_extension(dataform {
28 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/network/serverinfo" }, 28 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/network/serverinfo" },
29 { name = "serverinfo-pubsub-node", type = "text-single" }, 29 { name = "serverinfo-pubsub-node", type = "text-single" },
30 }:form({ ["serverinfo-pubsub-node"] = ("xmpp:%s?;node=%s"):format(service, node) }, "result")); 30 }:form({ ["serverinfo-pubsub-node"] = ("xmpp:%s?;node=%s"):format(service, node) }, "result"));
31 31
32 if cache_ttl < publication_interval then
33 module:log("warn", "It is recommended to have a cache interval higher than the publication interval");
34 end
35
32 cache_warm_up() 36 cache_warm_up()
33 module:add_timer(10, publish_serverinfo); 37 module:add_timer(10, publish_serverinfo);
34 end 38 end
35 39
36 function module.unload() 40 function module.unload()
53 57
54 local query = response.stanza:get_child("query", "http://jabber.org/protocol/disco#items") 58 local query = response.stanza:get_child("query", "http://jabber.org/protocol/disco#items")
55 if query ~= nil then 59 if query ~= nil then
56 for item in query:childtags("item") do 60 for item in query:childtags("item") do
57 if item.attr.jid == service and item.attr.node == node then 61 if item.attr.jid == service and item.attr.node == node then
58 module:log("debug", "pub/sub node '%s' at %s does exists.", node, service) 62 module:log("debug", "pub/sub node '%s' at %s does exist.", node, service)
59 return true 63 return true
60 end 64 end
61 end 65 end
62 end 66 end
63 module:log("debug", "pub/sub node '%s' at %s does not exist.", node, service) 67 module:log("debug", "pub/sub node '%s' at %s does not exist.", node, service)
163 167
164 return domains_by_host 168 return domains_by_host
165 end 169 end
166 170
167 function publish_serverinfo() 171 function publish_serverinfo()
172 module:log("debug", "Publishing server info...");
168 local domains_by_host = get_remote_domain_names() 173 local domains_by_host = get_remote_domain_names()
169 174
170 -- Build the publication stanza. 175 -- Build the publication stanza.
171 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() }) 176 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() })
172 :tag("pubsub", { xmlns = "http://jabber.org/protocol/pubsub" }) 177 :tag("pubsub", { xmlns = "http://jabber.org/protocol/pubsub" })
234 end 239 end
235 240
236 -- We don't have a cached value, or it is nearing expiration - refresh it now 241 -- We don't have a cached value, or it is nearing expiration - refresh it now
237 -- TODO worry about not having multiple requests in flight to the same domain.cached_value 242 -- TODO worry about not having multiple requests in flight to the same domain.cached_value
238 243
239 module:log("debug", "No cached opt-in status for '%s': performing disco/info to determine opt-in.", remoteDomain) 244 module:log("debug", "%s: performing disco/info to determine opt-in", remoteDomain)
240 local discoRequest = st.iq({ type = "get", to = remoteDomain, from = actor, id = new_id() }) 245 local discoRequest = st.iq({ type = "get", to = remoteDomain, from = actor, id = new_id() })
241 :tag("query", { xmlns = "http://jabber.org/protocol/disco#info" }) 246 :tag("query", { xmlns = "http://jabber.org/protocol/disco#info" })
242 247
243 module:send_iq(discoRequest):next( 248 module:send_iq(discoRequest):next(
244 function(response) 249 function(response)
245 if response.stanza ~= nil and response.stanza.attr.type == "result" then 250 if response.stanza ~= nil and response.stanza.attr.type == "result" then
246 local query = response.stanza:get_child("query", "http://jabber.org/protocol/disco#info") 251 local query = response.stanza:get_child("query", "http://jabber.org/protocol/disco#info")
247 if query ~= nil then 252 if query ~= nil then
248 for feature in query:childtags("feature") do 253 for feature in query:childtags("feature") do
249 module:log("debug", "Disco/info feature for '%s': %s", remoteDomain, feature) 254 --module:log("debug", "Disco/info feature for '%s': %s", remoteDomain, feature)
250 if feature.attr.var == 'urn:xmpp:serverinfo:0' then 255 if feature.attr.var == 'urn:xmpp:serverinfo:0' then
251 module:log("debug", "Disco/info response included opt-in for '%s'", remoteDomain) 256 module:log("debug", "Disco/info response included opt-in for '%s'", remoteDomain)
252 opt_in_cache[remoteDomain] = { 257 opt_in_cache[remoteDomain] = {
253 opt_in = true; 258 opt_in = true;
254 expires = os.time() + cache_ttl; 259 expires = os.time() + cache_ttl;