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