UNPKG

@cocalc/server

Version:

CoCalc server functionality: functions used by either the hub and the next.js server

104 lines 3.77 kB
"use strict"; /* * This file is part of CoCalc: Copyright © 2021 Sagemath, Inc. * License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const nodemailer_1 = require("nodemailer"); const help_1 = __importDefault(require("./help")); const footer_1 = __importDefault(require("./footer")); const server_settings_1 = require("../settings/server-settings"); async function sendEmail(message, type = "email") { let settings; try { settings = await getSMTPSettings(type); } catch (err) { throw Error(`SMTP ${type} is not properly configured for this server. Contact the site administrator. -- ${err}`); } if (!message.from) { if (settings.from) { message.from = settings.from; } else { message.from = await (0, help_1.default)(); // fallback } } const server = await getServer(settings); const msg = await (0, footer_1.default)(message); await server.sendMail(msg); } exports.default = sendEmail; let server = undefined; let cacheSettings = ""; // what settings were used to compute cached server. async function getServer(settings) { const s = JSON.stringify(settings); if (server !== undefined && s == cacheSettings) return server; server = await (0, nodemailer_1.createTransport)({ host: settings.server, port: settings.port, secure: settings.secure, auth: { user: settings.login, pass: settings.password, }, }); cacheSettings = s; return server; } /** * Depending on if this is for regular emails or password resets, * we return the SMTP settings depending on the server settings. * Usually, password reset and regular email settings are the same for SMTP. * Only exception is when that override entry is set to smtp, then use the * secondary SMTP configuartion. */ async function getEmailServerSettings(type) { const settings = await (0, server_settings_1.getServerSettings)(); const defaultSMTP = { server: settings.email_smtp_server, login: settings.email_smtp_login, password: settings.email_smtp_password, secure: settings.email_smtp_secure, from: settings.email_smtp_from, port: settings.email_smtp_port, }; if (type == "email") { return defaultSMTP; } switch (settings.password_reset_override) { case "default": return defaultSMTP; case "smtp": return { server: settings.password_reset_smtp_server, login: settings.password_reset_smtp_login, password: settings.password_reset_smtp_password, secure: settings.password_reset_smtp_secure, from: settings.password_reset_smtp_from, port: settings.password_reset_smtp_port, }; } throw new Error(`unexpected password_reset_override: ${settings.password_reset_override}`); } async function getSMTPSettings(type) { if (type != "email" && type != "password_reset") { throw Error("type must be 'email' or 'password_reset'"); } const settings = await getEmailServerSettings(type); if (!settings.server) { throw Error(`SMTP ${type} server must be configured`); } if (!settings.login) { throw Error(`SMTP ${type} username must be configured`); } if (!settings.password) { throw Error(`SMTP ${type} password must be configured`); } return settings; } //# sourceMappingURL=smtp.js.map