diff --git a/projektdokumentation/.gitignore b/projektdokumentation/.gitignore index c4ae676..9b06f73 100644 --- a/projektdokumentation/.gitignore +++ b/projektdokumentation/.gitignore @@ -6,7 +6,7 @@ *.fls *.out *.toc - +*.pdf ## Intermediate documents: *.dvi *-converted-to.* diff --git a/projektdokumentation/Abkuerzungen.tex b/projektdokumentation/Abkuerzungen.tex index b1979ea..ebc9cd5 100644 --- a/projektdokumentation/Abkuerzungen.tex +++ b/projektdokumentation/Abkuerzungen.tex @@ -35,4 +35,6 @@ \acro{URL}{Uniform Resource Locator}\acused{URL} \acro{VM}{Virtual Machine} \acro{XML}{Extensible Markup Language} + \acro{API}{Application Programming Interface} + \acro{JWT}{JSON Web Token} \end{acronym} diff --git a/projektdokumentation/Bilder/oauth.jpg b/projektdokumentation/Bilder/oauth.jpg new file mode 100644 index 0000000..520b059 Binary files /dev/null and b/projektdokumentation/Bilder/oauth.jpg differ diff --git a/projektdokumentation/Inhalt.tex b/projektdokumentation/Inhalt.tex index b327d8e..d15de76 100644 --- a/projektdokumentation/Inhalt.tex +++ b/projektdokumentation/Inhalt.tex @@ -2,4 +2,7 @@ \input{Inhalt/Einleitung} \input{Inhalt/Projektarchitektur} \input{Inhalt/CI} +\input{Inhalt/Auth.tex} \input{Inhalt/Dice.tex} +\input{Inhalt/Coinflip.tex} + diff --git a/projektdokumentation/Inhalt/Auth.tex b/projektdokumentation/Inhalt/Auth.tex new file mode 100644 index 0000000..e3f29e2 --- /dev/null +++ b/projektdokumentation/Inhalt/Auth.tex @@ -0,0 +1,9 @@ +\section{Authentifizierung} +\label{sec:Authentifizierung} +Die Authentifizierung gegenüber der \acs{API} erfolgt über einen \acs{JWT}-Token, der dem Frontend nach Erfolgreicher Authentifizierung übergeben wird. +Authentifizierung läuft über zwei verschiedene Wege ab: +\begin{itemize} + \item \textbf{Registrierung mit username/password:} Der Nutzer füllt ein Registrierungs-Formular aus, welches die Anmeldedaten an die \acs{API} sendet. Diese validitert die Anmeldedaten und legt bei Erfolg einen neuen Nutzer an. Anschließend wird eine E-Mail-Verifizierungs-Mail gesendet. Bis der Link in der Verifizierungs-Mail nicht angeklickt wurde, ist der Nutzer nicht aktiv und kann sich nicht anmelden. Nach dem Klick auf den Link wird der Nutzer aktiviert und kann sich anmelden. + \item \textbf{Login mit username/password:} Der Nutzer füllt ein Anmelde-Formular, welches die Anmeldedaten an die \acs{API} sendet. Diese prüft die Anmeldedaten und gibt bei Erfolg einen \acs{JWT}-Token zurück. Falls kein Nutzer mit den Anmeldedaten existiert, wird der Nutzer aufgefordert einen Account zu erstellen. + \item \textbf{Login über Oauth (Open Authorization):} Der Nutzer meldet sich mit einem Oauth-Provider an, in unserem Fall Google oder Github. Das Backend leitet den Nutzer zum Oauth-Provider weiter, der die Anmeldedaten prüft und bei Erfolg den Nutzer auf die Applikation weiterleitet und einen Authorization-Code zurück gibt. Mit diesem Code holt sich die \acs{API} einen \acs{JWT} vom jeweiligen Provider und holt sich Nutzer-Informationen. Mit diesen wird dann ein existierender Nutzer eingeloggt, oder registriert falls der Nutzer noch kein Konto hatte. Anschließend wird von der \acs{API} ein \acs{JWT} generiert und an das Frontend weitergegeben. +\end{itemize} diff --git a/projektdokumentation/Inhalt/Coinflip.tex b/projektdokumentation/Inhalt/Coinflip.tex new file mode 100644 index 0000000..18ea1c5 --- /dev/null +++ b/projektdokumentation/Inhalt/Coinflip.tex @@ -0,0 +1,39 @@ +\clearpage +\section{Coinflip} + +\subsection{Was ist Coinflip?} +Das Münzwurf-Spiel 'Coinflip' ist ein klassisches Glücksspiel, das in seiner digitalen Umsetzung den traditionellen Münzwurf simuliert. Das Spiel basiert auf dem einfachen Prinzip einer Münze mit zwei Seiten: Kopf und Zahl. Spieler setzen auf eine der beiden Seiten und haben eine 50\%-ige Gewinnchance. Die Einfachheit des Spiels macht es zu einem idealen Einstiegsspiel für neue Nutzer der Casino-Plattform. + +Im Gegensatz zu komplexeren Spielen wie Dice bietet Coinflip eine feste Gewinnwahrscheinlichkeit von 50\% und einen konstanten Multiplikator von 2x. Dies bedeutet, dass Spieler bei einem Gewinn ihren Einsatz verdoppeln, während sie bei einer Niederlage ihren gesamten Einsatz verlieren. + +\subsubsection{Zufallszahlengenerierung} +Die Implementierung verwendet die Standardklasse java.util.Random zur Generierung des Münzwurfs. +Die Zufallsgenerierung erzeugt einen booleschen Wert, der anschließend einer der beiden Münzseiten zugeordnet wird. +Diese binäre Entscheidung gewährleistet die faire 50:50-Verteilung, die für ein authentisches Münzwurf-Erlebnis erforderlich ist. + +\subsubsection{Spielablauf und Datenfluss} + +Der Spielablauf von Coinflip folgt einem strukturierten Datenfluss zwischen Frontend und Backend. Der Controller empfängt die Spielanfrage mit folgenden Parametern: + +\begin{itemize} + \item \textbf{Einsatz:} Der gesetzte Münzbetrag. + \item \textbf{Gewählte Seite:} Die vom Spieler gewählte Münzseite (Kopf oder Zahl). +\end{itemize} + +Nach dem Erhalt der Anfrage führt der Controller eine Guthabenprüfung durch. Bei ausreichendem Guthaben wird die Anfrage an die Service-Schicht weitergeleitet, andernfalls wird eine entsprechende Fehlermeldung zurückgegeben. + +Die Service-Klasse verarbeitet die Spiellogik in folgender Reihenfolge: +\begin{enumerate} + \item Abbuchung des Einsatzes vom Spielerkonto. + \item Generierung des zufälligen Münzwurfs (Kopf oder Zahl). + \item Vergleich zwischen gewählter Seite und Wurfergebnis. + \item Bei einem Gewinn: Gutschrift des doppelten Einsatzes auf das Spielerkonto. + \item Rückgabe des Spielergebnisses an das Frontend. +\end{enumerate} + +Das Spielergebnis wird strukturiert an das Frontend übermittelt und enthält: +\begin{itemize} + \item Gewinnstatus (gewonnen/verloren) + \item Auszahlungsbetrag (bei Gewinn: 2x Einsatz) + \item Geworfene Münzseite +\end{itemize} \ No newline at end of file diff --git a/projektdokumentation/Projektdokumentation.pdf b/projektdokumentation/Projektdokumentation.pdf index a3d1545..0df3413 100644 Binary files a/projektdokumentation/Projektdokumentation.pdf and b/projektdokumentation/Projektdokumentation.pdf differ