From 720d5d64d58b4667069a0ef6c475b31723df72cf Mon Sep 17 00:00:00 2001 From: irrlicht Date: Thu, 4 Jun 2026 10:23:41 +0200 Subject: [PATCH] Header: Doku-Links, Profil-Button & Titel "Kontrollverlust" Impressum/Datenschutz/Beitragsordnung als Links ueber der Ueberschrift, Ueberschrift in "Kontrollverlust" umbenannt (verlinkt auf den Feed), "mein Profil" und "zurueck zum Feed" im Button-Layout. datenschutz.html aus bb6b966 wiederhergestellt, damit der Link nicht ins Leere fuehrt. Co-Authored-By: Claude Opus 4.8 --- static/docs/datenschutz.html | 202 +++++++++++++++++++++++++++++++++++ web/entry.html | 11 +- web/index.html | 9 +- web/js/app.js | 2 +- web/user.html | 11 +- 5 files changed, 226 insertions(+), 9 deletions(-) create mode 100644 static/docs/datenschutz.html diff --git a/static/docs/datenschutz.html b/static/docs/datenschutz.html new file mode 100644 index 0000000..5850a4d --- /dev/null +++ b/static/docs/datenschutz.html @@ -0,0 +1,202 @@ + + + + + + Datenschutz - Kontrollverlust + + + + +
+
+ Impressum - + Datenschutz - + Beitragsordnung +
+ +
+
+

Datenschutzerklärung

+ +

Verantwortlicher
+David Bernet
+Merseburger Str. 108
+06110 Halle (Saale)
+
+Telefon: +49-15782760787
+E-Mail: david@bernet.it +

+ +

Übersicht der erfassten Daten

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DatenartZweckSpeicherdauerRechtsgrundlage
BenutzernameKontoidentifikationBis zur LöschungVertragserfüllung
Passwort (gehasht)AuthentifizierungBis zur LöschungVertragserfüllung
Session-TokenAngemeldet bleibenGewählte Dauer (20 Min - 1 Jahr)Vertragserfüllung
Beiträge & BilderForumsinhaltBis zur LöschungVertragserfüllung
IP-Adresse (vollständig)Technische BereitstellungMax. 24 StundenBerechtigtes Interesse
IP-Adresse (anonymisiert)NutzungsstatistikUnbegrenztBerechtigtes Interesse
+
+ +

1. Registrierung und Benutzerkonto

+Erfasste Daten: +

    +
  • Benutzername (öffentlich sichtbar)
  • +
  • Passwort (mindestens 10 Zeichen)
  • +
+Verarbeitung: +
    +
  • Passwort wird mit bcrypt gehasht gespeichert (Klartext wird nicht gespeichert)
  • +
  • Benutzername wird bereinigt und in Kleinbuchstaben konvertiert
  • +
  • Keine E-Mail-Adresse erforderlich
  • +
+Zweck: Erstellung und Verwaltung des Benutzerkontos
+Rechtsgrundlage: Vertragserfüllung (Art. 6 Abs. 1 lit. b DSGVO)
+Speicherdauer: Bis zur Löschung des Kontos +

+ +

2. Anmeldung und Sessions

+Erfasste Daten: +

    +
  • Session-Token (zufällig generiert)
  • +
  • Erstellungs- und Ablaufzeitpunkt
  • +
+Cookies: +
    +
  • session - Speichert den Anmeldestatus (HttpOnly, SameSite=Lax, Secure)
  • +
  • csrf_token - Schutz vor CSRF-Angriffen (HttpOnly, SameSite=Strict)
  • +
+Wählbare Session-Dauer: 20 Minuten, 1 Stunde, 5 Stunden, 24 Stunden oder 1 Jahr
+Zweck: Authentifizierung und Sicherheit
+Rechtsgrundlage: Vertragserfüllung (Art. 6 Abs. 1 lit. b DSGVO) +

+ +

3. Forumsbeiträge

+Erfasste Daten: +

    +
  • Textinhalt (max. 1000 Zeichen)
  • +
  • Erstellungszeitpunkt
  • +
  • Verknüpfung zum Benutzerkonto
  • +
  • Optional: Hochgeladenes Bild (JPG, PNG, GIF; max. 1024x1024 Pixel)
  • +
+Sichtbarkeit: Beiträge und Benutzername sind öffentlich einsehbar
+Zweck: Bereitstellung der Forumsfunktion
+Rechtsgrundlage: Vertragserfüllung (Art. 6 Abs. 1 lit. b DSGVO)
+Speicherdauer: Bis zur Löschung durch den Nutzer +

