commonroutesServer/controllers/userController.js
controllers/userController.jsRaw
1//File: controllers/userController.js
2var mongoose = require('mongoose');
3var userModel = mongoose.model('userModel');
4
5
6/* */
7var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens
8var express = require("express");
9var app = express();
10var config = require('../config'); // get our config file
11app.set('superSecret', config.secret); // secret variable
12
13var crypto = require('crypto');
14/* */
15
16//POST - Insert a new User in the DB
17exports.signup = function(req, res) {
18
19 var user = new userModel({
20 username: req.body.username,
21 password: crypto.createHash('sha256').update(req.body.password).digest('base64'),
22 description: req.body.description,
23 avatar: req.body.avatar,
24 email: req.body.email,
25 phone: req.body.phone,
26 telegram: req.body.telegram
27 });
28 if (user.username == undefined) {
29 return res.status(500).jsonp("empty inputs");
30 } else if (user.password == undefined) {
31 return res.status(500).jsonp("empty inputs");
32 } else if (user.email == undefined) {
33 return res.status(500).jsonp("empty inputs");
34 }
35
36 user.save(function(err, user) {
37 if (err) return res.send(500, err.message);
38
39 exports.login(req, res);
40 });
41};
42
43
44//POST - auth user
45exports.login = function(req, res) {
46 // find the user
47 userModel.findOne({
48 username: req.body.username
49 }, function(err, user) {
50
51 if (err) throw err;
52
53 if (!user) {
54 res.json({
55 success: false,
56 message: 'Authentication failed. User not found.'
57 });
58 } else if (user) {
59
60 req.body.password = crypto.createHash('sha256').update(req.body.password).digest('base64');
61
62 // check if password matches
63 if (user.password != req.body.password) {
64 res.json({
65 success: false,
66 message: 'Authentication failed. Wrong password.'
67 });
68 } else {
69
70 // if user is found and password is right
71 // create a token
72 var token = jwt.sign({foo: 'bar'}, app.get('superSecret'), {
73 //expiresInMinutes: 1440 // expires in 24 hours
74 //expiresIn: '60m'
75 });
76 user.token = token;
77 user.save(function(err, user) {
78 if (err) return res.send(500, err.message);
79 //res.status(200).jsonp(travel);
80 console.log(user);
81 // return the information including token as JSON
82 user.password = "";
83 res.json({
84 success: true,
85 message: 'Enjoy your token!',
86 token: token,
87 user: user
88 });
89 });
90
91 }
92
93 }
94
95 });
96};
97
98//GET - Return all Users in the DB
99exports.getAllUsers = function(req, res) {
100 userModel.find()
101 .limit(Number(req.query.pageSize))
102 .skip(Number(req.query.pageSize) * Number(req.query.page))
103 .exec(function (err, users) {
104 if (err) return res.send(500, err.message);
105 res.status(200).jsonp(users);
106 });
107};
108
109//GET - Return a User with specified ID
110exports.getUserById = function (req, res) {
111 userModel.findOne({_id: req.params.userid})
112 .lean()
113 .populate('travels', 'title from to date')
114 .exec(function (err, user) {
115 if (err) return res.send(500, err.message);
116 if (!user) {
117 res.json({success: false, message: 'User not found.'});
118 } else if (user) {
119
120 res.status(200).jsonp(user);
121 }
122 });
123};
124
125exports.updateUser = function (req, res) {
126 userModel.update({'token': req.headers['x-access-token']}, req.body,
127 function (err) {
128 if (err) return console.log(err);
129 console.log(user);
130 userModel.findOne({_id: user._id})
131 .lean()
132 .populate('travels', 'title from to date')
133 .exec(function (err, user) {
134 if (err) return res.send(500, err.message);
135 if (!user) {
136 res.json({success: false, message: 'User not found.'});
137 } else if (user) {
138
139 res.status(200).jsonp(user);
140 }
141 });
142 });
143};
144
145//DELETE - Delete a user with specified ID
146exports.deleteUser = function(req, res) {
147 userModel.findOne({'token': req.headers['x-access-token']})
148 .exec(function(err, user) {
149 user.remove(function(err) {
150 if (err) return res.send(500, err.message);
151 res.status(200).jsonp("deleted");
152 })
153 });
154};
155/* fav */
156exports.addFav = function(req, res) {
157 var tokenuser;
158 userModel.find({
159 token: req.headers['x-access-token']
160 }, function(err, users) {
161 tokenuser = users[0];
162 });
163 userModel.findById(req.params.userId, function(err, user) {
164
165 // first search if user have already said like
166 var favRepeated = false;
167 for (var i = 0; i < user.favs.length; i++) {
168 if (user.favs[i].username == tokenuser.username) {
169 favRepeated = true;
170 }
171 }
172 console.log("favRepeated: " + favRepeated);
173 if (favRepeated == false) {
174 //fav
175 var fav = {
176 userId: tokenuser._id,
177 username: tokenuser.username,
178 avatar: tokenuser.avatar
179 };
180 user.favs.push(fav);
181
182 //notification
183 var notification = {
184 type: "fav",
185 otherusername: tokenuser.username,
186 description: "user " + tokenuser.username + " favs you",
187 date: new Date(),
188 link: ""
189 };
190 user.notifications.push(notification);
191
192 user.save(function(err, user) {
193 if (err) return res.send(500, err.message);
194
195
196 //once saved, send the users json to client
197 userModel.find(function(err, users) {
198 if (err) res.send(500, err.message);
199 res.status(200).jsonp(users);
200 });
201 });
202 } else {
203 userModel.find(function(err, users) {
204 if (err) res.send(500, err.message);
205 res.status(200).jsonp(users);
206 });
207 }
208
209 });
210};
211exports.doUnfav = function(req, res) {
212 var tokenuser;
213 userModel.find({
214 token: req.headers['x-access-token']
215 }, function(err, users) {
216 tokenuser = users[0];
217 });
218
219 userModel.findById(req.params.userId, function(err, user) {
220 for (var i = 0; i < user.favs.length; i++) {
221 if (user.favs[i].username == tokenuser.username) {
222 user.favs.splice(i, 1);
223 }
224 }
225
226 user.save(function(err, travel) {
227 if (err) return res.send(500, err.message);
228 //res.status(200).jsonp(travel);
229 userModel.find(function(err, users) {
230 if (err) res.send(500, err.message);
231 res.status(200).jsonp(users);
232 });
233 });
234 });
235};