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