aboutsummaryrefslogtreecommitdiffstats
path: root/app.js
diff options
context:
space:
mode:
Diffstat (limited to 'app.js')
-rw-r--r--app.js321
1 files changed, 157 insertions, 164 deletions
diff --git a/app.js b/app.js
index 0703d01f..260fa207 100644
--- a/app.js
+++ b/app.js
@@ -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,
- 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)