Skip to content

Commit 8b75f6b

Browse files
committed
feat(e2ee): explain GnuPG key import support in i18n + handle unsupported algos
1 parent 721b97c commit 8b75f6b

34 files changed

Lines changed: 90 additions & 46 deletions

apps/fluux/src/components/settings-components/EncryptionSettings.tsx

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -726,21 +726,32 @@ export function EncryptionSettings() {
726726
if (!plugin?.importKeyFromFile) {
727727
throw new Error(t('settings.encryption.backupPluginUnavailable'))
728728
}
729-
const result = await plugin.importKeyFromFile(pendingImportFileArmored, passphrase)
730-
if ('needsPicker' in result) {
731-
setPendingKeyPicker({
732-
candidates: result.candidates,
733-
backupMessage: result.backupContext.message,
734-
passphrase: result.backupContext.passphrase,
735-
})
729+
try {
730+
const result = await plugin.importKeyFromFile(pendingImportFileArmored, passphrase)
731+
if ('needsPicker' in result) {
732+
setPendingKeyPicker({
733+
candidates: result.candidates,
734+
backupMessage: result.backupContext.message,
735+
passphrase: result.backupContext.passphrase,
736+
})
737+
setShowImportFileDialog(false)
738+
return
739+
}
740+
setFingerprint(result.fingerprint)
736741
setShowImportFileDialog(false)
737-
return
742+
setPendingImportFileArmored(null)
743+
setBackupProbeNonce((n) => n + 1)
744+
addToast('success', t('settings.encryption.importFileSuccess'))
745+
} catch (err) {
746+
const code = (err as { code?: string } | null)?.code
747+
if (code === 'unsupported-key-algorithm') {
748+
addToast('error', t('settings.encryption.unsupportedKeyAlgorithm'))
749+
setShowImportFileDialog(false)
750+
setPendingImportFileArmored(null)
751+
return
752+
}
753+
throw err
738754
}
739-
setFingerprint(result.fingerprint)
740-
setShowImportFileDialog(false)
741-
setPendingImportFileArmored(null)
742-
setBackupProbeNonce((n) => n + 1)
743-
addToast('success', t('settings.encryption.importFileSuccess'))
744755
},
745756
[pendingImportFileArmored, client, addToast, t],
746757
)

apps/fluux/src/i18n/locales/ar.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -759,9 +759,10 @@
759759
"exportFileSuccess": "تم تصدير المفتاح إلى ملف",
760760
"importFileAction": "استيراد من ملف",
761761
"importFileDialogTitle": "استيراد مفتاح OpenPGP من ملف",
762-
"importFileDialogBody": "أدخل عبارة المرور المستخدمة عند تصدير ملف المفتاح هذا. سيحل المفتاح المستورد محل المفتاح المحلي الحالي.",
762+
"importFileDialogBody": "أدخل عبارة المرور التي تحمي ملف المفتاح هذا. يمكن أن يكون الملف نسخة احتياطية من Fluux (تم إنشاؤها باستخدام «تصدير إلى ملف») أو مفتاحًا خاصًا من GnuPG تم تصديره باستخدام `gpg --export-secret-keys --armor`. سيحل المفتاح المستورد محل المفتاح المخزن حاليًا على هذا الجهاز.",
763763
"importFileSuccess": "تم استيراد المفتاح من الملف",
764764
"importFileFailed": "تعذّر قراءة الملف المحدد",
765+
"unsupportedKeyAlgorithm": "يستخدم المفتاح المستورد خوارزمية لم تعد مدعومة (مثل DSA أو ElGamal). استخدم مفتاح OpenPGP حديثًا (Curve25519 أو Ed25519 أو RSA بحجم 2048 بت على الأقل).",
765766
"externalExportAction": "تصدير لأداة OpenPGP خارجية",
766767
"externalExportDialogTitle": "تصدير المفتاح الخاص لأداة OpenPGP خارجية",
767768
"externalExportDialogBody": "يُنشئ ملف مفتاح خاص قياسي بصيغة OpenPGP (PRIVATE KEY BLOCK) يمكنك استيراده إلى gpg وOpenKeychain وKleopatra وغيرها من الأدوات.",

