feat: add morgan for logging requests if env is not production
This commit is contained in:
parent
1526637881
commit
49d3e3b203
|
@ -31,6 +31,7 @@
|
|||
"node": ">=8.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@mdi/font": "^5.3.45",
|
||||
"@nuxtjs/axios": "^5.4.1",
|
||||
"adm-zip": "^0.4.13",
|
||||
"bcrypt": "^4.0.1",
|
||||
|
@ -58,6 +59,7 @@
|
|||
"knex": "^0.16.3",
|
||||
"masonry-layout": "^4.2.2",
|
||||
"moment": "^2.24.0",
|
||||
"morgan": "^1.10.0",
|
||||
"multer": "^1.4.1",
|
||||
"mysql": "^2.16.0",
|
||||
"nuxt": "2.12.2",
|
||||
|
@ -168,7 +170,9 @@
|
|||
"error",
|
||||
"tab"
|
||||
],
|
||||
"import/no-extraneous-dependencies": "off"
|
||||
"import/no-extraneous-dependencies": "off",
|
||||
"no-restricted-syntax": "off",
|
||||
"no-continue": "off"
|
||||
},
|
||||
"settings": {
|
||||
"import/resolver": {
|
||||
|
|
|
@ -7,9 +7,9 @@ const db = require('knex')({
|
|||
user: process.env.DB_USER,
|
||||
password: process.env.DB_PASSWORD,
|
||||
database: process.env.DB_DATABASE,
|
||||
filename: nodePath.join(__dirname, '../../../database.sqlite')
|
||||
filename: nodePath.join(__dirname, '../../../database.sqlite'),
|
||||
},
|
||||
postProcessResponse: result => {
|
||||
postProcessResponse: (result) => {
|
||||
/*
|
||||
Fun fact: Depending on the database used by the user and given that I don't want
|
||||
to force a specific database for everyone because of the nature of this project,
|
||||
|
@ -18,8 +18,8 @@ const db = require('knex')({
|
|||
*/
|
||||
const booleanFields = ['enabled', 'enableDownload', 'isAdmin'];
|
||||
|
||||
const processResponse = row => {
|
||||
Object.keys(row).forEach(key => {
|
||||
const processResponse = (row) => {
|
||||
Object.keys(row).forEach((key) => {
|
||||
if (booleanFields.includes(key)) {
|
||||
if (row[key] === 0) row[key] = false;
|
||||
else if (row[key] === 1) row[key] = true;
|
||||
|
@ -28,11 +28,11 @@ const db = require('knex')({
|
|||
return row;
|
||||
};
|
||||
|
||||
if (Array.isArray(result)) return result.map(row => processResponse(row));
|
||||
if (Array.isArray(result)) return result.map((row) => processResponse(row));
|
||||
if (typeof result === 'object') return processResponse(result);
|
||||
return result;
|
||||
},
|
||||
useNullAsDefault: process.env.DB_CLIENT === 'sqlite3' ? true : false
|
||||
useNullAsDefault: process.env.DB_CLIENT === 'sqlite3',
|
||||
});
|
||||
const moment = require('moment');
|
||||
const log = require('../utils/Log');
|
||||
|
@ -76,11 +76,9 @@ class Route {
|
|||
.where({ id })
|
||||
.first();
|
||||
if (!user) return res.status(401).json({ message: 'Invalid authorization' });
|
||||
if (iat && iat < moment(user.passwordEditedAt).format('x'))
|
||||
return res.status(401).json({ message: 'Token expired' });
|
||||
if (iat && iat < moment(user.passwordEditedAt).format('x')) { return res.status(401).json({ message: 'Token expired' }); }
|
||||
if (!user.enabled) return res.status(401).json({ message: 'This account has been disabled' });
|
||||
if (this.options.adminOnly && !user.isAdmin)
|
||||
return res.status(401).json({ message: 'Invalid authorization' });
|
||||
if (this.options.adminOnly && !user.isAdmin) { return res.status(401).json({ message: 'Invalid authorization' }); }
|
||||
|
||||
return this.run(req, res, db, user);
|
||||
});
|
||||
|
@ -100,7 +98,7 @@ class Route {
|
|||
|
||||
run(req, res, db) {
|
||||
// eslint-disable-line no-unused-vars
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
error(res, error) {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
require('dotenv').config();
|
||||
|
||||
const log = require('../utils/Log');
|
||||
const express = require('express');
|
||||
const helmet = require('helmet');
|
||||
const cors = require('cors');
|
||||
|
@ -8,11 +7,14 @@ const RateLimit = require('express-rate-limit');
|
|||
const bodyParser = require('body-parser');
|
||||
const jetpack = require('fs-jetpack');
|
||||
const path = require('path');
|
||||
const morgan = require('morgan');
|
||||
const log = require('../utils/Log');
|
||||
const ThumbUtil = require('../utils/ThumbUtil');
|
||||
|
||||
const rateLimiter = new RateLimit({
|
||||
windowMs: parseInt(process.env.RATE_LIMIT_WINDOW, 10),
|
||||
max: parseInt(process.env.RATE_LIMIT_MAX, 10),
|
||||
delayMs: 0
|
||||
delayMs: 0,
|
||||
});
|
||||
|
||||
class Server {
|
||||
|
@ -32,16 +34,38 @@ class Server {
|
|||
});
|
||||
this.server.use(bodyParser.urlencoded({ extended: true }));
|
||||
this.server.use(bodyParser.json());
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
this.server.use(morgan('combined', {
|
||||
skip(req) {
|
||||
let ext = req.path.split('.').pop();
|
||||
if (ext) { ext = `.${ext.toLowerCase()}`; }
|
||||
|
||||
if (
|
||||
ThumbUtil.imageExtensions.indexOf(ext) > -1
|
||||
|| ThumbUtil.videoExtensions.indexOf(ext) > -1
|
||||
|| req.path.indexOf('_nuxt') > -1
|
||||
|| req.path.indexOf('favicon.ico') > -1
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
'stream': {
|
||||
write(str) { log.debug(str); },
|
||||
},
|
||||
}));
|
||||
}
|
||||
// this.server.use(rateLimiter);
|
||||
|
||||
// Serve the uploads
|
||||
this.server.use(express.static(path.join(__dirname, '..', '..', '..', 'uploads')));
|
||||
this.routesFolder = path.join(__dirname, '..', 'routes');
|
||||
this.server.use(express.static(path.join(__dirname, '../../../uploads')));
|
||||
this.routesFolder = path.join(__dirname, '../routes');
|
||||
}
|
||||
|
||||
registerAllTheRoutes() {
|
||||
jetpack.find(this.routesFolder, { matching: '*.js' }).forEach(routeFile => {
|
||||
const RouteClass = require(path.join('..', '..', '..', routeFile));
|
||||
jetpack.find(this.routesFolder, { matching: '*.js' }).forEach((routeFile) => {
|
||||
// eslint-disable-next-line import/no-dynamic-require, global-require
|
||||
const RouteClass = require(path.join('../../../', routeFile));
|
||||
let routes = [RouteClass];
|
||||
if (Array.isArray(RouteClass)) routes = RouteClass;
|
||||
for (const File of routes) {
|
||||
|
@ -55,7 +79,7 @@ class Server {
|
|||
serveNuxt() {
|
||||
// Serve the frontend if we are in production mode
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
this.server.use(express.static(path.join(__dirname, '..', '..', '..', 'dist')));
|
||||
this.server.use(express.static(path.join(__dirname, '../../../dist')));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -66,7 +90,7 @@ class Server {
|
|||
*/
|
||||
this.server.all('*', (_req, res) => {
|
||||
try {
|
||||
res.sendFile(path.join(__dirname, '..', '..', '..', 'dist', 'index.html'));
|
||||
res.sendFile(path.join(__dirname, '../../../dist/index.html'));
|
||||
} catch (error) {
|
||||
res.json({ success: false, message: 'Something went wrong' });
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue