diff options
Diffstat (limited to 'src/routes/users.js')
| -rw-r--r-- | src/routes/users.js | 130 |
1 files changed, 130 insertions, 0 deletions
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); |
