Add redirects

This commit is contained in:
Ajay Ramachandran
2021-04-19 20:54:52 -04:00
parent dad4fbca75
commit 19058d3760
2 changed files with 18 additions and 4 deletions

View File

@@ -26,7 +26,7 @@ import {userCounter} from './middleware/userCounter';
import {loggerMiddleware} from './middleware/logger'; import {loggerMiddleware} from './middleware/logger';
import {corsMiddleware} from './middleware/cors'; import {corsMiddleware} from './middleware/cors';
import {rateLimitMiddleware} from './middleware/requestRateLimit'; import {rateLimitMiddleware} from './middleware/requestRateLimit';
import dumpDatabase from './routes/dumpDatabase'; import dumpDatabase, {redirectLink} from './routes/dumpDatabase';
export function createServer(callback: () => void) { export function createServer(callback: () => void) {
@@ -131,6 +131,7 @@ function setupRoutes(app: Express) {
if (config.postgres) { if (config.postgres) {
app.get('/database', (req, res) => dumpDatabase(req, res, true)); app.get('/database', (req, res) => dumpDatabase(req, res, true));
app.get('/database.json', (req, res) => dumpDatabase(req, res, false)); app.get('/database.json', (req, res) => dumpDatabase(req, res, false));
app.get('/database/*', redirectLink)
} else { } else {
app.get('/database.db', function (req: Request, res: Response) { app.get('/database.db', function (req: Request, res: Response) {
res.sendFile("./databases/sponsorTimes.db", {root: "./"}); res.sendFile("./databases/sponsorTimes.db", {root: "./"});

View File

@@ -51,6 +51,7 @@ if (tables.length === 0) {
} }
let lastUpdate = 0; let lastUpdate = 0;
let updateQueued = false;
function removeOutdatedDumps(exportPath: string): Promise<void> { function removeOutdatedDumps(exportPath: string): Promise<void> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@@ -105,7 +106,7 @@ export default async function dumpDatabase(req: Request, res: Response, showPage
} }
const now = Date.now(); const now = Date.now();
const updateQueued = now - lastUpdate > MILLISECONDS_BETWEEN_DUMPS; updateQueued ||= now - lastUpdate > MILLISECONDS_BETWEEN_DUMPS;
res.status(200) res.status(200)
@@ -128,7 +129,7 @@ export default async function dumpDatabase(req: Request, res: Response, showPage
return ` return `
<tr> <tr>
<td>${item.tableName}</td> <td>${item.tableName}</td>
<td><a href="/database/${item.fileName}">${item.fileName}</a></td> <td><a href="/database/${item.tableName}">${item.tableName}</a></td>
</tr> </tr>
`; `;
}).join('')} }).join('')}
@@ -144,7 +145,7 @@ export default async function dumpDatabase(req: Request, res: Response, showPage
links: latestDumpFiles.map((item:any) => { links: latestDumpFiles.map((item:any) => {
return { return {
table: item.tableName, table: item.tableName,
url: `/database/${item.fileName}`, url: `/database/${item.tableName}`,
size: item.fileSize, size: item.fileSize,
}; };
}), }),
@@ -169,5 +170,17 @@ export default async function dumpDatabase(req: Request, res: Response, showPage
}); });
} }
latestDumpFiles = [...dumpFiles]; latestDumpFiles = [...dumpFiles];
updateQueued = false;
} }
} }
export async function redirectLink(req: Request, res: Response): Promise<void> {
const file = latestDumpFiles.find((value) => "/database/" + value.tableName === req.path);
if (file) {
res.redirect("/download/" + file.fileName);
} else {
res.status(404).send();
}
}