nobsdelivr/app.py
Kumi 7df5eafe5b
fix(proxy): correct URL reference in proxy function
Switched the variable from `url` to `jsdelivr_url` in the proxy function to ensure it references the correct URL. This corrects an oversight that could have resulted in incorrect data being fetched or an error due to an invalid URL. No other functionality is affected.
2024-08-03 16:39:17 +02:00

50 lines
1.3 KiB
Python

from flask import Flask, render_template, request, Response, abort
from werkzeug.exceptions import InternalServerError
from urllib.request import urlopen
from urllib.error import HTTPError
from urllib.parse import unquote
app = Flask(__name__)
@app.route("/")
def home():
domain = request.url_root
return render_template("index.html", domain=domain)
@app.route("/<path:url>")
def proxy(url):
jsdelivr_url = f"https://cdn.jsdelivr.net/{url}"
def generate():
# Subfunction to allow streaming the data instead of
# downloading all of it at once
try:
with urlopen(unquote(jsdelivr_url)) as data:
while True:
chunk = data.read(1024 * 1024)
if not chunk:
break
yield chunk
except HTTPError as e:
abort(e.code)
try:
with urlopen(unquote(jsdelivr_url)) as data:
content_type = data.headers["content-type"]
except HTTPError as e:
abort(e.code)
except KeyError:
raise InternalServerError()
headers = dict()
filename = url.split("/")[-1]
headers["Content-Disposition"] = f'attachment; filename="{filename}"'
return Response(generate(), content_type=content_type, headers=headers)
if __name__ == "__main__":
app.run()