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