57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
|
/*
|
||
|
Cloudflare workers telegraph proxy.
|
||
|
Deploy and set `KEY` variable in browser.
|
||
|
*/
|
||
|
|
||
|
addEventListener('fetch', event => {
|
||
|
event.respondWith(handleRequest(event.request))
|
||
|
})
|
||
|
|
||
|
const RESPONSE_HEADERS = {
|
||
|
"Server": "web-proxy",
|
||
|
};
|
||
|
|
||
|
async function handleRequest(request) {
|
||
|
// validate request key
|
||
|
if (request.headers.get("X-Authorization") != KEY) {
|
||
|
return new Response(null, {
|
||
|
status: 401,
|
||
|
headers: RESPONSE_HEADERS
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// read original url
|
||
|
var url = request.headers.get("X-Forwarded-For");
|
||
|
if (url == null || url == "") {
|
||
|
return new Response(null, {
|
||
|
status: 400,
|
||
|
headers: RESPONSE_HEADERS
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// construct new url and request
|
||
|
var req;
|
||
|
if (request.body && request.method != 'GET' && request.method != 'HEAD') {
|
||
|
req = new Request(new URL(url), {
|
||
|
method: request.method,
|
||
|
headers: request.headers,
|
||
|
body: request.body
|
||
|
});
|
||
|
} else {
|
||
|
req = new Request(new URL(url), {
|
||
|
method: request.method,
|
||
|
headers: request.headers,
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// remove headers
|
||
|
req.headers.delete("X-Authorization");
|
||
|
req.headers.delete("X-Forwarded-For");
|
||
|
req.headers.delete("CF-Connecting-IP");
|
||
|
req.headers.delete("CF-Worker");
|
||
|
req.headers.delete("CF-EW-Via");
|
||
|
|
||
|
// send request
|
||
|
var result = await fetch(req);
|
||
|
return result;
|
||
|
}
|