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": "Annulla caricamento",
"upload_failed": "Caricamento di {filename} non riuscito",
"send_failed": "Invio dell'e-mail non riuscito",
"smime_sign_on": "Firma S/MIME attivata",
"smime_sign_off": "Firma S/MIME disattivata",
"smime_encrypt_on": "Cifratura S/MIME attivata",
"smime_encrypt_off": "Cifratura S/MIME disattivata",
"smime_encrypt_unavailable": "La cifratura S/MIME non è disponibile: {reason}",
"smime_unlock_title": "Sblocca chiave S/MIME",
"smime_unlock_message": "Inserisci la passphrase per sbloccare la tua chiave S/MIME.",
"smime_unlock_button": "Sblocca",
"smime_passphrase_placeholder": "Passphrase S/MIME",
"continue_draft": "Continua bozza",
"close_draft_title": "Salvare o eliminare la bozza?",
"close_draft_message": "Hai modifiche non salvate. Vuoi salvare come bozza o eliminare?",
@@ -552,6 +561,7 @@
"folders": "Cartelle",
"keywords": "Parole chiave",
"security": "Sicurezza",
"encryption": "Cifratura",
"files": "File",
"contacts": "Contacts"
},
@@ -1439,7 +1449,16 @@
"calendar": "Calendario",
"calendar_uri": "URL del calendario",
"scheduling_uri": "URL di pianificazione",
"freebusy_uri": "URL di disponibilità"
"freebusy_uri": "URL di disponibilità",
"cert_issuer": "Emittente",
"cert_expires": "Scade",
"cert_expired": "Scaduto",
"cert_fingerprint": "Impronta digitale",
"cert_algorithm": "Algoritmo",
"import_to_smime": "Importa in S/MIME",
"cert_already_imported": "Certificato già importato",
"cert_imported": "Certificato importato",
"cert_import_failed": "Importazione del certificato non riuscita"
},
"form": {
"create_title": "Nuovo contatto",
@@ -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": "I tuoi certificati",
"your_certificates_desc": "Importa e gestisci i tuoi certificati S/MIME per firmare e cifrare le email",
"recipient_certificates": "Certificati dei destinatari",
"recipient_certificates_desc": "Certificati pubblici per cifrare le email ai destinatari",
"identity_bindings": "Associazioni identità-chiave",
"identity_bindings_desc": "Associa i certificati S/MIME alle tue identità email",
"defaults_title": "Predefiniti",
"defaults_desc": "Configura il comportamento predefinito di firma e cifratura",
"import_pkcs12": "Importa PKCS#12 (.p12/.pfx)",
"import_public_cert": "Importa certificato",
"no_certificates": "Nessun certificato importato",
"no_recipient_certs": "Nessun certificato destinatario",
"expires": "Scade",
"expired": "Scaduto",
"bound_to": "Associato a",
"no_key_bound": "Nessuno",
"lock": "Blocca chiave",
"unlock": "Sblocca chiave",
"details": "Visualizza dettagli",
"delete": "Elimina",
"encrypt_by_default": "Cifra per impostazione predefinita",
"encrypt_by_default_desc": "Cifra automaticamente le email quando tutti i destinatari hanno un certificato",
"remember_unlocked": "Ricorda le chiavi sbloccate",
"remember_unlocked_desc": "Mantieni le chiavi sbloccate per la durata di questa sessione del browser",
"sign_default_for": "Firma per impostazione predefinita per",
"enter_p12_passphrase": "Inserisci la passphrase PKCS#12",
"p12_passphrase_desc": "Inserisci la passphrase che protegge questo file di certificato",
"enter_storage_passphrase": "Imposta la passphrase di archiviazione",
"storage_passphrase_desc": "Scegli una passphrase per proteggere questa chiave nel browser",
"next": "Avanti",
"import": "Importa",
"unlock_key": "Sblocca chiave",
"unlock_key_desc": "Inserisci la passphrase di archiviazione per sbloccare questa chiave per la firma o la decrittazione",
"passphrase_placeholder": "Inserisci la passphrase",
"confirm_passphrase_placeholder": "Conferma la passphrase",
"passphrase_mismatch": "Le passphrase non corrispondono",
"cancel": "Annulla",
"processing": "Elaborazione…",
"close": "Chiudi",
"certificate_details": "Dettagli del certificato",
"cert_subject": "Oggetto",
"cert_issuer": "Emittente",
"cert_email": "Email",
"cert_serial": "Numero di serie",
"cert_validity": "Validità",
"cert_fingerprint": "Impronta digitale (SHA-256)",
"cert_algorithm": "Algoritmo",
"cert_capabilities": "Capacità",
"cert_source": "Origine",
"cert_expired": "Questo certificato è scaduto",
"cert_not_yet_valid": "Questo certificato non è ancora valido",
"cap_sign": "Firma",
"cap_encrypt": "Cifratura",
"cap_none": "Nessuna",
"show_passphrase": "Mostra passphrase",
"hide_passphrase": "Nascondi passphrase",
"sign_toggle": "Firma",
"encrypt_toggle": "Cifra",
"missing_recipient_certs": "Certificati mancanti per: {emails}",
"missing_sender_cert": "Nessun certificato associato a questa identità",
"status_encrypted_ok": "Questo messaggio è stato cifrato",
"status_encrypted_no_key": "Questo messaggio è cifrato, ma non è stata trovata una chiave corrispondente",
"status_encrypted_failed": "Impossibile decrittare questo messaggio",
"status_signed_valid": "Firma verificata",
"status_signed_invalid": "Verifica della firma non riuscita",
"status_signed_expired_cert": "Firmato con un certificato scaduto",
"status_signed_mismatch": "La firma è valida, ma il firmatario non corrisponde al mittente",
"status_unsupported": "Formato S/MIME non supportato",
"auto_import_signer_certs": "Importa automaticamente i certificati dei firmatari",
"auto_import_signer_certs_desc": "Salva automaticamente i certificati delle email firmate verificate per future cifrature",
"export": "Esporta",
"enter_export_passphrase": "Imposta la passphrase di esportazione",
"export_passphrase_desc": "Scegli una passphrase per proteggere il file PKCS#12 esportato",
"export_storage_desc": "Inserisci la passphrase di archiviazione per decrittare la chiave prima dell'esportazione",
"incorrect_passphrase": "Passphrase errata"
}
}