# ========================== # واجهة AmanPredict – ثيم شبيه بأبشر # ========================== import streamlit as st import json import pickle import numpy as np import os # إعداد الصفحة وشعار جانبي st.set_page_config(page_title="AmanPredict Dashboard", layout="wide", page_icon="🔐") # ========================== # CSS الثيم # ========================== custom_css = """ """ st.markdown(custom_css, unsafe_allow_html=True) # ========================== # تحميل النماذج # ========================== DOC_MODEL_PATH = "document_model.sav" SEC_MODEL_PATH = "security_model.sav" DEVICE_STORE_PATH = "device_store.json" doc_model = pickle.load(open(DOC_MODEL_PATH, "rb")) sec_model = pickle.load(open(SEC_MODEL_PATH, "rb")) # ========================== # ملف الأجهزة الموثوقة # ========================== if not os.path.exists(DEVICE_STORE_PATH): with open(DEVICE_STORE_PATH, "w") as f: json.dump({}, f) with open(DEVICE_STORE_PATH, "r") as f: device_store = json.load(f) USER = "user_1" if USER not in device_store: device_store[USER] = [] def save_devices(): with open(DEVICE_STORE_PATH, "w") as f: json.dump(device_store, f, indent=2) # ========================== # الشريط الجانبي # ========================== st.sidebar.title("📌 AmanPredict") page = st.sidebar.radio( "اختر الصفحة:", ["🏠 الصفحة الرئيسية", "🔐 أمان الدخول", "🪪 تنبؤ الوثائق", "📊 السجل الأمني", "⚙ الإعدادات"] ) # ========================== # الصفحة الرئيسية # ========================== if page == "🏠 الصفحة الرئيسية": st.title("AmanPredict – لوحة الذكاء الأمني") st.write(""" منصة ذكية تعتمد على الذكاء الاصطناعي لتقديم: - تحليل سلوك الدخول وكشف محاولات الاختراق - توثيق الأجهزة الموثوقة - تنبؤ المخاطر للوثائق الحكومية - تقارير أمنية احترافية (MVP) """) # ========================== # أمان الدخول # ========================== elif page == "🔐 أمان الدخول": st.title("🔐 نظام أمان الدخول – Device Security AI") device_id = st.text_input("معرّف الجهاز:", "device_X1") country = st.selectbox("الدولة:", ["Saudi Arabia", "Other"]) sessions = st.number_input("عدد الجلسات النشطة:", 1, 10) days = st.slider("الأيام المتبقية للوثيقة:", 0, 180, 30) device_known = device_id in device_store[USER] device_flag = 0 if device_known else 1 location_flag = 0 if country == "Saudi Arabia" else 2 if st.button("تشغيل الفحص الأمني"): X = np.array([[days, sessions, device_flag, location_flag, 0, 0]]) score = -sec_model.decision_function(X)[0] normalized = 1 / (1 + np.exp(-score)) st.subheader("📊 النتيجة الأمنية") st.write("نسبة الخطر:", round(normalized, 3)) if normalized > 0.85: st.error("🚨 خطر عالي — تم إيقاف الدخول") elif normalized > 0.6: st.warning("⚠ خطر متوسط — نحتاج تحقق") if st.button("اتصال من أبشر (محاكاة)"): st.info("📞 يتم الاتصال الآن…") else: st.success("✔ دخول آمن") if not device_known: if st.button("توثيق الجهاز"): device_store[USER].append(device_id) save_devices() st.success("✔ تم توثيق الجهاز") # ========================== # تنبؤ الوثائق # ========================== elif page == "🪪 تنبؤ الوثائق": st.title("🪪 تنبؤ المخاطر للوثائق الحكومية") days_left = st.number_input("الأيام المتبقية:", 0, 180) status = st.selectbox("الحالة:", ["active", "expiring"]) status_v = 0 if status == "active" else 1 if st.button("تنفيذ التنبؤ"): pred = doc_model.predict([[days_left, status_v]])[0] if pred == 1: st.error("⚠ الوثيقة عالية المخاطر — يجب التجديد") else: st.success("✔ الوثيقة آمنة") # ========================== # السجل الأمني # ========================== elif page == "📊 السجل الأمني": st.title("📊 سجل محاولات الدخول") st.info("ميزة قيد التطوير — نسخة محاكاة فقط.") # ========================== # الإعدادات # ========================== elif page == "⚙ الإعدادات": st.title("⚙ الإعدادات") st.write("الأجهزة الموثوقة:") st.write(device_store[USER]) if st.button("مسح جميع الأجهزة"): device_store[USER] = [] save_devices() st.warning("✔ تم حذف جميع الأجهزة.")