Added morgan, removed body-parser, misc changes

Added morgan for some route debugging. Removed body-parser since it's built into express now. Made some error returns more clear and modern-ized some random snippets
This commit is contained in:
RedDucks 2018-11-23 23:41:09 -05:00
parent 4c0f6d4290
commit e52ccfdfd8
10 changed files with 244 additions and 249 deletions

View File

@ -6,8 +6,8 @@ common api returns
*/
// use for any api return. it has basic layout used for every return.
function sendReturn(res, data, errors) {
res.status(200).json(
function sendReturn(response, data, errors) {
response.status(200).json(
// combine 2 objects
Object.assign({
code: 200,
@ -17,10 +17,14 @@ function sendReturn(res, data, errors) {
);
}
// shows 404 template. takes express response object
function send404(res) {
res.status(404).send('404');
}
// use if api endpoint doesnt exist
function sendApi404(res) {
res.status(404).json({
function sendApi404(response) {
response.status(404).json({
code: 404,
errors: [
'Endpoint not in use'
@ -29,8 +33,8 @@ function sendApi404(res) {
}
// use if not logged in and is required (handled with middleware)
function sendApiAuthError(res) {
res.status(401).json({
function sendApiAuthError(response) {
response.status(401).json({
code: 401,
errors: [
'Not authenticated'
@ -39,8 +43,8 @@ function sendApiAuthError(res) {
}
// use for completely broken requests
function sendApiGenericError(res) {
res.status(400).json({
function sendApiGenericError(response) {
response.status(400).json({
code: 400,
success: false,
errors: [
@ -50,8 +54,8 @@ function sendApiGenericError(res) {
}
// use for any api not successfull
function sendApiError(res, code, errors) {
res.status(code).json({
function sendApiError(response, code, errors) {
response.status(code).json({
code,
success: false,
errors

107
package-lock.json generated
View File

@ -279,6 +279,21 @@
}
}
},
"basic-auth": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
"integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
"requires": {
"safe-buffer": "5.1.2"
},
"dependencies": {
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
}
}
},
"bcrypt": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.1.tgz",
@ -720,46 +735,6 @@
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
},
"body-parser": {
"version": "1.18.3",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
"integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
"requires": {
"bytes": "3.0.0",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
"http-errors": "~1.6.3",
"iconv-lite": "0.4.23",
"on-finished": "~2.3.0",
"qs": "6.5.2",
"raw-body": "2.3.3",
"type-is": "~1.6.16"
},
"dependencies": {
"http-errors": {
"version": "1.6.3",
"resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
"integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.3",
"setprototypeof": "1.1.0",
"statuses": ">= 1.4.0 < 2"
}
},
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
}
}
},
"boxen": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
@ -2621,14 +2596,6 @@
}
}
},
"iconv-lite": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
"integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@ -3299,6 +3266,18 @@
"lodash.get": "^4.0.2"
}
},
"morgan": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
"integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
"requires": {
"basic-auth": "~2.0.0",
"debug": "2.6.9",
"depd": "~1.1.2",
"on-finished": "~2.3.0",
"on-headers": "~1.0.1"
}
},
"mpath": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.1.tgz",
@ -3817,35 +3796,6 @@
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
},
"raw-body": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
"integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
"requires": {
"bytes": "3.0.0",
"http-errors": "1.6.3",
"iconv-lite": "0.4.23",
"unpipe": "1.0.0"
},
"dependencies": {
"http-errors": {
"version": "1.6.3",
"resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
"integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.3",
"setprototypeof": "1.1.0",
"statuses": ">= 1.4.0 < 2"
}
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
}
}
},
"rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
@ -4081,7 +4031,8 @@
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
"saslprep": {
"version": "1.0.2",

View File

@ -10,13 +10,12 @@
},
"author": "The Pretendo Network (@PretendoNetwork)",
"authors": [
"@superwhiskers",
"@lukeeey"
"@mrjvs",
"@jip"
],
"license": "ISC",
"dependencies": {
"bcrypt": "^3.0.1",
"body-parser": "^1.18.3",
"colors": "^1.1.2",
"connect-mongo": "^2.0.1",
"express": "^4.16.2",
@ -27,6 +26,7 @@
"moment": "^2.22.2",
"mongoose": "^5.3.2",
"mongoose-unique-validator": "^2.0.2",
"morgan": "^1.9.1",
"passport": "^0.4.0",
"passport-local": "^1.0.0",
"python-struct": "^1.0.6",

View File

@ -19,8 +19,8 @@ const postAuthor = require('../models/post-author');
const progressList = require('../models/progress-list');
// renders admin.hbs
router.get('/admin', (req, res) => {
res.render('admin', {
router.get('/admin', (request, response) => {
response.render('admin', {
title: 'Pretendo | Admin',
});
});
@ -44,9 +44,10 @@ router.get('/admin', (req, res) => {
*/
// TODO make login somehow display errors in correct format.
// middleware does the authentication work. this just returns a success
router.post('/admin/api/v1/login', passport.authenticate('adminUserStrategy'), function (req, res) {
const user = req.user;
apiHelper.sendReturn(res, {
router.post('/admin/api/v1/login', passport.authenticate('adminUserStrategy'), (request, response) => {
const user = request.user;
return apiHelper.sendReturn(response, {
username: user.username,
locale: user.getLocale(), // calls 'utilHelper.getLocale(user.region, user.language)' maybe?
role: user.role ? user.role : undefined
@ -71,14 +72,13 @@ router.post('/admin/api/v1/login', passport.authenticate('adminUserStrategy'), f
* errors: Strings[messages]
* }
*/
router.post('/admin/api/v1/register', userMiddleware.adminAuthNeeded, (req, res) => {
if (!req.body) {
router.post('/admin/api/v1/register', userMiddleware.adminAuthNeeded, (request, response) => {
if (!request.body) {
// no post body
apiHelper.sendApiGenericError(res);
return;
return apiHelper.sendApiGenericError(response);
}
const { username, password } = req.body;
const { username, password } = request.body;
const newUser = new adminUser.adminUserModel({
username,
password
@ -86,15 +86,13 @@ router.post('/admin/api/v1/register', userMiddleware.adminAuthNeeded, (req, res)
// saving to database
newUser.save().then((user) => {
apiHelper.sendReturn(res, {
return apiHelper.sendReturn(response, {
username: user.username,
role: user.role ? user.role : undefined
});
return;
}).catch((rejection) => {
// TODO format exception so it doesnt have a huge list of errors
apiHelper.sendApiError(res, 500, [rejection]);
return;
return apiHelper.sendApiError(response, 500, [rejection]);
});
});
@ -113,18 +111,19 @@ router.post('/admin/api/v1/register', userMiddleware.adminAuthNeeded, (req, res)
* errors: Strings[messages]
* }
*/
router.post('/admin/api/v1/removeadmin', userMiddleware.adminAuthNeeded, (req, res) => {
if (!req.body) {
router.post('/admin/api/v1/removeadmin', userMiddleware.adminAuthNeeded, (request, response) => {
if (!request.body) {
// no post body
apiHelper.sendApiGenericError(res);
return;
return apiHelper.sendApiGenericError(response);
}
const { id } = req.body;
adminUser.adminUserModel.findByIdAndDelete(id, (err) => {
if (err) return apiHelper.sendApiError(res, 500, [err]);
const { id } = request.body;
adminUser.adminUserModel.findByIdAndDelete(id, (error) => {
if (error) {
return apiHelper.sendApiError(response, 500, [error]);
}
// successfull
apiHelper.sendReturn(res, {});
return apiHelper.sendReturn(response, {});
});
});
@ -140,10 +139,12 @@ router.post('/admin/api/v1/removeadmin', userMiddleware.adminAuthNeeded, (req, r
* errors: Strings[messages]
* }
*/
router.get('/admin/api/v1/listadmins', userMiddleware.adminAuthNeeded, (req, res) => {
adminUser.adminUserModel.find({}, (err, admins) => {
router.get('/admin/api/v1/listadmins', userMiddleware.adminAuthNeeded, (request, response) => {
adminUser.adminUserModel.find({}, (error, admins) => {
// TODO format exception so it doesnt have a huge list of errors
if (err) return apiHelper.sendApiError(res, 500, [err]);
if (error) {
return apiHelper.sendApiError(response, 500, [error]);
}
// formats admin list and removes password hash
const output = [];
@ -152,7 +153,7 @@ router.get('/admin/api/v1/listadmins', userMiddleware.adminAuthNeeded, (req, res
output.push(admins[i]);
}
apiHelper.sendReturn(res, {
return apiHelper.sendReturn(response, {
admins: output
});
});
@ -171,10 +172,12 @@ router.get('/admin/api/v1/listadmins', userMiddleware.adminAuthNeeded, (req, res
* errors: Strings[messages]
* }
*/
router.get('/admin/api/v1/check', userMiddleware.authOptional, (req, res) => {
apiHelper.sendReturn(res, {
isAuthed: req.user ? true : false,
role: req.user ? (req.user.role ? req.user.role : undefined) : undefined
router.get('/admin/api/v1/check', userMiddleware.authOptional, (request, response) => {
const user = request.user;
return apiHelper.sendReturn(response, {
isAuthed: user ? true : false,
role: user ? (user.role ? user.role : undefined) : undefined
});
});
@ -189,9 +192,9 @@ router.get('/admin/api/v1/check', userMiddleware.authOptional, (req, res) => {
* errors: Strings[messages]
* }
*/
router.get('/admin/api/v1/logout', userMiddleware.adminAuthNeeded, (req, res) => {
req.logout();
apiHelper.sendReturn(res, {});
router.get('/admin/api/v1/logout', userMiddleware.adminAuthNeeded, (request, response) => {
request.logout();
return apiHelper.sendReturn(response, {});
});
/*
@ -214,11 +217,13 @@ router.get('/admin/api/v1/logout', userMiddleware.adminAuthNeeded, (req, res) =>
* errors: Strings[messages]
* }
*/
router.post('/admin/api/v1/newpost', userMiddleware.adminAuthNeeded, function (req, res) {
router.post('/admin/api/v1/newpost', userMiddleware.adminAuthNeeded, (request, response) => {
if (!req.body) return apiHelper.sendApiGenericError(res);
if (!request.body) {
return apiHelper.sendApiGenericError(response);
}
const { content, title, author, category, short } = req.body;
const { content, title, author, category, short } = request.body;
const newBlogPost = new blogPost.blogPostModel({
content: blogPost.blogPostModel.markdownToHtml(content),
name: title,
@ -236,13 +241,12 @@ router.post('/admin/api/v1/newpost', userMiddleware.adminAuthNeeded, function (r
// saving post to database
newBlogPost.save().then((post) => {
apiHelper.sendReturn(res, {
return apiHelper.sendReturn(response, {
url: moment(post.meta.date).format('YYYY-MM-DD') + '/' + post.meta.slug
});
}).catch((rejection) => {
// TODO format exception so it doesnt have a huge list of errors
apiHelper.sendApiError(res, 500, [rejection]);
return;
return apiHelper.sendApiError(response, 500, [rejection]);
});
});
@ -266,21 +270,25 @@ router.post('/admin/api/v1/newpost', userMiddleware.adminAuthNeeded, function (r
* errors: Strings[messages]
* }
*/
router.post('/admin/api/v1/editpost', userMiddleware.adminAuthNeeded, function (req, res) {
router.post('/admin/api/v1/editpost', userMiddleware.adminAuthNeeded, (request, response) => {
if (!req.body) return apiHelper.sendApiGenericError(res);
if (!request.body) {
return apiHelper.sendApiGenericError(response);
}
const { id, content, title, author, category, short } = req.body;
const { id, content, title, author, category, short } = request.body;
blogPost.blogPostModel.findByIdAndUpdate(id, {
'content': content,
'name': title,
'short': short,
'meta.author': author,
'meta.category': category
}, (err, post) => {
if (err) return apiHelper.sendApiError(res, 500, [err]);
}, (error, post) => {
if (error) {
return apiHelper.sendApiError(response, 500, [error]);
}
apiHelper.sendReturn(res, {
return apiHelper.sendReturn(response, {
url: moment(post.meta.date, 'YYYY-MM-DD') + '/' + post.meta.slug
});
});
@ -303,11 +311,13 @@ router.post('/admin/api/v1/editpost', userMiddleware.adminAuthNeeded, function (
* errors: Strings[messages]
* }
*/
router.post('/admin/api/v1/newauthor', userMiddleware.adminAuthNeeded, function (req, res) {
router.post('/admin/api/v1/newauthor', userMiddleware.adminAuthNeeded, (request, response) => {
if (!req.body) return apiHelper.sendApiGenericError(res);
if (!request.body) {
return apiHelper.sendApiGenericError(response);
}
const { name, description, image } = req.body;
const { name, description, image } = request.body;
const newAuthor = new postAuthor.postAuthorModel({
name,
description,
@ -316,13 +326,12 @@ router.post('/admin/api/v1/newauthor', userMiddleware.adminAuthNeeded, function
// saving author to database
newAuthor.save().then((author) => {
apiHelper.sendReturn(res, {
return apiHelper.sendReturn(response, {
id: author.id
});
}).catch((rejection) => {
// TODO format exception so it doesnt have a huge list of errors
apiHelper.sendApiError(res, 500, [rejection]);
return;
return apiHelper.sendApiError(response, 500, [rejection]);
});
});
@ -344,21 +353,26 @@ router.post('/admin/api/v1/newauthor', userMiddleware.adminAuthNeeded, function
* errors: Strings[messages]
* }
*/
router.post('/admin/api/v1/editauthor', userMiddleware.adminAuthNeeded, function (req, res) {
router.post('/admin/api/v1/editauthor', userMiddleware.adminAuthNeeded, (request, response) => {
if (!req.body) return apiHelper.sendApiGenericError(res);
if (!request.body) {
return apiHelper.sendApiGenericError(response);
}
const { id, name, description, image } = req.body;
const { id, name, description, image } = request.body;
// updating author in database
postAuthor.postAuthorModel.findByIdAndUpdate(id, {
name,
description,
image
}, (err, author) => {
}, (error, author) => {
// TODO format exception so it doesnt have a huge list of errors
if (err) return apiHelper.sendApiError(res, 500, [err]);
apiHelper.sendReturn(res, {
if (error) {
return apiHelper.sendApiError(response, 500, [error]);
}
return apiHelper.sendReturn(response, {
id: author.id
});
});
@ -381,13 +395,15 @@ router.post('/admin/api/v1/editauthor', userMiddleware.adminAuthNeeded, function
* errors: Strings[messages]
* }
*/
router.post('/admin/api/v1/newprogress', userMiddleware.adminAuthNeeded, function (req, res) {
router.post('/admin/api/v1/newprogress', userMiddleware.adminAuthNeeded, (request, response) => {
if (!req.body) return apiHelper.sendApiGenericError(res);
if (!request.body) {
return apiHelper.sendApiGenericError(response);
}
// parses state and isGame to be valid
const { title, description } = req.body;
let { state } = req.body;
const { title, description } = request.body;
let { state } = request.body;
let isGame = false;
if (state != '1' && state != '2' && state != '3') {
state = undefined;
@ -405,13 +421,12 @@ router.post('/admin/api/v1/newprogress', userMiddleware.adminAuthNeeded, functio
// saving progress to database
newProgress.save().then((progress) => {
apiHelper.sendReturn(res, {
return apiHelper.sendReturn(response, {
id: progress.id
});
}).catch((rejection) => {
// TODO format exception so it doesnt have a huge list of errors
apiHelper.sendApiError(res, 500, [rejection]);
return;
return apiHelper.sendApiError(response, 500, [rejection]);
});
});
@ -433,13 +448,15 @@ router.post('/admin/api/v1/newprogress', userMiddleware.adminAuthNeeded, functio
* errors: Strings[messages]
* }
*/
router.post('/admin/api/v1/editprogress', userMiddleware.adminAuthNeeded, function (req, res) {
router.post('/admin/api/v1/editprogress', userMiddleware.adminAuthNeeded, (request, response) => {
if (!req.body) return apiHelper.sendApiGenericError(res);
if (!request.body) {
return apiHelper.sendApiGenericError(response);
}
// parsing state and isGame to be valid
const { title, description, id } = req.body;
let { state } = req.body;
const { title, description, id } = request.body;
let { state } = request.body;
let isGame = false;
if (state != '1' && state != '2' && state != '3') {
state = undefined;
@ -454,18 +471,21 @@ router.post('/admin/api/v1/editprogress', userMiddleware.adminAuthNeeded, functi
description,
state,
isGame
}, (err, progress) => {
}, (error, progress) => {
// TODO format exception so it doesnt have a huge list of errors
if (err) return apiHelper.sendApiError(res, 500, [err]);
apiHelper.sendReturn(res, {
if (error) {
return apiHelper.sendApiError(response, 500, [error]);
}
return apiHelper.sendReturn(response, {
id: progress.id
});
});
});
// api 404
router.use('/admin/api', (req, res) => {
apiHelper.sendApi404(res);
router.use('/admin/api', (request, response) => {
return apiHelper.sendApi404(response);
});
// export the router

View File

@ -14,40 +14,47 @@ const blogPostModel = require('../models/blog-post').blogPostModel;
const postAuthorModel = require('../models/post-author').postAuthorModel;
// display single blog post
router.get('/news/:date/:title', (req, res) => {
router.get('/news/:date/:title', (request, response) => {
const date = request.params.date;
const title = request.params.title;
const title_lower = title.toLowerCase();
// date format YYYY-MM-DD
if (/[0-9]{4}-[0-9]{2}-[0-9]{2}/.test(req.params.date) && /([a-z]|[0-9]|-)+/.test(req.params.title.toLowerCase())) {
if (/[0-9]{4}-[0-9]{2}-[0-9]{2}/.test(date) && /([a-z]|[0-9]|-)+/.test(title_lower)) {
// params are correct format
blogPostModel.getPost(moment(req.params.date), req.params.title.toLowerCase(), (err, post) => {
blogPostModel.getPost(moment(date), title_lower, (error, post) => {
// error exists or no post exists with the date and name
if (err || !post) {
console.log('error: ' + err + ' and post: ' + post);
return utilHelper.send404(res);
if (error || !post) {
console.warn(`'error: ${error} and post: ${post}`);
return utilHelper.send404(response);
}
// render blogpost
post.postTemplate((err, postTemplate) => {
if (err) return utilHelper.send404(res);
res.render('post', {
title: req.params.title,
post.postTemplate((error, postTemplate) => {
if (error) {
return utilHelper.send404(response);
}
return response.render('post', {
title,
post: postTemplate,
user: utilHelper.templateReadyUser(req),
user: utilHelper.templateReadyUser(request),
locale: utilHelper.getLocale('US', 'en')
});
});
});
} else {
// params are incorrect
utilHelper.send404(res);
return utilHelper.send404(response);
}
});
// display latest blogposts
router.get('/news', (req, res) => {
router.get('/news', (request, response) => {
// sort blogposts on date descending
blogPostModel.find({}).sort({'meta.date': 'desc'}).exec(function(err, posts) {
if (err || !posts) {
return utilHelper.send404(res);
blogPostModel.find({}).sort({'meta.date': 'desc'}).exec((error, posts) => {
if (error || !posts) {
return utilHelper.send404(response);
}
// makes posts template ready
@ -56,10 +63,10 @@ router.get('/news', (req, res) => {
postCollection.push(posts[i].postShortTemplate());
}
res.render('post-collection', {
return response.render('post-collection', {
title: 'Pretendo | News',
posts: postCollection,
user: utilHelper.templateReadyUser(req),
user: utilHelper.templateReadyUser(request),
locale: utilHelper.getLocale('US', 'en'),
page: 'news'
});
@ -78,11 +85,14 @@ router.get('/news', (req, res) => {
* errors: Strings[messages]
* }
*/
router.get('/api/v1/listauthors', function (req, res) {
postAuthorModel.find({}, (err, authors) => {
router.get('/api/v1/listauthors', (request, response) => {
postAuthorModel.find({}, (error, authors) => {
// TODO format exception so it doesnt have a huge list of errors
if (err) return apiHelper.sendApiError(res, 500, [err]);
apiHelper.sendReturn(res, {
if (error) {
return apiHelper.sendApiError(response, 500, [error]);
}
return apiHelper.sendReturn(response, {
authorList: authors
});
});
@ -100,11 +110,14 @@ router.get('/api/v1/listauthors', function (req, res) {
* errors: Strings[messages]
* }
*/
router.get('/api/v1/listblog', function (req, res) {
blogPostModel.find({}, (err, posts) => {
router.get('/api/v1/listblog', (request, response) => {
blogPostModel.find({}, (error, posts) => {
// TODO format exception so it doesnt have a huge list of errors
if (err) return apiHelper.sendApiError(res, 500, [err]);
apiHelper.sendReturn(res, {
if (error) {
return apiHelper.sendApiError(response, 500, [error]);
}
apiHelper.sendReturn(response, {
postList: posts
});
});

View File

@ -13,10 +13,10 @@ const config = require('../config.json');
const https = require('https');
// display contact page
router.get('/contact', (req, res) => {
res.render('contact', {
router.get('/contact', (request, response) => {
return response.render('contact', {
title: 'Pretendo | Contact',
user: utilHelper.templateReadyUser(req),
user: utilHelper.templateReadyUser(request),
locale: utilHelper.getLocale('US', 'en'),
page: 'contact'
});
@ -38,8 +38,10 @@ router.get('/contact', (req, res) => {
* errors: Strings[messages]
* }
*/
router.post('/api/v1/sendmessage', function (req, res) {
if (!req.body) return apiHelper.sendApiGenericError(res);
router.post('/api/v1/sendmessage', (req, response) => {
if (!req.body) {
return apiHelper.sendApiGenericError(response);
}
const { email, subject, message } = req.body;
@ -62,13 +64,13 @@ router.post('/api/v1/sendmessage', function (req, res) {
}
}, () => {
// sends success
apiHelper.sendReturn(res, {});
return apiHelper.sendReturn(response, {});
});
// error handling
request.on('error', (e) => {
apiHelper.sendApiGenericError(res);
console.log('request errored' + e);
request.on('error', (error) => {
console.warn('request errored' + error);
return apiHelper.sendApiGenericError(response);
});
// write post data to request
@ -76,7 +78,7 @@ router.post('/api/v1/sendmessage', function (req, res) {
request.end();
} else {
// TODO give more detailed response
return apiHelper.sendApiGenericError(res);
return apiHelper.sendApiGenericError(response);
}
});

View File

@ -12,12 +12,12 @@ const utilHelper = require('../helpers/util');
const blogPostModel = require('../models/blog-post').blogPostModel;
// display home page
router.get('/', (req, res) => {
router.get('/', (request, response) => {
// needs callback because mongoose is inconsistent
blogPostModel.latestPostsShortTemlate(2, (err, result) => {
res.render('home', {
blogPostModel.latestPostsShortTemlate(2, (error, result) => {
return response.render('home', {
title: 'Pretendo | Home',
user: utilHelper.templateReadyUser(req),
user: utilHelper.templateReadyUser(request),
locale: utilHelper.getLocale('US', 'en'),
posts: result,
page: 'home'

View File

@ -19,31 +19,31 @@ const recaptcha = new Recaptcha(config.recaptcha.siteKey, config.recaptcha.secre
const PNID = require('../models/pnid');
// renders register page
router.get('/pnid/register', recaptcha.middleware.render, (req, res) => {
res.render('register', {
router.get('/pnid/register', recaptcha.middleware.render, (request, response) => {
return response.render('register', {
title: 'Pretendo | Register',
captcha: res.recaptcha,
captcha: response.recaptcha,
locale: utilHelper.getLocale('US', 'en')
});
});
// renders login page
router.get('/pnid/login', (req, res) => {
res.render('login', {
router.get('/pnid/login', (request, response) => {
return response.render('login', {
title: 'Pretendo | Login',
locale: utilHelper.getLocale('US', 'en')
});
});
// logout
router.get('/pnid/logout', userMiddleware.pnidAuthNeeded, (req, res) => {
req.logout();
res.redirect('/');
router.get('/pnid/logout', userMiddleware.pnidAuthNeeded, (request, response) => {
request.logout();
return response.redirect('/');
});
// renders pnid dashboard
router.get('/pnid/dashboard', userMiddleware.pnidAuthNeeded, (req, res) => {
res.render('dashboard', {
router.get('/pnid/dashboard', userMiddleware.pnidAuthNeeded, (request, response) => {
return response.render('dashboard', {
title: 'Pretendo | Dash',
locale: utilHelper.getLocale('US', 'en'),
user: utilHelper.templateReadyUser(req)
user: utilHelper.templateReadyUser(request)
});
});
@ -66,11 +66,11 @@ router.get('/pnid/dashboard', userMiddleware.pnidAuthNeeded, (req, res) => {
*/
// TODO make login somehow display errors in correct format.
// middleware does the authentication work. this just returns a success
router.post('/api/v1/login', passport.authenticate('PNIDStrategy'), function (req, res) {
apiHelper.sendReturn(res, {
email: req.user.email,
email_validated: req.user.email_validated,
pnid: req.user.pnid.key
router.post('/api/v1/login', passport.authenticate('PNIDStrategy'), function (request, response) {
return apiHelper.sendReturn(response, {
email: request.user.email,
email_validated: request.user.email_validated,
pnid: request.user.pnid.key
});
});
@ -90,18 +90,17 @@ router.post('/api/v1/login', passport.authenticate('PNIDStrategy'), function (re
* errors: Strings[messages]
* }
*/
router.post('/api/v1/register', recaptcha.middleware.verify, async (req, res) => {
if (!req.body) {
router.post('/api/v1/register', recaptcha.middleware.verify, async (request, response) => {
if (!request.body) {
// no post body
apiHelper.sendApiGenericError(res);
return;
return apiHelper.sendApiGenericError(response);
}
/*if (req.recaptcha.error) {
apiHelper.sendApiError(res, 500, ['Captcha error']);
/*if (request.recaptcha.error) {
apiHelper.sendApiError(response, 500, ['Captcha error']);
return;
}*/
const { email, password } = req.body;
const { email, password } = request.body;
const newUser = new PNID.PNIDModel({
email,
password,
@ -115,17 +114,15 @@ router.post('/api/v1/register', recaptcha.middleware.verify, async (req, res) =>
// saving to database
newUser.save().then((user) => {
apiHelper.sendReturn(res, {
return apiHelper.sendReturn(response, {
email: user.email,
email_validated: user.email_validated,
pnid: user.pnid.key
});
return;
}).catch((rejection) => {
// TODO format exception so it doesnt have a huge list of errors
console.log(rejection);
apiHelper.sendApiError(res, 500, [rejection]);
return;
console.warn(rejection);
return apiHelper.sendApiError(response, 500, [rejection]);
});
});

View File

@ -12,20 +12,22 @@ const utilHelper = require('../helpers/util');
const progressListModel = require('../models/progress-list').progressListModel;
// display progress
router.get('/progress', (req, res) => {
router.get('/progress', (request, response) => {
progressListModel.find({}, (err, progress) => {
if (err) return utilHelper.send404(res);
progressListModel.find({}, (error, progress) => {
if (error) {
return utilHelper.send404(response);
}
// filtering games and backend
const games = progress.filter(i => i.isGame);
const backends = progress.filter(i => !i.isGame);
res.render('progress', {
return response.render('progress', {
title: 'Pretendo | Progress',
games,
backends,
user: utilHelper.templateReadyUser(req),
user: utilHelper.templateReadyUser(request),
locale: utilHelper.getLocale('US', 'en'),
page: 'progress'
});
@ -44,11 +46,14 @@ router.get('/progress', (req, res) => {
* errors: Strings[messages]
* }
*/
router.get('/api/v1/listprogress', function (req, res) {
progressListModel.find({}, (err, progress) => {
router.get('/api/v1/listprogress', (request, response) => {
progressListModel.find({}, (error, progress) => {
// TODO format exception so it doesnt have a huge list of errors
if (err) return apiHelper.sendApiError(res, 500, [err]);
apiHelper.sendReturn(res, {
if (error) {
return apiHelper.sendApiError(response, 500, [error]);
}
apiHelper.sendReturn(response, {
progressList: progress
});
});

View File

@ -11,7 +11,7 @@ const handlebars = require('express-handlebars');
const session = require('express-session');
const mongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const morgan = require('morgan');
const config = require('./config.json');
const utilHelper = require('./helpers/util');
const passportconfig = require('./passport.config.js');
@ -29,8 +29,11 @@ connection.on('error', console.error.bind(console, 'connection error:'));
// setup express
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(morgan('dev'));
app.use(express.json());
app.use(express.urlencoded({
extended: true
}));
app.use(session({
secret: config.secrets.session,
saveUninitialized: true,
@ -87,16 +90,16 @@ app.use('/', locations.posts);
app.use('/', locations.admin);
app.use('/', locations.progress);
app.use('/', locations.pnid);
app.use((req, res) => {
utilHelper.send404(res);
app.use((request, response) => {
return utilHelper.send404(response);
});
// TODO improve error handling
// TODO remove param decoding errors from logs example: "host/test/%"
// 4 parameters required to read the error, cant help the eslint error
app.use((err, req, res, next) => { // eslint-disable-line no-unused-vars
console.error(err.stack);
return res.status(500).send('Something broke!');
app.use((error, request, response, next) => { // eslint-disable-line no-unused-vars
console.warn(error.stack);
return response.status(500).send('Something broke!');
});
// startup