-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrestServer.js
125 lines (100 loc) · 3.54 KB
/
restServer.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
const express = require('express'),
app = express(),
port = process.env.PORT || 4000,
mongoose = require('mongoose'),
Register = require('./api/models/registerListModel'), //created model loading here
bodyParser = require('body-parser');
let http = require('http');
let request = require('request');
// mongoose instance connection url connection
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost:27017/Users');
//
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var Schema = mongoose.Schema;
var userSchema = new Schema({
userName: String,
privateKey: String
})
var userMongo = mongoose.model("userMongo", userSchema);
/**
* Route from the client to add a new user and creates the values to POST into blockchain core server
*/
app.post('/api/addUser', function (req, res) {
userMongo.findOne({ 'userName': req.body.username }, function (err, user) {
if (err) return handleError(err);
if (user != null) {
res.sendStatus(409)
return
}
const pairKeys = require('./security/genPairKeys');
let hashname = genUsernameHash(req.body.username);
let keyPair = pairKeys.generatePairKeys(hashname);
let base64data = keyPair.signature.toString('base64');
let data = {
"usernameHash": hashname,
"publicKey": keyPair.publicKey,
"signedHash": base64data
}
var saveUser = new userMongo({
userName: req.body.username,
privateKey: keyPair.privateKey
})
request.post({
headers: { 'content-type': 'application/json' },
url: 'http://localhost:3003/api/addUser',
form: data
}, function (error, response, body) {
//console.log(response);
if (response.statusCode == 200) {
//success save user in db
saveUser.save(function (err) {
if (err) {
console.error("error when saving user")
}
console.log("user saved")
})
res.send({ "publicKey": keyPair.publicKey, "blockchain": response.body });
} else {
res.sendStatus(500);
}
});
});
});
// TODO: This is only for the showcase, this method has to be validate with privatekey and signe
// And the connection to the blockchain_core
app.post('/api/identify', function (req, res) {
let username = req.body.username;
let publicKey = req.body.pkey;
//if ((username !== '' && username !== 'undefined' && username !== null) && (publicKey_client !== '' && publicKey_client !== 'undefined' && publicKey_client !== null)) {
if (publicKey.length === 0) {
console.log("false");
//}
res.send(false);
} else {
res.send("true");
}
/*
if ((req.body.publicKey).length == !0) {
let username = req.body.username;
let publicKey_client = req.body.publicKey;
}
console.log("No publicKey defined");
*/
});
// model to store data into database
let routes = require('./api/routes/registerListRoutes'); //importing route
routes(app); //register the route
// Server port
app.listen(port);
// welcome display
console.log('RESTful API server started on: ' + port);
/**
* Generates a SHA-256 hash from the name user
* @param {string} value
*/
function genUsernameHash(value) {
let hash = require('crypto').createHash('sha256').update(value).digest('hex');
return hash;
}