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};