Files
Proxy-PPC/proxy.py
Andrei Alexandru e9f9211e39 Added Proxy-PPC
2025-10-12 03:04:43 +03:00

94 lines
3.1 KiB
Python

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)