Merge branch 'JazzFisch-proxy-with-mapping'

This commit is contained in:
Ben Phelps 2022-09-17 08:32:48 +03:00
commit 379c4040fe
3 changed files with 50 additions and 4 deletions

19
.vscode/launch.json vendored Normal file
View file

@ -0,0 +1,19 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Next.js: debug full stack",
"type": "node",
"request": "launch",
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/next",
"serverReadyAction": {
"pattern": "started server on .+, url: (https?://.+)",
"uriFormat": "%s",
"action": "debugWithChrome"
}
}
]
}

View file

@ -5,6 +5,16 @@ import nzbgetProxyHandler from "utils/proxies/nzbget";
import npmProxyHandler from "utils/proxies/npm"; import npmProxyHandler from "utils/proxies/npm";
import transmissionProxyHandler from "utils/proxies/transmission"; import transmissionProxyHandler from "utils/proxies/transmission";
function jsonArrayMapper(data, map) {
if (data?.length > 0) {
const json = JSON.parse(data.toString());
if (json instanceof Array) {
return json.map(map);
}
}
return data;
}
const serviceProxyHandlers = { const serviceProxyHandlers = {
// uses query param auth // uses query param auth
emby: genericProxyHandler, emby: genericProxyHandler,
@ -13,7 +23,12 @@ const serviceProxyHandlers = {
radarr: genericProxyHandler, radarr: genericProxyHandler,
sonarr: genericProxyHandler, sonarr: genericProxyHandler,
lidarr: genericProxyHandler, lidarr: genericProxyHandler,
readarr: genericProxyHandler, readarr: {
proxy: genericProxyHandler,
maps: {
book: (data) => jsonArrayMapper(data, (d) => ({ statistics: { bookFileCount: d.statistics.bookFileCount } })),
},
},
bazarr: genericProxyHandler, bazarr: genericProxyHandler,
speedtest: genericProxyHandler, speedtest: genericProxyHandler,
tautulli: genericProxyHandler, tautulli: genericProxyHandler,
@ -42,7 +57,14 @@ export default async function handler(req, res) {
const serviceProxyHandler = serviceProxyHandlers[type]; const serviceProxyHandler = serviceProxyHandlers[type];
if (serviceProxyHandler) { if (serviceProxyHandler) {
return serviceProxyHandler(req, res); if (serviceProxyHandler instanceof Function) {
return serviceProxyHandler(req, res);
}
const { proxy, maps } = serviceProxyHandler;
if (proxy) {
return proxy(req, res, maps);
}
} }
return res.status(403).json({ error: "Unkown proxy service type" }); return res.status(403).json({ error: "Unkown proxy service type" });

View file

@ -2,7 +2,7 @@ import getServiceWidget from "utils/service-helpers";
import { formatApiCall } from "utils/api-helpers"; import { formatApiCall } from "utils/api-helpers";
import { httpProxy } from "utils/http"; import { httpProxy } from "utils/http";
export default async function genericProxyHandler(req, res) { export default async function genericProxyHandler(req, res, maps) {
const { group, service, endpoint } = req.query; const { group, service, endpoint } = req.query;
if (group && service) { if (group && service) {
@ -23,13 +23,18 @@ export default async function genericProxyHandler(req, res) {
headers, headers,
}); });
let resultData = data;
if (maps[endpoint]) {
resultData = maps[endpoint](data);
}
if (contentType) res.setHeader("Content-Type", contentType); if (contentType) res.setHeader("Content-Type", contentType);
if (status === 204 || status === 304) { if (status === 204 || status === 304) {
return res.status(status).end(); return res.status(status).end();
} }
return res.status(status).send(data); return res.status(status).send(resultData);
} }
} }