All checks were successful
CD / Build and push images (push) Successful in 10m39s
CI / Lint, typecheck, test (push) Successful in 3m12s
CI / Auth e2e pack (push) Successful in 4m9s
CI / Build container images (push) Has been skipped
CD / Deploy to Test (push) Successful in 9s
CD / Smoke tests against Test (push) Successful in 1m18s
CD / Promote to Int (push) Successful in 11s
A signed-in account can export all of its own data — profile, a list of its memberships/grants, and the Markdown of its personal pond plus the shared ponds it owns — as one ZIP. Foreign content never appears: only owned ponds are bundled and the per-page read filter (reused from #65) runs for each. - Reuse the conversion-job queue as the async carrier: a `data_export` job whose worker branch resolves DataExportService via a token (no DI cycle), builds the ZIP, and stores it with an `expiresAt`. The download link 404s past expiry and an hourly scheduled purge drops the bytes (data minimization, security.md §Privacy). - Extract ExportService.appendPondMarkdown so the pond ZIP (#65) and the data export share one read-filtered pond archiver. - Rate-limit requests per account (RateLimitService); POST /users/me/data-export enqueues, GET /jobs/:id(/result) poll/download. - Settings UI "Export my data" (de+en); web share pollJob/downloadJobResult between the document and data export hooks. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EwZ4jR4KFAPvpjWevfUGX1
50 lines
1.7 KiB
JSON
50 lines
1.7 KiB
JSON
{
|
|
"title": "Einstellungen",
|
|
"profile": {
|
|
"title": "Profil",
|
|
"displayName": "Anzeigename",
|
|
"locale": "Sprache",
|
|
"locales": { "de": "Deutsch", "en": "English" },
|
|
"save": "Speichern",
|
|
"saved": "Gespeichert."
|
|
},
|
|
"password": {
|
|
"title": "Passwort ändern",
|
|
"current": "Aktuelles Passwort",
|
|
"new": "Neues Passwort",
|
|
"submit": "Passwort ändern",
|
|
"changed": "Passwort geändert. Andere Geräte wurden abgemeldet."
|
|
},
|
|
"sessions": {
|
|
"title": "Aktive Sitzungen",
|
|
"current": "Diese Sitzung",
|
|
"created": "Angemeldet",
|
|
"lastSeen": "Zuletzt aktiv",
|
|
"device": "Gerät",
|
|
"revoke": "Abmelden",
|
|
"revokeAll": "Alle anderen Sitzungen abmelden",
|
|
"empty": "Keine weiteren aktiven Sitzungen."
|
|
},
|
|
"dataExport": {
|
|
"title": "Meine Daten exportieren",
|
|
"description": "Lade ein ZIP mit deinem Profil, einer Liste deiner Mitgliedschaften und dem Markdown-Export deines persönlichen Teichs sowie der Teiche, die dir gehören.",
|
|
"request": "Export vorbereiten",
|
|
"preparing": "Dein Export wird vorbereitet…",
|
|
"download": "Export herunterladen",
|
|
"ready": "Dein Export ist bereit.",
|
|
"expiresHint": "Der Download-Link läuft am {{when}} ab.",
|
|
"failed": "Der Export konnte nicht erstellt werden. Bitte versuche es erneut.",
|
|
"rateLimited": "Du hast kürzlich einen Export angefordert. Bitte versuche es später erneut."
|
|
},
|
|
"admin": {
|
|
"title": "Administration",
|
|
"instanceName": "Name der Instanz",
|
|
"defaultLocale": "Standardsprache",
|
|
"registrationMode": "Selbst-Registrierung",
|
|
"registrationOpen": "Offen — alle können sich registrieren",
|
|
"registrationClosed": "Geschlossen — keine neuen Registrierungen",
|
|
"save": "Speichern",
|
|
"saved": "Gespeichert."
|
|
}
|
|
}
|