-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
161 lines (139 loc) · 5.19 KB
/
index.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
// External imports
const app = require('express')();
const fs = require('fs');
// Internal imports
const StructDAO = require('./src/DAOs/StructDAO').StructDAO;
const RegistryDAO = require('./src/DAOs/RegistryDAO').RegistryDAO;
const KeyManager = require('./src/utils/KeyManager').KeyManager;
const ServerManager = require('./src/utils/ServerManager').ServerManager;
// Global declarations
const server = new ServerManager(false, 3443).createServer(app);
// Routing
app.get('/', (req, res) => {
res.sendFile(__dirname+"/welcome.html");
});
app.post('/login', (req, res) => {
logConnection(req);
const user = req.body.user;
const pw = req.body.pw;
console.log("received: ", user, pw)
if(credentials.user === user && credentials.pw === pw){
if(req.body.origin == 'navigator'){
res.redirect("/getstructs?origin=navigator&sessionKey="+KeyManager.genSessionKey());
}else if(req.body.origin == 'ionic'){
res.send({key: KeyManager.genSessionKey()});
}
}
});
app.get('/getstructs', (req, res) => {
const sessionKey = req.query.sessionKey;
const origin = req.query.origin;
if(sessionKey != null && KeyManager.checkSessionKey(sessionKey)){
KeyManager.reset();
const structDAO = new StructDAO();
if(origin == "navigator"){
let responseString = "<ol>";
structDAO.fetchAll().then( data => {
data.map( (val,index) => {
const key = KeyManager.genKey(val); // generamos y metemos las claves en el html
responseString += "<a href=getStruct?key="+key+"><li> - "+val.name+" => "+val.description+"</li></a>"
});
responseString += "</ol>";
KeyManager.emitKeys(); // emitimos las claves y hacemos que sólo se puedan usar durante un tiempo
res.send(responseString);
});
}else if(origin == "ionic"){
structDAO.fetchAll().then( data => {
data.map( (val,index) => {
val.datasets = null;
val.key = KeyManager.genKey(val); // generamos y metemos las claves en el html
});
KeyManager.emitKeys(); // emitimos las claves y hacemos que sólo se puedan usar durante un tiempo
res.send(data);
});
}
}
});
app.get('/getstruct', (req, res) => {
let key = req.query.key;
const structId = KeyManager.check(key);
if(structId){
KeyManager.reset();
const structDAO = new StructDAO();
const registryDAO = new RegistryDAO();
structDAO.getStruct(structId)
.then(struct => {
registryDAO.fetchForStruct(structId, 0).then( registries => {
if(registries){
res.send({struct: struct, data: registries});
}else{
res.send({struct: struct, data: "empty"});
}
}).catch( err => {
res.send({struct: struct, err: err});
});
}).catch( err => res.send({err: err}));
}else{ // nos han enviado una clave inválida
res.send("ERROR: Has enviado una clave incorrecta");
}
});
/* TODO
app.get("/getregistries", (req, res) => {
let struct = req.query.struct;
let page = req.query.page | 0;
});
*/
app.post("/insertregistry", (req, res) => {
const structId = req.body.id;
const results = req.body.results;
const isValid = validate(structId, results).then( isValid => {
if(isValid==true){
const registryDAO = new RegistryDAO();
console.log("Inserting...")
registryDAO.insert(structId, results).then( r => {
if(r == true){
res.send('{"status":"success"}');
}
});
}
});
});
function validate(structId, results){
return new Promise( (resolve, reject) => {
const structDAO = new StructDAO();
structDAO.getStruct(structId).then ( struct => {
let count = 0;
struct.datasets.map(dataset => {
let value = results[dataset.varName];
switch(dataset.type){
case "number":
if(!isNaN(value)) count++;
case "text":
if(isNaN(value)) count++;
}
});
if(count == struct.datasets.length){
resolve(true)
}else{
resolve(false);
}
}).catch(err => console.log("ERR: ", err));
});
}
function logConnection(req){
const ip = req.ip;
const ips = req.ips;
const wasXhr = req.xhr;
let logString = ">> ["+new Date().toLocaleDateString()+"] => IP: +"+ip+" // ";
if(wasXhr){
logString += "Ajax/XMLHttpRequest";
}else{
logString += "Normal HTTP request";
}
logString += "\n";
fs.appendFile(__dirname+"/logs/connection_logs.txt", logString);
}
const credentials = {
user: "Zerok",
pw: "123asd"
}