apps/fluux/src/i18n/locales/be.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -759,9 +759,10 @@
759759
"exportFileSuccess": "Ключ экспартаваны ў файл",
760760
"importFileAction": "Імпартаваць з файла",
761761
"importFileDialogTitle": "Імпартаваць ключ OpenPGP з файла",
762-
"importFileDialogBody": "Увядзіце пароль, які выкарыстоўваўся пры экспарце гэтага файла ключа. Імпартаваны ключ замяніць бягучы лакальны ключ.",
762+
"importFileDialogBody": "Увядзіце пароль, які абараняе гэты файл ключа. Файл можа быць рэзервовай копіяй Fluux (створанай з дапамогай «Экспартаваць у файл») або прыватным ключом GnuPG, экспартаваным з дапамогай `gpg --export-secret-keys --armor`. Імпартаваны ключ заменіць той, які зараз захоўваецца на гэтай прыладзе.",
763763
"importFileSuccess": "Ключ імпартаваны з файла",
764764
"importFileFailed": "Не атрымалася прачытаць выбраны файл",
765+
"unsupportedKeyAlgorithm": "Імпартаваны ключ выкарыстоўвае алгарытм, які больш не падтрымліваецца (напрыклад, DSA або ElGamal). Выкарыстоўвайце сучасны ключ OpenPGP (Curve25519, Ed25519 або RSA не менш за 2048 біт).",
765766
"externalExportAction": "Экспартаваць для знешняга інструмента OpenPGP",
766767
"externalExportDialogTitle": "Экспартаваць закрыты ключ для знешняга інструмента OpenPGP",
767768
"externalExportDialogBody": "Стварае стандартны файл закрытага ключа OpenPGP (PRIVATE KEY BLOCK), які можна імпартаваць у gpg, OpenKeychain, Kleopatra і іншыя інструменты.",

apps/fluux/src/i18n/locales/bg.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -759,9 +759,10 @@
759759
"exportFileSuccess": "Ключът е експортиран в файл",
760760
"importFileAction": "Импортиране от файл",
761761
"importFileDialogTitle": "Импортиране на OpenPGP ключ от файл",
762-
"importFileDialogBody": "Въведете паролата, използвана при експортиране на този файл с ключ. Импортираният ключ ще замени текущия локален ключ.",
762+
"importFileDialogBody": "Въведете паролната фраза, която защитава този файл с ключ. Файлът може да бъде резервно копие на Fluux (създадено с „Експортиране във файл\") или частен ключ GnuPG, експортиран с `gpg --export-secret-keys --armor`. Импортираният ключ ще замени този, който в момента се съхранява на това устройство.",
763763
"importFileSuccess": "Ключът е импортиран от файл",
764764
"importFileFailed": "Неуспешно четене на избрания файл",
765+
"unsupportedKeyAlgorithm": "Импортираният ключ използва алгоритъм, който вече не се поддържа (напр. DSA или ElGamal). Използвайте модерен OpenPGP ключ (Curve25519, Ed25519 или RSA с поне 2048 бита).",
765766
"externalExportAction": "Експортирай за външен инструмент OpenPGP",
766767
"externalExportDialogTitle": "Експортиране на частен ключ за външен инструмент OpenPGP",
767768
"externalExportDialogBody": "Създава стандартен файл с частен ключ OpenPGP (PRIVATE KEY BLOCK), който можете да импортирате в gpg, OpenKeychain, Kleopatra и други инструменти.",

apps/fluux/src/i18n/locales/ca.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,9 +761,10 @@
761761
"exportFileSuccess": "Clau exportada al fitxer",
762762
"importFileAction": "Importa des de fitxer",
763763
"importFileDialogTitle": "Importa la clau OpenPGP des d'un fitxer",
764-
"importFileDialogBody": "Introduïu la frase de contrasenya que es va fer servir en exportar aquest fitxer de clau. La clau importada substituirà la clau local actual.",
764+
"importFileDialogBody": "Introduïu la frase de contrasenya que protegeix aquest fitxer de clau. El fitxer pot ser una còpia de seguretat Fluux (creada amb «Exporta a fitxer») o una clau privada GnuPG exportada amb `gpg --export-secret-keys --armor`. La clau importada substituirà la que es troba actualment emmagatzemada en aquest dispositiu.",
765765
"importFileSuccess": "Clau importada des del fitxer",
766766
"importFileFailed": "No s'ha pogut llegir el fitxer seleccionat",
767+
"unsupportedKeyAlgorithm": "La clau importada utilitza un algoritme que ja no és compatible (per exemple DSA o ElGamal). Utilitzeu una clau OpenPGP moderna (Curve25519, Ed25519 o RSA d'almenys 2048 bits).",
767768
"externalExportAction": "Exporta per a una eina OpenPGP externa",
768769
"externalExportDialogTitle": "Exporta la clau privada per a una eina OpenPGP externa",
769770
"externalExportDialogBody": "Genera un fitxer de clau privada OpenPGP estàndard (PRIVATE KEY BLOCK) que podeu importar a gpg, OpenKeychain, Kleopatra i altres eines.",

