Ein kleines Programm, das ein vorhandenes VPN verbindet, braucht einen Controller und keine neue VPN-Implementierung. Die unterstützte Engine sollte Aushandlung und Tunnelverkehr übernehmen; Ihr Programm sollte die Anfrage des Nutzers ausdrücken und das Ergebnis ehrlich erklären. Unter Linux gibt die NetworkManager-D-Bus-Schnittstelle diesem Controller ein konkretes Modell an die Hand.

Vier Prüfungen hindern den Controller daran, ein gespeichertes Profil, eine Aktivierungsanfrage und eine laufende Sitzung zu verwechseln.

Prüfung eins: welche Identität ausgewählt wird

Behalten Sie die UUID des Profils als dauerhafte Identität und lösen Sie sie über den Manager auf, wenn Sie den Objektpfad brauchen. Ein Anzeigename kann von zwei Profilen geteilt werden, und ein Buspfad zur Laufzeit ist keine sinnvolle Nutzereinstellung zum Speichern. Schreiben Sie die Auswahl in Ihre eigene Konfiguration, nicht in einen Kommentar darüber, welcher Eintrag der zweite in der Liste war.

Prüfen Sie, was der Manager zurückgibt, bevor Sie es einen Treffer nennen. Eine UUID, die nicht mehr existiert, erzeugt einen Suchfehler, und das ist ein anderer Codepfad als ein Profil, das existiert und die Aktivierung verweigert.

Prüfung zwei: was der Aktivierungsaufruf zurückgibt

Der dokumentierte Aktivierungsaufruf nimmt einen Objektpfad einer bestehenden Verbindung, einen Gerätepfad und ein bestimmtes Objekt. Er gibt einen Pfad einer aktiven Verbindung zurück, und diese Antwort ist ein Handle und kein Ergebnis über Bereitschaft. Setzen Sie das Bereitschaftsflag Ihrer Anwendung nicht aus dem Rückgabewert; abonnieren Sie stattdessen Zustand und Grund der aktiven Verbindung.

Bei einem VPN wählt das bestimmte Objekt die aktive Basisverbindung. Wer den Wurzelpfad übergibt, überlässt die Gerätewahl dem NetworkManager, der das gerade voreingestellte Gerät nimmt. Das ist eine Entscheidung über den Routingkontext und kein Passwortfeld, und sie ändert, auf welchem Gerät der Tunnel aufsetzt.

Übernehmen Sie kein allgemeines Beispiel zum Hinzufügen und Aktivieren und erwarten Sie, dass es ein VPN-Profil erzeugt. Der dokumentierte Helfer schließt VPN-Verbindungen aus, daher ist das Bereitstellen oder Importieren des Profils ein eigener, geprüfter Schritt. Das ist wichtig, weil die Bereitstellung eine Autorisierung und Prüfung braucht, die eine Verbindungsschaltfläche nicht bietet. Behandeln Sie den Import als administrative Aktion mit eigener Protokollzeile und eigenem Genehmiger.

Prüfung drei: wie der Zustand dargestellt wird

Eine aktive Verbindung durchläuft Aktivierung, aktiv, Deaktivierung und deaktiviert, und das Grundfeld sagt warum. All das in einen booleschen Wert namens loggedIn zu quetschen verliert die Informationen, die der Nutzer braucht und die der Support erfragen wird. Zeigen Sie mindestens an, ob die Verbindung aussteht, aufgebaut oder verschwunden ist, und behalten Sie die Grundzeichenfolge für den Fehlerfall.

Ordnen Sie asynchrone Antworten der Anfrage zu, die sie erzeugt hat. Ein spätes Abschließen eines älteren Versuchs darf eine neuere Nutzeraktion nicht überschreiben, und ein doppelter Druck auf Connect sollte entweder ignoriert oder als Abbrechen und erneuter Versuch mit sichtbarer Regel behandelt werden.

Prüfung vier: was nach einem Neustart geschieht

Wenn der Manager neu startet oder Ihr Controller sich wieder mit dem Bus verbindet, bauen Sie den beobachteten Zustand vom Eigentümer neu auf. Zeigen Sie eine zwischengespeicherte Sitzung nicht weiter als aktiv an, nur weil ein alter Objektpfad noch im Speicher liegt. Die Zustandsänderungssignale existieren gerade damit ein Controller neu synchronisieren kann, statt zu raten.

Wählen Sie, was das Schließen des Controllers bedeutet. Eine bestehende maschineneigene Verbindung bestehen zu lassen kann richtig sein, und eine bewusst kurzlebige Sitzung abzubauen kann ebenfalls richtig sein. Eine bestehende maschineneigene Verbindung bestehen zu lassen kann richtig sein; eine bewusst kurzlebige Sitzung abzubauen kann ebenfalls richtig sein. Schreiben Sie diesen Eigentumsvertrag in die Schnittstelle, statt anzunehmen, dass der Prozessausstieg die Netzwerkaktion ausführt. Nutzer sollten nicht raten müssen, ob das Schließen des Fensters ihren Tunnel trennt. Setzen Sie die Antwort in den Schnittstellentext, nicht nur in einen Codekommentar.

Belassen Sie Befugnisse und Geheimnisse bei ihren Eigentümern

Berechtigungen kommen als ja, auth oder nein zurück, und die Schnittstelle sollte den Unterschied zwischen erlaubt, nach Authentifizierung erlaubt und verweigert widerspiegeln. Den Controller als root laufen zu lassen implementiert keine Berechtigungsrichtlinie; es beseitigt die Frage.

Anmeldedaten gehören zum unterstützten Geheimnisagenten oder zur Client-Integration für die konfigurierte Authentifizierungsmethode. Ein Passwort im Quellcode, in einem Argument oder in einem Protokoll ist ein Befund, und eine lokale administrative Autorisierung ist nicht dasselbe Ereignis wie die Authentifizierung am Gateway.

Melden Sie schließlich den Verbindungszustand getrennt von der Aufgabe, die der Nutzer ausführen will. Ein Tunnel kann aktiv sein, während ein privater Name oder eine Anwendung nicht erreichbar bleibt, und dieser zweite Fehler verdient seine eigene Meldung und seinen eigenen Status. Ein Controller, der genau sagt, welche Schicht fehlgeschlagen ist, ist nützlicher als einer, der sagt, das VPN sei ausgefallen.

Ähnliche Artikel