make OTP plugin inherit SMTP relay configuration

Use rms.auth.smtp_relay settings as the primary source for OTP mail transport (host/port/auth/tls/from/replyTo), with existing OTP/env values only as fallback. This lets OTP delivery work immediately when relay settings are already configured.
This commit is contained in:
2026-03-16 14:13:07 +01:00
parent da2923f0e1
commit 1c6d9e8e98
2 changed files with 35 additions and 9 deletions

View File

@@ -10,19 +10,43 @@ async function createPlugin(ctx) {
let transportKey = "";
function readTransportConfig() {
const host = String(ctx.getSetting("host", ctx.env.SMTP_HOST || "")).trim();
const portRaw = Number(ctx.getSetting("port", ctx.env.SMTP_PORT || 587));
const secure = String(ctx.getSetting("secure", ctx.env.SMTP_SECURE || "false")) === "true";
const authUser = String(ctx.getSetting("authUser", ctx.env.SMTP_USER || "")).trim();
const authPass = String(ctx.getSetting("authPass", ctx.env.SMTP_PASS || "")).trim();
const allowInvalidCert = String(ctx.getSetting("allowInvalidCert", ctx.env.SMTP_ALLOW_INVALID_CERT || "false")) === "true";
const relaySetting = typeof ctx.getPluginSetting === "function"
? (key, fallback = null) => ctx.getPluginSetting("rms.auth.smtp_relay", key, fallback)
: (_key, fallback = null) => fallback;
const host = String(
relaySetting("host", ctx.getSetting("host", ctx.env.SMTP_HOST || ""))
).trim();
const portRaw = Number(
relaySetting("port", ctx.getSetting("port", ctx.env.SMTP_PORT || 587))
);
const secure = String(
relaySetting("secure", ctx.getSetting("secure", ctx.env.SMTP_SECURE || "false"))
) === "true";
const authUser = String(
relaySetting("authUser", ctx.getSetting("authUser", ctx.env.SMTP_USER || ""))
).trim();
const authPass = String(
relaySetting("authPass", ctx.getSetting("authPass", ctx.env.SMTP_PASS || ""))
).trim();
const allowInvalidCert = String(
relaySetting("allowInvalidCert", ctx.getSetting("allowInvalidCert", ctx.env.SMTP_ALLOW_INVALID_CERT || "false"))
) === "true";
const from = String(
relaySetting("from", ctx.getSetting("from", ctx.env.SMTP_FROM || "noreply@arcg.at"))
).trim() || "noreply@arcg.at";
const replyTo = String(
relaySetting("replyTo", ctx.getSetting("replyTo", ctx.env.SMTP_REPLY_TO || ""))
).trim();
return {
host,
port: Number.isFinite(portRaw) && portRaw > 0 ? portRaw : 587,
secure,
authUser,
authPass,
allowInvalidCert
allowInvalidCert,
from,
replyTo
};
}
@@ -64,12 +88,13 @@ async function createPlugin(ctx) {
if (!recipient) {
throw new Error("recipient missing");
}
const transportConfig = readTransportConfig();
const entry = {
at: new Date().toISOString(),
via: "rms.auth.otp_email",
to: recipient,
from: String(ctx.getSetting("from", ctx.env.SMTP_FROM || "noreply@arcg.at")),
replyTo: String(ctx.getSetting("replyTo", ctx.env.SMTP_REPLY_TO || "")),
from: transportConfig.from,
replyTo: transportConfig.replyTo,
subject: String(payload.subject || "ARCG OTP"),
text: String(payload.text || ""),
html: String(payload.html || "")