@ -1,4 +1,5 @@
import https from "https" ;
import http from "http" ;
function httpsRequest ( params ) {
return new Promise ( function ( resolve , reject ) {
@ -22,6 +23,28 @@ function httpsRequest(params) {
} ) ;
}
function httpRequest ( params ) {
return new Promise ( function ( resolve , reject ) {
var request = http . 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 ( ) ) ) {
@ -30,23 +53,36 @@ export default async function handler(req, res) {
return obj ;
} , { } ) ;
// 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 url = new URL ( req . query . url ) ;
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 ,
} ) ;
if ( url . protocol === "https:" ) {
// 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 [ 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 ,
} ) ;
return res . status ( status ) . send ( data ) ;
} else {
const [ status , data ] = await httpRequest ( {
hostname : url . hostname ,
path : url . pathname ,
port : url . port ,
method : req . method ,
headers : headers ,
body : req . method == "GET" || req . method == "HEAD" ? null : req . body ,
} ) ;
res . status ( status ) . send ( data ) ;
return res . status ( status ) . send ( data ) ;
}
}