diff options
Diffstat (limited to 'src/routes')
| -rw-r--r-- | src/routes/calculator.coffee | 27 | ||||
| -rw-r--r-- | src/routes/sessions.coffee | 35 | ||||
| -rw-r--r-- | src/routes/transactions.coffee | 41 | ||||
| -rw-r--r-- | src/routes/users.coffee | 97 |
4 files changed, 200 insertions, 0 deletions
diff --git a/src/routes/calculator.coffee b/src/routes/calculator.coffee new file mode 100644 index 00000000..4f3ac0b5 --- /dev/null +++ b/src/routes/calculator.coffee @@ -0,0 +1,27 @@ +exports.sweep = (req, res) -> + res.render('calculator/sweep', + layout: 'layout', + navigation: true, + js: (-> global.js), + css: (-> global.css) + ) + +exports.ticker = (req, res) -> + fs = require('fs') + fs.readFile("./public/js/rates.json", (err, data) -> + req.query.currency ||= 'CAD' + req.query.symbol ||= 'quadrigacx' + req.query.type ||= 'bid' + + try + exchange = JSON.parse(data)[req.query.currency][req.query.symbol]['rates'][req.query.type].toString() + catch e + exchange = "0" + + res.writeHead(200, + 'Content-Length': exchange.length, + 'Content-Type': 'text/plain') + res.write(exchange) + res.end() + ) + diff --git a/src/routes/sessions.coffee b/src/routes/sessions.coffee new file mode 100644 index 00000000..67efba75 --- /dev/null +++ b/src/routes/sessions.coffee @@ -0,0 +1,35 @@ +module.exports = (passport) -> + new: (req, res) -> + res.render('sessions/new', + layout: 'layout', + js: (-> global.js), + css: (-> global.css) + ) + + create: (req, res, next) -> + passport.authenticate('local', (err, user, info) -> + if (err) + return next(err) + if (!user) + return res.render('sessions/new', + layout: 'layout', + js: (-> global.js), + css: (-> global.css), + badpw: true + ) + req.login(user, (err) -> + if (err) + return next(err) + + if /edit/.test(req.headers['referer']) + url = "/#{user.username}/edit" + else + url = "/#{user.username}" + + return res.redirect(url) + ) + )(req, res, next) + + destroy: (req, res) -> + req.logout() + res.redirect('/login') diff --git a/src/routes/transactions.coffee b/src/routes/transactions.coffee new file mode 100644 index 00000000..b4653362 --- /dev/null +++ b/src/routes/transactions.coffee @@ -0,0 +1,41 @@ +db = require('../redis') + +module.exports = + json: (req, res) -> + user = req.params.user + r = 'transactions': [] + + db.lrange("#{user}:transactions", 0, -1, (err, transactions) -> + process = (err, t) -> + r.transactions.push t + + if i >= transactions.length + res.write(JSON.stringify(r)) + res.end() + else + db.hgetall("#{user}:transactions:#{transactions[i++]}", process) + + i = 0 + db.hgetall("#{user}:transactions:#{transactions[i++]}", process) + ) + + create: (req, res) -> + user = req.params.user + db.incr('transactions', (err, id) -> + db.hmset("#{user}:transactions:#{id}", req.body, -> + db.rpush("#{user}:transactions", id, -> + res.write(JSON.stringify(req.body)) + res.end() + ) + ) + ) + + index: (req, res) -> + res.render('transactions/index', + user: req.params.user, + layout: 'layout', + navigation: true, + js: (-> global.js), + css: (-> global.css) + ) + diff --git a/src/routes/users.coffee b/src/routes/users.coffee new file mode 100644 index 00000000..a213f678 --- /dev/null +++ b/src/routes/users.coffee @@ -0,0 +1,97 @@ +db = require("../redis") +bcrypt = require('bcrypt') + +module.exports = (sessions) -> + exists: (req, res) -> + db.hgetall("user:"+req.params.user, (err, obj) -> + if obj? then res.write('true') else res.write('false') + res.end() + ) + + json: (req, res) -> + db.hgetall("user:"+req.params.user, (err, obj) -> + delete obj['password'] + res.writeHead(200, {"Content-Type": "application/json"}); + res.write(JSON.stringify(obj)) + res.end() + ) + + show: (req, res) -> + db.hgetall("user:"+req.params.user, (err, obj) -> + if obj + res.render('users/show', + user: req.params.user, + layout: 'layout', + navigation: true, + js: (-> global.js), + css: (-> global.css) + ) + else + res.render('sessions/new', + notice: true, + layout: 'layout', + js: (-> global.js), + css: (-> global.css) + ) + ) + + new: (req, res) -> + res.render('users/new', + layout: 'layout', + js: (-> global.js), + css: (-> global.css) + ) + + create: (req, res) -> + errormsg = "" + userkey = "user:"+req.body.username + db.hgetall(userkey, (err, obj) -> + if obj + res.redirect(req.body.username) + else + if req.body.confirm != req.body.password + errormsg += "Passwords must match" + return res.render('users/new', + layout: 'layout', + js: (-> global.js), + css: (-> global.css), + error: errormsg + ) + + bcrypt.hash(req.body.password, 12, (err, hash) -> + db.sadd("users",userkey) + db.hmset(userkey, + username: req.body.username, + password: hash, + email: req.body.email + , -> + req.headers['referer'] = "/#{req.body.username}/edit" + sessions.create(req, res) + ) + ) + ) + + edit: (req, res) -> + res.render('users/edit', + user: req.params.user, + layout: 'layout', + navigation: true, + js: (-> global.js), + css: (-> global.css) + ) + + update: (req, res) -> + return unless req.params.user is req.user.username or + req.user.username is 'admin' + if req.body.password is '' + delete req.body.password + db.hmset("user:"+req.params.user, req.body, -> + if not req.body.password? + res.redirect("/#{req.params.user}") + else + bcrypt.hash(req.body.password, 12, (err, hash) -> + db.hmset("user:"+req.params.user,password: hash, -> + res.redirect("/#{req.params.user}") + ) + ) + ) |
