import { Request, Response } from 'express'; import { DyFM_EnvironmentFlag, DyFM_HttpCallType } from '@futdevpro/fsm-dynamo'; import { DyNTS_Controller } from '../../_services/route/controller.service'; import { DyNTS_Endpoint_Params } from '../../_models/control-models/endpoint-params.control-model'; import { DyNTS_global_settings } from '../../_collections/global-settings.const'; import { DyNTS_TestEmailSink_Service } from './_services/dynts-test-email-sink.service'; import { DyNTS_SentTestMail } from './_models/data-models/dynts-sent-test-mail.data-model'; /** * A sent-mail read-endpoint konfigja — az authPreProcess a fogyaszto sajat vedelme (pl. az * auth-service `validateE2EKey`-e, X-E2E-KEY headerrel). ERŐSEN ajanlott megadni. */ export interface DyNTS_TestEmailSinkController_Config { /** Opcionalis auth preprocess (pl. validateE2EKey). Ha nincs → csak az env-gate ved. */ authPreProcess?: (req: Request, res: Response) => Promise; } /** * BFR-MASTERPROMPTER-015 (MP-19) — sent-mail READ controller. * * GET /get?to=&since=&limit= → a sink-elt teszt-emailek (legfrissebb elol), a HTML-bol * kinyert `links` tombbel (pl. verifikacios link). KETTOS vedelem: (1) a fogyaszto authPreProcess-e * (X-E2E-KEY), (2) beepitett HARD env-gate — prod/dev kornyezetben MINDIG 403, konfigtol fuggetlenul. */ export class DyNTS_TestEmailSink_Controller extends DyNTS_Controller { private static config: DyNTS_TestEmailSinkController_Config = {}; static configure(config: DyNTS_TestEmailSinkController_Config): void { DyNTS_TestEmailSink_Controller.config = config; } static getInstance(): DyNTS_TestEmailSink_Controller { return DyNTS_TestEmailSink_Controller.getSingletonInstance(); } setupEndpoints(): void { const preProcesses: ((req: Request, res: Response) => Promise)[] = []; if (DyNTS_TestEmailSink_Controller.config.authPreProcess) { preProcesses.push(DyNTS_TestEmailSink_Controller.config.authPreProcess); } this.endpoints = [ new DyNTS_Endpoint_Params({ name: 'getSentTestMails', type: DyFM_HttpCallType.get, endpoint: '/get', preProcesses: preProcesses, logRequest: false, tasks: [ async (req: Request, res: Response, issuer: string): Promise => { // HARD env-gate: a teszt-emailek TARTALMA (verif-linkek!) prod-on sosem olvashato. if (![ DyFM_EnvironmentFlag.local, DyFM_EnvironmentFlag.test ] .includes(DyNTS_global_settings.env_settings.environment)) { res.status(403).send({ error: 'Sent-mail endpoint is not available in this environment.' }); return; } const mails: DyNTS_SentTestMail[] = await DyNTS_TestEmailSink_Service.findSentMails({ to: typeof req.query.to === 'string' ? req.query.to : undefined, sinceIso: typeof req.query.since === 'string' ? req.query.since : undefined, limit: req.query.limit ? parseInt(String(req.query.limit), 10) : undefined, }, issuer); res.send({ count: mails.length, mails: mails.map((mail: DyNTS_SentTestMail): object => ({ to: mail.to, subject: mail.subject, html: mail.html, links: DyNTS_TestEmailSink_Service.extractLinks(mail.html), issuer: mail.issuer, createdAt: mail.__created, })), }); }, ], }), ]; } }