apps/fluux/src/i18n/locales/cs.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,9 +761,10 @@
761761
"exportFileSuccess": "Klíč byl exportován do souboru",
762762
"importFileAction": "Importovat ze souboru",
763763
"importFileDialogTitle": "Importovat klíč OpenPGP ze souboru",
764-
"importFileDialogBody": "Zadejte přístupovou frázi použitou při exportu tohoto souboru s klíčem. Importovaný klíč nahradí aktuální místní klíč.",
764+
"importFileDialogBody": "Zadejte heslo, které chrání tento soubor klíče. Soubor může být zálohou Fluux (vytvořenou pomocí „Exportovat do souboru\") nebo soukromým klíčem GnuPG exportovaným pomocí `gpg --export-secret-keys --armor`. Importovaný klíč nahradí ten, který je aktuálně uložen na tomto zařízení.",
765765
"importFileSuccess": "Klíč byl importován ze souboru",
766766
"importFileFailed": "Nepodařilo se přečíst vybraný soubor",
767+
"unsupportedKeyAlgorithm": "Importovaný klíč používá algoritmus, který již není podporován (např. DSA nebo ElGamal). Použijte moderní klíč OpenPGP (Curve25519, Ed25519 nebo RSA s alespoň 2048 bity).",
767768
"externalExportAction": "Exportovat pro externí nástroj OpenPGP",
768769
"externalExportDialogTitle": "Exportovat soukromý klíč pro externí nástroj OpenPGP",
769770
"externalExportDialogBody": "Vytvoří standardní soubor se soukromým klíčem OpenPGP (PRIVATE KEY BLOCK), který lze importovat do gpg, OpenKeychain, Kleopatry a dalších nástrojů.",

apps/fluux/src/i18n/locales/da.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -759,9 +759,10 @@
759759
"exportFileSuccess": "Nøgle eksporteret til fil",
760760
"importFileAction": "Importer fra fil",
761761
"importFileDialogTitle": "Importer OpenPGP-nøgle fra fil",
762-
"importFileDialogBody": "Indtast den adgangskode, der blev brugt ved eksport af denne nøglefil. Den importerede nøgle erstatter den aktuelle lokale nøgle.",
762+
"importFileDialogBody": "Indtast adgangskoden, der beskytter denne nøglefil. Filen kan være en Fluux-sikkerhedskopi (oprettet med »Eksporter til fil«) eller en GnuPG-privatnøgle eksporteret med `gpg --export-secret-keys --armor`. Den importerede nøgle erstatter den, der i øjeblikket er gemt på denne enhed.",
763763
"importFileSuccess": "Nøgle importeret fra fil",
764764
"importFileFailed": "Kunne ikke læse den valgte fil",
765+
"unsupportedKeyAlgorithm": "Den importerede nøgle bruger en algoritme, der ikke længere understøttes (f.eks. DSA eller ElGamal). Brug en moderne OpenPGP-nøgle (Curve25519, Ed25519 eller RSA på mindst 2048 bit).",
765766
"externalExportAction": "Eksportér til et eksternt OpenPGP-værktøj",
766767
"externalExportDialogTitle": "Eksportér privat nøgle til et eksternt OpenPGP-værktøj",
767768
"externalExportDialogBody": "Genererer en standard OpenPGP-fil med privat nøgle (PRIVATE KEY BLOCK), som du kan importere i gpg, OpenKeychain, Kleopatra og andre værktøjer.",

apps/fluux/src/i18n/locales/de.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,9 +761,10 @@
761761
"exportFileSuccess": "Schlüssel in Datei exportiert",
762762
"importFileAction": "Aus Datei importieren",
763763
"importFileDialogTitle": "OpenPGP-Schlüssel aus Datei importieren",
764-
"importFileDialogBody": "Geben Sie die Passphrase ein, die beim Exportieren dieser Schlüsseldatei verwendet wurde. Der importierte Schlüssel ersetzt den aktuellen lokalen Schlüssel.",
764+
"importFileDialogBody": "Geben Sie die Passphrase ein, die diese Schlüsseldatei schützt. Die Datei kann eine Fluux-Sicherung sein (erstellt mit „In Datei exportieren\") oder ein mit `gpg --export-secret-keys --armor` exportierter privater GnuPG-Schlüssel. Der importierte Schlüssel ersetzt den aktuell auf diesem Gerät gespeicherten Schlüssel.",
765765
"importFileSuccess": "Schlüssel aus Datei importiert",
766766
"importFileFailed": "Die ausgewählte Datei konnte nicht gelesen werden",
767+
"unsupportedKeyAlgorithm": "Der importierte Schlüssel verwendet einen Algorithmus, der nicht mehr unterstützt wird (z. B. DSA oder ElGamal). Verwenden Sie einen modernen OpenPGP-Schlüssel (Curve25519, Ed25519 oder RSA mit mindestens 2048 Bit).",
767768
"externalExportAction": "Für externes OpenPGP-Werkzeug exportieren",
768769
"externalExportDialogTitle": "Privaten Schlüssel für externes OpenPGP-Werkzeug exportieren",
769770
"externalExportDialogBody": "Erzeugt eine standardkonforme OpenPGP-Datei mit privatem Schlüssel (PRIVATE KEY BLOCK), die Sie in gpg, OpenKeychain, Kleopatra und andere Werkzeuge importieren können.",

