arnaucube
arnaucube/commonroutesServerPublic Self-hosted repository
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};