switch to https over fetch for the proxy api

this allows for complete control and the ability to ignored self-signed certificates
pull/3/head
Ben Phelps 2 years ago
parent 10aec6dc60
commit 481cb71e65

@ -1,5 +1,27 @@
import https from "https"; import https from "https";
function httpsRequest(params) {
return new Promise(function (resolve, reject) {
var request = https.request(params, function (response) {
let data = "";
response.on("data", (chunk) => {
data = data + chunk.toString();
});
response.on("end", () => {
resolve([response.statusCode, data]);
});
});
request.on("error", (error) => {
reject([500, error]);
});
request.end();
});
}
export default async function handler(req, res) { export default async function handler(req, res) {
const headers = ["X-API-Key", "Content-Type", "Authorization"].reduce((obj, key) => { const headers = ["X-API-Key", "Content-Type", "Authorization"].reduce((obj, key) => {
if (req.headers && req.headers.hasOwnProperty(key.toLowerCase())) { if (req.headers && req.headers.hasOwnProperty(key.toLowerCase())) {
@ -8,25 +30,23 @@ export default async function handler(req, res) {
return obj; return obj;
}, {}); }, {});
try {
// this agent allows us to bypass the certificate check // this agent allows us to bypass the certificate check
// which is required for most self-signed certificates // which is required for most self-signed certificates
const httpsAgent = new https.Agent({ const httpsAgent = new https.Agent({
rejectUnauthorized: false, rejectUnauthorized: false,
}); });
const result = await fetch(req.query.url, { const url = new URL(req.query.url);
const [status, data] = await httpsRequest({
hostname: url.hostname,
path: url.pathname,
port: url.port,
agent: httpsAgent, agent: httpsAgent,
method: req.method, method: req.method,
headers: headers, headers: headers,
body: req.method == "GET" || req.method == "HEAD" ? null : req.body, body: req.method == "GET" || req.method == "HEAD" ? null : req.body,
}).then((res) => res);
const forward = await result.text();
return res.status(result.status).send(forward);
} catch {
return res.status(500).send({
error: "query failed",
}); });
}
res.status(status).send(data);
} }

Loading…
Cancel
Save