Added Proxy-PPC
This commit is contained in:
94
proxy.py
Normal file
94
proxy.py
Normal file
@@ -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)
|
||||
Reference in New Issue
Block a user