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 cff7bc5..44dfe37 100644 --- a/projektdokumentation/Inhalt.tex +++ b/projektdokumentation/Inhalt.tex @@ -2,3 +2,5 @@ \input{Inhalt/Einleitung} \input{Inhalt/Projektarchitektur} \input{Inhalt/CI} +\input{Inhalt/Dice.tex} +\input{Inhalt/Auth.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/Dice.tex b/projektdokumentation/Inhalt/Dice.tex new file mode 100644 index 0000000..fd346d6 --- /dev/null +++ b/projektdokumentation/Inhalt/Dice.tex @@ -0,0 +1,44 @@ +\clearpage +\section{Dice} + +\subsection{Was ist Dice?} +Das Würfelspiel 'Dice' ist ein originelles Spiel der Casinoplattform Stake.com\footnote{Stake.com ist eine bekannte Online-Glücksspielplattform, die eine Vielzahl von Casinospielen und Sportwetten anbietet.}. Das Spiel dreht sich um einen virtuellen 100-seitigen Würfel, +bei dem Spieler die Parameter ihrer Wette beeinflussen können. Im Kern geht es darum, +einen zuvor festgelegten 'Roll Over'- oder 'Roll Under'-Betrag zu unter- oder überschreiten, +um eine Runde zu gewinnen. Spieler haben die Kontrolle über den Multiplikator und ihre Gewinnchancen: +Durch die Anpassung des Zielwerts können sie das Verhältnis +von Risiko und potenzieller Auszahlung steuern. Ein höherer Multiplikator verspricht zwar größere Gewinne, +reduziert jedoch gleichzeitig die Wahrscheinlichkeit eines erfolgreichen Würfelwurfs. + +\subsubsection{Zufallszahlengenerierung} +Zur Generierung des Würfelwurfs verwendet diese Implementierung die Standardklasse java.util.Random. +Sie erzeugt eine pseudo-zufällige Zahl zwischen 1 und 100 (inklusive), +die das Ergebnis des virtuellen 100-seitigen Würfels darstellt. + + +\subsubsection{Spielablauf und Datenfluss} + +Der zentrale Controller steuert den Spielablauf und empfängt die Anfragen vom Frontend. Jede Anfrage enthält die Eckdaten des gewünschten Würfelwurfs: +\begin{itemize} + \item \textbf{Einsatz:} Der gesetzte Münzbetrag. + \item \textbf{Wettart:} Soll der Würfel ``über'' oder ``unter'' einen Wert fallen? + \item \textbf{Zielwert:} Der vom Spieler festgelegte Referenzwert (1-100). +\end{itemize} + +Zuerst prüft der Controller das Guthaben des Spielers. Bei unzureichenden Mitteln wird der Vorgang abgelehnt. Andernfalls übergibt er die weitere Ausführung an die Dienstklasse. + +Die Dienstklasse übernimmt die eigentliche Logik des Würfelspiels: +\begin{enumerate} + \item Zieht den Einsatz vom Spielerkonto ab. + \item Erzeugt einen zufälligen Würfelwurf (Wert zwischen 1 und 100). + \item Prüft, ob der Wurf die Gewinnbedingung erfüllt (entsprechend Wettart und Zielwert). + \item Berechnet die Gewinnwahrscheinlichkeit und den sich daraus ergebenden Multiplikator. + \item Schreibt bei einem Gewinn den entsprechenden Betrag (Einsatz $\times$ Multiplikator) dem Spielerkonto gut. +\end{enumerate} + +Das Ergebnis des Spiels wird an das Frontend zurückgesendet und enthält: +\begin{itemize} + \item Gewinnstatus (gewonnen/verloren) + \item Auszahlungsbetrag + \item Gewürfelten Wert +\end{itemize} diff --git a/projektdokumentation/Projektdokumentation.pdf b/projektdokumentation/Projektdokumentation.pdf deleted file mode 100644 index 885e0e6..0000000 Binary files a/projektdokumentation/Projektdokumentation.pdf and /dev/null differ