Mercurial > prosody-modules
view mod_auto156/mod_auto156.lua @ 4974:807007913f67
mod_log_json: Prefer native Lua table.pack over Prosody util.table one
Prosody is removing support for Lua 5.1, which was the reason for
util.table.pack to exist in the first place, since Lua 5.2+ provides
table.pack. In prosody rev 5eaf77114fdb everything was switched over to
use table.pack, opening the door for removing util.table.pack at some
point. This change here is to prepare for that future eventuality.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 11 Jul 2022 20:08:41 +0200 |
| parents | 5d494dba9c02 |
| children |
line wrap: on
line source
-- Synthesize XEP-0156 JSON from DNS local array = require "util.array"; local encodings = require "util.encodings"; local json = require "util.json"; local promise = require "util.promise"; local dns = require"net.adns".resolver(); local function check_dns(domain) return dns:lookup_promise("_xmppconnect." .. domain, "TXT"); end local function check_domain(domain) return promise.resolve(domain):next(encodings.stringprep.nameprep):next(encodings.idna.to_ascii):next( function(domain_A) if not domain_A then return promise.reject(400); else return domain_A; end end):next(check_dns):next(function(txt) local uris = array(); for _, cm in ipairs(txt) do local kind, uri = tostring(cm.txt):match("^_xmpp%-client%-(%w+)=([hpstw]+s?://.*)"); if kind then uris:push({rel = "urn:xmpp:alt-connections:" .. kind, href = uri}); end end if #uris == 0 then return promise.reject(404); end return {links=uris}; end); end module:depends("http"); module:provides("http", { route = { ["GET /*"] = function(_, domain) return check_domain(domain):next(function(altmethods) return {headers = {content_type = "application/json"}, body = json.encode(altmethods)}; end); end, }, }); function module.command(args) local async = require "util.async"; for _, domain in ipairs(args) do print(assert(async.wait_for(check_domain(domain):next(json.encode)))); end end
