Spaces:
Sleeping
Sleeping
Upload app.py
Browse files
app.py
CHANGED
|
@@ -22,18 +22,24 @@ if 'authenticated' not in st.session_state:
|
|
| 22 |
st.session_state.authenticated = False
|
| 23 |
|
| 24 |
# --- <<< هذا هو الجزء الذي تم تعديله ---
|
| 25 |
-
# كود HTML/JavaScript الذي سيتم حقنه في Streamlit
|
| 26 |
auth_listener_html = """
|
| 27 |
<script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
// الاستماع للرسائل القادمة من النافذة "الأب"
|
| 29 |
window.addEventListener('message', (event) => {
|
| 30 |
|
| 31 |
-
// --- تعديل 1: قائمة النطاقات المسموحة (مع وبدون www) ---
|
| 32 |
-
const allowedOrigins = [
|
| 33 |
-
"https://www.skydata.kozow.com",
|
| 34 |
-
"https://skydata.kozow.com"
|
| 35 |
-
];
|
| 36 |
-
|
| 37 |
// التحقق إذا كان مصدر الرسالة ضمن القائمة المسموحة
|
| 38 |
if (!allowedOrigins.includes(event.origin)) {
|
| 39 |
console.warn("تم رفض رسالة من نطاق غير مصرح به:", event.origin);
|
|
@@ -43,15 +49,8 @@ window.addEventListener('message', (event) => {
|
|
| 43 |
try {
|
| 44 |
const data = JSON.parse(event.data);
|
| 45 |
|
| 46 |
-
// --- تعديل 2: قائمة أسماء النطاقات المسموحة (للتأكيد) ---
|
| 47 |
-
const allowedDomains = [
|
| 48 |
-
"www.skydata.kozow.com",
|
| 49 |
-
"skydata.kozow.com"
|
| 50 |
-
];
|
| 51 |
-
|
| 52 |
// التحقق من محتوى الرسالة (لزيادة الأمان)
|
| 53 |
if (data.source === 'skydata-auth' && allowedDomains.includes(data.domain)) {
|
| 54 |
-
|
| 55 |
// إذا نجحت المصادقة، أرسل "True" إلى Streamlit
|
| 56 |
Streamlit.setComponentValue({ "authenticated": true });
|
| 57 |
}
|
|
@@ -59,6 +58,23 @@ window.addEventListener('message', (event) => {
|
|
| 59 |
console.error("خطأ في معالجة الرسالة:", e);
|
| 60 |
}
|
| 61 |
}, false);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
</script>
|
| 63 |
"""
|
| 64 |
# --- <<< نهاية الجزء المعدل ---
|
|
@@ -212,7 +228,7 @@ if st.session_state.authenticated:
|
|
| 212 |
loc = localization[lang_code]
|
| 213 |
|
| 214 |
# --- 7. واجهة التطبيق الرئيسية (Main App) ---
|
| 215 |
-
LOGO_URL = "https://i.ibb.co/v4vwvcGq/
|
| 216 |
col1, col2 = st.columns([1, 6])
|
| 217 |
with col1:
|
| 218 |
st.image(LOGO_URL, width=80)
|
|
@@ -223,7 +239,6 @@ if st.session_state.authenticated:
|
|
| 223 |
selected_tab = st.sidebar.radio(loc['input_method'], [loc['tab_upload'], loc['tab_url'], loc['tab_file']])
|
| 224 |
|
| 225 |
# --- 8. منطق التبويبات ---
|
| 226 |
-
# ... (باقي كود التبويبات يبقى كما هو تماماً) ...
|
| 227 |
if selected_tab == loc['tab_upload']:
|
| 228 |
uploaded_file = st.file_uploader(loc['upload_prompt'], type=["jpg", "jpeg", "png"])
|
| 229 |
if uploaded_file is not None:
|
|
|
|
| 22 |
st.session_state.authenticated = False
|
| 23 |
|
| 24 |
# --- <<< هذا هو الجزء الذي تم تعديله ---
|
| 25 |
+
# كود HTML/JavaScript الذي سيتم حقنه في Streamlit
|
| 26 |
auth_listener_html = """
|
| 27 |
<script>
|
| 28 |
+
// --- الجزء الأول: الاستماع لرسالة المصادقة من الأب ---
|
| 29 |
+
|
| 30 |
+
// النطاقات المسموحة (للرسالة القادمة)
|
| 31 |
+
const allowedOrigins = [
|
| 32 |
+
"https://www.skydata.kozow.com",
|
| 33 |
+
"https://skydata.kozow.com"
|
| 34 |
+
];
|
| 35 |
+
const allowedDomains = [
|
| 36 |
+
"www.skydata.kozow.com",
|
| 37 |
+
"skydata.kozow.com"
|
| 38 |
+
];
|
| 39 |
+
|
| 40 |
// الاستماع للرسائل القادمة من النافذة "الأب"
|
| 41 |
window.addEventListener('message', (event) => {
|
| 42 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
// التحقق إذا كان مصدر الرسالة ضمن القائمة المسموحة
|
| 44 |
if (!allowedOrigins.includes(event.origin)) {
|
| 45 |
console.warn("تم رفض رسالة من نطاق غير مصرح به:", event.origin);
|
|
|
|
| 49 |
try {
|
| 50 |
const data = JSON.parse(event.data);
|
| 51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
// التحقق من محتوى الرسالة (لزيادة الأمان)
|
| 53 |
if (data.source === 'skydata-auth' && allowedDomains.includes(data.domain)) {
|
|
|
|
| 54 |
// إذا نجحت المصادقة، أرسل "True" إلى Streamlit
|
| 55 |
Streamlit.setComponentValue({ "authenticated": true });
|
| 56 |
}
|
|
|
|
| 58 |
console.error("خطأ في معالجة الرسالة:", e);
|
| 59 |
}
|
| 60 |
}, false);
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
// --- الجزء الثاني (الجديد): إرسال رسالة "أنا جاهز" إلى الأب ---
|
| 64 |
+
// (هذا الكود سيعمل فوراً عند تحميل هذا المكوّن)
|
| 65 |
+
|
| 66 |
+
const readyMessage = JSON.stringify({ source: 'streamlit-ready' });
|
| 67 |
+
|
| 68 |
+
// يجب أن نرسل الرسالة إلى النطاقات المسموحة للأب
|
| 69 |
+
allowedOrigins.forEach(origin => {
|
| 70 |
+
try {
|
| 71 |
+
// إرسال الرسالة إلى النافذة "الأب"
|
| 72 |
+
window.parent.postMessage(readyMessage, origin);
|
| 73 |
+
} catch (e) {
|
| 74 |
+
console.error("فشل إرسال رسالة الاستعداد إلى الأب:", origin, e);
|
| 75 |
+
}
|
| 76 |
+
});
|
| 77 |
+
|
| 78 |
</script>
|
| 79 |
"""
|
| 80 |
# --- <<< نهاية الجزء المعدل ---
|
|
|
|
| 228 |
loc = localization[lang_code]
|
| 229 |
|
| 230 |
# --- 7. واجهة التطبيق الرئيسية (Main App) ---
|
| 231 |
+
LOGO_URL = "https://i.ibb.co/v4vwvcGq/skydatafull.webp"
|
| 232 |
col1, col2 = st.columns([1, 6])
|
| 233 |
with col1:
|
| 234 |
st.image(LOGO_URL, width=80)
|
|
|
|
| 239 |
selected_tab = st.sidebar.radio(loc['input_method'], [loc['tab_upload'], loc['tab_url'], loc['tab_file']])
|
| 240 |
|
| 241 |
# --- 8. منطق التبويبات ---
|
|
|
|
| 242 |
if selected_tab == loc['tab_upload']:
|
| 243 |
uploaded_file = st.file_uploader(loc['upload_prompt'], type=["jpg", "jpeg", "png"])
|
| 244 |
if uploaded_file is not None:
|