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 exports.getUserByToken(req, res);
159 });
160};
161
162//DELETE - Delete a user with specified ID
163exports.deleteUser = function(req, res) {
164 userModel.findOne({'token': req.headers['x-access-token']})
165 .exec(function(err, user) {
166 user.remove(function(err) {
167 if (err) return res.send(500, err.message);
168 res.status(200).jsonp("deleted");
169 })
170 });
171};
172/* fav */
173exports.addFav = function(req, res) {
174 var tokenuser;
175 userModel.find({
176 token: req.headers['x-access-token']
177 }, function(err, users) {
178 tokenuser = users[0];
179 });
180 userModel.findById(req.params.userId, function(err, user) {
181
182 // first search if user have already said like
183 var favRepeated = false;
184 for (var i = 0; i < user.favs.length; i++) {
185 if (user.favs[i].username == tokenuser.username) {
186 favRepeated = true;
187 }
188 }
189 console.log("favRepeated: " + favRepeated);
190 if (favRepeated == false) {
191 //fav
192 var fav = {
193 userId: tokenuser._id,
194 username: tokenuser.username,
195 avatar: tokenuser.avatar
196 };
197 user.favs.push(fav);
198
199 //notification
200 var notification = {
201 concept: "like",
202 otherusername: tokenuser.username,
203 description: "user " + tokenuser.username + " favs you",
204 date: new Date(),
205 link: ""
206 };
207 user.notifications.push(notification);
208
209 user.save(function(err, user) {
210 if (err) return res.send(500, err.message);
211
212
213 //once saved, send the users json to client
214 userModel.find(function(err, users) {
215 if (err) res.send(500, err.message);
216 res.status(200).jsonp(users);
217 });
218 });
219 } else {
220 userModel.find(function(err, users) {
221 if (err) res.send(500, err.message);
222 res.status(200).jsonp(users);
223 });
224 }
225
226 });
227};
228exports.doUnfav = function(req, res) {
229 var tokenuser;
230 userModel.find({
231 token: req.headers['x-access-token']
232 }, function(err, users) {
233 tokenuser = users[0];
234 });
235
236 userModel.findById(req.params.userId, function(err, user) {
237 for (var i = 0; i < user.favs.length; i++) {
238 if (user.favs[i].username == tokenuser.username) {
239 user.favs.splice(i, 1);
240 }
241 }
242
243 user.save(function(err, travel) {
244 if (err) return res.send(500, err.message);
245 //res.status(200).jsonp(travel);
246 userModel.find(function(err, users) {
247 if (err) res.send(500, err.message);
248 res.status(200).jsonp(users);
249 });
250 });
251 });
252};