From c2a141a6b73cd1f0b138955e979522e895605c9f Mon Sep 17 00:00:00 2001 From: HF Date: Wed, 5 Jan 2022 13:25:18 +0100 Subject: [PATCH] change how css gets loaded (it was more complicated that it needs too) remove express-limiter (nginx does the ratelimiting) --- package-lock.json | 153 +++++++++++++++++++++++++-------- package.json | 11 +-- src/client.js | 2 - src/routes/admintools.js | 18 ---- src/routes/reset_password.js | 17 ---- src/styles/default.css | 45 ++++++++++ src/styles/font.css | 40 --------- webpack.config.client.babel.js | 12 --- webpack.config.server.babel.js | 1 + 9 files changed, 167 insertions(+), 132 deletions(-) delete mode 100644 src/styles/font.css diff --git a/package-lock.json b/package-lock.json index 847521de..5ce5557f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,6 @@ "cors": "^2.8.4", "etag": "^1.8.1", "express": "^4.17.2", - "express-limiter": "^1.6.0", "express-session": "^1.17.2", "global": "^4.3.2", "http-proxy-agent": "^5.0.0", @@ -81,6 +80,7 @@ "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "babel-plugin-ttag": "^1.7.30", "clean-css": "^5.2.2", + "clean-css-loader": "^4.1.1", "copy-webpack-plugin": "^10.2.0", "css-loader": "^6.5.1", "eslint": "^8.6.0", @@ -91,7 +91,6 @@ "eslint-plugin-react": "^7.28.0", "generate-package-json-webpack-plugin": "^2.5.1", "mkdirp": "^1.0.4", - "style-loader": "^3.3.1", "ttag-cli": "^1.9.3", "webpack": "^5.65.0", "webpack-bundle-analyzer": "^4.5.0", @@ -3427,6 +3426,76 @@ "node": ">= 10.0" } }, + "node_modules/clean-css-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/clean-css-loader/-/clean-css-loader-4.1.1.tgz", + "integrity": "sha512-ipWsH2tIjBcMjB/hDFEPMYbTJYgewEqNJj6wAIfr1ZFme4r5O4WuUFdcVCym/t1sTOB+h0lQWPeUJOWq8cu1HQ==", + "dev": true, + "dependencies": { + "clean-css": "^5.0.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "webpack": ">=2.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/clean-css-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/clean-css-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/clean-css-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/clean-css/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5069,11 +5138,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express-limiter": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/express-limiter/-/express-limiter-1.6.1.tgz", - "integrity": "sha512-w/Xz/FIHuAOIVIUeHSe6g2rSYTqCSKA9WFLO2CxX15BzEAK+avp7HoYd7pu/M2tEp5E/to253+4x8vQ6WcTJkQ==" - }, "node_modules/express-session": { "version": "1.17.2", "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz", @@ -9576,22 +9640,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -13332,6 +13380,53 @@ } } }, + "clean-css-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/clean-css-loader/-/clean-css-loader-4.1.1.tgz", + "integrity": "sha512-ipWsH2tIjBcMjB/hDFEPMYbTJYgewEqNJj6wAIfr1ZFme4r5O4WuUFdcVCym/t1sTOB+h0lQWPeUJOWq8cu1HQ==", + "dev": true, + "requires": { + "clean-css": "^5.0.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -14624,11 +14719,6 @@ } } }, - "express-limiter": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/express-limiter/-/express-limiter-1.6.1.tgz", - "integrity": "sha512-w/Xz/FIHuAOIVIUeHSe6g2rSYTqCSKA9WFLO2CxX15BzEAK+avp7HoYd7pu/M2tEp5E/to253+4x8vQ6WcTJkQ==" - }, "express-session": { "version": "1.17.2", "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz", @@ -17977,13 +18067,6 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, - "requires": {} - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", diff --git a/package.json b/package.json index a6e2b8b4..52a8f45a 100644 --- a/package.json +++ b/package.json @@ -10,15 +10,11 @@ "main": "server.js", "scripts": { "build": "babel-node scripts/build.js && npm run minify-css", - "build:dev": "npm run extract && npm run minify-css", + "build:dev": "webpack --env extract --config ./webpack.config.server.babel.js && webpack --env extract --env development --config ./webpack.config.client.babel.js && npm run minify-css", "minify-css": "babel-node scripts/minifyCss.js", - "extract": "webpack --env extract --config ./webpack.config.server.babel.js && webpack --env extract --env development --config ./webpack.config.client.babel.js", "babel-node": "cd $INIT_CWD && babel-node", "lint": "cd $INIT_CWD && eslint --ext .jsx --ext .js", - "lint:src": "eslint --ext .jsx --ext .js src", - "lint:css": "stylelint \"src/**/*.{css,less,scss,sss}\"", - "lint:staged": "lint-staged", - "upgrade": "npm-check --update" + "lint:src": "eslint --ext .jsx --ext .js src" }, "author": "HF ", "browserslist": [ @@ -38,7 +34,6 @@ "cors": "^2.8.4", "etag": "^1.8.1", "express": "^4.17.2", - "express-limiter": "^1.6.0", "express-session": "^1.17.2", "global": "^4.3.2", "http-proxy-agent": "^5.0.0", @@ -100,6 +95,7 @@ "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "babel-plugin-ttag": "^1.7.30", "clean-css": "^5.2.2", + "clean-css-loader": "^4.1.1", "copy-webpack-plugin": "^10.2.0", "css-loader": "^6.5.1", "eslint": "^8.6.0", @@ -110,7 +106,6 @@ "eslint-plugin-react": "^7.28.0", "generate-package-json-webpack-plugin": "^2.5.1", "mkdirp": "^1.0.4", - "style-loader": "^3.3.1", "ttag-cli": "^1.9.3", "webpack": "^5.65.0", "webpack-bundle-analyzer": "^4.5.0", diff --git a/src/client.js b/src/client.js index b6270717..57aec50e 100644 --- a/src/client.js +++ b/src/client.js @@ -3,8 +3,6 @@ // eslint-disable-next-line no-unused-vars import fetch from 'isomorphic-fetch'; // TODO put in the beggining with webpack! -import './styles/font.css'; - import onKeyPress from './controls/keypress'; import { fetchMe, diff --git a/src/routes/admintools.js b/src/routes/admintools.js index 2600a24a..f4c7578b 100644 --- a/src/routes/admintools.js +++ b/src/routes/admintools.js @@ -7,17 +7,14 @@ */ import express from 'express'; -import expressLimiter from 'express-limiter'; import type { Request, Response } from 'express'; import bodyParser from 'body-parser'; import multer from 'multer'; import { getIPFromRequest } from '../utils/ip'; -import redis from '../data/redis'; import session from '../core/session'; import passport from '../core/passport'; import { admintoolsLogger } from '../core/logger'; -import { MINUTE } from '../core/constants'; import { executeIPAction, executeImageAction, @@ -30,8 +27,6 @@ import { const router = express.Router(); -const limiter = expressLimiter(router, redis); - /* * multer middleware for getting POST parameters @@ -45,19 +40,6 @@ const upload = multer({ }); -/* - * rate limiting to prevent bruteforce attacks - * TODO: do that with nginx - */ -router.use('/', - limiter({ - lookup: 'headers.cf-connecting-ip', - total: 240, - expire: 5 * MINUTE, - skipHeaders: true, - })); - - /* * make sure User is logged in and mod or admin */ diff --git a/src/routes/reset_password.js b/src/routes/reset_password.js index 4024a0cd..48dc2be5 100644 --- a/src/routes/reset_password.js +++ b/src/routes/reset_password.js @@ -5,35 +5,18 @@ */ import express from 'express'; -import expressLimiter from 'express-limiter'; import bodyParser from 'body-parser'; import type { Request, Response } from 'express'; -import redis from '../data/redis'; import logger from '../core/logger'; import getPasswordResetHtml from '../ssr-components/PasswordReset'; -import { MINUTE } from '../core/constants'; import mailProvider from '../core/mail'; import { RegUser } from '../data/models'; const router = express.Router(); -const limiter = expressLimiter(router, redis); - - -/* - * rate limiting to prevent bruteforce attacks - */ -router.use('/', - limiter({ - lookup: 'headers.cf-connecting-ip', - total: 24, - expire: 5 * MINUTE, - skipHeaders: true, - })); - /* * decode form data to req.body diff --git a/src/styles/default.css b/src/styles/default.css index dc59d1d5..94e64ab0 100644 --- a/src/styles/default.css +++ b/src/styles/default.css @@ -1,3 +1,48 @@ +/* --- fonts --- */ + +/* cyrillic-ext */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459WRhyzbi.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459W1hyzbi.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459WZhyzbi.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459Wdhyzbi.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459Wlhyw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/*-----------*/ + body { margin: 0; font-family: 'Montserrat', sans-serif; diff --git a/src/styles/font.css b/src/styles/font.css deleted file mode 100644 index 860c8af0..00000000 --- a/src/styles/font.css +++ /dev/null @@ -1,40 +0,0 @@ -/* cyrillic-ext */ -@font-face { - font-family: 'Montserrat'; - font-style: normal; - font-weight: 400; - src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459WRhyzbi.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Montserrat'; - font-style: normal; - font-weight: 400; - src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459W1hyzbi.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* vietnamese */ -@font-face { - font-family: 'Montserrat'; - font-style: normal; - font-weight: 400; - src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459WZhyzbi.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Montserrat'; - font-style: normal; - font-weight: 400; - src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459Wdhyzbi.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Montserrat'; - font-style: normal; - font-weight: 400; - src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459Wlhyw.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} diff --git a/webpack.config.client.babel.js b/webpack.config.client.babel.js index d801cfd5..e902a61f 100644 --- a/webpack.config.client.babel.js +++ b/webpack.config.client.babel.js @@ -130,18 +130,6 @@ export function buildWebpackClientConfig( plugins: babelPlugins, }, }, - { - test: /\.css/, - use: ['style-loader', - { - loader: 'css-loader', - options: { - sourceMap: development, - modules: false, - }, - }, - ], - }, ], }, diff --git a/webpack.config.server.babel.js b/webpack.config.server.babel.js index 5e4bbd40..4f5ef073 100644 --- a/webpack.config.server.babel.js +++ b/webpack.config.server.babel.js @@ -96,6 +96,7 @@ export default ({ modules: false, }, }, + 'clean-css-loader', ], }, {