add manual/api/ssh Plesk-Backends, Minimal-PDF, --pdf-only und GUI-Verbesserungen
- PLESK_BACKEND={manual,api,ssh}: manual als Default für Shared Hosts,
api unverändert, ssh ruft `plesk bin mail` per paramiko auf.
- POP3_PORT default 995, POP3_SSL mit Auto-Erkennung anhand Port.
- Kerio: User wird mit mayChangePassword=False angelegt.
- Zusätzliche Minimal-PDF (nur Email + Cloud) pro Konto + Sammel-Variante,
IMAP-Port konfigurierbar.
- CLI-Flag --pdf-only und entsprechender GUI-Button "📄 Nur PDF".
- GUI: Lösch-Button "✕ löschen" sichtbarer, letzte Zeile löschbar.
- PDFs sind kunden-tauglich (kein Status-Block, kein ACHTUNG-Hinweis);
Anlage-Status separat in _admin_report_<ts>.txt.
- README dokumentiert die Skip-Logik pro Dienst und ihre Caveats.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -53,8 +53,10 @@ Dreistufige Wahl, je nachdem welchen Zugriff du auf das Plesk hast:
|
||||
| `NEXTCLOUD_ADMIN_USER` | Admin-User (App-Passwort empfohlen) |
|
||||
| `NEXTCLOUD_ADMIN_PASSWORD` | Admin- oder App-Passwort |
|
||||
| `POP3_PORT` | POP3-Sammler in Kerio (default `995` = POP3S) |
|
||||
| `POP3_SSL` | Leer → Auto: `110` ⇒ aus, sonst an. Manuell `true`/`false`. |
|
||||
| `POP3_KEEP_DAYS` | Tage, die Mails auf Plesk verbleiben (default `14`) |
|
||||
| `SMTP_PORT` | Nur für die PDF-Anzeige (default `465`) |
|
||||
| `SMTP_PORT` | Nur für die PDF-Anzeige (default `465`, Mailprogramm-Konfig) |
|
||||
| `IMAP_PORT` | Nur für die Minimal-PDF-Anzeige (default `993` = IMAPS) |
|
||||
| `VERIFY_TLS` | `false` nur bei Test/selbst signierten Zertifikaten |
|
||||
|
||||
---
|
||||
@@ -114,10 +116,29 @@ case-insensitive. Beispiel: [`example.csv`](./example.csv).
|
||||
|
||||
### CLI
|
||||
|
||||
Voller Lauf (Plesk + Kerio + Nextcloud + PDFs):
|
||||
|
||||
```bash
|
||||
python deploy.py --csv example.csv --output ./output
|
||||
python deploy.py --csv kunden.csv --output ./output
|
||||
```
|
||||
|
||||
Nur PDFs aus der CSV neu erzeugen, ohne Plesk/Kerio/Nextcloud anzufassen
|
||||
(z.B. wenn die Konten schon angelegt sind oder eine PDF wiederholt
|
||||
ausgedruckt werden soll):
|
||||
|
||||
```bash
|
||||
python deploy.py --csv kunden.csv --pdf-only
|
||||
```
|
||||
|
||||
Weitere Flags:
|
||||
|
||||
| Flag | Bedeutung |
|
||||
| ------------ | --------------------------------------------------------------- |
|
||||
| `--csv PATH` | CSV-Datei einlesen |
|
||||
| `--output D` | Verzeichnis für PDFs + Admin-Report (default `./output`) |
|
||||
| `--pdf-only` | Nur PDFs schreiben, keine Account-Anlage |
|
||||
| `--gui` | GUI starten (auch ohne `--csv` aufrufbar) |
|
||||
|
||||
Exit-Code `0` wenn alle Konten ohne Fehler verarbeitet wurden, sonst `1`.
|
||||
|
||||
### GUI
|
||||
@@ -129,11 +150,13 @@ python deploy.py
|
||||
```
|
||||
|
||||
In der GUI:
|
||||
- Per **+ Zeile** beliebig viele Konten hinzufügen.
|
||||
- **+ Zeile** fügt eine neue Eingabezeile hinzu (Endlosfelder).
|
||||
- **✕ löschen** entfernt eine Zeile (rote Schrift).
|
||||
- **CSV laden** füllt die Felder aus einer bestehenden CSV.
|
||||
- **Ausgabeordner** wählen, dann **Ausführen ▶**.
|
||||
- Log unten zeigt Fortschritt; bei jedem Konto entsteht eine
|
||||
Einzel-PDF, am Ende eine Sammel-PDF mit Zeitstempel.
|
||||
- **Ausgabeordner** wählen.
|
||||
- **Ausführen ▶** legt die Konten an + erzeugt PDFs + Admin-Report.
|
||||
- **📄 Nur PDF** schreibt nur die PDFs ohne API-Aufrufe.
|
||||
- Log unten zeigt Fortschritt.
|
||||
|
||||
---
|
||||
|
||||
@@ -153,16 +176,41 @@ Nextcloud: User vorname.nachname mit Gruppe + Quota anlegen
|
||||
PDF (einzeln) schreiben
|
||||
```
|
||||
|
||||
Am Ende:
|
||||
- eine **Einzel-PDF** pro Konto + eine **Sammel-PDF** – beide enthalten
|
||||
ausschließlich Zugangsdaten und sind 1:1 an den Kunden weitergebbar.
|
||||
- ein **`_admin_report_<timestamp>.txt`** mit Status pro Konto
|
||||
(✓ angelegt / · übersprungen / ⚠ manuell / ✗ Fehler) – **NICHT für
|
||||
den Kunden**, das ist deine Admin-Übersicht.
|
||||
Am Ende werden pro Lauf vier Dokument-Sorten geschrieben (alle in `output/`):
|
||||
|
||||
Bestehende Konten werden **übersprungen** (kein Fehler) und im
|
||||
Admin-Report entsprechend markiert. Damit kann eine CSV gefahrlos
|
||||
zweimal laufen.
|
||||
| Datei | Inhalt |
|
||||
| ---------------------------------------------- | --------------------------------------------------------------------- |
|
||||
| `zugangsdaten_<email>.pdf` | **Voll** pro Benutzer: Plesk-Mailpostfach + Kerio + Nextcloud |
|
||||
| `zugangsdaten_minimal_<email>.pdf` | **Minimal** pro Benutzer: nur Email (Kerio) + Cloud (Nextcloud) |
|
||||
| `zugangsdaten_gesamt_<ts>.pdf` | Sammel-PDF aller voller Datensätze |
|
||||
| `zugangsdaten_gesamt_minimal_<ts>.pdf` | Sammel-PDF aller minimalen Datensätze |
|
||||
| `_admin_report_<ts>.txt` | Status pro Konto (✓/·/⚠/✗). **NICHT für den Kunden** – Admin-Doku. |
|
||||
|
||||
Die **Minimal-PDF** enthält genau das, was der Endkunde fürs Mailprogramm
|
||||
und die Cloud-Anmeldung braucht (Mailadresse, Kennwort, SMTP, IMAP, Cloud-URL,
|
||||
Cloud-Username, Cloud-Kennwort) – ohne Backend-Details wie POP3-Sammler oder
|
||||
Plesk-Mailserver.
|
||||
|
||||
### Idempotenz – bestehende Konten werden übersprungen
|
||||
|
||||
Jeder Dienst wird **einzeln** geprüft, bevor angelegt wird:
|
||||
|
||||
| Dienst | Prüfung | Wenn vorhanden |
|
||||
| --------- | -------------------------------------------------------------------- | ----------------------------------------------------------------- |
|
||||
| Plesk | `mail --info` (api/ssh) bzw. ohnehin Manual-Modus | übersprungen |
|
||||
| Kerio | `Users.get` mit `loginName` + `domainId` | übersprungen, **kein neuer POP3-Sammler** (sonst doppelt!) |
|
||||
| Nextcloud | `GET /ocs/v2.php/cloud/users/<vorname.nachname>` | übersprungen, **keine Quota-/Gruppen-Änderung** |
|
||||
|
||||
→ Eine CSV kann gefahrlos zwei- oder dreimal durchgejagt werden, z.B. wenn
|
||||
beim ersten Lauf nur Plesk geklappt hat und du Kerio + Nextcloud nachziehen
|
||||
willst. Status pro Konto und Dienst steht im Admin-Report als
|
||||
`✓ angelegt` / `· übersprungen` / `⚠ manuell` / `✗ Fehler`.
|
||||
|
||||
**Caveats**:
|
||||
- Kerio prüft `loginName` *in der zur Mailadresse passenden Domain* – Aliase
|
||||
auf einer anderen Domain werden nicht erkannt.
|
||||
- Nextcloud prüft den abgeleiteten Username `vorname.nachname` – existiert
|
||||
derselbe Mensch dort unter abweichendem Username, wird das nicht gefunden.
|
||||
|
||||
## Workflow bei `PLESK_BACKEND=manual` (Shared Host)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user