arnaucube
arnaucube/socketioMEANseedPublic Self-hosted repository
socketioMEANseed/server/controllers/chefController.js
server/controllers/chefController.jsRaw
  1var express = require('express');
  2var app = express();
  3var jwt = require('jsonwebtoken');
  4var config = require('../config/config');
  5var crypto = require('crypto');
  6
  7app.set('superSecret', config.secret);
  8
  9/*******MODELS*********/
 10//var chefModel = require('../models/chefModel');
 11var userModel = require('../models/userModel');
 12var dietModel = require('../models/dietModel');
 13
 14/**GET '/chefs' **/
 15exports.getChefs = function (req, res) {
 16    userModel.find({role: 'chef'})
 17    .limit(Number(req.query.pageSize))
 18    .skip(Number(req.query.pageSize)*Number(req.query.page))
 19    .exec(function (err, chefs) {
 20        if (err) return res.send(500, err.message);
 21        res.status(200).jsonp(chefs);
 22    });
 23};
 24
 25/** GET '/chefs/:chefid' **/
 26exports.getChefById = function (req, res) {
 27    userModel.findOne({_id: req.params.chefid})
 28        .lean()
 29        .populate('diets', 'title description')
 30        .exec(function (err, chef) {
 31            if (err) return res.send(500, err.message);
 32            res.status(200).jsonp(chef);
 33        });
 34};
 35
 36/** PUT '/chefs/:chefid' **/
 37exports.updateChefById = function (req, res) {
 38    var id = req.params.chefid;
 39    var chef = req.body;
 40    userModel.update({"_id": id}, chef,
 41        function (err) {
 42            if (err) return console.log(err);
 43            console.log(chef);
 44            res.status(200).jsonp(chef);
 45        });
 46};
 47
 48/** DELETE '/chefs/:chefid' **/
 49exports.deleteChefById = function (req, res) {
 50    userModel.findByIdAndRemove({_id: req.params.chefid}, function (err) {
 51        if (err) return res.send(500, err.message);
 52        res.status(200).send("Chef deleted");
 53    });
 54};
 55
 56/** POST '/chefs/register' **/
 57exports.register = function (req, res) {
 58    var chef = new userModel({
 59        name: req.body.name,
 60        password: crypto.createHash('sha256').update(req.body.password).digest('base64'),
 61        email: req.body.email,
 62        role: req.body.role
 63    });
 64    chef.save(function (err, chef) {
 65        if (err) return res.send(500, err.message);
 66        res.status(200).jsonp(chef);
 67    });
 68};
 69
 70/** POST '/chefs/login' **/
 71exports.login = function (req, res) {
 72    userModel.findOne({
 73        email: req.body.email
 74    })
 75    .select('+password')
 76    .exec(function (err, chef) {
 77        if (err) throw err;
 78        if (!chef) {
 79            res.json({success: false, message: 'Authentication failed. chef not found.'});
 80        } else if (chef) {
 81            req.body.password = crypto.createHash('sha256').update(req.body.password).digest('base64');
 82            if (chef.password != req.body.password) {
 83                res.json({success: false, message: 'Authentication failed. Wrong password.'});
 84            } else {
 85                var indexToken = -1;
 86                for (var i = 0; i < chef.tokens.length; i++) {
 87                    if (chef.tokens[i].userAgent == req.body.userAgent) {
 88                        indexToken = JSON.parse(JSON.stringify(i));
 89                    }
 90                }
 91                console.log(indexToken);
 92                if (indexToken == -1) {//userAgent no exist
 93
 94                    var tokenGenerated = jwt.sign({foo: 'bar'}, app.get('superSecret'), {
 95                        //  expiresIn: 86400 // expires in 24 hours
 96                    });
 97                    var newToken = {
 98                        userAgent: req.body.userAgent,
 99                        token: tokenGenerated
100                    };
101                    chef.tokens.push(newToken);
102                } else {//userAgent already exist
103                    chef.tokens[indexToken].token = "";
104
105                    var tokenGenerated = jwt.sign({foo: 'bar'}, app.get('superSecret'), {
106                        //  expiresIn: 86400 // expires in 24 hours
107                    });
108                    chef.tokens[indexToken].token = tokenGenerated;
109                }
110                chef.save(function (err, chef) {
111                    if (err) return res.send(500, err.message);
112
113                    // return the information including token as JSON
114                    chef.password = "";
115                    res.json({
116                        user: chef,
117                        success: true,
118                        message: 'Enjoy your token!',
119                        token: tokenGenerated
120                    });
121                });
122            }
123        }
124    });
125};