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