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//GET - Return a User with specified ID
111exports.getUserById = function (req, res) {
112 userModel.findOne({_id: req.params.userid})
113 .lean()
114 .populate('travels', 'title from to date')
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};
125//GET - Return a User with specified ID
126exports.getUserByToken = function (req, res) {
127 userModel.findOne({'token': req.headers['x-access-token']})
128 .lean()
129 .populate('travels', 'title from to date')
130 .exec(function (err, user) {
131 if (err) return res.send(500, err.message);
132 if (!user) {
133 res.json({success: false, message: 'User not found.'});
134 } else if (user) {
135
136 res.status(200).jsonp(user);
137 }
138 });
139};
140
141exports.updateUser = function (req, res) {
142 userModel.update({'token': req.headers['x-access-token']}, req.body,
143 function (err) {
144 if (err) return console.log(err);
145 console.log(user);
146 userModel.findOne({_id: user._id})
147 .lean()
148 .populate('travels', 'title from to date')
149 .exec(function (err, user) {
150 if (err) return res.send(500, err.message);
151 if (!user) {
152 res.json({success: false, message: 'User not found.'});
153 } else if (user) {
154
155 res.status(200).jsonp(user);
156 }
157 });
158 });
159};
160
161//DELETE - Delete a user with specified ID
162exports.deleteUser = function(req, res) {
163 userModel.findOne({'token': req.headers['x-access-token']})
164 .exec(function(err, user) {
165 user.remove(function(err) {
166 if (err) return res.send(500, err.message);
167 res.status(200).jsonp("deleted");
168 })
169 });
170};
171/* fav */
172exports.addFav = function(req, res) {
173 var tokenuser;
174 userModel.find({
175 token: req.headers['x-access-token']
176 }, function(err, users) {
177 tokenuser = users[0];
178 });
179 userModel.findById(req.params.userId, function(err, user) {
180
181 // first search if user have already said like
182 var favRepeated = false;
183 for (var i = 0; i < user.favs.length; i++) {
184 if (user.favs[i].username == tokenuser.username) {
185 favRepeated = true;
186 }
187 }
188 console.log("favRepeated: " + favRepeated);
189 if (favRepeated == false) {
190 //fav
191 var fav = {
192 userId: tokenuser._id,
193 username: tokenuser.username,
194 avatar: tokenuser.avatar
195 };
196 user.favs.push(fav);
197
198 //notification
199 var notification = {
200 type: "fav",
201 otherusername: tokenuser.username,
202 description: "user " + tokenuser.username + " favs you",
203 date: new Date(),
204 link: ""
205 };
206 user.notifications.push(notification);
207
208 user.save(function(err, user) {
209 if (err) return res.send(500, err.message);
210
211
212 //once saved, send the users json to client
213 userModel.find(function(err, users) {
214 if (err) res.send(500, err.message);
215 res.status(200).jsonp(users);
216 });
217 });
218 } else {
219 userModel.find(function(err, users) {
220 if (err) res.send(500, err.message);
221 res.status(200).jsonp(users);
222 });
223 }
224
225 });
226};
227exports.doUnfav = function(req, res) {
228 var tokenuser;
229 userModel.find({
230 token: req.headers['x-access-token']
231 }, function(err, users) {
232 tokenuser = users[0];
233 });
234
235 userModel.findById(req.params.userId, function(err, user) {
236 for (var i = 0; i < user.favs.length; i++) {
237 if (user.favs[i].username == tokenuser.username) {
238 user.favs.splice(i, 1);
239 }
240 }
241
242 user.save(function(err, travel) {
243 if (err) return res.send(500, err.message);
244 //res.status(200).jsonp(travel);
245 userModel.find(function(err, users) {
246 if (err) res.send(500, err.message);
247 res.status(200).jsonp(users);
248 });
249 });
250 });
251};