diff options
| author | Adam Soltys <[email protected]> | 2014-09-02 16:10:12 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2014-09-02 16:10:12 -0700 |
| commit | 8426aa8ef3a97d8d8fda7eb70bab8efe74b3c3f3 (patch) | |
| tree | 4db560a0937f12bdc1d62470299005b60304b6cf /routes/users.js | |
| parent | 120efd8d820ee1c76ca4c9504292d8101e721711 (diff) | |
| download | coinos-server-8426aa8ef3a97d8d8fda7eb70bab8efe74b3c3f3.tar.gz coinos-server-8426aa8ef3a97d8d8fda7eb70bab8efe74b3c3f3.zip | |
Verify email
Diffstat (limited to 'routes/users.js')
| -rw-r--r-- | routes/users.js | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/routes/users.js b/routes/users.js index 2e94f027..31912c40 100644 --- a/routes/users.js +++ b/routes/users.js @@ -1,8 +1,10 @@ (function() { - var bcrypt, db; + var bcrypt, config, db; db = require("../redis"); + config = require("../config"); + bcrypt = require('bcrypt'); module.exports = function(sessions) { @@ -32,8 +34,9 @@ }, show: function(req, res) { return db.hgetall("user:" + req.params.user, function(err, obj) { + var options; if (obj) { - return res.render('users/show', { + options = { user: req.params.user, layout: 'layout', navigation: true, @@ -43,7 +46,12 @@ css: (function() { return global.css; }) - }); + }; + if (req.session.verified != null) { + options.verified = true; + } + res.render('users/show', options); + return delete req.session.verified; } else { return res.render('sessions/new', { notice: true, @@ -90,7 +98,7 @@ error: errormsg }); } - return bcrypt.hash(req.body.password, 12, function(err, hash) { + bcrypt.hash(req.body.password, 12, function(err, hash) { db.sadd("users", userkey); return db.hmset(userkey, { username: req.body.username, @@ -101,6 +109,33 @@ return sessions.create(req, res); }); }); + return require('crypto').randomBytes(48, function(ex, buf) { + var token, url; + token = buf.toString('base64').replace(/\//g, '').replace(/\+/g, ''); + db.set(token, req.body.username); + url = "" + req.protocol + "://" + req.hostname + ":3000/verify/" + token; + return res.render('users/welcome', { + user: req.params.user, + layout: 'mail', + url: url, + js: (function() { + return global.js; + }), + css: (function() { + return global.css; + }) + }, function(err, html) { + var email, sendgrid; + sendgrid = require('sendgrid')(config.sendgrid_user, config.sendgrid_password); + email = new sendgrid.Email({ + to: req.body.email, + from: '[email protected]', + subject: 'Welcome to CoinOS', + html: html + }); + return sendgrid.send(email); + }); + }); } }); }, @@ -134,6 +169,19 @@ }); } }); + }, + verify: function(req, res) { + return db.get(req.params.token, function(err, reply) { + if (err || !reply) { + res.write('Invalid token'); + return res.end(); + } else { + return db.hset("user:" + (reply.toString()), "verified", "true", function() { + req.session.verified = true; + return res.redirect("/" + (reply.toString())); + }); + } + }); } }; }; |
