Add cache buster middleware to clear browser cache on server restart

bae02a44ed6f387df1c60f9ed4bfc064401ccd62

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

2 files changed, +24 -1Showing whitespace changes
server.js+2 -1
@@ -60,6 +60,7 @@ import basicAuthMiddleware from './src/middleware/basicAuth.js';
60import whitelistMiddleware from './src/middleware/whitelist.js';60import whitelistMiddleware from './src/middleware/whitelist.js';
61import multerMonkeyPatch from './src/middleware/multerMonkeyPatch.js';61import multerMonkeyPatch from './src/middleware/multerMonkeyPatch.js';
62import initRequestProxy from './src/request-proxy.js';62import initRequestProxy from './src/request-proxy.js';
63import getCacheBusterMiddleware from './src/middleware/cacheBuster.js';
63import {64import {
64 getVersion,65 getVersion,
65 getConfigValue,66 getConfigValue,
@@ -515,7 +516,7 @@ if (!disableCsrf) {
515516
516// Static files517// Static files
517// Host index page518// Host index page
518app.get('/', (request, response) => {519app.get('/', getCacheBusterMiddleware(), (request, response) => {
519 if (shouldRedirectToLogin(request)) {520 if (shouldRedirectToLogin(request)) {
520 const query = request.url.split('?')[1];521 const query = request.url.split('?')[1];
521 const redirectUrl = query ? `/login?${query}` : '/login';522 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 */
5export 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}