Kunde: E-Mail Pflichtfeld + keine verwaltete Provider-Domain erlaubt
Die private Kunden-E-Mail (Customer.email) darf nicht auf einer der bei den E-Mail-Providern konfigurierten Domains (bzw. Subdomains) liegen - sonst traegt man versehentlich eine unserer verwalteten Weiterleitungs-/Mailbox- Adressen als private Adresse ein. Zudem ist E-Mail jetzt Pflichtfeld. Backend: createCustomer/updateCustomer pruefen Pflicht + Domain (neue Helper getConfiguredEmailDomains/emailUsesDomain im emailProvider-Service); email aus nullableFields entfernt. Frontend: E-Mail-Feld required + Hinweis. Verifiziert: Provider-Domain + Subdomain (case-insensitiv) verboten, Fremd-Domains erlaubt. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -74,6 +74,32 @@ export async function getActiveProviderConfig() {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Alle konfigurierten Provider-Domains (lowercase, dedupliziert). Das sind
|
||||
* UNSERE verwalteten Mailbox-/Weiterleitungs-Domains (z.B. stressfrei-wechseln.de)
|
||||
* – eine private Kunden-E-Mail darf darauf NICHT liegen, sonst trägt man
|
||||
* versehentlich eine unserer Weiterleitungsadressen als private Adresse ein.
|
||||
*/
|
||||
export async function getConfiguredEmailDomains(): Promise<string[]> {
|
||||
const configs = await prisma.emailProviderConfig.findMany({ select: { domain: true } });
|
||||
const domains = configs
|
||||
.map((c) => (c.domain || '').trim().toLowerCase())
|
||||
.filter((d) => d.length > 0);
|
||||
return [...new Set(domains)];
|
||||
}
|
||||
|
||||
/**
|
||||
* true, wenn die E-Mail auf einer der übergebenen Domains (oder einer Subdomain
|
||||
* davon) liegt. Vergleich case-insensitiv.
|
||||
*/
|
||||
export function emailUsesDomain(email: string, domains: string[]): boolean {
|
||||
const at = email.lastIndexOf('@');
|
||||
if (at < 0) return false;
|
||||
const host = email.slice(at + 1).trim().toLowerCase();
|
||||
if (!host) return false;
|
||||
return domains.some((d) => host === d || host.endsWith('.' + d));
|
||||
}
|
||||
|
||||
export interface CreateProviderConfigData {
|
||||
name: string;
|
||||
type: 'PLESK' | 'CPANEL' | 'DIRECTADMIN';
|
||||
|
||||
Reference in New Issue
Block a user