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 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                                    arrows: "to",
292                                    color: {
293                                        color: "#E57373" //red300
294                                    }
295                                };
296                                edges.push(edge);
297                            }
298                            for (var j = 0; j < users[i].travels.length; j++) {
299                                /*console.log(i + ", " + j);
300                                console.log(nodes);*/
301                                var node = {
302                                    title: users[i].travels[j].title,
303                                    label: users[i].travels[j].title,
304                                    image: "img/" + users[i].travels[j].type + ".png",
305                                    shape: "image",
306                                    id: users[i].travels[j]._id,
307                                    value: "0.5",
308                                    group: users[i]._id
309                                };
310                                var lNode = isNodeInNodes(node, nodes);
311                                if (lNode < 0) {
312                                    //node no exist
313                                    nodes.push(node);
314                                    lNode = nodes.length - 1;
315                                } else {
316                                    //node already exist
317
318                                }
319                                var edge = {
320                                    from: users[i]._id,
321                                    to: users[i].travels[j]._id
322                                };
323                                edges.push(edge);
324
325                                //users joining travels
326                                /*for(var k=0; k<users[i].travels[j].joins.length; k++){
327                                    var node = {
328                                        title: users[i].travels[j].joins[k].username,
329                                        label: users[i].travels[j].joins[k].username,
330                                        image: users[i].travels[j].joins[k].avatar,
331                                        shape: "image",
332                                        id: users[i].travels[j].joins[k]._id
333                                    };
334                                    var lNode = isNodeInNodes(node, nodes);
335                                    if (lNode<0){
336                                        //node no exist
337                                        nodes.push(node);
338                                        lNode = nodes.length -1;
339                                    }
340                                    var edge={
341                                        from: users[i].travels[j].joins[k]._id,
342                                        to: users[i].travels[j]._id,
343                                        color: {
344                                            color: "#4DD0E1"//cyan300
345                                        }
346                                    };
347                                    edges.push(edge);
348                                }*/
349                            }
350
351                        }
352                        var resp = {
353                            nodes: nodes,
354                            edges: edges
355                        };
356                        res.status(200).jsonp(resp);
357                    });
358            }
359        });
360};