Facebook-Events-iCal-Converter/lib/middlewares.js

71 lines
1.6 KiB
JavaScript

const winston = require('winston')
const expressWinston = require('express-winston')
const path = require('path')
const { checkValidURL } = require('./utils')
const { createTransports } = require('./log-utils')
const MissingURLParameter = () => new Error('Please provide valid URL or event number.')
const sendJSON = (req) => {
return req.accepts().includes('application/json')
}
const genericErrorHandler = (err, req, res, next) => {
if (sendJSON(req)) {
res
.status(500)
.send({ error: err.toString() })
return
}
res
.status(500)
.render('error', { error: err.toString() })
}
const checkURLParameter = (req, res, next) => {
const { url } = req.body
if (!url || !checkValidURL(url)) {
return next(MissingURLParameter())
}
return next()
}
const forceSecure = (req, res, next) => {
if (req.headers['x-forwarded-proto'] === 'http') {
return res.status(301).redirect(`https://${req.headers.host}/`)
}
return next()
}
const createRouteLogger = ({ dev }) => {
return expressWinston.logger({
transports: createTransports(dev),
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
meta: true,
expressFormat: true,
})
}
const createErrorLogger = ({ dev }) => {
return expressWinston.errorLogger({
transports: createTransports(dev),
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
})
}
module.exports = {
genericErrorHandler,
checkURLParameter,
forceSecure,
createRouteLogger,
createErrorLogger,
}