UNPKG

1.57 kBJavaScriptView Raw
1var fs = require('fs')
2 , path = require('path')
3 , prompt = require('cli-prompt')
4 , pempal = require('pempal')
5 , libWallet = require('../lib/wallet')
6 , loadPubkey = require('../utils/loadPubkey')
7 , loadRecipients = require('../utils/loadRecipients')
8
9function loadWallet (walletDir, cb) {
10 fs.readFile(path.join(walletDir, 'id_salty'), {encoding: 'utf8'}, function (err, str) {
11 if (err && err.code === 'ENOENT') {
12 err = new Error('No wallet found. Type `salty init` to create one.')
13 err.code = 'ENOENT'
14 return cb(err)
15 }
16 if (err) return cb(err)
17 function ask () {
18 return prompt.password('Enter passphrase: ', function (passphrase) {
19 withPrompt(passphrase)
20 })
21 }
22 if (str.indexOf('ENCRYPTED') !== -1) {
23 console.error('Wallet is encrypted.')
24 ask()
25 }
26 else withPrompt(null)
27 function withPrompt (passphrase) {
28 try {
29 var pem = pempal.decode(str, {tag: 'SALTY WALLET', passphrase: passphrase})
30 var wallet = libWallet.parse(pem.body)
31 }
32 catch (e) {
33 if (e.message === 'Bad passphrase' && passphrase) {
34 console.error('Bad passphrase!')
35 return ask()
36 }
37 return cb(e)
38 }
39 loadPubkey(walletDir, function (err, pubkey) {
40 if (err) return cb(err)
41 wallet.pubkey = pubkey
42 loadRecipients(walletDir, function (err, recipients) {
43 if (err) return cb(err)
44 wallet.recipients = recipients
45 cb(null, wallet)
46 })
47 })
48 }
49 })
50}
51module.exports = loadWallet
\No newline at end of file