api: move service disabling to DISABLED_SERVICES env

This commit is contained in:
wukko 2024-08-23 00:16:26 +06:00
parent ee375a27cd
commit 7a557a97c3
No known key found for this signature in database
GPG key ID: 3E30B3F26C7B4AA2
4 changed files with 23 additions and 26 deletions

View file

@ -1,5 +1,14 @@
import { services } from "./processing/service-config.js";
const genericUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36";
const disabledServices = process.env.DISABLED_SERVICES?.split(',') || [];
const enabledServices = new Set(Object.keys(services).filter(e => {
if (!disabledServices.includes(e)) {
return e;
}
}));
const env = {
apiURL: process.env.API_URL || '',
apiPort: process.env.API_PORT || 9000,
@ -27,6 +36,8 @@ const env = {
turnstileSecret: process.env.TURNSTILE_SECRET,
jwtSecret: process.env.JWT_SECRET,
jwtLifetime: process.env.JWT_EXPIRY || 120,
enabledServices,
}
export {

View file

@ -203,8 +203,8 @@ export const runAPI = (express, app, __dirname) => {
}
const parsed = extract(normalizedRequest.url);
if (parsed === null) {
return fail(res, "error.api.service.unsupported");
if ("error" in parsed) {
return fail(res, `error.api.service.${parsed.error}`);
}
try {

View file

@ -5,7 +5,6 @@ export const hlsExceptions = ["dailymotion", "vimeo", "rutube"];
export const services = {
bilibili: {
enabled: true,
patterns: [
"video/:comId",
"_shortLink/:comShortLink",
@ -15,11 +14,9 @@ export const services = {
subdomains: ["m"],
},
dailymotion: {
enabled: true,
patterns: ["video/:id"],
},
facebook: {
enabled: true,
patterns: [
"_shortLink/:shortLink",
":username/videos/:caption/:id",
@ -31,7 +28,6 @@ export const services = {
altDomains: ["fb.watch"],
},
instagram: {
enabled: true,
patterns: [
"reels/:postId",
":username/reel/:postId",
@ -44,11 +40,9 @@ export const services = {
altDomains: ["ddinstagram.com"],
},
loom: {
enabled: true,
patterns: ["share/:id"],
},
ok: {
enabled: true,
patterns: [
"video/:id",
"videoembed/:id"
@ -56,7 +50,6 @@ export const services = {
tld: "ru",
},
pinterest: {
enabled: true,
patterns: [
"pin/:id",
"pin/:id/:garbage",
@ -64,7 +57,6 @@ export const services = {
],
},
reddit: {
enabled: true,
patterns: [
"r/:sub/comments/:id/:title",
"user/:user/comments/:id/:title"
@ -72,7 +64,6 @@ export const services = {
subdomains: "*",
},
rutube: {
enabled: true,
patterns: [
"video/:id",
"play/embed/:id",
@ -84,7 +75,6 @@ export const services = {
tld: "ru",
},
snapchat: {
enabled: true,
patterns: [
":shortLink",
"spotlight/:spotlightId",
@ -97,7 +87,6 @@ export const services = {
subdomains: ["t", "story"],
},
soundcloud: {
enabled: true,
patterns: [
":author/:song/s-:accessKey",
":author/:song",
@ -106,7 +95,6 @@ export const services = {
subdomains: ["on", "m"],
},
streamable: {
enabled: true,
patterns: [
":id",
"o/:id",
@ -115,7 +103,6 @@ export const services = {
],
},
tiktok: {
enabled: true,
patterns: [
":user/video/:postId",
":id",
@ -126,7 +113,6 @@ export const services = {
subdomains: ["vt", "vm", "m"],
},
tumblr: {
enabled: true,
patterns: [
"post/:id",
"blog/view/:user/:id",
@ -136,12 +122,10 @@ export const services = {
subdomains: "*",
},
twitch: {
enabled: true,
patterns: [":channel/clip/:clip"],
tld: "tv",
},
twitter: {
enabled: true,
patterns: [
":user/status/:id",
":user/status/:id/video/:index",
@ -153,12 +137,10 @@ export const services = {
altDomains: ["x.com", "vxtwitter.com", "fixvx.com"],
},
vine: {
enabled: true,
patterns: ["v/:id"],
tld: "co",
},
vimeo: {
enabled: true,
patterns: [
":id",
"video/:id",
@ -168,7 +150,6 @@ export const services = {
subdomains: ["player"],
},
vk: {
enabled: true,
patterns: [
"video:userId_:videoId",
"clip:userId_:videoId",
@ -177,7 +158,6 @@ export const services = {
subdomains: ["m"],
},
youtube: {
enabled: true,
patterns: [
"watch?v=:id",
"embed/:id",

View file

@ -1,6 +1,8 @@
import { services } from "./service-config.js";
import { strict as assert } from "node:assert";
import psl from "psl";
import { strict as assert } from "node:assert";
import { env } from "../config.js";
import { services } from "./service-config.js";
function aliasURL(url) {
assert(url instanceof URL);
@ -160,8 +162,12 @@ export function extract(url) {
const host = getHostIfValid(url);
if (!host || !services[host].enabled) {
return null;
if (!host) {
return { error: "unsupported" };
}
if (!env.enabledServices.has(host)) {
return { error: "disabled" };
}
let patternMatch;