2015-03-20 14:21:44 -07:00

83 lines
2.2 KiB
JavaScript

var UserStore = require('../../../persistence/users');
var tokenService = require('../../../../../shared/token');
var SESSION_CONFIG = require('../../../../../shared/config/session.json');
module.exports = function(app){
return new Remote(app);
};
var Remote = function(app){
this.app = app;
};
var remote = Remote.prototype;
/**
* Register user.
*
* @param {object} userObj object containing userObj.user and userObj.pass
* @param {Function} cb
* @return {Void}
*/
remote.register = function(userObj, cb){
UserStore.create({
username : userObj.username,
password : userObj.password,
email : userObj.email,
chips : 100000
}, function(e, user){
if(e){
cb(e);
}else{
cb(null, user);
}
});
};
/**
* Auth via user/pass or token, and check for expiry.
*
* @param {object|string} input token or object containing username and password
* @param {Function} cb
* @return {Void}
*/
remote.auth = function(input, cb){
if(typeof input === 'string'){
var res = tokenService.parse(input, SESSION_CONFIG.secret);
if(!res){
cb('invalid-token');
return;
}
if(!checkExpire(res, SESSION_CONFIG.expire)){
cb('token-expired');
return;
}
UserStore.getByAttr('id', res.uid, false, function(e, user){
if(e){
cb('invalid-user');
return;
}
cb(null, user);
});
}else{
UserStore.getByAttr(['username', 'password'], [input.username, input.password], false, function(e, user){
if(!user){
cb('invalid-user');
}else{
cb(null, user, tokenService.create(user.id, Date.now(), SESSION_CONFIG.secret));
}
});
}
};
/**
* Check the token whether expire.
*
* @param {Object} token token info
* @param {Number} expire expire time
* @return {Boolean} true for not expire and false for expire
*/
var checkExpire = function(token, expire){
if(expire < 0){
// negative expire means never expire
return true;
}
return (Date.now() - token.timestamp) < expire;
};