Skip to content

Instantly share code, notes, and snippets.

@eldargab
Created February 1, 2013 19:29
Show Gist options
  • Save eldargab/4693486 to your computer and use it in GitHub Desktop.
Save eldargab/4693486 to your computer and use it in GitHub Desktop.
var Flow = require('make-flow')
var crypto = require('crypto')
function Hash (str) {
var salt = '%9023t89gisuhslKLJifsdjl;apasfk<klas,Q%G@0jq39'
return crypto.createHash('sha256').update(salt + str).digest('hex')
}
var login = Flow()
.def('users', function (done) {
db.collection('user', done)
})
.def('username', function (req) {
if (!req.username) throw new Error('Username is not passed')
return req.username
})
.def('password', function (req) {
if (!req.password) throw new Error('Password is not passed')
return req.password
})
.def('exists', function (users, username, password, done) {
users.findOne({username: username, password: Hash(password)}, function (err, usr) {
done(err, !!user)
})
})
.def('login', function (username, exists, users, done) {
if (!exists) return done(new Error('User not found'))
var token = Hash(Math.random())
users.update({username: username}, {$set: {authToken: token}}, function (err) {
done(err, token)
})
})
module.exports = function (req, res, next) {
login.run().set('req', req).eval('login', function (err, login) {
if (!err) return res.send({authToken: login})
if (err._task == 'username' || err._task == 'password' || /not found/.test(err.message)) {
err.status = 406
} else {
err.status = 500
}
next(err)
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment