aboutsummaryrefslogtreecommitdiffstats
path: root/routes/users.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2014-09-02 16:10:12 -0700
committerAdam Soltys <[email protected]>2014-09-02 16:10:12 -0700
commit8426aa8ef3a97d8d8fda7eb70bab8efe74b3c3f3 (patch)
tree4db560a0937f12bdc1d62470299005b60304b6cf /routes/users.js
parent120efd8d820ee1c76ca4c9504292d8101e721711 (diff)
downloadcoinos-server-8426aa8ef3a97d8d8fda7eb70bab8efe74b3c3f3.tar.gz
coinos-server-8426aa8ef3a97d8d8fda7eb70bab8efe74b3c3f3.zip
Verify email
Diffstat (limited to 'routes/users.js')
-rw-r--r--routes/users.js56
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,
+ 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()));
+ });
+ }
+ });
}
};
};