mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-02-13 02:42:45 +00:00
improve error handling
This commit is contained in:
@@ -98,12 +98,16 @@ export default class User {
|
||||
repo.options.expirationDate != null &&
|
||||
repo.options.expirationDate < new Date()
|
||||
) {
|
||||
await repo.expire()
|
||||
await repo.expire();
|
||||
}
|
||||
}
|
||||
return repositories;
|
||||
}
|
||||
|
||||
get model() {
|
||||
return this._model;
|
||||
}
|
||||
|
||||
toJSON() {
|
||||
return this._model.toJSON();
|
||||
}
|
||||
|
||||
@@ -16,9 +16,9 @@ router.get(
|
||||
const repo = await getRepo(req, res);
|
||||
if (!repo) return;
|
||||
|
||||
await repo.countView();
|
||||
|
||||
try {
|
||||
await repo.countView();
|
||||
|
||||
const f = new AnonymizedFile(repo, {
|
||||
anonymizedPath,
|
||||
});
|
||||
|
||||
@@ -55,8 +55,7 @@ router.post("/claim", async (req: express.Request, res: express.Response) => {
|
||||
);
|
||||
return res.send("Ok");
|
||||
} catch (error) {
|
||||
console.error(req.path, error);
|
||||
return res.status(500).json({ error });
|
||||
handleError(error, res);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -66,12 +65,17 @@ router.post(
|
||||
async (req: express.Request, res: express.Response) => {
|
||||
const repo = await getRepo(req, res, { nocheck: true });
|
||||
if (!repo) return;
|
||||
const user = await getUser(req);
|
||||
if (repo.owner.username != user.username) {
|
||||
return res.status(401).json({ error: "not_authorized" });
|
||||
|
||||
try {
|
||||
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) => {
|
||||
const repo = await getRepo(req, res, { nocheck: false });
|
||||
if (!repo) return;
|
||||
const user = await getUser(req);
|
||||
if (repo.owner.username != user.username) {
|
||||
return res.status(401).json({ error: "not_authorized" });
|
||||
try {
|
||||
const user = await getUser(req);
|
||||
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(
|
||||
"/:owner/:repo/readme",
|
||||
async (req: express.Request, res: express.Response) => {
|
||||
const user = await getUser(req);
|
||||
const repo = await RepositoryModel.findOne({
|
||||
name: `${req.params.owner}/${req.params.repo}`,
|
||||
});
|
||||
if (!repo) return res.status(404).send({ error: "repo_not_found" });
|
||||
const repository = new GitHubRepository(repo);
|
||||
return res.send(
|
||||
await repository.readme({
|
||||
try {
|
||||
const user = await getUser(req);
|
||||
|
||||
const repo = await getRepositoryFromGitHub({
|
||||
owner: req.params.owner,
|
||||
repo: req.params.repo,
|
||||
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 {
|
||||
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) {
|
||||
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 {
|
||||
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) {
|
||||
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;
|
||||
|
||||
@@ -8,7 +8,12 @@ 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;
|
||||
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(
|
||||
@@ -16,8 +21,13 @@ router.get(
|
||||
async (req: express.Request, res: express.Response) => {
|
||||
const repo = await getRepo(req, res);
|
||||
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) => {
|
||||
const repo = await getRepo(req, res);
|
||||
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) => {
|
||||
const repo = await getRepo(req, res);
|
||||
if (!repo) return;
|
||||
await repo.updateIfNeeded();
|
||||
res.json(repo.options);
|
||||
|
||||
try {
|
||||
await repo.updateIfNeeded();
|
||||
res.json(repo.options);
|
||||
} catch (error) {
|
||||
handleError(error, res);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -44,8 +44,9 @@ router.get("/quota", async (req: express.Request, res: express.Response) => {
|
||||
});
|
||||
|
||||
router.get("/default", async (req: express.Request, res: express.Response) => {
|
||||
const user = await getUser(req);
|
||||
try {
|
||||
const user = await getUser(req);
|
||||
|
||||
res.json(user.default);
|
||||
} catch (error) {
|
||||
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) => {
|
||||
const user = await getUser(req);
|
||||
try {
|
||||
const user = await getUser(req);
|
||||
|
||||
const d = req.body;
|
||||
user.default = d;
|
||||
user.model.default = d;
|
||||
|
||||
await user.model.save();
|
||||
res.send("ok");
|
||||
} catch (error) {
|
||||
handleError(error, res);
|
||||
@@ -66,30 +70,38 @@ router.post("/default", async (req: express.Request, res: express.Response) => {
|
||||
router.get(
|
||||
"/anonymized_repositories",
|
||||
async (req: express.Request, res: express.Response) => {
|
||||
const user = await getUser(req);
|
||||
res.json(
|
||||
(await user.getRepositories()).map((x) => {
|
||||
return x.toJSON();
|
||||
})
|
||||
);
|
||||
try {
|
||||
const user = await getUser(req);
|
||||
res.json(
|
||||
(await user.getRepositories()).map((x) => {
|
||||
return x.toJSON();
|
||||
})
|
||||
);
|
||||
} catch (error) {
|
||||
handleError(error, res);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
router.get(
|
||||
"/all_repositories",
|
||||
async (req: express.Request, res: express.Response) => {
|
||||
const user = await getUser(req);
|
||||
const repos = await user.getGitHubRepositories({
|
||||
force: req.query.force == "1",
|
||||
});
|
||||
res.json(
|
||||
repos.map((x) => {
|
||||
return {
|
||||
fullName: x.fullName,
|
||||
id: x.id,
|
||||
};
|
||||
})
|
||||
);
|
||||
try {
|
||||
const user = await getUser(req);
|
||||
const repos = await user.getGitHubRepositories({
|
||||
force: req.query.force == "1",
|
||||
});
|
||||
res.json(
|
||||
repos.map((x) => {
|
||||
return {
|
||||
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;
|
||||
try {
|
||||
if (!repo.options.page) {
|
||||
throw "page_not_activated";
|
||||
throw new Error("page_not_activated");
|
||||
}
|
||||
if (!repo.options.pageSource) {
|
||||
throw "page_not_activated";
|
||||
throw new Error("page_not_activated");
|
||||
}
|
||||
|
||||
if (
|
||||
repo.options.pageSource?.branch !=
|
||||
(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(
|
||||
|
||||
Reference in New Issue
Block a user