import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { MailerService } from '@nestjs-modules/mailer'; @Injectable() export class PortalMailService { constructor( private readonly mailer: MailerService, private readonly config: ConfigService, ) {} async sendVerificationMail(to: string, token: string): Promise { const url = `${this.publicWebUrl}/verify-email?token=${encodeURIComponent(token)}`; await this.mailer.sendMail({ to, subject: 'LDAP Portal: E-Mail bestaetigen', html: `

Bitte bestaetige deine Registrierung:

${url}

`, text: `Bitte bestaetige deine Registrierung: ${url}`, }); } async sendPasswordResetMail(to: string, token: string): Promise { const url = `${this.publicWebUrl}/reset-password?token=${encodeURIComponent(token)}`; await this.mailer.sendMail({ to, subject: 'LDAP Portal: Passwort zuruecksetzen', html: `

Du kannst dein Passwort ueber diesen Link zuruecksetzen:

${url}

`, text: `Du kannst dein Passwort ueber diesen Link zuruecksetzen: ${url}`, }); } async sendEmailChangeMail(to: string, token: string): Promise { const url = `${this.publicWebUrl}/account/email?token=${encodeURIComponent(token)}`; await this.mailer.sendMail({ to, subject: 'LDAP Portal: neue E-Mail bestaetigen', html: `

Bitte bestaetige deine neue E-Mail-Adresse:

${url}

`, text: `Bitte bestaetige deine neue E-Mail-Adresse: ${url}`, }); } async sendRegistrationPendingApprovalMail( to: string[], registration: { email: string; displayName: string }, ): Promise { const url = `${this.publicWebUrl}/admin/registrations`; await this.mailer.sendMail({ to, subject: 'LDAP Portal: Registrierung wartet auf Freigabe', html: `

Eine Registrierung wurde per E-Mail bestaetigt und wartet jetzt auf Freigabe.

Name: ${this.escapeHtml(registration.displayName)}
E-Mail: ${this.escapeHtml(registration.email)}

${url}

`, text: [ 'Eine Registrierung wurde per E-Mail bestaetigt und wartet jetzt auf Freigabe.', `Name: ${registration.displayName}`, `E-Mail: ${registration.email}`, `Admin-Bereich: ${url}`, ].join('\n'), }); } private get publicWebUrl(): string { return this.config.get('PUBLIC_WEB_URL') ?? 'http://localhost:4200'; } private escapeHtml(value: string): string { return value .replaceAll('&', '&') .replaceAll('<', '<') .replaceAll('>', '>') .replaceAll('"', '"') .replaceAll("'", '''); } }