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.addUser = function(req, res) {
18 console.log('POST new user, name: ' + req.body.username);
19 //console.log(req.body);
20
21 var user = new userModel({
22 username: req.body.username,
23 password: crypto.createHash('sha256').update(req.body.password).digest('base64'),
24 description: req.body.description,
25 avatar: req.body.avatar,
26 mail: req.body.mail,
27 phone: req.body.phone,
28 telegram: req.body.telegram
29 });
30 if (user.username == undefined) {
31 return res.status(500).jsonp("empty inputs");
32 } else if (user.password == undefined) {
33 return res.status(500).jsonp("empty inputs");
34 } else if (user.mail == undefined) {
35 return res.status(500).jsonp("empty inputs");
36 }
37
38 user.save(function(err, user) {
39 if (err) return res.send(500, err.message);
40
41 exports.login(req, res);
42 });
43};
44
45
46//POST - auth user
47exports.login = function(req, res) {
48 // find the user
49 userModel.findOne({
50 username: req.body.username
51 }, function(err, user) {
52
53 if (err) throw err;
54
55 if (!user) {
56 res.json({
57 success: false,
58 message: 'Authentication failed. User not found.'
59 });
60 } else if (user) {
61
62 req.body.password = crypto.createHash('sha256').update(req.body.password).digest('base64');
63
64 // check if password matches
65 if (user.password != req.body.password) {
66 res.json({
67 success: false,
68 message: 'Authentication failed. Wrong password.'
69 });
70 } else {
71
72 // if user is found and password is right
73 // create a token
74 var token = jwt.sign(user, app.get('superSecret'), {
75 //expiresInMinutes: 1440 // expires in 24 hours
76 //expiresIn: '60m'
77 });
78 user.token = token;
79 user.save(function(err, user) {
80 if (err) return res.send(500, err.message);
81 //res.status(200).jsonp(travel);
82 console.log(user);
83 // return the information including token as JSON
84 user.password = "";
85 res.json({
86 success: true,
87 message: 'Enjoy your token!',
88 token: token,
89 user: user
90 });
91 });
92
93 }
94
95 }
96
97 });
98};
99
100//GET - Return all Users in the DB
101exports.findAllUsers = function(req, res) {
102 userModel.find(function(err, users) {
103 if (err) res.send(500, err.message);
104
105 //password deletion
106 for (var i = 0; i < users.length; i++) {
107 users[i].password = "";
108 users[i].token = "";
109 console.log(users[i].password);
110 }
111
112 console.log('GET /users');
113 res.status(200).jsonp(users);
114 });
115};
116
117//GET - Return a User with specified ID
118exports.findById = function(req, res) {
119 userModel.findById(req.params.id, function(err, user) {
120 if (err) return res.send(500, err.message);
121
122 console.log('GET /users/' + req.params.id);
123 //password deletion
124 if (user != null) {
125 user.password = "";
126 users.token = "";
127 }
128 res.status(200).jsonp(user);
129 });
130};
131
132exports.findUserByUsername = function(req, res) {
133 userModel.find({
134 username: req.params.username
135 }, function(err, user) {
136
137 if (err) throw err;
138
139 if (!user) {
140 res.json({
141 success: false,
142 message: 'no user found'
143 });
144 } else if (user) {
145 // return the information including token as JSON
146 //res.jsonp(user);
147 user.password = "";
148 users.token = "";
149 console.log(user);
150 res.status(200).jsonp(user[0]);
151
152
153 }
154
155 });
156};
157
158
159
160/* fav */
161exports.addFav = function(req, res) {
162 var tokenuser;
163 userModel.find({
164 token: req.headers['x-access-token']
165 }, function(err, users) {
166 tokenuser = users[0];
167 });
168 userModel.findById(req.params.userId, function(err, user) {
169
170 // first search if user have already said like
171 var favRepeated = false;
172 for (var i = 0; i < user.favs.length; i++) {
173 if (user.favs[i].username == tokenuser.username) {
174 favRepeated = true;
175 }
176 }
177 console.log("favRepeated: " + favRepeated);
178 if (favRepeated == false) {
179 //fav
180 var fav = {
181 userId: tokenuser._id,
182 username: tokenuser.username,
183 avatar: tokenuser.avatar
184 };
185 user.favs.push(fav);
186
187 //notification
188 var notification = {
189 type: "fav",
190 otherusername: tokenuser.username,
191 description: "user " + tokenuser.username + " favs you",
192 date: new Date(),
193 link: ""
194 };
195 user.notifications.push(notification);
196
197 user.save(function(err, user) {
198 if (err) return res.send(500, err.message);
199
200
201 //once saved, send the users json to client
202 userModel.find(function(err, users) {
203 if (err) res.send(500, err.message);
204 res.status(200).jsonp(users);
205 });
206 });
207 } else {
208 userModel.find(function(err, users) {
209 if (err) res.send(500, err.message);
210 res.status(200).jsonp(users);
211 });
212 }
213
214 });
215};
216exports.doUnfav = function(req, res) {
217 var tokenuser;
218 userModel.find({
219 token: req.headers['x-access-token']
220 }, function(err, users) {
221 tokenuser = users[0];
222 });
223
224 userModel.findById(req.params.userId, function(err, user) {
225 for (var i = 0; i < user.favs.length; i++) {
226 if (user.favs[i].username == tokenuser.username) {
227 user.favs.splice(i, 1);
228 }
229 }
230
231 user.save(function(err, travel) {
232 if (err) return res.send(500, err.message);
233 //res.status(200).jsonp(travel);
234 userModel.find(function(err, users) {
235 if (err) res.send(500, err.message);
236 res.status(200).jsonp(users);
237 });
238 });
239 });
240};
241
242//PUT - Update a user already exists
243exports.updateUser = function(req, res) {
244 userModel.findById(req.params.id, function(err, user) {
245 user.username = req.body.username;
246 user.password = md5(req.body.password);
247 user.description = req.body.description;
248 user.avatar = req.body.avatar;
249 user.mail = req.body.mail;
250 user.phone = req.body.phone;
251 user.telegram = req.body.telegram;
252
253 user.save(function(err) {
254 if (err) return res.send(500, err.message);
255 user.password = "";
256 users.token = "";
257 res.status(200).jsonp(user);
258 });
259 });
260};
261
262//DELETE - Delete a user with specified ID
263exports.deleteUser = function(req, res) {
264 userModel.findById(req.params.id, function(err, user) {
265 user.remove(function(err) {
266 if (err) return res.send(500, err.message);
267 res.status(200).jsonp(req.params.id);
268 console.log('DELETE /users/' + req.params.id);
269 })
270 });
271};