(armored)
| 150 | } |
| 151 | |
| 152 | async importPrivateKey(armored) { |
| 153 | const result = []; |
| 154 | let privKeys; |
| 155 | try { |
| 156 | privKeys = await readKeys({armoredKeys: armored}); |
| 157 | } catch (e) { |
| 158 | console.log('Error parsing armored key:', e); |
| 159 | result.push({ |
| 160 | type: 'error', |
| 161 | message: l10n.get('key_import_private_read', [e.message]) |
| 162 | }); |
| 163 | } |
| 164 | for (let privKey of privKeys) { |
| 165 | if (!privKey.isPrivate()) { |
| 166 | result.push({type: 'error', message: l10n.get('key_import_private_read', 'Internal error')}); |
| 167 | continue; |
| 168 | } |
| 169 | // check for existing keys |
| 170 | checkKeyId(privKey, this.keystore); |
| 171 | const fingerprint = privKey.getFingerprint(); |
| 172 | const keyId = privKey.getKeyID().toHex().toUpperCase(); |
| 173 | privKey = await sanitizeKey(privKey); |
| 174 | if (!privKey) { |
| 175 | result.push({ |
| 176 | type: 'error', |
| 177 | message: l10n.get('key_import_error_no_uid', [keyId]) |
| 178 | }); |
| 179 | continue; |
| 180 | } |
| 181 | const {userId} = await getUserInfo(privKey); |
| 182 | let key = this.keystore.getKeysForId(fingerprint); |
| 183 | if (key) { |
| 184 | key = key[0]; |
| 185 | await this.updateKey({srcKey: privKey, destKey: key, store: false}); |
| 186 | result.push({ |
| 187 | type: 'success', |
| 188 | message: l10n.get(key.isPrivate() ? 'key_import_private_update' : 'key_import_private_exists', [keyId, userId]) |
| 189 | }); |
| 190 | } else { |
| 191 | this.keystore.privateKeys.push(privKey); |
| 192 | result.push({ |
| 193 | type: 'success', |
| 194 | message: l10n.get('key_import_private_success', [keyId, userId]) |
| 195 | }); |
| 196 | await this.sync.add(fingerprint, keyringSync.INSERT); |
| 197 | } |
| 198 | } |
| 199 | return result; |
| 200 | } |
| 201 | |
| 202 | async removeKey(fingerprint, type) { |
| 203 | const removedKey = super.removeKey(fingerprint, type); |
no test coverage detected