"Objekte im Kreuzverhör" ist ein Inhaltsverwaltungssystem zugeschnitten auf die Erstellung von Lernmaterialien für Objektwissenschaften.
Das Backend (dieses Projekt) ist in der Programmiersprache Go realisiert, das Frontend in emberjs.
Um das backend kompilieren zu können, wird eine funktionierende Go-Entwicklungsumgebung mitsamt GOPATH benötigt. Wenn Go korrekt installiert ist, kann das Backend mittels
go get github.com/opaetzel/oik-backend
heruntergeladen und kompiliert werden. Die fertige binary liegt dann in $GOPATH/bin/oik-backend
.
Zum Betrieb wird noch eine Konfiguration benötigt. Eine Beispiel-Konfiguration liegt im repository mit dem Namen config.toml. Alle Felder kurz erklärt:
Key | Erklärung | Mögliche Werte | Default |
---|---|---|---|
UseTLS | wenn true -> https anbieten | true/false | false |
HTTPPort | Port auf dem HTTP angeboten wird | integer | 0 |
HTTPSPort | Port auf dem HTTPS angeboten wird | integer | 0 |
PemFile | .pem Datei des TLS Zertifikats (wenn UseTLS==true) | string | "" |
KeyFile | .key Datei des TLS Zertifikats (wenn UseTLS==true) | string | "" |
DBName | Name der zu nutzenden Datenbank | string | "" |
DBUser | Nutzername, mit dem sich in der DB angemeldet wird | string | "" |
DBPassword | Passwort mit dem sich in der DB angemeldet wird | string | "" |
ImageStorage | Ordner, in dem die von Usern hochgeladenen Bilder gespeicert werden | string | "" |
StaticFolder | Ordner in dem das frontend liegt | string | "" |
AppUrl | UTL unter der die Applikation von außen erreicht wird | string | "" |
LogFile | Pfad des log-files | string | "" |
MailConfig | Konfiguration für das Senden der Registrierungs-Mails | complex | |
MailConfig/UserName | Username mit dem sich am Mailserver angemeldet wird | string | "" |
MailConfig/Password | Passwort für den Mailserver | string | "" |
MailConfig/Host | Host des Mailservers | string | "" |
MailConfig/Port | Port des smtp-Servers (Mailservers) | integer | "" |
MailConfig/From | Absenderadresse der gesendeten Mails | string | "" |
Als Datenbank wird PostgreSQL ab Version 9.5 vorrausgesetzt. Die in der Konfiguration gesetzte Datenbank muss existieren, der konfigurierte Nutzer ebenso und der Nutzer muss Lese/Schreibzugriff auf die Datenbank haben. Die nötigen Tabellen werden beim Start der Anwendung automatisch angelegt.
Um die Anwendung zu kompilieren und zum laufen zu bringen, bitte den Schritten oben folgen.
Das Backend ist als REST-Service realisiert. Die Routen sind in routes.go definiert. Routen haben einen Namen, eine HTTP Methode, die sie akzeptieren, ein Pattern auf das gematcht wird und einen Handler. Alle Handler sind in der Datei handlers.go definiert.
Es gibt drei Arten von Routen:
- adminRoutes: hier wird vor dem Ausführen des handlers überprüft, ob der User admin ist. Wenn er es nicht ist, wird mit Status
401
geantwortet - editorRoutes: hier wird vor dem Ausführen des handlers überprüft, ob der User editor ist. Wenn er es nicht ist, wird mit Status
401
geantwortet - authRoutes: hier wird vor dem Ausführen des handlers überprüft, ob ein valides JWT (hierzu später mehr) im Header gesetzt ist. Wenn es nicht gesetzt ist, wird mit Status
401
geantwortet - publicRoutes: Dies Routen landen auf jeden Fall beim Handler
In der Methode NewRouter
in der Datei router.go werden alle Routen zu einem *mux.Router hinzugefügt. Die Routen sind dann von außerhalb über das prefix api/
gefolgt vom Pattern der jeweiligen Route erreichbar.
Die Authentifizierung mit dem Backend funktioniert über JWTs. Alle Methoden und structs, die etwas mit der Authentifizierung zu tun haben, liegen in auth.go.
Das Modell ist in der Datei model.go definiert. Die Datenbankanbindung mitsamt der CREATE
statements liegt in db.go. Die Interaktion mit der Datenbank funkioniert über selbstgeschriebenes SQL und manuelles Column-Parsing.