mirror of
https://github.com/karl0ss/homepage.git
synced 2025-04-29 12:03:41 +01:00
switch to https over fetch for the proxy api
this allows for complete control and the ability to ignored self-signed certificates
This commit is contained in:
parent
10aec6dc60
commit
481cb71e65
@ -1,5 +1,27 @@
|
||||
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) {
|
||||
const headers = ["X-API-Key", "Content-Type", "Authorization"].reduce((obj, key) => {
|
||||
if (req.headers && req.headers.hasOwnProperty(key.toLowerCase())) {
|
||||
@ -8,25 +30,23 @@ export default async function handler(req, res) {
|
||||
return obj;
|
||||
}, {});
|
||||
|
||||
try {
|
||||
// this agent allows us to bypass the certificate check
|
||||
// which is required for most self-signed certificates
|
||||
const httpsAgent = new https.Agent({
|
||||
rejectUnauthorized: false,
|
||||
});
|
||||
// this agent allows us to bypass the certificate check
|
||||
// which is required for most self-signed certificates
|
||||
const httpsAgent = new https.Agent({
|
||||
rejectUnauthorized: false,
|
||||
});
|
||||
|
||||
const result = await fetch(req.query.url, {
|
||||
agent: httpsAgent,
|
||||
method: req.method,
|
||||
headers: headers,
|
||||
body: req.method == "GET" || req.method == "HEAD" ? null : req.body,
|
||||
}).then((res) => res);
|
||||
const url = new URL(req.query.url);
|
||||
|
||||
const forward = await result.text();
|
||||
return res.status(result.status).send(forward);
|
||||
} catch {
|
||||
return res.status(500).send({
|
||||
error: "query failed",
|
||||
});
|
||||
}
|
||||
const [status, data] = await httpsRequest({
|
||||
hostname: url.hostname,
|
||||
path: url.pathname,
|
||||
port: url.port,
|
||||
agent: httpsAgent,
|
||||
method: req.method,
|
||||
headers: headers,
|
||||
body: req.method == "GET" || req.method == "HEAD" ? null : req.body,
|
||||
});
|
||||
|
||||
res.status(status).send(data);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user