Ask old login password on CryptKey decrypt failure, to reseal with new password

This commit is contained in:
the-djmaze 2024-03-18 12:25:24 +01:00
parent a241149b6b
commit 9bc56a5abd
47 changed files with 199 additions and 67 deletions

View file

@ -11,6 +11,8 @@ import { LoginAdminScreen } from 'Screen/Admin/Login';
import { startScreens } from 'Knoin/Knoin';
import { AbstractApp } from 'App/Abstract';
import { AskPopupView } from 'View/Popup/Ask';
export class AdminApp extends AbstractApp {
constructor() {
super(Remote);
@ -35,3 +37,16 @@ export class AdminApp extends AbstractApp {
}
}
}
AskPopupView.credentials = function(sAskDesc, btnText) {
return new Promise(resolve => {
this.showModal([
sAskDesc,
view => resolve({username:view.username(), password:view.passphrase()}),
() => resolve(null),
true,
3,
btnText
]);
});
};

View file

@ -86,6 +86,8 @@ export class AppUser extends AbstractApp {
this.folderList = FolderUserStore.folderList;
this.messageList = MessagelistUserStore;
this.ask = AskPopupView;
}
/**
@ -248,3 +250,46 @@ export class AppUser extends AbstractApp {
showScreenPopup(ComposePopupView, params);
}
}
AskPopupView.password = function(sAskDesc, btnText) {
return new Promise(resolve => {
this.showModal([
sAskDesc,
view => resolve({password:view.passphrase(), remember:view.remember()}),
() => resolve(null),
true,
5,
btnText
]);
});
};
AskPopupView.cryptkey = () => new Promise(resolve => {
const fn = () => AskPopupView.showModal([
i18n('CRYPTO/ASK_CRYPTKEY_PASS'),
view => {
let pass = view.passphrase();
if (pass) {
Remote.post('ResealCryptKey', null, {
passphrase: pass
}).then(response => {
resolve(response?.Result);
}).catch(e => {
if (111 === e.code) {
fn();
} else {
console.error(e);
resolve(null);
}
});
} else {
resolve(null);
}
},
() => resolve(null),
true,
1,
i18n('CRYPTO/DECRYPT')
]);
fn();
});

View file

@ -50,6 +50,7 @@ Notifications = {
ConnectionError: 104,
DomainNotAllowed: 109,
AccountNotAllowed: 110,
CryptKeyError: 111,
ContactsSyncError: 140,

View file

@ -132,7 +132,7 @@ export class AbstractFetchRemote
fetchJSON(sAction, getURL(sGetAdd),
sGetAdd ? null : (params || {}),
undefined === iTimeout ? 30000 : pInt(iTimeout),
data => {
async data => {
let iError = 0;
if (data) {
/*
@ -148,6 +148,10 @@ export class AbstractFetchRemote
}
}
if (111 === iError && rl.app.ask && await rl.app.ask.cryptkey()) {
return this.request(sAction, fCallback, params, iTimeout, sGetAdd);
}
fCallback && fCallback(
iError,
data,
@ -185,12 +189,16 @@ export class AbstractFetchRemote
post(action, fTrigger, params, timeOut) {
this.setTrigger(fTrigger, true);
return fetchJSON(action, getURL(), params || {}, pInt(timeOut, 30000),
data => {
async data => {
abort(action, 0, 1);
if (!data) {
return Promise.reject(new FetchError(Notifications.JsonParse));
}
if (111 === data?.ErrorCode && rl.app.ask && await rl.app.ask.cryptkey()) {
return this.post(action, fTrigger, params, timeOut);
}
/*
let isCached = false, type = '';
if (data?.epoch) {

View file

@ -85,29 +85,3 @@ export class AskPopupView extends AbstractViewPopup {
});
}
}
AskPopupView.password = function(sAskDesc, btnText) {
return new Promise(resolve => {
this.showModal([
sAskDesc,
view => resolve({password:view.passphrase(), remember:view.remember()}),
() => resolve(null),
true,
5,
btnText
]);
});
}
AskPopupView.credentials = function(sAskDesc, btnText) {
return new Promise(resolve => {
this.showModal([
sAskDesc,
view => resolve({username:view.username(), password:view.passphrase(), remember:view.remember()}),
() => resolve(null),
true,
3,
btnText
]);
});
}

View file

@ -20,6 +20,15 @@ trait UserAuth
private $oAdditionalAuthAccount = false;
private $oMainAuthAccount = false;
public function DoResealCryptKey() : array
{
return $this->DefaultResponse(
$this->getMainAccountFromToken()->resealCryptKey(
new \SnappyMail\SensitiveString($this->GetActionParam('passphrase', ''))
)
);
}
/**
* @throws \RainLoop\Exceptions\ClientException
*/

