173 lines
4.5 KiB
JavaScript
173 lines
4.5 KiB
JavaScript
module.exports = function (app) {
|
|
var web3 = app.web3;
|
|
var generateError = app.generateError;
|
|
|
|
var contract;
|
|
app.attachToContract = attachToContract;
|
|
|
|
var contractABI = app.config.smartContract.abi;
|
|
|
|
function attachToContract(cb) {
|
|
if(!web3.isConnected()) {
|
|
if (cb) cb({code: 200, title: "Error", message: "check RPC"}, null);
|
|
return;
|
|
}
|
|
|
|
console.log(web3.eth.accounts);
|
|
web3.eth.defaultAccount = web3.eth.accounts[0];
|
|
console.log("web3.eth.defaultAccount:");
|
|
console.log(web3.eth.defaultAccount);
|
|
|
|
var MyContract = web3.eth.contract(contractABI);
|
|
contract = MyContract.at(app.contractAddress);
|
|
|
|
if (cb) cb(null, contract);
|
|
}
|
|
|
|
function newPhoneToAddr(wallet, phone, cb) {
|
|
if(!web3.isConnected()) {
|
|
if (cb) cb({code: 500, title: "Error", message: "check RPC"}, null);
|
|
return;
|
|
}
|
|
|
|
contract.newPhoneToAddr.sendTransaction(wallet, phone, {gas: 100000, from: web3.eth.defaultAccount}, function(err, result) {
|
|
cb(err, result);
|
|
});
|
|
}
|
|
|
|
app.post('/newPhoneToAddr', function(request, response) {
|
|
var globalToken = request.body.globalToken;
|
|
|
|
if (globalToken != app.config.globalToken) {
|
|
generateError(response, 401, "Unauthorized", "Wrong app token");
|
|
return;
|
|
}
|
|
|
|
var phone = parseInt(request.body.phone);
|
|
var wallet = request.body.wallet;
|
|
var code = request.body.code;
|
|
console.log(wallet);
|
|
console.log(request.body.wallet);
|
|
var isHex = /^0x[0-9A-Fa-f]{40}$/i.test(wallet);
|
|
|
|
if (!isHex) {
|
|
generateError(response, 500, "Error", "Not valid address");
|
|
return;
|
|
}
|
|
|
|
if (!contract) {
|
|
generateError(response, 500, "Error", "RPC doesn't work");
|
|
return;
|
|
}
|
|
|
|
contract.getPaymentByAddress.call(wallet, function(err, val) {
|
|
console.log("err:");
|
|
console.log(err);
|
|
console.log("val:");
|
|
console.log(val);
|
|
|
|
if (val <= 0) {
|
|
generateError(response, 1000, "Warning", "Payment wasn't sent yet");
|
|
return;
|
|
}
|
|
|
|
contract.getPaymentDataByAddress.call(wallet, function(err, paymentData) {
|
|
console.log("err:");
|
|
console.log(err);
|
|
console.log("paymentData:");
|
|
console.log(paymentData);
|
|
|
|
|
|
var hash = app.crypto.createHmac('sha256', app.config.salt)
|
|
.update(code)
|
|
.digest('hex');
|
|
|
|
console.log("hash:");
|
|
console.log(hash);
|
|
|
|
//var hashBuf = new Buffer(hash, 'binary').toString('hex');
|
|
//console.log("hashBuf:");
|
|
//console.log(hashBuf.toString());
|
|
|
|
console.log(paymentData.substring(2) + " == " + hash);
|
|
if (paymentData.substring(2) != hash) {
|
|
generateError(response, 1000, "Warning", "Sent message doesn't match with the one displayed on the page");
|
|
return;
|
|
}
|
|
|
|
newPhoneToAddr(wallet, phone, function(err, result) {
|
|
console.log(err);
|
|
console.log(result);
|
|
response.send({
|
|
success : {
|
|
code : 200,
|
|
title : "Success",
|
|
message : "Phone successfully joined"
|
|
}
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
app.post('/getPhoneByAddress', function(request, response) {
|
|
var globalToken = request.body.globalToken;
|
|
if (globalToken != app.config.globalToken) {
|
|
generateError(response, 401, "Unauthorized", "Wrong app token");
|
|
return;
|
|
}
|
|
|
|
var wallet = request.body.wallet;
|
|
var isHex = /^0x[0-9A-Fa-f]{40}$/i.test(wallet);
|
|
if (!isHex) {
|
|
generateError(response, 500, "Error", "Not valid address");
|
|
return;
|
|
}
|
|
|
|
if (!contract) {
|
|
generateError(response, 500, "Error", "RPC doesn't work");
|
|
return;
|
|
}
|
|
|
|
var phone = contract.getPhoneByAddress.call(wallet, function(err, obj) {
|
|
console.log("err:");
|
|
console.log(err);
|
|
console.log("obj:");
|
|
console.log(obj);
|
|
response.send({
|
|
success : {
|
|
code : 200,
|
|
title : "Success",
|
|
message : "Phone successfully joined",
|
|
phone: obj
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
app.post('/getAddressByPhone', function(request, response) {
|
|
var globalToken = request.body.globalToken;
|
|
if (globalToken != app.config.globalToken) {
|
|
generateError(response, 401, "Unauthorized", "Wrong app token");
|
|
return;
|
|
}
|
|
|
|
if (!contract) {
|
|
generateError(response, 500, "Error", "RPC doesn't work");
|
|
return;
|
|
}
|
|
|
|
var phone = parseInt(request.body.phone);
|
|
var address = contract.phones.call(phone, function(err, address) {
|
|
console.log(address);
|
|
response.send({
|
|
success : {
|
|
code : 200,
|
|
title : "Success",
|
|
message : "Phone successfully joined",
|
|
addr: address
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}; |