يحتاج البرنامج الصغير الذي يصل VPN قائمًا إلى وحدة تحكم، لا إلى تنفيذ VPN جديد. ينبغي للمحرك المدعوم أن يتولى التفاوض وحركة النفق؛ وينبغي لبرنامجك أن يعبّر عن طلب المستخدم وأن يشرح النتيجة بصدق. على Linux تمنح واجهة NetworkManager D-Bus تلك الوحدة نموذجًا ملموسًا تتبعه.

أربع فحوص تمنع وحدة التحكم من الخلط بين ملف شخصي محفوظ وطلب تنشيط وجلسة عاملة.

الفحص الأول: أي هوية يجري اختيارها

احتفظ بمعرّف UUID للملف الشخصي بوصفه الهوية الدائمة، وحلّه عبر المدير عندما تحتاج إلى مسار الكائن. يمكن أن يشترك ملفان شخصيان في اسم عرض واحد، ومسار الناقل وقت التشغيل ليس تفضيلًا معقولًا للمستخدم كي تخزّنه. اكتب الاختيار في إعداداتك الخاصة، لا في تعليق عن أي إدخال كان الثاني في القائمة.

تحقق مما يعيده المدير قبل أن تعتبره تطابقًا. معرّف UUID لم يعد موجودًا ينتج فشل بحث، وهو مسار شيفرة مختلف عن ملف شخصي موجود يرفض التنشيط.

الفحص الثاني: ماذا يعيد نداء التنشيط

يأخذ نداء التنشيط الموثق مسار كائن اتصال قائم، ومسار جهاز، وكائنًا محددًا. ويعيد مسار اتصال نشط، وهذا الرد مقبض لا نتيجة جاهزية. لا تضبط علامة الجاهزية في تطبيقك من قيمة الإرجاع؛ اشترك بدلًا من ذلك في حالة الاتصال النشط وسببه.

في حالة VPN يختار الكائن المحدد اتصال الأساس النشط. تمرير المسار الجذري يترك اختيار الجهاز لـ NetworkManager، الذي يختار الجهاز الافتراضي حاليًا. ذلك قرار سياق توجيه لا حقل كلمة مرور، وهو يغيّر الجهاز الذي يُبنى عليه النفق.

لا تنقل مثالًا عامًا للإضافة والتنشيط وتتوقع أن ينشئ ملفًا شخصيًا لـ VPN. تستثني الأداة الموثقة اتصالات VPN، لذا فإن توفير الملف الشخصي أو استيراده خطوة منفصلة تخضع للمراجعة. وهذا مهم لأن التوفير يحتاج إلى تفويض ومراجعة لا يوفرهما زر اتصال. تعامل مع الاستيراد كإجراء إداري له سطر سجل خاص به ومُعتمِد خاص به.

الفحص الثالث: كيف تُمثَّل الحالة

ينتقل الاتصال النشط بين التنشيط والتشغيل وإلغاء التنشيط وإيقافه، ويوضح حقل السبب لماذا. إن طيّ كل ذلك في قيمة منطقية تُسمى loggedIn يفقد المعلومات التي يحتاجها المستخدم وتلك التي ستطلبها الدعم. أظهر على الأقل ما إذا كان الاتصال معلقًا أو قائمًا أو زائلًا، واحفظ نص السبب لحالة الفشل.

اربط الردود غير المتزامنة بالطلب الذي أنتجها. يجب ألا يطمس اكتمال متأخر من محاولة أقدم إجراءً أحدث للمستخدم، وينبغي إما تجاهل ضغطة اتصال مكررة أو معاملتها كإلغاء وإعادة محاولة بسياسة ظاهرة.

الفحص الرابع: ما يحدث بعد إعادة التشغيل

عندما يعيد المدير التشغيل أو يعيد رابط التحكم الاتصال بالناقل، أعد بناء الحالة المرصودة من المالك. لا تُبقِ عرض جلسة مخزنة كأنها نشطة لأن مسار كائن قديم ما زال في الذاكرة. إشارات تغيّر الحالة موجودة تحديدًا كي تعيد وحدة التحكم المزامنة بدلًا من التخمين.

اختر ما يعنيه إغلاق وحدة التحكم. قد يكون صحيحًا ترك اتصال قائم مملوك للجهاز قائمًا، وقد يكون صحيحًا أيضًا تفكيك جلسة قصيرة الأجل عن قصد. قد يكون صحيحًا ترك اتصال قائم مملوك للجهاز قائمًا؛ وقد يكون صحيحًا أيضًا تفكيك جلسة قصيرة الأجل عن قصد. اكتب عقد الملكية هذا في الواجهة بدلًا من افتراض أن خروج العملية ينفذ إجراء الشبكة. ينبغي ألا يضطر المستخدمون إلى تخمين ما إذا كان إغلاق النافذة سيسقط نفقهم. ضع الجواب في نص الواجهة، لا في تعليق شيفرة فقط.

أبقِ الصلاحية والأسرار عند أصحابها

تعود الأذونات بصيغة نعم أو auth أو لا، وينبغي أن تعكس الواجهة الفرق بين المسموح والمسموح بعد المصادقة والمرفوض. تشغيل وحدة التحكم بصلاحية الجذر لا ينفذ سياسة أذونات؛ بل يزيل السؤال.

تنتمي بيانات الاعتماد إلى وكيل الأسرار المدعوم أو تكامل العميل الخاص بطريقة المصادقة المهيأة. كلمة مرور في الشيفرة المصدرية أو في وسيط أو في سجل هي نتيجة مراجعة، والتفويض الإداري المحلي ليس الحدث نفسه الذي تمثله مصادقة البوابة.

أخيرًا، أبلغ عن حالة الاتصال بشكل منفصل عن المهمة التي يريد المستخدم أداءها. قد يكون النفق نشطًا بينما يظل اسم خاص أو تطبيق غير متاح، وذلك الفشل الثاني يستحق رسالته الخاصة وحالته الخاصة. وحدة تحكم تقول بالضبط أي طبقة فشلت أنفع من واحدة تقول إن VPN متوقف.

مقالات ذات صلة