import { IsEmail, IsIn, IsInt, IsNotEmpty, IsOptional, IsString, Max, Min, } from 'class-validator'; /** * DTO for saving or testing an SMTP configuration. * * Security: T-07-08 — host/port/encryption validated to prevent open-relay abuse. * Password field is optional on PUT (empty string = preserve existing stored password). */ export class SmtpConfigDto { @IsString() @IsNotEmpty() host!: string; @IsInt() @Min(1) @Max(65535) port!: number; /** 'none' | 'starttls' | 'ssl-tls' */ @IsIn(['none', 'starttls', 'ssl-tls']) encryption!: string; @IsOptional() @IsString() username?: string; /** * Plaintext password submitted by the client. * Empty string means "keep existing stored password" on PUT. * Never returned in GET responses. */ @IsOptional() @IsString() password?: string; @IsEmail() fromAddress!: string; @IsOptional() @IsEmail() testTo?: string; /** * Postfach fuer den Fehler-melden-Knopf (quick-260914-m97). Optional: * fehlt das Feld im PUT, bleibt der gespeicherte Wert; `null` loescht ihn. * Absicht (T-M97-05): nur ein Administrator dieses Mandanten kann das * Ziel aller Fehlermeldungen seines Mandanten setzen — der Weg fuehrt * ausschliesslich ueber `PUT /settings/smtp` mit `@Roles(ADMIN, SUPER_ADMIN)`. */ @IsOptional() @IsEmail() bugReportRecipient?: string | null; }