From a582d4786dd75485f2b6cf63cf3fbc569a58bb4f Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Thu, 27 Jun 2024 17:55:17 +0100 Subject: [PATCH] make env validation errors clear * modify mail smtp variable names --- .env.example | 23 ++++++++----- .../environment/environment.service.ts | 34 +++++++++---------- .../environment/environment.validation.ts | 17 ++++++++-- .../mail/providers/mail.provider.ts | 8 ++--- 4 files changed, 49 insertions(+), 33 deletions(-) diff --git a/.env.example b/.env.example index 1dd0dd3..80ce7c5 100644 --- a/.env.example +++ b/.env.example @@ -1,16 +1,19 @@ +# your domain, e.g https://example.com APP_URL=http://localhost:3000 -APP_SECRET=REPLACE_WITH_LONG_SECRET PORT=3000 +# make sure to replace this. +APP_SECRET=REPLACE_WITH_LONG_SECRET + JWT_TOKEN_EXPIRES_IN=30d DATABASE_URL="postgresql://postgres:password@localhost:5432/docmost?schema=public" REDIS_URL=redis://127.0.0.1:6379 -# local | s3 +# options: local | s3 STORAGE_DRIVER=local -# S3 Config +# S3 driver config AWS_S3_ACCESS_KEY_ID= AWS_S3_SECRET_ACCESS_KEY= AWS_S3_REGION= @@ -18,15 +21,17 @@ AWS_S3_BUCKET= AWS_S3_ENDPOINT= AWS_S3_URL= -# EMAIL drivers: smtp / postmark / log +# options: smtp | postmark MAIL_DRIVER=smtp -MAIL_HOST=127.0.0.1 -MAIL_PORT=2525 -MAIL_USERNAME= -MAIL_PASSWORD= MAIL_FROM_ADDRESS=hello@example.com MAIL_FROM_NAME=Docmost -# for postmark driver +# SMTP driver config +SMTP_HOST=127.0.0.1 +SMTP_PORT=587 +SMTP_USERNAME= +SMTP_PASSWORD= + +# Postmark driver config POSTMARK_TOKEN= diff --git a/apps/server/src/integrations/environment/environment.service.ts b/apps/server/src/integrations/environment/environment.service.ts index a61cdd4..1dc7154 100644 --- a/apps/server/src/integrations/environment/environment.service.ts +++ b/apps/server/src/integrations/environment/environment.service.ts @@ -71,28 +71,28 @@ export class EnvironmentService { return this.configService.get('MAIL_DRIVER', 'log'); } - getMailHost(): string { - return this.configService.get('MAIL_HOST'); - } - - getMailPort(): number { - return parseInt(this.configService.get('MAIL_PORT')); - } - - getMailUsername(): string { - return this.configService.get('MAIL_USERNAME'); - } - - getMailPassword(): string { - return this.configService.get('MAIL_PASSWORD'); - } - getMailFromAddress(): string { return this.configService.get('MAIL_FROM_ADDRESS'); } getMailFromName(): string { - return this.configService.get('MAIL_FROM_NAME'); + return this.configService.get('MAIL_FROM_NAME', 'Docmost'); + } + + getSmtpHost(): string { + return this.configService.get('SMTP_HOST'); + } + + getSmtpPort(): number { + return parseInt(this.configService.get('SMTP_PORT')); + } + + getSmtpUsername(): string { + return this.configService.get('SMTP_USERNAME'); + } + + getSmtpPassword(): string { + return this.configService.get('SMTP_PASSWORD'); } getPostmarkToken(): string { diff --git a/apps/server/src/integrations/environment/environment.validation.ts b/apps/server/src/integrations/environment/environment.validation.ts index 949e1d4..8449d74 100644 --- a/apps/server/src/integrations/environment/environment.validation.ts +++ b/apps/server/src/integrations/environment/environment.validation.ts @@ -1,12 +1,16 @@ -import { IsNotEmpty, IsUrl, validateSync } from 'class-validator'; +import { IsNotEmpty, IsNotIn, IsUrl, validateSync } from 'class-validator'; import { plainToInstance } from 'class-transformer'; export class EnvironmentVariables { @IsNotEmpty() - @IsUrl({ protocols: ['postgres', 'postgresql'], require_tld: false }) + @IsUrl( + { protocols: ['postgres', 'postgresql'], require_tld: false }, + { message: 'DATABASE_URL must be a valid postgres connection string' }, + ) DATABASE_URL: string; @IsNotEmpty() + @IsNotIn(['REPLACE_WITH_LONG_SECRET']) APP_SECRET: string; } @@ -14,14 +18,21 @@ export function validate(config: Record) { const validatedConfig = plainToInstance(EnvironmentVariables, config); const errors = validateSync(validatedConfig); + + console.error( + 'The EnvironmentVariables has failed the following validations:', + ); + if (errors.length > 0) { errors.map((error) => { - console.error(error.toString()); + console.log(JSON.stringify(error.constraints)); }); + console.log( 'Please fix the environment variables and try again. Shutting down...', ); process.exit(1); } + return validatedConfig; } diff --git a/apps/server/src/integrations/mail/providers/mail.provider.ts b/apps/server/src/integrations/mail/providers/mail.provider.ts index bf14075..c708189 100644 --- a/apps/server/src/integrations/mail/providers/mail.provider.ts +++ b/apps/server/src/integrations/mail/providers/mail.provider.ts @@ -29,12 +29,12 @@ export const mailDriverConfigProvider = { return { driver, config: { - host: environmentService.getMailHost(), - port: environmentService.getMailPort(), + host: environmentService.getSmtpHost(), + port: environmentService.getSmtpPort(), connectionTimeout: 30 * 1000, // 30 seconds auth: { - user: environmentService.getMailUsername(), - pass: environmentService.getMailPassword(), + user: environmentService.getSmtpUsername(), + pass: environmentService.getSmtpPassword(), }, } as SMTPTransport.Options, };