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.getUserLikes = function (req, res) {
168 userModel.findOne({_id: req.params.userid})
169 .lean()
170 .populate('likes', 'username avatar description')
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 res.status(200).jsonp(user.likes);
177 }
178 });
179};
180exports.getNotifications = function (req, res) {
181 userModel.findOne({'token': req.headers['x-access-token']})
182 .lean()
183 .populate('notifications')
184 .exec(function (err, user) {
185 if (err) return res.send(500, err.message);
186 if (!user) {
187 res.json({success: false, message: 'User not found.'});
188 } else if (user) {
189
190 res.status(200).jsonp(user.notifications);
191 }
192 });
193};
194
195exports.updateUser = function (req, res) {
196 userModel.update({'token': req.headers['x-access-token']}, req.body,
197 function (err) {
198 if (err) return console.log(err);
199 exports.getUserByToken(req, res);
200 });
201};
202
203//DELETE - Delete a user with specified ID
204exports.deleteUser = function(req, res) {
205 userModel.findOne({'token': req.headers['x-access-token']})
206 .exec(function(err, user) {
207 user.remove(function(err) {
208 if (err) return res.send(500, err.message);
209 res.status(200).jsonp("deleted");
210 })
211 });
212};
213exports.likeUser = function(req, res) {
214 userModel.findOne({'token': req.headers['x-access-token']})
215 .exec(function (err, userL) {
216 if (err) return res.send(500, err.message);
217 if (!userL) {
218 res.json({success: false, message: 'no user with that token, login again'});
219 } else if (userL) {
220
221 userModel.findOne({
222 _id: req.params.userid,
223 likes: {'$ne': userL._id}
224 })
225 .exec(function (err, user) {
226 if (err) return res.send(500, err.message);
227 if (!user) {
228 res.json({success: false, message: 'Like not posible, user not exist, or like was already done'});
229 } else if (user) {
230 //res.status(200).jsonp(user);
231 var notification = new notificationModel({
232 concept: "like",
233 message: "user "+userL.username+" adds a like to you",
234 date: new Date(),
235 icon: 'like.png',
236 link: "users/" + user._id
237 });
238 notification.save(function(err, notification) {
239 if (err) return res.send(500, err.message);
240
241 user.likes.push(userL._id);
242 user.notifications.push(notification._id);
243 user.save(function(err, user) {
244 if (err) return res.send(500, err.message);
245
246 exports.getUserById(req, res);
247 });
248 });
249
250 }//end of else if user
251 });
252 }//end of else if userL
253 });
254};
255exports.unlikeUser = function(req, res) {
256 userModel.findOne({'token': req.headers['x-access-token']})
257 .exec(function (err, userL) {
258 if (err) return res.send(500, err.message);
259 if (!userL) {
260 res.json({success: false, message: 'no user with that token, login again'});
261 } else if (userL) {
262
263 userModel.findOne({
264 _id: req.params.userid,
265 likes: userL._id
266 })
267 .exec(function (err, user) {
268 if (err) return res.send(500, err.message);
269 if (!user) {
270 res.json({success: false, message: 'Unlike not posible'});
271 } else if (user) {
272 //res.status(200).jsonp(user);
273 var notification = new notificationModel({
274 concept: "like",
275 message: "user "+userL.username+" removes like on you",
276 date: new Date(),
277 icon: 'like.png',
278 link: "users/" + user._id
279 });
280 notification.save(function(err, notification) {
281 if (err) return res.send(500, err.message);
282
283 var indexOf= user.likes.indexOf(userL._id);
284 user.likes.splice(indexOf, 1);
285 user.notifications.push(notification._id);
286 user.save(function(err, user) {
287 if (err) return res.send(500, err.message);
288
289 exports.getUserById(req, res);
290 });
291 });
292
293 }//end of else if user
294 });
295 }//end of else if userL
296 });
297};
298/* fav */
299exports.addFav = function(req, res) {
300 var tokenuser;
301 userModel.find({
302 token: req.headers['x-access-token']
303 }, function(err, users) {
304 tokenuser = users[0];
305 });
306 userModel.findById(req.params.userId, function(err, user) {
307
308 // first search if user have already said like
309 var favRepeated = false;
310 for (var i = 0; i < user.favs.length; i++) {
311 if (user.favs[i].username == tokenuser.username) {
312 favRepeated = true;
313 }
314 }
315 console.log("favRepeated: " + favRepeated);
316 if (favRepeated == false) {
317 //fav
318 var fav = {
319 userId: tokenuser._id,
320 username: tokenuser.username,
321 avatar: tokenuser.avatar
322 };
323 user.favs.push(fav);
324
325 //notification
326 var notification = {
327 concept: "like",
328 otherusername: tokenuser.username,
329 description: "user " + tokenuser.username + " favs you",
330 date: new Date(),
331 link: ""
332 };
333 user.notifications.push(notification);
334
335 user.save(function(err, user) {
336 if (err) return res.send(500, err.message);
337
338
339 //once saved, send the users json to client
340 userModel.find(function(err, users) {
341 if (err) res.send(500, err.message);
342 res.status(200).jsonp(users);
343 });
344 });
345 } else {
346 userModel.find(function(err, users) {
347 if (err) res.send(500, err.message);
348 res.status(200).jsonp(users);
349 });
350 }
351
352 });
353};
354exports.doUnfav = function(req, res) {
355 var tokenuser;
356 userModel.find({
357 token: req.headers['x-access-token']
358 }, function(err, users) {
359 tokenuser = users[0];
360 });
361
362 userModel.findById(req.params.userId, function(err, user) {
363 for (var i = 0; i < user.favs.length; i++) {
364 if (user.favs[i].username == tokenuser.username) {
365 user.favs.splice(i, 1);
366 }
367 }
368
369 user.save(function(err, travel) {
370 if (err) return res.send(500, err.message);
371 //res.status(200).jsonp(travel);
372 userModel.find(function(err, users) {
373 if (err) res.send(500, err.message);
374 res.status(200).jsonp(users);
375 });
376 });
377 });
378};