import requests import json import logging from flask import Flask, request app = Flask(__name__) logging.basicConfig(level=logging.INFO) @app.get("/") def ip(): if "X-Forwarded-For" in request.headers: ip = request.headers["X-Forwarded-For"] else: ip = request.remote_addr logging.info("looking up IP info for %s", ip) try: response = requests.get( "https://ip.shronk.tech/lookup?ip=" + ip, headers={ "User-Agent": request.headers.get("User-Agent", "Mozilla/5.0"), "Accept": request.headers.get("Accept", "text/plain"), "Accept-Language": request.headers.get("Accept-Language", "en-US"), "Dnt": "1", "Sec-Fetch-Dest": "document", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-Site": "none", "Sec-Fetch-User": "?1", "Sec-Gpc": "1", "Upgrade-Insecure-Requests": "1" } ) response.raise_for_status() except Exception as e: logging.error("Failed to get data for %s: %s", ip, e, exc_info=True) return {"error": str(e), "error-type": "request-failure"}, 500 try: data = response.json() except json.JSONDecodeError as e: logging.error("Failed to parse data for %s: %s", ip, e, exc_info=True) return {"error": str(e), "error.type": "json-decode"}, 500 logging.info("%s -> %r", ip, data) data["ip"] = ip data.pop("legalese", None) data.pop("source", None) data.pop("brexitRequired", None) return data, response.status_code