Ask password to generate S/MIME self signed #259

This commit is contained in:
the-djmaze 2024-02-20 01:01:15 +01:00
parent 3f08051e37
commit 568caed3c7
43 changed files with 147 additions and 62 deletions

View file

@ -14,6 +14,8 @@ import { folderListOptionsBuilder } from 'Common/Folders';
import { i18n } from 'Common/Translator'; import { i18n } from 'Common/Translator';
import { defaultOptionsAfterRender } from 'Common/Utils'; import { defaultOptionsAfterRender } from 'Common/Utils';
import { AskPopupView } from 'View/Popup/Ask';
export class IdentityPopupView extends AbstractViewPopup { export class IdentityPopupView extends AbstractViewPopup {
constructor() { constructor() {
super('Identity'); super('Identity');
@ -42,16 +44,21 @@ export class IdentityPopupView extends AbstractViewPopup {
this.createSelfSigned = this.createSelfSigned.bind(this); this.createSelfSigned = this.createSelfSigned.bind(this);
} }
createSelfSigned() { async createSelfSigned() {
let identity = this.identity(); const identity = this.identity(),
Remote.request('SMimeCreateCertificate', (iError, oData) => { pass = await AskPopupView.password('', 'CRYPTO/CREATE_SELF_SIGNED');
if (oData.Result.x509) { if (pass) {
identity.smimeKey(oData.Result.pkey); Remote.request('SMimeCreateCertificate', (iError, oData) => {
identity.smimeCertificate(oData.Result.x509); if (oData.Result.x509) {
} identity.smimeKey(oData.Result.pkey);
}, { identity.smimeCertificate(oData.Result.x509);
email: identity.email() }
}); }, {
name: identity.name(),
email: identity.email(),
passphrase: pass.password
});
}
} }
submitForm(form) { submitForm(form) {

View file

@ -55,7 +55,7 @@ class Certificate
/** /**
* Verifies if a certificate can be used for a particular purpose * Verifies if a certificate can be used for a particular purpose
*/ */
public function checkPurpose($purpose, array $cainfo = array(), $untrustedfile = null)/*: bool|int*/ public function checkPurpose(int $purpose, array $cainfo = array(), ?string $untrustedfile = null)/*: bool|int*/
{ {
if ($this->x509) { if ($this->x509) {
return \openssl_x509_checkpurpose($this->x509, $purpose, $cainfo, $untrustedfile); return \openssl_x509_checkpurpose($this->x509, $purpose, $cainfo, $untrustedfile);
@ -80,7 +80,7 @@ class Certificate
/** /**
* Returns the certificate in a PEM encoded format string * Returns the certificate in a PEM encoded format string
*/ */
public function export($notext = true) : ?string public function export(bool $notext = true) : ?string
{ {
if ($this->x509) { if ($this->x509) {
$output = ''; $output = '';
@ -94,7 +94,7 @@ class Certificate
/** /**
* Returns the fingerprint or digest of the certificate * Returns the fingerprint or digest of the certificate
*/ */
public function fingerprint($hash_algorithm = 'sha1', $raw_output = false)/*: string|bool*/ public function fingerprint(string $hash_algorithm = 'sha1', bool $raw_output = false)/*: string|bool*/
{ {
return $this->x509 ? \openssl_x509_fingerprint($this->x509, $hash_algorithm, $raw_output) : false; return $this->x509 ? \openssl_x509_fingerprint($this->x509, $hash_algorithm, $raw_output) : false;
} }
@ -102,17 +102,17 @@ class Certificate
/** /**
* Returns the certificate information as an array * Returns the certificate information as an array
*/ */
public function info($shortnames = true) /*: array|bool*/ public function info(bool $shortnames = true) /*: array|bool*/
{ {
return $this->x509 ? \openssl_x509_parse($this->x509, $shortnames) : false; return $this->x509 ? \openssl_x509_parse($this->x509, $shortnames) : false;
} }
public static function getCipherMethods($aliases = false) : array public static function getCipherMethods(bool $aliases = false) : array
{ {
return \openssl_get_cipher_methods($aliases); return \openssl_get_cipher_methods($aliases);
} }
public function createSelfSigned($passphrase = null) : array public function createSelfSigned(string $passphrase = '') : array
{ {
$options = array( $options = array(
'config' => __DIR__ . '/openssl.cnf', 'config' => __DIR__ . '/openssl.cnf',
@ -144,6 +144,7 @@ class Certificate
$options $options
); );
if ($this->x509/* && $this->canSign() && $this->canEncrypt()*/) { if ($this->x509/* && $this->canSign() && $this->canEncrypt()*/) {
$this->pkey = $pkey;
$privatekey = ''; $privatekey = '';
$certificate = ''; $certificate = '';
$csrStr = ''; $csrStr = '';
@ -166,10 +167,10 @@ class Certificate
} }
// returns binary data // returns binary data
public function asPKCS12($priv_key, $pass = null, array $args = array()) : string public function asPKCS12(string $pass = '', array $args = array()) : string
{ {
$out = ''; $out = '';
\openssl_pkcs12_export($this->x509, $out, $priv_key, $pass, $args); \openssl_pkcs12_export($this->x509, $out, $this->pkey, $pass, $args);
return $out; return $out;
} }
} }

View file

@ -45,7 +45,8 @@ class OpenSSL
'file' => \basename($file), 'file' => \basename($file),
'CN' => $data['subject']['CN'], 'CN' => $data['subject']['CN'],
'emailAddress' => $data['subject']['emailAddress'], 'emailAddress' => $data['subject']['emailAddress'],
'validTo' => \gmdate('Y-m-d\\TH:i:s\\Z', $data['validTo_time_t']), // 'validTo' => \gmdate('Y-m-d\\TH:i:s\\Z', $data['validTo_time_t']),
'validTo_time_t' => $data['validTo_time_t'],
'smimesign' => false, 'smimesign' => false,
'smimeencrypt' => false, 'smimeencrypt' => false,
'privateKey' => null // not found or encrypted 'privateKey' => null // not found or encrypted

View file

@ -280,7 +280,9 @@
"DECRYPT": "فك تشفير", "DECRYPT": "فك تشفير",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "توقيع جيد من %USER%", "GOOD_SIGNATURE": "توقيع جيد من %USER%",
"ERROR": "%TYPE% error: %ERROR%" "ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "OpenPGP استيراد مفتاح", "POPUP_IMPORT_TITLE": "OpenPGP استيراد مفتاح",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Дешифрирай", "DECRYPT": "Дешифрирай",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Валиден подпис за %USER%", "GOOD_SIGNATURE": "Валиден подпис за %USER%",
"ERROR": "%TYPE% грешка: %ERROR%" "ERROR": "%TYPE% грешка: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Внасяне на OpenPGP ключ", "POPUP_IMPORT_TITLE": "Внасяне на OpenPGP ключ",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Dešifrovat", "DECRYPT": "Dešifrovat",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Ověřený podpis od %USER%", "GOOD_SIGNATURE": "Ověřený podpis od %USER%",
"ERROR": "%TYPE% chyba: %ERROR%" "ERROR": "%TYPE% chyba: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Import OpenPGP klíče", "POPUP_IMPORT_TITLE": "Import OpenPGP klíče",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Dekrypter", "DECRYPT": "Dekrypter",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Accepteret signatur for %USER\"", "GOOD_SIGNATURE": "Accepteret signatur for %USER\"",
"ERROR": "%TYPE% fejl: %ERROR%" "ERROR": "%TYPE% fejl: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Importer OpenPGP nøgle", "POPUP_IMPORT_TITLE": "Importer OpenPGP nøgle",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Entschlüsseln", "DECRYPT": "Entschlüsseln",
"VERIFY": "Überprüfen", "VERIFY": "Überprüfen",
"GOOD_SIGNATURE": "Gültige Unterschrift von %USER%", "GOOD_SIGNATURE": "Gültige Unterschrift von %USER%",
"ERROR": "%TYPE%-Fehler: %ERROR%" "ERROR": "%TYPE%-Fehler: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "OpenPGP-Schlüssel importieren", "POPUP_IMPORT_TITLE": "OpenPGP-Schlüssel importieren",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Αποκρυπτογράφηση", "DECRYPT": "Αποκρυπτογράφηση",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Good signature from %USER%", "GOOD_SIGNATURE": "Good signature from %USER%",
"ERROR": "%TYPE% error: %ERROR%" "ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Εισαγωγή κλειδιού OpenPGP", "POPUP_IMPORT_TITLE": "Εισαγωγή κλειδιού OpenPGP",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Decrypt", "DECRYPT": "Decrypt",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Good signature from %USER%", "GOOD_SIGNATURE": "Good signature from %USER%",
"ERROR": "%TYPE% error: %ERROR%" "ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Import OpenPGP key", "POPUP_IMPORT_TITLE": "Import OpenPGP key",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Decrypt", "DECRYPT": "Decrypt",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Good signature from %USER%", "GOOD_SIGNATURE": "Good signature from %USER%",
"ERROR": "%TYPE% error: %ERROR%" "ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Import OpenPGP key", "POPUP_IMPORT_TITLE": "Import OpenPGP key",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Descifrar", "DECRYPT": "Descifrar",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Buena firma de %USER%", "GOOD_SIGNATURE": "Buena firma de %USER%",
"ERROR": "Error %TYPE%: %ERROR%" "ERROR": "Error %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Importar clave OpenPGP", "POPUP_IMPORT_TITLE": "Importar clave OpenPGP",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Dekrüpteeri", "DECRYPT": "Dekrüpteeri",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Korralik signatuur kasutajalt %USER%", "GOOD_SIGNATURE": "Korralik signatuur kasutajalt %USER%",
"ERROR": "%TYPE% viga: %ERROR%" "ERROR": "%TYPE% viga: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Impordi OpenPGP võti", "POPUP_IMPORT_TITLE": "Impordi OpenPGP võti",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Deszifratu", "DECRYPT": "Deszifratu",
"VERIFY": "Egiaztatu", "VERIFY": "Egiaztatu",
"GOOD_SIGNATURE": "%USER%-en sinadura egokia", "GOOD_SIGNATURE": "%USER%-en sinadura egokia",
"ERROR": "%TYPE% errorea: %ERROR%" "ERROR": "%TYPE% errorea: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Inportatu OpenPGP gakoa", "POPUP_IMPORT_TITLE": "Inportatu OpenPGP gakoa",

View file

@ -280,7 +280,9 @@
"DECRYPT": "رمزگشایی", "DECRYPT": "رمزگشایی",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "امضای صحیح از %USER%", "GOOD_SIGNATURE": "امضای صحیح از %USER%",
"ERROR": "خطای %TYPE%: %ERROR%" "ERROR": "خطای %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "واردکردن کلید OpenPGP", "POPUP_IMPORT_TITLE": "واردکردن کلید OpenPGP",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Pura", "DECRYPT": "Pura",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Oikea allekirjoitus %USER% lle", "GOOD_SIGNATURE": "Oikea allekirjoitus %USER% lle",
"ERROR": "%TYPE% virhe: %ERROR%" "ERROR": "%TYPE% virhe: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Tuo OpenPGP avain", "POPUP_IMPORT_TITLE": "Tuo OpenPGP avain",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Déchiffrer", "DECRYPT": "Déchiffrer",
"VERIFY": "Vérifier", "VERIFY": "Vérifier",
"GOOD_SIGNATURE": "Signature valide pour %USER%", "GOOD_SIGNATURE": "Signature valide pour %USER%",
"ERROR": "Erreur %TYPE%: %ERROR%" "ERROR": "Erreur %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Importer la clef OpenPGP", "POPUP_IMPORT_TITLE": "Importer la clef OpenPGP",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Visszafejtés", "DECRYPT": "Visszafejtés",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Jó aláírás tőle: %USER%", "GOOD_SIGNATURE": "Jó aláírás tőle: %USER%",
"ERROR": "%TYPE% hiba: %ERROR%" "ERROR": "%TYPE% hiba: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "OpenPGP kulcs importálás", "POPUP_IMPORT_TITLE": "OpenPGP kulcs importálás",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Deskripsi", "DECRYPT": "Deskripsi",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Tandatangan sah dari user %USER%", "GOOD_SIGNATURE": "Tandatangan sah dari user %USER%",
"ERROR": "Kesalahan %TYPE%: %ERROR%" "ERROR": "Kesalahan %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Impor kunci OpenPGP", "POPUP_IMPORT_TITLE": "Impor kunci OpenPGP",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Afkóða", "DECRYPT": "Afkóða",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Gild undirritun frá %USER%", "GOOD_SIGNATURE": "Gild undirritun frá %USER%",
"ERROR": "%TYPE% villa: %ERROR%" "ERROR": "%TYPE% villa: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Flytja inn OpenPGP-lykil", "POPUP_IMPORT_TITLE": "Flytja inn OpenPGP-lykil",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Decriptazione", "DECRYPT": "Decriptazione",
"VERIFY": "Verifica", "VERIFY": "Verifica",
"GOOD_SIGNATURE": "Firma valida da %USER%", "GOOD_SIGNATURE": "Firma valida da %USER%",
"ERROR": "Errore di %TYPE%: %ERROR%" "ERROR": "Errore di %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Importa chiave OpenPGP", "POPUP_IMPORT_TITLE": "Importa chiave OpenPGP",

View file

@ -280,7 +280,9 @@
"DECRYPT": "復号化", "DECRYPT": "復号化",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "%USER%からの正しい署名", "GOOD_SIGNATURE": "%USER%からの正しい署名",
"ERROR": "%TYPE% エラー: %ERROR%" "ERROR": "%TYPE% エラー: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "OpenPGPキーをインポート", "POPUP_IMPORT_TITLE": "OpenPGPキーをインポート",

View file

@ -280,7 +280,9 @@
"DECRYPT": "복호화", "DECRYPT": "복호화",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "%USER%(으)로부터 수신한 양호한 서명", "GOOD_SIGNATURE": "%USER%(으)로부터 수신한 양호한 서명",
"ERROR": "%TYPE% 오류: %ERROR%" "ERROR": "%TYPE% 오류: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "OpenPGP 키 가져오기", "POPUP_IMPORT_TITLE": "OpenPGP 키 가져오기",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Decrypt", "DECRYPT": "Decrypt",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Tinkamas parašas nuo %USER%", "GOOD_SIGNATURE": "Tinkamas parašas nuo %USER%",
"ERROR": "%TYPE% klaida: %ERROR%" "ERROR": "%TYPE% klaida: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Importuoti OpenPGP raktą", "POPUP_IMPORT_TITLE": "Importuoti OpenPGP raktą",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Decrypt", "DECRYPT": "Decrypt",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Good signature from %USER%", "GOOD_SIGNATURE": "Good signature from %USER%",
"ERROR": "%TYPE% error: %ERROR%" "ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Import OpenPGP key", "POPUP_IMPORT_TITLE": "Import OpenPGP key",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Dekrypter", "DECRYPT": "Dekrypter",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Gyldig signatur fra %USER%", "GOOD_SIGNATURE": "Gyldig signatur fra %USER%",
"ERROR": "%TYPE%-feil: %ERROR%" "ERROR": "%TYPE%-feil: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Importer OpenPGP-nøkkel", "POPUP_IMPORT_TITLE": "Importer OpenPGP-nøkkel",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Ontsleutelen", "DECRYPT": "Ontsleutelen",
"VERIFY": "Verifiëren", "VERIFY": "Verifiëren",
"GOOD_SIGNATURE": "Juiste handtekening van %USER%", "GOOD_SIGNATURE": "Juiste handtekening van %USER%",
"ERROR": "%TYPE% foutmelding: %ERROR%" "ERROR": "%TYPE% foutmelding: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Importeer OpenPGP sleutel", "POPUP_IMPORT_TITLE": "Importeer OpenPGP sleutel",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Odszyfruj", "DECRYPT": "Odszyfruj",
"VERIFY": "Weryfikuj", "VERIFY": "Weryfikuj",
"GOOD_SIGNATURE": "Poprawnie podpisana przez %USER%", "GOOD_SIGNATURE": "Poprawnie podpisana przez %USER%",
"ERROR": "Błąd %TYPE%: %ERROR%" "ERROR": "Błąd %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Importowanie klucza OpenPGP", "POPUP_IMPORT_TITLE": "Importowanie klucza OpenPGP",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Decrypt", "DECRYPT": "Decrypt",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Boa assinatura de %USER%", "GOOD_SIGNATURE": "Boa assinatura de %USER%",
"ERROR": "Erro %TYPE%: %ERROR%" "ERROR": "Erro %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Importar chave OpenPGP", "POPUP_IMPORT_TITLE": "Importar chave OpenPGP",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Desencriptar", "DECRYPT": "Desencriptar",
"VERIFY": "Validar", "VERIFY": "Validar",
"GOOD_SIGNATURE": "Boa assinatura de %USER%", "GOOD_SIGNATURE": "Boa assinatura de %USER%",
"ERROR": "Erro %TYPE%: %ERROR%" "ERROR": "Erro %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Importar chave OpenPGP", "POPUP_IMPORT_TITLE": "Importar chave OpenPGP",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Desencriptar", "DECRYPT": "Desencriptar",
"VERIFY": "Validar", "VERIFY": "Validar",
"GOOD_SIGNATURE": "Boa assinatura de %USER%", "GOOD_SIGNATURE": "Boa assinatura de %USER%",
"ERROR": "Erro %TYPE%: %ERROR%" "ERROR": "Erro %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Importar chave OpenPGP", "POPUP_IMPORT_TITLE": "Importar chave OpenPGP",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Decrypt", "DECRYPT": "Decrypt",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Good signature from %USER%", "GOOD_SIGNATURE": "Good signature from %USER%",
"ERROR": "%TYPE% error: %ERROR%" "ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Import OpenPGP key", "POPUP_IMPORT_TITLE": "Import OpenPGP key",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Расшифровать", "DECRYPT": "Расшифровать",
"VERIFY": "Проверить", "VERIFY": "Проверить",
"GOOD_SIGNATURE": "Подтвержденная сигнатура для %USER%", "GOOD_SIGNATURE": "Подтвержденная сигнатура для %USER%",
"ERROR": "%TYPE% ошибка: %ERROR%" "ERROR": "%TYPE% ошибка: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Импорт OpenPGP ключа", "POPUP_IMPORT_TITLE": "Импорт OpenPGP ключа",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Decrypt", "DECRYPT": "Decrypt",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Good signature from %USER%", "GOOD_SIGNATURE": "Good signature from %USER%",
"ERROR": "%TYPE% error: %ERROR%" "ERROR": "%TYPE% error: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Importovať kľúč OpenPGP", "POPUP_IMPORT_TITLE": "Importovať kľúč OpenPGP",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Dešifriraj", "DECRYPT": "Dešifriraj",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Dober podpis od %USER%", "GOOD_SIGNATURE": "Dober podpis od %USER%",
"ERROR": "%TYPE% napaka: %ERROR%" "ERROR": "%TYPE% napaka: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Uvoz OpenPGP ključa", "POPUP_IMPORT_TITLE": "Uvoz OpenPGP ključa",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Avkryptera", "DECRYPT": "Avkryptera",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Godkänd signatur för %USER%", "GOOD_SIGNATURE": "Godkänd signatur för %USER%",
"ERROR": "%TYPE%-fel: %ERROR%" "ERROR": "%TYPE%-fel: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Import av OpenPGP-nyckel", "POPUP_IMPORT_TITLE": "Import av OpenPGP-nyckel",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Decrypt", "DECRYPT": "Decrypt",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Geçerli imza %USER%", "GOOD_SIGNATURE": "Geçerli imza %USER%",
"ERROR": "%TYPE% hatası: %ERROR%" "ERROR": "%TYPE% hatası: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "OpenPGP key'i içe aktar", "POPUP_IMPORT_TITLE": "OpenPGP key'i içe aktar",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Дешифрувати", "DECRYPT": "Дешифрувати",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "Підтверджена сигнатура для %USER%", "GOOD_SIGNATURE": "Підтверджена сигнатура для %USER%",
"ERROR": "%TYPE% помилка: %ERROR%" "ERROR": "%TYPE% помилка: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Імпорт OpenPGP ключа", "POPUP_IMPORT_TITLE": "Імпорт OpenPGP ключа",

View file

@ -280,7 +280,9 @@
"DECRYPT": "Gỡ mã hóa", "DECRYPT": "Gỡ mã hóa",
"VERIFY": "Xác minh", "VERIFY": "Xác minh",
"GOOD_SIGNATURE": "Chữ ký ổn từ %USER%", "GOOD_SIGNATURE": "Chữ ký ổn từ %USER%",
"ERROR": "Lỗi %TYPE%: %ERROR%" "ERROR": "Lỗi %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "Nhập mật mã OpenPGP", "POPUP_IMPORT_TITLE": "Nhập mật mã OpenPGP",

View file

@ -280,7 +280,9 @@
"DECRYPT": "解密", "DECRYPT": "解密",
"VERIFY": "Verify", "VERIFY": "Verify",
"GOOD_SIGNATURE": "来自 %USER% 的可用签名", "GOOD_SIGNATURE": "来自 %USER% 的可用签名",
"ERROR": "%TYPE% 错误: %ERROR%" "ERROR": "%TYPE% 错误: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "导入 OpenPGP 密钥", "POPUP_IMPORT_TITLE": "导入 OpenPGP 密钥",

View file

@ -280,7 +280,9 @@
"DECRYPT": "解密", "DECRYPT": "解密",
"VERIFY": "驗證", "VERIFY": "驗證",
"GOOD_SIGNATURE": "來自「%USER%」的良好簽署", "GOOD_SIGNATURE": "來自「%USER%」的良好簽署",
"ERROR": "%TYPE% 錯誤: %ERROR%" "ERROR": "%TYPE% 錯誤: %ERROR%",
"CREATE_SELF_SIGNED": "Create self-signed",
"VALID_UNTIL": "Valid until"
}, },
"OPENPGP": { "OPENPGP": {
"POPUP_IMPORT_TITLE": "匯入 OpenPGP 金鑰", "POPUP_IMPORT_TITLE": "匯入 OpenPGP 金鑰",

View file

@ -98,7 +98,7 @@
</div> </div>
<div class="control-group" data-bind="hidden:smimeKey"> <div class="control-group" data-bind="hidden:smimeKey">
<label></label> <label></label>
<button type="button" data-bind="click: $root.createSelfSigned">Create self-signed</button> <button type="button" data-bind="click: $root.createSelfSigned" data-i18n="CRYPTO/CREATE_SELF_SIGNED"></button>
</div> </div>
</details> </details>
</div> </div>

View file

@ -126,16 +126,16 @@
<details> <details>
<summary class="legend">S/MIME Certificates</summary> <summary class="legend">S/MIME Certificates</summary>
<table class="table table-hover list-table"> <table class="table table-hover list-table">
<tbody data-bind="foreach: smimeCertificates"> <tbody data-bind="foreach: smimeCertificates, i18nUpdate: smimeCertificates">
<tr> <tr>
<td> <td>
<span data-bind="visible: smimesign" class="fontastic" data-i18n="[title]CRYPTO/VERIFY"></span> <span data-bind="visible: smimesign" class="fontastic" data-i18n="[title]CRYPTO/VERIFY"></span>
<span data-bind="visible: smimeencrypt" class="fontastic" data-i18n="[title]CRYPTO/ENCRYPT">🔒</span> <span data-bind="visible: smimeencrypt" class="fontastic" data-i18n="[title]CRYPTO/ENCRYPT">🔒</span>
<span class="key-name" data-bind="text: CN"></span> <span class="key-name" data-bind="text: CN"></span>
<span class="key-user" data-bind="text: emailAddress"></span> <span class="key-user" data-bind="text: emailAddress"></span>
</td> <br/>
<td> <span data-i18n="CRYPTO/VALID_UNTIL"></span>:
<time data-time-format="FULL" data-bind="attr:{datetime:validTo}"></time> <time data-time-format="FULL" data-bind="time:validTo_time_t"></time>
</td> </td>
<!-- <!--
<td> <td>