commonroutesServer/controllers/adminController.js
controllers/adminController.jsRaw
1var config = require('../config');
2var pageSize = config.pageSize;
3
4var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens
5var express = require("express");
6var app = express();
7app.set('superSecret', config.secret); // secret variable
8var crypto = require('crypto');
9var request = require('request');
10
11//data models
12var mongoose = require('mongoose');
13var adminModel = mongoose.model('adminModel');
14var userModel = mongoose.model('userModel');
15var userController = require('../controllers/userController');
16var notificationModel = mongoose.model('notificationModel');
17var travelModel = mongoose.model('travelModel');
18var travelCtrl = require('../controllers/travelController');
19
20//POST - Insert a new User in the DB
21/*exports.signup = function(req, res) {
22
23
24 var admin = new adminModel({
25 username: req.body.username,
26 password: crypto.createHash('sha256').update(req.body.password).digest('base64'),
27 email: req.body.email,
28 phone: req.body.phone,
29 telegram: req.body.telegram
30 });
31 if (admin.username == undefined) {
32 return res.status(500).jsonp("empty inputs");
33 } else if (admin.password == undefined) {
34 return res.status(500).jsonp("empty inputs");
35 } else if (admin.email == undefined) {
36 return res.status(500).jsonp("empty inputs");
37 }
38 adminPasswordGetted = crypto.createHash('sha256').update(req.body.adminPassword).digest('base64');
39 console.log(adminPasswordGetted);
40 console.log(adminConfig.passwordHash);
41 if (adminPasswordGetted != adminConfig.passwordHash) {
42 return res.status(500).jsonp("admin password not valid");
43 }
44 admin.save(function(err, admin) {
45 if (err) return res.send(500, err.message);
46
47 exports.login(req, res);
48 });
49};*/
50
51
52//POST - auth user
53exports.login = function(req, res) {
54 // find the user
55 adminModel.findOne({
56 username: req.body.username
57 })
58 .select('+password')
59 .exec(function(err, user) {
60
61 if (err) throw err;
62
63 if (!user) {
64 res.json({
65 success: false,
66 message: 'Authentication failed. User not found.'
67 });
68 } else if (user) {
69
70 req.body.password = crypto.createHash('sha256').update(req.body.password).digest('base64');
71
72 // check if password matches
73 if (user.password != req.body.password) {
74 res.json({
75 success: false,
76 message: 'Authentication failed. Wrong password.'
77 });
78 } else {
79
80 // if user is found and password is right
81 // create a token
82 var token = jwt.sign({
83 foo: 'bar'
84 }, app.get('superSecret'), {
85 //expiresInMinutes: 1440 // expires in 24 hours
86 //expiresIn: '60m'
87 });
88 user.token = token;
89 user.save(function(err, user) {
90 if (err) return res.send(500, err.message);
91 //res.status(200).jsonp(travel);
92 console.log(user);
93 // return the information including token as JSON
94 user.password = "";
95 res.json({
96 success: true,
97 message: 'Enjoy your token!',
98 token: token,
99 user: user
100 });
101 });
102
103 }
104
105 }
106
107 });
108};
109exports.getAllAdmins = function(req, res) {
110 adminModel.find()
111 .limit(pageSize)
112 .skip(pageSize * Number(req.query.page))
113 .exec(function(err, admins) {
114 if (err) return res.send(500, err.message);
115 res.status(200).jsonp(admins);
116 });
117};
118exports.changePassword = function(req, res) {
119 //if(req.body.)
120 userModel.update({
121 'token': req.headers['x-access-token']
122 }, req.body,
123 function(err) {
124 if (err) return console.log(err);
125 exports.getUserByToken(req, res);
126 });
127};
128
129
130exports.deleteTravel = function(req, res) {
131 adminModel.findOne({
132 'token': req.headers['x-access-token']
133 })
134 .exec(function(err, admin) {
135 if (!admin) {
136 res.json({
137 success: false,
138 message: 'Admin not found'
139 });
140 } else if (admin) {
141 if (err) return res.send(500, err.message);
142 travelModel.findById(req.params.travelid, function(err, travel) {
143 if (err) return res.send(500, err.message);
144
145 //add notification to the user who has created the travel
146 userModel.findOne({
147 _id: travel.user
148 })
149 .exec(function(err, user) {
150 if (err) return res.send(500, err.message);
151 if (!user) {
152 //console.log("Notification not posible, user owner of the travel not exist");
153 } else if (user) {
154 var notification = new notificationModel({
155 concept: "admin",
156 message: "an admin has deleted your travel: " + travel.title,
157 date: new Date(),
158 icon: 'admin',
159 link: "users/" + user._id,
160 user: user._id
161 });
162 notification.save(function(err, notification) {
163 if (err) return res.send(500, err.message);
164
165 user.notifications.push(notification._id);
166 user.save(function(err, user) {
167 if (err) return res.send(500, err.message);
168
169 //notification added to user
170 });
171 });
172 }
173 });
174 travel.remove(function(err) {
175 if (err) return res.send(500, err.message);
176
177 travelCtrl.getAllTravels(req, res);
178 });
179 });
180 }
181 });
182};
183
184exports.deleteUser = function(req, res) {
185 adminModel.findOne({
186 'token': req.headers['x-access-token']
187 })
188 .exec(function(err, admin) {
189 if (!admin) {
190 res.json({
191 success: false,
192 message: 'Admin not found'
193 });
194 } else if (admin) {
195 if (err) return res.send(500, err.message);
196 userModel.findOne({
197 _id: req.params.userid
198 })
199 .exec(function(err, user) {
200 if (err) return res.send(500, err.message);
201 if (!user) {
202 res.json({
203 success: false,
204 message: 'Delete user not posible, user not exist'
205 });
206 } else if (user) {
207 //delete all the travels of this user
208 travelModel.find({
209 user: user._id
210 }).remove().exec(function(err, data) {});
211
212 //delete all the comments of this user
213
214 //now delete user
215 user.remove(function(err) {
216 if (err) return res.send(500, err.message);
217
218 res.status(200).jsonp("deleted");
219 });
220 }
221 });
222 }
223 });
224};
225
226function isNodeInNodes(node, nodes) {
227 for (var i = 0; i < nodes.length; i++) {
228 if (node.title == nodes[i].title) {
229 return (i);
230 }
231 }
232 return (-1);
233}
234exports.network = function(req, res) {
235 adminModel.findOne({
236 'token': req.headers['x-access-token']
237 })
238 .exec(function(err, admin) {
239 if (!admin) {
240 res.json({
241 success: false,
242 message: 'Admin not found'
243 });
244 } else if (admin) {
245 if (err) return res.send(500, err.message);
246 userModel.find()
247 .limit(pageSize)
248 .skip(pageSize * Number(req.query.page))
249 .lean()
250 //.populate({path: 'travels', populate: {path: 'joins', populate: {path: 'username'}}})
251 .populate('travels', 'title type joins')
252 .populate('likes', 'username avatar')
253 .exec(function(err, users) {
254 if (err) return res.send(500, err.message);
255
256 /*res.status(200).jsonp(users);*/
257 var nodes = [];
258 var edges = [];
259 for (var i = 0; i < users.length; i++) {
260 var node = {
261 title: users[i].username,
262 label: users[i].username,
263 image: users[i].avatar,
264 shape: "image",
265 id: users[i]._id,
266 group: users[i]._id
267 };
268 var lNode = isNodeInNodes(node, nodes);
269 if (lNode < 0) {
270 nodes.push(node);
271 var uNode = nodes.length - 1;
272 }
273 for (var j = 0; j < users[i].likes.length; j++) {
274 /*console.log(i + ", " + j);
275 console.log(nodes);*/
276 var node = {
277 title: users[i].likes[j].username,
278 label: users[i].likes[j].username,
279 image: users[i].likes[j].avatar,
280 shape: "image",
281 id: users[i].likes[j]._id
282 };
283 var lNode = isNodeInNodes(node, nodes);
284 if (lNode < 0) {
285 //node no exist
286 nodes.push(node);
287 lNode = nodes.length - 1;
288 } else {
289 //node already exist
290
291 }
292 var edge = {
293 from: users[i]._id,
294 to: users[i].likes[j]._id,
295 label: "like",
296 arrows: "to",
297 color: {
298 color: "#E57373" //red300
299 }
300 };
301 edges.push(edge);
302 }
303 for (var j = 0; j < users[i].travels.length; j++) {
304 /*console.log(i + ", " + j);
305 console.log(nodes);*/
306 var node = {
307 title: users[i].travels[j].title,
308 label: users[i].travels[j].title,
309 image: "img/" + users[i].travels[j].type + ".png",
310 shape: "image",
311 id: users[i].travels[j]._id,
312 value: "0.5",
313 group: users[i]._id
314 };
315 var lNode = isNodeInNodes(node, nodes);
316 if (lNode < 0) {
317 //node no exist
318 nodes.push(node);
319 lNode = nodes.length - 1;
320 } else {
321 //node already exist
322
323 }
324 var edge = {
325 from: users[i]._id,
326 to: users[i].travels[j]._id,
327 color: {
328 color: "#616161" //grey
329 }
330 };
331 edges.push(edge);
332
333 //users joining travels
334 /*for(var k=0; k<users[i].travels[j].joins.length; k++){
335 var node = {
336 title: users[i].travels[j].joins[k].username,
337 label: users[i].travels[j].joins[k].username,
338 image: users[i].travels[j].joins[k].avatar,
339 shape: "image",
340 id: users[i].travels[j].joins[k]._id
341 };
342 var lNode = isNodeInNodes(node, nodes);
343 if (lNode<0){
344 //node no exist
345 nodes.push(node);
346 lNode = nodes.length -1;
347 }
348 var edge={
349 from: users[i].travels[j].joins[k]._id,
350 to: users[i].travels[j]._id,
351 color: {
352 color: "#4DD0E1"//cyan300
353 }
354 };
355 edges.push(edge);
356 }*/
357 }
358
359 }
360 var resp = {
361 nodes: nodes,
362 edges: edges
363 };
364 res.status(200).jsonp(resp);
365 });
366 }
367 });
368};
369exports.getUserNetwork = function(req, res) {
370 adminModel.findOne({
371 'token': req.headers['x-access-token']
372 })
373 .exec(function(err, admin) {
374 if (!admin) {
375 res.json({
376 success: false,
377 message: 'Admin not found'
378 });
379 } else if (admin) {
380 if (err) return res.send(500, err.message);
381 userModel.findOne({
382 _id: req.params.userid
383 })
384 .lean()
385 .populate('travels', 'title type joins')
386 .populate('likes', 'username avatar')
387 .exec(function(err, user) {
388 if (err) return res.send(500, err.message);
389
390 /*res.status(200).jsonp(users);*/
391 var nodes = [];
392 var edges = [];
393 //for (var i = 0; i < users.length; i++) {
394 var node = {
395 title: user.username,
396 label: user.username,
397 image: user.avatar,
398 shape: "image",
399 id: user._id,
400 group: user._id
401 };
402 var lNode = isNodeInNodes(node, nodes);
403 if (lNode < 0) {
404 nodes.push(node);
405 var uNode = nodes.length - 1;
406 }
407 for (var j = 0; j < user.likes.length; j++) {
408 /*console.log(i + ", " + j);
409 console.log(nodes);*/
410 var node = {
411 title: user.likes[j].username,
412 label: user.likes[j].username,
413 image: user.likes[j].avatar,
414 shape: "image",
415 id: user.likes[j]._id
416 };
417 var lNode = isNodeInNodes(node, nodes);
418 if (lNode < 0) {
419 //node no exist
420 nodes.push(node);
421 lNode = nodes.length - 1;
422 } else {
423 //node already exist
424
425 }
426 var edge = {
427 from: user._id,
428 to: user.likes[j]._id,
429 label: "like",
430 arrows: "to",
431 color: {
432 color: "#E57373" //red300
433 }
434 };
435 edges.push(edge);
436 }
437 for (var j = 0; j < user.travels.length; j++) {
438 /*console.log(i + ", " + j);
439 console.log(nodes);*/
440 var node = {
441 title: user.travels[j].title,
442 label: user.travels[j].title,
443 image: "img/" + user.travels[j].type + ".png",
444 shape: "image",
445 id: user.travels[j]._id,
446 value: "0.5",
447 group: user._id
448 };
449 var lNode = isNodeInNodes(node, nodes);
450 if (lNode < 0) {
451 //node no exist
452 nodes.push(node);
453 lNode = nodes.length - 1;
454 } else {
455 //node already exist
456
457 }
458 var edge = {
459 from: user._id,
460 to: user.travels[j]._id,
461 color: {
462 color: "#616161" //grey
463 }
464 };
465 edges.push(edge);
466 }
467 //add users that has add like to the user
468 userModel.find({
469 likes: req.params.userid
470 })
471 .exec(function(err, users) {
472 for (var i = 0; i < users.length; i++) {
473 /*console.log(i + ", " + j);
474 console.log(nodes);*/
475 var node = {
476 title: users[i].username,
477 label: users[i].username,
478 image: users[i].avatar,
479 shape: "image",
480 id: users[i]._id
481 };
482 var lNode = isNodeInNodes(node, nodes);
483 if (lNode < 0) {
484 //node no exist
485 nodes.push(node);
486 lNode = nodes.length - 1;
487 } else {
488 //node already exist
489
490 }
491 var edge = {
492 from: users[i]._id,
493 to: req.params.userid,
494 label: "like",
495 arrows: "to",
496 color: {
497 color: "#E57373" //red300
498 }
499 };
500 edges.push(edge);
501 }
502
503 var resp = {
504 nodes: nodes,
505 edges: edges
506 };
507 res.status(200).jsonp(resp);
508 });
509
510 //}
511
512 });
513 }
514 });
515};
516
517
518// user validation
519exports.validateUser = function(req, res) {
520 adminModel.findOne({
521 'token': req.headers['x-access-token']
522 })
523 .exec(function(err, admin) {
524 if (!admin) {
525 res.json({
526 success: false,
527 message: 'Admin not found'
528 });
529 } else if (admin) {
530 if (err) return res.send(500, err.message);
531 userModel.findOne({
532 _id: req.params.userid
533 })
534 .exec(function(err, user) {
535 if (err) return res.send(500, err.message);
536 user.validated = true;
537 user.validatedBy = admin._id;
538
539 var notification = new notificationModel({
540 concept: "admin",
541 message: "an admin has validated your account",
542 date: new Date(),
543 icon: 'admin',
544 link: "users/" + user._id,
545 user: user._id
546 });
547 notification.save(function(err, notification) {
548 if (err) return res.send(500, err.message);
549
550 user.notifications.push(notification._id);
551 user.save(function(err, user) {
552 if (err) return res.send(500, err.message);
553 userController.getUserById(req, res);
554 });
555 });
556 });
557 }
558 });
559};
560// user unvalidate
561exports.unvalidateUser = function(req, res) {
562 adminModel.findOne({
563 'token': req.headers['x-access-token']
564 })
565 .exec(function(err, admin) {
566 if (!admin) {
567 res.json({
568 success: false,
569 message: 'Admin not found'
570 });
571 } else if (admin) {
572 if (err) return res.send(500, err.message);
573 userModel.findOne({
574 _id: req.params.userid
575 })
576 .exec(function(err, user) {
577 if (err) return res.send(500, err.message);
578 user.validated = false;
579 user.validatedBy = admin._id;
580
581 var notification = new notificationModel({
582 concept: "admin",
583 message: "an admin has unvalidated your account",
584 date: new Date(),
585 icon: 'admin',
586 link: "users/" + user._id,
587 user: user._id
588 });
589 notification.save(function(err, notification) {
590 if (err) return res.send(500, err.message);
591
592 user.notifications.push(notification._id);
593 user.save(function(err, user) {
594 if (err) return res.send(500, err.message);
595 userController.getUserById(req, res);
596 });
597 });
598
599 });
600 }
601 });
602};