Kết nối một bộ điều khiển nhỏ với VPN của NetworkManager
Việc kích hoạt trả về một tay nắm, không phải một phiên đã sẵn sàng. Hãy tách riêng hồ sơ, yêu cầu và kết nối đang hoạt động, rồi dựng lại trạng thái sau khi khởi động lại.
Một chương trình nhỏ kết nối VPN sẵn có cần một bộ điều khiển, không phải một cách triển khai VPN mới. Công cụ được hỗ trợ nên xử lý việc thương lượng và lưu lượng đường hầm; chương trình của bạn nên diễn đạt yêu cầu của người dùng và giải thích kết quả một cách trung thực. Trên Linux, giao diện NetworkManager D-Bus cho bộ điều khiển đó một mô hình cụ thể để noi theo.
Bốn bước kiểm tra giữ cho bộ điều khiển không nhầm lẫn giữa hồ sơ đã lưu, yêu cầu kích hoạt và phiên đang chạy.
Kiểm tra một: danh tính nào đang được chọn
Giữ UUID của hồ sơ làm danh tính lâu dài, và phân giải nó qua trình quản lý khi bạn cần đường dẫn đối tượng. Tên hiển thị có thể được hai hồ sơ dùng chung, và đường dẫn bus lúc chạy không phải là một tùy chọn người dùng hợp lý để lưu. Hãy ghi lựa chọn vào cấu hình của riêng bạn, không phải trong một chú thích về việc mục nào là mục thứ hai trong danh sách.
Xác minh những gì trình quản lý trả về trước khi gọi đó là sự khớp. Một UUID không còn tồn tại tạo ra lỗi tra cứu, và đó là một đường mã khác với hồ sơ tồn tại nhưng từ chối kích hoạt.
Kiểm tra hai: lệnh gọi kích hoạt trả về gì
Lệnh gọi kích hoạt được ghi chép nhận đường dẫn đối tượng của một kết nối hiện có, một đường dẫn thiết bị và một đối tượng cụ thể. Nó trả về đường dẫn của một kết nối đang hoạt động, và câu trả lời đó là một tay nắm, không phải kết quả về mức độ sẵn sàng. Đừng đặt cờ sẵn sàng của ứng dụng từ giá trị trả về; thay vào đó hãy đăng ký theo dõi trạng thái và lý do của kết nối đang hoạt động.
Với VPN, đối tượng cụ thể chọn kết nối nền đang hoạt động. Truyền đường dẫn gốc sẽ để việc chọn thiết bị cho NetworkManager, công cụ này chọn thiết bị đang là mặc định tại thời điểm đó. Đó là quyết định về ngữ cảnh định tuyến chứ không phải trường mật khẩu, và nó thay đổi thiết bị mà đường hầm được đặt lên.
Đừng lấy một ví dụ chung về thêm và kích hoạt rồi mong nó tạo ra hồ sơ VPN. Trình trợ giúp được ghi chép loại trừ các kết nối VPN, nên việc chuẩn bị hoặc nhập hồ sơ là một bước riêng đã được xem xét. Điều đó quan trọng vì việc chuẩn bị cần sự cho phép và xem xét mà một nút kết nối không cung cấp. Hãy coi việc nhập là một hành động quản trị có dòng nhật ký riêng và người phê duyệt riêng.
Kiểm tra ba: trạng thái được biểu diễn thế nào
Một kết nối đang hoạt động đi qua các trạng thái kích hoạt, hoạt động, hủy kích hoạt và đã hủy, và trường lý do cho biết vì sao. Việc nén tất cả những điều đó vào một giá trị Boolean tên là loggedIn làm mất thông tin mà người dùng cần và thông tin mà bộ phận hỗ trợ sẽ hỏi. Hãy hiển thị ít nhất kết nối đang chờ, đã được thiết lập hay đã biến mất, và giữ chuỗi lý do cho trường hợp thất bại.
Gắn các phản hồi bất đồng bộ với yêu cầu đã tạo ra chúng. Một hoàn tất muộn từ lần thử cũ không được ghi đè lên một hành động mới hơn của người dùng, và việc nhấn Connect hai lần nên bị bỏ qua hoặc được xử lý như hủy rồi thử lại với một chính sách hiển thị rõ.
Kiểm tra bốn: điều gì xảy ra sau khi khởi động lại
Khi trình quản lý khởi động lại hoặc bộ điều khiển của bạn kết nối lại với bus, hãy dựng lại trạng thái quan sát được từ chủ sở hữu. Đừng tiếp tục hiển thị một phiên đã lưu trong bộ nhớ đệm là đang hoạt động chỉ vì một đường dẫn đối tượng cũ vẫn còn trong bộ nhớ. Các tín hiệu thay đổi trạng thái tồn tại chính là để bộ điều khiển có thể đồng bộ lại thay vì đoán mò.
Hãy chọn ý nghĩa của việc đóng bộ điều khiển. Để một kết nối hiện có thuộc sở hữu của máy vẫn mở có thể là đúng, và việc tháo dỡ một phiên cố ý ngắn hạn cũng có thể là đúng. Để một kết nối hiện có thuộc sở hữu của máy vẫn mở có thể là đúng; việc tháo dỡ một phiên cố ý ngắn hạn cũng có thể là đúng. Hãy ghi hợp đồng sở hữu đó vào giao diện thay vì giả định rằng việc thoát tiến trình thực hiện hành động mạng. Người dùng không nên phải đoán liệu đóng cửa sổ có làm rớt đường hầm của họ hay không. Hãy đặt câu trả lời trong phần văn bản của giao diện, không chỉ trong một chú thích mã.
Giữ quyền hạn và bí mật ở chủ sở hữu của chúng
Các quyền trả về dưới dạng có, auth hoặc không, và giao diện nên phản ánh sự khác biệt giữa được phép, được phép sau khi xác thực và bị từ chối. Chạy bộ điều khiển với quyền root không triển khai một chính sách quyền; nó loại bỏ câu hỏi.
Thông tin xác thực thuộc về tác nhân bí mật được hỗ trợ hoặc tích hợp máy khách cho phương thức xác thực đã cấu hình. Một mật khẩu trong mã nguồn, trong một đối số hoặc trong nhật ký là một phát hiện, và việc cho phép hành chính cục bộ không phải là cùng một sự kiện với xác thực tại cổng.
Cuối cùng, hãy báo cáo trạng thái kết nối tách biệt với công việc mà người dùng muốn thực hiện. Đường hầm có thể đang hoạt động trong khi một tên riêng hoặc một ứng dụng vẫn không khả dụng, và thất bại thứ hai đó xứng đáng có thông điệp riêng và trạng thái riêng. Một bộ điều khiển nói chính xác tầng nào đã hỏng hữu ích hơn một bộ điều khiển nói rằng VPN đã chết.