cryptofoundry

الاتصال بـ cryptofoundry

أخبرنا بما تريد بناءه أو أتمتته.

البريد الإلكتروني
[email protected]
ADAMANT Messenger
فتح في ADAMANT
Ecosystem & Integrations

خدمة إشعارات ADAMANT الإصدار v0.5.0 — تحديث .NET 8 وتحسينات الموثوقية والخصوصية

توفر خدمة إشعارات ADAMANT (ANS) إشعارات Apple Push لتطبيق ADAMANT على نظام iOS دون أن تتمكن ANS أو Apple من معرفة هوية أطراف المراسلة. الإصدار v0.5.0 هو أول إصدار موثق منذ إصدار 0.4.1 في عام 2019.

لم يكن هذا التحديث إعادة كتابة شاملة. نظرًا للتخطيط لاستبدال ANS بـ adamant-ns مستقبلاً، كان الهدف محدوداً: التخلص من التبعيات التي انتهى عمرها الافتراضي وإصلاح الأخطاء التي تسببت في مشاكل تشغيلية، دون المساس بالبنية الأساسية أو نموذج الخصوصية.

بيئة التشغيل

تم نقل الخدمة من netcoreapp3.0 (الذي انتهى دعمه منذ عام 2020) إلى .NET 8 LTS في جميع المشاريع. يتيح هذا النقل إمكانية النشر الأصلي على Ubuntu 22.04+ دون الحاجة إلى الاعتماد على حاويات تحتوي على مكتبات قديمة للحفاظ على بيئة التشغيل السابقة.

تسريب المقابس (Socket leak)

كان عميل API يخصص HttpClient جديداً لكل طلب دون التخلص منه. في بيئة الإنتاج، ظهر هذا كزيادة مستمرة في المقابس العالقة في حالة CLOSE-WAIT — بمعدل يقدر بـ 30 واصف ملف في الدقيقة لكل مثيل قيد التشغيل. بعد تجاوز حد معين، يؤدي هذا إلى تعطيل دقة DNS للعملية بأكملها. تم استبدال ذلك الآن بعميل مشترك ومعاد استخدامه.

تجاوز الفشل (Failover)

كان اختيار العقدة (Node) يتم عشوائياً دون إعادة محاولة عند الفشل. أي خطأ في تلك العقدة، حتى لو كان عابراً، كان يؤدي إلى انهيار الخدمة بالكامل. الآن، تقوم الخدمة بإعادة المحاولة مع عقدة مختلفة قبل التوقف، وفي حال حدوث انقطاع شامل في جميع العقد المكونة، يتم تخطي دورة العمل بدلاً من انهيار الخدمة.

استبدال مزود EF Core

كانت الخطة هي الإبقاء على EF Core كما هو ورفع إطار العمل المستهدف فقط. نجح الأمر مع نواة ORM، حيث يستهدف EF Core 2.2 إطار netstandard2.0 وبالتالي يتوافق مع .NET 8، لكن مزود MySQL (MySql.Data.EntityFrameworkCore) لم يعمل إطلاقاً، حيث ظهر خطأ AmbiguousMatchException عند أول استعلام، وهو ما تم اكتشافه عبر اختبار دخاني (smoke test) جديد يعتمد على SQLite قبل وصوله للإنتاج. تم استبداله بـ Pomelo.EntityFrameworkCore.MySql، وهو المزود المدعوم بفعالية والذي يعتمد عليه معظم نظام .NET البيئي.

إصلاحات الخصوصية

تم العثور على ثلاث عبارات سجل (log) كانت تطبع بيانات حساسة: رمز الجهاز (device token) عند كل عملية دفع ناجحة، وإشارة حمولة (signal payload) مفككة التشفير (تتضمن رمز الجهاز) عند فشل التحليل، وكلمة مرور شهادة APNs عند فشل التحميل. انتهكت جميعها قواعد الخصوصية الخاصة بالمشروع وتمت إزالتها.

إصلاحات إنتاجية أخرى

بعد تطبيق ما سبق، تم العثور على مشاكل إضافية وإصلاحها في بيئة الإنتاج: خطأ في توسيع المسار ~ كان يمنع بدء عمليتي المعالجة على خادم بدون واجهة رسومية، وحالة استثنائية عند بدء التشغيل قد تؤدي إلى إرسال إشعارات مكثفة لجميع الأجهزة المسجلة حول معاملات قديمة بعد خلل في الشبكة، ومشكلة في سلامة الخيوط (thread-safety) عند اختيار العقدة في ظل الاستخدام المتزامن، وفقدان مهلة HTTP، ومرجع فارغ (null reference) عند استجابة APNs مشوهة.

الإغلاق السلس

لم تكن عمليات المعالجة تراقب إشارة SIGTERM سابقاً، لذا كان أمر docker stop أو systemctl restart يظهر دائماً كأنه انهيار في السجلات. الآن، يتم إغلاق العمليات بشكل سليم.

الاختبارات وتتبع الإصدارات

ارتفعت تغطية الاختبارات من عدد قليل إلى 35 اختباراً، بما في ذلك الاختبار الدخاني لـ EF Core/SQLite المذكور أعلاه. تحمل الإصدارات الآن رقم إصدار حقيقي — سابقاً كان كل إصدار يُشحن برقم 1.0.0.0 بغض النظر عما يذكره ملف المشروع.

الأمان

تمت مراجعة الأمان بواسطة cryptofoundry.

روابط