mod_dwd/mod_dwd.lua
author Kim Alvefur <zash@zash.se>
Sat, 25 Jan 2020 20:22:12 +0100
changeset 3870 c0df50ce96f0
parent 932 4e235e565693
permissions -rw-r--r--
mod_rest: Handle internal http request errors early and then return Skips over attempted parsing of the payload which usually failed since the body is an error string like "connection refused", so this produced useless errors.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
928
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
local hosts = _G.hosts;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
local st = require "util.stanza";
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
local nameprep = require "util.encodings".stringprep.nameprep;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
local cert_verify_identity = require "util.x509".verify_identity;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
module:hook("stanza/jabber:server:dialback:result", function(event)
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
	local origin, stanza = event.origin, event.stanza;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
	if origin.cert_chain_status == "valid" and origin.type == "s2sin_unauthed" or origin.type == "s2sin" then
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
		local attr = stanza.attr;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
		local to, from = nameprep(attr.to), nameprep(attr.from);
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
		local conn = origin.conn:socket()
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
		local cert;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
		if conn.getpeercertificate then
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
			cert = conn:getpeercertificate()
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
		end
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
		if cert and hosts[to] and cert_verify_identity(from, "xmpp-server", cert) then
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
			-- COMPAT: ejabberd, gmail and perhaps others do not always set 'to' and 'from'
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
			-- on streams. We fill in the session's to/from here instead.
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
			if not origin.from_host then
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
				origin.from_host = from;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
			end
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
			if not origin.to_host then
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
				origin.to_host = to;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
			end
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
			module:log("info", "Accepting Dialback without Dialback for %s", from);
932
4e235e565693 mod_bidi, mod_dwd, mod_s2s_idle_timeout: Update for recent 0.9 changes (612467e263af)
Matthew Wild <mwild1@gmail.com>
parents: 928
diff changeset
    31
			module:fire_event("s2s-authenticated", { session = origin, host = from });
928
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
			origin.sends2s(
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
				st.stanza("db:result", { from = attr.to, to = attr.from, id = attr.id, type = "valid" }));
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
			return true;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
		end
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
	end
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
end, 100);
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40