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.changePassword = function(req, res) {
117 //if(req.body.)
118 userModel.update({
119 'token': req.headers['x-access-token']
120 }, req.body,
121 function(err) {
122 if (err) return console.log(err);
123 exports.getUserByToken(req, res);
124 });
125};
126
127
128exports.deleteTravel = function(req, res) {
129 adminModel.findOne({
130 'token': req.headers['x-access-token']
131 })
132 .exec(function(err, admin) {
133 if (!admin) {
134 res.json({
135 success: false,
136 message: 'Admin not found'
137 });
138 } else if (admin) {
139 if (err) return res.send(500, err.message);
140 travelModel.findById(req.params.travelid, function(err, travel) {
141 if (err) return res.send(500, err.message);
142
143 //add notification to the user who has created the travel
144 userModel.findOne({
145 _id: travel.user
146 })
147 .exec(function(err, user) {
148 if (err) return res.send(500, err.message);
149 if (!user) {
150 //console.log("Notification not posible, user owner of the travel not exist");
151 } else if (user) {
152 var notification = new notificationModel({
153 concept: "admin",
154 message: "an admin has deleted your travel: " + travel.title,
155 date: new Date(),
156 icon: 'admin',
157 link: "users/" + user._id,
158 user: user._id
159 });
160 notification.save(function(err, notification) {
161 if (err) return res.send(500, err.message);
162
163 user.notifications.push(notification._id);
164 user.save(function(err, user) {
165 if (err) return res.send(500, err.message);
166
167 //notification added to user
168 });
169 });
170 }
171 });
172 travel.remove(function(err) {
173 if (err) return res.send(500, err.message);
174
175 travelCtrl.getAllTravels(req, res);
176 });
177 });
178 }
179 });
180};
181
182exports.deleteUser = function(req, res) {
183 adminModel.findOne({
184 'token': req.headers['x-access-token']
185 })
186 .exec(function(err, admin) {
187 if (!admin) {
188 res.json({
189 success: false,
190 message: 'Admin not found'
191 });
192 } else if (admin) {
193 if (err) return res.send(500, err.message);
194 userModel.findOne({
195 _id: req.params.userid
196 })
197 .exec(function(err, user) {
198 if (err) return res.send(500, err.message);
199 if (!user) {
200 res.json({
201 success: false,
202 message: 'Delete user not posible, user not exist'
203 });
204 } else if (user) {
205 //delete all the travels of this user
206 travelModel.find({
207 user: user._id
208 }).remove().exec(function(err, data) {});
209
210 //delete all the comments of this user
211
212 //now delete user
213 user.remove(function(err) {
214 if (err) return res.send(500, err.message);
215
216 res.status(200).jsonp("deleted");
217 });
218 }
219 });
220 }
221 });
222};
223
224function isNodeInNodes(node, nodes) {
225 for (var i = 0; i < nodes.length; i++) {
226 if (node.title == nodes[i].title) {
227 return (i);
228 }
229 }
230 return (-1);
231}
232exports.network = function(req, res) {
233 adminModel.findOne({
234 'token': req.headers['x-access-token']
235 })
236 .exec(function(err, admin) {
237 if (!admin) {
238 res.json({
239 success: false,
240 message: 'Admin not found'
241 });
242 } else if (admin) {
243 if (err) return res.send(500, err.message);
244 userModel.find()
245 .limit(pageSize)
246 .skip(pageSize * Number(req.query.page))
247 .lean()
248 //.populate({path: 'travels', populate: {path: 'joins', populate: {path: 'username'}}})
249 .populate('travels', 'title type joins')
250 .populate('likes', 'username avatar')
251 .exec(function(err, users) {
252 if (err) return res.send(500, err.message);
253
254 /*res.status(200).jsonp(users);*/
255 var nodes = [];
256 var edges = [];
257 for (var i = 0; i < users.length; i++) {
258 var node = {
259 title: users[i].username,
260 label: users[i].username,
261 image: users[i].avatar,
262 shape: "image",
263 id: users[i]._id,
264 group: users[i]._id
265 };
266 var lNode = isNodeInNodes(node, nodes);
267 if (lNode < 0) {
268 nodes.push(node);
269 var uNode = nodes.length - 1;
270 }
271 for (var j = 0; j < users[i].likes.length; j++) {
272 /*console.log(i + ", " + j);
273 console.log(nodes);*/
274 var node = {
275 title: users[i].likes[j].username,
276 label: users[i].likes[j].username,
277 image: users[i].likes[j].avatar,
278 shape: "image",
279 id: users[i].likes[j]._id
280 };
281 var lNode = isNodeInNodes(node, nodes);
282 if (lNode < 0) {
283 //node no exist
284 nodes.push(node);
285 lNode = nodes.length - 1;
286 } else {
287 //node already exist
288
289 }
290 var edge = {
291 from: users[i]._id,
292 to: users[i].likes[j]._id,
293 label: "like",
294 arrows: "to",
295 color: {
296 color: "#E57373" //red300
297 }
298 };
299 edges.push(edge);
300 }
301 for (var j = 0; j < users[i].travels.length; j++) {
302 /*console.log(i + ", " + j);
303 console.log(nodes);*/
304 var node = {
305 title: users[i].travels[j].title,
306 label: users[i].travels[j].title,
307 image: "img/" + users[i].travels[j].type + ".png",
308 shape: "image",
309 id: users[i].travels[j]._id,
310 value: "0.5",
311 group: users[i]._id
312 };
313 var lNode = isNodeInNodes(node, nodes);
314 if (lNode < 0) {
315 //node no exist
316 nodes.push(node);
317 lNode = nodes.length - 1;
318 } else {
319 //node already exist
320
321 }
322 var edge = {
323 from: users[i]._id,
324 to: users[i].travels[j]._id,
325 color: {
326 color: "#616161" //grey
327 }
328 };
329 edges.push(edge);
330
331 //users joining travels
332 /*for(var k=0; k<users[i].travels[j].joins.length; k++){
333 var node = {
334 title: users[i].travels[j].joins[k].username,
335 label: users[i].travels[j].joins[k].username,
336 image: users[i].travels[j].joins[k].avatar,
337 shape: "image",
338 id: users[i].travels[j].joins[k]._id
339 };
340 var lNode = isNodeInNodes(node, nodes);
341 if (lNode<0){
342 //node no exist
343 nodes.push(node);
344 lNode = nodes.length -1;
345 }
346 var edge={
347 from: users[i].travels[j].joins[k]._id,
348 to: users[i].travels[j]._id,
349 color: {
350 color: "#4DD0E1"//cyan300
351 }
352 };
353 edges.push(edge);
354 }*/
355 }
356
357 }
358 var resp = {
359 nodes: nodes,
360 edges: edges
361 };
362 res.status(200).jsonp(resp);
363 });
364 }
365 });
366};
367exports.getUserNetwork = function(req, res) {
368 adminModel.findOne({
369 'token': req.headers['x-access-token']
370 })
371 .exec(function(err, admin) {
372 if (!admin) {
373 res.json({
374 success: false,
375 message: 'Admin not found'
376 });
377 } else if (admin) {
378 if (err) return res.send(500, err.message);
379 userModel.findOne({
380 _id: req.params.userid
381 })
382 .lean()
383 .populate('travels', 'title type joins')
384 .populate('likes', 'username avatar')
385 .exec(function(err, user) {
386 if (err) return res.send(500, err.message);
387
388 /*res.status(200).jsonp(users);*/
389 var nodes = [];
390 var edges = [];
391 //for (var i = 0; i < users.length; i++) {
392 var node = {
393 title: user.username,
394 label: user.username,
395 image: user.avatar,
396 shape: "image",
397 id: user._id,
398 group: user._id
399 };
400 var lNode = isNodeInNodes(node, nodes);
401 if (lNode < 0) {
402 nodes.push(node);
403 var uNode = nodes.length - 1;
404 }
405 for (var j = 0; j < user.likes.length; j++) {
406 /*console.log(i + ", " + j);
407 console.log(nodes);*/
408 var node = {
409 title: user.likes[j].username,
410 label: user.likes[j].username,
411 image: user.likes[j].avatar,
412 shape: "image",
413 id: user.likes[j]._id
414 };
415 var lNode = isNodeInNodes(node, nodes);
416 if (lNode < 0) {
417 //node no exist
418 nodes.push(node);
419 lNode = nodes.length - 1;
420 } else {
421 //node already exist
422
423 }
424 var edge = {
425 from: user._id,
426 to: user.likes[j]._id,
427 label: "like",
428 arrows: "to",
429 color: {
430 color: "#E57373" //red300
431 }
432 };
433 edges.push(edge);
434 }
435 for (var j = 0; j < user.travels.length; j++) {
436 /*console.log(i + ", " + j);
437 console.log(nodes);*/
438 var node = {
439 title: user.travels[j].title,
440 label: user.travels[j].title,
441 image: "img/" + user.travels[j].type + ".png",
442 shape: "image",
443 id: user.travels[j]._id,
444 value: "0.5",
445 group: user._id
446 };
447 var lNode = isNodeInNodes(node, nodes);
448 if (lNode < 0) {
449 //node no exist
450 nodes.push(node);
451 lNode = nodes.length - 1;
452 } else {
453 //node already exist
454
455 }
456 var edge = {
457 from: user._id,
458 to: user.travels[j]._id,
459 color: {
460 color: "#616161" //grey
461 }
462 };
463 edges.push(edge);
464 }
465 //add users that has add like to the user
466 userModel.find({
467 likes: req.params.userid
468 })
469 .exec(function(err, users) {
470 for (var i = 0; i < users.length; i++) {
471 /*console.log(i + ", " + j);
472 console.log(nodes);*/
473 var node = {
474 title: users[i].username,
475 label: users[i].username,
476 image: users[i].avatar,
477 shape: "image",
478 id: users[i]._id
479 };
480 var lNode = isNodeInNodes(node, nodes);
481 if (lNode < 0) {
482 //node no exist
483 nodes.push(node);
484 lNode = nodes.length - 1;
485 } else {
486 //node already exist
487
488 }
489 var edge = {
490 from: users[i]._id,
491 to: req.params.userid,
492 label: "like",
493 arrows: "to",
494 color: {
495 color: "#E57373" //red300
496 }
497 };
498 edges.push(edge);
499 }
500
501 var resp = {
502 nodes: nodes,
503 edges: edges
504 };
505 res.status(200).jsonp(resp);
506 });
507
508 //}
509
510 });
511 }
512 });
513};
514
515
516// user validation
517exports.validateUser = function(req, res) {
518 adminModel.findOne({
519 'token': req.headers['x-access-token']
520 })
521 .exec(function(err, admin) {
522 if (!admin) {
523 res.json({
524 success: false,
525 message: 'Admin not found'
526 });
527 } else if (admin) {
528 if (err) return res.send(500, err.message);
529 userModel.findOne({
530 _id: req.params.userid
531 })
532 .exec(function(err, user) {
533 if (err) return res.send(500, err.message);
534 user.validated = true;
535
536 user.save(function(err, user) {
537 if (err) return res.send(500, err.message);
538 userController.getUserById(req, res);
539 });
540 });
541 }
542 });
543};
544// user unvalidate
545exports.unvalidateUser = function(req, res) {
546 adminModel.findOne({
547 'token': req.headers['x-access-token']
548 })
549 .exec(function(err, admin) {
550 if (!admin) {
551 res.json({
552 success: false,
553 message: 'Admin not found'
554 });
555 } else if (admin) {
556 if (err) return res.send(500, err.message);
557 userModel.findOne({
558 _id: req.params.userid
559 })
560 .exec(function(err, user) {
561 if (err) return res.send(500, err.message);
562 user.validated = false;
563
564 user.save(function(err, user) {
565 if (err) return res.send(500, err.message);
566 userController.getUserById(req, res);
567 });
568 });
569 }
570 });
571};