mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-07-09 15:17:49 +02:00
improve browser cache strategy
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
@@ -254,28 +266,30 @@ router.post("/", async (req: express.Request, res: express.Response) => {
|
|||||||
owner: r.owner,
|
owner: r.owner,
|
||||||
repo: r.name,
|
repo: r.name,
|
||||||
});
|
});
|
||||||
|
|
||||||
const repo = new AnonymizedRepositoryModel();
|
const repo = new AnonymizedRepositoryModel();
|
||||||
repo.repoId = repoUpdate.repoId;
|
repo.repoId = repoUpdate.repoId;
|
||||||
repo.anonymizeDate = new Date();
|
repo.anonymizeDate = new Date();
|
||||||
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,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (repo.source.type == "GitHubDownload") {
|
if (repo.source.type == "GitHubDownload") {
|
||||||
// details.size is in kilobytes
|
// details.size is in kilobytes
|
||||||
if (repository.size > config.MAX_REPO_SIZE) {
|
if (repository.size > config.MAX_REPO_SIZE) {
|
||||||
return res.status(500).send({ error: "invalid_mode" });
|
return res.status(500).send({ error: "invalid_mode" });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateRepoModel(repo, repoUpdate);
|
updateRepoModel(repo, repoUpdate);
|
||||||
|
|
||||||
await repo.save();
|
await repo.save();
|
||||||
res.send("ok");
|
res.send("ok");
|
||||||
new Repository(repo).anonymize();
|
new Repository(repo).anonymize();
|
||||||
|
|||||||
@@ -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
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user