mirror of
https://github.com/PretendoNetwork/website.git
synced 2026-03-22 01:34:44 -05:00
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:
parent
4c0f6d4290
commit
e52ccfdfd8
|
|
@ -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
107
package-lock.json
generated
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
166
routes/admin.js
166
routes/admin.js
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
});
|
||||
});
|
||||
|
|
|
|||
19
server.js
19
server.js
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user