mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-02-12 18:32:44 +00:00
64 lines
1.9 KiB
TypeScript
64 lines
1.9 KiB
TypeScript
import * as express from "express";
|
|
import GitHubStream from "../core/source/GitHubStream";
|
|
import { AnonymizeTransformer, isTextFile } from "../core/anonymize-utils";
|
|
import { handleError } from "../server/routes/route-utils";
|
|
import { contentType } from "mime-types";
|
|
|
|
export const router = express.Router();
|
|
|
|
router.post("/", async (req: express.Request, res: express.Response) => {
|
|
req.body = req.body || {};
|
|
const token: string = req.body.token;
|
|
const repoFullName = req.body.repoFullName.split("/");
|
|
const repoId = req.body.repoId;
|
|
const branch = req.body.branch;
|
|
const fileSha = req.body.sha;
|
|
const commit = req.body.commit;
|
|
const filePath = req.body.filePath;
|
|
const anonymizerOptions = req.body.anonymizerOptions;
|
|
const anonymizer = new AnonymizeTransformer(anonymizerOptions);
|
|
|
|
const source = new GitHubStream({
|
|
repoId,
|
|
organization: repoFullName[0],
|
|
repoName: repoFullName[1],
|
|
commit: commit,
|
|
getToken: () => token,
|
|
});
|
|
const content = source.downloadFile(token, fileSha);
|
|
try {
|
|
const mime = contentType(filePath);
|
|
if (mime && !filePath.endsWith(".ts")) {
|
|
res.contentType(mime);
|
|
} else if (isTextFile(filePath)) {
|
|
res.contentType("text/plain");
|
|
}
|
|
res.header("Accept-Ranges", "none");
|
|
anonymizer.once("transform", (data) => {
|
|
if (!mime && data.isText) {
|
|
res.contentType("text/plain");
|
|
}
|
|
});
|
|
function handleStreamError(error: Error) {
|
|
if (!content.closed && !content.destroyed) {
|
|
content.destroy();
|
|
}
|
|
handleError(error, res);
|
|
}
|
|
content
|
|
.on("error", handleStreamError)
|
|
.pipe(anonymizer)
|
|
.pipe(res)
|
|
.on("error", handleStreamError)
|
|
.on("close", () => {
|
|
if (!content.closed && !content.destroyed) {
|
|
content.destroy();
|
|
}
|
|
});
|
|
} catch (error) {
|
|
handleError(error, res);
|
|
}
|
|
});
|
|
|
|
export default router;
|