| from fastapi.responses import StreamingResponse, JSONResponse |
| from fastapi import FastAPI, Response, Request, Query |
| from fastapi.middleware.cors import CORSMiddleware |
| from dotenv import load_dotenv |
| import requests |
| import os |
|
|
| load_dotenv() |
| app = FastAPI() |
|
|
| |
|
|
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=["*"], |
| allow_credentials=True, |
| allow_methods=["*"], |
| allow_headers=["*"], |
| ) |
|
|
| @app.get("/{path:path}") |
| async def redirect(request:Request, path: str): |
| try: |
| base_url = os.environ.get("BASE_URL") |
| query_params = request.query_params |
| provider = query_params.get("provider") |
| base_url = base_url.replace("<provider>", provider) |
|
|
| full_url = f"{base_url}/{path}" |
| if query_params: |
| full_url += "?" + "&".join([f"{key}={value}" for key, value in query_params.items()]) |
|
|
| auth_token = os.environ.get("API_KEY") |
| headers = { "Authorization": f"Bearer {auth_token}" } |
| response = requests.get(full_url, stream=True, headers=headers) |
| |
| if response.status_code == 404: |
| return JSONResponse({ "msg": "bro, i think you provider is wrong" }) |
|
|
| def stream_content(): |
| for chunk in response.iter_content(chunk_size=1024): |
| yield chunk |
|
|
| content_type = response.headers.get('content-type', 'application/octet-stream') |
| return StreamingResponse(stream_content(), media_type=content_type) |
| except: |
| return JSONResponse({ "msg": "try hard bro" }) |
|
|