import gradio as gr def evaluate_behavior_advanced(scenario_type): if scenario_type == "دخول طبيعي 🟢": score = 95 status = "🟢 ثقة عالية جداً" action = "السماح بالجلسة كالمعتاد ودون أي قيود أمنية." wpm = "60 WPM" device = "جهاز معروف (iPhone)" location = "القصيم، المملكة العربية السعودية" clicks = "طبيعية (250ms)" elif scenario_type == "تغيير موقع/جهاز 🟠": score = 65 status = "🟠 ثقة متوسطة (تحت المراقبة)" action = "طَلب تحقق إضافي عبر رمز OTP مؤقت." wpm = "55 WPM" device = "جهاز جديد (iPad Chrome)" location = "لندن، المملكة المتحدة" clicks = "طبيعية (280ms)" else: score = 25 status = "🔴 ثقة منخفضة جداً (خطر مرتفع)" action = "🚨 إيقاف الجلسة فوراً وتجميد الحساب لحين التحقق." wpm = "185 WPM (Bot)" device = "جهاز معروف (iPhone)" location = "القصيم، المملكة العربية السعودية" clicks = "سريعة جداً وخاطفة (20ms - Bot)" summary = f""" ### 🛡️ ملخص قرار الأمان السلوكي: * **مستوى الثقة اللحظي:** `{score}%` * **تقييم النظام:** {status} * **التوجيه الآلي:** {action} """ return summary, score, wpm, device, location, clicks with gr.Blocks(theme=gr.themes.Soft(), title="مشروع هُويّة - SAIF 2026") as demo: gr.Markdown("# 🛡️ مشروع هُويّة (SAIF 2026)") gr.Markdown("### نظام التحقق المستمر القائم على السلوك السايكومتري (Continuous Behavioral Authentication)") gr.Markdown("---") with gr.Row(): with gr.Column(scale=1): gr.Markdown("#### 🕹️ محاكي سلوك الجلسة") scenario_input = gr.Radio( choices=["دخول طبيعي 🟢", "تغيير موقع/جهاز 🟠", "سلوك مشبوه / هجوم 🔴"], label="اختر سيناريو الاختبار:", value="دخول طبيعي 🟢" ) btn = gr.Button("⚡ تحليل وتحديث الجلسة", variant="primary") gr.Markdown("#### 🔍 الخصائص السلوكية المرصودة (Telemetry)") wpm_out = gr.Textbox(label="سرعة الكتابة") clicks_out = gr.Textbox(label="نمط النقرات (Interval)") device_out = gr.Textbox(label="معرف الجهاز (Device ID)") location_out = gr.Textbox(label="الموقع الجغرافي (IP Geo)") with gr.Column(scale=2): output_summary = gr.Markdown() score_slider = gr.Slider(minimum=0, maximum=100, label="مقياس مستوى الثقة (Trust Score Meter)", interactive=False) inputs_list = [scenario_input] outputs_list = [output_summary, score_slider, wpm_out, device_out, location_out, clicks_out] btn.click(fn=evaluate_behavior_advanced, inputs=inputs_list, outputs=outputs_list) demo.load(fn=evaluate_behavior_advanced, inputs=inputs_list, outputs=outputs_list) demo.launch()