From bae02a44ed6f387df1c60f9ed4bfc064401ccd62 Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Sat, 15 Feb 2025 12:56:43 +0200 Subject: [PATCH] Add cache buster middleware to clear browser cache on server restart --- server.js | 3 ++- src/middleware/cacheBuster.js | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 src/middleware/cacheBuster.js diff --git a/server.js b/server.js index 6f5634f41..18f5cba1a 100644 --- a/server.js +++ b/server.js @@ -60,6 +60,7 @@ import basicAuthMiddleware from './src/middleware/basicAuth.js'; import whitelistMiddleware from './src/middleware/whitelist.js'; import multerMonkeyPatch from './src/middleware/multerMonkeyPatch.js'; import initRequestProxy from './src/request-proxy.js'; +import getCacheBusterMiddleware from './src/middleware/cacheBuster.js'; import { getVersion, getConfigValue, @@ -515,7 +516,7 @@ if (!disableCsrf) { // Static files // Host index page -app.get('/', (request, response) => { +app.get('/', getCacheBusterMiddleware(), (request, response) => { if (shouldRedirectToLogin(request)) { const query = request.url.split('?')[1]; const redirectUrl = query ? `/login?${query}` : '/login'; diff --git a/src/middleware/cacheBuster.js b/src/middleware/cacheBuster.js new file mode 100644 index 000000000..c197edc6a --- /dev/null +++ b/src/middleware/cacheBuster.js @@ -0,0 +1,22 @@ +/** + * Middleware to bust the browser cache for the current user. + * @returns {import('express').RequestHandler} + */ +export default function getCacheBusterMiddleware() { + /** + * @type {Set} Handles that have already been busted. + */ + const handles = new Set(); + + return (request, response, next) => { + const handle = request.user?.profile?.handle; + + if (!handle || handles.has(handle)) { + return next(); + } + + handles.add(handle); + response.setHeader('Clear-Site-Data', '"cache"'); + next(); + }; +}