diff options
| author | Adam Soltys <[email protected]> | 2017-04-14 19:56:41 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2017-04-14 19:56:41 -0700 |
| commit | 7c5601109ae170cacb8b0df936c97e4006adbb03 (patch) | |
| tree | 4aeb3346d33c5ae30c6b7e8ab7f22f5e079f3c53 /routes | |
| parent | b7a4332e9487659532ea50cd8063d0cd44011dce (diff) | |
| download | coinos-server-7c5601109ae170cacb8b0df936c97e4006adbb03.tar.gz coinos-server-7c5601109ae170cacb8b0df936c97e4006adbb03.zip | |
server refactor and jwt auth
Diffstat (limited to 'routes')
| -rw-r--r-- | routes/rates.js | 37 | ||||
| -rw-r--r-- | routes/sessions.js | 57 | ||||
| -rw-r--r-- | routes/users.js | 316 |
3 files changed, 197 insertions, 213 deletions
diff --git a/routes/rates.js b/routes/rates.js new file mode 100644 index 00000000..f81085e3 --- /dev/null +++ b/routes/rates.js @@ -0,0 +1,37 @@ +const request = require('request') + +module.exports = (function (app) { + return { + fetchRates () { + request("https://api.bitcoinaverage.com/exchanges/all", function(error, response, body) { + try { + require('util').isDate(JSON.parse(body).timestamp) + app.set('rates', body) + } catch (undefined) {} + }) + return setTimeout(this.fetchRates, 120000) + }, + index (req, res) { + res.write(app.get('rates')) + }, + ticker (req, res) { + fs = require('fs') + var base, base1, base2, e, error1, exchange + (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(app.get('rates'))[req.query.currency][req.query.symbol]['rates'][req.query.type].toString() + } catch (error1) { + e = error1 + exchange = "0" + } + res.writeHead(200, { + 'Content-Length': exchange.length, + 'Content-Type': 'text/plain' + }) + res.write(exchange) + return res.end() + } + } +}).call(this) diff --git a/routes/sessions.js b/routes/sessions.js deleted file mode 100644 index 5d22e459..00000000 --- a/routes/sessions.js +++ /dev/null @@ -1,57 +0,0 @@ -(function() { - module.exports = function(passport) { - return { - "new": function(req, res) { - return res.render('sessions/new', { - layout: 'layout', - js: (function() { - return global.js; - }), - css: (function() { - return global.css; - }) - }); - }, - 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', { - layout: 'layout', - js: (function() { - return global.js; - }), - css: (function() { - return global.css; - }), - badpw: true - }); - } - req.session.user = user; - return req.login(user, function(err) { - var re, url; - if (err) { - return next(err); - } - re = new RegExp(user.username, 'g'); - if ((req.session.redirect != null) && re.test(req.session.redirect)) { - url = req.session.redirect; - } - if (url == null) { - url = "/" + user.username; - } - delete req.session.redirect; - return res.redirect(url); - }); - })(req, res, next); - }, - destroy: function(req, res) { - req.logout(); - return res.redirect('/login'); - } - }; - }; - -}).call(this); diff --git a/routes/users.js b/routes/users.js index 8f68b760..1964f88d 100644 --- a/routes/users.js +++ b/routes/users.js @@ -5,175 +5,179 @@ const bcrypt = require('bcryptjs') const fs = require('fs') const request = require('request') -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() +module.exports = { + login (req, res) { + if(req.body.name && req.body.password){ + var name = req.body.name + var password = req.body.password + } + var user = db[_.findIndex(db, {name: name})] + + if( ! user ){ + res.status(401).json({message:"no such user found"}) + return + } + + if(user.password === req.body.password) { + var payload = {id: user.id} + var token = jwt.sign(payload, process.env.SECRET) + res.json({message: "ok", token: token}) + } else { + res.status(401).json({message:"passwords did not match"}) + } + }, + secret (req, res) { + res.json({message: "Success! You can not see this without a token"}) + }, + 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 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() + 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 + }) + }, + create: function(req, res) { + const userkey = "user:" + req.body.username - db.hgetallAsync(userkey).then((obj) => { - if (obj) { - error = { message: 'User exists' } - res.status(400).json(error) - throw error - } - }).then(() => { - if (req.body.passconfirm !== req.body.password) { - error = { message: 'Passwords must match' } - res.status(400).json(error) - throw error - } + db.hgetallAsync(userkey).then((obj) => { + if (obj) { + error = { message: 'User exists' } + res.status(400).json(error) + throw error + } + }).then(() => { + if (req.body.passconfirm !== req.body.password) { + error = { message: 'Passwords must match' } + res.status(400).json(error) + throw error + } - 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.get('Host') - 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) - }) - }) + 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) + 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.get('Host') + url = req.protocol + "://" + host + "/verify/" + token + 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', req.body.privkey) + 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() }) - }) - }) - }).catch((e) => {}) - }, - 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() { - res.status(200).json({ message: 'User updated' }) + sg.API(ereq, function(error, response) { + console.log(response.statusCode) + console.log(response.body) + console.log(response.headers) }) }) - } else { - res.status(200).json({ message: 'User updated' }) - } + }) }) - 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 - }) - }, 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) + }).catch((e) => {}) + }, + 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() { + res.status(200).json({ message: 'User updated' }) }) }) + } 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 { - db.hset("user:" + (reply.toString()), "verified", "true", function() { - res.status(200) - }) + }) + if (process.env.NODE_ENV === 'production' && + (req.body.privkey != null) && + req.body.privkey !== '' && + req.body.email !== '') + { + 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', req.body.privkey) + 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(err, res) { + if (err) { + console.log(error) } }) - }, + } + }, + 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) + }) + } + }) } } |
