# eZICOM Login Helper Dieses Verzeichnis enthaelt ein kleines Python-Script, das den Login in die eZICOM5-Weboberflaeche automatisiert. Das Script macht keinen API-Login. Es ahmt den Browser-Login nach: 1. `GET /` zum Aufbau der Session-Cookie 2. `POST /user` mit den Formularfeldern `action=login`, `uid` und `pw0` ## Dateien - `ezicom_login.py`: Login-Script - `plan.copilot`: kurze Untersuchungsnotizen - `Firefox Connection.html`: gespeicherte Firefox-Profiler-Ausgabe ## Voraussetzungen - Python 3.10 oder neuer - Keine externen Python-Pakete erforderlich - Netzwerkzugriff auf `https://zm.sufw.de:31443` ## Nutzung Am sichersten ist der interaktive Modus. Dabei werden keine Zugangsdaten in der Shell-History abgelegt: ```bash ./ezicom_login.py --insecure ``` Das Script fragt dann nach Benutzername und Passwort. Optional kann die HTML-Antwort nach dem Login gespeichert werden: ```bash ./ezicom_login.py --insecure --save-response after-login.html ``` Nach einem erfolgreichen Login zeigt eZICOM ggf. erst eine Zwischenmeldung mit einem `Weiter`-Button. Diesen Schritt kann das Script ebenfalls ausfuehren: ```bash ./ezicom_login.py --insecure --follow-next --save-next-response next-page.html ``` Fuer die weitere Analyse der Zeitbuchung ist diese Folgeseite interessanter als die reine Login-Antwort. Wenn du Zugangsdaten ueber Environment-Variablen setzen willst: ```bash EZICOM_USERNAME='dein-user' EZICOM_PASSWORD='dein-passwort' ./ezicom_login.py --insecure ``` Oder trage sie in `.env` ein: ```dotenv EZICOM_USERNAME=dein-user EZICOM_PASSWORD=dein-passwort ``` Danach reicht: ```bash ./ezicom_login.py --insecure ``` Alternativ per CLI-Argument: ```bash ./ezicom_login.py -u 'dein-user' -p 'dein-passwort' --insecure ``` Hinweis: CLI-Argumente koennen in der Shell-History und kurzzeitig in der Prozessliste sichtbar sein. Fuer echte Nutzung ist der interaktive Modus oder ein sauber geschuetzter Secret-Store besser. ## Fehlerliste Die Fehlerliste zeigt fehlerhafte Tage mit dem von eZICOM gelieferten Grund an, z.B. `Sollzeit definiert, aber keine Buchung` oder `Buchungen uebrig`: ```bash ./ezicom_login.py --insecure --fehlerliste ``` Die HTML-Antwort kann optional gespeichert werden: ```bash ./ezicom_login.py --insecure --fehlerliste --save-fehlerliste-response fehlerliste.html ``` Wichtig: Fuer die Fehlerliste muss der Korrekturindex mit `go=dfhl` geladen und der HTML-Block `dfhl` ausgewertet werden. Ohne diese Eingrenzung liefert eZICOM auch die normale Buchungsliste mit zu vielen Eintraegen aus. ## Korrekturbuchungen Die Seite fuer eine neue Buchung/Korrekturbuchung wird ueber `page=corrnew` aufgerufen. Die `sid` ist session-abhaengig und muss aus dem Login-Kontext uebernommen werden: ```text https://zm.sufw.de:31443/user?page=corrnew&sid=&bt=1 ``` ## TLS / Zertifikat Bei lokalen Tests konnte Python die Zertifikatskette der eZICOM-Installation nicht verifizieren. Deshalb gibt es die Option: ```bash --insecure ``` Diese Option deaktiviert die TLS-Zertifikatspruefung. Sauberer waere es, die ausstellende CA lokal zu installieren und das Script ohne `--insecure` zu verwenden. ## Exit-Codes - `0`: Login sieht erfolgreich aus - `1`: Login wurde vom Server abgelehnt, zum Beispiel HTTP 403 - `2`: technischer Fehler, zum Beispiel Netzwerk- oder TLS-Problem ## Bekannte Grenzen Das Script loggt ein, kann Zeitbuchungen absenden und die Fehlerliste anzeigen. Es ruft keine dedizierte eZICOM-API auf, sondern ahmt den Browser nach.