File size: 4,799 Bytes
4f9b027
8c21cc3
 
 
 
4f9b027
15c4f72
34c130f
15c4f72
bf3fd73
8c21cc3
 
15c4f72
34c130f
 
15c4f72
34c130f
15c4f72
34c130f
 
15c4f72
34c130f
8c21cc3
4f9b027
28e2306
8c21cc3
 
 
 
 
 
 
 
34c130f
8c21cc3
 
 
 
 
 
 
 
34c130f
8c21cc3
 
 
 
a77a549
8c21cc3
 
 
 
d44c899
8c21cc3
 
d44c899
8c21cc3
 
 
d44c899
 
8c21cc3
 
 
 
d44c899
8c21cc3
 
 
d44c899
8c21cc3
566a7ae
d44c899
8c21cc3
 
 
 
 
 
 
 
 
db4d10f
 
8c21cc3
 
 
 
db4d10f
8c21cc3
db4d10f
8c21cc3
db4d10f
 
 
8c21cc3
db4d10f
8c21cc3
db4d10f
 
 
 
 
 
 
 
8c21cc3
 
 
db4d10f
 
8c21cc3
 
 
 
 
15c4f72
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import torch
import uvicorn
import re
from fastapi import FastAPI
from pydantic import BaseModel
from transformers import AutoTokenizer, AutoModelForSequenceClassification
# --- الإضافة الجديدة هنا ---
from fastapi.middleware.cors import CORSMiddleware
# -------------------------

app = FastAPI()

# --- إعدادات الـ CORS لفك الحظر ---
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # يسمح لجميع المواقع بالوصول
    allow_credentials=True,
    allow_methods=["*"],  # يسمح بجميع أنواع الطلبات (POST, GET, الخ)
    allow_headers=["*"],  # يسمح بجميع الترويسات
)
# --------------------------------

# اسم النموذج المستخدم
MODEL_NAME = "vat75/PhishGuard-AI"

# تحميل الـ Tokenizer والنموذج
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME)
model.eval()

class MessageInput(BaseModel):
    text: str

# كلمات مفتاحية ترفع احتمالية الاحتيال
SCAM_KEYWORDS = [
    "حدث بياناتك", "تحديث بياناتك", "حسابك البنكي", "بطاقتك الصراف", 
    "ربحت", "جائزة", "مبروك", "فزت", "تجنب إيقاف", "حظر حسابك",
    "سارع", "اضغط الرابط", "اضغط هنا", "لديك طلب متوقف", 
    "شحنتك متوقفة بسبب رسوم", "ادفع الان", "تم قبولك في وظيفة براتب عالي", 
    "لديك هدية"
]

# قائمة ببعض نطاقات الروابط المشبوهة
SUSPICIOUS_DOMAINS = [
    "bit.ly", "tinyurl.com", "t.co", "cutt.ly", "shorturl.at", 
    "is.gd", "buff.ly", "ow.ly", "rebrand.ly"
]

def contains_scam_indicators(text: str) -> bool:
    url_pattern = r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+'
    urls = re.findall(url_pattern, text)
    
    # فحص الروابط إن وجدت
    if urls:
        for url in urls:
            # 1. فحص إذا كان الرابط يستخدم خدمة اختصار روابط مشبوهة
            for domain in SUSPICIOUS_DOMAINS:
                if domain in url.lower():
                    return True
        
        # 2. فحص إذا كان النص المصاحب للرابط يحتوي على كلمات خطر
        for word in SCAM_KEYWORDS:
            if word in text:
                return True
    
    # 3. فحص الكلمات المفتاحية حتى لو لم يوجد رابط (رسائل احتيال نصية)
    for word in SCAM_KEYWORDS:
        if word in text:
            return True
            
    return False


@app.get("/")
async def home():
    return {"status": "Online"}

@app.post("/analyze")
async def analyze_text(input_data: MessageInput):
    try:
        text = input_data.text
        
        # 1. تحليل النص/الرابط باستخدام نموذج الذكاء الاصطناعي
        inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=128)
        with torch.no_grad():
            outputs = model(**inputs)
            probs = torch.nn.functional.softmax(outputs.logits, dim=-1)
        
        # 2. الحصول على الفئة المتوقعة ونسبة الثقة
        predicted_class = torch.argmax(probs, dim=-1).item()
        confidence = probs[0][predicted_class].item() * 100
        
        # 3. منطق القرار (الاعتماد الكلي على الذكاء)
        if predicted_class == 1:
            # النموذج اكتشف أنه احتيال بناءً على تحليل عميق للرابط والنص
            verdict = "🚨 محاولة احتيال"
            final_confidence = confidence
        else:
            # النموذج يراه آمناً، هنا فقط نلقي نظرة سريعة على الكلمات الخطيرة جداً للتأكيد
            if contains_scam_indicators(text):
                # إذا النموذج قال آمن ولكن النص فيه "حدث بياناتك البنكية" (كلمات صريحة جداً)
                verdict = "🚨 محاولة احتيال"
                final_confidence = 90.0 # نعطي ثقة عالية لأن الكلمات صريحة
            else:
                verdict = "✅ نص آمن"
                final_confidence = confidence

        return {
            "verdict": verdict,
            "confidence": round(final_confidence, 2),
            "method": "AI Analysis" # لإظهار أن التحليل تم عبر الذكاء
        }
    except Exception as e:
        return {"error": str(e)}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=7860)