api/core: fix link parsing error handling

This commit is contained in:
wukko 2024-08-24 16:13:42 +06:00
parent cc05833c6a
commit 7041d61d80
No known key found for this signature in database
GPG key ID: 3E30B3F26C7B4AA2
3 changed files with 20 additions and 7 deletions

View file

@ -33,8 +33,8 @@ const corsConfig = env.corsWildcard ? {} : {
optionsSuccessStatus: 200
}
const fail = (res, code) => {
const { status, body } = createResponse("error", { code });
const fail = (res, code, context) => {
const { status, body } = createResponse("error", { code, context });
res.status(status).json(body);
}
@ -206,8 +206,16 @@ export const runAPI = (express, app, __dirname) => {
}
const parsed = extract(normalizedRequest.url);
if (!parsed) {
return fail(res, "error.api.link.invalid");
}
if ("error" in parsed) {
return fail(res, `error.api.service.${parsed.error}`);
let context;
if (parsed?.context) {
context = parsed.context;
}
return fail(res, `error.api.${parsed.error}`, context);
}
try {

View file

@ -56,7 +56,7 @@ export default async function(host, patternMatch, obj) {
}
if (!(testers[host](patternMatch))) {
return createResponse("error", {
code: "error.api.link.invalid",
code: "error.api.link.unsupported",
context: {
service: host
}

View file

@ -163,11 +163,11 @@ export function extract(url) {
const host = getHostIfValid(url);
if (!host) {
return { error: "unsupported" };
return { error: "link.invalid" };
}
if (!env.enabledServices.has(host)) {
return { error: "disabled" };
return { error: "service.disabled" };
}
let patternMatch;
@ -182,7 +182,12 @@ export function extract(url) {
}
if (!patternMatch) {
return null;
return {
error: "link.unsupported",
context: {
service: host
}
};
}
return { host, patternMatch };