commonroutesServer/controllers/adminController.js
controllers/adminController.jsRaw
1//File: controllers/userController.js
2var mongoose = require('mongoose');
3var adminModel = mongoose.model('adminModel');
4var userModel = mongoose.model('userModel');
5var notificationModel = mongoose.model('notificationModel');
6var travelModel = mongoose.model('travelModel');
7var travelCtrl = require('../controllers/travelController');
8
9var config = require('../config');
10var pageSize = config.pageSize;
11
12/* */
13var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens
14var express = require("express");
15var app = express();
16var config = require('../config'); // get our config file
17app.set('superSecret', config.secret); // secret variable
18
19var crypto = require('crypto');
20/* */
21
22var request = require('request');
23
24
25//POST - Insert a new User in the DB
26exports.signup = function(req, res) {
27 //get random avatar
28 var r = getRand(1, 10);
29 randAvatar = getAvatar(r);
30
31
32 var user = new userModel({
33 username: req.body.username,
34 password: crypto.createHash('sha256').update(req.body.password).digest('base64'),
35 description: req.body.description,
36 avatar: randAvatar,
37 email: req.body.email,
38 phone: req.body.phone,
39 telegram: req.body.telegram
40 });
41 if (user.username == undefined) {
42 return res.status(500).jsonp("empty inputs");
43 } else if (user.password == undefined) {
44 return res.status(500).jsonp("empty inputs");
45 } else if (user.email == undefined) {
46 return res.status(500).jsonp("empty inputs");
47 }
48
49 user.save(function(err, user) {
50 if (err) return res.send(500, err.message);
51
52 exports.login(req, res);
53 });
54};
55
56
57//POST - auth user
58exports.login = function(req, res) {
59 // find the user
60 adminModel.findOne({
61 username: req.body.username
62 })
63 .select('+password')
64 .exec(function(err, user) {
65
66 if (err) throw err;
67
68 if (!user) {
69 res.json({
70 success: false,
71 message: 'Authentication failed. User not found.'
72 });
73 } else if (user) {
74
75 req.body.password = crypto.createHash('sha256').update(req.body.password).digest('base64');
76
77 // check if password matches
78 if (user.password != req.body.password) {
79 res.json({
80 success: false,
81 message: 'Authentication failed. Wrong password.'
82 });
83 } else {
84
85 // if user is found and password is right
86 // create a token
87 var token = jwt.sign({
88 foo: 'bar'
89 }, app.get('superSecret'), {
90 //expiresInMinutes: 1440 // expires in 24 hours
91 //expiresIn: '60m'
92 });
93 user.token = token;
94 user.save(function(err, user) {
95 if (err) return res.send(500, err.message);
96 //res.status(200).jsonp(travel);
97 console.log(user);
98 // return the information including token as JSON
99 user.password = "";
100 res.json({
101 success: true,
102 message: 'Enjoy your token!',
103 token: token,
104 user: user
105 });
106 });
107
108 }
109
110 }
111
112 });
113};
114exports.changePassword = function(req, res) {
115 //if(req.body.)
116 userModel.update({
117 'token': req.headers['x-access-token']
118 }, req.body,
119 function(err) {
120 if (err) return console.log(err);
121 exports.getUserByToken(req, res);
122 });
123};
124
125
126exports.deleteTravel = function(req, res) {
127 adminModel.findOne({
128 'token': req.headers['x-access-token']
129 })
130 .exec(function(err, admin) {
131 if (!admin) {
132 res.json({
133 success: false,
134 message: 'Admin not found'
135 });
136 } else if (admin) {
137 if (err) return res.send(500, err.message);
138 travelModel.findById(req.params.travelid, function(err, travel) {
139 if (err) return res.send(500, err.message);
140
141 //add notification to the user who has created the travel
142 userModel.findOne({
143 _id: travel.user
144 })
145 .exec(function(err, user) {
146 if (err) return res.send(500, err.message);
147 if (!user) {
148 //console.log("Notification not posible, user owner of the travel not exist");
149 } else if (user) {
150 var notification = new notificationModel({
151 concept: "admin",
152 message: "an admin has deleted your travel: " + travel.title,
153 date: new Date(),
154 icon: 'admin',
155 link: "users/" + user._id,
156 user: user._id
157 });
158 notification.save(function(err, notification) {
159 if (err) return res.send(500, err.message);
160
161 user.notifications.push(notification._id);
162 user.save(function(err, user) {
163 if (err) return res.send(500, err.message);
164
165 //notification added to user
166 });
167 });
168 }
169 });
170 travel.remove(function(err) {
171 if (err) return res.send(500, err.message);
172
173 travelCtrl.getAllTravels(req, res);
174 });
175 });
176 }
177 });
178};
179
180exports.deleteUser = function(req, res) {
181 adminModel.findOne({
182 'token': req.headers['x-access-token']
183 })
184 .exec(function(err, admin) {
185 if (!admin) {
186 res.json({
187 success: false,
188 message: 'Admin not found'
189 });
190 } else if (admin) {
191 if (err) return res.send(500, err.message);
192 userModel.findOne({
193 _id: req.params.userid
194 })
195 .exec(function(err, user) {
196 if (err) return res.send(500, err.message);
197 if (!user) {
198 res.json({
199 success: false,
200 message: 'Delete user not posible, user not exist'
201 });
202 } else if (user) {
203 //delete all the travels of this user
204 travelModel.find({
205 user: user._id
206 }).remove().exec(function(err, data) {});
207
208 //delete all the comments of this user
209
210 //now delete user
211 user.remove(function(err) {
212 if (err) return res.send(500, err.message);
213
214 res.status(200).jsonp("deleted");
215 });
216 }
217 });
218 }
219 });
220};
221
222function isNodeInNodes(node, nodes) {
223 for (var i = 0; i < nodes.length; i++) {
224 if (node.title == nodes[i].title) {
225 return (i);
226 }
227 }
228 return (-1);
229}
230exports.network = function(req, res) {
231 adminModel.findOne({
232 'token': req.headers['x-access-token']
233 })
234 .exec(function(err, admin) {
235 if (!admin) {
236 res.json({
237 success: false,
238 message: 'Admin not found'
239 });
240 } else if (admin) {
241 if (err) return res.send(500, err.message);
242 userModel.find()
243 .limit(pageSize)
244 .skip(pageSize * Number(req.query.page))
245 .lean()
246 //.populate({path: 'travels', populate: {path: 'joins', populate: {path: 'username'}}})
247 .populate('travels', 'title type joins')
248 .populate('likes', 'username avatar')
249 .exec(function(err, users) {
250 if (err) return res.send(500, err.message);
251
252 /*res.status(200).jsonp(users);*/
253 var nodes = [];
254 var edges = [];
255 for (var i = 0; i < users.length; i++) {
256 var node = {
257 title: users[i].username,
258 label: users[i].username,
259 image: users[i].avatar,
260 shape: "image",
261 id: users[i]._id,
262 group: users[i]._id
263 };
264 var lNode = isNodeInNodes(node, nodes);
265 if (lNode < 0) {
266 nodes.push(node);
267 var uNode = nodes.length - 1;
268 }
269 for (var j = 0; j < users[i].likes.length; j++) {
270 /*console.log(i + ", " + j);
271 console.log(nodes);*/
272 var node = {
273 title: users[i].likes[j].username,
274 label: users[i].likes[j].username,
275 image: users[i].likes[j].avatar,
276 shape: "image",
277 id: users[i].likes[j]._id
278 };
279 var lNode = isNodeInNodes(node, nodes);
280 if (lNode < 0) {
281 //node no exist
282 nodes.push(node);
283 lNode = nodes.length - 1;
284 } else {
285 //node already exist
286
287 }
288 var edge = {
289 from: users[i]._id,
290 to: users[i].likes[j]._id,
291 arrows: "to",
292 color: {
293 color: "#E57373" //red300
294 }
295 };
296 edges.push(edge);
297 }
298 for (var j = 0; j < users[i].travels.length; j++) {
299 /*console.log(i + ", " + j);
300 console.log(nodes);*/
301 var node = {
302 title: users[i].travels[j].title,
303 label: users[i].travels[j].title,
304 image: "img/" + users[i].travels[j].type + ".png",
305 shape: "image",
306 id: users[i].travels[j]._id,
307 value: "0.5",
308 group: users[i]._id
309 };
310 var lNode = isNodeInNodes(node, nodes);
311 if (lNode < 0) {
312 //node no exist
313 nodes.push(node);
314 lNode = nodes.length - 1;
315 } else {
316 //node already exist
317
318 }
319 var edge = {
320 from: users[i]._id,
321 to: users[i].travels[j]._id
322 };
323 edges.push(edge);
324
325 //users joining travels
326 /*for(var k=0; k<users[i].travels[j].joins.length; k++){
327 var node = {
328 title: users[i].travels[j].joins[k].username,
329 label: users[i].travels[j].joins[k].username,
330 image: users[i].travels[j].joins[k].avatar,
331 shape: "image",
332 id: users[i].travels[j].joins[k]._id
333 };
334 var lNode = isNodeInNodes(node, nodes);
335 if (lNode<0){
336 //node no exist
337 nodes.push(node);
338 lNode = nodes.length -1;
339 }
340 var edge={
341 from: users[i].travels[j].joins[k]._id,
342 to: users[i].travels[j]._id,
343 color: {
344 color: "#4DD0E1"//cyan300
345 }
346 };
347 edges.push(edge);
348 }*/
349 }
350
351 }
352 var resp = {
353 nodes: nodes,
354 edges: edges
355 };
356 res.status(200).jsonp(resp);
357 });
358 }
359 });
360};