From 8c3f23c605d08e89f0d83306c263c5ea872e243f Mon Sep 17 00:00:00 2001 From: lolcat Date: Sat, 26 Apr 2025 11:22:09 -0400 Subject: [PATCH] cloudfucked --- README.md | 39 +++++++++++++++++++++++++++++++++++++++ src/index.js | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 README.md create mode 100644 src/index.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..5541dac --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +# Worker proxy +Simple script to deploy an HTTP proxy on any of those meme-ass serverless servers. + +## Install (for cloudflare workers) +``` +node -v # should output v18.x or v20.x or some shit +sudo npm install -g wrangler +wrangler login # this will open some garbage in a browser tab. authenticate your ass +wrangler init worker-proxy +cd worker-proxy/src +rm index.js +wget https://git.lolcat.ca/lolcat/worker-proxy/raw/branch/master/src/index.js +``` + +## Configure +Edit line 10 of `index.js` with your favorite text editor. Change the password to something only you knows. A good way to make shit secure is by running the following garbage in a PHP shell: + +``` +php -a +php > echo bin2hex(random_bytes(21)); +605ca86cd0e70b7cb96e2ccc5902e70639afe074aa +``` + +This way, only (You) can use your proxy. + +## Run +``` +wrangler dev # Runs proxy locally (useless, but lets you know shit werks) +wrangler publish +``` + +## Usage +When you run the command `wrangler publish`, Cloudfart should give you some URL. Go and visit it. The front page should read "Fuck off". + +To proxy things, visit this endpoint: + +/?p={Website}&k={YourKey} + +This garbage should mirror all HTTP headers both ways, although cloudshit appends a bunch of useless headers to the response. diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..14dff90 --- /dev/null +++ b/src/index.js @@ -0,0 +1,52 @@ +export default { + async fetch(request){ + const req = new URL(request.url); + const url = req.searchParams.get("p"); + const pw = req.searchParams.get("k"); + + if( + !url || + !pw || + pw != "185d7c9bfb0d5b1bd67373f8b4f0a04a85dfa4aa78" + ){ + + return new Response("Fuck off", { status: 404 }); + } + + // clone headers to send to target + var headers = new Headers(request.headers); + headers.delete("host"); + + try{ + const proxy_req = + await fetch( + url, + { + method: request.method, + headers: headers, + body: request.method !== "GET" && request.method !== "HEAD" ? await request.text() : undefined, + } + ); + + // send back proxied headers + const headers_recv = new Headers(); + + proxy_req.headers.forEach(function(value, key){ + + headers_recv.set(key, value); + }); + + const proxy_res = await proxy_req.arrayBuffer(); + + return new Response(proxy_res, { + status: proxy_req.status, + statusText: proxy_req.statusText, + headers: headers_recv + }); + + }catch(err){ + + return new Response(err.toString(), { status: 400 }); + } + } +};