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