1proxy / app /routers /validation.py
paijo77's picture
update app/routers/validation.py
29cdbaa verified
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
}