diff options
Diffstat (limited to 'deno/mail-relay')
-rw-r--r-- | deno/mail-relay/app.ts | 6 | ||||
-rw-r--r-- | deno/mail-relay/aws/app.ts | 48 | ||||
-rw-r--r-- | deno/mail-relay/dovecot.ts | 12 |
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); |