aboutsummaryrefslogtreecommitdiffstats
path: root/routes/users.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2017-04-09 22:23:55 -0700
committerAdam Soltys <[email protected]>2017-04-09 22:23:55 -0700
commit5e9334ec60e75b3ee3bc539eedc53fa4e0366e29 (patch)
treebb3954df085a9ae9471a2e4494c60ea03d5ea061 /routes/users.js
parent934cab2a4aebbc85e136cafded24acbf2f20d49a (diff)
downloadcoinos-server-5e9334ec60e75b3ee3bc539eedc53fa4e0366e29.tar.gz
coinos-server-5e9334ec60e75b3ee3bc539eedc53fa4e0366e29.zip
clean up user routes
Diffstat (limited to 'routes/users.js')
-rw-r--r--routes/users.js469
1 files changed, 165 insertions, 304 deletions
diff --git a/routes/users.js b/routes/users.js
index 56db583d..5968a54c 100644
--- a/routes/users.js
+++ b/routes/users.js
@@ -1,319 +1,180 @@
-(function() {
- var Promise, bcrypt, config, db, fs, request;
+const Promise = require('bluebird')
+const db = require("../redis")
+const config = require("../config")
+const bcrypt = require('bcryptjs')
+const fs = require('fs')
+const request = require('request')
- Promise = require('bluebird');
-
- db = require("../redis");
-
- config = require("../config");
-
- bcrypt = require('bcryptjs');
-
- fs = require('fs');
+module.exports = (sessions) => {
+ return {
+ exists: function(req, res) {
+ return db.hgetall("user:" + req.params.user.toLowerCase(), function(err, obj) {
+ if (obj != null) {
+ res.write('true')
+ } else {
+ res.write('false')
+ }
+ return res.end()
+ })
+ },
+ index: function(req, res) {
+ var result
+ result = {
+ 'users': []
+ }
+ return db.keysAsync("user:*").then(function(users) {
+ return Promise.all(users.map(function(key) {
+ return db.hgetallAsync(key).then(function(user) {
+ delete user['password']
+ return result.users.push(user)
+ })
+ }))
+ }).then(function() {
+ res.status(200).json(JSON.stringify(result))
+ })
+ },
+ json: function(req, res) {
+ if (!req.params.user) {
+ res.end()
+ }
+ return db.llen((req.params.user.toLowerCase()) + ":transactions", function(err, len) {
+ return db.hgetall("user:" + (req.params.user.toLowerCase()), function(err, obj) {
+ delete obj['password']
+ obj['index'] = len
+ res.status(200).json(JSON.stringify(obj))
+ return res.end()
+ })
+ })
+ },
+ create: function(req, res) {
+ const userkey = "user:" + req.body.username
- request = require('request');
+ db.hgetallAsync(userkey).then((err, obj) => {
+ if (obj) {
+ res.status(400).json({ message: 'User exists' })
+ return
+ }
- module.exports = function(sessions) {
- return {
- exists: function(req, res) {
- return db.hgetall("user:" + req.params.user.toLowerCase(), function(err, obj) {
- if (obj != null) {
- res.write('true');
- } else {
- res.write('false');
- }
- return res.end();
- });
- },
- index: function(req, res) {
- var result;
- result = {
- 'users': []
- };
- return db.keysAsync("user:*").then(function(users) {
- return Promise.all(users.map(function(key) {
- return db.hgetallAsync(key).then(function(user) {
- delete user['password'];
- return result.users.push(user);
- });
- }));
- }).then(function() {
- res.writeHead(200, {
- "Content-Type": "application/json"
- });
- res.write(JSON.stringify(result));
- return res.end();
- });
- },
- json: function(req, res) {
- if (!req.params.user) {
- res.end();
+ if (req.body.passconfirm !== req.body.password) {
+ res.status(400).json({ message: 'Passwords must match' })
+ return
}
- return db.llen((req.params.user.toLowerCase()) + ":transactions", function(err, len) {
- return db.hgetall("user:" + (req.params.user.toLowerCase()), function(err, obj) {
- delete obj['password'];
- obj['index'] = len;
- res.writeHead(200, {
- "Content-Type": "application/json"
- });
- res.write(JSON.stringify(obj));
- return res.end();
- });
- });
- },
- show: function(req, res) {
- return db.hgetall("user:" + req.params.user.toLowerCase(), function(err, obj) {
- var ext, options, path;
- if (obj) {
- options = {
- user: req.params.user.toLowerCase(),
- layout: 'layout',
- navigation: true,
- js: (function() {
- return global.js;
- }),
- css: (function() {
- return global.css;
- })
- };
- if (req.query.verified != null) {
- options.verified = true;
- }
- if (obj.logo && obj.logo.length > 3) {
- ext = obj.logo.substr(obj.logo.length - 3);
- path = "public/img/logos/" + obj.username + "." + ext;
- fs.lstat(path, function(err, stats) {
- if ((ext === 'jpg' || ext === 'png' || ext === 'gif') && (err || !stats.isFile())) {
- try {
- return request("" + obj.logo).pipe(fs.createWriteStream(path));
- } catch (undefined) {}
- }
- });
- }
- res.render('users/show', options);
- return delete req.session.verified;
- } else {
- return res.render('sessions/new', {
- notice: true,
- layout: 'layout',
- js: (function() {
- return global.js;
- }),
- css: (function() {
- return global.css;
+
+ bcrypt.hash(req.body.password, 12, function(err, hash) {
+ db.sadd("users", userkey)
+ db.hmset(userkey, {
+ username: req.body.username,
+ password: hash,
+ email: req.body.email,
+ commission: req.body.commission || '',
+ unit: req.body.unit || 'CAD',
+ pubkey: req.body.pubkey || '',
+ privkey: req.body.privkey || ''
+ }, function() {
+ res.status(200).json({ message: 'User added successfully' })
+ require('crypto').randomBytes(48, function(ex, buf) {
+ const token = buf.toString('base64').replace(/\//g, '').replace(/\+/g, '')
+ db.set("token:" + token, req.body.username)
+ host = req.hostname
+ if (host === 'localhost') {
+ host += ':' + req.port
+ }
+ url = req.protocol + "://" + host + "/verify/" + token
+ res.render('users/welcome', {
+ user: req.body.username.toLowerCase(),
+ layout: 'mail',
+ url: url,
+ privkey: req.body.privkey,
+ js: (() => global.js),
+ css: (() => global.css)
+ }, function(err, html) {
+ const helper = require('sendgrid').mail
+ const from_email = new helper.Email('[email protected]')
+ const to_email = new helper.Email(req.body.email)
+ const subject = 'Welcome to CoinOS'
+ const content = new helper.Content('text/html', html)
+ const mail = new helper.Mail(from_email, subject, to_email, content)
+ const sg = require('sendgrid')(config.sendgrid_token)
+ const ereq = sg.emptyRequest({
+ method: 'POST',
+ path: '/v3/mail/send',
+ body: mail.toJSON()
+ })
+ sg.API(ereq, function(error, response) {
+ console.log(response.statusCode)
+ console.log(response.body)
+ console.log(response.headers)
+ })
})
- });
- }
- });
- },
- "new": function(req, res) {
- return res.render('users/new', {
- layout: 'layout',
- 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) {
- errormsg += "Username exists";
- }
- if (req.body.confirm !== req.body.password) {
- errormsg += "Passwords must match";
- }
- if (errormsg) {
- return res.render('users/new', {
- layout: 'layout',
- js: (function() {
- return global.js;
- }),
- css: (function() {
- return global.css;
- }),
- error: errormsg
- });
- }
- 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,
- commission: req.body.commission,
- unit: req.body.unit,
- pubkey: req.body.pubkey,
- privkey: req.body.privkey
+ })
+ })
+ },
+ update: function(req, res) {
+ if (req.body.password === '') {
+ delete req.body.password
+ }
+ db.hmset("user:" + req.params.user.toLowerCase(), req.body, function() {
+ req.session.user = req.body
+ delete req.session.user.password
+ if (req.body.password != null) {
+ bcrypt.hash(req.body.password, 12, function(err, password) {
+ db.hmset("user:" + (req.params.user.toLowerCase()), {
+ email: email,
+ password: password,
+ phone: phone
}, function() {
- req.session.redirect = "/" + req.body.username + "/edit";
- return sessions.create(req, res);
- });
- });
- return require('crypto').randomBytes(48, function(ex, buf) {
- var host, token, url;
- token = buf.toString('base64').replace(/\//g, '').replace(/\+/g, '');
- db.set("token:" + token, req.body.username);
- host = req.hostname;
- if (host === 'localhost') {
- host += ':3000';
- }
- url = req.protocol + "://" + host + "/verify/" + token;
- return res.render('users/welcome', {
- user: req.body.username.toLowerCase(),
- layout: 'mail',
- url: url,
- privkey: req.body.privkey,
- js: (function() {
- return global.js;
- }),
- css: (function() {
- return global.css;
- })
- }, function(err, html) {
- var content, from_email, helper, mail, sg, subject, to_email;
- helper = require('sendgrid').mail;
- from_email = new helper.Email('[email protected]');
- to_email = new helper.Email(req.body.email);
- subject = 'Welcome to CoinOS';
- content = new helper.Content('text/html', html);
- mail = new helper.Mail(from_email, subject, to_email, content);
- sg = require('sendgrid')(config.sendgrid_token);
- request = sg.emptyRequest({
- method: 'POST',
- path: '/v3/mail/send',
- body: mail.toJSON()
- });
- return sg.API(request, function(error, response) {
- console.log(response.statusCode);
- console.log(response.body);
- return console.log(response.headers);
- });
- });
- });
- });
- },
- edit: function(req, res) {
- return res.render('users/edit', {
- user: req.params.user.toLowerCase(),
- layout: 'layout',
- navigation: true,
- js: (function() {
- return global.js;
- }),
- css: (function() {
- return global.css;
- })
- });
- },
- profile: function(req, res) {
- return res.render('users/profile', {
- user: req.params.user.toLowerCase(),
- layout: 'layout',
- navigation: true,
- js: (function() {
- return global.js;
- }),
- css: (function() {
- return global.css;
- })
- });
- },
- update: function(req, res) {
- if (req.body.password === '') {
- delete req.body.password;
- }
- db.hmset("user:" + req.params.user.toLowerCase(), req.body, function() {
- req.session.user = req.body;
- delete req.session.user.password;
- if (req.body.password != null) {
- return bcrypt.hash(req.body.password, 12, function(err, password) {
- return db.hmset("user:" + (req.params.user.toLowerCase()), {
- email: email,
- password: password,
- phone: phone
- }, function() {
- if (req.xhr) {
- res.send({});
- return res.end();
- } else {
- return res.redirect("/" + (req.params.user.toLowerCase()));
- }
- });
- });
- } else {
- if (req.xhr) {
- res.send({});
- return res.end();
- } else {
- return res.redirect("/" + (req.params.user.toLowerCase()));
- }
- }
- });
- if (process.env.NODE_ENV === 'production' && (req.body.privkey != null) && req.body.privkey !== '' && req.body.email !== '') {
- return res.render('users/key', {
- user: req.params.user.toLowerCase(),
- layout: 'mail',
- key: req.body.privkey,
- js: (function() {
- return global.js;
- }),
- css: (function() {
- return global.css;
+ res.status(200).json({ message: 'User updated' })
})
- }, function(err, html) {
- var content, from_email, helper, mail, sg, subject, to_email;
- helper = require('sendgrid').mail;
- from_email = new helper.Email('[email protected]');
- to_email = new helper.Email(req.body.email);
- subject = 'CoinOS Wallet Key';
- content = new helper.Content('text/html', html);
- mail = new helper.Mail(from_email, subject, to_email, content);
- sg = require('sendgrid')(config.sendgrid_token);
- request = sg.emptyRequest({
- method: 'POST',
- path: '/v3/mail/send',
- body: mail.toJSON()
- });
- return sg.API(request, function(error, response) {
- console.log(response.statusCode);
- console.log(response.body);
- return console.log(response.headers);
- });
- });
+ })
+ } else {
+ res.status(200).json({ message: 'User updated' })
}
- },
- verify: function(req, res) {
- return db.get("token:" + req.params.token, function(err, reply) {
- if (err || !reply) {
- res.write("Invalid Verification Token");
- return res.end();
- } else {
- return db.hset("user:" + (reply.toString()), "verified", "true", function() {
- return res.redirect("/" + (reply.toString()) + "?verified");
- });
- }
- });
- },
- wallet: function(req, res) {
- return res.render('users/wallet', {
+ })
+ if (process.env.NODE_ENV === 'production' && (req.body.privkey != null) && req.body.privkey !== '' && req.body.email !== '') {
+ return res.render('users/key', {
user: req.params.user.toLowerCase(),
- layout: 'layout',
- navigation: true,
+ layout: 'mail',
+ key: req.body.privkey,
js: (function() {
- return global.js;
+ return global.js
}),
css: (function() {
- return global.css;
+ return global.css
+ })
+ }, function(err, html) {
+ const helper = require('sendgrid').mail
+ const from_email = new helper.Email('[email protected]')
+ const to_email = new helper.Email(req.body.email)
+ const subject = 'CoinOS Wallet Key'
+ const content = new helper.Content('text/html', html)
+ const mail = new helper.Mail(from_email, subject, to_email, content)
+ const sg = require('sendgrid')(config.sendgrid_token)
+ const ereq = sg.emptyRequest({
+ method: 'POST',
+ path: '/v3/mail/send',
+ body: mail.toJSON()
})
- });
+ sg.API(ereq, function(error, response) {
+ console.log(response.statusCode)
+ console.log(response.body)
+ console.log(response.headers)
+ })
+ })
}
- };
- };
-
-}).call(this);
+ },
+ verify: function(req, res) {
+ return db.get("token:" + req.params.token, function(err, reply) {
+ if (err || !reply) {
+ res.write("Invalid Verification Token")
+ return res.end()
+ } else {
+ db.hset("user:" + (reply.toString()), "verified", "true", function() {
+ res.status(200)
+ })
+ }
+ })
+ },
+ }
+}