add if-modified-since and cache-control

This commit is contained in:
acalcutt 2025-01-04 12:50:37 -05:00
parent 4e2e46a98d
commit 7e67f40fbf

View file

@ -118,7 +118,7 @@ export const serve_style = {
if (!item || !validatedFormat) { if (!item || !validatedFormat) {
if (verbose) if (verbose)
console.error( console.error(
`Sprite item, format, or scale not found for: /styles/%s/sprite/%s%s%s`, `Sprite item or format not found for: /styles/%s/sprite/%s%s%s`,
sanitizedId, sanitizedId,
sanitizedSpriteID, sanitizedSpriteID,
sanitizedScale, sanitizedScale,
@ -126,13 +126,12 @@ export const serve_style = {
); );
return res.sendStatus(404); return res.sendStatus(404);
} }
const sprite = item.spritePaths.find((sprite) => sprite.id === spriteID); const sprite = item.spritePaths.find((sprite) => sprite.id === spriteID);
const spriteScale = allowedSpriteScales(scale); const spriteScale = allowedSpriteScales(scale);
if (!sprite || spriteScale === null) { if (!sprite || spriteScale === null) {
if (verbose) if (verbose)
console.error( console.error(
`Sprite not found for: /styles/%s/sprite/%s%s%s`, `Bad Sprite ID or Scale for: /styles/%s/sprite/%s%s%s`,
sanitizedId, sanitizedId,
sanitizedSpriteID, sanitizedSpriteID,
sanitizedScale, sanitizedScale,
@ -141,6 +140,14 @@ export const serve_style = {
return res.status(400).send('Bad Sprite ID or Scale'); return res.status(400).send('Bad Sprite ID or Scale');
} }
const modifiedSince = req.get('if-modified-since');
const cc = req.get('cache-control');
if (modifiedSince && (!cc || cc.indexOf('no-cache') === -1)) {
if (new Date(item.lastModified) <= new Date(modifiedSince)) {
return res.sendStatus(304);
}
}
const sanitizedSpritePath = sprite.path.replace(/^(\.\.\/)+/, ''); const sanitizedSpritePath = sprite.path.replace(/^(\.\.\/)+/, '');
const filename = `${sanitizedSpritePath}${spriteScale}.${validatedFormat}`; const filename = `${sanitizedSpritePath}${spriteScale}.${validatedFormat}`;
if (verbose) console.log(`Loading sprite from: %s`, filename); if (verbose) console.log(`Loading sprite from: %s`, filename);
@ -156,6 +163,7 @@ export const serve_style = {
); );
return res.sendStatus(404); return res.sendStatus(404);
} }
if (validatedFormat === 'json') { if (validatedFormat === 'json') {
res.header('Content-type', 'application/json'); res.header('Content-type', 'application/json');
} else if (validatedFormat === 'png') { } else if (validatedFormat === 'png') {
@ -169,6 +177,7 @@ export const serve_style = {
sanitizedScale, sanitizedScale,
sanitizedFormat, sanitizedFormat,
); );
res.set({ 'Last-Modified': item.lastModified });
return res.send(data); return res.send(data);
}); });
}); });