AmanPredict / app.py
NorahAlzeid's picture
Upload 10 files
2f7dda8 verified
# ==========================
# واجهة 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("✔ تم حذف جميع الأجهزة.")