arnaucube
arnaucube/commonroutesServerPublic Self-hosted repository
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};