openEventsPlatformServer/controllers/userController.js
controllers/userController.jsRaw
1var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens
2var express = require("express");
3var app = express();
4var config = require('../config'); // get our config file
5app.set('superSecret', config.secret); // secret variable
6var crypto = require('crypto');
7var mongoose = require('mongoose');
8
9var userModel = mongoose.model('userModel');
10
11var pageSize = config.pageSize;
12
13exports.signup = function (req, res) {
14 var user = new userModel({
15 username: req.body.username,
16 password: crypto.createHash('sha256').update(req.body.password).digest('base64'),
17 description: req.body.description,
18 email: req.body.email
19 });
20
21 user.save(function (err, user) {
22 if (err) return res.status(500).send(err.message);
23 //res.status(200).jsonp(user); en comptes de retoranr la data del signup, fem el login directament
24 console.log("signup fet correctament, redirigint al login internament automàtic");
25 exports.login(req, res);
26 });
27};
28
29
30exports.login = function (req, res) {
31 userModel.findOne({
32 email: req.body.email
33 })
34 .select('+password')
35 .exec(function (err, user) {
36 if (err) throw err;
37 if (!user) {
38 res.json({success: false, message: 'Authentication failed. User not found.'});
39 } else if (user) {
40 req.body.password = crypto.createHash('sha256').update(req.body.password).digest('base64');
41 if (user.password != req.body.password) {
42 res.json({success: false, message: 'Authentication failed. Wrong password.'});
43 } else {
44 var indexToken = -1;
45 for (var i = 0; i < user.tokens.length; i++) {
46 if (user.tokens[i].userAgent == req.body.userAgent) {
47 indexToken = JSON.parse(JSON.stringify(i));//stringify i parse pq es faci una còpia de la variable i, enlloc de una referència
48 }
49 }
50 console.log(indexToken);
51 if (indexToken == -1) {//userAgent no exist
52 var tokenGenerated = jwt.sign({foo: 'bar'}, app.get('superSecret'), {
53 // expiresIn: 86400 // expires in 24 hours
54 });
55 var newToken = {
56 userAgent: req.body.userAgent,
57 token: tokenGenerated,
58 os: req.body.os,
59 browser: req.body.browser,
60 device: req.body.device,
61 os_version: req.body.os_version,
62 browser_version: req.body.browser_version,
63 ip: req.body.ip,
64 lastLogin: Date()
65 };
66 user.tokens.push(newToken);
67 } else {//userAgent already exist
68 user.tokens[indexToken].token = "";
69 var tokenGenerated = jwt.sign({foo: 'bar'}, app.get('superSecret'), {
70 // expiresIn: 86400 // expires in 24 hours
71 });
72 user.tokens[indexToken].token = tokenGenerated;
73 user.tokens[indexToken].ip = req.body.ip;
74 user.tokens[indexToken].lastLogin = Date();
75 }
76 user.save(function (err, user) {
77 if (err) return res.send(500, err.message);
78 // return the information including token as JSON
79 user.password = "";
80 res.json({
81 user: user,
82 success: true,
83 message: 'Enjoy your token!',
84 token: tokenGenerated
85 });
86 });
87 }
88 }
89 });
90};
91
92
93exports.getAllUsers = function(req, res) {
94 userModel.find()
95 .limit(Number(req.query.pageSize))
96 .skip(pageSize * Number(req.query.page))
97 .exec(function (err, users) {
98 if (err) return res.send(500, err.message);
99 res.status(200).jsonp(users);
100 });
101};
102
103exports.getUserById = function (req, res) {
104 userModel.findOne({_id: req.params.userid})
105 .lean()
106 .populate('events', 'title description img date')
107 .exec(function (err, user) {
108 if (err) return res.send(500, err.message);
109 if (!user) {
110 res.json({success: false, message: 'User not found.'});
111 } else if (user) {
112
113 res.status(200).jsonp(user);
114 }
115 });
116};