Der IServHelfer ist ein Python Programm, mit dem die automatisierte Integration mit IServ vereinfacht werden soll. Mit dem IServHelfer können Aufgaben aus dem IServ Aufgaben Modul an einen Discord Webhook gesendet werden.
Webhooks Erklärung Discord Webhooks
Das Ganze ist ein Schulprojekt daher auch die Idee die unsere Schulplattform (IServ) so zu automatisieren, sodass automatisiert Pushmitteilungen an bestimmte dritte Dienste gesendet werden können.
docker run -d \
-e ISERV_HOST="ISERV_HOST" \
-e ISERV_HOST="ISERV_USER" \
-e ISERV_HOST="ISERV_PASSWORD" \
-e ISERV_HOST="DISCORD_WEBHOOK" \
maxxam/iservhelfer:latest
Erstelle eine Fork in deinem Github Account, dazu einfach oben rechts auf "Fork" klicken.
Lege ein Secret mit dem Namen CREDENTIALS_JSON mit dem Inhalt:
{
"host": "deine-schule.de/iserv/",
"username": "VORNAME.NACHNAME",
"password": "DEINPASSWORT",
"discord_webhook": "https://discord.com/api/webhooks/SERVERID/XXXXXXXX"
}
an, und kopiere in das Secret Feld, dann solltest du..
- Deine IServ Adresse (ohne https://)
"deine-schule.de/iserv/"
- Deinen IServ Benutzernamen (Es kann sein das dies nicht überall vorname.nachname ist. )
"VORNAME.NACHNAME"
- Deinen IServ Passwort:
"DEINPASSWORT"
- Und deinen Discord Webhook:
"https://discord.com/api/webhooks/SERVERID/XXXXXXXX"
Hilfe zu Discord-Webhooks
... anpassen hiermit verstößt man je nach Schule gegen die Nutzungsrichtlinien, da du so dein Passwort "Teilst"
Jetzt wird mit hilfe von GitHub Runnern alle 15 Minuten das Pythonskript ausgeführt. Die Änderungen durch das Skript werden automatisch mit deinem GitHub Secret verschlüsselt gespeichert, und beim nächsten Ausführen wieder entschlüsselt.
Das Projekt ist in Zusammenhang mit einem Schulprojekt an der Friedrich-List-Schule entstanden, und wurde teils in der Schule und, teils zu Hause von mir geschrieben.
Meine Idee war, mithilfe eines Python Scripts die Aufgaben aus dem IServ Aufgaben Modul an Drittanbieter zu senden.
Vorteile | Kritikpunkte |
---|---|
Es ist so einfacher den Überblick zu Behalten | Die Daten werden mit dritten wie z.B. Discord oder GitHub geteilt. |
Mit GitHub kann das Projekt ohne extreme Kenntnisse kostenlos gehostet werden | Die Daten werden zwar verschlüsselt, und gelöscht nach der Abfrage aber die Secrets zum Entschlüsseln hat GitHub auch. |
Kostenlos - Ein GitHub Konto ist kostenlos, so bekommt jeder die Möglichkeit das Programm z.B. automatisch alle 15 Minuten auf Microsofts Servern laufen zu lassen. | Im falle eines Hackes oder Leakes der credentials.json oder dem CREDENTIALS_JSON Secret können alle Daten (auch alte) entschlüsselt werden. |
OpenSource - | Je nach Schule verstößt man so gegen die Nutzungsverträge die man ggf. unterschrieben hat. |
Das ist Absicht, die Schulplattformen wie IServ gibt es nicht ohne Grund. Die IServ Server laufen meist auf Servern der Schulen und werden dementsprechend nicht mit dritten geteilt. Das Schützt die Privatsphäre. Mir ist Privatsphäre wichtig daher werden Informationen wie Anhänge/ Dateien der Aufgaben oder weitere Informationen nicht mit gesendet.
Ein großes Problem bleibt aber weiter bestehen, und zwar das man die Zugangsdaten zu seinem IServ Account mit GitHub "teilt". Kostenlos hat halt auch immer seine Nachteile. Daher ist ein Docker-Image in Planung, welches man dann mit nur einem Befehl zum Laufen bringen kann (vorausgesetzt Docker ist installiert.)
Ich habe Abhängikeiten wie:
und die Python Pakete:
- requests
- cryptography (Fernet)
- Fernet habe ich genutzt, um die Daten die gespeichert bleiben sollen zu verschlüsseln.
- Die Daten werden verschlüsselt um diese dann mithilfe eines Git-Commits auf GitHub (öffentlich, aber ja dann verschlüsselt) hochzuladen.
- Hochgeladen werden sie damit sie später wieder verwendet werden können. Um die gleiche Benachrichtigung nicht zweimal zu senden.
- Fernet habe ich genutzt, um die Daten die gespeichert bleiben sollen zu verschlüsseln.
Ich habe als ich die Idee hatte, habe ich den HTTP-Traffic zwischen IServ und dem Browser mit Burp Suite angeschaut. Und mir Notizen über Request Header und Body gemacht, sodass ich später HTTP-Anfragen mithilfe von dem Python Paketes "requests" nachstellen kann.
Ich bin nach dem Code and Fix Vorgehensmodell vorgegangen, welches recht chaotisch aber für mich intuitiv war da ich so in der Vergangenheit auch in Programmierprojekten so vorgegangen bin.
Ich bin mit dem Projekt zufrieden, aber es gibt sicher noch vieles was verbessert werden kann dazu zählen zum Beispiel: Eine Bessere Verschlüsselung, eine einfachere Installation, oder übersichtlicherer Code.
Die Quellen zu den Hilfeartikeln sind alle direkt verlinkt, aber hier noch einmal zusammengefasst.
-
Hilfeseiten
-
Python Abhängikkeiten
-
Python Pakete
-
Software
- Verwendete Programmiersprache Python
- Containervirtualisierung Docker
- Netzwerkanalyse-Werkzeugkasten Burp Suite
-
Sonstige
- HTML der Dokumentation erstellt mit der GitHub Markdown API
- CSS der Dokumentation: Primer CSS
- HTTP
- Die Schule auf die ich gehe: Friedrich-List-Schule