diff --git a/src/app.ts b/src/app.ts index 2af8835..21553f4 100644 --- a/src/app.ts +++ b/src/app.ts @@ -26,7 +26,7 @@ import {userCounter} from './middleware/userCounter'; import {loggerMiddleware} from './middleware/logger'; import {corsMiddleware} from './middleware/cors'; import {rateLimitMiddleware} from './middleware/requestRateLimit'; -import dumpDatabase from './routes/dumpDatabase'; +import dumpDatabase, {redirectLink} from './routes/dumpDatabase'; export function createServer(callback: () => void) { @@ -131,6 +131,7 @@ function setupRoutes(app: Express) { if (config.postgres) { app.get('/database', (req, res) => dumpDatabase(req, res, true)); app.get('/database.json', (req, res) => dumpDatabase(req, res, false)); + app.get('/database/*', redirectLink) } else { app.get('/database.db', function (req: Request, res: Response) { res.sendFile("./databases/sponsorTimes.db", {root: "./"}); diff --git a/src/routes/dumpDatabase.ts b/src/routes/dumpDatabase.ts index 7610589..42e92ab 100644 --- a/src/routes/dumpDatabase.ts +++ b/src/routes/dumpDatabase.ts @@ -51,6 +51,7 @@ if (tables.length === 0) { } let lastUpdate = 0; +let updateQueued = false; function removeOutdatedDumps(exportPath: string): Promise { return new Promise((resolve, reject) => { @@ -105,7 +106,7 @@ export default async function dumpDatabase(req: Request, res: Response, showPage } const now = Date.now(); - const updateQueued = now - lastUpdate > MILLISECONDS_BETWEEN_DUMPS; + updateQueued ||= now - lastUpdate > MILLISECONDS_BETWEEN_DUMPS; res.status(200) @@ -128,7 +129,7 @@ export default async function dumpDatabase(req: Request, res: Response, showPage return ` ${item.tableName} - ${item.fileName} + ${item.tableName} `; }).join('')} @@ -144,7 +145,7 @@ export default async function dumpDatabase(req: Request, res: Response, showPage links: latestDumpFiles.map((item:any) => { return { table: item.tableName, - url: `/database/${item.fileName}`, + url: `/database/${item.tableName}`, size: item.fileSize, }; }), @@ -169,5 +170,17 @@ export default async function dumpDatabase(req: Request, res: Response, showPage }); } latestDumpFiles = [...dumpFiles]; + + updateQueued = false; } } + +export async function redirectLink(req: Request, res: Response): Promise { + const file = latestDumpFiles.find((value) => "/database/" + value.tableName === req.path); + + if (file) { + res.redirect("/download/" + file.fileName); + } else { + res.status(404).send(); + } +} \ No newline at end of file