mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-05-15 22:48:00 +02:00
Improve error handling
This commit is contained in:
@@ -39,17 +39,20 @@ router.post("/", async (req, res) => {
|
||||
const plaintext = generateToken();
|
||||
const tokenHash = hashToken(plaintext);
|
||||
|
||||
const model = await UserModel.findById(user.model.id);
|
||||
if (!model) return res.status(404).json({ error: "user_not_found" });
|
||||
if (!model.apiTokens) model.apiTokens = [];
|
||||
model.apiTokens.push({
|
||||
const entry = {
|
||||
tokenHash,
|
||||
name,
|
||||
createdAt: new Date(),
|
||||
});
|
||||
await model.save();
|
||||
};
|
||||
const updated = await UserModel.findByIdAndUpdate(
|
||||
user.model.id,
|
||||
{ $push: { apiTokens: entry } },
|
||||
{ new: true }
|
||||
);
|
||||
if (!updated) return res.status(404).json({ error: "user_not_found" });
|
||||
|
||||
const created = model.apiTokens[model.apiTokens.length - 1];
|
||||
const tokens = updated.apiTokens || [];
|
||||
const created = tokens[tokens.length - 1];
|
||||
res.json({
|
||||
id: created._id,
|
||||
name: created.name,
|
||||
|
||||
@@ -662,7 +662,10 @@ router.post(
|
||||
addedAt: new Date(),
|
||||
});
|
||||
repo.model.coauthors = list;
|
||||
await repo.model.save();
|
||||
await AnonymizedRepositoryModel.updateOne(
|
||||
{ _id: repo.model._id },
|
||||
{ $set: { coauthors: list } }
|
||||
).exec();
|
||||
res.json(repo.model.coauthors);
|
||||
} catch (error) {
|
||||
handleError(error, res, req);
|
||||
@@ -690,7 +693,10 @@ router.delete(
|
||||
repo.model.coauthors = (repo.model.coauthors || []).filter(
|
||||
(c) => c.username.toLowerCase() !== target.toLowerCase()
|
||||
);
|
||||
await repo.model.save();
|
||||
await AnonymizedRepositoryModel.updateOne(
|
||||
{ _id: repo.model._id },
|
||||
{ $set: { coauthors: repo.model.coauthors } }
|
||||
).exec();
|
||||
res.json(repo.model.coauthors);
|
||||
} catch (error) {
|
||||
handleError(error, res, req);
|
||||
|
||||
@@ -9,8 +9,11 @@ import { downloadQueue } from "../../queue";
|
||||
import { RepositoryStatus } from "../../core/types";
|
||||
import User from "../../core/User";
|
||||
import { streamAnonymizedZip } from "../../core/zipStream";
|
||||
import { createLogger, serializeError } from "../../core/logger";
|
||||
import gh = require("parse-github-url");
|
||||
|
||||
const logger = createLogger("repository-public");
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router.get(
|
||||
@@ -69,11 +72,47 @@ router.get(
|
||||
},
|
||||
},
|
||||
})
|
||||
.on("error", () => {
|
||||
.on("error", (err: Error & { response?: { statusCode?: number; body?: unknown } }) => {
|
||||
const upstreamStatus = err?.response?.statusCode;
|
||||
let upstreamBody: string | undefined;
|
||||
let errCode = "zip_not_available";
|
||||
let httpStatus = 502;
|
||||
if (err?.response?.body != null) {
|
||||
try {
|
||||
upstreamBody =
|
||||
typeof err.response.body === "string"
|
||||
? err.response.body
|
||||
: Buffer.isBuffer(err.response.body)
|
||||
? err.response.body.toString("utf8")
|
||||
: JSON.stringify(err.response.body);
|
||||
} catch {
|
||||
/* ignore */
|
||||
}
|
||||
if (upstreamBody) {
|
||||
try {
|
||||
const parsed = JSON.parse(upstreamBody);
|
||||
if (parsed && typeof parsed.error === "string") {
|
||||
errCode = parsed.error;
|
||||
}
|
||||
} catch {
|
||||
/* not JSON */
|
||||
}
|
||||
}
|
||||
}
|
||||
if (typeof upstreamStatus === "number") {
|
||||
httpStatus = upstreamStatus >= 500 ? 502 : upstreamStatus;
|
||||
}
|
||||
logger.warn("streamer zip fetch failed", {
|
||||
repoId: repo.repoId,
|
||||
upstreamStatus,
|
||||
upstreamBody: upstreamBody?.slice(0, 500),
|
||||
err: serializeError(err),
|
||||
});
|
||||
handleError(
|
||||
new AnonymousError("file_not_found", {
|
||||
new AnonymousError(errCode, {
|
||||
url: req.originalUrl,
|
||||
httpStatus: 404,
|
||||
httpStatus,
|
||||
cause: err,
|
||||
}),
|
||||
res
|
||||
);
|
||||
|
||||
@@ -3,6 +3,7 @@ import config from "../../config";
|
||||
import { ensureAuthenticated } from "./connection";
|
||||
import { handleError, getUser, isOwnerOrAdmin } from "./route-utils";
|
||||
import UserModel from "../../core/model/users/users.model";
|
||||
import AnonymizedRepositoryModel from "../../core/model/anonymizedRepositories/anonymizedRepositories.model";
|
||||
import User from "../../core/User";
|
||||
import FileModel from "../../core/model/files/files.model";
|
||||
import { isConnected } from "../database";
|
||||
@@ -90,7 +91,12 @@ router.get("/quota", async (req: express.Request, res: express.Response) => {
|
||||
await Promise.all(
|
||||
ready
|
||||
.filter((r) => uncachedSet.has(r.repoId))
|
||||
.map((r) => r.model.save())
|
||||
.map((r) =>
|
||||
AnonymizedRepositoryModel.updateOne(
|
||||
{ _id: r.model._id },
|
||||
{ $set: { size: r.model.size } }
|
||||
).exec()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -131,7 +137,10 @@ router.post("/default", async (req: express.Request, res: express.Response) => {
|
||||
const d = req.body;
|
||||
user.model.default = d;
|
||||
|
||||
await user.model.save();
|
||||
await UserModel.updateOne(
|
||||
{ _id: user.model._id },
|
||||
{ $set: { default: d } }
|
||||
).exec();
|
||||
res.send("ok");
|
||||
} catch (error) {
|
||||
handleError(error, res, req);
|
||||
|
||||
Reference in New Issue
Block a user