diff --git a/src/notification/backend-transport.ts b/src/notification/backend-transport.ts index c35e91ab..1fe13001 100644 --- a/src/notification/backend-transport.ts +++ b/src/notification/backend-transport.ts @@ -13,6 +13,7 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ +import {Logger} from '@openstapps/logger'; import {SMTP} from '@openstapps/logger/lib/smtp'; import {Transport, VerifiableTransport} from '@openstapps/logger/lib/transport'; @@ -39,7 +40,7 @@ export class BackendTransport { /** * Stores information if transport is in state of waiting for the verification */ - private readonly waitingForVerification: boolean; + private waitingForVerification = false; /** * A (SMTP) transport which includes settings for sending mails @@ -47,16 +48,30 @@ export class BackendTransport { protected transport: SMTP | undefined; /** - * Provides an instance of a transport + * Destroys the singleton instance of the class (for unit test purposes) */ - public static getTransportInstance(): SMTP | undefined { + public static destroy() { + delete BackendTransport._instance; + } + + /** + * Provides instance of a backend transport + */ + public static getInstance(): BackendTransport { if (typeof BackendTransport._instance !== 'undefined') { - return BackendTransport._instance.transport; + return BackendTransport._instance; } BackendTransport._instance = new BackendTransport(); - return BackendTransport._instance.transport; + return BackendTransport._instance; + } + + /** + * Provides an instance of a transport + */ + public static getTransportInstance(): SMTP | undefined { + return BackendTransport.getInstance().transport; } private constructor() { @@ -67,27 +82,30 @@ export class BackendTransport { this.transport = SMTP.getInstance(); } catch (error) { if (process.env.ALLOW_NO_TRANSPORT === 'true') { - /* tslint:disable-next-line:no-console */ - console.warn('SMTP error was ignored.'); + Logger.warn('SMTP error was ignored.'); } else { throw error; } } if (typeof this.transport !== 'undefined' && isTransportWithVerification(this.transport)) { - this.waitingForVerification = true; + void this.verifyTransport(this.transport); + } + } - this.transport.verify() - .then((message) => { - if (typeof message === 'string') { - // tslint:disable-next-line:no-console - console.log(message); - } - }) - .catch((err) => { - throw err; - }); - } else { + /** + * Verifies the transport using its verification method + */ + private async verifyTransport(transport: VerifiableTransport): Promise { + this.waitingForVerification = true; + try { + const successful = await transport.verify(); + if (successful) { + Logger.log('SMTP verification successful.'); + } + } catch (err) { + throw err; + } finally { this.waitingForVerification = false; } }