You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

125 lines
4.3 KiB

var express = require('express');
var app = express();
var jwt = require('jsonwebtoken');
var config = require('../config/config');
var crypto = require('crypto');
app.set('superSecret', config.secret);
/*******MODELS*********/
//var chefModel = require('../models/chefModel');
var userModel = require('../models/userModel');
var dietModel = require('../models/dietModel');
/**GET '/chefs' **/
exports.getChefs = function (req, res) {
userModel.find({role: 'chef'})
.limit(Number(req.query.pageSize))
.skip(Number(req.query.pageSize)*Number(req.query.page))
.exec(function (err, chefs) {
if (err) return res.send(500, err.message);
res.status(200).jsonp(chefs);
});
};
/** GET '/chefs/:chefid' **/
exports.getChefById = function (req, res) {
userModel.findOne({_id: req.params.chefid})
.lean()
.populate('diets', 'title description')
.exec(function (err, chef) {
if (err) return res.send(500, err.message);
res.status(200).jsonp(chef);
});
};
/** PUT '/chefs/:chefid' **/
exports.updateChefById = function (req, res) {
var id = req.params.chefid;
var chef = req.body;
userModel.update({"_id": id}, chef,
function (err) {
if (err) return console.log(err);
console.log(chef);
res.status(200).jsonp(chef);
});
};
/** DELETE '/chefs/:chefid' **/
exports.deleteChefById = function (req, res) {
userModel.findByIdAndRemove({_id: req.params.chefid}, function (err) {
if (err) return res.send(500, err.message);
res.status(200).send("Chef deleted");
});
};
/** POST '/chefs/register' **/
exports.register = function (req, res) {
var chef = new userModel({
name: req.body.name,
password: crypto.createHash('sha256').update(req.body.password).digest('base64'),
email: req.body.email,
role: req.body.role
});
chef.save(function (err, chef) {
if (err) return res.send(500, err.message);
res.status(200).jsonp(chef);
});
};
/** POST '/chefs/login' **/
exports.login = function (req, res) {
userModel.findOne({
email: req.body.email
})
.select('+password')
.exec(function (err, chef) {
if (err) throw err;
if (!chef) {
res.json({success: false, message: 'Authentication failed. chef not found.'});
} else if (chef) {
req.body.password = crypto.createHash('sha256').update(req.body.password).digest('base64');
if (chef.password != req.body.password) {
res.json({success: false, message: 'Authentication failed. Wrong password.'});
} else {
var indexToken = -1;
for (var i = 0; i < chef.tokens.length; i++) {
if (chef.tokens[i].userAgent == req.body.userAgent) {
indexToken = JSON.parse(JSON.stringify(i));
}
}
console.log(indexToken);
if (indexToken == -1) {//userAgent no exist
var tokenGenerated = jwt.sign({foo: 'bar'}, app.get('superSecret'), {
// expiresIn: 86400 // expires in 24 hours
});
var newToken = {
userAgent: req.body.userAgent,
token: tokenGenerated
};
chef.tokens.push(newToken);
} else {//userAgent already exist
chef.tokens[indexToken].token = "";
var tokenGenerated = jwt.sign({foo: 'bar'}, app.get('superSecret'), {
// expiresIn: 86400 // expires in 24 hours
});
chef.tokens[indexToken].token = tokenGenerated;
}
chef.save(function (err, chef) {
if (err) return res.send(500, err.message);
// return the information including token as JSON
chef.password = "";
res.json({
user: chef,
success: true,
message: 'Enjoy your token!',
token: tokenGenerated
});
});
}
}
});
};