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_failed": "{filename} のアップロードに失敗しました",
"send_failed": "メールの送信に失敗しました",
"smime_sign_on": "S/MIME 署名を有効化しました",
"smime_sign_off": "S/MIME 署名を無効化しました",
"smime_encrypt_on": "S/MIME 暗号化を有効化しました",
"smime_encrypt_off": "S/MIME 暗号化を無効化しました",
"smime_encrypt_unavailable": "S/MIME 暗号化は利用できません: {reason}",
"smime_unlock_title": "S/MIME 鍵のロックを解除",
"smime_unlock_message": "S/MIME 鍵を解除するためのパスフレーズを入力してください。",
"smime_unlock_button": "ロック解除",
"smime_passphrase_placeholder": "S/MIME パスフレーズ",
"continue_draft": "下書きを続ける",
"close_draft_title": "下書きを保存または破棄しますか?",
"close_draft_message": "未保存の変更があります。下書きとして保存しますか、それとも破棄しますか?",
@@ -552,6 +561,7 @@
"folders": "フォルダー",
"keywords": "キーワード",
"security": "セキュリティ",
"encryption": "暗号化",
"files": "ファイル",
"contacts": "Contacts"
},
@@ -1439,7 +1449,16 @@
"calendar": "カレンダー",
"calendar_uri": "カレンダーURL",
"scheduling_uri": "スケジュールURL",
"freebusy_uri": "空き状況URL"
"freebusy_uri": "空き状況URL",
"cert_issuer": "発行者",
"cert_expires": "有効期限",
"cert_expired": "期限切れ",
"cert_fingerprint": "フィンガープリント",
"cert_algorithm": "アルゴリズム",
"import_to_smime": "S/MIME にインポート",
"cert_already_imported": "証明書はすでにインポートされています",
"cert_imported": "証明書をインポートしました",
"cert_import_failed": "証明書のインポートに失敗しました"
},
"form": {
"create_title": "新しい連絡先",
@@ -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": "あなたの証明書",
"your_certificates_desc": "メールの署名と暗号化のために S/MIME 証明書をインポートして管理します",
"recipient_certificates": "受信者証明書",
"recipient_certificates_desc": "受信者へのメールを暗号化するための公開証明書",
"identity_bindings": "ID と鍵の関連付け",
"identity_bindings_desc": "S/MIME 証明書をメール ID に関連付けます",
"defaults_title": "既定値",
"defaults_desc": "署名と暗号化の既定動作を設定します",
"import_pkcs12": "PKCS#12 をインポート (.p12/.pfx)",
"import_public_cert": "証明書をインポート",
"no_certificates": "まだ証明書はインポートされていません",
"no_recipient_certs": "受信者証明書がありません",
"expires": "有効期限",
"expired": "期限切れ",
"bound_to": "関連付け先",
"no_key_bound": "なし",
"lock": "鍵をロック",
"unlock": "鍵をロック解除",
"details": "詳細を表示",
"delete": "削除",
"encrypt_by_default": "既定で暗号化する",
"encrypt_by_default_desc": "すべての受信者が証明書を持っている場合に自動でメールを暗号化します",
"remember_unlocked": "ロック解除した鍵を記憶する",
"remember_unlocked_desc": "このブラウザーセッションの間は鍵をロック解除したままにします",
"sign_default_for": "既定で署名する対象",
"enter_p12_passphrase": "PKCS#12 パスフレーズを入力",
"p12_passphrase_desc": "この証明書ファイルを保護しているパスフレーズを入力してください",
"enter_storage_passphrase": "保存用パスフレーズを設定",
"storage_passphrase_desc": "ブラウザー内でこの鍵を保護するためのパスフレーズを選択してください",
"next": "次へ",
"import": "インポート",
"unlock_key": "鍵をロック解除",
"unlock_key_desc": "署名または復号に使うため、この鍵の保存用パスフレーズを入力してください",
"passphrase_placeholder": "パスフレーズを入力",
"confirm_passphrase_placeholder": "パスフレーズを確認",
"passphrase_mismatch": "パスフレーズが一致しません",
"cancel": "キャンセル",
"processing": "処理中…",
"close": "閉じる",
"certificate_details": "証明書の詳細",
"cert_subject": "件名",
"cert_issuer": "発行者",
"cert_email": "メールアドレス",
"cert_serial": "シリアル番号",
"cert_validity": "有効期間",
"cert_fingerprint": "フィンガープリント (SHA-256)",
"cert_algorithm": "アルゴリズム",
"cert_capabilities": "機能",
"cert_source": "ソース",
"cert_expired": "この証明書は期限切れです",
"cert_not_yet_valid": "この証明書はまだ有効ではありません",
"cap_sign": "署名",
"cap_encrypt": "暗号化",
"cap_none": "なし",
"show_passphrase": "パスフレーズを表示",
"hide_passphrase": "パスフレーズを隠す",
"sign_toggle": "署名",
"encrypt_toggle": "暗号化",
"missing_recipient_certs": "次の宛先の証明書がありません: {emails}",
"missing_sender_cert": "この ID に関連付けられた証明書がありません",
"status_encrypted_ok": "このメッセージは暗号化されています",
"status_encrypted_no_key": "このメッセージは暗号化されていますが、一致する鍵が見つかりませんでした",
"status_encrypted_failed": "このメッセージを復号できませんでした",
"status_signed_valid": "署名を確認しました",
"status_signed_invalid": "署名の検証に失敗しました",
"status_signed_expired_cert": "期限切れの証明書で署名されています",
"status_signed_mismatch": "署名は有効ですが、署名者が送信者と一致しません",
"status_unsupported": "未対応の S/MIME 形式です",
"auto_import_signer_certs": "署名者証明書を自動インポート",
"auto_import_signer_certs_desc": "検証済み署名メールの証明書を今後の暗号化用に自動保存します",
"export": "エクスポート",
"enter_export_passphrase": "エクスポート用パスフレーズを設定",
"export_passphrase_desc": "エクスポートする PKCS#12 ファイルを保護するパスフレーズを選択してください",
"export_storage_desc": "エクスポートのために鍵を復号する保存用パスフレーズを入力してください",
"incorrect_passphrase": "パスフレーズが正しくありません"
}
}