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