Add cache buster middleware to clear browser cache on server restart

bae02a44ed6f387df1c60f9ed4bfc064401ccd62

Cohee <18619528+Cohee1207@users.noreply.github.com>

2 files changed, +24 -1Ignore whitespace
server.js+2 -1
@@ -60,6 +60,7 @@ import basicAuthMiddleware from './src/middleware/basicAuth.js';
6060import whitelistMiddleware from './src/middleware/whitelist.js';
6161import multerMonkeyPatch from './src/middleware/multerMonkeyPatch.js';
6262import initRequestProxy from './src/request-proxy.js';
63+import getCacheBusterMiddleware from './src/middleware/cacheBuster.js';
6364import {
6465 getVersion,
6566 getConfigValue,
@@ -515,7 +516,7 @@ if (!disableCsrf) {
515516
516517// Static files
517518// Host index page
518519app.get('/', getCacheBusterMiddleware(), (request, response) => {
519520 if (shouldRedirectToLogin(request)) {
520521 const query = request.url.split('?')[1];
521522 const redirectUrl = query ? `/login?${query}` : '/login';
src/middleware/cacheBuster.js+22 -0
@@ -0,0 +1,22 @@
1+/**
2+ * Middleware to bust the browser cache for the current user.
3+ * @returns {import('express').RequestHandler}
4+ */
5+export default function getCacheBusterMiddleware() {
6+ /**
7+ * @type {Set<string>} Handles that have already been busted.
8+ */
9+ const handles = new Set();
10+
11+ return (request, response, next) => {
12+ const handle = request.user?.profile?.handle;
13+
14+ if (!handle || handles.has(handle)) {
15+ return next();
16+ }
17+
18+ handles.add(handle);
19+ response.setHeader('Clear-Site-Data', '"cache"');
20+ next();
21+ };
22+}