#!/usr/bin/env python3
from http import HTTPStatus
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
from urllib.error import HTTPError, URLError
from urllib.parse import urlsplit
from urllib.request import HTTPCookieProcessor, Request, build_opener
import html
REMOTE_ORIGIN = "https://1xaud.em7bd7.co"
opener = build_opener(HTTPCookieProcessor())
MODULE_CONFIGS = {
"partnership": [
("partnershipIframe", "/embed/partnership/partnership.asp", "setPartnershipIframeHeight", 0, 600),
],
"game-rtp": [
("gameRtpIframe", "/embed/game-rtp/game-rtp.asp", "setGameRtpIframeHeight", 50, 900),
],
"domain-status": [
("domainstatusIframe", "/embed/domain-status/domain-status.asp", "setDomainStatusIframeHeight", 0, 700),
],
}
WRAPPER_TEMPLATE = """
__TITLE__
__IFRAMES__
"""
def build_wrapper(selected):
modules = []
for key in selected:
modules.extend(MODULE_CONFIGS[key])
iframe_html = "\n".join(
f' \n'
f' \n'
f'
'
for iframe_id, src, _message_type, _extra_height, min_height in modules
)
init_calls = "\n".join(
f' init("{iframe_id}", "{message_type}", {extra_height});'
for iframe_id, _src, message_type, extra_height, _min_height in modules
)
title = "1XAUD proxied iframe render"
return (
WRAPPER_TEMPLATE
.replace("__TITLE__", title)
.replace("__IFRAMES__", iframe_html)
.replace("__INIT_CALLS__", init_calls)
)
class ProxyHandler(BaseHTTPRequestHandler):
protocol_version = "HTTP/1.1"
def do_GET(self):
path = urlsplit(self.path).path
if path in {"/", "/render-1888-proxy.html", "/render-1888-all.html"}:
body = build_wrapper(["partnership", "game-rtp", "domain-status"]).encode("utf-8")
self.send_bytes(body, "text/html; charset=utf-8")
return
if path == "/render-1888-partnership.html":
body = build_wrapper(["partnership"]).encode("utf-8")
self.send_bytes(body, "text/html; charset=utf-8")
return
if path == "/render-1888-game-rtp.html":
body = build_wrapper(["game-rtp"]).encode("utf-8")
self.send_bytes(body, "text/html; charset=utf-8")
return
if path == "/render-1888-domain-status.html":
body = build_wrapper(["domain-status"]).encode("utf-8")
self.send_bytes(body, "text/html; charset=utf-8")
return
self.proxy()
def do_POST(self):
self.proxy()
def send_bytes(self, body, content_type, status=HTTPStatus.OK):
self.send_response(status)
self.send_header("Content-Type", content_type)
self.send_header("Content-Length", str(len(body)))
self.send_header("Cache-Control", "no-store")
self.end_headers()
self.wfile.write(body)
def proxy(self):
parsed = urlsplit(self.path)
target = REMOTE_ORIGIN + parsed.path
if parsed.query:
target += "?" + parsed.query
body = None
if self.command == "POST":
length = int(self.headers.get("Content-Length", "0") or 0)
body = self.rfile.read(length) if length else b""
headers = {
"User-Agent": self.headers.get(
"User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0 Safari/537.36",
),
"Referer": REMOTE_ORIGIN + "/embed/partnership/partnership.asp",
"Origin": REMOTE_ORIGIN,
}
if "Content-Type" in self.headers:
headers["Content-Type"] = self.headers["Content-Type"]
request = Request(target, data=body, headers=headers, method=self.command)
try:
with opener.open(request, timeout=30) as response:
response_body = response.read()
self.send_response(response.status)
for key, value in response.headers.items():
lower = key.lower()
if lower in {
"content-length",
"connection",
"transfer-encoding",
"content-encoding",
"x-frame-options",
"content-security-policy",
"report-to",
"nel",
"alt-svc",
}:
continue
self.send_header(key, value)
self.send_header("Content-Length", str(len(response_body)))
self.send_header("Cache-Control", "no-store")
self.end_headers()
self.wfile.write(response_body)
except HTTPError as exc:
response_body = exc.read()
self.send_response(exc.code)
self.send_header("Content-Type", exc.headers.get("Content-Type", "text/plain"))
self.send_header("Content-Length", str(len(response_body)))
self.end_headers()
self.wfile.write(response_body)
except URLError as exc:
body = f"Proxy error: {html.escape(str(exc.reason))}".encode("utf-8")
self.send_bytes(body, "text/plain; charset=utf-8", HTTPStatus.BAD_GATEWAY)
def log_message(self, format, *args):
print("%s - - [%s] %s" % (self.client_address[0], self.log_date_time_string(), format % args))
if __name__ == "__main__":
server = ThreadingHTTPServer(("localhost", 8898), ProxyHandler)
print("Proxy server listening on http://localhost:8898/render-1888-proxy.html")
server.serve_forever()