\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}