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