diff options
Diffstat (limited to 'app.js')
| -rw-r--r-- | app.js | 321 |
1 files changed, 157 insertions, 164 deletions
@@ -1,193 +1,186 @@ (function() { - var app, config, engines, express, fetchRates, fs, path, request, route, routes, view, _fn; + const indexOf = [].indexOf || + function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i } return -1 } - fs = require('fs'); + const request = require('request') + const express = require('express') + const bodyParser = require('body-parser') + const cookieParser = require('cookie-parser') + const path = require('path') + const passport = require('./passport') + const config = require('./config') + const fs = require('fs') + const proxyMiddleware = require('http-proxy-middleware') + const sessions = require("./routes/sessions")(passport) + const transactions = require("./routes/transactions") + const twilio = require('twilio') + const users = require("./routes/users")(sessions) + const session = require('express-session') + const RedisStore = require('connect-redis')(session) - express = require('express'); + sessionStore = new RedisStore(require('./redis').host, { + ttl: 172800 + }) - path = require('path'); + proxyContext = '/blockcypher' - engines = require('consolidate'); + proxyOptions = { + target: 'https://api.blockcypher.com', + changeOrigin: true, + pathRewrite: { + '^/blockcypher/': '/' + }, + onProxyReq: function(proxyReq, req, res) { + var symbol + symbol = indexOf.call(proxyReq.path, '?') >= 0 ? '&' : '?' + return proxyReq.path += symbol + "token=" + config.blockcypher_token + } + } - request = require('request'); + proxy = proxyMiddleware(proxyContext, proxyOptions) - config = require('./config'); + app = express() + app.enable('trust proxy') + app.engine('html', require('hogan-express')) + app.set('view engine', 'html') + app.set('views', __dirname + '/views') + app.use(express["static"](__dirname + '/public')) + app.use(proxy) - app = express(); + app.use(bodyParser.urlencoded({ + extended: true + })) - app.enable('trust proxy'); + app.use(bodyParser.json()) - app.engine('html', require('mmm').__express); + app.use(bodyParser.json({ + type: 'application/vnd.api+json' + })) - app.set('view engine', 'html'); + app.use(cookieParser(config.secret)) - app.set('views', __dirname + '/views'); + app.use(session({ + resave: true, + saveUninitialized: true, + secret: config.secret, + store: sessionStore, + cookie: { + maxAge: 1209600000 + }, + key: 'coinos.sid' + })) - app.use(express["static"](__dirname + '/public')); + app.use(passport.initialize()) - app.use(express.bodyParser()); + app.use(passport.session()) - app.use(express.cookieParser()); + const authorize = function(req, res, next) { + var ref, ref1 + if (req.params.user === ((ref = req.user) != null ? ref.username : void 0) || ((ref1 = req.user) != null ? ref1.username : void 0) === 'admin') { + return next() + } + req.session.redirect = req.path + return res.redirect('/login') + } - app.use(app.router); + const cache = function(req, res, next) { + if (req.path !== '/login') { + res.setHeader("Cache-Control", "public, max-age=900") + } + return next() + } + let fetchRates (fetchRates = function() { request("https://api.bitcoinaverage.com/exchanges/all", function(error, response, body) { - var file, stream; try { - require('util').isDate(JSON.parse(body).timestamp); - file = 'public/js/rates.json'; - stream = fs.createWriteStream(file); - return fs.truncate(file, 0, function() { - return stream.write(body); - }); - } catch (_error) {} - }); - return setTimeout(fetchRates, 120000); - })(); + require('util').isDate(JSON.parse(body).timestamp) + app.set('rates', body) + } catch (undefined) {} + }) + return setTimeout(fetchRates, 120000) + })() - routes = { - '/': 'index', - '/about': 'about', - '/coinfest': 'coinfest', - '/coinos': 'coinos', - '/contact': 'contact', - '/directors': 'directors', - '/membership': 'membership', - '/merchants': 'merchants', - '/partners': 'partners', - '/register': 'register' - }; + require('./bcoin').init(app) - _fn = function(route, view) { - return app.get(route, function(req, res) { - return res.render(view, { - js: (function() { - return global.js; - }), - css: (function() { - return global.css; - }), - layout: 'layout' - }); - }); - }; - for (route in routes) { - view = routes[route]; - _fn(route, view); - } + app.get('/', cache, sessions["new"]) - app.get('/users', function(req, res) { - var db; - db = require('./redis'); - return db.keys('member:*', function(err, keys) { - var i, key, users, _i, _len, _results; - users = []; - _results = []; - for (i = _i = 0, _len = keys.length; _i < _len; i = ++_i) { - key = keys[i]; - _results.push((function(i, db) { - return db.hgetall(key, function(err, user) { - if (!user["private"]) { - users.push(user); - } - if (i >= keys.length - 1) { - users.sort(function(a, b) { - if (parseInt(a.number) < parseInt(b.number)) { - return -1; - } - if (parseInt(a.number) > parseInt(b.number)) { - return 1; - } - return 0; - }); - res.write(JSON.stringify(users)); - return res.end(); - } - }); - })(i, db)); - } - return _results; - }); - }); + app.get('/address', cache, function(req, res) { + return res.render('address', { + layout: 'layout', + js: (function() { + return global.js + }), + css: (function() { + return global.css + }) + }) + }) - app.post('/users', function(req, res) { - var db, userkey; - db = require('./redis'); - userkey = "member:" + req.body.email; - return db.hgetall(userkey, function(err, obj) { - if (obj) { - res.status(500).send("Sorry, that email address is already registered"); - return; - } - db.sadd("users", userkey); - return db.incr('members', function(err, number) { - return db.hmset(userkey, { - name: req.body.name, - email: req.body.email, - address: req.body.address, - number: number, - date: req.body.date, - txid: req.body.txid - }, function(err, obj) { - var email; - if (true || process.env.NODE_ENV === 'production') { - email = req.body.email; - res.render('welcome', { - layout: 'mail', - js: (function() { - return global.js; - }), - css: (function() { - return global.css; - }) - }, function(err, html) { - var sendgrid; - sendgrid = require('sendgrid')(config.sendgrid_user, config.sendgrid_password); - email = new sendgrid.Email({ - to: email, - from: '[email protected]', - subject: 'Welcome to the Co-op!', - html: html - }); - return sendgrid.send(email); - }); - } - return res.end(); - }); - }); - }); - }); + app.get('/rates', cache, function(req, res) { + res.write(app.get('rates')) + }) - app.get('/ticker', function(req, res) { - var fd; - fs = require('fs'); - return fd = fs.readFile("./public/js/rates.json", function(err, data) { - var e, exchange, _base, _base1, _base2; - (_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(data)[req.query.currency][req.query.symbol]['rates'][req.query.type].toString(); - } catch (_error) { - e = _error; - exchange = "0"; - } - res.writeHead(200, { - 'Content-Length': exchange.length, - 'Content-Type': 'text/plain' - }); - res.write(exchange); - return res.end(); - }); - }); + app.get('/ticker', cache, function(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() + }) + + app.get('/tips', cache, function(req, res) { + return res.render('tips', { + notice: true, + layout: 'layout', + js: (function() { + return global.js + }), + css: (function() { + return global.css + }) + }) + }) + + app.get('/login', cache, sessions["new"]) + app.post('/login', sessions.create) + app.get('/logout', sessions.destroy) + app.get('/users.json', users.index) + app.get('/register', cache, users["new"]) + app.get('/users/new', cache, users["new"]) + app.post('/users', users.create) + app.get('/verify/:token', users.verify) + app.post('/:user', authorize, users.update) + app.get('/:user/edit', authorize, users.edit) + app.get('/:user/profile', authorize, users.profile) + app.get('/:user/wallet', authorize, users.wallet) + app.get('/:user/transactions.json', authorize, transactions.json) + app.post('/:user/transactions', transactions.create) + app.post('/transactions/:txid', transactions.update) + app["delete"]('/:user/transactions/:txid', transactions["delete"]) + app.get('/:user/report', authorize, transactions.index) + app.get('/:user.json', users.json) + app.get('/:user', cache, users.show) app.use(function(err, req, res, next) { - res.status(500); - console.log(err); - return res.end(); - }); + res.status(500) + res.send('An error occurred') + console.error(err.stack) + return res.end() + }) - app.listen(3002); + app.listen(3000) -}).call(this); +}).call(this) |
