From da65bcb2888d4af403a632a8d43662f3f68d4ecc Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 20 Nov 2012 18:20:46 -0800 Subject: Password authentication --- app.coffee | 103 +++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 76 insertions(+), 27 deletions(-) (limited to 'app.coffee') diff --git a/app.coffee b/app.coffee index decf269a..f60fdd25 100644 --- a/app.coffee +++ b/app.coffee @@ -3,15 +3,38 @@ http = require('http') path = require('path') engines = require('consolidate') passport = require('passport') +bcrypt = require('bcrypt') config = require('./config') app = express() +LocalStrategy = require('passport-local').Strategy +passport.use(new LocalStrategy( + (username, password, done) -> + user = {username: 'soltysa', password: 'adam'} + return done(null, user) +)) + +passport.serializeUser((user, done) -> + done(null, user.username) +) + +passport.deserializeUser((id, done) -> + user = {username: 'soltysa', password: 'adam'} + done(null, user) +) + app.engine('html', engines.hogan) +app.enable('trust proxy') app.set('view engine', 'html') app.set('views', __dirname + '/views') app.use(express.static(__dirname + '/public')) app.use(require('connect-assets')(src: 'public')) -app.use(express.bodyParser()); +app.use(express.bodyParser()) +app.use(express.cookieParser()) +app.use(express.session(secret: 'weareallmadeofstars')) +app.use(passport.initialize()) +app.use(passport.session()) +app.use(app.router) app.use((err, req, res, next) -> res.status(500) console.log(err) @@ -22,8 +45,19 @@ app.get('/', (req, res) -> res.render('index', js: (-> global.js), css: (-> global.css)) ) +app.get('/bcrypt', (req, res) -> + salt = "$2a$10$3R8tUtIoU/fllQD9zEgTZe" + hash = bcrypt.hashSync("chelsea", salt) + res.write(salt + "\n") + res.write(hash) + res.end() +) + app.get('/:user/report', (req, res) -> - res.render('report', user: req.params.user, js: (-> global.js), css: (-> global.css)) + res.render('report', + user: req.params.user, + js: (-> global.js), + css: (-> global.css)) ) app.get('/:user.json', (req, res) -> @@ -54,44 +88,63 @@ app.get('/:user/transactions', (req, res) -> ) ) - app.get('/ticker', (req, res) -> - t = setTimeout(-> - res.writeHead(500, {'Content-Type': 'text/plain'}) - res.end() - , 2000) - options = host: 'bitcoincharts.com', - path: '/t/depthcalc.json?symbol=' + req.query.symbol + '&type=bid&amount=1000¤cy=true' + path: '/t/depthcalc.json?symbol=' + + req.query.symbol + + '&type=bid&amount=1000¤cy=true' require('http').get(options, (r) -> r.setEncoding('utf-8') r.on('data', (chunk) -> - clearTimeout(t) - res.send(chunk) + res.writeHead(200, + 'Content-Length': chunk.length, + 'Content-Type': 'text/plain') + res.write(chunk) res.end() ) ) ) -app.post('/login', - passport.authenticate('local'), - (req, res) -> - res.redirect('/users/' + req.user.username) +app.get('/login', (req, res) -> + res.render('login', + js: (-> global.js), + css: (-> global.css) + ) +) + +app.post('/login', (req, res, next) -> + passport.authenticate('local', (err, user, info) -> + if (err) + return next(err) + if (!user) + return res.redirect('/login') + req.logIn(user, (err) -> + if (err) + return next(err) + return res.redirect('/' + user.username) + ) + )(req, res, next) ) app.post('/users', (req, res) -> if req.body.login - db = require("redis").createClient() - db.exists(req.body.login, (err, obj) -> - if obj - res.redirect(req.body.login) - else - db.hmset(req.body.login, req.body, -> - res.redirect(req.body.login) + if req.body.password + bcrypt.hash(req.body.password, 12, (err, hash) -> + db = require("redis").createClient() + db.hget(req.body.login, 'password', (err, password) -> + bcrypt.compare(req.body.password, password, (err, match) -> + if match + req.body.password = password + db.hmset(req.body.login, req.body, -> + res.redirect(req.body.login) + ) + else + res.redirect(req.body.login) + ) ) - ) + ) else params = [] for k,v of req.body @@ -137,9 +190,5 @@ app.get('/:user', (req, res) -> ) ) -app.use((err, req, res, next) -> - console.log(err) -) - app.listen(3000) -- cgit v1.2.3