apps/fluux/src/i18n/locales/el.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -760,9 +760,10 @@
760760
"exportFileSuccess": "Το κλειδί εξήχθη σε αρχείο",
761761
"importFileAction": "Εισαγωγή από αρχείο",
762762
"importFileDialogTitle": "Εισαγωγή κλειδιού OpenPGP από αρχείο",
763-
"importFileDialogBody": "Εισάγετε τη φράση πρόσβασης που χρησιμοποιήθηκε κατά την εξαγωγή αυτού του αρχείου κλειδιού. Το εισαγόμενο κλειδί θα αντικαταστήσει το τρέχον τοπικό κλειδί.",
763+
"importFileDialogBody": "Εισαγάγετε τη συνθηματική φράση που προστατεύει αυτό το αρχείο κλειδιού. Το αρχείο μπορεί να είναι αντίγραφο ασφαλείας Fluux (δημιουργήθηκε με την «Εξαγωγή σε αρχείο») ή ιδιωτικό κλειδί GnuPG που εξήχθη με `gpg --export-secret-keys --armor`. Το εισαγόμενο κλειδί θα αντικαταστήσει αυτό που είναι αποθηκευμένο σε αυτή τη συσκευή.",
764764
"importFileSuccess": "Το κλειδί εισήχθη από αρχείο",
765765
"importFileFailed": "Δεν ήταν δυνατή η ανάγνωση του επιλεγμένου αρχείου",
766+
"unsupportedKeyAlgorithm": "Το εισαγόμενο κλειδί χρησιμοποιεί αλγόριθμο που δεν υποστηρίζεται πλέον (π.χ. DSA ή ElGamal). Χρησιμοποιήστε ένα σύγχρονο κλειδί OpenPGP (Curve25519, Ed25519 ή RSA τουλάχιστον 2048 bit).",
766767
"externalExportAction": "Εξαγωγή για εξωτερικό εργαλείο OpenPGP",
767768
"externalExportDialogTitle": "Εξαγωγή ιδιωτικού κλειδιού για εξωτερικό εργαλείο OpenPGP",
768769
"externalExportDialogBody": "Παράγει ένα πρότυπο αρχείο ιδιωτικού κλειδιού OpenPGP (PRIVATE KEY BLOCK) που μπορείτε να εισαγάγετε σε gpg, OpenKeychain, Kleopatra και άλλα εργαλεία.",

apps/fluux/src/i18n/locales/en.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -675,9 +675,10 @@
675675
"exportFileSuccess": "Key exported to file",
676676
"importFileAction": "Import from file",
677677
"importFileDialogTitle": "Import OpenPGP key from file",
678-
"importFileDialogBody": "Enter the passphrase used when exporting this key file. The imported key will replace the one currently stored on this device.",
678+
"importFileDialogBody": "Enter the passphrase that protects this key file. The file can be a Fluux backup (created with \"Export to file\") or a GnuPG private key exported with `gpg --export-secret-keys --armor`. The imported key will replace the one currently stored on this device.",
679679
"importFileSuccess": "Key imported from file",
680680
"importFileFailed": "Could not read the selected file",
681+
"unsupportedKeyAlgorithm": "Imported key uses an algorithm that is no longer supported (e.g. DSA or ElGamal). Use a modern OpenPGP key (Curve25519, Ed25519, or RSA at least 2048 bits).",
681682
"externalExportAction": "Export for external OpenPGP tool",
682683
"externalExportDialogTitle": "Export private key for an external OpenPGP tool",
683684
"externalExportDialogBody": "Produces a standard OpenPGP private key file (PRIVATE KEY BLOCK) that you can import into gpg, OpenKeychain, Kleopatra, and other tools.",

0 commit comments

Comments
 (0)