Öffnen Sie einen Browser mit der Domain `http://localhost:3000/`. Wenn alles geklappt hat, sollten Sie hier bereits die Möglichkeit haben, sich mit einem Dummy-Account einzuloggen und eine Profilseite zu öffnen.
b) In `config/models` werden alle Entitäten definiert, die Ihre Datenbank kennen soll. Diese soll nun im Hinblick auf Issue 2-4 angepasst werden. Die dafür nötigen Entitäten sind in einem [Entity-relationship model](https://de.wikipedia.org/wiki/Entity-Relationship-Modell) festgehalten, welches Sie in der Datei [ERModel.pdf](/ERModel.pdf) finden.
- Wenn Sie selber definierte Typen verwenden wollen, um die Ausprägungen eines Entity-Feldes festzulegen, definieren Sie diese in der mitgegebenen Datei `MyTypes.hs`.
Neues Feature: Timeline für alle Nutzer. Auf der Seite `All Users` sollen alle jemals eingelogten Nutzer angezeigt werden. Mit einem Klick auf einen Nutzernamen wird man auf die zugehörige `Timeline` weitergeleitet. Auf der Timeline muss erst einmal nichts weiter stehen außer der Titel: "USERNAME's Timeline".
-`config/routes`: Erstellen Sie die folgenden Routen:
- Kopieren Sie `Timeline.hs` und `timeline.hamlet` ins Handler- bzw. Templates-Verzeichnis.
- Die Route `TimelineR` soll für autorisierte Nutzer über einen extra Menüpunkt "Your Timeline" erreichbar sein. Führen Sie die nötigen Änderungen in `.cabal`, `Foundation.hs` und `Application.hs` durch.
- Bearbeiten Sie die Aufgaben in `Timeline.hs` und `timeline.hamlet`.
Die Seite `All Users` soll nun auch erlauben, Freundschaftsanfragen abzuschicken, abzulehnen. Auf dieser soll man einem Nutzer eine Freundschaftsanfrage stellen können. Es soll erkenntlich sein, mit wem man bereits befreundet ist. Man soll nur die Timelines befreundeter Nutzer besuchen können.
Implementieren Sie einen `postUserlistR`-Funktion, die dies erledigt. Um Information an POST zu senden, können Sie eine Form mit einem `hiddenField` einsetzen. In diesem `hiddenField` können Sie dann die im Falle des Aufrufs von `postUserlistR` gewünschte Information hinterlegen.
a) Implementieren Sie einen Login über Github. Github bietet Ihnen eine sogenannte OAuth Schnittstelle, durch die Sie sicher die Authentizität eines Benutzers überprüfen können.
In dem packet `yesod-auth-oauth2` ist bereits ein Github-OAuth PLugin vorhanden, dass Sie nun noch laden müssen. Falls Sie auf Github keine eigene Application erstellen wollen, können Sie die unten angegebenen Daten verwenden, um Ihre Application gegenüber Github zu authentifizieren.
```
Client ID
b52908be7f1c8b1d763f
Client Secret
15d7961bb26c7b4791999847aec81c5c125ec688
```
Diese leitet nach der Authentifizierung nach http://localhost:3000/ weiter.
b) Nachdem ein User sich nun per Github einloggen kann, sollten Sie dafür sorgen, dass der Github-Benutzername sowie die Mail Adresse ausgelesen und gespeichert werden.
Eventuell finden Sie folgende Resourcen interessant, wenn Sie nicht Wissen wo diese Daten abzufragen sind:
Implementieren Sie nun die Suchfunktion dieser Seite.
- Wenn man auf einen Tag geklickt hat soll die Ergebnisseite der Suche erscheinen (GET).
- Auf dieser Seite sollte ein Eingabefeld sein, mit dem man nach Tags suchen kann (POST).
- Hinweis: Nachdem Sie die Gültigkeit des Formulares überprüft haben können Sie auch einen Redirect auf die GET-Seite machen um den Code nicht doppelt zu schreiben.
- Unter dem Eingabefeld sollen die Ergebnisse angezeigt werden.
- Unter dieser Anzeige sollte die Timeline des Users, der den Post verfasst hat, verlinkt sein.