View file

@ -4,6 +4,7 @@ namespace RainLoop\Model;
use RainLoop\Utils;
use RainLoop\Exceptions\ClientException;
use RainLoop\Notifications;
use RainLoop\Providers\Storage\Enumerations\StorageType;
use SnappyMail\SensitiveString;
@ -45,6 +46,8 @@ class MainAccount extends Account
$sKey = \SnappyMail\Crypt::DecryptFromJSON($sKey, $this->IncPassword());
if ($sKey) {
$this->sCryptKey = new SensitiveString(\hex2bin($sKey));
} else {
throw new ClientException(Notifications::CryptKeyError);
}
}
return $this->sCryptKey;

View file

@ -17,6 +17,7 @@ class Notifications
const ConnectionError = 104;
const DomainNotAllowed = 109;
const AccountNotAllowed = 110;
const CryptKeyError = 111;
const ContactsSyncError = 140;

View file

@ -49,7 +49,6 @@ class Backup
\RainLoop\Providers\Storage\Enumerations\StorageType::PGP,
true
);
$hash = $oAccount->CryptKey();
foreach (\glob("{$dir}*") as $file) {
if (\is_file($file)) {
if ('_public.asc' === \substr($file, -11)) {
@ -61,6 +60,7 @@ class Backup
$key = \json_decode(\file_get_contents($file));
if (\is_array($key)) {
$mac = \array_pop($key);
$hash = $oAccount->CryptKey();
if (!empty($key[2]) && \hash_hmac('sha1', $key[2], $hash) === $mac) {
$key[1] = \base64_decode($key[1]);
$key[2] = \base64_decode($key[2]);

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "OpenPGP استيراد مفتاح",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "الموقع موجود مسبقاَ",
"DomainNotAllowed": "غير مسموح لهذا الموقع",
"AccountNotAllowed": "الحساب غير مسموح له",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "خطأ في مزامنة جهات الإتصال",
"CantGetMessageList": "لايمكن الوصول الى قائمة الرسائل",
"CantGetMessage": "لايمكن الوصول الى الرسالة",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% грешка: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Внасяне на OpenPGP ключ",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Домейна вече съществува",
"DomainNotAllowed": "Този домейн не е разрешен",
"AccountNotAllowed": "Този акаунт не е разрешен",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Грешка при синхронизацията",
"CantGetMessageList": "Не може да се изтегли списъка със съобщения",
"CantGetMessage": "Не може да се изтегли съобщението",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% chyba: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Import OpenPGP klíče",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Tato doména již existuje",
"DomainNotAllowed": "Doména není povolená",
"AccountNotAllowed": "Účet není povolený",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Chyba při synchronizaci kontaktů",
"CantGetMessageList": "Chyba při vytváření seznamu zpráv",
"CantGetMessage": "Zprávu se nepodařilo načíst",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% fejl: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Importer OpenPGP nøgle",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domæne eksisterer allerede",
"DomainNotAllowed": "Domæne ikke tilladt",
"AccountNotAllowed": "Konto ikke tilladt",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Fejl ved synkronisering af kontakter",
"CantGetMessageList": "Kan ikke indlæse meddelelsesoversigt ",
"CantGetMessage": "Kan ikke indlæse meddelelse",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE%-Fehler: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "OpenPGP-Schlüssel importieren",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Diese Domain existiert bereits",
"DomainNotAllowed": "Diese Domain ist nicht zugelassen.",
"AccountNotAllowed": "Konto ist nicht zugelassen.",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Fehler bei Kontakte-Synchronisierung",
"CantGetMessageList": "Die Nachrichtenliste ist nicht verfügbar",
"CantGetMessage": "Diese Nachricht ist nicht verfügbar",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Εισαγωγή κλειδιού OpenPGP",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domain already exists",
"DomainNotAllowed": "Domain is not allowed",
"AccountNotAllowed": "Account is not allowed",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Contacts synchronization error",
"CantGetMessageList": "Can't get message list",
"CantGetMessage": "Can't get message",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Import OpenPGP key",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domain already exists",
"DomainNotAllowed": "Domain is not allowed",
"AccountNotAllowed": "Account is not allowed",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Contacts synchronization error",
"CantGetMessageList": "Can't get message list",
"CantGetMessage": "Can't get message",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Import OpenPGP key",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domain already exists",
"DomainNotAllowed": "Domain is not allowed",
"AccountNotAllowed": "Account is not allowed",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Contacts synchronization error",
"CantGetMessageList": "Can't get message list",
"CantGetMessage": "Can't get message",

View file

@ -284,7 +284,8 @@
"ERROR": "Error %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Importar clave OpenPGP",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "El Dominio ya existe",
"DomainNotAllowed": "Dominio no permitido",
"AccountNotAllowed": "La cuenta no está permitida",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Error de sincronización de Contactos",
"CantGetMessageList": "No se puede obtener la lista de mensajes",
"CantGetMessage": "No se puede obtener el mensaje",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% viga: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Impordi OpenPGP võti",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domeen juba eksisteerib",
"DomainNotAllowed": "Domeenil ei ole lubatud siseneda",
"AccountNotAllowed": "Kasutajakontol ei ole lubatud siseneda",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Kontaktide sünkroniseerimise viga",
"CantGetMessageList": "Kirjade nimekirja laadimine ebaõnnestus",
"CantGetMessage": "Kirja laadimine ebaõnnestus",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% errorea: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Inportatu OpenPGP gakoa",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domeinua jadanik existitzen da",
"DomainNotAllowed": "Domeinu ez baimendua",
"AccountNotAllowed": "Kontu ez baimendua",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Kontaktu sinkronizazio errorea",
"CantGetMessageList": "Ezin da mezuen zerrenda eskuratu",
"CantGetMessage": "Ezin da mezua eskuratu",

View file

@ -284,7 +284,8 @@
"ERROR": "خطای %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "واردکردن کلید OpenPGP",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "دامنه در حال حاضر موجود است",
"DomainNotAllowed": "به دامنه اجازه داده نشده است",
"AccountNotAllowed": "به حساب کاربری اجازه داده نشده است",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "همگام‌سازی تماس‌ها با خطا همراه بود",
"CantGetMessageList": "امکان دریافت لیست پیام‌ها نیست",
"CantGetMessage": "امکان دریافت پیام نیست",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% virhe: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Tuo OpenPGP avain",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Verkkotunnus on jo olemassa",
"DomainNotAllowed": "Verkkotunnus ei ole sallittu",
"AccountNotAllowed": "Tili ei ole sallittu",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Yhteystietojen synkronointivirhe",
"CantGetMessageList": "Viestilistaa ei voi näyttää",
"CantGetMessage": "Viestiä ei voi näyttää",

View file

@ -284,7 +284,8 @@
"ERROR": "Erreur %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valable jusque",
"PRIVATE_KEY": "Clé privée"
"PRIVATE_KEY": "Clé privée",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Importer la clef OpenPGP",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Le domaine existe déjà",
"DomainNotAllowed": "Ce domaine n'est pas autorisé",
"AccountNotAllowed": "Ce compte n'est pas autorisé",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Erreur de synchronisation des contacts",
"CantGetMessageList": "Impossible d'obtenir la liste des messages",
"CantGetMessage": "Impossible d'obtenir le message",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% hiba: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "OpenPGP kulcs importálás",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "A domain már létezik",
"DomainNotAllowed": "A domain nem engedélyezett",
"AccountNotAllowed": "A fiók nem engedélyezett",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Hiba lépett fel a névjegyek szinkronizálása közben",
"CantGetMessageList": "Nem tudom letölteni az üzenetlistát",
"CantGetMessage": "Nem tudom letölteni az üzenetet",

View file

@ -284,7 +284,8 @@
"ERROR": "Kesalahan %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Impor kunci OpenPGP",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domain telah ada",
"DomainNotAllowed": "Domain tidak diizinkan",
"AccountNotAllowed": "Akun ini tidak diizinkan",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Kesalahan sinkronisasi kontak",
"CantGetMessageList": "Gagal memperoleh daftar pesan",
"CantGetMessage": "Gagal memperoleh pesan",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% villa: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Flytja inn OpenPGP-lykil",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Lén er nú þegar til staðar",
"DomainNotAllowed": "Lén ekki leyft",
"AccountNotAllowed": "Aðgangur er ekki leyfður",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Villa í samstillingu tengiliða",
"CantGetMessageList": "Get ekki sótt skilaboðlista",
"CantGetMessage": "Get ekki sótt skilaboð",

View file

@ -284,7 +284,8 @@
"ERROR": "Errore di %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Importa chiave OpenPGP",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Il dominio esiste già",
"DomainNotAllowed": "Il dominio non è autorizzato",
"AccountNotAllowed": "L'account non è autorizzato",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Errore durante la sincronizzazione dei contatti",
"CantGetMessageList": "Impossibile ottenere la lista dei messaggi",
"CantGetMessage": "Impossibile caricare il messaggio",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% エラー: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "OpenPGPキーをインポート",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "ドメインが既に存在しています",
"DomainNotAllowed": "ドメインは、許可されていません",
"AccountNotAllowed": "アカウントは、許可されていません",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "連絡先 同期 エラー",
"CantGetMessageList": "メッセージ一覧が取得できません",
"CantGetMessage": "メッセージを取得できません",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% 오류: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "OpenPGP 키 가져오기",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "이미 존재하는 도메인입니다.",
"DomainNotAllowed": "허용된 도메인이 아닙니다.",
"AccountNotAllowed": "허용된 계정이 아닙니다.",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "연락처 동기화 오류",
"CantGetMessageList": "메시지 목록을 불러 올 수 없습니다.",
"CantGetMessage": "메시지를 가져올 수 없습니다.",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% klaida: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Importuoti OpenPGP raktą",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Subdomenas jau egzistuoja",
"DomainNotAllowed": "Šis subdomenas neleidžiamas",
"AccountNotAllowed": "Paskyra neleidžiama",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Kontaktų sinchronizavimo klaida",
"CantGetMessageList": "Nepavyksta gauti laiškų sąrašo",
"CantGetMessage": "Nepavyksta gauti laiško",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Import OpenPGP key",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domeņes jau eksistē",
"DomainNotAllowed": "Šis domēns nav atļauts",
"AccountNotAllowed": "Account is not allowed",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Contacts synchronization error",
"CantGetMessageList": "Nevar ielādēt ziņojumu sarakstu",
"CantGetMessage": "Nevar ielādēt ziņojumu",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE%-feil: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Importer OpenPGP-nøkkel",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domenet finnes allerede",
"DomainNotAllowed": "Dette domenet tillates ikke",
"AccountNotAllowed": "Denne kontoen tillates ikke",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Synkronisering av kontakter mislyktes",
"CantGetMessageList": "Klarte ikke å hente liste over meldinger",
"CantGetMessage": "Klarte ikke å hente melding",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% foutmelding: %ERROR%",
"CREATE_SELF_SIGNED": "Zelfondertekend certificaat aanmaken",
"VALID_UNTIL": "Geldig tot",
"PRIVATE_KEY": "Privésleutel"
"PRIVATE_KEY": "Privésleutel",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Importeer OpenPGP sleutel",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domein bestaat reeds",
"DomainNotAllowed": "Domein is niet toegestaan",
"AccountNotAllowed": "Account is niet toegestaan",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Contactpersonen synchronisatie fout",
"CantGetMessageList": "Berichtenlijst kan niet worden opgehaald",
"CantGetMessage": "Bericht kan niet worden opgehaald",

View file

@ -284,7 +284,8 @@
"ERROR": "Błąd %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Utwórz samodzielnie podpisany certyfikat",
"VALID_UNTIL": "Ważny do",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Importowanie klucza OpenPGP",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domena już istnieje",
"DomainNotAllowed": "Domena jest niedozwolona",
"AccountNotAllowed": "Konto nie jest dozwolone",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Błąd synchronizacji kontaktów",
"CantGetMessageList": "Nie można pobrać listy wiadomości",
"CantGetMessage": "Nie można pobrać wiadomości",

View file

@ -284,7 +284,8 @@
"ERROR": "Erro %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Importar chave OpenPGP",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "O domínio já existe",
"DomainNotAllowed": "Este domínio não é permitido",
"AccountNotAllowed": "Conta não permitida",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Erro na sincronização dos contatos",
"CantGetMessageList": "Não foi possível obter a lista de mensagens",
"CantGetMessage": "Não foi possível obter a mensagem",

View file

@ -284,7 +284,8 @@
"ERROR": "Erro %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Criar auto-assinado",
"VALID_UNTIL": "Válido até",
"PRIVATE_KEY": "Chave privada"
"PRIVATE_KEY": "Chave privada",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Importar chave OpenPGP",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "O domínio já existe",
"DomainNotAllowed": "Este domínio não é permitido",
"AccountNotAllowed": "Esta conta não é permitida",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Erro na sincronização de contactos",
"CantGetMessageList": "Não é possível obter a lista de mensagens",
"CantGetMessage": "Não é possível obter a mensagem",

View file

@ -284,7 +284,8 @@
"ERROR": "Erro %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Criar auto-assinado",
"VALID_UNTIL": "Válido até",
"PRIVATE_KEY": "Chave privada"
"PRIVATE_KEY": "Chave privada",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Importar chave OpenPGP",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "O domínio já existe",
"DomainNotAllowed": "Este domínio não é permitido",
"AccountNotAllowed": "Esta conta não é permitida",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Erro na sincronização de contactos",
"CantGetMessageList": "Não é possível obter a lista de mensagens",
"CantGetMessage": "Não é possível obter a mensagem",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Import OpenPGP key",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domeniu există deja.",
"DomainNotAllowed": "Domeniul nu apartine de Wey5",
"AccountNotAllowed": "Contul nu are permisiunea de conectare",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Contacts synchronization error",
"CantGetMessageList": "Nu găsesc o lista de scrisori",
"CantGetMessage": "Nu pot obține scrisoarea. Încercați din nou",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% ошибка: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Импорт OpenPGP ключа",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Домен уже существует",
"DomainNotAllowed": "Данный домен не разрешен",
"AccountNotAllowed": "Данный аккаунт не разрешен",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Ошибка синхронизации контактов",
"CantGetMessageList": "Не могу получить список писем",
"CantGetMessage": "Не могу получить письмо",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Importovať kľúč OpenPGP",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Táto Doména už existuje",
"DomainNotAllowed": "Doména nie je povolená",
"AccountNotAllowed": "Účet nie je povolený",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Contacts synchronization error",
"CantGetMessageList": "Chyba pri vytváraní zoznamu správ.",
"CantGetMessage": "Správu sa nepodarilo načítať",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% napaka: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Uvoz OpenPGP ključa",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domena že obstaja",
"DomainNotAllowed": "Domena ni dovoljena",
"AccountNotAllowed": "Račun ni dovoljen",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Napaka sinhronizacije stikov",
"CantGetMessageList": "Ni mogoče pridobiti seznama sporočil",
"CantGetMessage": "Ni mogoče pridobiti sporočila",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE%-fel: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Import av OpenPGP-nyckel",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Domänen finns redan",
"DomainNotAllowed": "Domän är inte tillåtet",
"AccountNotAllowed": "Konto är inte tillåtet",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Kontakt-synkroniseringsfel",
"CantGetMessageList": "Kan inte hämta meddelandelista",
"CantGetMessage": "Kan inte hämta meddelande",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% hatası: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "OpenPGP key'i içe aktar",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Alanadı bulunuyor",
"DomainNotAllowed": "Alan Adına izin verilmemiş",
"AccountNotAllowed": "Hesaba izin verilmemiş",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Kişi listesi senkronizasyon hatası",
"CantGetMessageList": "Mesaj listesi alınamadı",
"CantGetMessage": "Mesaj alınamadı",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% помилка: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Імпорт OpenPGP ключа",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Домен вже існує",
"DomainNotAllowed": "Цей домен заборонений",
"AccountNotAllowed": "Цей акаунт заборонений",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Помилка синхронізації контактів",
"CantGetMessageList": "Не можу отримати список листів",
"CantGetMessage": "Не можу отримати листа",

View file

@ -284,7 +284,8 @@
"ERROR": "Lỗi %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "Nhập mật mã OpenPGP",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "Tên miền đã tồn tại",
"DomainNotAllowed": "Tên miền không được cho phép truy cập",
"AccountNotAllowed": "Tài khoản không được cho phép truy cập",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "Lỗi đồng bộ danh bạ",
"CantGetMessageList": "Không thể lấy được danh sách thư",
"CantGetMessage": "Không lấy được thư",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% 错误: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "导入 OpenPGP 密钥",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "域已经存在",
"DomainNotAllowed": "不允许此域名",
"AccountNotAllowed": "不允许此账户",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "联系人同步错误",
"CantGetMessageList": "无法获取邮件列表",
"CantGetMessage": "无法获取邮件",

View file

@ -284,7 +284,8 @@
"ERROR": "%TYPE% 錯誤: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until",
"PRIVATE_KEY": "Private key"
"PRIVATE_KEY": "Private key",
"ASK_CRYPTKEY_PASS": "Your login passphrase has changed. Please fill in your old login password to decrypt data"
},
"OPENPGP": {
"POPUP_IMPORT_TITLE": "匯入 OpenPGP 金鑰",
@ -585,6 +586,7 @@
"DomainAlreadyExists": "域名已經存在",
"DomainNotAllowed": "不可使用該域名",
"AccountNotAllowed": "不可使用該帳戶",
"CryptKeyError": "Your login passphrase has changed",
"ContactsSyncError": "連絡人同步錯誤",
"CantGetMessageList": "無法取得郵件清單",
"CantGetMessage": "無法取得郵件",