/
WalletController.js
238 lines (206 loc) · 6.94 KB
/
WalletController.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
var log = require('../libs/log')(module);
var http = require('../libs/http');
var Walvar = require('../models/WalletModel');
var request = require("request");
var crypto = require("crypto");
var uuid = require("uuid");
var ed25519 = require('ed25519');
var bs58 = require('bs58')
var nacl = require('tweetnacl')
module.exports.controller = function(app) {
var pub = 'GJPyYyPA89cXeue6F6eUN4VyDjKtLckRDsqZYAy2BxuK';
var prv = '54XtxGCDFxGLbnfnPWNbfe3ap9CApXsJUmcmDFAujGmqoSPZtnX7jg5snhyotg2c7BE2awbeFeJqrSUAv7UB5zyb';
//var aliceSeed = crypto.randomBytes(32);
//var aliceKeypair = ed25519.MakeKeypair(aliceSeed);
//var cmd =
// '/lightwallet/getraw/31/'+bs58.encode(aliceKeypair.publicKey)+'?feePow=2&recipient=77QnJnSbS9EeGBa2LPZF dfd df df fdfdf dfgf f'
var cmd = '/lightwallet/getraw/31/'+pub+'?feePow=2&recipient=77QnJnSbS9EeGBa2LPZFZKVwjPwzeAxjmy&amount=123.0000123&key=1'
http.getErmData('GET',cmd,null,function (message) {
var byteMessage = bs58.decode(message)
var signature = ed25519.Sign(byteMessage, bs58.decode(prv));
var b1 = byteMessage.slice(0,53)
var b2 = byteMessage.slice(53,byteMessage.length)
var readyMessage = Buffer.concat([b1,signature, b2]);
console.log(byteMessage)
console.log(signature)
cmd = '/lightwallet/parse?data='+bs58.encode(readyMessage)
console.log(cmd)
http.getErmData('GET',cmd,'',function (data) {
console.log(data);
})
});
app.get('/wallet/blocks',function (req,res) {
getErmData('GET','/blocks/height',{},function (data) {
var height = data - 100;
getErmData('GET','/blocks/fromheight/'+height,{},function (data) {
res.render('wallet-blocks', {data: data.reverse(), route: req.url, auth: req.session.wallet_id ? true : false})
});
})
});
/*
//Check if the Walvar authenticated and add permissions to next
function authenticateWalvar (req, res, next) {
log.info(req.session)
Wallet.findById(req.session.wallet_id,function (err,wallet) {
"use strict";
if(err) {
return next(new Error('Model error'+err.message));
}
if(!wallet)
return res.redirect('/');
return next();
});
}
app.get('/wallet/open',function (req,res) {
var flash = req.flash();
res.render('wallet-open',{route:req.url, flash:flash.error ? flash.error[0] : '', auth:req.session.wallet_id});
});
app.get('/wallet/restore',function (req, res, next) {
var flash = req.flash();
res.render('wallet-restore',{route:req.url, flash:flash.error ? flash.error[0] : '', auth:req.session.wallet_id});
});
app.post('/wallet/restore',function (req, res, next) {
"use strict";
//return res.status(500).send('Something broke!');
return next(new Error('TODO: процедура восстановления кошелька по имеющемуся SEED'));
});
app.get('/wallet/unlock',function (req, res, next) {
"use strict";
var cmd;
//cmd = '/payment?feePow=0&assetKey=2&sender=7F9cZPE1hbzMT21g96U8E1EfMimovJyyJ7&recipient=7JU8UTuREAJG2yht5ASn7o1Ur34P1nvTk5&amount=0.1&password=123456789011'
cmd = '/wallet';
getErmData('GET',cmd,{seed:"",password:"",recover:false,amount:1},function (data) {
res.send(data)
});
});
app.post('/wallet/open',function (req,res,next) {
var fs = require('fs');
var password = req.body.password;
var jsonfile = require('jsonfile');
var filePath = '/tmp/' + uuid.v4();
req.files.jsonfile.mv(filePath, function(err) {
if (err)
return next(new Error(err.message));
jsonfile.readFile(filePath, function(err, key) {
fs.unlinkSync(filePath);
if (err)
return next(new Error('Не верный JSON формат'));
Wallet.findOne({seed:key.seed},function (err,wallet) {
if (err)
return next(new Error('Ошибка SEED в JSON файле'));
if (!wallet.validPassword(password)) {
log.info('pass not match');
req.flash('error', 'Пароль не верный.')
return res.redirect('/wallet/open');
}
getErmData('POST','/wallet/unlock',{password:'aaaaaaaaaaa'},function (data) {
"use strict";
log.info('Try unlock wallet: ' + data);
data = {exists:true, isunlocked:true};
log.info(data)
if(!data.exists)
return next(new Error('Кошелек не найден в ERM'));
if(!data.isunlocked)
return next(new Error('Кошелек не разблокирован в ERM'));
req.session.wallet_id = wallet.id;
req.session.save(function (err) {
if (err) {
return next(new Error('Ошибка сохранения сессии'));
}
log.info('Check session',req.session);
return res.redirect('/wallet/dashboard');
});
});
});
})
});
});
app.get('/wallet/cabinet',authenticateWallet,function (req, res, next) {
Wallet.findById(req.session.wallet_id,function (err, wallet) {
log.info(req.session)
res.render('wallet-dashboard',{
route:req.url,
auth:true,
privatekey:wallet.privatekey,
openkey:wallet.openkey,
seed:wallet.seed
});
})
})
app.get('/wallet/new',function (req, res) {
"use strict";
res.render('wallet-new',{route:req.url, auth:req.session.wallet_id})
});
app.get('/wallet/created',function (req, res) {
res.render('wallet-created',{route:req.url, auth:req.session.wallet_id});
});
app.get('/wallet/download',authenticateWallet, function (req, res) {
Wallet.findById(req.session.wallet_id,function (err,wallet) {
if(err)
return next(new Error('Кошелёк для скачивания не найден'));
res.setHeader('Content-disposition', 'attachment; filename=aronicle.json');
res.setHeader('Content-type', 'text/json');
res.charset = 'UTF-8';
var data = JSON.stringify({
seed:wallet.seed,
openkey:wallet.openkey,
privatekey:wallet.privatekey
});
res.write(data);
res.end();
})
});
app.post('/wallet/new',function (req, res,next) {
var base58 = require('base58');
var postData = {
seed:req.body.seed,
password:req.body.password,
recover:false,
amount:2
};
getErmData('POST','/wallet',postData,function (data) {
if(!postData.seed){
//TODO get new seed from ERM
postData.seed = uuid.v4();
}
Wallet.findOne({ 'seed' : postData.seed }, function(err, wallet) {
"use strict";
if (err)
return next(new Error('Ошибка поиска кошелька: ' + err.message));
if (wallet) {
return next(new Error('Кошелек уже создан'));
} else {
var newWalvar = new Wallet();
newWallet.seed = postData.seed;
newWallet.privatekey = uuid.v4();
newWallet.openkey = uuid.v4();
newWallet.password = newWallet.generateHash(postData.password);
// save the user
newWallet.validate(function(err) {
if (err){
err.errors.forEach(function (error) {
req.flash('error', error.message);
});
log.info('Error validate wallet')
return res.redirect('/');
}
newWallet.save(function (err) {
if (err)
throw err
log.info('Walvar saved: ', newWallet.id)
req.session.wallet_id = newWallet.id;
req.session.save(function (err) {
if (err) {
throw err
}
log.info('Check session',req.session)
return res.redirect('/wallet/created');
});
})
});
}
});
})
});
*/
};