aboutsummaryrefslogtreecommitdiff
path: root/deno/mail-relay
diff options
context:
space:
mode:
Diffstat (limited to 'deno/mail-relay')
-rw-r--r--deno/mail-relay/app.ts6
-rw-r--r--deno/mail-relay/aws/app.ts48
-rw-r--r--deno/mail-relay/dovecot.ts12
3 files changed, 30 insertions, 36 deletions
diff --git a/deno/mail-relay/app.ts b/deno/mail-relay/app.ts
index 0b9da07..eeffc12 100644
--- a/deno/mail-relay/app.ts
+++ b/deno/mail-relay/app.ts
@@ -1,7 +1,7 @@
import { Hono } from "hono";
import { logger as honoLogger } from "hono/logger";
-import { Logger } from "@crupest/base/log";
+import { LogFileProvider } from "@crupest/base/log";
import {
AliasRecipientMailHook,
@@ -13,7 +13,7 @@ import { DovecotMailDeliverer } from "./dovecot.ts";
import { DumbSmtpServer } from "./dumb-smtp-server.ts";
export function createInbound(
- logger: Logger,
+ logFileProvider: LogFileProvider,
{
fallback,
mailDomain,
@@ -26,7 +26,7 @@ export function createInbound(
ldaPath: string;
},
) {
- const deliverer = new DovecotMailDeliverer(logger, ldaPath);
+ const deliverer = new DovecotMailDeliverer(logFileProvider, ldaPath);
deliverer.preHooks.push(
new RecipientFromHeadersHook(mailDomain),
new FallbackRecipientHook(new Set(fallback)),
diff --git a/deno/mail-relay/aws/app.ts b/deno/mail-relay/aws/app.ts
index b7d0154..13db351 100644
--- a/deno/mail-relay/aws/app.ts
+++ b/deno/mail-relay/aws/app.ts
@@ -6,7 +6,7 @@ import { FetchHttpHandler } from "@smithy/fetch-http-handler";
// @ts-types="npm:@types/yargs"
import yargs from "yargs";
-import { Logger } from "@crupest/base/log";
+import { LogFileProvider } from "@crupest/base/log";
import { ConfigDefinition, ConfigProvider } from "@crupest/base/config";
import { CronTask } from "@crupest/base/cron";
@@ -155,60 +155,56 @@ function createCron(fetcher: AwsMailFetcher, consumer: AwsS3MailConsumer) {
function createBaseServices() {
const config = new ConfigProvider(PREFIX, CONFIG_DEFINITIONS);
Deno.mkdirSync(config.get("dataPath"), { recursive: true });
- const logger = new Logger();
- logger.externalLogDir = join(config.get("dataPath"), "log");
- return { config, logger };
+ const logFileProvider = new LogFileProvider(
+ join(config.get("dataPath"), "log"),
+ );
+ return { config, logFileProvider };
}
function createAwsFetchOnlyServices() {
- const { config, logger } = createBaseServices();
+ const services = createBaseServices();
+ const { config } = services;
+
const awsOptions = createAwsOptions({
user: config.get("awsUser"),
password: config.get("awsPassword"),
region: config.get("awsRegion"),
});
const fetcher = new AwsMailFetcher(awsOptions, config.get("awsMailBucket"));
- return { config, logger, awsOptions, fetcher };
+
+ return { ...services, awsOptions, fetcher };
}
function createAwsRecycleOnlyServices() {
- const { config, logger, awsOptions, fetcher } = createAwsFetchOnlyServices();
+ const services = createAwsFetchOnlyServices();
+ const { config, logFileProvider } = services;
- const inbound = createInbound(logger, {
+ const inbound = createInbound(logFileProvider, {
fallback: config.getList("inboundFallback"),
ldaPath: config.get("ldaPath"),
aliasFile: join(config.get("dataPath"), "aliases.csv"),
mailDomain: config.get("mailDomain"),
});
-
const recycler = (rawMail: string, _: unknown): Promise<void> =>
inbound.deliver({ mail: new Mail(rawMail) }).then();
- return { config, logger, awsOptions, fetcher, inbound, recycler };
+ return { ...services, inbound, recycler };
}
function createAwsServices() {
- const { config, logger, inbound, awsOptions, fetcher, recycler } =
- createAwsRecycleOnlyServices();
+ const services = createAwsRecycleOnlyServices();
+ const { config, awsOptions } = services;
+
const dbService = new DbService(join(config.get("dataPath"), "db.sqlite"));
const outbound = createOutbound(awsOptions, dbService);
- return {
- config,
- logger,
- inbound,
- dbService,
- awsOptions,
- fetcher,
- recycler,
- outbound,
- };
+ return { ...services, dbService, outbound };
}
function createServerServices() {
const services = createAwsServices();
const { config, outbound, inbound, fetcher } = services;
- const smtp = createSmtp(outbound);
+ const smtp = createSmtp(outbound);
const hono = createHono(outbound, inbound);
setupAwsHono(hono, {
path: config.get("awsInboundPath"),
@@ -220,11 +216,7 @@ function createServerServices() {
},
});
- return {
- ...services,
- smtp,
- hono,
- };
+ return { ...services, smtp, hono };
}
function serve(cron: boolean = false) {
diff --git a/deno/mail-relay/dovecot.ts b/deno/mail-relay/dovecot.ts
index 748d6fa..333b803 100644
--- a/deno/mail-relay/dovecot.ts
+++ b/deno/mail-relay/dovecot.ts
@@ -1,17 +1,17 @@
import { basename } from "@std/path";
-import { Logger } from "@crupest/base/log";
+import { LogFileProvider } from "@crupest/base/log";
import { Mail, MailDeliverContext, MailDeliverer } from "./mail.ts";
export class DovecotMailDeliverer extends MailDeliverer {
readonly name = "dovecot";
- readonly #logger;
+ readonly #logFileProvider;
readonly #ldaPath;
- constructor(logger: Logger, ldaPath: string) {
+ constructor(logFileProvider: LogFileProvider, ldaPath: string) {
super();
- this.#logger = logger;
+ this.#logFileProvider = logFileProvider;
this.#ldaPath = ldaPath;
}
@@ -47,7 +47,9 @@ export class DovecotMailDeliverer extends MailDeliverer {
const ldaProcess = ldaCommand.spawn();
using logFiles =
- await this.#logger.createExternalLogStreamsForProgram(ldaBinName);
+ await this.#logFileProvider.createExternalLogStreamsForProgram(
+ ldaBinName,
+ );
ldaProcess.stdout.pipeTo(logFiles.stdout);
ldaProcess.stderr.pipeTo(logFiles.stderr);