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

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