diff options
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | src/api/Server.ts | 20 | ||||
-rw-r--r-- | src/util/config/Config.ts | 2 | ||||
-rw-r--r-- | src/util/config/types/SMTPConfiguration.ts | 7 | ||||
-rw-r--r-- | src/util/config/types/index.ts | 3 | ||||
-rw-r--r-- | src/util/util/Email.ts | 31 |
6 files changed, 55 insertions, 10 deletions
diff --git a/package.json b/package.json index 4aef413a..eabc247e 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "@types/node": "^18.7.20", "@types/node-fetch": "^2.6.2", "@types/node-os-utils": "^1.3.0", + "@types/nodemailer": "^6.4.7", "@types/probe-image-size": "^7.2.0", "@types/sharp": "^0.31.0", "@types/ws": "^8.5.3", @@ -95,6 +96,7 @@ "node-2fa": "^2.0.3", "node-fetch": "^2.6.7", "node-os-utils": "^1.3.7", + "nodemailer": "^6.9.0", "picocolors": "^1.0.0", "probe-image-size": "^7.2.3", "proxy-agent": "^5.0.0", diff --git a/src/api/Server.ts b/src/api/Server.ts index 7eb4e6f1..aec47818 100644 --- a/src/api/Server.ts +++ b/src/api/Server.ts @@ -16,28 +16,29 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ -import "missing-native-js-functions"; -import { Server, ServerOptions } from "lambert-server"; -import { Authentication, CORS } from "./middlewares/"; import { Config, + Email, initDatabase, initEvent, JSONReplacer, + registerRoutes, Sentry, WebAuthn, } from "@fosscord/util"; -import { ErrorHandler } from "./middlewares/ErrorHandler"; -import { BodyParser } from "./middlewares/BodyParser"; -import { Router, Request, Response } from "express"; +import { Request, Response, Router } from "express"; +import { Server, ServerOptions } from "lambert-server"; +import "missing-native-js-functions"; +import morgan from "morgan"; import path from "path"; +import { red } from "picocolors"; +import { Authentication, CORS } from "./middlewares/"; +import { BodyParser } from "./middlewares/BodyParser"; +import { ErrorHandler } from "./middlewares/ErrorHandler"; import { initRateLimits } from "./middlewares/RateLimit"; import TestClient from "./middlewares/TestClient"; import { initTranslation } from "./middlewares/Translation"; -import morgan from "morgan"; import { initInstance } from "./util/handlers/Instance"; -import { registerRoutes } from "@fosscord/util"; -import { red } from "picocolors"; export type FosscordServerOptions = ServerOptions; @@ -63,6 +64,7 @@ export class FosscordServer extends Server { await initDatabase(); await Config.init(); await initEvent(); + await Email.init(); await initInstance(); await Sentry.init(this.app); WebAuthn.init(); diff --git a/src/util/config/Config.ts b/src/util/config/Config.ts index 122dadb5..583c1489 100644 --- a/src/util/config/Config.ts +++ b/src/util/config/Config.ts @@ -35,6 +35,7 @@ import { RegisterConfiguration, SecurityConfiguration, SentryConfiguration, + SMTPConfiguration, TemplateConfiguration, } from "../config"; @@ -58,4 +59,5 @@ export class ConfigValue { sentry: SentryConfiguration = new SentryConfiguration(); defaults: DefaultsConfiguration = new DefaultsConfiguration(); external: ExternalTokensConfiguration = new ExternalTokensConfiguration(); + smtp: SMTPConfiguration = new SMTPConfiguration(); } diff --git a/src/util/config/types/SMTPConfiguration.ts b/src/util/config/types/SMTPConfiguration.ts new file mode 100644 index 00000000..e833376a --- /dev/null +++ b/src/util/config/types/SMTPConfiguration.ts @@ -0,0 +1,7 @@ +export class SMTPConfiguration { + host: string | null = null; + port: number | null = null; + secure: boolean | null = null; + username: string | null = null; + password: string | null = null; +} diff --git a/src/util/config/types/index.ts b/src/util/config/types/index.ts index 523ad186..3d8ed6df 100644 --- a/src/util/config/types/index.ts +++ b/src/util/config/types/index.ts @@ -34,5 +34,6 @@ export * from "./RegionConfiguration"; export * from "./RegisterConfiguration"; export * from "./SecurityConfiguration"; export * from "./SentryConfiguration"; -export * from "./TemplateConfiguration"; +export * from "./SMTPConfiguration"; export * from "./subconfigurations"; +export * from "./TemplateConfiguration"; diff --git a/src/util/util/Email.ts b/src/util/util/Email.ts index 48d8cae1..d45eb9a1 100644 --- a/src/util/util/Email.ts +++ b/src/util/util/Email.ts @@ -43,3 +43,34 @@ export function adjustEmail(email?: string): string | undefined { // return email; } + +export const Email: { + transporter: Transporter | null; + init: () => Promise<void>; +} = { + transporter: null, + init: async function () { + const { host, port, secure, username, password } = Config.get().smtp; + if (!host || !port || !secure || !username || !password) return; + console.log(`[SMTP] connect: ${host}`); + this.transporter = nodemailer.createTransport({ + host, + port, + secure, + auth: { + user: username, + pass: password, + }, + }); + + await this.transporter.verify((error, _) => { + if (error) { + console.error(`[SMTP] error: ${error}`); + this.transporter?.close(); + this.transporter = null; + return; + } + console.log(`[SMTP] Ready`); + }); + }, +}; |