diff --git a/server.js b/server.js index 1f34b91a3..f8536de2c 100644 --- a/server.js +++ b/server.js @@ -41,7 +41,7 @@ import { import getWebpackServeMiddleware from './src/middleware/webpack-serve.js'; import basicAuthMiddleware from './src/middleware/basicAuth.js'; -import whitelistMiddleware from './src/middleware/whitelist.js'; +import getWhitelistMiddleware from './src/middleware/whitelist.js'; import accessLoggerMiddleware, { getAccessLogPath, migrateAccessLog } from './src/middleware/accessLogWriter.js'; import multerMonkeyPatch from './src/middleware/multerMonkeyPatch.js'; import initRequestProxy from './src/request-proxy.js'; @@ -125,7 +125,8 @@ if (cliArgs.listen && cliArgs.basicAuthMode) { } if (cliArgs.whitelistMode) { - app.use(whitelistMiddleware()); + const whitelistMiddleware = await getWhitelistMiddleware(); + app.use(whitelistMiddleware); } if (cliArgs.listen) { diff --git a/src/middleware/whitelist.js b/src/middleware/whitelist.js index 9427b3ba8..4cf8d0b79 100644 --- a/src/middleware/whitelist.js +++ b/src/middleware/whitelist.js @@ -22,8 +22,6 @@ if (fs.existsSync(whitelistPath)) { } } -await resolveHostnames(); - /** * Get the client IP address from the request headers. * @param {import('express').Request} req Express request object @@ -110,9 +108,9 @@ async function resolveHostnames() { /** * Returns a middleware function that checks if the client IP is in the whitelist. - * @returns {import('express').RequestHandler} The middleware function + * @returns {Promise} Promise that resolves to the middleware function */ -export default function whitelistMiddleware() { +export default async function getWhitelistMiddleware() { const forbiddenWebpage = Handlebars.compile( safeReadFileSync('./public/error/forbidden-by-whitelist.html') ?? '', ); @@ -121,6 +119,8 @@ export default function whitelistMiddleware() { '/favicon.ico', ]; + await resolveHostnames(); + return function (req, res, next) { const clientIp = getIpFromRequest(req); const forwardedIp = getForwardedIp(req);