Spaces:
Running
on
Zero
Running
on
Zero
import uuid | |
import time | |
import logging | |
import socket | |
import ipaddress | |
from urllib.parse import urlparse | |
import gradio as gr | |
logger = logging.getLogger(__name__) | |
# Helper Functions | |
def format_error(message): | |
"""Formats error messages for consistent user feedback.""" | |
return {"error": message} | |
# def toggle_visibility(show, *components): | |
# """Toggles visibility for multiple Gradio components.""" | |
# return [gr.update(visible=show) for _ in components] | |
def generate_session_id(): | |
"""Generates a unique session ID for tracking inputs.""" | |
return str(uuid.uuid4()) | |
def log_runtime(start_time): | |
"""Logs the runtime of a process.""" | |
elapsed_time = time.time() - start_time | |
logger.info(f"Process completed in {elapsed_time:.2f} seconds.") | |
return elapsed_time | |
def is_public_ip(url): | |
""" | |
Checks whether the resolved IP address of a URL is public (non-local). | |
Prevents SSRF by blocking internal addresses like 127.0.0.1 or 192.168.x.x. | |
""" | |
try: | |
hostname = urlparse(url).hostname | |
ip = socket.gethostbyname(hostname) | |
ip_obj = ipaddress.ip_address(ip) | |
return ip_obj.is_global # Only allow globally routable IPs | |
except Exception as e: | |
logger.warning(f"URL IP validation failed: {e}") | |
return False |