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    }, function(err, user) {
 51
 52        if (err) throw err;
 53
 54        if (!user) {
 55            res.json({
 56                success: false,
 57                message: 'Authentication failed. User not found.'
 58            });
 59        } else if (user) {
 60
 61            req.body.password = crypto.createHash('sha256').update(req.body.password).digest('base64');
 62
 63            // check if password matches
 64            if (user.password != req.body.password) {
 65                res.json({
 66                    success: false,
 67                    message: 'Authentication failed. Wrong password.'
 68                });
 69            } else {
 70
 71                // if user is found and password is right
 72                // create a token
 73                var token = jwt.sign({foo: 'bar'}, app.get('superSecret'), {
 74                    //expiresInMinutes: 1440 // expires in 24 hours
 75                    //expiresIn: '60m'
 76                });
 77                user.token = token;
 78                user.save(function(err, user) {
 79                    if (err) return res.send(500, err.message);
 80                    //res.status(200).jsonp(travel);
 81                    console.log(user);
 82                    // return the information including token as JSON
 83                    user.password = "";
 84                    res.json({
 85                        success: true,
 86                        message: 'Enjoy your token!',
 87                        token: token,
 88                        user: user
 89                    });
 90                });
 91
 92            }
 93
 94        }
 95
 96    });
 97};
 98
 99//GET - Return all Users in the DB
100exports.getAllUsers = function(req, res) {
101    userModel.find()
102        .limit(Number(req.query.pageSize))
103        .skip(Number(req.query.pageSize) * Number(req.query.page))
104        .exec(function (err, users) {
105            if (err) return res.send(500, err.message);
106            res.status(200).jsonp(users);
107        });
108};
109
110
111exports.getUserById = function (req, res) {
112    userModel.findOne({_id: req.params.userid})
113    .lean()
114    .populate('travels', 'title from to date type')
115    .exec(function (err, user) {
116        if (err) return res.send(500, err.message);
117        if (!user) {
118            res.json({success: false, message: 'User not found.'});
119        } else if (user) {
120
121            res.status(200).jsonp(user);
122        }
123    });
124};
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};
139exports.getNotifications = function (req, res) {
140    userModel.findOne({'token': req.headers['x-access-token']})
141    .lean()
142    .populate('notifications')
143    .exec(function (err, user) {
144        if (err) return res.send(500, err.message);
145        if (!user) {
146            res.json({success: false, message: 'User not found.'});
147        } else if (user) {
148
149            res.status(200).jsonp(user.notifications);
150        }
151    });
152};
153
154exports.updateUser = function (req, res) {
155    userModel.update({'token': req.headers['x-access-token']}, req.body,
156        function (err) {
157            if (err) return console.log(err);
158            console.log(user);
159            userModel.findOne({_id: user._id})
160            .lean()
161            .populate('travels', 'title from to date')
162            .exec(function (err, user) {
163                if (err) return res.send(500, err.message);
164                if (!user) {
165                    res.json({success: false, message: 'User not found.'});
166                } else if (user) {
167
168                    res.status(200).jsonp(user);
169                }
170            });
171        });
172};
173
174//DELETE - Delete a user with specified ID
175exports.deleteUser = function(req, res) {
176    userModel.findOne({'token': req.headers['x-access-token']})
177    .exec(function(err, user) {
178        user.remove(function(err) {
179            if (err) return res.send(500, err.message);
180            res.status(200).jsonp("deleted");
181        })
182    });
183};
184/* fav */
185exports.addFav = function(req, res) {
186    var tokenuser;
187    userModel.find({
188        token: req.headers['x-access-token']
189    }, function(err, users) {
190        tokenuser = users[0];
191    });
192    userModel.findById(req.params.userId, function(err, user) {
193
194        // first search if user have already said like
195        var favRepeated = false;
196        for (var i = 0; i < user.favs.length; i++) {
197            if (user.favs[i].username == tokenuser.username) {
198                favRepeated = true;
199            }
200        }
201        console.log("favRepeated: " + favRepeated);
202        if (favRepeated == false) {
203            //fav
204            var fav = {
205                userId: tokenuser._id,
206                username: tokenuser.username,
207                avatar: tokenuser.avatar
208            };
209            user.favs.push(fav);
210
211            //notification
212            var notification = {
213                concept: "like",
214                otherusername: tokenuser.username,
215                description: "user " + tokenuser.username + " favs you",
216                date: new Date(),
217                link: ""
218            };
219            user.notifications.push(notification);
220
221            user.save(function(err, user) {
222                if (err) return res.send(500, err.message);
223
224
225                //once saved, send the users json to client
226                userModel.find(function(err, users) {
227                    if (err) res.send(500, err.message);
228                    res.status(200).jsonp(users);
229                });
230            });
231        } else {
232            userModel.find(function(err, users) {
233                if (err) res.send(500, err.message);
234                res.status(200).jsonp(users);
235            });
236        }
237
238    });
239};
240exports.doUnfav = function(req, res) {
241    var tokenuser;
242    userModel.find({
243        token: req.headers['x-access-token']
244    }, function(err, users) {
245        tokenuser = users[0];
246    });
247
248    userModel.findById(req.params.userId, function(err, user) {
249        for (var i = 0; i < user.favs.length; i++) {
250            if (user.favs[i].username == tokenuser.username) {
251                user.favs.splice(i, 1);
252            }
253        }
254
255        user.save(function(err, travel) {
256            if (err) return res.send(500, err.message);
257            //res.status(200).jsonp(travel);
258            userModel.find(function(err, users) {
259                if (err) res.send(500, err.message);
260                res.status(200).jsonp(users);
261            });
262        });
263    });
264};