Skip to content
This repository has been archived by the owner on May 23, 2023. It is now read-only.

Max-42/IServHelfer

Repository files navigation

IServHelfer

Logo

Letzter Lauf

Was ist der "IServ Helfer"?

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

Woher die Idee?

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.

Installation mit Docker (Einfach)

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

Installation mit Github (Etwas komplexer)

Forken

Erstelle eine Fork in deinem Github Account, dazu einfach oben rechts auf "Fork" klicken.

Fork erstellen

Secrets zur Anmeldung erstellen

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"

Hilfe zu Secrets

Fertig

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.

Vorgehensweise

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.

Die Idee

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.

Warum werden nur so wenig Infos gesendet?

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.)

Abhängigkeiten

Ich habe Abhängikeiten wie:

und die Python Pakete:

  • requests
    • Requests habe ich genutzt, um HTTP-Anfragen zu Senden um so mit den Webservern von unserem Schul-IServ und z.B Discord komunizieren zu können.
  • 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.

Vorgehen

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.

Fazit

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.

Quellen

Die Quellen zu den Hilfeartikeln sind alle direkt verlinkt, aber hier noch einmal zusammengefasst.

Aufgerufen am 6/13/2021

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published