-
Notifications
You must be signed in to change notification settings - Fork 10
/
receive.js
88 lines (82 loc) · 2.47 KB
/
receive.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/* eslint new-cap: 0, max-depth: 0 */
const {Command, flags} = require('@oclif/command')
const {red, white} = require('kleur')
const validateQrlAddress = require('@theqrl/validate-qrl-address')
const qrcode = require('qrcode-terminal')
const aes256 = require('aes256')
const {cli} = require('cli-ux')
const fs = require('fs')
const openWalletFile = function (path) {
const contents = fs.readFileSync(path)
return JSON.parse(contents)[0]
}
class Receive extends Command {
async run() {
const {args, flags} = this.parse(Receive)
let address = args.address
if (!validateQrlAddress.hexString(address).result) {
// not a valid address - is it a file?
let isFile = false
let isValidFile = false
const path = address
try {
if (fs.existsSync(path)) {
isFile = true
}
} catch (error) {
this.log(`${red('⨉')} Invalid QRL address/wallet file`)
this.exit(1)
}
if (isFile === false) {
this.log(`${red('⨉')} Invalid QRL address/wallet file`)
this.exit(1)
} else {
const walletJson = openWalletFile(path)
try {
if (walletJson.encrypted === false) {
isValidFile = true
address = walletJson.address
}
if (walletJson.encrypted === true) {
let password = ''
if (flags.password) {
password = flags.password
} else {
password = await cli.prompt('Enter password for wallet file', {type: 'hide'})
}
address = aes256.decrypt(password, walletJson.address)
if (validateQrlAddress.hexString(address).result) {
isValidFile = true
} else {
this.log(`${red('⨉')} Unable to open wallet file: invalid password`)
this.exit(1)
}
}
} catch (error) {
this.exit(1)
}
}
if (isValidFile === false) {
this.log(`${red('⨉')} Invalid QRL address/wallet file`)
this.exit(1)
}
}
this.log(white().bgBlack(address))
this.log(qrcode.generate(address))
}
}
Receive.description = `Displays a QR code of the QRL address to receive a transaction
...
TODO
`
Receive.args = [
{
name: 'address',
description: 'address to display QR code for',
required: true,
},
]
Receive.flags = {
password: flags.string({char: 'p', required: false, description: 'wallet file password'}),
}
module.exports = {Receive}