Merge branch 'JazzFisch-proxy-with-mapping'
This commit is contained in:
commit
379c4040fe
3 changed files with 50 additions and 4 deletions
19
.vscode/launch.json
vendored
Normal file
19
.vscode/launch.json
vendored
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -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" });
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue