feat: add Stalwart account security management

- Add Stalwart API client library (lib/stalwart/client.ts)
- Add server-side proxy routes for auth, crypto, password, principal, probe
- Add account security Zustand store with full state management
- Add Security settings tab with password change, display name, TOTP 2FA,
  app passwords, and encryption-at-rest controls
- Add stalwartFeaturesEnabled config flag (opt-out via STALWART_FEATURES=false)
- Add i18n translations for all 8 locales (en, de, es, fr, it, ja, nl, pt)
- Add tests for Stalwart client (24 tests) and security store (29 tests)
This commit is contained in:
Linus Rath
2026-03-12 02:20:56 +01:00
parent 68d4a9a641
commit ab72fc06ff
26 changed files with 3143 additions and 310 deletions
+66 -1
View File
@@ -449,7 +449,8 @@
"filters": "フィルター",
"templates": "テンプレート",
"folders": "フォルダー",
"keywords": "キーワード"
"keywords": "キーワード",
"security": "セキュリティ"
},
"tab_groups": {
"general": "一般",
@@ -663,6 +664,70 @@
"value": "{time}"
}
},
"security": {
"title": "アカウントセキュリティ",
"description": "パスワード、二要素認証、セキュリティ設定を管理します",
"detecting": "サーバー機能を検出中...",
"not_available": "このメールサーバーではアカウントセキュリティ管理は利用できません。",
"password": {
"title": "パスワードの変更",
"current": "現在のパスワード",
"new": "新しいパスワード",
"confirm": "新しいパスワードの確認",
"submit": "パスワードを変更",
"success": "パスワードが正常に変更されました",
"error_title": "パスワードの変更に失敗しました",
"error_mismatch": "新しいパスワードが一致しません",
"error_min_length": "パスワードは8文字以上である必要があります",
"error_generic": "パスワードを変更できませんでした"
},
"display_name": {
"label": "表示名",
"description": "サーバー上に表示される名前",
"save": "保存",
"success": "表示名が更新されました",
"error": "表示名を更新できませんでした"
},
"totp": {
"section_title": "二要素認証",
"label": "TOTP認証",
"description": "時間ベースのワンタイムパスワードで追加のセキュリティレイヤーを追加",
"active": "有効",
"inactive": "無効",
"enabled": "二要素認証が有効になりました",
"disabled": "二要素認証が無効になりました",
"enable_error": "2FAを有効にできませんでした",
"disable_error": "2FAを無効にできませんでした",
"setup_instructions": "このURLを認証アプリ(Google Authenticator、Authyなど)にコピーしてください:"
},
"app_passwords": {
"title": "アプリパスワード",
"description": "二要素認証に対応していないアプリ用のパスワードを作成",
"add": "追加",
"create": "作成",
"cancel": "キャンセル",
"generate": "生成",
"name_label": "アプリ名",
"name_placeholder": "例:Thunderbird、iPhone Mail",
"password_label": "パスワード(空欄で自動生成)",
"password_placeholder": "空欄の場合自動生成",
"added": "アプリパスワードが作成されました",
"removed": "アプリパスワードが削除されました",
"add_error": "アプリパスワードを作成できませんでした",
"remove_error": "アプリパスワードを削除できませんでした",
"none": "アプリパスワードは設定されていません"
},
"encryption": {
"section_title": "保存時の暗号化",
"label": "メール暗号化",
"description": "サーバー上の保存メールを暗号化してプライバシーを強化",
"active": "{type}暗号化が有効",
"inactive": "無効",
"enabled": "保存時の暗号化が有効になりました",
"disabled_success": "保存時の暗号化が無効になりました",
"error": "暗号化設定を更新できませんでした"
}
},
"identities": {
"title": "送信者情報",
"description": "送信に使用するメールアドレスを管理",