paijo77 commited on
Commit
29cdbaa
·
verified ·
1 Parent(s): 0711d6f

update app/routers/validation.py

Browse files
Files changed (1) hide show
  1. app/routers/validation.py +70 -0
app/routers/validation.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import APIRouter, HTTPException
2
+ from pydantic import BaseModel
3
+ from typing import Optional
4
+ from app.validator import proxy_validator, ValidationResult
5
+
6
+ router = APIRouter(prefix="/api/v1/validate", tags=["validation"])
7
+
8
+
9
+ class ValidateProxyRequest(BaseModel):
10
+ proxy_url: str
11
+ ip: Optional[str] = None
12
+
13
+
14
+ class ValidateProxyResponse(BaseModel):
15
+ success: bool
16
+ latency_ms: Optional[int] = None
17
+ anonymity: Optional[str] = None
18
+ can_access_google: Optional[bool] = None
19
+ country_code: Optional[str] = None
20
+ country_name: Optional[str] = None
21
+ proxy_type: Optional[str] = None
22
+ quality_score: Optional[int] = None
23
+ error_message: Optional[str] = None
24
+
25
+
26
+ @router.post("/proxy", response_model=ValidateProxyResponse)
27
+ async def validate_proxy(request: ValidateProxyRequest):
28
+ if not request.ip:
29
+ try:
30
+ ip_port = request.proxy_url.replace("http://", "").replace("https://", "").replace("socks4://", "").replace("socks5://", "")
31
+ ip = ip_port.split(":")[0]
32
+ except Exception:
33
+ raise HTTPException(status_code=400, detail="Could not extract IP from proxy_url. Please provide IP explicitly.")
34
+ else:
35
+ ip = request.ip
36
+
37
+ try:
38
+ result = await proxy_validator.validate_comprehensive(request.proxy_url, ip)
39
+
40
+ quality_score = None
41
+ if result.success:
42
+ quality_score = await proxy_validator.calculate_quality_score(
43
+ result.latency_ms,
44
+ result.anonymity,
45
+ result.can_access_google,
46
+ result.proxy_type
47
+ )
48
+
49
+ return ValidateProxyResponse(
50
+ success=result.success,
51
+ latency_ms=result.latency_ms,
52
+ anonymity=result.anonymity,
53
+ can_access_google=result.can_access_google,
54
+ country_code=result.country_code,
55
+ country_name=result.country_name,
56
+ proxy_type=result.proxy_type,
57
+ quality_score=quality_score,
58
+ error_message=result.error_message
59
+ )
60
+ except Exception as e:
61
+ raise HTTPException(status_code=500, detail=f"Validation failed: {str(e)}")
62
+
63
+
64
+ @router.post("/proxy/format", response_model=dict)
65
+ async def validate_proxy_format(request: ValidateProxyRequest):
66
+ is_valid = await proxy_validator.validate_format(request.proxy_url)
67
+ return {
68
+ "valid": is_valid,
69
+ "proxy_url": request.proxy_url
70
+ }