diff --git a/package.json b/package.json
index 1364295..666f8d0 100644
--- a/package.json
+++ b/package.json
@@ -19,6 +19,7 @@
"classnames": "^2.2.0",
"codemirror": "^5.22.0",
"cookie-parser": "^1.4.3",
+ "egads": "^1.0.1",
"express": "^4.13.3",
"jwt-simple": "^0.5.1",
"lodash": "^4.17.3",
diff --git a/server.js b/server.js
index ffe3352..1bd1f9d 100644
--- a/server.js
+++ b/server.js
@@ -29,110 +29,11 @@ app.use(mw.admin);
//Routes
-
-
+app.use(require('./server/brew.api.js'));
app.use(require('./server/interface.routes.js'));
-app.use(require('./server/homebrew.api.js'));
-app.use(require('./server/admin.api.js'));
-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');
-
-
-
-//Source page
-String.prototype.replaceAll = function(s,r){return this.split(s).join(r)}
-app.get('/source/:id', (req, res)=>{
- HomebrewModel.get({shareId : req.params.id})
- .then((brew)=>{
- const text = brew.text.replaceAll('<', '<').replaceAll('>', '>');
- return res.send(`${text}`);
- })
- .catch((err)=>{
- console.log(err);
- return res.status(404).send('Could not find Homebrew with that id');
- })
-});
-
-
-app.get('/user/:username', (req, res, next) => {
- const fullAccess = req.account && (req.account.username == req.params.username);
- HomebrewModel.getByUser(req.params.username, fullAccess)
- .then((brews) => {
- req.brews = brews;
- return next();
- })
- .catch((err) => {
- console.log(err);
- })
-})
-
-
-app.get('/edit/:id', (req, res, next)=>{
- HomebrewModel.get({editId : req.params.id})
- .then((brew)=>{
- req.brew = brew.sanatize();
- return next();
- })
- .catch((err)=>{
- console.log(err);
- return res.status(400).send(`Can't get that`);
- });
-});
-
-//Share Page
-app.get('/share/:id', (req, res, next)=>{
- HomebrewModel.get({shareId : req.params.id})
- .then((brew)=>{
- return brew.increaseView();
- })
- .then((brew)=>{
- req.brew = brew.sanatize(true);
- return next();
- })
- .catch((err)=>{
- console.log(err);
- return res.status(400).send(`Can't get that`);
- });
-});
-
-//Print Page
-app.get('/print/:id', (req, res, next)=>{
- HomebrewModel.get({shareId : req.params.id})
- .then((brew)=>{
- req.brew = brew.sanatize(true);
- return next();
- })
- .catch((err)=>{
- console.log(err);
- return res.status(400).send(`Can't get that`);
- });
-});
-
-
-//Render Page
-const render = require('vitreum/steps/render');
-const templateFn = require('./client/template.js');
-app.use((req, res) => {
- render('homebrew', templateFn, {
- version : require('./package.json').version,
- url: req.originalUrl,
- welcomeText : welcomeText,
- changelog : changelogText,
- brew : req.brew,
- brews : req.brews,
- account : req.account
- })
- .then((page) => {
- return res.send(page)
- })
- .catch((err) => {
- console.log(err);
- return res.sendStatus(500);
- });
-});
+//app.use(require('./server/admin.api.js'));
const PORT = process.env.PORT || 8000;
diff --git a/server/brew.api.js b/server/brew.api.js
index c3c344d..2af9a23 100644
--- a/server/brew.api.js
+++ b/server/brew.api.js
@@ -28,7 +28,7 @@ router.post('/api/brew', (req, res, next)=>{
});
//Update
-router.put('/api/brew/:editId', mw.loadBrew, mw.Validate, (req, res, next)=>{
+router.put('/api/brew/:editId', mw.loadBrew, (req, res, next)=>{
if(req.account){
req.brew.authors = _.uniq(_.concat(req.brew.authors, req.account.username));
}
@@ -40,7 +40,7 @@ router.put('/api/brew/:editId', mw.loadBrew, mw.Validate, (req, res, next)=>{
});
//Delete
-router.delete('/api/brew/:editId', mw.loadBrew, mw.Validate, (req, res, next) => {
+router.delete('/api/brew/:editId', mw.loadBrew, (req, res, next) => {
BrewData.remove(req.brew.editId)
.then(()=>{
return res.sendStatus(200);
diff --git a/server/brew.data.js b/server/brew.data.js
index b86292d..2027214 100644
--- a/server/brew.data.js
+++ b/server/brew.data.js
@@ -7,21 +7,21 @@ const utils = require('./utils.js');
const BrewSchema = mongoose.Schema({
shareId : {type : String, default: shortid.generate, index: { unique: true }},
- editId : {type : String, default: shortid.generate, index: { unique: true }},
+ editId : {type : String, default: shortid.generate, index: { unique: true }},
text : {type : String, default : ""},
- title : {type : String, default : ""},
+ title : {type : String, default : ""},
description : {type : String, default : ""},
- tags : {type : String, default : ""},
- systems : [String],
- authors : [String],
- published : {type : Boolean, default : false},
+ tags : {type : String, default : ""},
+ systems : [String],
+ authors : [String],
+ published : {type : Boolean, default : false},
- createdAt : { type: Date, default: Date.now },
- updatedAt : { type: Date, default: Date.now},
- lastViewed : { type: Date, default: Date.now},
- views : {type:Number, default:0}
+ createdAt : { type: Date, default: Date.now },
+ updatedAt : { type: Date, default: Date.now},
+ lastViewed : { type: Date, default: Date.now},
+ views : {type:Number, default:0}
}, { versionKey: false });
/*
@@ -35,7 +35,7 @@ BrewSchema.methods.sanatize = function(userName, isAdmin, getText = true){
return brew;
};
*/
-
+/*
BrewSchema.methods.sanatize = function(req, getText = true){
const brew = this.toJSON();
delete brew._id;
@@ -56,6 +56,12 @@ BrewSchema.methods.increaseView = function(){
});
});
};
+*/
+
+BrewSchema.methods.increaseView = function(){
+ this.views = this.views + 1;
+ return this.save();
+};
const Brew = mongoose.model('Brew', BrewSchema);
@@ -64,7 +70,7 @@ const Brew = mongoose.model('Brew', BrewSchema);
const BrewData = {
schema : BrewSchema,
- model : Brew,
+ model : Brew,
get : (query) => {
//returns a single brew with the given query
@@ -95,8 +101,13 @@ const BrewData = {
getByShare : (shareId) => {
- //auto sanatize
- //increase view count
+ return BrewData.get({ shareId : shareId})
+ .then((brew) => {
+ brew.increaseView();
+ const brewJSON = brew.toJSON();
+ delete brewJSON.editId;
+ return brewJSON;
+ });
},
getByEdit : (editId) => {
return Brew.get({ editId });
diff --git a/server/errors.js b/server/errors.js
new file mode 100644
index 0000000..a380a37
--- /dev/null
+++ b/server/errors.js
@@ -0,0 +1,14 @@
+const egads = require('egads');
+
+
+const Error = egads.extend('Server Error', 500, 'Generic Server Error');
+
+Error.noBrew = Error.extend('Can not find a brew with that id', 404);
+
+
+
+
+
+
+
+module.exports = Error;
\ No newline at end of file
diff --git a/server/interface.routes.js b/server/interface.routes.js
index def4b2b..0e3ea2b 100644
--- a/server/interface.routes.js
+++ b/server/interface.routes.js
@@ -2,16 +2,25 @@ const _ = require('lodash');
const utils = require('./utils.js');
const BrewData = require('./brew.data.js');
const router = require('express').Router();
+const mw = require('./middleware.js');
+
+
+const docs = {
+ welcomeBrew : require('fs').readFileSync('./welcome.brew.md', 'utf8'),
+ changelog : require('fs').readFileSync('./changelog.md', 'utf8'),
+};
const vitreumRender = require('vitreum/steps/render');
const templateFn = require('./client/template.js');
+//TODO: Catch errors here?
const renderPage = (req, res, next) => {
return vitreumRender('homebrew', templateFn, {
url : req.originalUrl,
version : require('./package.json').version,
+ //TODO: add in login path?
- user : req.account && req.account.username,
+ user : req.account && req.account.username,
brews : req.brews,
brew : req.brew
})
@@ -24,10 +33,10 @@ const renderPage = (req, res, next) => {
router.get('/share/:shareId', mw.viewBrew, renderPage);
//Edit Page
-app.get('/edit/:editId', mw.loadBrew, mw.validate, renderPage);
+router.get('/edit/:editId', mw.loadBrew, renderPage);
//Print Page
-app.get('/print/:shareId', mw.viewBrew, renderPage);
+router.get('/print/:shareId', mw.viewBrew, renderPage);
//Source page
router.get('/source/:sharedId', mw.viewBrew, (req, res, next)=>{
@@ -35,20 +44,36 @@ router.get('/source/:sharedId', mw.viewBrew, (req, res, next)=>{
return res.send(`${text}`);
});
-
-
-//user Page
+//User Page
router.get('/user/:username', (req, res, next) => {
- BrewData.search({ user : req.params.username }, req)
+ BrewData.search({ user : req.params.username })
.then((brews) => {
- return render(req, { brews : brews });
+ req.brews = brews;
+ return next();
})
- .then(res.send)
.catch(next);
-});
+}, renderPage);
+//Search Page
+router.get('/search', (req, res, next) => {
+ BrewData.search()
+ .then((brews) => {
+ req.brews = brews;
+ return next();
+ })
+ .catch(next);
+}, renderPage);
-//Catch all page?
-router.get('*', renderPage);
+//Changelog Page
+router.get('/changelog', (req, res, next) => {
+ req.brew = { text : docs.changelog };
+ return next();
+}, renderPage);
+
+//Home Page
+router.get('/', (req, res, next) => {
+ req.brew = { text : docs.welcomeBrew };
+ return next();
+}, renderPage);
module.exports = router;
\ No newline at end of file
diff --git a/server/middleware.js b/server/middleware.js
index 19da276..0d9d235 100644
--- a/server/middleware.js
+++ b/server/middleware.js
@@ -32,25 +32,13 @@ const Middleware = {
if(req.isAdmin) return next();
return res.sendStatus(401);
},
- validate : (req, res, next) => {
- //Only allow admin or brew authors pass.
-
- return next();
- },
//Loaders
loadBrew : (req, res, next) => {
//Loads a brew by edit id
- if(req.params.shareId){
- BrewData.get({ shareId : req.params.shareId})
- .then((brew))
- }else if(req.params.editId){
-
- }else{
- return next();
- }
+ //TODO: move validate into hurrr
},
viewBrew : (req, res, next) => {
//load by share
diff --git a/client/homebrew/pages/homePage/welcome_msg.md b/welcome.brew.md
similarity index 100%
rename from client/homebrew/pages/homePage/welcome_msg.md
rename to welcome.brew.md