annotate mod_auto156/mod_auto156.lua @ 6319:04c3273cb81f

mod_auth_cyrus: Add empty 'profile' table to SASL handler objects This is for compatibility with Prosody's built-in util.sasl objects. A SASL profile table usually includes methods supported by the backend, which can be used by SASL mechanism handlers to perform operations (such as testing the password). It also optionally contains a 'cb' field with channel binding method handlers. The Cyrus backend doesn't support channel binding, and doesn't have the same concept of auth backend methods (it handles all that internally, and Prosody has no insight or control over it). Thus, we create an empty profile which informs Prosody that the SASL handler does not support any of the auth or channel binding methods. Some features will not work, but they didn't work anyway. This just makes it explicit. This fixes a traceback in mod_sasl2_fast, which expected SASL handlers to always contain a 'profile' field.
author Matthew Wild <mwild1@gmail.com>
date Thu, 04 Sep 2025 10:14:46 +0100
parents 5d494dba9c02
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4613
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 -- Synthesize XEP-0156 JSON from DNS
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 local array = require "util.array";
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 local encodings = require "util.encodings";
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local json = require "util.json";
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 local promise = require "util.promise";
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 local dns = require"net.adns".resolver();
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 local function check_dns(domain)
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 return dns:lookup_promise("_xmppconnect." .. domain, "TXT");
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 end
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 local function check_domain(domain)
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 return promise.resolve(domain):next(encodings.stringprep.nameprep):next(encodings.idna.to_ascii):next(
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 function(domain_A)
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 if not domain_A then
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 return promise.reject(400);
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 else
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 return domain_A;
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 end
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 end):next(check_dns):next(function(txt)
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 local uris = array();
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 for _, cm in ipairs(txt) do
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 local kind, uri = tostring(cm.txt):match("^_xmpp%-client%-(%w+)=([hpstw]+s?://.*)");
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 if kind then
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 uris:push({rel = "urn:xmpp:alt-connections:" .. kind, href = uri});
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 end
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 end
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 if #uris == 0 then
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 return promise.reject(404);
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 end
4614
5d494dba9c02 mod_auto156: Include the containing object in command output
Kim Alvefur <zash@zash.se>
parents: 4613
diff changeset
32 return {links=uris};
4613
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 end);
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 end
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 module:depends("http");
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 module:provides("http", {
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 route = {
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 ["GET /*"] = function(_, domain)
4614
5d494dba9c02 mod_auto156: Include the containing object in command output
Kim Alvefur <zash@zash.se>
parents: 4613
diff changeset
40 return check_domain(domain):next(function(altmethods)
5d494dba9c02 mod_auto156: Include the containing object in command output
Kim Alvefur <zash@zash.se>
parents: 4613
diff changeset
41 return {headers = {content_type = "application/json"}, body = json.encode(altmethods)};
4613
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 end);
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 end,
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 },
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 });
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 function module.command(args)
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 local async = require "util.async";
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 for _, domain in ipairs(args) do
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 print(assert(async.wait_for(check_domain(domain):next(json.encode))));
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 end
6478442d217f mod_auto156: Queries for XEP-0156 TXT records and prints in JSON format
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 end