aboutsummaryrefslogtreecommitdiffstats
path: root/app.coffee
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2012-11-20 18:20:46 -0800
committerAdam Soltys <[email protected]>2012-11-20 18:20:46 -0800
commitda65bcb2888d4af403a632a8d43662f3f68d4ecc (patch)
treec855c6c37630cb0333d767ca4ad425834790d6c1 /app.coffee
parent105090013ed42b0e262ea747424e25a5005bdb4b (diff)
downloadcoinos-server-da65bcb2888d4af403a632a8d43662f3f68d4ecc.tar.gz
coinos-server-da65bcb2888d4af403a632a8d43662f3f68d4ecc.zip
Password authentication
Diffstat (limited to 'app.coffee')
-rw-r--r--app.coffee103
1 files changed, 76 insertions, 27 deletions
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&currency=true'
+ path: '/t/depthcalc.json?symbol=' +
+ req.query.symbol +
+ '&type=bid&amount=1000&currency=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)