From 73d98c0ac16aa319bbb41513f7770a31ab1387f2 Mon Sep 17 00:00:00 2001 From: scoliono <2191476+scoliono@users.noreply.github.com> Date: Thu, 3 Sep 2020 18:06:36 -0700 Subject: [PATCH] added special router for legacy browsers --- package-lock.json | 45 ++++++++++++++++----- package.json | 1 + src/legacy/middleware.js | 19 +++++++++ src/legacy/router.js | 8 ++++ src/legacy/views/index.ejs | 9 +++++ src/server.js | 82 ++++++++++++++++++++------------------ 6 files changed, 115 insertions(+), 49 deletions(-) create mode 100644 src/legacy/middleware.js create mode 100644 src/legacy/router.js create mode 100644 src/legacy/views/index.ejs diff --git a/package-lock.json b/package-lock.json index 8910a37..e68eae1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1747,7 +1747,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -1859,6 +1858,11 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -2395,7 +2399,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2556,7 +2559,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -2564,8 +2566,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "commander": { "version": "2.20.3", @@ -2997,6 +2998,14 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "ejs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==", + "requires": { + "jake": "^10.6.1" + } + }, "electron-to-chromium": { "version": "1.3.555", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.555.tgz", @@ -3131,8 +3140,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint-scope": { "version": "4.0.3", @@ -3409,6 +3417,14 @@ "dev": true, "optional": true }, + "filelist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", + "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -3641,8 +3657,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { "version": "1.0.1", @@ -4140,6 +4155,17 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "jake": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + } + }, "jest-worker": { "version": "26.3.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", @@ -6373,7 +6399,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } diff --git a/package.json b/package.json index 9d8b8e8..e5b9a03 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "cookie-parser": "^1.4.5", "cors": "^2.8.5", "dotenv": "^8.2.0", + "ejs": "^3.1.5", "express": "^4.17.1", "express-fileupload": "^1.2.0", "express-session": "^1.17.1", diff --git a/src/legacy/middleware.js b/src/legacy/middleware.js new file mode 100644 index 0000000..f67bf48 --- /dev/null +++ b/src/legacy/middleware.js @@ -0,0 +1,19 @@ +/** + * (default behavior) detect if user is on IE <= 10 + */ +var isMSIE = function (req) { + var ua = req.get('User-Agent'); + return ua && ua.indexOf('MSIE ') > 0; +}; + +/** + * middleware that invokes one of two callbacks depending on if + * the client is on a legacy browser + */ +export default (cb, determiner = isMSIE) => function (req, res, next) { + if (determiner(req)) { + cb(req, res, next); + } else { + next(); + } +}; diff --git a/src/legacy/router.js b/src/legacy/router.js new file mode 100644 index 0000000..2402543 --- /dev/null +++ b/src/legacy/router.js @@ -0,0 +1,8 @@ +import express from 'express'; +const app = express.Router(); + +app.get('*', function (req, res) { + res.render('index'); +}); + +export default app; diff --git a/src/legacy/views/index.ejs b/src/legacy/views/index.ejs new file mode 100644 index 0000000..06148fc --- /dev/null +++ b/src/legacy/views/index.ejs @@ -0,0 +1,9 @@ + + + + HOWFEED.biz + + +

Hello world

+ + diff --git a/src/server.js b/src/server.js index cf11f3e..d94042c 100644 --- a/src/server.js +++ b/src/server.js @@ -13,10 +13,13 @@ import fs from 'fs'; import cors from 'cors'; import helmet from 'helmet'; import useragent from 'useragent'; +import path from 'path'; import crypto from 'crypto'; import Article from './models/article.js'; import Category from './models/category.js'; import User from './models/user.js'; +import legacyMiddleware from './legacy/middleware.js'; +import legacyRouter from './legacy/router.js'; require('dotenv').config(); const FileStore = sessionFileStore(session); @@ -108,30 +111,13 @@ const isAuthor = function(req, res, next) { }; -express() - .use(helmet()) - .use(cors()) - .use(bodyParser.json()) - .use(bodyParser.urlencoded({ extended: true })) - .use(fileUpload({ - limits: { fileSize: 16000000 } - })) - .use(session({ - secret: SESSION_SECRET, - resave: false, - saveUninitialized: true, - cookie: { - httpOnly: true, - maxAge: 31536000 - }, - store: new FileStore({ - path: '.sessions' - }) - })) - .use(passport.initialize()) - .use(passport.session()) +var app = express(); +app.set('view engine', 'ejs'); +app.set('views', process.cwd() + '/src/legacy/views'); - .post('/cms/login', +var mainRouter = express.Router(); +mainRouter + .post('/cms/login', // rateLimiterMiddleware(loginAttemptRateLimiter), passport.authenticate('local', { failWithError: true }), function(req, res, next) { @@ -148,7 +134,6 @@ express() })); } ) - .get('/cms/logout', (req, res, next) => { req.logout(); req.session.destroy(function (err) { @@ -156,7 +141,6 @@ express() return res.redirect('/'); }); }) - .post('/cms/article/:edit?', isAuthor, async function(req, res, next) { @@ -255,7 +239,6 @@ express() } } ) - .post('/cms/upload', isAuthor, async function(req, res, next) { @@ -306,7 +289,6 @@ express() } } ) - .post('/cms/category', isAuthor, async function(req, res, next) { @@ -338,7 +320,6 @@ express() } } ) - .post('/me/avatar', async function(req, res, next) { if (!req.user) { @@ -399,20 +380,43 @@ express() })); } } - ) + ); - .use(compression({ threshold: 0 })) - .use(express.static('./static')) - .use(async function (req, res, next) { - if (req.useragent.browser) { - } - }) - .use(sapper.middleware({ - session: req => ({ - user: req.session.passport ? req.session.passport.user : null +app.use(helmet()) + .use(cors()) + .use(bodyParser.json()) + .use(bodyParser.urlencoded({ extended: true })) + .use(fileUpload({ + limits: { fileSize: 16000000 } + })) + .use(session({ + secret: SESSION_SECRET, + resave: false, + saveUninitialized: true, + cookie: { + httpOnly: true, + maxAge: 31536000 + }, + store: new FileStore({ + path: '.sessions' }) })) - + .use(passport.initialize()) + .use(passport.session()) + .use(compression({ threshold: 0 })) + .use(express.static('./static')) + .use('/', mainRouter) + .use('/legacy', legacyRouter) + .use(legacyMiddleware((req, res) => { + if (req.baseUrl !== '/legacy') { + res.redirect('/legacy' + req.originalUrl); + } + })) + .use(sapper.middleware({ + session: req => ({ + user: req.session.passport ? req.session.passport.user : null + }) + })) .listen(PORT, err => { if (err) console.log('error', err); console.log(`Express server listening on port ${PORT}`);