niharika17032001's picture
Create Dockerfile
cf13b56
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from fastapi.middleware.cors import CORSMiddleware
import json
from pathlib import Path
from urllib.parse import urlparse
app = FastAPI()
# --- CORS Configuration ---
origins = ["*"] # Allow all origins for development (restrict in production)
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# --- File-based Storage Setup ---
STORAGE_FILE = Path("cookies.json")
def load_cookies():
if STORAGE_FILE.exists():
try:
with open(STORAGE_FILE, "r") as f:
return json.load(f)
except json.JSONDecodeError:
return {}
return {}
def save_cookies_to_file(data):
with open(STORAGE_FILE, "w") as f:
json.dump(data, f)
save_data = load_cookies()
# --- POST Endpoint: Save Cookies ---
@app.post("/save-cookies")
async def save_cookies(request: Request):
try:
data = await request.json()
print(f"Received POST data: {data}")
# Validate structure
if "raw_cookies_string" in data and "source_url" in data:
# Extract domain like 'youtube' or 'instagram' from the source_url
parsed_domain = urlparse(data["source_url"]).hostname or ""
domain_key = parsed_domain.split('.')[-2] if parsed_domain else "unknown"
# Clean and normalize key if needed
domain_key = domain_key.strip().lower()
# Save data dynamically using the domain_key
save_data[domain_key] = {
"raw_cookies": data["raw_cookies_string"],
"source_url": data["source_url"]
}
save_cookies_to_file(save_data)
print(f"Stored data: {save_data}")
return JSONResponse(content={"message": "Cookies received and stored"}, status_code=200)
else:
return JSONResponse(content={"message": "Invalid data structure"}, status_code=400)
except Exception as e:
print(f"Error in POST: {e}")
return JSONResponse(content={"message": f"Error: {e}"}, status_code=500)
# --- GET Endpoint: Retrieve Cookies ---
@app.get("/cookies")
async def get_cookies():
print(f"Returning stored cookies: {save_data}")
return JSONResponse(content=save_data, status_code=200)
# --- Root Endpoint: Status Check ---
@app.get("/")
async def read_root():
return {"message": "Cookie Receiver API is running!"}