Technisches Setup des Systems
Backend
Damit die App funktioniert, muss zuerst das Backend aufgesetzt werden.
Hierfür ist ein Server mit Linux zu empfehlen, ein anderes OS würde aber durchaus auch funktionieren.
Installation
Nach erfolgreichem Aufsetzen des Servers und Installierens von Python (Version >= 3.7) den Source Code herunterladen mit
git clone https://zivgitlab.uni-muenster.de/educast-nrw/student-work/app/backend.git
Alle vom Backend verwendeten Dependencies können anschließend mit pip installiert werden:
cd backend
pip install -r requirements.txt
Config erstellen
Als nächstes muss die Config aufgesetzt werden. Der einfachste Weg dazu ist, das Programm zu starten, sodass eine leere Konfigurationsdatei erstellt wird.
python main.py [--config '/path/to/.login.yaml']
Wenn keine Config-Flag übergeben wird, wird die Konfigurationdatei '.login.yaml' im home-Directory des aktuellen Users erstellt. Durch Verwendung des Arguments kann die Datei einen anderen Pfad und Namen bekommen, wobei wichtig ist, dass der Dateityp YAML ist.
Konfiguration
In der Konfigurationsdatei müssen die Login-Credentials für die verwendeten API-User, sowie für die MySQL-Datenbank angeben werden. Außerdem muss der zu verwendene private Schlüssel angegeben werden.
API-User
Die API-User müssen in der Section apiuser
konfiguriert werden. Jeder dieser User ist eine weitere Section, die benannt ist mit der dazugehörigen Domain der jeweiligen Universität. Dies ist wichtig, um die API-Requests, bei Studierenden von unterschiedlichen Universitäten, dem richtigen API-User zu schicken.
Die Section ist ein Dictionary mit den String-Werten url
, username
und password
.
Für die Uni Münster würde die Konfiguration also wie folgt aussehen.
apiuser:
uni-muenster.de:
url: https://link.to.uni-muenster.educast.de/api
username: 'username'
password: 'password'
Die Section apiuser
kann beliebig viele API-User enthalten, bzw. sollte für jede Uni, die den educast.nrw nutzt, einen enthalten. Die Hintergründe sind hier genauer erklärt.
Datenbank
Die Section database
konfiguriert die Verbindung zur MySQL-Datenbank. Hier müssen die Host-Addresse, die verwendete Datenbank und der User konfiguriert werden. Der User muss Schreibzugriff in der Datenbank haben, alle genutzten Tabellen werden dann automatisch erstellt.
database:
database: backend
host: localhost
user: 'username'
password: 'password'
Keypair
Für den Ablauf des Logins wird ein Schlüsselpaar benötigt, welches extern generiert werden muss. Der Pfad zum privaten Schlüssel muss in der .login.yaml
in der Section keypair
unter private
angegeben werden.
keypair:
private: '/path/to/private_key'
Da nach JWKS Spezifikation mehrere Public Keys valide sein können, muss der öffentliche Schlüssel, bzw. jeder neu Generierte, mittels einer Funktion hinzugefügt werden (siehe Login). Diese Funktion kann mit dem folgenden Befehl ausgeführt werden:
python -m login.add_new_key("public_key")
Als Parameter muss der jeweilige Public Key übergeben werden.
Server starten
Nach erfolgreichem Konfigurieren kann das Backend gestartet werden. Zum Starten folgenden Befehl ausführen:
python main.py
Wenn gewünscht, kann der Pfad der Konfigurationsdatei mit dem Argument --config '/path/to/.login.yaml'
übergeben werden.
Der Server wird standardmäßig auf Port 80 gestartet. Auch das ist anpassbar mit dem Argument --port 8080
. Meistens werden zum binden eines Ports unter 1000 Root-Rechte benötigt.
Frontend
Die App ist mit dem Framework Flutter in Dart geschrieben. Der erste Schritt um die App zu kompilieren ist, Flutter nach der offiziellen Anleitung zu installieren.
Kompilierung
Android
-
Um die App für Android zu kompilieren muss das Appbundle oder die APK gebaut werden. Das Appbundle enthält die APKs für unterschiedliche Laufzeiten (ARM 32-bit, ARM 64-bit, x86 64-bit) und ist deshalb vom Google Playstore bevorzugt. Zum Erstellen muss im Projektordner
flutter build appbundle
ausgeführt werden. Anschließend ist es unter/build/app/outputs/bundle/release/app.aab
zu finden. -
Um die APKs zu kompilieren muss
flutter build apk --split-per-abi
ausgeführt werden. Die Flag führt dazu, dass für die unterschiedlichen Laufzeiten eigene APKs erstellt werden, anstatt eine Große, die den kompilierten Code von allen enthält. Anschließend können alle gebauten APKs unter/build/app/outputs/bundle/release
gefunden werden. -
Um die App nun direkt auf einem Gerät zu installieren, muss es über USB angeschlossen werden und USB-Debugging in den Einstellungen aktiviert sein. Anschließend reicht es
flutter install
auszuführen und der richtige Build wird installiert.
Für weitere Informationen rufen Sie die Dokumentation des Vorgangs auf der Flutter Website auf.
iOS
-
Um die App auf einem iOS-Gerät zu installieren, wird ein Mac und ein Apple Developer Account gebraucht. Das Gerät muss per USB an den Computer angeschlossen werden und es muss sowohl dem Mac, als auch dem Entwicklerzertifikat vertraut werden. Nachdem dem "Diesen Computer vertrauen?"-Dialog beim Verbinden zugestimmt wurde, muss in den Einstellungen unter Allgemein > Geräteverwaltung dem Zertifikat vertraut werden. Ab iOS 16 ist es dazu nötig den Entwicklermodus in den Sicherheitseinstellungen zu aktivieren.
-
Sollte Xcode nicht bereits auf dem Mac installiert sein, ist es notwendig, es von der offiziellen Website zu installieren.
-
Anschließend muss im Flutter-Projektordner
open ios/Runner.xcworkspace
in einem Terminal aufgerufen werden. Somit wird ein Xcode Workspace erstellt. -
Nach Auswählen des richtigen Gerätes, muss in den Zieleinstellungen unter "Runner" im Reiter Signing & Capabilities Ihr Account bei Team ausgewählt sein.
-
Nun kann die App mit dem Startknopf oder mit dem Befehl
flutter run
gestartet werden. Eine USB-Verbindung muss allerdings bestehen bleiben.
Für weitere Informationen rufen Sie die Dokumentation des Vorgangs auf der Flutter Website auf.