From 366014053927205648561ecac443c5ab7bbc2f05 Mon Sep 17 00:00:00 2001 From: Ben Phelps Date: Mon, 12 Sep 2022 10:59:56 +0300 Subject: [PATCH] consolidate api handlers --- src/pages/api/services/proxy.js | 5 ++--- src/utils/proxies/coinmarketcap.js | 33 ------------------------------ src/utils/proxies/credentialed.js | 16 +++++++++++---- 3 files changed, 14 insertions(+), 40 deletions(-) delete mode 100644 src/utils/proxies/coinmarketcap.js diff --git a/src/pages/api/services/proxy.js b/src/pages/api/services/proxy.js index 5c78a9cce..fbc053daa 100644 --- a/src/pages/api/services/proxy.js +++ b/src/pages/api/services/proxy.js @@ -3,7 +3,6 @@ import credentialedProxyHandler from "utils/proxies/credentialed"; import rutorrentProxyHandler from "utils/proxies/rutorrent"; import nzbgetProxyHandler from "utils/proxies/nzbget"; import npmProxyHandler from "utils/proxies/npm"; -import coinMarketCapProxyHandler from "utils/proxies/coinmarketcap"; const serviceProxyHandlers = { // uses query param auth @@ -17,13 +16,13 @@ const serviceProxyHandlers = { tautulli: genericProxyHandler, traefik: genericProxyHandler, sabnzbd: genericProxyHandler, - // uses X-API-Key header auth + // uses X-API-Key (or similar) header auth portainer: credentialedProxyHandler, jellyseerr: credentialedProxyHandler, overseerr: credentialedProxyHandler, ombi: credentialedProxyHandler, + coinmarketcap: credentialedProxyHandler, // super specific handlers - coinmarketcap: coinMarketCapProxyHandler, rutorrent: rutorrentProxyHandler, nzbget: nzbgetProxyHandler, npm: npmProxyHandler, diff --git a/src/utils/proxies/coinmarketcap.js b/src/utils/proxies/coinmarketcap.js deleted file mode 100644 index 42611ec8c..000000000 --- a/src/utils/proxies/coinmarketcap.js +++ /dev/null @@ -1,33 +0,0 @@ -import getServiceWidget from "utils/service-helpers"; -import { formatApiCall } from "utils/api-helpers"; -import { httpProxy } from "utils/http"; - -export default async function coinMarketCapProxyHandler(req, res) { - const { group, service, endpoint } = req.query; - - if (group && service) { - const widget = await getServiceWidget(group, service); - - if (widget) { - const url = new URL(formatApiCall(widget.type, { endpoint, ...widget })); - const [status, contentType, data] = await httpProxy(url, { - method: req.method, - withCredentials: true, - credentials: "include", - headers: { - "X-CMC_PRO_API_KEY": `${widget.key}`, - "Content-Type": "application/json", - }, - }); - - if (status === 204 || status === 304) { - return res.status(status).end(); - } - - if (contentType) res.setHeader("Content-Type", contentType); - return res.status(status).send(data); - } - } - - return res.status(400).json({ error: "Invalid proxy service type" }); -} diff --git a/src/utils/proxies/credentialed.js b/src/utils/proxies/credentialed.js index 6b4cbf0ab..70df64726 100644 --- a/src/utils/proxies/credentialed.js +++ b/src/utils/proxies/credentialed.js @@ -10,14 +10,22 @@ export default async function credentialedProxyHandler(req, res) { if (widget) { const url = new URL(formatApiCall(widget.type, { endpoint, ...widget })); + + const headers = { + "Content-Type": "application/json", + }; + + if (widget.type === "coinmarketcap") { + headers["X-CMC_PRO_API_KEY"] = `${widget.key}`; + } else { + headers["X-API-Key"] = `${widget.key}`; + } + const [status, contentType, data] = await httpProxy(url, { method: req.method, withCredentials: true, credentials: "include", - headers: { - "X-API-Key": `${widget.key}`, - "Content-Type": "application/json", - }, + headers, }); if (status === 204 || status === 304) {