Software /
code /
prosody-modules
Comparison
mod_pubsub_serverinfo/mod_pubsub_serverinfo.lua @ 5838: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 |
parent | 5837:fa28fc2ee465 |
child | 5839:45d0802d0787 |
comparison
equal
deleted
inserted
replaced
5837:fa28fc2ee465 | 5838: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 |