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