131 lines
3.4 KiB
Markdown
131 lines
3.4 KiB
Markdown
# 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=<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.
|