fix(kerio): korrekte Admin-API gemäß Delivery.idl + Pop3Account-Doku
- Methoden: Delivery.getPop3AccountList / addPop3AccountList / setPop3Account (vorher geraten als Pop3Accounts.set/.create → Method not found). - Pop3Account-Felder mit den richtigen Namen: isActive (statt enabled), mode (statt sslMode), authentication (statt authType), und leaveOnServer.removeAfterPeriod als OptionalLong-Wrapper. Falsche Namen wurden von Kerio still ignoriert → Sammler war inaktiv. - User-Struct: allowPasswordChange=false (statt mayChangePassword, das es nicht gibt). emailAddresses weggelassen, Kerio leitet die primäre Adresse aus loginName+domain ab. - Kerio-Step in 2 Sub-Steps aufgeteilt: User (skip wenn vorhanden) + POP3 (upsert). Damit wird bei einem zweiten Lauf der Sammler nicht übersprungen, nur weil der User schon existiert. - POP3-Sammler ist jetzt UPSERT: existierende werden via setPop3Account überschrieben → Selbstreparatur kaputter Einträge + Passwort- Änderungen aus der CSV ziehen sich von selbst nach. GUI: 👁/🙈-Toggle pro Passwort-Feld (Klartext temporär einsehbar). Filenames der Sammel-PDFs + Admin-Report ohne Zeitstempel – erneuter Lauf überschreibt statt anzuhäufen. README: Ablauf-Sektion + Idempotenz-Tabelle aktualisiert; Kerio- Caveat ersetzt durch konkrete Methoden-/Feld-Liste mit Doku-Link. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -77,10 +77,12 @@ class AccountRow(ttk.Frame):
|
||||
cell.grid(row=1, column=col, padx=2, sticky="w")
|
||||
ttk.Label(cell, text=label,
|
||||
font=("Helvetica", 8)).pack(anchor="w")
|
||||
show = "•" if "kennwort" in key else None
|
||||
e = ttk.Entry(cell, width=width, show=show)
|
||||
e.pack()
|
||||
self.entries[key] = e
|
||||
if "kennwort" in key:
|
||||
self._make_password_entry(cell, key, width)
|
||||
else:
|
||||
e = ttk.Entry(cell, width=width)
|
||||
e.pack()
|
||||
self.entries[key] = e
|
||||
|
||||
def _make_field(self, parent, key, label, width, side="left"):
|
||||
cell = ttk.Frame(parent)
|
||||
@@ -90,6 +92,26 @@ class AccountRow(ttk.Frame):
|
||||
e.pack()
|
||||
self.entries[key] = e
|
||||
|
||||
def _make_password_entry(self, parent, key, width):
|
||||
"""Passwort-Entry + Auge-Toggle nebenan."""
|
||||
row = ttk.Frame(parent)
|
||||
row.pack()
|
||||
e = ttk.Entry(row, width=width, show="•")
|
||||
e.pack(side="left")
|
||||
btn = ttk.Button(row, text="👁", width=2)
|
||||
btn.config(command=lambda: self._toggle_password(e, btn))
|
||||
btn.pack(side="left", padx=(2, 0))
|
||||
self.entries[key] = e
|
||||
|
||||
@staticmethod
|
||||
def _toggle_password(entry, btn):
|
||||
if entry.cget("show"):
|
||||
entry.config(show="")
|
||||
btn.config(text="🙈")
|
||||
else:
|
||||
entry.config(show="•")
|
||||
btn.config(text="👁")
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
return {k: e.get().strip() for k, e in self.entries.items()}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user