diff options
Diffstat (limited to 'src/routes')
| -rw-r--r-- | src/routes/calculator.coffee | 28 | ||||
| -rw-r--r-- | src/routes/calculator.js | 42 | ||||
| -rw-r--r-- | src/routes/sessions.coffee | 21 | ||||
| -rw-r--r-- | src/routes/sessions.js | 34 | ||||
| -rw-r--r-- | src/routes/transactions.coffee | 38 | ||||
| -rw-r--r-- | src/routes/transactions.js | 48 | ||||
| -rw-r--r-- | src/routes/users.coffee | 98 | ||||
| -rw-r--r-- | src/routes/users.js | 130 |
8 files changed, 439 insertions, 0 deletions
diff --git a/src/routes/calculator.coffee b/src/routes/calculator.coffee new file mode 100644 index 00000000..891fdce8 --- /dev/null +++ b/src/routes/calculator.coffee @@ -0,0 +1,28 @@ +exports.new = (req, res) -> + res.render('calculator/setup') + +exports.sweep = (req, res) -> + res.render('calculator/sweep', layout: 'layout') + +exports.show = (req, res) -> + res.render('calculator/show', layout: 'layout', x: 'meow') + +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/calculator.js b/src/routes/calculator.js new file mode 100644 index 00000000..3e067df6 --- /dev/null +++ b/src/routes/calculator.js @@ -0,0 +1,42 @@ +(function() { + exports["new"] = function(req, res) { + return res.render('calculator/setup'); + }; + + exports.sweep = function(req, res) { + return res.render('calculator/sweep', { + layout: 'layout' + }); + }; + + exports.show = function(req, res) { + return res.render('calculator/show', { + layout: 'layout', + x: 'meow' + }); + }; + + exports.ticker = function(req, res) { + var fs; + fs = require('fs'); + return fs.readFile("./public/js/rates.json", function(err, data) { + var e, exchange, _base, _base1, _base2; + (_base = req.query).currency || (_base.currency = 'CAD'); + (_base1 = req.query).symbol || (_base1.symbol = 'quadrigacx'); + (_base2 = req.query).type || (_base2.type = 'bid'); + try { + exchange = JSON.parse(data)[req.query.currency][req.query.symbol]['rates'][req.query.type].toString(); + } catch (_error) { + e = _error; + exchange = "0"; + } + res.writeHead(200, { + 'Content-Length': exchange.length, + 'Content-Type': 'text/plain' + }); + res.write(exchange); + return res.end(); + }); + }; + +}).call(this); diff --git a/src/routes/sessions.coffee b/src/routes/sessions.coffee new file mode 100644 index 00000000..775c52ac --- /dev/null +++ b/src/routes/sessions.coffee @@ -0,0 +1,21 @@ +module.exports = (passport) -> + new: (req, res) -> + res.render('sessions/new') + + create: (req, res, next) -> + passport.authenticate('local', (err, user, info) -> + if (err) + return next(err) + if (!user) + return res.render('sessions/new', badpw: true) + req.login(user, (err) -> + if (err) + return next(err) + url = "/#{user.username}/edit" + return res.redirect(url) + ) + )(req, res, next) + + destroy: (req, res) -> + req.logout() + res.redirect('/login') diff --git a/src/routes/sessions.js b/src/routes/sessions.js new file mode 100644 index 00000000..f038b484 --- /dev/null +++ b/src/routes/sessions.js @@ -0,0 +1,34 @@ +(function() { + module.exports = function(passport) { + return { + "new": function(req, res) { + return res.render('sessions/new'); + }, + create: function(req, res, next) { + return passport.authenticate('local', function(err, user, info) { + if (err) { + return next(err); + } + if (!user) { + return res.render('sessions/new', { + badpw: true + }); + } + return req.login(user, function(err) { + var url; + if (err) { + return next(err); + } + url = "/" + user.username + "/edit"; + return res.redirect(url); + }); + })(req, res, next); + }, + destroy: function(req, res) { + req.logout(); + return res.redirect('/login'); + } + }; + }; + +}).call(this); diff --git a/src/routes/transactions.coffee b/src/routes/transactions.coffee new file mode 100644 index 00000000..0bdaeed6 --- /dev/null +++ b/src/routes/transactions.coffee @@ -0,0 +1,38 @@ +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' + ) + diff --git a/src/routes/transactions.js b/src/routes/transactions.js new file mode 100644 index 00000000..97fc5659 --- /dev/null +++ b/src/routes/transactions.js @@ -0,0 +1,48 @@ +(function() { + var db; + + db = require('../redis'); + + module.exports = { + json: function(req, res) { + var r, user; + user = req.params.user; + r = { + 'transactions': [] + }; + return db.lrange("" + user + ":transactions", 0, -1, function(err, transactions) { + var i, process; + process = function(err, t) { + r.transactions.push(t); + if (i >= transactions.length) { + res.write(JSON.stringify(r)); + return res.end(); + } else { + return db.hgetall("" + user + ":transactions:" + transactions[i++], process); + } + }; + i = 0; + return db.hgetall("" + user + ":transactions:" + transactions[i++], process); + }); + }, + create: function(req, res) { + var user; + user = req.params.user; + return db.incr('transactions', function(err, id) { + return db.hmset("" + user + ":transactions:" + id, req.body, function() { + return db.rpush("" + user + ":transactions", id, function() { + res.write(JSON.stringify(req.body)); + return res.end(); + }); + }); + }); + }, + index: function(req, res) { + return res.render('transactions/index', { + user: req.params.user, + layout: 'layout' + }); + } + }; + +}).call(this); diff --git a/src/routes/users.coffee b/src/routes/users.coffee new file mode 100644 index 00000000..db4dde03 --- /dev/null +++ b/src/routes/users.coffee @@ -0,0 +1,98 @@ +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() + ) + + index: (req, res) -> + return + db.keys('*', (err, obj) -> + res.write(JSON.stringify(obj)) + res.end() + ) + + list: (req, res) -> + res.render('users/index', + layout: 'layout' + ) + + show: (req, res) -> + db.hgetall("user:"+req.params.user, (err, obj) -> + if obj + res.render('calculator/show', + user: req.params.user, + layout: 'layout' + ) + else + res.render('sessions/new', + notice: true + ) + ) + + new: (req, res) -> + res.render('users/new', + 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', + 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('calculator/setup', + user: req.params.user, + layout: 'layout' + ) + + update: (req, res) -> + return unless req.params.user is req.user.username or + req.user.username is 'admin' or req.user.username is 'ben' + 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}") + ) + ) + ) diff --git a/src/routes/users.js b/src/routes/users.js new file mode 100644 index 00000000..137d5bb9 --- /dev/null +++ b/src/routes/users.js @@ -0,0 +1,130 @@ +(function() { + var bcrypt, db; + + db = require("../redis"); + + bcrypt = require('bcrypt'); + + module.exports = function(sessions) { + return { + exists: function(req, res) { + return db.hgetall("user:" + req.params.user, function(err, obj) { + if (obj != null) { + res.write('true'); + } else { + res.write('false'); + } + return res.end(); + }); + }, + json: function(req, res) { + return db.hgetall("user:" + req.params.user, function(err, obj) { + delete obj['password']; + res.writeHead(200, { + "Content-Type": "application/json" + }); + res.write(JSON.stringify(obj)); + return res.end(); + }); + }, + index: function(req, res) { + return; + return db.keys('*', function(err, obj) { + res.write(JSON.stringify(obj)); + return res.end(); + }); + }, + list: function(req, res) { + return res.render('users/index', { + layout: 'layout' + }); + }, + show: function(req, res) { + return db.hgetall("user:" + req.params.user, function(err, obj) { + if (obj) { + return res.render('calculator/show', { + user: req.params.user, + layout: 'layout' + }); + } else { + return res.render('sessions/new', { + notice: true + }); + } + }); + }, + "new": function(req, res) { + return res.render('users/new', { + js: (function() { + return global.js; + }), + css: (function() { + return global.css; + }) + }); + }, + create: function(req, res) { + var errormsg, userkey; + errormsg = ""; + userkey = "user:" + req.body.username; + return db.hgetall(userkey, function(err, obj) { + if (obj) { + return res.redirect(req.body.username); + } else { + if (req.body.confirm !== req.body.password) { + errormsg += "Passwords must match"; + return res.render('users/new', { + js: (function() { + return global.js; + }), + css: (function() { + return global.css; + }), + error: errormsg + }); + } + return bcrypt.hash(req.body.password, 12, function(err, hash) { + db.sadd("users", userkey); + return db.hmset(userkey, { + username: req.body.username, + password: hash, + email: req.body.email + }, function() { + req.headers['referer'] = "/" + req.body.username + "/edit"; + return sessions.create(req, res); + }); + }); + } + }); + }, + edit: function(req, res) { + return res.render('calculator/setup', { + user: req.params.user, + layout: 'layout' + }); + }, + update: function(req, res) { + if (!(req.params.user === req.user.username || req.user.username === 'admin' || req.user.username === 'ben')) { + return; + } + if (req.body.password === '') { + delete req.body.password; + } + return db.hmset("user:" + req.params.user, req.body, function() { + if (req.body.password == null) { + return res.redirect("/" + req.params.user); + } else { + return bcrypt.hash(req.body.password, 12, function(err, hash) { + return db.hmset("user:" + req.params.user, { + password: hash + }, function() { + return res.redirect("/" + req.params.user); + }); + }); + } + }); + } + }; + }; + +}).call(this); |
