Files
CloudBudget/app/controllers/users.js

79 lines
2.7 KiB
JavaScript

var mongoose = require('mongoose'),
User = mongoose.model('User'),
jwt = require('jsonwebtoken'),
security = require('../../config/security'),
Handler = require('../helpers/handler'),
EventEmitter = require('../events/listeners');
module.exports = {
login : function(request, response) {
var user = request.user;
if( !user ) {
return response.status(401).json({message: 'Authentication failed'});
}
return response.json(
{
username: user.username,
token: jwt.sign(
{
user_id: user.id
}, security.jwt.secretOrKey)
});
},
logout : function(request, response) {
return response.status(200).end();
},
subscribe : function(request, response) {
var registered = new User({username: request.body.username, password: request.body.password});
registered.validate(function(errors) {
if( errors ) {
return Handler.errorHandler(errors, 400, response);
}
User.findOne({username: request.body.username}, function(error, user) {
if( error ) {
return response.send(error);
}
if( !user ) {
registered.save(function(errors) {
if( errors ) {
return Handler.errorHandler(errors, 500, response);
}
return response.status(201).json({
username: registered.username,
token: jwt.sign(
{
user_id: registered.id
}, security.jwt.secretOrKey)
});
});
} else {
return response.status(409).json({message: 'Account already exists'});
}
});
});
},
unsubscribe : function(request, response) {
var user = request.user;
if( !user ) {
return response.status(401).json({message: 'Authentication failed'});
}
User.remove({username: user.username}, function(error) {
if( error ) {
return response.status(500).send(error);
}
EventEmitter.eventEmitter.emit(EventEmitter.events.ACCOUNTS_DELETE_BY_USER_ID_EVT, user.id);
return response.status(204).end();
});
}
}