\section{Produktdaten}

Das Projekt erhebt an unterschiedlichen Stellen Daten des Benutzers oder anderen
Plattformen. Diese Daten können temporär gespeichert werden. Dabei bleiben die
Daten nur für eine kurze Zeit gespeichert, zum Beispiel so lange wie der Nutzer
eingeloggt ist. Andere Daten können auch persistent gespeichert werden. Dabei
bleiben die Daten solange gespeichert, bis sie manuell oder durch
\Gls{garbage-collection} gelöscht werden. 

\subsection{Weboberfläche}

Die Weboberfläche bezieht direkt Daten vom Benutzer. Die Weboberfläche erhält
E-Mail-Adresse und Passwort vom Benutzer, speichert diese aber nur solange, bis
diese an das Backend zur Validierung geschickt werden. Daraufhin erhält die
Weboberfläche einen \Gls{session-token} welcher entweder persistent oder temporär als
\Gls{cookie} gespeichert bleibt, je nachdem, ob der Nutzer angemeldet bleiben möchte. 

Zusätzlich erhält die Weboberfläche die abonnierten \Glspl{podcast} und gehörten
\Glspl{episode} inklusive Metadaten vom Backend. Diese Daten werden nur temporär,
solange die Webseite offen ist, gespeichert. 

\subsubsection*{Persistent}

\begin{itemize}
    \item \Gls{session-token} (falls der Nutzer angemeldet bleiben möchte)
\end{itemize}

\subsubsection*{Temporär}

\begin{itemize}
    \item Abonnierte \Glspl{podcast}
    \item Gehörte \Glspl{episode}
    \item \Gls{session-token}
\end{itemize}

\subsection{Backend}

Das Backend interagiert nicht direkt mit dem Benutzer, sondern bekommt Daten von
der Weboberfläche und \Glspl{podcatcher}. Wenn sich ein Nutzer über die Weboberfläche
oder im \Gls{podcatcher} anmeldet oder registriert speichert der Server temporär die E-Mail-Adresse und
das Passwort des Nutzers im Klartext, bevor es die Daten gegen die gehashten und
gesalzenen persistenten Daten der \Gls{db} abgleicht beziehungsweise speichert. 

Außerdem speichert das Backend abonnierte \Glspl{podcast} und gehörte
\Glspl{episode}, welche
es vom \Gls{podcatcher} bekommt, im persistenten Speicher. Diese Daten bleiben
gespeichert bis sie durch neue Daten obsolet werden (\Gls{garbage-collection}),
vom Nutzer manuell gelöscht werden oder der Account gelöscht wird. 

Wenn die Weboberfläche \Glspl{episode} über \Glspl{podcast} abfragt, welche noch nicht vom
Nutzer gehört wurden, holt der Server Metadaten über den \Glspl{podcast} und speichert
Informationen und Bilder des \Glspl{podcast} temporär, solange der Nutzer die
Weboberfläche geöffnet hat. 

\subsubsection*{Persistent}
\begin{itemize}
% Email (gehasht und gesalzen) / Betreuer fragen weil evtl Mails gesendet werden
% müssen, falls Datenschutzbedinungen geändert werden
\item E-Mail-Adresse gehasht und gesalzen
\item Passwort gehasht und gesalzen
\item Abonnierte \Glspl{podcast}
\item Gehörte \Glspl{episode} (Hörfortschritte)
\end{itemize}

\subsubsection*{Temporär}
\begin{itemize}
    \item Metadaten von Feeds (\Glspl{episode}, Bilder)
\end{itemize}

\subsection{Podcatcher}

Der \Gls{podcatcher} speichert die E-Mail-Adresse, das Passwort und die URL der
Gpodder-Instanz im persistenten Speicher. Zusätzlich speichert der
\Gls{podcatcher}
abonnierte \Glspl{podcast} und gehörte \Glspl{episode} im persistenten Speicher.  

\subsubsection*{Persistent}
\begin{itemize}
\item E-Mail-Adresse, Passwort und URL der Gpodder-Instanz
\item Abonnierte \Glspl{podcast}
\item Gehörte \Glspl{episode}
\end{itemize}

