added backup and email client

This commit is contained in:
2026-02-01 00:02:35 +01:00
parent ef18381dd8
commit 8c9e61cf17
210 changed files with 24211 additions and 742 deletions
@@ -7,6 +7,10 @@ import {
EmailExistsResult,
EmailOperationResult,
CreateEmailParams,
CreateEmailWithMailboxParams,
CreateEmailWithMailboxResult,
EnableMailboxParams,
UpdateMailboxPasswordParams,
RenameEmailParams,
} from './types.js';
@@ -173,9 +177,20 @@ export class PleskEmailProvider implements IEmailProvider {
// stdout sollte die Mail-Infos enthalten
const exists = result.stdout?.toLowerCase().includes(localPart.toLowerCase());
// Mailbox-Status aus stdout parsen (Format: "Mailbox: true" oder "Mailbox: false")
let hasMailbox: boolean | undefined;
if (exists && result.stdout) {
const mailboxMatch = result.stdout.match(/Mailbox:\s*(true|false)/i);
if (mailboxMatch) {
hasMailbox = mailboxMatch[1].toLowerCase() === 'true';
}
}
return {
exists,
email: exists ? email : undefined,
hasMailbox,
};
} catch (error) {
// HTTP-Fehler oder Netzwerkfehler
@@ -231,6 +246,127 @@ export class PleskEmailProvider implements IEmailProvider {
}
}
async createEmailWithMailbox(params: CreateEmailWithMailboxParams): Promise<CreateEmailWithMailboxResult> {
const { localPart, forwardTargets, password } = params;
const email = `${localPart}@${this.config.domain}`;
try {
// Prüfen ob schon existiert
const exists = await this.emailExists(localPart);
if (exists.exists) {
return {
success: false,
error: `E-Mail ${email} existiert bereits`,
};
}
// Plesk CLI API: Mail-Account mit echter Mailbox erstellen
// -mailbox true: Echte Mailbox (IMAP/SMTP-Zugang)
// -passwd: Passwort für die Mailbox
// -forwarding true: Zusätzlich Weiterleitung aktivieren
await this.request('POST', '/api/v2/cli/mail/call', {
params: [
'--create', email,
'-mailbox', 'true',
'-passwd', password,
'-forwarding', 'true',
'-forwarding-addresses', `add:${forwardTargets.join(',')}`,
],
});
return {
success: true,
message: `E-Mail ${email} mit Mailbox erfolgreich erstellt`,
email,
};
} catch (error) {
const errorMessage = error instanceof Error ? error.message : 'Unbekannter Fehler';
console.error('Plesk createEmailWithMailbox error:', error);
return {
success: false,
error: `Fehler beim Erstellen der E-Mail mit Mailbox: ${errorMessage}`,
};
}
}
async enableMailboxForExisting(params: EnableMailboxParams): Promise<EmailOperationResult> {
const { localPart, password } = params;
const email = `${localPart}@${this.config.domain}`;
try {
// Prüfen ob E-Mail existiert
const exists = await this.emailExists(localPart);
if (!exists.exists) {
return {
success: false,
error: `E-Mail ${email} nicht gefunden`,
};
}
// Plesk CLI API: Mailbox für existierende E-Mail aktivieren
// --update: Existierende E-Mail aktualisieren
// -mailbox true: Mailbox aktivieren
// -passwd: Passwort für die Mailbox setzen
await this.request('POST', '/api/v2/cli/mail/call', {
params: [
'--update', email,
'-mailbox', 'true',
'-passwd', password,
],
});
return {
success: true,
message: `Mailbox für ${email} erfolgreich aktiviert`,
};
} catch (error) {
const errorMessage = error instanceof Error ? error.message : 'Unbekannter Fehler';
console.error('Plesk enableMailboxForExisting error:', error);
return {
success: false,
error: `Fehler beim Aktivieren der Mailbox: ${errorMessage}`,
};
}
}
async updateMailboxPassword(params: UpdateMailboxPasswordParams): Promise<EmailOperationResult> {
const { localPart, password } = params;
const email = `${localPart}@${this.config.domain}`;
try {
// Prüfen ob E-Mail existiert
const exists = await this.emailExists(localPart);
if (!exists.exists) {
return {
success: false,
error: `E-Mail ${email} nicht gefunden`,
};
}
// Plesk CLI API: Passwort für existierende E-Mail aktualisieren
// --update: Existierende E-Mail aktualisieren
// -passwd: Neues Passwort setzen
await this.request('POST', '/api/v2/cli/mail/call', {
params: [
'--update', email,
'-passwd', password,
],
});
return {
success: true,
message: `Passwort für ${email} erfolgreich aktualisiert`,
};
} catch (error) {
const errorMessage = error instanceof Error ? error.message : 'Unbekannter Fehler';
console.error('Plesk updateMailboxPassword error:', error);
return {
success: false,
error: `Fehler beim Aktualisieren des Passworts: ${errorMessage}`,
};
}
}
async deleteEmail(localPart: string): Promise<EmailOperationResult> {
const email = `${localPart}@${this.config.domain}`;