generated from knso/webklar-preview-template
- Brief-Archiv jetzt AES-256-GCM-verschlüsselt (expo-crypto, Schlüssel im SecureStore); Migration alter Klartext-Bestände beim ersten Laden; im Simulator auf der Platte verifiziert (nur Chiffrat, kein Klartext) - AppSchutz-Komponente: optionale App-Sperre (Face ID / Geräte-Code, expo-local-authentication) + Sichtschutz im App-Umschalter - Auto-Löschen alter Briefe (30/90 Tage, Einstellungen), pure Filter- Funktion mit Tests - UTF-8-Helfer (Umlaute/Arabisch/Emoji-sicher) mit Tests; gesamt 30 Tests - Einstellungen: neuer Abschnitt "Sicherheit" - Datenschutzerklärung (Web + Entwurf) um die neuen Maßnahmen ergänzt - Neu: rechtliches/datenschutz-factsheet.md für Kooperations-Pitches - EU-Verarbeitung geprüft: inference_geo bietet aktuell nur us/global, keine EU-Option (Haiku 4.5 gar nicht) — als Ausbaupfad dokumentiert Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
28 lines
956 B
TypeScript
28 lines
956 B
TypeScript
/**
|
|
* Auto-Löschen alter Briefe (Datensparsamkeit, DSGVO-Grundsatz).
|
|
* Reine Funktion — die Anwendung passiert beim App-Start im Store.
|
|
*/
|
|
import { BriefEintrag } from '../types';
|
|
|
|
/**
|
|
* Filtert Briefe heraus, die älter als die Aufbewahrungsdauer sind.
|
|
*
|
|
* @param briefe - das aktuelle Archiv
|
|
* @param aufbewahrungTage - 0 = nie löschen (alles behalten)
|
|
* @param jetztMs - aktueller Zeitpunkt (injizierbar für Tests)
|
|
*/
|
|
export function filtereAlteBriefe(
|
|
briefe: BriefEintrag[],
|
|
aufbewahrungTage: number,
|
|
jetztMs: number = Date.now()
|
|
): BriefEintrag[] {
|
|
if (aufbewahrungTage <= 0) return briefe;
|
|
const grenzeMs = jetztMs - aufbewahrungTage * 86400000;
|
|
return briefe.filter((brief) => {
|
|
const erstellt = new Date(brief.erstelltAm).getTime();
|
|
// Unlesbare Datumswerte lieber behalten als versehentlich löschen
|
|
if (!Number.isFinite(erstellt)) return true;
|
|
return erstellt >= grenzeMs;
|
|
});
|
|
}
|