Mercurial > prosody-modules
view mod_srvinjection/mod_srvinjection.lua @ 3953:2c6d5734ae04
mod_rest: Add JSON mapping of XEP-0128: Service Discovery Extensions
Example XEP-0157 payload:
{
"disco" : {
"extensions" : {
"http://jabber.org/network/serverinfo" : {
"abuse-addresses" : [
"mailto:abuse@shakespeare.lit",
"xmpp:abuse@shakespeare.lit"
],
"admin-addresses" : [
"mailto:admin@shakespeare.lit",
"xmpp:admin@shakespeare.lit"
],
"feedback-addresses" : [
"http://shakespeare.lit/feedback.php",
"mailto:feedback@shakespeare.lit",
"xmpp:feedback@shakespeare.lit"
],
"sales-addresses" : [
"xmpp:bard@shakespeare.lit"
],
"security-addresses" : [
"xmpp:security@shakespeare.lit"
],
"support-addresses" : [
"http://shakespeare.lit/support.php",
"xmpp:support@shakespeare.lit"
]
}
}
}
}
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 23 Mar 2020 19:03:04 +0100 |
parents | 47fb4f36dacd |
children |
line wrap: on
line source
module:set_global(); local adns = require "net.adns"; local map_config = module:get_option("srvinjection") or {}; local map = module:shared "s2s_map" for host, mapping in pairs(map_config) do if type(mapping) == "table" and type(mapping[1]) == "string" and (type(mapping[2]) == "number") then local connecthost, connectport = mapping[1], mapping[2] or 5269; map[host] = {{ srv = { target = connecthost.."."; port = connectport; priority = 1; weight = 0; }; }}; else module:log("warn", "Ignoring invalid SRV injection for host '%s'", host); map[host] = nil; end end local original_lookup = adns.lookup; function adns.lookup(handler, qname, qtype, qclass) if qtype == "SRV" then local host = qname:match("^_xmpp%-server%._tcp%.(.*)%.$"); local mapping = map[host] or map["*"]; if mapping then handler(mapping); return; end elseif qtype == "A" then if (qname == "localhost." or qname == "127.0.0.1.") then handler({{ a = "127.0.0.1" }}); return; end local ip = qname:match("^(%d+.%d+.%d+.%d+).$"); if ip then handler({{ a = ip }}); return; end end return original_lookup(handler, qname, qtype, qclass); end function module.unload() adns.lookup = original_lookup; end