Add optional loopback TLS to API startup

This commit is contained in:
Hamza Ayed
2026-10-03 17:37:58 +03:00
parent 92deb41e6d
commit b5a48c5a96
3 changed files with 35 additions and 2 deletions
+1 -1
View File
@@ -78,7 +78,7 @@
- [x] اختبار مخزن جلسة الويب المؤقت (2/2) وبناء Flutter Web ناجح (2026-10-03). رسالة الدخول توضح انتهاء الجلسة عند إعادة تحميل الصفحة.
- [x] إضافة استعادة كلمة المرور عبر SMTP: رمز عشوائي 30 دقيقة بصمة SHA-256، لمرة واحدة، تحديد طلبات حسب البريد والعميل، رسالة API عامة، وتسجيل خروج كل الجلسات القديمة بعد تغيير كلمة المرور. مسارات Flutter للطلب وإدخال الرمز وتغيير كلمة المرور مضافة؛ 12 اختبار مصادقة نجحت، و`flutter analyze` نظيف (2026-10-03). يتطلب الإرسال إعداد متغيرات SMTP الموثقة في README.
- [x] اختبار FastAPI محليًا عبر TLS: `scripts/local_tls_smoke.py` ولّد شهادة اختبار مؤقتة، شغّل الخادم على `127.0.0.1`، تحقق من شهادة TLS صراحة وأعاد `/openapi.json` الحالة 200، ورفض شهادة غير موثوقة؛ أُغلق الخادم وحُذفت ملفات الشهادة بعد الاختبار (2026-10-03).
- [ ] TLS: تحقق Windows Dart `HttpClient` المستخدم من عميل Flutter من `https://localhost/.../health` وأعاد 200 مع شهادة مؤقتة أضيفت إلى مخزن CurrentUser ثم حُذفت وتأكد غياب بصمتها (2026-10-03). محاولة Edge headless لم تنتهِ خلال 25 ثانية، لذلك ثقة المتصفح غير مؤكدة. إعداد TLS دائم والتحقق من العميل/المتصفح قبل أي وصول شبكي ما زالا مفتوحين؛ شهادة smoke ليست شهادة نشر.
- [ ] TLS: تحقق Windows Dart `HttpClient` المستخدم من عميل Flutter من `https://localhost/.../health` وأعاد 200 مع شهادة مؤقتة أضيفت إلى مخزن CurrentUser ثم حُذفت وتأكد غياب بصمتها (2026-10-03). أضيف لـ`start-api.ps1` خيار شهادة/مفتاح PEM عبر `SOVEREIGNAI_TLS_CERTFILE` و`SOVEREIGNAI_TLS_KEYFILE`، ويظل الإعداد الافتراضي HTTP على loopback؛ الزوج مطلوب معًا، ولا يثبت السكربت شهادةً في مخزن الثقة. (2026-10-03: اختبار تشغيل فعلي عبر السكربت على `127.0.0.1:8128` أعاد `/health` الحالة 200 باستخدام الشهادة المحددة، ورفضها عميل HTTPX عند استخدام مخزن الثقة الافتراضي. أوقفت الخدمة وحذفت الشهادة والمفتاح وقاعدة الاختبار المؤقتة.) محاولة Edge headless السابقة لم تنتهِ خلال 25 ثانية، لذلك ثقة المتصفح/واجهة Flutter على شهادة دائمة غير مؤكدة. إعداد إدارة شهادة محلية دائمة والتحقق من العميل/المتصفح قبل أي وصول شبكي ما زالا مفتوحين؛ شهادة smoke ليست شهادة نشر.
- [x] حد أولي دائم لتخمين كلمات المرور وإنشاء الحسابات في SQLite مع نافذة انتهاء و`Retry-After`؛ اختبرته مجموعة Python كاملة، وتبقى مراجعة الحدود تحت reverse proxy موثوق قبل أي نشر خارجي.
- [x] تعطيل حفظ رمز الجلسة الدائم في الويب؛ استخدام مخزن ذاكرة مؤقت وإظهار ذلك للمستخدم.
- [ ] التحقق من متطلبات Linux keyring وتشغيل تخزين الجلسة الأصلي، وبناء macOS وLinux على منصات فعلية.