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()