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": "Upload annuleren",
"upload_failed": "Uploaden van {filename} mislukt",
"send_failed": "E-mail verzenden mislukt",
"smime_sign_on": "S/MIME-ondertekening ingeschakeld",
"smime_sign_off": "S/MIME-ondertekening uitgeschakeld",
"smime_encrypt_on": "S/MIME-versleuteling ingeschakeld",
"smime_encrypt_off": "S/MIME-versleuteling uitgeschakeld",
"smime_encrypt_unavailable": "S/MIME-versleuteling is niet beschikbaar: {reason}",
"smime_unlock_title": "S/MIME-sleutel ontgrendelen",
"smime_unlock_message": "Voer de wachtwoordzin in om uw S/MIME-sleutel te ontgrendelen.",
"smime_unlock_button": "Ontgrendelen",
"smime_passphrase_placeholder": "S/MIME-wachtwoordzin",
"continue_draft": "Concept voortzetten",
"close_draft_title": "Concept opslaan of verwijderen?",
"close_draft_message": "U heeft niet-opgeslagen wijzigingen. Wilt u dit als concept opslaan of verwijderen?",
@@ -552,6 +561,7 @@
"folders": "Mappen",
"keywords": "Sleutelwoorden",
"security": "Beveiliging",
"encryption": "Versleuteling",
"files": "Bestanden",
"contacts": "Contacts"
},
@@ -1439,7 +1449,16 @@
"calendar": "Kalender",
"calendar_uri": "Kalender-URL",
"scheduling_uri": "Planning-URL",
"freebusy_uri": "Beschikbaarheid-URL"
"freebusy_uri": "Beschikbaarheid-URL",
"cert_issuer": "Uitgever",
"cert_expires": "Verloopt",
"cert_expired": "Verlopen",
"cert_fingerprint": "Vingerafdruk",
"cert_algorithm": "Algoritme",
"import_to_smime": "Importeren naar S/MIME",
"cert_already_imported": "Certificaat is al geïmporteerd",
"cert_imported": "Certificaat geïmporteerd",
"cert_import_failed": "Importeren van certificaat mislukt"
},
"form": {
"create_title": "Nieuw contact",
@@ -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": "Uw certificaten",
"your_certificates_desc": "Importeer en beheer uw S/MIME-certificaten voor het ondertekenen en versleutelen van e-mails",
"recipient_certificates": "Certificaten van ontvangers",
"recipient_certificates_desc": "Openbare certificaten om e-mails naar ontvangers te versleutelen",
"identity_bindings": "Koppelingen tussen identiteit en sleutel",
"identity_bindings_desc": "Koppel S/MIME-certificaten aan uw e-mailidentiteiten",
"defaults_title": "Standaardinstellingen",
"defaults_desc": "Stel standaardgedrag voor ondertekenen en versleutelen in",
"import_pkcs12": "PKCS#12 importeren (.p12/.pfx)",
"import_public_cert": "Certificaat importeren",
"no_certificates": "Nog geen certificaten geïmporteerd",
"no_recipient_certs": "Geen ontvangerscertificaten",
"expires": "Verloopt",
"expired": "Verlopen",
"bound_to": "Gekoppeld aan",
"no_key_bound": "Geen",
"lock": "Sleutel vergrendelen",
"unlock": "Sleutel ontgrendelen",
"details": "Details bekijken",
"delete": "Verwijderen",
"encrypt_by_default": "Standaard versleutelen",
"encrypt_by_default_desc": "E-mails automatisch versleutelen wanneer alle ontvangers certificaten hebben",
"remember_unlocked": "Ontgrendelde sleutels onthouden",
"remember_unlocked_desc": "Sleutels ontgrendeld houden gedurende deze browsersessie",
"sign_default_for": "Standaard ondertekenen voor",
"enter_p12_passphrase": "PKCS#12-wachtwoordzin invoeren",
"p12_passphrase_desc": "Voer de wachtwoordzin in die dit certificaatbestand beschermt",
"enter_storage_passphrase": "Opslagwachtwoordzin instellen",
"storage_passphrase_desc": "Kies een wachtwoordzin om deze sleutel in uw browser te beschermen",
"next": "Volgende",
"import": "Importeren",
"unlock_key": "Sleutel ontgrendelen",
"unlock_key_desc": "Voer de opslagwachtwoordzin in om deze sleutel te ontgrendelen voor ondertekenen of ontsleutelen",
"passphrase_placeholder": "Voer wachtwoordzin in",
"confirm_passphrase_placeholder": "Bevestig wachtwoordzin",
"passphrase_mismatch": "Wachtwoordzinnen komen niet overeen",
"cancel": "Annuleren",
"processing": "Bezig met verwerken…",
"close": "Sluiten",
"certificate_details": "Certificaatdetails",
"cert_subject": "Onderwerp",
"cert_issuer": "Uitgever",
"cert_email": "E-mail",
"cert_serial": "Serienummer",
"cert_validity": "Geldigheid",
"cert_fingerprint": "Vingerafdruk (SHA-256)",
"cert_algorithm": "Algoritme",
"cert_capabilities": "Mogelijkheden",
"cert_source": "Bron",
"cert_expired": "Dit certificaat is verlopen",
"cert_not_yet_valid": "Dit certificaat is nog niet geldig",
"cap_sign": "Ondertekenen",
"cap_encrypt": "Versleuteling",
"cap_none": "Geen",
"show_passphrase": "Wachtwoordzin tonen",
"hide_passphrase": "Wachtwoordzin verbergen",
"sign_toggle": "Ondertekenen",
"encrypt_toggle": "Versleutelen",
"missing_recipient_certs": "Ontbrekende certificaten voor: {emails}",
"missing_sender_cert": "Er is geen certificaat gekoppeld aan deze identiteit",
"status_encrypted_ok": "Dit bericht is versleuteld",
"status_encrypted_no_key": "Dit bericht is versleuteld, maar er is geen passende sleutel gevonden",
"status_encrypted_failed": "Dit bericht kon niet worden ontsleuteld",
"status_signed_valid": "Handtekening geverifieerd",
"status_signed_invalid": "Verificatie van de handtekening is mislukt",
"status_signed_expired_cert": "Ondertekend met een verlopen certificaat",
"status_signed_mismatch": "Handtekening is geldig, maar de ondertekenaar komt niet overeen met de afzender",
"status_unsupported": "Niet-ondersteund S/MIME-formaat",
"auto_import_signer_certs": "Ondertekenaarcertificaten automatisch importeren",
"auto_import_signer_certs_desc": "Certificaten van geverifieerde ondertekende e-mails automatisch opslaan voor toekomstige versleuteling",
"export": "Exporteren",
"enter_export_passphrase": "Exportwachtwoordzin instellen",
"export_passphrase_desc": "Kies een wachtwoordzin om het geëxporteerde PKCS#12-bestand te beschermen",
"export_storage_desc": "Voer de opslagwachtwoordzin in om de sleutel voor export te ontsleutelen",
"incorrect_passphrase": "Onjuiste wachtwoordzin"
}
}