/* ==================================================================== Auskunft auf Knopfdruck — Art. 15 DSGVO (15.09.2026) Der Knopf holt die Auskunft und legt sie als Datei ab. Bewusst KEINE Anzeige auf der Seite: Der Inhalt ist je nach Mensch ein paar Zeilen oder ein paar tausend, und eine Seite, die sich beim Klick in eine Datenwüste verwandelt, beantwortet die Frage schlechter als eine Datei, die man in Ruhe ansehen, aufheben und weitergeben kann. Erzeugt wird sie im Browser aus der Antwort – es entsteht also keine Datei auf dem Server, die dort liegen bliebe. ==================================================================== */ (() => { const knopf = document.getElementById('auskunft-knopf'); if (!knopf) return; const stand = document.getElementById('auskunft-stand'); const sagen = (t) => { if (stand) { stand.textContent = t; stand.hidden = !t; } }; knopf.addEventListener('click', async () => { knopf.disabled = true; sagen('Wird zusammengestellt …'); try { const a = await fetch('/workspace/api/auskunft/mich', { credentials: 'same-origin' }); if (!a.ok) { sagen('Das ging gerade nicht. Versuch es später noch einmal.'); return; } const daten = await a.json(); const text = JSON.stringify(daten, null, 2); const tag = new Date().toISOString().slice(0, 10); const name = (daten.person?.name || 'meine-daten') .toLowerCase().replace(/[^a-zäöüß0-9]+/g, '-').replace(/^-|-$/g, ''); const blob = new Blob([text], { type: 'application/json' }); const url = URL.createObjectURL(blob); const a2 = document.createElement('a'); a2.href = url; a2.download = `meine-daten-${name}-${tag}.json`; document.body.append(a2); a2.click(); a2.remove(); /* Erst freigeben, wenn der Browser den Griff hat. Sofort danach ist der Verweis in manchen Browsern schon tot. */ setTimeout(() => URL.revokeObjectURL(url), 30_000); sagen(`Datei erstellt: ${daten.gefunden} von ${daten.durchsucht} Stellen enthalten etwas über dich.` + (daten.nicht_lesbar?.length ? ` Achtung: ${daten.nicht_lesbar.length} Stelle(n) konnten nicht gelesen werden – sag DogFather Bescheid.` : '')); } catch { sagen('Keine Verbindung. Versuch es später noch einmal.'); } finally { knopf.disabled = false; } }); })();