api: move url extraction to url module

This commit is contained in:
dumbmoron 2024-05-15 12:22:36 +00:00
parent 5c9ecb2781
commit ae91f8b120
No known key found for this signature in database
2 changed files with 30 additions and 19 deletions

View file

@ -1,32 +1,17 @@
import { services } from "./config.js";
import { apiJSON } from "./sub/utils.js";
import { errorUnsupported } from "./sub/errors.js";
import loc from "../localization/manager.js";
import match from "./processing/match.js";
import { getHostIfValid } from "./processing/url.js";
import { extract } from "./processing/url.js";
export async function getJSON(url, lang, obj) {
try {
const host = getHostIfValid(url);
if (!host || !services[host].enabled) {
const parsed = extract(url);
if (parsed === null) {
return apiJSON(0, { t: errorUnsupported(lang) });
}
let patternMatch;
for (const pattern of services[host].patterns) {
patternMatch = pattern.match(
url.pathname.substring(1) + url.search
);
if (patternMatch) break;
}
if (!patternMatch) {
return apiJSON(0, { t: errorUnsupported(lang) });
}
return await match(host, patternMatch, url, lang, obj)
return await match(parsed.host, parsed.patternMatch, url, lang, obj)
} catch (e) {
return apiJSON(0, { t: loc(lang, 'ErrorSomethingWentWrong') })
}

View file

@ -125,3 +125,29 @@ export function getHostIfValid(url) {
return host.sld;
}
export function extract(url) {
const host = getHostIfValid(url);
if (!host || !services[host].enabled) {
return null;
}
let patternMatch;
for (const pattern of services[host].patterns) {
patternMatch = pattern.match(
url.pathname.substring(1) + url.search
);
if (patternMatch) {
break;
}
}
if (!patternMatch) {
return null;
}
return { host, patternMatch };
}