47 lines
1.4 KiB
JavaScript
Raw Normal View History

import createLogger from "utils/logger";
import genericProxyHandler from "utils/proxies/generic";
2022-09-25 19:43:47 +03:00
import widgets from "widgets/widgets";
2022-09-25 19:43:47 +03:00
const logger = createLogger("servicesProxy");
export default async function handler(req, res) {
try {
const { type } = req.query;
2022-09-25 19:43:47 +03:00
const widget = widgets[type];
if (!widget) {
logger.debug("Unknown proxy service type: %s", type);
return res.status(403).json({ error: "Unkown proxy service type" });
}
const serviceProxyHandler = widget.proxyHandler || genericProxyHandler;
2022-09-25 19:43:47 +03:00
if (serviceProxyHandler instanceof Function) {
// map opaque endpoints to their actual endpoint
const mapping = widget?.mappings?.[req.query.endpoint];
const map = mapping?.map;
const endpoint = mapping?.endpoint;
const endpointProxy = mapping?.proxyHandler;
2022-09-25 19:43:47 +03:00
if (!endpoint) {
logger.debug("Unsupported service endpoint: %s", type);
return res.status(403).json({ error: "Unsupported service endpoint" });
}
2022-09-25 19:43:47 +03:00
req.query.endpoint = endpoint;
if (endpointProxy instanceof Function) {
return endpointProxy(req, res, map);
}
2022-09-25 19:43:47 +03:00
return serviceProxyHandler(req, res, map);
}
logger.debug("Unknown proxy service type: %s", type);
return res.status(403).json({ error: "Unkown proxy service type" });
2022-09-25 19:43:47 +03:00
} catch (ex) {
logger.error(ex);
return res.status(500).send({ error: "Unexpected error" });
}
}