mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-08-15 00:10:44 +02:00
improve error handling
This commit is contained in:
+5
-1
@@ -98,12 +98,16 @@ export default class User {
|
|||||||
repo.options.expirationDate != null &&
|
repo.options.expirationDate != null &&
|
||||||
repo.options.expirationDate < new Date()
|
repo.options.expirationDate < new Date()
|
||||||
) {
|
) {
|
||||||
await repo.expire()
|
await repo.expire();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return repositories;
|
return repositories;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get model() {
|
||||||
|
return this._model;
|
||||||
|
}
|
||||||
|
|
||||||
toJSON() {
|
toJSON() {
|
||||||
return this._model.toJSON();
|
return this._model.toJSON();
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -16,9 +16,9 @@ router.get(
|
|||||||
const repo = await getRepo(req, res);
|
const repo = await getRepo(req, res);
|
||||||
if (!repo) return;
|
if (!repo) return;
|
||||||
|
|
||||||
await repo.countView();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
await repo.countView();
|
||||||
|
|
||||||
const f = new AnonymizedFile(repo, {
|
const f = new AnonymizedFile(repo, {
|
||||||
anonymizedPath,
|
anonymizedPath,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -55,8 +55,7 @@ router.post("/claim", async (req: express.Request, res: express.Response) => {
|
|||||||
);
|
);
|
||||||
return res.send("Ok");
|
return res.send("Ok");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(req.path, error);
|
handleError(error, res);
|
||||||
return res.status(500).json({ error });
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -66,12 +65,17 @@ router.post(
|
|||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
const repo = await getRepo(req, res, { nocheck: true });
|
const repo = await getRepo(req, res, { nocheck: true });
|
||||||
if (!repo) return;
|
if (!repo) return;
|
||||||
const user = await getUser(req);
|
|
||||||
if (repo.owner.username != user.username) {
|
try {
|
||||||
return res.status(401).json({ error: "not_authorized" });
|
const user = await getUser(req);
|
||||||
|
if (repo.owner.username != user.username) {
|
||||||
|
return res.status(401).json({ error: "not_authorized" });
|
||||||
|
}
|
||||||
|
await repo.anonymize();
|
||||||
|
res.end("ok");
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
}
|
}
|
||||||
await repo.anonymize();
|
|
||||||
res.end("ok");
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -81,13 +85,17 @@ router.delete(
|
|||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
const repo = await getRepo(req, res, { nocheck: false });
|
const repo = await getRepo(req, res, { nocheck: false });
|
||||||
if (!repo) return;
|
if (!repo) return;
|
||||||
const user = await getUser(req);
|
try {
|
||||||
if (repo.owner.username != user.username) {
|
const user = await getUser(req);
|
||||||
return res.status(401).json({ error: "not_authorized" });
|
if (repo.owner.username != user.username) {
|
||||||
|
return res.status(401).json({ error: "not_authorized" });
|
||||||
|
}
|
||||||
|
await repo.remove();
|
||||||
|
console.log(`${req.params.repoId} is removed`);
|
||||||
|
return res.json("ok");
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
}
|
}
|
||||||
await repo.remove();
|
|
||||||
console.log(`${req.params.repoId} is removed`);
|
|
||||||
return res.json("ok");
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -133,19 +141,25 @@ router.get(
|
|||||||
router.get(
|
router.get(
|
||||||
"/:owner/:repo/readme",
|
"/:owner/:repo/readme",
|
||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
const user = await getUser(req);
|
try {
|
||||||
const repo = await RepositoryModel.findOne({
|
const user = await getUser(req);
|
||||||
name: `${req.params.owner}/${req.params.repo}`,
|
|
||||||
});
|
const repo = await getRepositoryFromGitHub({
|
||||||
if (!repo) return res.status(404).send({ error: "repo_not_found" });
|
owner: req.params.owner,
|
||||||
const repository = new GitHubRepository(repo);
|
repo: req.params.repo,
|
||||||
return res.send(
|
|
||||||
await repository.readme({
|
|
||||||
accessToken: user.accessToken,
|
accessToken: user.accessToken,
|
||||||
force: req.query.force == "1",
|
});
|
||||||
branch: req.query.branch as string,
|
if (!repo) return res.status(404).send({ error: "repo_not_found" });
|
||||||
})
|
return res.send(
|
||||||
);
|
await repo.readme({
|
||||||
|
accessToken: user.accessToken,
|
||||||
|
force: req.query.force == "1",
|
||||||
|
branch: req.query.branch as string,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -206,23 +220,23 @@ router.post(
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
validateNewRepo(repoUpdate);
|
validateNewRepo(repoUpdate);
|
||||||
|
|
||||||
|
if (repoUpdate.commit != repo.model.source.commit) {
|
||||||
|
repo.model.anonymizeDate = new Date();
|
||||||
|
repo.model.source.commit = repoUpdate.commit;
|
||||||
|
await repo.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
updateRepoModel(repo.model, repoUpdate);
|
||||||
|
|
||||||
|
await repo.updateStatus("preparing");
|
||||||
|
|
||||||
|
await repo.model.save();
|
||||||
|
res.send("ok");
|
||||||
|
new Repository(repo.model).anonymize();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return handleError(error, res);
|
return handleError(error, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (repoUpdate.commit != repo.model.source.commit) {
|
|
||||||
repo.model.anonymizeDate = new Date();
|
|
||||||
repo.model.source.commit = repoUpdate.commit;
|
|
||||||
await repo.remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
updateRepoModel(repo.model, repoUpdate);
|
|
||||||
|
|
||||||
await repo.updateStatus("preparing");
|
|
||||||
|
|
||||||
await repo.model.save();
|
|
||||||
res.send("ok");
|
|
||||||
new Repository(repo.model).anonymize();
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -233,39 +247,41 @@ router.post("/", async (req: express.Request, res: express.Response) => {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
validateNewRepo(repoUpdate);
|
validateNewRepo(repoUpdate);
|
||||||
|
|
||||||
|
const r = gh(repoUpdate.fullName);
|
||||||
|
const repository = await getRepositoryFromGitHub({
|
||||||
|
accessToken: user.accessToken,
|
||||||
|
owner: r.owner,
|
||||||
|
repo: r.name,
|
||||||
|
});
|
||||||
|
|
||||||
|
const repo = new AnonymizedRepositoryModel();
|
||||||
|
repo.repoId = repoUpdate.repoId;
|
||||||
|
repo.anonymizeDate = new Date();
|
||||||
|
repo.owner = user.username;
|
||||||
|
repo.source = {
|
||||||
|
type:
|
||||||
|
repoUpdate.options.mode == "download" ? "GitHubDownload" : "GitHubStream",
|
||||||
|
accessToken: user.accessToken,
|
||||||
|
repositoryId: repository.model.id,
|
||||||
|
repositoryName: repoUpdate.fullName,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (repo.source.type == "GitHubDownload") {
|
||||||
|
// details.size is in kilobytes
|
||||||
|
if (repository.size > config.MAX_REPO_SIZE) {
|
||||||
|
return res.status(500).send({ error: "invalid_mode" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateRepoModel(repo, repoUpdate);
|
||||||
|
|
||||||
|
await repo.save();
|
||||||
|
res.send("ok");
|
||||||
|
new Repository(repo).anonymize();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return handleError(error, res);
|
return handleError(error, res);
|
||||||
}
|
}
|
||||||
const r = gh(repoUpdate.fullName);
|
|
||||||
const repository = await getRepositoryFromGitHub({
|
|
||||||
accessToken: user.accessToken,
|
|
||||||
owner: r.owner,
|
|
||||||
repo: r.name,
|
|
||||||
});
|
|
||||||
const repo = new AnonymizedRepositoryModel();
|
|
||||||
repo.repoId = repoUpdate.repoId;
|
|
||||||
repo.anonymizeDate = new Date();
|
|
||||||
repo.owner = user.username;
|
|
||||||
repo.source = {
|
|
||||||
type:
|
|
||||||
repoUpdate.options.mode == "download" ? "GitHubDownload" : "GitHubStream",
|
|
||||||
accessToken: user.accessToken,
|
|
||||||
repositoryId: repository.model.id,
|
|
||||||
repositoryName: repoUpdate.fullName,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (repo.source.type == "GitHubDownload") {
|
|
||||||
// details.size is in kilobytes
|
|
||||||
if (repository.size > config.MAX_REPO_SIZE) {
|
|
||||||
return res.status(500).send({ error: "invalid_mode" });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
updateRepoModel(repo, repoUpdate);
|
|
||||||
|
|
||||||
await repo.save();
|
|
||||||
res.send("ok");
|
|
||||||
new Repository(repo).anonymize();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
|||||||
@@ -8,7 +8,12 @@ const router = express.Router();
|
|||||||
router.get("/:repoId/", async (req: express.Request, res: express.Response) => {
|
router.get("/:repoId/", async (req: express.Request, res: express.Response) => {
|
||||||
const repo = await getRepo(req, res, { nocheck: true });
|
const repo = await getRepo(req, res, { nocheck: true });
|
||||||
if (!repo) return;
|
if (!repo) return;
|
||||||
res.json((await db.getRepository(req.params.repoId)).toJSON());
|
|
||||||
|
try {
|
||||||
|
res.json((await db.getRepository(req.params.repoId)).toJSON());
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get(
|
router.get(
|
||||||
@@ -16,8 +21,13 @@ router.get(
|
|||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
const repo = await getRepo(req, res);
|
const repo = await getRepo(req, res);
|
||||||
if (!repo) return;
|
if (!repo) return;
|
||||||
res.attachment(`${repo.repoId}.zip`);
|
|
||||||
repo.zip().pipe(res);
|
try {
|
||||||
|
res.attachment(`${repo.repoId}.zip`);
|
||||||
|
repo.zip().pipe(res);
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -26,7 +36,11 @@ router.get(
|
|||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
const repo = await getRepo(req, res);
|
const repo = await getRepo(req, res);
|
||||||
if (!repo) return;
|
if (!repo) return;
|
||||||
res.json(await repo.anonymizedFiles({ force: true }));
|
try {
|
||||||
|
res.json(await repo.anonymizedFiles({ force: true }));
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -35,8 +49,13 @@ router.get(
|
|||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
const repo = await getRepo(req, res);
|
const repo = await getRepo(req, res);
|
||||||
if (!repo) return;
|
if (!repo) return;
|
||||||
await repo.updateIfNeeded();
|
|
||||||
res.json(repo.options);
|
try {
|
||||||
|
await repo.updateIfNeeded();
|
||||||
|
res.json(repo.options);
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
+33
-21
@@ -44,8 +44,9 @@ router.get("/quota", async (req: express.Request, res: express.Response) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
router.get("/default", async (req: express.Request, res: express.Response) => {
|
router.get("/default", async (req: express.Request, res: express.Response) => {
|
||||||
const user = await getUser(req);
|
|
||||||
try {
|
try {
|
||||||
|
const user = await getUser(req);
|
||||||
|
|
||||||
res.json(user.default);
|
res.json(user.default);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
handleError(error, res);
|
handleError(error, res);
|
||||||
@@ -53,10 +54,13 @@ router.get("/default", async (req: express.Request, res: express.Response) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
router.post("/default", async (req: express.Request, res: express.Response) => {
|
router.post("/default", async (req: express.Request, res: express.Response) => {
|
||||||
const user = await getUser(req);
|
|
||||||
try {
|
try {
|
||||||
|
const user = await getUser(req);
|
||||||
|
|
||||||
const d = req.body;
|
const d = req.body;
|
||||||
user.default = d;
|
user.model.default = d;
|
||||||
|
|
||||||
|
await user.model.save();
|
||||||
res.send("ok");
|
res.send("ok");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
handleError(error, res);
|
handleError(error, res);
|
||||||
@@ -66,30 +70,38 @@ router.post("/default", async (req: express.Request, res: express.Response) => {
|
|||||||
router.get(
|
router.get(
|
||||||
"/anonymized_repositories",
|
"/anonymized_repositories",
|
||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
const user = await getUser(req);
|
try {
|
||||||
res.json(
|
const user = await getUser(req);
|
||||||
(await user.getRepositories()).map((x) => {
|
res.json(
|
||||||
return x.toJSON();
|
(await user.getRepositories()).map((x) => {
|
||||||
})
|
return x.toJSON();
|
||||||
);
|
})
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
router.get(
|
router.get(
|
||||||
"/all_repositories",
|
"/all_repositories",
|
||||||
async (req: express.Request, res: express.Response) => {
|
async (req: express.Request, res: express.Response) => {
|
||||||
const user = await getUser(req);
|
try {
|
||||||
const repos = await user.getGitHubRepositories({
|
const user = await getUser(req);
|
||||||
force: req.query.force == "1",
|
const repos = await user.getGitHubRepositories({
|
||||||
});
|
force: req.query.force == "1",
|
||||||
res.json(
|
});
|
||||||
repos.map((x) => {
|
res.json(
|
||||||
return {
|
repos.map((x) => {
|
||||||
fullName: x.fullName,
|
return {
|
||||||
id: x.id,
|
fullName: x.fullName,
|
||||||
};
|
id: x.id,
|
||||||
})
|
};
|
||||||
);
|
})
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -11,17 +11,17 @@ async function webView(req: express.Request, res: express.Response) {
|
|||||||
if (!repo) return;
|
if (!repo) return;
|
||||||
try {
|
try {
|
||||||
if (!repo.options.page) {
|
if (!repo.options.page) {
|
||||||
throw "page_not_activated";
|
throw new Error("page_not_activated");
|
||||||
}
|
}
|
||||||
if (!repo.options.pageSource) {
|
if (!repo.options.pageSource) {
|
||||||
throw "page_not_activated";
|
throw new Error("page_not_activated");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
repo.options.pageSource?.branch !=
|
repo.options.pageSource?.branch !=
|
||||||
(repo.source as GitHubDownload).branch.name
|
(repo.source as GitHubDownload).branch.name
|
||||||
) {
|
) {
|
||||||
throw "page_not_supported_on_different_branch";
|
throw new Error("page_not_supported_on_different_branch");
|
||||||
}
|
}
|
||||||
|
|
||||||
let requestPath = path.join(
|
let requestPath = path.join(
|
||||||
|
|||||||
Reference in New Issue
Block a user