users.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. var mongoose = require('mongoose'),
  2. User = mongoose.model('User'),
  3. jwt = require('jsonwebtoken'),
  4. security = require('../../config/security'),
  5. Handler = require('../helpers/handler'),
  6. EventEmitter = require('../events/listeners');
  7. module.exports = {
  8. login : function(request, response) {
  9. var user = request.user;
  10. if( !user ) {
  11. return response.status(401).json({message: 'Authentication failed'});
  12. }
  13. return response.json(
  14. {
  15. username: user.username,
  16. token: jwt.sign(
  17. {
  18. user_id: user.id
  19. }, security.jwt.secretOrKey)
  20. });
  21. },
  22. logout : function(request, response) {
  23. return response.status(200).end();
  24. },
  25. subscribe : function(request, response) {
  26. var registered = new User({username: request.body.username, password: request.body.password});
  27. registered.validate(function(errors) {
  28. if( errors ) {
  29. return Handler.errorHandler(errors, 400, response);
  30. }
  31. User.findOne({username: request.body.username}, function(error, user) {
  32. if( error ) {
  33. return response.send(error);
  34. }
  35. if( !user ) {
  36. registered.save(function(errors) {
  37. if( errors ) {
  38. return Handler.errorHandler(errors, 500, response);
  39. }
  40. return response.status(201).json({
  41. username: registered.username,
  42. token: jwt.sign(
  43. {
  44. user_id: registered.id
  45. }, security.jwt.secretOrKey)
  46. });
  47. });
  48. } else {
  49. return response.status(409).json({message: 'Account already exists'});
  50. }
  51. });
  52. });
  53. },
  54. unsubscribe : function(request, response) {
  55. var user = request.user;
  56. if( !user ) {
  57. return response.status(401).json({message: 'Authentication failed'});
  58. }
  59. User.remove({username: user.username}, function(error) {
  60. if( error ) {
  61. return response.status(500).send(error);
  62. }
  63. EventEmitter.eventEmitter.emit(EventEmitter.events.ACCOUNTS_DELETE_BY_USER_ID_EVT, user.id);
  64. return response.status(204).end();
  65. });
  66. }
  67. }