From e9f9211e398a27d6c98e737a8ab54f3eecd5e7d1 Mon Sep 17 00:00:00 2001 From: Andrei Alexandru Date: Sun, 12 Oct 2025 03:04:43 +0300 Subject: [PATCH] Added Proxy-PPC --- proxy.py | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 proxy.py diff --git a/proxy.py b/proxy.py new file mode 100644 index 0000000..bdaa65f --- /dev/null +++ b/proxy.py @@ -0,0 +1,94 @@ +from flask import Flask, jsonify, request, Response +import threading +import time +import requests +import json +from dateutil import parser + +app = Flask(__name__) + +latest_release = {"release_ts": 0, "release_version": ""} +active_downloads = {} +total_downloaded_bytes = 0 # All download files + +@app.route('/status', methods=['GET']) +def status_page(): + global active_downloads, total_downloaded_bytes + + timeout = 10 + current_time = time.time() + active_downloads_filtered = {ip: ts for ip, ts in active_downloads.items() if current_time - ts < timeout} + active_downloads = active_downloads_filtered + + # Calculate data downloaded shitt + if total_downloaded_bytes >= 1_000_000_000: + total_downloaded = f"{total_downloaded_bytes / 1_000_000_000:.2f} GB" + else: + total_downloaded = f"{total_downloaded_bytes / 1_000_000:.2f} MB" + + # JSON + return jsonify({ + "latest_release_version": latest_release.get("release_version", "N/A"), + "proxy_version": "1.6.2", + "active_downloads": len(active_downloads), + "total_downloaded": total_downloaded + }) + +@app.route('/', methods=['GET']) +def handle_forward_request(): + global active_downloads, total_downloaded_bytes + + target_url = request.args.get('url') + if target_url: + ip = request.remote_addr + active_downloads[ip] = time.time() + + try: + with requests.get(target_url, stream=True, timeout=(5, 10)) as response: + response.raise_for_status() + content = response.content + downloaded_size = len(content) # download size + total_downloaded_bytes += downloaded_size # Update all + return Response( + content, + content_type=response.headers.get('Content-Type', 'application/octet-stream'), + status=response.status_code + ) + except requests.RequestException as e: + return Response(f"Error fetching the requested URL: {e}", status=500) + return Response("Unsupported request", status=400) + +@app.route('/client/builds.json', methods=['GET']) +def handle_builds_json(): + global latest_release + fetch_latest_release() # Fetch the version from github + return jsonify(latest_release) + +def fetch_latest_release(): + global latest_release + try: + with open('release.json', 'r') as f: + data = json.load(f) + release_time_str = data.get("release_time") + release_version = data.get("release_version", "N/A") + + if release_time_str: + release_ts = parser.isoparse(release_time_str).timestamp() + else: + release_ts = time.time() + + latest_release = { + "release_ts": release_ts, + "release_version": release_version + } + except (FileNotFoundError, json.JSONDecodeError, ValueError) as e: + print(f"Error reading release.json: {e}") + latest_release = { + "release_ts": time.time(), + "release_version": "N/A" + } + +if __name__ == '__main__': + port = 5090 + fetch_latest_release() + app.run(host='0.0.0.0', port=port) \ No newline at end of file