comparison mod_pubsub_serverinfo/mod_pubsub_serverinfo.lua @ 5815:77c5709bd57a

mod_pubsub_serverinfo: Add explicit xmlns to all pubsub tags This helps when routing between hosts on the same server, where the namespace normalization is not handled by default.
author Matthew Wild <mwild1@gmail.com>
date Mon, 08 Jan 2024 15:53:21 +0000
parents fa28fc2ee465
children 45d0802d0787
comparison
equal deleted inserted replaced
5814:fa28fc2ee465 5815:77c5709bd57a
7 local node = module:get_option(module.name .. "_node") or "serverinfo"; 7 local node = module:get_option(module.name .. "_node") or "serverinfo";
8 local actor = module.host .. "/modules/" .. module.name; 8 local actor = module.host .. "/modules/" .. module.name;
9 local publication_interval = module:get_option(module.name .. "_publication_interval") or 300; 9 local publication_interval = module:get_option(module.name .. "_publication_interval") or 300;
10 local cache_ttl = module:get_option(module.name .. "_cache_ttl") or 3600; 10 local cache_ttl = module:get_option(module.name .. "_cache_ttl") or 3600;
11 11
12 local xmlns_pubsub = "http://jabber.org/protocol/pubsub";
12 13
13 function module.load() 14 function module.load()
14 discover_node():next( 15 discover_node():next(
15 function(exists) 16 function(exists)
16 if not exists then create_node() end 17 if not exists then create_node() end
70 end 71 end
71 72
72 -- Returns a promise of a boolean 73 -- Returns a promise of a boolean
73 function create_node() 74 function create_node()
74 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() }) 75 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() })
75 :tag("pubsub", { xmlns = "http://jabber.org/protocol/pubsub" }) 76 :tag("pubsub", { xmlns = xmlns_pubsub })
76 :tag("create", { node = node }):up() 77 :tag("create", { node = node, xmlns = xmlns_pubsub }):up()
77 :tag("configure") 78 :tag("configure", { xmlns = xmlns_pubsub })
78 :tag("x", { xmlns = "jabber:x:data", type = "submit" }) 79 :tag("x", { xmlns = "jabber:x:data", type = "submit" })
79 :tag("field", { var = "FORM_TYPE", type = "hidden"}) 80 :tag("field", { var = "FORM_TYPE", type = "hidden"})
80 :text_tag("value", "http://jabber.org/protocol/pubsub#node_config") 81 :text_tag("value", "http://jabber.org/protocol/pubsub#node_config")
81 :up() 82 :up()
82 :tag("field", { var = "pubsub#max_items" }) 83 :tag("field", { var = "pubsub#max_items" })
100 end 101 end
101 102
102 -- Returns a promise of a boolean 103 -- Returns a promise of a boolean
103 function delete_node() 104 function delete_node()
104 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() }) 105 local request = st.iq({ type = "set", to = service, from = actor, id = new_id() })
105 :tag("pubsub", { xmlns = "http://jabber.org/protocol/pubsub" }) 106 :tag("pubsub", { xmlns = xmlns_pubsub })
106 :tag("delete", { node = node }); 107 :tag("delete", { node = node, xmlns = xmlns_pubsub });
107 108
108 module:log("debug", "Sending request to delete pub/sub node '%s' at %s", node, service) 109 module:log("debug", "Sending request to delete pub/sub node '%s' at %s", node, service)
109 return module:send_iq(request):next( 110 return module:send_iq(request):next(
110 function(response) 111 function(response)
111 if response.stanza == nil or response.stanza.attr.type ~= "result" then 112 if response.stanza == nil or response.stanza.attr.type ~= "result" then
171 module:log("debug", "Publishing server info..."); 172 module:log("debug", "Publishing server info...");
172 local domains_by_host = get_remote_domain_names() 173 local domains_by_host = get_remote_domain_names()
173 174
174 -- Build the publication stanza. 175 -- Build the publication stanza.
175 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() })
176 :tag("pubsub", { xmlns = "http://jabber.org/protocol/pubsub" }) 177 :tag("pubsub", { xmlns = xmlns_pubsub })
177 :tag("publish", { node = node, xmlns = "http://jabber.org/protocol/pubsub" }) 178 :tag("publish", { node = node, xmlns = xmlns_pubsub })
178 :tag("item", { id = "current", xmlns = "http://jabber.org/protocol/pubsub" }) 179 :tag("item", { id = "current", xmlns = xmlns_pubsub })
179 :tag("serverinfo", { xmlns = "urn:xmpp:serverinfo:0" }) 180 :tag("serverinfo", { xmlns = "urn:xmpp:serverinfo:0" })
180 181
181 request:tag("domain", { name = local_domain }) 182 request:tag("domain", { name = local_domain })
182 :tag("federation") 183 :tag("federation")
183 184