1 | var 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 |
|
9 | function 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 | }
|
51 | module.exports = loadWallet |
\ | No newline at end of file |