Skip to content

Instantly share code, notes, and snippets.

@diorahman
Created May 11, 2012 04:10
Show Gist options
  • Save diorahman/2657479 to your computer and use it in GitHub Desktop.
Save diorahman/2657479 to your computer and use it in GitHub Desktop.
Default js
var USERS = 'holahalo_users'
var USERTOKENS = 'holahalo_user_tokens'
var USEREMAILS = 'holahalo_user_emails'
var db = require('riak-js').getClient()
var _ = require('underscore')
var async = require('async')
var USERS = 'holahalo_users'
var USERTOKENS = 'holahalo_user_tokens'
var USEREMAILS = 'holahalo_user_emails'
function UserError (msg) {
Error.call(this);
Error.captureStackTrace(this, arguments.callee);
this.message = msg;
this.name = 'UserError';
};
UserError.prototype.__proto__ = Error.prototype;
function userDefault(){
var user = {
username : 'holahalo',
password : 'aegislabs',
email: '[email protected]',
userToken : '2f88b6fe-d6d1-4764-bce5-f7ae55bfa559'
}
function saveUser(tokenAndEmail, cb){
db.exists(USERS, user.username, function(err, exists, meta){
if(exists) return cb(new UserError('User already exists'))
var obj = {
username : user.username,
password : user.password,
email : user.email
}
_.extend(obj, {timestamp : Date ()})
db.save(USERS, user.username, obj, {links: [
{tag : 'user_token', key : tokenAndEmail.userToken, bucket : USERTOKENS},
{tag : 'user_email', key : tokenAndEmail.userEmail, bucket : USEREMAILS},
]},
function(err, obj, meta){
var objUser = {
username : user.username,
}
_.extend(objUser, tokenAndEmail)
cb(err, objUser)
})
})
}
function saveUserEmail(token, cb){
var email = {
userEmail : user.email
}
db.exists(USEREMAILS, user.email, function(err, exists, meta){
if(exists) return cb(new UserError('Email already exists'))
db.save(USEREMAILS, user.email, email, function(err, obj, meta){
_.extend(email, token)
_.extend(email, {timestamp : Date()})
cb(err, email)
})
})
}
function generateToken(cb){
cb(null, {userToken : user.userToken})
}
function saveUserToken(userObj, cb){
var token = {username : userObj.username, userToken : userObj.userToken}
_.extend(token, {timestamp : Date()})
db.save(USERTOKENS, userObj.userToken, token, function(err, obj, meta){
cb(err, userObj)
})
}
function isExists(cb){
async.parallel({
User : function(callback){
db.exists(USERS, user.username, function(err, exists, meta){
callback(err, exists)
})
},
Email : function(callback){
db.exists(USEREMAILS, user.email, function(err, exists, meta){
callback(err, exists)
})
}
}, function(err, result){
if(err) return next(notAuthorized())
var errList = []
_.each(Object.keys(result), function(k, i){
if(result[k]){
errList.push(k + ' already exists')
}
if(i == Object.keys(result).length - 1) {
if(errList.length > 0) return cb(new UserError(errList.join(', ')))
return cb(null, false)
}
})
})
}
function save(){
async.waterfall([
function(callback){
generateToken(callback)
},
function(token, callback){
saveUserEmail(token, callback)
},
function(tokenAndEmail, callback){
saveUser(tokenAndEmail, callback)
},
function(userObj, callback){
saveUserToken(userObj, callback)
}
], function (err, result) {
if(err) return console.log(err.message)
var obj = {
code : 'Success',
message : 'Success'
}
_.extend(obj, result)
console.log(result)
});
}
isExists(function(err, exists){
if(err) {console.log(err.message)}
save()
});
}
userDefault()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment