improve browser cache strategy

This commit is contained in:
tdurieux
2021-08-13 00:34:09 +02:00
parent 70140bfb4b
commit 0283549901
4 changed files with 41 additions and 23 deletions
+2
View File
@@ -29,6 +29,8 @@ router.get(
res.attachment( res.attachment(
anonymizedPath.substring(anonymizedPath.lastIndexOf("/") + 1) anonymizedPath.substring(anonymizedPath.lastIndexOf("/") + 1)
); );
// ache the file for 6 hours
res.header('Cache-Control', 'max-age=21600000');
await f.send(res); await f.send(res);
} catch (error) { } catch (error) {
return handleError(error, res); return handleError(error, res);
+20 -6
View File
@@ -3,11 +3,7 @@ import { ensureAuthenticated } from "./connection";
import * as db from "../database/database"; import * as db from "../database/database";
import { getRepo, getUser, handleError } from "./route-utils"; import { getRepo, getUser, handleError } from "./route-utils";
import RepositoryModel from "../database/repositories/repositories.model"; import { getRepositoryFromGitHub } from "../source/GitHubRepository";
import {
GitHubRepository,
getRepositoryFromGitHub,
} from "../source/GitHubRepository";
import gh = require("parse-github-url"); import gh = require("parse-github-url");
import GitHubBase from "../source/GitHubBase"; import GitHubBase from "../source/GitHubBase";
import AnonymizedRepositoryModel from "../database/anonymizedRepositories/anonymizedRepositories.model"; import AnonymizedRepositoryModel from "../database/anonymizedRepositories/anonymizedRepositories.model";
@@ -17,6 +13,22 @@ import Repository from "../Repository";
const router = express.Router(); const router = express.Router();
// get repository information
router.get("/:repoId/", async (req: express.Request, res: express.Response) => {
const repo = await getRepo(req, res, { nocheck: true });
if (!repo) return;
try {
const user = await getUser(req);
if (user.username != repo.model.owner) {
return res.status(401).send({ error: "not_authorized" });
}
res.json((await db.getRepository(req.params.repoId)).toJSON());
} catch (error) {
handleError(error, res);
}
});
// user needs to be connected for all user API // user needs to be connected for all user API
router.use(ensureAuthenticated); router.use(ensureAuthenticated);
@@ -261,7 +273,9 @@ router.post("/", async (req: express.Request, res: express.Response) => {
repo.owner = user.username; repo.owner = user.username;
repo.source = { repo.source = {
type: type:
repoUpdate.options.mode == "download" ? "GitHubDownload" : "GitHubStream", repoUpdate.options.mode == "download"
? "GitHubDownload"
: "GitHubStream",
accessToken: user.accessToken, accessToken: user.accessToken,
repositoryId: repository.model.id, repositoryId: repository.model.id,
repositoryName: repoUpdate.fullName, repositoryName: repoUpdate.fullName,
+8 -12
View File
@@ -2,21 +2,10 @@ import * as express from "express";
import config from "../../config"; import config from "../../config";
import * as db from "../database/database"; import * as db from "../database/database";
import { getRepo, getUser, handleError } from "./route-utils"; import { getRepo, handleError } from "./route-utils";
const router = express.Router(); const router = express.Router();
router.get("/:repoId/", async (req: express.Request, res: express.Response) => {
const repo = await getRepo(req, res, { nocheck: true });
if (!repo) return;
try {
res.json((await db.getRepository(req.params.repoId)).toJSON());
} catch (error) {
handleError(error, res);
}
});
router.get( router.get(
"/:repoId/zip", "/:repoId/zip",
async (req: express.Request, res: express.Response) => { async (req: express.Request, res: express.Response) => {
@@ -27,6 +16,10 @@ router.get(
try { try {
res.attachment(`${repo.repoId}.zip`); res.attachment(`${repo.repoId}.zip`);
// ache the file for 6 hours
res.header('Cache-Control', 'max-age=21600000');
repo.zip().pipe(res); repo.zip().pipe(res);
} catch (error) { } catch (error) {
handleError(error, res); handleError(error, res);
@@ -40,6 +33,9 @@ router.get(
const repo = await getRepo(req, res); const repo = await getRepo(req, res);
if (!repo) return; if (!repo) return;
try { try {
// ache the file for 6 hours
res.header('Cache-Control', 'max-age=21600000');
res.json(await repo.anonymizedFiles({ includeSha: false })); res.json(await repo.anonymizedFiles({ includeSha: false }));
} catch (error) { } catch (error) {
handleError(error, res); handleError(error, res);
+7 -1
View File
@@ -85,7 +85,13 @@ export default async function start() {
.get("/r/:repoId/?*", indexResponse) .get("/r/:repoId/?*", indexResponse)
.get("/repository/:repoId/?*", indexResponse); .get("/repository/:repoId/?*", indexResponse);
app.use(express.static(path.join(__dirname, "..", "public"))); app.use(
express.static(path.join(__dirname, "..", "public"), {
etag: true,
lastModified: true,
maxAge: 3600000, // 1h
})
);
app.get("*", indexResponse); app.get("*", indexResponse);