From f5230a8529a35f1f0397f73d6dcb4a604e42e34f Mon Sep 17 00:00:00 2001 From: Devanshu Gupta <86366994+devanshu-gupta2002@users.noreply.github.com> Date: Mon, 21 Apr 2025 14:44:29 +0530 Subject: [PATCH] Fix/smtp creds env (#12634) * submodule update commit * fix: updated smtp env creds * fix: updated smtp route, added base flag * feat: added smtp util service * fix: removed instanceSettings module * fix: updated email to use smtpUtil, removed instanceUtil * fix: added smtpmodule import * fix: removed instance settings module from email module --- frontend/ee | 2 +- server/ee | 2 +- server/src/modules/email/module.ts | 4 +- server/src/modules/email/util.service.ts | 8 ++-- .../instance-settings/constants/index.ts | 2 +- server/src/modules/smtp/module.ts | 3 +- server/src/modules/smtp/util.service.ts | 41 ++++++++++++++++--- 7 files changed, 47 insertions(+), 15 deletions(-) diff --git a/frontend/ee b/frontend/ee index 9aa23fc0aa..dfecbc41b2 160000 --- a/frontend/ee +++ b/frontend/ee @@ -1 +1 @@ -Subproject commit 9aa23fc0aa78a84dd13dd7308fa3de63c9c553ff +Subproject commit dfecbc41b216cea248245c862a0c362756c6b70d diff --git a/server/ee b/server/ee index 9099be6814..ec251e5609 160000 --- a/server/ee +++ b/server/ee @@ -1 +1 @@ -Subproject commit 9099be6814072b4e37713af6f374868b027c95f8 +Subproject commit ec251e560902d7fc7cd5c97bfcc6de539e40cd13 diff --git a/server/src/modules/email/module.ts b/server/src/modules/email/module.ts index 8408ed8b40..636ba5cad4 100644 --- a/server/src/modules/email/module.ts +++ b/server/src/modules/email/module.ts @@ -1,8 +1,8 @@ import { DynamicModule } from '@nestjs/common'; import { getImportPath } from '@modules/app/constants'; import { WhiteLabellingModule } from '@modules/white-labelling/module'; -import { InstanceSettingsModule } from '@modules/instance-settings/module'; import { DataSourcesModule } from '@modules/data-sources/module'; +import { SMTPModule } from '@modules/smtp/module'; export class EmailModule { static async register(configs?: { IS_GET_CONTEXT: boolean }): Promise { @@ -14,8 +14,8 @@ export class EmailModule { module: EmailModule, imports: [ await WhiteLabellingModule.register(configs), - await InstanceSettingsModule.register(configs), await DataSourcesModule.register(configs), + await SMTPModule.register(configs), ], providers: [EmailService, EmailListener, EmailUtilService], }; diff --git a/server/src/modules/email/util.service.ts b/server/src/modules/email/util.service.ts index edc159f044..de67748510 100644 --- a/server/src/modules/email/util.service.ts +++ b/server/src/modules/email/util.service.ts @@ -1,14 +1,14 @@ import { IEmailUtilService } from '@modules/email/interfaces/IUtilService'; import { INSTANCE_SETTINGS_TYPE, INSTANCE_SYSTEM_SETTINGS } from '@modules/instance-settings/constants'; -import { InstanceSettingsUtilService } from '@modules/instance-settings/util.service'; import { WhiteLabellingUtilService } from '@modules/white-labelling/util.service'; import { Injectable } from '@nestjs/common'; +import { SMTPUtilService } from '@modules/smtp/util.service'; @Injectable() export class EmailUtilService implements IEmailUtilService { constructor( - protected readonly instanceSettingsUtilService: InstanceSettingsUtilService, - protected readonly whiteLabellingUtilService: WhiteLabellingUtilService + protected readonly whiteLabellingUtilService: WhiteLabellingUtilService, + protected readonly smtpUtilService: SMTPUtilService ) {} async retrieveWhiteLabelSettings(organizationId?: string | null): Promise { @@ -17,7 +17,7 @@ export class EmailUtilService implements IEmailUtilService { } async retrieveSmtpSettings(): Promise { - const smtpSetting = await this.instanceSettingsUtilService.getSettings( + const smtpSetting = await this.smtpUtilService.getSmtpEnv( [ INSTANCE_SYSTEM_SETTINGS.SMTP_ENABLED, INSTANCE_SYSTEM_SETTINGS.SMTP_DOMAIN, diff --git a/server/src/modules/instance-settings/constants/index.ts b/server/src/modules/instance-settings/constants/index.ts index 50b12a8337..f144d0b1ef 100644 --- a/server/src/modules/instance-settings/constants/index.ts +++ b/server/src/modules/instance-settings/constants/index.ts @@ -57,6 +57,6 @@ export function getDefaultInstanceSettings() { [INSTANCE_SYSTEM_SETTINGS.SMTP_PASSWORD]: process.env.SMTP_PASSWORD, [INSTANCE_SYSTEM_SETTINGS.SMTP_ENABLED]: process.env.SMTP_DISABLED === 'true' ? 'false' : 'true', [INSTANCE_SYSTEM_SETTINGS.SMTP_ENV_CONFIGURED]: 'true', - [INSTANCE_SYSTEM_SETTINGS.SMTP_FROM_EMAIL]: process.env.DEFAULT_FROM_EMAIL + [INSTANCE_SYSTEM_SETTINGS.SMTP_FROM_EMAIL]: process.env.DEFAULT_FROM_EMAIL, }; } diff --git a/server/src/modules/smtp/module.ts b/server/src/modules/smtp/module.ts index 16f5ed9448..8de78a12af 100644 --- a/server/src/modules/smtp/module.ts +++ b/server/src/modules/smtp/module.ts @@ -9,12 +9,13 @@ export class SMTPModule { const importPath = await getImportPath(configs?.IS_GET_CONTEXT); const { SMTPService } = await import(`${importPath}/smtp/service`); const { SmtpController } = await import(`${importPath}/smtp/controller`); - const { SMTPUtilService } = await import(`${importPath}/smtp/util.service`) + const { SMTPUtilService } = await import(`${importPath}/smtp/util.service`); return { module: SMTPModule, imports: [await InstanceSettingsModule.register(configs)], controllers: [SmtpController], providers: [SMTPService, FeatureAbilityFactory, SMTPUtilService], + exports: [SMTPUtilService], }; } } diff --git a/server/src/modules/smtp/util.service.ts b/server/src/modules/smtp/util.service.ts index ca180cd17c..ff645198f4 100644 --- a/server/src/modules/smtp/util.service.ts +++ b/server/src/modules/smtp/util.service.ts @@ -1,9 +1,40 @@ -import { Injectable } from "@nestjs/common"; -import { ISMTPUtilService } from "./interfaces/IUtilService"; +import { Injectable } from '@nestjs/common'; +import { ISMTPUtilService } from './interfaces/IUtilService'; +import { getDefaultInstanceSettings } from '@modules/instance-settings/constants'; +import { InstanceSettingsUtilService } from '@modules/instance-settings/util.service'; @Injectable() export class SMTPUtilService implements ISMTPUtilService { - getSmtpEnv(key?: string | string[], getAllData = false, type?: any): Promise { - throw new Error('Method not implemented.'); + constructor(protected instanceSettingsUtilService: InstanceSettingsUtilService) {} + async getSmtpEnv(key?: string | string[], getAllData = false, type?: any): Promise { + const defaultInstanceSettings = getDefaultInstanceSettings(); + const instanceSmtpConfig = await this.instanceSettingsUtilService.getSettings(key, false, type); + + if (instanceSmtpConfig.SMTP_ENV_CONFIGURED === 'true') { + let settings = Object.keys(defaultInstanceSettings) + .filter((e) => (Array.isArray(key) ? key.includes(e) : key === e)) + .map((e) => ({ key: e, value: defaultInstanceSettings[e] })); + + if (!settings) { + settings = []; + } + + if (key) { + (Array.isArray(key) ? key : [key]).forEach((s) => { + if (!settings.some((e) => e.key === s)) { + settings.push({ key: s, value: null }); + } + }); + } + + const instanceConfigs = {}; + settings?.forEach((config) => { + instanceConfigs[config.key] = getAllData ? config : config.value; + }); + + return Array.isArray(key) ? instanceConfigs : instanceConfigs[key]; + } + + return instanceSmtpConfig; } -} \ No newline at end of file +}