From 4dce90ab411ba2f132d6873636aa052e286a7be8 Mon Sep 17 00:00:00 2001 From: Scott Tolksdorf Date: Mon, 14 Nov 2016 20:14:08 -0500 Subject: [PATCH] Cleaning up the server file --- server.js | 147 +++++++++++++++++------------------------ server/admin.api.js | 72 ++++++++++++++++++++ server/homebrew.api.js | 140 ++++++++++++++++++--------------------- 3 files changed, 197 insertions(+), 162 deletions(-) create mode 100644 server/admin.api.js diff --git a/server.js b/server.js index 763f98aa9..d3adab5a0 100644 --- a/server.js +++ b/server.js @@ -1,114 +1,66 @@ -'use strict'; -var _ = require('lodash'); require('app-module-path').addPath('./shared'); -var vitreumRender = require('vitreum/render'); -var bodyParser = require('body-parser') -var express = require("express"); -var app = express(); + +const _ = require('lodash'); + +const vitreumRender = require('vitreum/render'); +const bodyParser = require('body-parser') +const express = require("express"); +const app = express(); app.use(express.static(__dirname + '/build')); app.use(bodyParser.json({limit: '25mb'})); + + //Mongoose -var mongoose = require('mongoose'); -var mongoUri = process.env.MONGODB_URI || process.env.MONGOLAB_URI || 'mongodb://localhost/naturalcrit'; -mongoose.connect(mongoUri); +//TODO: Celean up +const mongoose = require('mongoose'); +const mongoUri = process.env.MONGODB_URI || process.env.MONGOLAB_URI || 'mongodb://localhost/naturalcrit'; +require('mongoose').connect(mongoUri); mongoose.connection.on('error', function(){ console.log(">>>ERROR: Run Mongodb.exe ya goof!"); }); -//Admin route -process.env.ADMIN_USER = process.env.ADMIN_USER || 'admin'; -process.env.ADMIN_PASS = process.env.ADMIN_PASS || 'password'; -process.env.ADMIN_KEY = process.env.ADMIN_KEY || 'admin_key'; -var auth = require('basic-auth'); -app.get('/admin', function(req, res){ - var credentials = auth(req) - if (!credentials || credentials.name !== process.env.ADMIN_USER || credentials.pass !== process.env.ADMIN_PASS) { - res.setHeader('WWW-Authenticate', 'Basic realm="example"') - return res.status(401).send('Access denied') - } - vitreumRender({ - page: './build/admin/bundle.dot', - prerenderWith : './client/admin/admin.jsx', - clearRequireCache : !process.env.PRODUCTION, - initialProps: { - url: req.originalUrl, - admin_key : process.env.ADMIN_KEY, - }, - }, function (err, page) { - return res.send(page) - }); -}); + +app.use(require('./server/homebrew.api.js')); +app.use(require('./server/admin.api.js')); -//Populate homebrew routes -app = require('./server/homebrew.api.js')(app); +const HomebrewModel = require('./server/homebrew.model.js').model; +const welcomeText = require('fs').readFileSync('./client/homebrew/pages/homePage/welcome_msg.md', 'utf8'); +const changelogText = require('fs').readFileSync('./changelog.md', 'utf8'); -var HomebrewModel = require('./server/homebrew.model.js').model; - var sanitizeBrew = function(brew){ var cleanBrew = _.assign({}, brew); delete cleanBrew.editId; return cleanBrew; }; -//Load project version -var projectVersion = require('./package.json').version; - -//Edit Page -app.get('/edit/:id', function(req, res){ - HomebrewModel.find({editId : req.params.id}, function(err, objs){ - var resObj = null; - if(objs.length){ - resObj = objs[0].toJSON(); +app.get('/edit/:id', (req, res, next)=>{ + HomebrewModel.find({editId : req.params.id}, (err, brews)=>{ + if(err || !brews.length){ + return res.status(400).send(`Can't get that`); } - - vitreumRender({ - page: './build/homebrew/bundle.dot', - globals:{}, - prerenderWith : './client/homebrew/homebrew.jsx', - initialProps: { - url: req.originalUrl, - brew : resObj || {}, - version : projectVersion - }, - clearRequireCache : !process.env.PRODUCTION, - }, function (err, page) { - return res.send(page) - }); + req.brew = brews[0].toJSON(); + return next(); }) }); //Share Page -app.get('/share/:id', function(req, res){ - HomebrewModel.find({shareId : req.params.id}, function(err, objs){ - var brew = {}; - - if(objs.length){ - var resObj = objs[0]; - resObj.lastViewed = new Date(); - resObj.views = resObj.views + 1; - resObj.save(); - - brew = resObj.toJSON(); +app.get('/share/:id', (req, res, next)=>{ + HomebrewModel.find({shareId : req.params.id}, (err, brews)=>{ + if(err || !brews.length){ + return res.status(400).send(`Can't get that`); } + const brew = brews[0]; + brew.lastViewed = new Date(); + brew.views = brew.views + 1; + brew.save(); - vitreumRender({ - page: './build/homebrew/bundle.dot', - globals:{}, - prerenderWith : './client/homebrew/homebrew.jsx', - initialProps: { - url: req.originalUrl, - brew : sanitizeBrew(brew || {}), - version : projectVersion - }, - clearRequireCache : !process.env.PRODUCTION, - }, function (err, page) { - return res.send(page) - }); + req.brew = sanitizeBrew(brew); + return next(); }) }); @@ -152,9 +104,10 @@ app.get('/source/:id', function(req, res){ }); }); + +/* //Home and 404, etc. -var welcomeText = require('fs').readFileSync('./client/homebrew/pages/homePage/welcome_msg.md', 'utf8'); -var changelogText = require('fs').readFileSync('./changelog.md', 'utf8'); + app.get('*', function (req, res) { vitreumRender({ page: './build/homebrew/bundle.dot', @@ -171,6 +124,30 @@ app.get('*', function (req, res) { return res.send(page) }); }); +*/ + + +//Render Page +app.use((req, res) => { + vitreumRender({ + page: './build/homebrew/bundle.dot', + globals:{ + version : require('./package.json').version + }, + prerenderWith : './client/homebrew/homebrew.jsx', + initialProps: { + url: req.originalUrl, + + welcomeText : welcomeText, + changelog : changelogText, + brew : req.brew + }, + clearRequireCache : !process.env.PRODUCTION, + }, (err, page) => { + return res.send(page) + }); +}); + diff --git a/server/admin.api.js b/server/admin.api.js new file mode 100644 index 000000000..8739ce6d0 --- /dev/null +++ b/server/admin.api.js @@ -0,0 +1,72 @@ +const _ = require('lodash'); +const auth = require('basic-auth'); +const HomebrewModel = require('./homebrew.model.js').model; +const router = require('express').Router(); +const vitreumRender = require('vitreum/render'); + + +const mw = { + adminOnly : (req, res, next)=>{ + if(req.query && req.query.admin_key == process.env.ADMIN_KEY) return next(); + return res.status(401).send('Access denied'); + } +}; + +process.env.ADMIN_USER = process.env.ADMIN_USER || 'admin'; +process.env.ADMIN_PASS = process.env.ADMIN_PASS || 'password'; +process.env.ADMIN_KEY = process.env.ADMIN_KEY || 'admin_key'; + + + +//Removes all empty brews that are older than 3 days and that are shorter than a tweet +router.get('/api/invalid', mw.adminOnly, (req, res)=>{ + const invalidBrewQuery = HomebrewModel.find({ + '$where' : "this.text.length < 140", + createdAt: { + $lt: Moment().subtract(3, 'days').toDate() + } + }); + + if(req.query.do_it){ + invalidBrewQuery.remove().exec((err, objs)=>{ + refreshCount(); + return res.send(200); + }) + }else{ + invalidBrewQuery.exec((err, objs)=>{ + if(err) console.log(err); + return res.json({ + count : objs.length + }) + }) + } +}); + + + +//Admin route + + +router.get('/admin', function(req, res){ + const credentials = auth(req) + if (!credentials || credentials.name !== process.env.ADMIN_USER || credentials.pass !== process.env.ADMIN_PASS) { + res.setHeader('WWW-Authenticate', 'Basic realm="example"') + return res.status(401).send('Access denied') + } + vitreumRender({ + page: './build/admin/bundle.dot', + prerenderWith : './client/admin/admin.jsx', + clearRequireCache : !process.env.PRODUCTION, + initialProps: { + url: req.originalUrl, + admin_key : process.env.ADMIN_KEY, + }, + }, function (err, page) { + return res.send(page) + }); +}); + + + + +module.exports = router; \ No newline at end of file diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 2e031b6c8..84cf06c66 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -1,36 +1,33 @@ -var _ = require('lodash'); -var Moment = require('moment'); -var HomebrewModel = require('./homebrew.model.js').model; +const _ = require('lodash'); +const Moment = require('moment'); +const HomebrewModel = require('./homebrew.model.js').model; +const router = require('express').Router(); -var homebrewTotal = 0; -var refreshCount = function(){ - HomebrewModel.count({}, function(err, total){ + + +//TODO: Possiblity remove +let homebrewTotal = 0; +const refreshCount = ()=>{ + HomebrewModel.count({}, (err, total)=>{ homebrewTotal = total; }); }; -refreshCount() - -var mw = { - adminOnly : function(req, res, next){ - if(req.query && req.query.admin_key == process.env.ADMIN_KEY){ - next(); - }else{ - return res.status(401).send('Access denied'); - } - } -}; +refreshCount(); -var getTopBrews = function(cb){ + + + +const getTopBrews = (cb)=>{ HomebrewModel.find().sort({views: -1}).limit(5).exec(function(err, brews) { cb(brews); }); } -var getGoodBrewTitle = (text) => { - var titlePos = text.indexOf('# '); +const getGoodBrewTitle = (text) => { + const titlePos = text.indexOf('# '); if(titlePos !== -1){ - var ending = text.indexOf('\n', titlePos); + const ending = text.indexOf('\n', titlePos); return text.substring(titlePos + 2, ending); }else{ return _.find(text.split('\n'), (line)=>{ @@ -40,70 +37,58 @@ var getGoodBrewTitle = (text) => { }; -module.exports = function(app){ - app.post('/api', function(req, res){ - var newHomebrew = new HomebrewModel(req.body); - if(!newHomebrew.title){ - newHomebrew.title = getGoodBrewTitle(newHomebrew.text); +router.post('/api', (req, res)=>{ + const newHomebrew = new HomebrewModel(req.body); + if(!newHomebrew.title){ + newHomebrew.title = getGoodBrewTitle(newHomebrew.text); + } + newHomebrew.save((err, obj)=>{ + if(err){ + console.error(err, err.toString(), err.stack); + return res.status(500).send(`Error while creating new brew, ${err.toString()}`); } - newHomebrew.save(function(err, obj){ - if(err){ - console.error(err, err.toString(), err.stack); - return res.status(500).send(`Error while creating new brew, ${err.toString()}`); - } - return res.json(obj); + return res.json(obj); + }) +}); + +router.put('/api/update/:id', (req, res)=>{ + HomebrewModel.find({editId : req.params.id}, (err, objs)=>{ + if(!objs.length || err) return res.status(404).send("Can not find homebrew with that id"); + var resEntry = objs[0]; + resEntry.text = req.body.text; + resEntry.title = req.body.title; + resEntry.updatedAt = new Date(); + resEntry.save((err, obj)=>{ + if(err) return res.status(500).send("Error while saving"); + return res.status(200).send(obj); }) }); +}); - app.put('/api/update/:id', function(req, res){ - HomebrewModel.find({editId : req.params.id}, function(err, objs){ - if(!objs.length || err) return res.status(404).send("Can not find homebrew with that id"); - var resEntry = objs[0]; - resEntry.text = req.body.text; - resEntry.title = req.body.title; - resEntry.updatedAt = new Date(); - resEntry.save(function(err, obj){ - if(err) return res.status(500).send("Error while saving"); - return res.status(200).send(obj); - }) - }); +router.get('/api/remove/:id', (req, res)=>{ + HomebrewModel.find({editId : req.params.id}, (err, objs)=>{ + if(!objs.length || err) return res.status(404).send("Can not find homebrew with that id"); + var resEntry = objs[0]; + resEntry.remove((err)=>{ + if(err) return res.status(500).send("Error while removing"); + return res.status(200).send(); + }) }); +}); - app.get('/api/remove/:id', function(req, res){ - HomebrewModel.find({editId : req.params.id}, function(err, objs){ - if(!objs.length || err) return res.status(404).send("Can not find homebrew with that id"); - var resEntry = objs[0]; - resEntry.remove(function(err){ - if(err) return res.status(500).send("Error while removing"); - return res.status(200).send(); - }) - }); - }); - //Removes all empty brews that are older than 3 days and that are shorter than a tweet - app.get('/api/invalid', mw.adminOnly, function(req, res){ - var invalidBrewQuery = HomebrewModel.find({ - '$where' : "this.text.length < 140", - createdAt: { - $lt: Moment().subtract(3, 'days').toDate() - } - }); +module.exports = router; + +/* + + + +module.exports = function(app){ + + app; + - if(req.query.do_it){ - invalidBrewQuery.remove().exec((err, objs)=>{ - refreshCount(); - return res.send(200); - }) - }else{ - invalidBrewQuery.exec((err, objs)=>{ - if(err) console.log(err); - return res.json({ - count : objs.length - }) - }) - } - }); app.get('/api/search', mw.adminOnly, function(req, res){ @@ -143,4 +128,5 @@ module.exports = function(app){ return app; -} \ No newline at end of file +} +*/ \ No newline at end of file