Spaces:
Sleeping
Sleeping
| # ========================== | |
| # واجهة 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 = """ | |
| <style> | |
| /* خلفية الصفحة */ | |
| [data-testid="stAppViewContainer"] { | |
| background: linear-gradient(180deg, #f7fdf8 0%, #ffffff 70%); | |
| } | |
| /* الشريط الجانبي */ | |
| [data-testid="stSidebar"] { | |
| background-color: #0b6b3a; | |
| color: white; | |
| } | |
| /* عنوان الشريط الجانبي */ | |
| [data-testid="stSidebar"] h1, | |
| [data-testid="stSidebar"] h2, | |
| [data-testid="stSidebar"] h3 { | |
| color: white !important; | |
| } | |
| /* عنوان رئيسي */ | |
| h1 { | |
| color: #0b6b3a !important; | |
| font-weight: 800 !important; | |
| } | |
| /* أزرار */ | |
| .stButton>button { | |
| background-color: #14a44d !important; | |
| color: white !important; | |
| border-radius: 6px !important; | |
| padding: 10px 20px !important; | |
| } | |
| /* الروابط */ | |
| a { | |
| color: #0b6b3a !important; | |
| } | |
| </style> | |
| """ | |
| 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("✔ تم حذف جميع الأجهزة.") |