+ +

4. Server-Logs

+Erfasste Daten: +

    +
  • IP-Adresse
  • +
  • Zugriffszeitpunkt
  • +
  • Angeforderte Seite
  • +
+Zweck: Technische Bereitstellung der Website und Fehleranalyse
+Rechtsgrundlage: Berechtigtes Interesse (Art. 6 Abs. 1 lit. f DSGVO)
+Speicherdauer: Maximal 24 Stunden +

+ +

5. Anonymisierte Nutzungsstatistik

+Erfasste Daten: +

    +
  • Anonymisierte IP-Adresse (IPv4: letzte 16 Bit entfernt, IPv6: letzte 80 Bit entfernt)
  • +
  • Zugriffszeitpunkt
  • +
+Zweck: Erfassung des Seitenwachstums und Auswertung der Nutzeraktivität
+Rechtsgrundlage: Berechtigtes Interesse (Art. 6 Abs. 1 lit. f DSGVO)
+Hinweis: Durch die Anonymisierung ist keine Rückverfolgung auf einzelne Personen möglich +

+ +

6. Datenlöschung

+Beitrag löschen: +

    +
  • Inhalt und Bilder werden entfernt
  • +
  • Beitragsstruktur bleibt erhalten (zeigt "[gelöscht]")
  • +
+Konto löschen: +
    +
  • Alle eigenen Beiträge werden wie oben gelöscht
  • +
  • Alle Sessions werden beendet
  • +
  • Benutzername und Passwort werden gelöscht
  • +
  • Hochgeladene Bilder werden vom Server entfernt
  • +
+

+ +

7. Nicht erfasste Daten

+Folgende Daten werden nicht erhoben: +

    +
  • E-Mail-Adresse
  • +
  • Standortdaten
  • +
  • Geräte- oder Browserinformationen
  • +
  • Tracking durch Drittanbieter
  • +
  • Werbe-Cookies
  • +
+

+ +

8. Ihre Rechte

+Sie haben folgende Rechte bezüglich Ihrer personenbezogenen Daten: +

    +
  • Auskunft: Welche Daten über Sie gespeichert sind
  • +
  • Berichtigung: Korrektur unrichtiger Daten
  • +
  • Löschung: Entfernung Ihrer Daten (siehe Abschnitt 6)
  • +
  • Widerspruch: Gegen die Verarbeitung auf Basis berechtigter Interessen
  • +
  • Beschwerde: Bei der zuständigen Datenschutzbehörde
  • +
+Zur Ausübung Ihrer Rechte wenden Sie sich bitte an die oben genannten Kontaktdaten. +

+ +

9. Sicherheitsmaßnahmen

+

    +
  • Passwörter werden mit bcrypt gehasht (nicht im Klartext gespeichert)
  • +
  • Session-Cookies sind HttpOnly (kein JavaScript-Zugriff)
  • +
  • CSRF-Schutz bei allen Formularen
  • +
  • HTTPS-Verschlüsselung
  • +
+

+ +
+
+
+ + diff --git a/web/entry.html b/web/entry.html index 9e0c813..b44af15 100644 --- a/web/entry.html +++ b/web/entry.html @@ -3,13 +3,18 @@ - kver + Kontrollverlust
-

kver

- + +

Kontrollverlust

+
diff --git a/web/index.html b/web/index.html index 2680fbe..a4314b6 100644 --- a/web/index.html +++ b/web/index.html @@ -3,12 +3,17 @@ - kver + Kontrollverlust
-

kver

+ +

Kontrollverlust

diff --git a/web/js/app.js b/web/js/app.js index ba9477b..be92592 100644 --- a/web/js/app.js +++ b/web/js/app.js @@ -14,7 +14,7 @@ async function refreshHeader() { if (loggedIn) { const me = await api.get("/user/info"); const user = encodeURIComponent(me.username); - bar.innerHTML = `mein Profil `; + bar.innerHTML = `mein Profil `; document.getElementById("logout-btn").addEventListener("click", async () => { await api.get("/auth/logout"); await refreshHeader(); diff --git a/web/user.html b/web/user.html index be89daf..8b0ad2d 100644 --- a/web/user.html +++ b/web/user.html @@ -3,13 +3,18 @@ - kver + Kontrollverlust
-

kver

- + +

Kontrollverlust

+