Impressum, Datenschutzerklärung und DSGVO-Löschfunktion

- /impressum (§ 5 DDG) und /datenschutz als öffentliche Seiten im
  Brand-Look; Betreiber-Angaben (Name, Anschrift, E-Mail, Zusatz)
  liegen als Settings und sind bewusst Owner-only — Team-Mitglieder
  mit settings-Scope kommen an die private Anschrift nicht heran
- Die Datenschutzerklärung beschreibt die tatsächliche Verarbeitung
  dieser Instanz: Server-Logs, Session-Cookies (einwilligungsfrei nach
  § 25 Abs. 2 TDDDG, kein Tracking), Discord-Login, Level, Wünsche,
  Geburtstage, Playtester/Alpha-Keys, Bewerbungen, Tickets/Modmail,
  Erinnerungen, Moderation und Audit-Log
- DSGVO Art. 17: DELETE /api/profile löscht XP, Geburtstag,
  Playtester-Eintrag, Abstimmungen, Erinnerungen, Rollen-Sicherung,
  Giveaway-Teilnahmen und gibt den Alpha-Key wieder frei; Button im
  Profil unter „Meine Daten", Löschung landet im Audit-Log
- Footer verlinkt beide Rechtstexte, neues GET /api/legal (öffentlich)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-31 13:19:33 +02:00
co-authored by Claude Fable 5
parent 676fc45bb1
commit 8853bce2ec
10 changed files with 464 additions and 4 deletions
+23
View File
@@ -493,6 +493,29 @@ export const setBirthday = (userId, username, day, month) => upsertBirthday.run(
export const deleteBirthday = (userId) => deleteBirthdayStmt.run(userId).changes > 0;
export const birthdaysToday = (day, month) => birthdaysTodayStmt.all(day, month);
/**
* DSGVO Art. 17: alle Selbstauskunfts-Daten eines Users löschen.
* Bewusst NICHT gelöscht: Verwarnungen (berechtigtes Interesse an Moderation)
* und Inhalte, die im Discord stehen (Devlogs, Galerie) — die gehören dort gelöscht.
* @returns {Record<string, number>} gelöschte Zeilen pro Bereich
*/
export function deleteUserData(userId) {
const del = (sql) => db.prepare(sql).run(userId).changes;
const result = {
level: del('DELETE FROM levels WHERE user_id = ?'),
geburtstag: del('DELETE FROM birthdays WHERE user_id = ?'),
playtester: del('DELETE FROM playtesters WHERE user_id = ?'),
votes: del('DELETE FROM wish_votes WHERE user_id = ?'),
erinnerungen: del('DELETE FROM reminders WHERE user_id = ?'),
rollen_backup: del('DELETE FROM sticky_roles WHERE user_id = ?'),
giveaways: del('DELETE FROM giveaway_entries WHERE user_id = ?'),
alpha_key: db.prepare(
`UPDATE alpha_keys SET assigned_to = NULL, assigned_at = NULL WHERE assigned_to = ?`
).run(userId).changes,
};
return result;
}
// Audit-Log: wer (Owner/Team) hat wann was im Webinterface geändert
db.exec(`
CREATE TABLE IF NOT EXISTS audit_log (