feat: add S/MIME store for managing key records and public certificates

- Implemented Zustand store for S/MIME functionality, including state management for key records and public certificates.
- Added methods for importing PKCS#12 files and public certificates, binding identities to keys, and managing unlocked keys.
- Introduced session storage for remembering unlocked keys across sessions.
- Enhanced error handling and loading states during data operations.
This commit is contained in:
Linus Rath
2026-03-17 20:14:01 +01:00
parent 7c5785e9e8
commit de35d1d8e8
45 changed files with 24687 additions and 64 deletions
+97 -1
View File
@@ -416,6 +416,15 @@
"upload_cancel": "Hochladen abbrechen",
"upload_failed": "Hochladen von {filename} fehlgeschlagen",
"send_failed": "E-Mail konnte nicht gesendet werden",
"smime_sign_on": "S/MIME-Signatur aktiviert",
"smime_sign_off": "S/MIME-Signatur deaktiviert",
"smime_encrypt_on": "S/MIME-Verschlüsselung aktiviert",
"smime_encrypt_off": "S/MIME-Verschlüsselung deaktiviert",
"smime_encrypt_unavailable": "S/MIME-Verschlüsselung nicht möglich: {reason}",
"smime_unlock_title": "S/MIME-Schlüssel entsperren",
"smime_unlock_message": "Geben Sie die Passphrase ein, um Ihren S/MIME-Schlüssel zu entsperren.",
"smime_unlock_button": "Entsperren",
"smime_passphrase_placeholder": "S/MIME-Passphrase",
"continue_draft": "Entwurf fortsetzen",
"close_draft_title": "Entwurf speichern oder verwerfen?",
"close_draft_message": "Sie haben ungespeicherte Änderungen. Möchten Sie diese als Entwurf speichern oder verwerfen?",
@@ -552,6 +561,7 @@
"folders": "Ordner",
"keywords": "Schlüsselwörter",
"security": "Sicherheit",
"encryption": "Verschlüsselung",
"files": "Dateien",
"contacts": "Contacts"
},
@@ -1439,7 +1449,16 @@
"calendar": "Kalender",
"calendar_uri": "Kalender-URL",
"scheduling_uri": "Terminplanungs-URL",
"freebusy_uri": "Frei/Belegt-URL"
"freebusy_uri": "Frei/Belegt-URL",
"cert_issuer": "Aussteller",
"cert_expires": "Läuft ab",
"cert_expired": "Abgelaufen",
"cert_fingerprint": "Fingerabdruck",
"cert_algorithm": "Algorithmus",
"import_to_smime": "In S/MIME importieren",
"cert_already_imported": "Zertifikat bereits importiert",
"cert_imported": "Zertifikat importiert",
"cert_import_failed": "Import des Zertifikats fehlgeschlagen"
},
"form": {
"create_title": "Neuer Kontakt",
@@ -1989,5 +2008,82 @@
"settings_folder_layout_desc": "Choose how folders are displayed: inline with files or in a sidebar tree",
"settings_folder_layout_inline": "Inline",
"settings_folder_layout_sidebar": "Sidebar"
},
"smime": {
"your_certificates": "Ihre Zertifikate",
"your_certificates_desc": "Importieren und verwalten Sie Ihre S/MIME-Zertifikate zum Signieren und Verschlüsseln von E-Mails",
"recipient_certificates": "Empfängerzertifikate",
"recipient_certificates_desc": "Öffentliche Zertifikate zum Verschlüsseln von E-Mails an Empfänger",
"identity_bindings": "Identitäts-Zertifikatsbindungen",
"identity_bindings_desc": "Ordnen Sie S/MIME-Zertifikate Ihren E-Mail-Identitäten zu",
"defaults_title": "Standardwerte",
"defaults_desc": "Konfigurieren Sie das Standardverhalten für Signatur und Verschlüsselung",
"import_pkcs12": "PKCS#12 importieren (.p12/.pfx)",
"import_public_cert": "Zertifikat importieren",
"no_certificates": "Noch keine Zertifikate importiert",
"no_recipient_certs": "Keine Empfängerzertifikate",
"expires": "Läuft ab",
"expired": "Abgelaufen",
"bound_to": "Zugeordnet zu",
"no_key_bound": "Keine",
"lock": "Schlüssel sperren",
"unlock": "Schlüssel entsperren",
"details": "Details anzeigen",
"delete": "Löschen",
"encrypt_by_default": "Standardmäßig verschlüsseln",
"encrypt_by_default_desc": "E-Mails automatisch verschlüsseln, wenn alle Empfänger Zertifikate haben",
"remember_unlocked": "Entsperrte Schlüssel merken",
"remember_unlocked_desc": "Schlüssel für die Dauer dieser Browsersitzung entsperrt lassen",
"sign_default_for": "Standardmäßig signieren für",
"enter_p12_passphrase": "PKCS#12-Passphrase eingeben",
"p12_passphrase_desc": "Geben Sie die Passphrase ein, die diese Zertifikatsdatei schützt",
"enter_storage_passphrase": "Speicher-Passphrase festlegen",
"storage_passphrase_desc": "Wählen Sie eine Passphrase, um diesen Schlüssel im Browser zu schützen",
"next": "Weiter",
"import": "Importieren",
"unlock_key": "Schlüssel entsperren",
"unlock_key_desc": "Geben Sie die Speicher-Passphrase ein, um diesen Schlüssel zum Signieren oder Entschlüsseln zu entsperren",
"passphrase_placeholder": "Passphrase eingeben",
"confirm_passphrase_placeholder": "Passphrase bestätigen",
"passphrase_mismatch": "Passphrasen stimmen nicht überein",
"cancel": "Abbrechen",
"processing": "Wird verarbeitet…",
"close": "Schließen",
"certificate_details": "Zertifikatsdetails",
"cert_subject": "Betreff",
"cert_issuer": "Aussteller",
"cert_email": "E-Mail",
"cert_serial": "Seriennummer",
"cert_validity": "Gültigkeit",
"cert_fingerprint": "Fingerabdruck (SHA-256)",
"cert_algorithm": "Algorithmus",
"cert_capabilities": "Fähigkeiten",
"cert_source": "Quelle",
"cert_expired": "Dieses Zertifikat ist abgelaufen",
"cert_not_yet_valid": "Dieses Zertifikat ist noch nicht gültig",
"cap_sign": "Signieren",
"cap_encrypt": "Verschlüsselung",
"cap_none": "Keine",
"show_passphrase": "Passphrase anzeigen",
"hide_passphrase": "Passphrase ausblenden",
"sign_toggle": "Signieren",
"encrypt_toggle": "Verschlüsseln",
"missing_recipient_certs": "Fehlende Zertifikate für: {emails}",
"missing_sender_cert": "Diesem Konto ist kein Zertifikat zugeordnet",
"status_encrypted_ok": "Diese Nachricht wurde verschlüsselt",
"status_encrypted_no_key": "Diese Nachricht ist verschlüsselt, aber es wurde kein passender Schlüssel gefunden",
"status_encrypted_failed": "Diese Nachricht konnte nicht entschlüsselt werden",
"status_signed_valid": "Signatur überprüft",
"status_signed_invalid": "Signaturprüfung fehlgeschlagen",
"status_signed_expired_cert": "Mit einem abgelaufenen Zertifikat signiert",
"status_signed_mismatch": "Signatur ist gültig, aber der Unterzeichner stimmt nicht mit dem Absender überein",
"status_unsupported": "Nicht unterstütztes S/MIME-Format",
"auto_import_signer_certs": "Unterzeichnerzertifikate automatisch importieren",
"auto_import_signer_certs_desc": "Zertifikate aus verifizierten signierten E-Mails automatisch für spätere Verschlüsselung speichern",
"export": "Exportieren",
"enter_export_passphrase": "Export-Passphrase festlegen",
"export_passphrase_desc": "Wählen Sie eine Passphrase zum Schutz der exportierten PKCS#12-Datei",
"export_storage_desc": "Geben Sie die Speicher-Passphrase ein, um den Schlüssel für den Export zu entschlüsseln",
"incorrect_passphrase": "Falsche Passphrase"
}
}