การเชื่อมต่อคอนโทรลเลอร์ขนาดเล็กกับ VPN ของ NetworkManager
การเปิดใช้งานคืนค่าดีล ไม่ใช่เซสชันที่พร้อมใช้งาน แยกโปรไฟล์ คำขอ และการเชื่อมต่อที่ใช้งานออกจากกัน แล้วสร้างสถานะใหม่หลังรีสตาร์ต
โปรแกรมเล็ก ๆ ที่เชื่อมต่อ VPN ที่มีอยู่แล้วต้องมีคอนโทรลเลอร์ ไม่ใช่การใช้งาน VPN ชุดใหม่ เอนจินที่รองรับควรจัดการการเจรจาและทราฟฟิกของอุโมงค์ โปรแกรมของคุณควรแสดงคำขอของผู้ใช้และอธิบายผลลัพธ์อย่างตรงไปตรงมา บน Linux อินเทอร์เฟซ NetworkManager D-Bus มอบแบบจำลองที่เป็นรูปธรรมให้คอนโทรลเลอร์นั้นปฏิบัติตาม
การตรวจสอบสี่ข้อป้องกันไม่ให้คอนโทรลเลอร์สับสนระหว่างโปรไฟล์ที่บันทึกไว้ คำขอเปิดใช้งาน และเซสชันที่ทำงานอยู่
การตรวจสอบข้อหนึ่ง: เลือกใช้ตัวตนใด
เก็บ UUID ของโปรไฟล์ไว้เป็นตัวตนถาวร และแก้ไขผ่านตัวจัดการเมื่อคุณต้องการเส้นทางของอ็อบเจกต์ ชื่อที่แสดงอาจถูกใช้ร่วมกันโดยสองโปรไฟล์ และเส้นทางบัสขณะรันไทม์ไม่ใช่ค่ากำหนดของผู้ใช้ที่สมเหตุสมผลจะเก็บไว้ จดบันทึกการเลือกไว้ในการกำหนดค่าของคุณเอง ไม่ใช่ในคอมเมนต์เกี่ยวกับว่ารายการใดเป็นรายการที่สองในลิสต์
ตรวจสอบสิ่งที่ตัวจัดการคืนค่าก่อนจะเรียกว่าตรงกัน UUID ที่ไม่มีอยู่แล้วทำให้การค้นหาล้มเหลว ซึ่งเป็นเส้นทางโค้ดที่แตกต่างจากโปรไฟล์ที่มีอยู่แต่ปฏิเสธการเปิดใช้งาน
การตรวจสอบข้อสอง: การเรียกเปิดใช้งานคืนค่าอะไร
การเรียกเปิดใช้งานตามเอกสารรับเส้นทางอ็อบเจกต์ของการเชื่อมต่อที่มีอยู่ เส้นทางอุปกรณ์ และอ็อบเจกต์เฉพาะ มันคืนเส้นทางของการเชื่อมต่อที่ใช้งานอยู่ และคำตอบนั้นคือดีล ไม่ใช่ผลลัพธ์เรื่องความพร้อม อย่าตั้งแฟล็กความพร้อมของแอปพลิเคชันจากค่าที่คืนมา ให้สมัครรับสถานะและเหตุผลของการเชื่อมต่อที่ใช้งานแทน
สำหรับ VPN อ็อบเจกต์เฉพาะจะเป็นตัวเลือกการเชื่อมต่อพื้นฐานที่ใช้งานอยู่ การส่งเส้นทางรากจะมอบการเลือกอุปกรณ์ให้ NetworkManager ซึ่งจะเลือกอุปกรณ์ที่เป็นค่าเริ่มต้นในขณะนั้น นั่นคือการตัดสินใจเรื่องบริบทของการกำหนดเส้นทาง ไม่ใช่ช่องรหัสผ่าน และมันเปลี่ยนว่าอุโมงค์ถูกวางบนอุปกรณ์ใด
อย่ายกตัวอย่างการเพิ่มและเปิดใช้งานแบบทั่วไปมาแล้วคาดหวังว่ามันจะสร้างโปรไฟล์ VPN ตัวช่วยที่เอกสารระบุไว้ไม่รวมการเชื่อมต่อ VPN ดังนั้นการจัดเตรียมหรือการนำเข้าโปรไฟล์จึงเป็นขั้นตอนแยกที่ผ่านการทบทวน เรื่องนี้สำคัญเพราะการจัดเตรียมต้องมีการอนุญาตและการทบทวนซึ่งปุ่มเชื่อมต่อไม่ได้ให้มา ให้ถือว่าการนำเข้าเป็นการดำเนินการเชิงบริหารที่มีบรรทัดล็อกของตัวเองและผู้อนุมัติของตัวเอง
การตรวจสอบข้อสาม: สถานะถูกนำเสนออย่างไร
การเชื่อมต่อที่ใช้งานอยู่เคลื่อนผ่านการเปิดใช้งาน ใช้งานอยู่ การปิดใช้งาน และปิดใช้งานแล้ว และช่องเหตุผลบอกว่าเพราะอะไร การบีบทั้งหมดนั้นเป็นค่าบูลีนชื่อ loggedIn ทำให้สูญเสียข้อมูลที่ผู้ใช้ต้องการและข้อมูลที่ฝ่ายสนับสนุนจะถามถึง แสดงอย่างน้อยว่าการเชื่อมต่อกำลังรอ สร้างเสร็จ หรือหายไป และเก็บสตริงเหตุผลไว้สำหรับกรณีล้มเหลว
เชื่อมโยงการตอบกลับแบบอะซิงโครนัสกับคำขอที่สร้างมันขึ้นมา การเสร็จสิ้นล่าช้าจากความพยายามเก่าต้องไม่เขียนทับการกระทำใหม่ของผู้ใช้ และการกด Connect ซ้ำควรถูกเพิกเฉยหรือถือเป็นการยกเลิกและลองใหม่ด้วยนโยบายที่มองเห็นได้
การตรวจสอบข้อสี่: เกิดอะไรขึ้นหลังรีสตาร์ต
เมื่อตัวจัดการรีสตาร์ตหรือคอนโทรลเลอร์ของคุณเชื่อมต่อกับบัสอีกครั้ง ให้สร้างสถานะที่สังเกตได้ใหม่จากเจ้าของ อย่าแสดงเซสชันที่แคชไว้ว่าใช้งานอยู่เพียงเพราะเส้นทางอ็อบเจกต์เก่ายังอยู่ในหน่วยความจำ สัญญาณการเปลี่ยนแปลงสถานะมีอยู่ก็เพื่อให้คอนโทรลเลอร์ซิงก์ใหม่ได้แทนที่จะเดา
เลือกว่าการปิดคอนโทรลเลอร์หมายถึงอะไร การปล่อยให้การเชื่อมต่อที่มีอยู่ซึ่งเป็นของเครื่องยังเปิดอยู่อาจถูกต้อง และการรื้อเซสชันที่ตั้งใจให้มีอายุสั้นก็อาจถูกต้องเช่นกัน การปล่อยให้การเชื่อมต่อที่มีอยู่ซึ่งเป็นของเครื่องยังเปิดอยู่อาจถูกต้อง และการรื้อเซสชันที่ตั้งใจให้มีอายุสั้นก็อาจถูกต้องเช่นกัน เขียนสัญญาความเป็นเจ้าของนั้นลงในอินเทอร์เฟซแทนที่จะสมมติว่าการจบโปรเซสจะทำการดำเนินการเครือข่าย ผู้ใช้ไม่ควรต้องเดาว่าการปิดหน้าต่างจะทำให้อุโมงค์ของพวกเขาหลุดหรือไม่ ใส่คำตอบไว้ในข้อความอินเทอร์เฟซ ไม่ใช่แค่ในคอมเมนต์โค้ด
เก็บอำนาจและความลับไว้กับเจ้าของ
สิทธิ์ถูกคืนมาเป็นใช่ auth หรือไม่ และอินเทอร์เฟซควรสะท้อนความแตกต่างระหว่างได้รับอนุญาต ได้รับอนุญาตหลังการยืนยันตัวตน และถูกปฏิเสธ การรันคอนโทรลเลอร์เป็น root ไม่ได้ใช้แนวนโยบายสิทธิ์ มันเพียงขจัดคำถาม
ข้อมูลรับรองเป็นของตัวแทนความลับที่รองรับหรือการผสานรวมไคลเอนต์สำหรับวิธีการยืนยันตัวตนที่กำหนดไว้ รหัสผ่านในซอร์สโค้ด ในอาร์กิวเมนต์ หรือในล็อกถือเป็นข้อค้นพบ และการอนุญาตเชิงบริหารในเครื่องไม่ใช่เหตุการณ์เดียวกับการยืนยันตัวตนที่เกตเวย์
สุดท้าย รายงานสถานะการเชื่อมต่อแยกจากงานที่ผู้ใช้ต้องการทำ อุโมงค์อาจใช้งานอยู่ขณะที่ชื่อส่วนตัวหรือแอปพลิเคชันยังไม่พร้อมใช้งาน และความล้มเหลวที่สองนั้นสมควรมีข้อความและสถานะของตัวเอง คอนโทรลเลอร์ที่บอกว่าชั้นใดล้มเหลวอย่างแม่นยำมีประโยชน์กว่าตัวที่บอกว่า VPN ล่ม