arnaucube
arnaucube/commonroutesServerPublic Self-hosted repository
commonroutesServer/controllers/userController.js
controllers/userController.jsRaw
  1//File: controllers/userController.js
  2var mongoose = require('mongoose');
  3var userModel = mongoose.model('userModel');
  4var notificationModel  = mongoose.model('notificationModel');
  5var travelModel  = mongoose.model('travelModel');
  6
  7
  8/* */
  9var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens
 10var express = require("express");
 11var app = express();
 12var config = require('../config'); // get our config file
 13app.set('superSecret', config.secret); // secret variable
 14
 15var crypto = require('crypto');
 16/* */
 17
 18//POST - Insert a new User in the DB
 19exports.signup = function(req, res) {
 20
 21    var user = new userModel({
 22        username: req.body.username,
 23        password: crypto.createHash('sha256').update(req.body.password).digest('base64'),
 24        description: req.body.description,
 25        avatar: req.body.avatar,
 26        email: req.body.email,
 27        phone: req.body.phone,
 28        telegram: req.body.telegram
 29    });
 30    if (user.username == undefined) {
 31        return res.status(500).jsonp("empty inputs");
 32    } else if (user.password == undefined) {
 33        return res.status(500).jsonp("empty inputs");
 34    } else if (user.email == undefined) {
 35        return res.status(500).jsonp("empty inputs");
 36    }
 37
 38    user.save(function(err, user) {
 39        if (err) return res.send(500, err.message);
 40
 41		exports.login(req, res);
 42    });
 43};
 44
 45
 46//POST - auth user
 47exports.login = function(req, res) {
 48    // find the user
 49    userModel.findOne({
 50        username: req.body.username
 51    })
 52    .select('+password')
 53    .exec(function(err, user) {
 54
 55        if (err) throw err;
 56
 57        if (!user) {
 58            res.json({
 59                success: false,
 60                message: 'Authentication failed. User not found.'
 61            });
 62        } else if (user) {
 63
 64            req.body.password = crypto.createHash('sha256').update(req.body.password).digest('base64');
 65
 66            // check if password matches
 67            if (user.password != req.body.password) {
 68                res.json({
 69                    success: false,
 70                    message: 'Authentication failed. Wrong password.'
 71                });
 72            } else {
 73
 74                // if user is found and password is right
 75                // create a token
 76                var token = jwt.sign({foo: 'bar'}, app.get('superSecret'), {
 77                    //expiresInMinutes: 1440 // expires in 24 hours
 78                    //expiresIn: '60m'
 79                });
 80                user.token = token;
 81                user.save(function(err, user) {
 82                    if (err) return res.send(500, err.message);
 83                    //res.status(200).jsonp(travel);
 84                    console.log(user);
 85                    // return the information including token as JSON
 86                    user.password = "";
 87                    res.json({
 88                        success: true,
 89                        message: 'Enjoy your token!',
 90                        token: token,
 91                        user: user
 92                    });
 93                });
 94
 95            }
 96
 97        }
 98
 99    });
100};
101
102//GET - Return all Users in the DB
103exports.getAllUsers = function(req, res) {
104    userModel.find()
105        .limit(Number(req.query.pageSize))
106        .skip(Number(req.query.pageSize) * Number(req.query.page))
107        .exec(function (err, users) {
108            if (err) return res.send(500, err.message);
109            res.status(200).jsonp(users);
110        });
111};
112
113
114exports.getUserById = function (req, res) {
115    userModel.findOne({_id: req.params.userid})
116    .lean()
117    .populate('travels', 'title from to date type')
118    .exec(function (err, user) {
119        if (err) return res.send(500, err.message);
120        if (!user) {
121            res.json({success: false, message: 'User not found.'});
122        } else if (user) {
123
124            res.status(200).jsonp(user);
125        }
126    });
127};
128exports.getUserByToken = function (req, res) {
129    userModel.findOne({'token': req.headers['x-access-token']})
130    .lean()
131    .populate('travels', 'title from to date')
132    .exec(function (err, user) {
133        if (err) return res.send(500, err.message);
134        if (!user) {
135            res.json({success: false, message: 'User not found.'});
136        } else if (user) {
137
138            res.status(200).jsonp(user);
139        }
140    });
141};
142
143exports.getTravelsByUserId = function (req, res) {
144    travelModel.find(
145        {
146            user: req.params.userid
147        }
148    )
149    .lean()
150    .exec(function (err, travels) {
151        if (err) return res.send(500, err.message);
152        travelModel.find(
153            {
154                joins: req.params.userid
155            }
156        )
157        .lean()
158        .exec(function (err, joins) {
159            if (err) return res.send(500, err.message);
160            res.json({
161                travels: travels,
162                joins: joins
163            });
164        });
165    });
166};
167exports.getNotifications = function (req, res) {
168    userModel.findOne({'token': req.headers['x-access-token']})
169    .lean()
170    .populate('notifications')
171    .exec(function (err, user) {
172        if (err) return res.send(500, err.message);
173        if (!user) {
174            res.json({success: false, message: 'User not found.'});
175        } else if (user) {
176
177            res.status(200).jsonp(user.notifications);
178        }
179    });
180};
181
182exports.updateUser = function (req, res) {
183    userModel.update({'token': req.headers['x-access-token']}, req.body,
184        function (err) {
185            if (err) return console.log(err);
186            exports.getUserByToken(req, res);
187        });
188};
189
190//DELETE - Delete a user with specified ID
191exports.deleteUser = function(req, res) {
192    userModel.findOne({'token': req.headers['x-access-token']})
193    .exec(function(err, user) {
194        user.remove(function(err) {
195            if (err) return res.send(500, err.message);
196            res.status(200).jsonp("deleted");
197        })
198    });
199};
200/* fav */
201exports.addFav = function(req, res) {
202    var tokenuser;
203    userModel.find({
204        token: req.headers['x-access-token']
205    }, function(err, users) {
206        tokenuser = users[0];
207    });
208    userModel.findById(req.params.userId, function(err, user) {
209
210        // first search if user have already said like
211        var favRepeated = false;
212        for (var i = 0; i < user.favs.length; i++) {
213            if (user.favs[i].username == tokenuser.username) {
214                favRepeated = true;
215            }
216        }
217        console.log("favRepeated: " + favRepeated);
218        if (favRepeated == false) {
219            //fav
220            var fav = {
221                userId: tokenuser._id,
222                username: tokenuser.username,
223                avatar: tokenuser.avatar
224            };
225            user.favs.push(fav);
226
227            //notification
228            var notification = {
229                concept: "like",
230                otherusername: tokenuser.username,
231                description: "user " + tokenuser.username + " favs you",
232                date: new Date(),
233                link: ""
234            };
235            user.notifications.push(notification);
236
237            user.save(function(err, user) {
238                if (err) return res.send(500, err.message);
239
240
241                //once saved, send the users json to client
242                userModel.find(function(err, users) {
243                    if (err) res.send(500, err.message);
244                    res.status(200).jsonp(users);
245                });
246            });
247        } else {
248            userModel.find(function(err, users) {
249                if (err) res.send(500, err.message);
250                res.status(200).jsonp(users);
251            });
252        }
253
254    });
255};
256exports.doUnfav = function(req, res) {
257    var tokenuser;
258    userModel.find({
259        token: req.headers['x-access-token']
260    }, function(err, users) {
261        tokenuser = users[0];
262    });
263
264    userModel.findById(req.params.userId, function(err, user) {
265        for (var i = 0; i < user.favs.length; i++) {
266            if (user.favs[i].username == tokenuser.username) {
267                user.favs.splice(i, 1);
268            }
269        }
270
271        user.save(function(err, travel) {
272            if (err) return res.send(500, err.message);
273            //res.status(200).jsonp(travel);
274            userModel.find(function(err, users) {
275                if (err) res.send(500, err.message);
276                res.status(200).jsonp(users);
277            });
278        });
279    });
280};