from fastapi import APIRouter, HTTPException from pydantic import BaseModel from typing import Optional from app.validator import proxy_validator, ValidationResult router = APIRouter(prefix="/api/v1/validate", tags=["validation"]) class ValidateProxyRequest(BaseModel): proxy_url: str ip: Optional[str] = None class ValidateProxyResponse(BaseModel): success: bool latency_ms: Optional[int] = None anonymity: Optional[str] = None can_access_google: Optional[bool] = None country_code: Optional[str] = None country_name: Optional[str] = None proxy_type: Optional[str] = None quality_score: Optional[int] = None error_message: Optional[str] = None @router.post("/proxy", response_model=ValidateProxyResponse) async def validate_proxy(request: ValidateProxyRequest): if not request.ip: try: ip_port = request.proxy_url.replace("http://", "").replace("https://", "").replace("socks4://", "").replace("socks5://", "") ip = ip_port.split(":")[0] except Exception: raise HTTPException(status_code=400, detail="Could not extract IP from proxy_url. Please provide IP explicitly.") else: ip = request.ip try: result = await proxy_validator.validate_comprehensive(request.proxy_url, ip) quality_score = None if result.success: quality_score = await proxy_validator.calculate_quality_score( result.latency_ms, result.anonymity, result.can_access_google, result.proxy_type ) return ValidateProxyResponse( success=result.success, latency_ms=result.latency_ms, anonymity=result.anonymity, can_access_google=result.can_access_google, country_code=result.country_code, country_name=result.country_name, proxy_type=result.proxy_type, quality_score=quality_score, error_message=result.error_message ) except Exception as e: raise HTTPException(status_code=500, detail=f"Validation failed: {str(e)}") @router.post("/proxy/format", response_model=dict) async def validate_proxy_format(request: ValidateProxyRequest): is_valid = await proxy_validator.validate_format(request.proxy_url) return { "valid": is_valid, "proxy_url": request.proxy_url }