phishGuard-AI-2 / app.py
vat75's picture
Update app.py
d649411 verified
import gradio as gr
import requests
import os
# ============================================
# إعدادات الاتصال بـ Backend API
# ============================================
BACKEND_API_URL = os.getenv("BACKEND_API_URL", "http://localhost:7860")
# ============================================
# دالة الاتصال بـ API
# ============================================
def analyze_phishing(text):
if not text or text.strip() == "":
return "⚠️ الرجاء إدخال نص للتحليل", "", ""
try:
response = requests.post(
f"{BACKEND_API_URL}/analyze",
json={"text": text},
timeout=30
)
if response.status_code == 200:
result = response.json()
verdict = result.get("verdict", "❌ خطأ في المعالجة")
confidence = result.get("confidence", 0)
model_class = result.get("model_class", -1)
model_confidence = result.get("model_confidence", 0)
indicators_found = result.get("indicators_found", False)
verdict_text = f"**النتيجة**: {verdict}"
confidence_text = f"""
**معلومات الثقة**:
- ثقة النموذج: {model_confidence}%
- الثقة النهائية: {confidence}%
- تصنيف النموذج: {'احتيال' if model_class == 1 else 'آمن'}
- مؤشرات احتيال مكتشفة: {'نعم ✓' if indicators_found else 'لا ✗'}
"""
if "احتيال" in verdict:
color_indicator = "🔴 **تحذير**: هذه الرسالة تحتوي على علامات احتيال قوية!"
else:
color_indicator = "🟢 **آمن**: هذه الرسالة آمنة للاستخدام."
return verdict_text, confidence_text, color_indicator
else:
return f"❌ خطأ في الاتصال: {response.status_code}", "", ""
except Exception as e:
return f"❌ خطأ: تأكد من أن المساحة الأولى تعمل. التفاصيل: {str(e)}", "", ""
# ============================================
# بناء واجهة Gradio (متوافقة مع 4.44.1)
# ============================================
with gr.Blocks(theme=gr.themes.Soft(primary_hue="red"), title="PhishGuard AI") as demo:
gr.Markdown("# 🛡️ PhishGuard AI - كاشف التصيد الاحتيالي")
gr.Markdown("أداة ذكية للكشف عن رسائل التصيد الاحتيالي باستخدام تعلم الآلة والمنطق الهجين.")
# استبدال Divider بـ Markdown خط أفقي لضمان التوافق
gr.Markdown("---")
with gr.Group():
gr.Markdown("### 📝 أدخل الرسالة للتحليل")
input_text = gr.Textbox(
label="نص الرسالة",
placeholder="الصق نص الرسالة أو البريد الإلكتروني هنا...",
lines=5
)
gr.Markdown("---")
analyze_button = gr.Button("🔍 تحليل الرسالة", variant="primary")
gr.Markdown("---")
with gr.Group():
gr.Markdown("### 📊 النتائج")
with gr.Row():
verdict_output = gr.Markdown("**النتيجة**: في انتظار إدخال نص...")
indicator_output = gr.Markdown("**الحالة**: جاهز للتحليل")
gr.Markdown("---")
confidence_output = gr.Markdown("**معلومات الثقة**: سيتم عرضها هنا بعد التحليل")
with gr.Accordion("ℹ️ معلومات مهمة", open=False):
gr.Markdown("""
### نصائح للحماية:
1. لا تضغط على روابط غريبة.
2. راقب الكلمات مثل "سارع" أو "حدث بياناتك".
3. لا تشارك بياناتك البنكية أبداً.
""")
analyze_button.click(
fn=analyze_phishing,
inputs=input_text,
outputs=[verdict_output, confidence_output, indicator_output]
)
if __name__ == "__main__":
demo.launch()