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 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};