Spaces:
Sleeping
Sleeping
Update server.py
Browse files
server.py
CHANGED
|
@@ -2,6 +2,7 @@ from fastapi import FastAPI
|
|
| 2 |
from fastapi.middleware.cors import CORSMiddleware
|
| 3 |
from pydantic import BaseModel
|
| 4 |
import os
|
|
|
|
| 5 |
|
| 6 |
from blacklist_layer_mobile import BlacklistLayer
|
| 7 |
from ai_layer_mobile import AIAnalyzer
|
|
@@ -21,7 +22,6 @@ GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY", "")
|
|
| 21 |
blacklist = BlacklistLayer(api_key=GOOGLE_API_KEY)
|
| 22 |
print("[OK] Blacklist Layer Ready")
|
| 23 |
|
| 24 |
-
|
| 25 |
ai = AIAnalyzer(model_path="/app")
|
| 26 |
print("[OK] AI Analyzer Ready")
|
| 27 |
|
|
@@ -32,6 +32,25 @@ class URLRequest(BaseModel):
|
|
| 32 |
url: str
|
| 33 |
|
| 34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
@app.get("/")
|
| 36 |
def root():
|
| 37 |
return {
|
|
@@ -46,6 +65,11 @@ def scan(req: URLRequest):
|
|
| 46 |
url = req.url
|
| 47 |
print(f"[SCAN] {url}")
|
| 48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
is_bad, msg = blacklist.check_url(url)
|
| 50 |
print(f"[Layer 1] Blacklist: {msg}")
|
| 51 |
|
|
|
|
| 2 |
from fastapi.middleware.cors import CORSMiddleware
|
| 3 |
from pydantic import BaseModel
|
| 4 |
import os
|
| 5 |
+
import re
|
| 6 |
|
| 7 |
from blacklist_layer_mobile import BlacklistLayer
|
| 8 |
from ai_layer_mobile import AIAnalyzer
|
|
|
|
| 22 |
blacklist = BlacklistLayer(api_key=GOOGLE_API_KEY)
|
| 23 |
print("[OK] Blacklist Layer Ready")
|
| 24 |
|
|
|
|
| 25 |
ai = AIAnalyzer(model_path="/app")
|
| 26 |
print("[OK] AI Analyzer Ready")
|
| 27 |
|
|
|
|
| 32 |
url: str
|
| 33 |
|
| 34 |
|
| 35 |
+
def validate_url(url: str) -> bool:
|
| 36 |
+
# حد أقصى للطول (مثال 255 حرف)
|
| 37 |
+
if len(url) > 255:
|
| 38 |
+
return False
|
| 39 |
+
|
| 40 |
+
# تعبير نمطي للتأكد من تنسيق URL (http أو https)
|
| 41 |
+
url_pattern = re.compile(
|
| 42 |
+
r'^(https?://)' # بداية http أو https
|
| 43 |
+
r'([\w\-]+\.)+[\w\-]+' # دومين
|
| 44 |
+
r'(:\d+)?' # منفذ اختياري
|
| 45 |
+
r'(/[\w\-.~:/?#[\$@!$&\'()*+,;=%]*)?$' # مسار URL اختياري
|
| 46 |
+
)
|
| 47 |
+
|
| 48 |
+
if not url_pattern.match(url):
|
| 49 |
+
return False
|
| 50 |
+
|
| 51 |
+
return True
|
| 52 |
+
|
| 53 |
+
|
| 54 |
@app.get("/")
|
| 55 |
def root():
|
| 56 |
return {
|
|
|
|
| 65 |
url = req.url
|
| 66 |
print(f"[SCAN] {url}")
|
| 67 |
|
| 68 |
+
# التحقق من صحة الـ URL قبل المراقبة
|
| 69 |
+
if not validate_url(url):
|
| 70 |
+
print("[ERROR] Invalid URL format")
|
| 71 |
+
return {"error": "Invalid URL format", "safe": False}
|
| 72 |
+
|
| 73 |
is_bad, msg = blacklist.check_url(url)
|
| 74 |
print(f"[Layer 1] Blacklist: {msg}")
|
| 75 |
|