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