Spaces:
Sleeping
Sleeping
File size: 6,214 Bytes
2f7dda8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | # ==========================
# واجهة 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("✔ تم حذف جميع الأجهزة.") |