Koble en liten kontroller til en NetworkManager-VPN
Aktivering returnerer et håndtak, ikke en klar sesjon. Hold profilen, forespørselen og den aktive tilkoblingen atskilt, og bygg tilstanden på nytt etter en omstart.
Et lite program som kobler til en eksisterende VPN trenger en kontroller, ikke en ny VPN-implementasjon. Den støttede motoren bør håndtere forhandling og tunneltrafikk; programmet ditt bør uttrykke brukerens forespørsel og forklare resultatet ærlig. På Linux gir NetworkManager D-Bus-grensesnittet den kontrolleren en konkret modell å følge.
Fire kontroller hindrer kontrolleren i å forveksle en lagret profil, en aktiveringsforespørsel og en fungerende sesjon.
Kontroll én: hvilken identitet som velges
Hold profilens UUID som den vedvarende identiteten, og løs den opp gjennom behandleren når du trenger objektbanen. Et visningsnavn kan deles av to profiler, og en bussti ved kjøring er ikke en fornuftig brukerinnstilling å lagre. Skriv valget ned i din egen konfigurasjon, ikke i en kommentar om hvilken oppføring som var nummer to i listen.
Bekreft hva behandleren returnerer før du kaller det et treff. En UUID som ikke lenger finnes gir en oppslagsfeil, og det er en annen kodesti enn en profil som finnes og nekter å aktivere.
Kontroll to: hva aktiveringskallet returnerer
Det dokumenterte aktiveringskallet tar en objektbane for en eksisterende tilkobling, en enhetsbane og et spesifikt objekt. Det returnerer en bane for en aktiv tilkobling, og det svaret er et håndtak, ikke et resultat om beredskap. Ikke sett programmets beredskapsflagg fra returverdien; abonner i stedet på den aktive tilkoblingens tilstand og årsak.
For en VPN velger det spesifikke objektet den aktive basistilkoblingen. Sender du rotbanen, overlates enhetsvalget til NetworkManager, som velger den som er standard akkurat nå. Det er en beslutning om rutingkontekst og ikke et passordfelt, og det endrer hvilken enhet tunnelen legges på.
Ikke kopier et generisk legg-til-og-aktiver-eksempel og forvent at det lager en VPN-profil. Den dokumenterte hjelperen utelukker VPN-tilkoblinger, så klargjøring eller import av profilen er et eget, gjennomgått trinn. Det er viktig fordi klargjøring krever autorisasjon og gjennomgang som en tilkoblingsknapp ikke gir. Behandle import som en administrativ handling med sin egen logglinje og sin egen godkjenner.
Kontroll tre: hvordan tilstanden fremstilles
En aktiv tilkobling går gjennom aktivering, aktiv, deaktivering og deaktivert, og årsaksfeltet sier hvorfor. Å presse alt dette inn i en boolsk verdi kalt loggedIn mister informasjonen brukeren trenger og den støtten vil spørre om. Vis minst om tilkoblingen venter, er etablert eller er borte, og behold årsaksstrengen for feiltilfellet.
Knytt asynkrone svar til forespørselen som produserte dem. En sen fullføring fra et eldre forsøk må ikke overskrive en nyere brukerhandling, og et dobbelt trykk på Connect bør enten ignoreres eller behandles som avbryt-og-prøv-igjen med en synlig policy.
Kontroll fire: hva som skjer etter en omstart
Når behandleren starter på nytt eller kontrolleren din kobles til bussen igjen, bygg den observerte tilstanden på nytt fra eieren. Ikke fortsett å vise en bufret sesjon som aktiv fordi en gammel objektbane fortsatt ligger i minnet. Tilstandsendringssignalene finnes nettopp for at en kontroller skal kunne resynkronisere i stedet for å gjette.
Velg hva det betyr å lukke kontrolleren. Å la en eksisterende maskineid tilkobling stå oppe kan være riktig, og å rive ned en bevisst kortvarig sesjon kan også være riktig. Å la en eksisterende maskineid tilkobling stå oppe kan være riktig; å rive ned en bevisst kortvarig sesjon kan også være riktig. Skriv den eierkontrakten inn i grensesnittet i stedet for å anta at prosessavslutning utfører nettverkshandlingen. Brukere bør ikke måtte gjette om lukking av vinduet vil droppe tunnelen deres. Sett svaret i grensesnittteksten, ikke bare i en kodekommentar.
Behold myndighet og hemmeligheter hos eierne
Tillatelser kommer tilbake som ja, auth eller nei, og grensesnittet bør gjenspeile forskjellen mellom tillatt, tillatt etter autentisering og avslått. Å kjøre kontrolleren som root implementerer ikke en tillatelsespolicy; det fjerner spørsmålet.
Legitimasjon tilhører den støttede hemmelighetsagenten eller klientintegrasjonen for den konfigurerte autentiseringsmetoden. Et passord i kildekode, i et argument eller i en logg er et funn, og lokal administrativ autorisasjon er ikke samme hendelse som autentisering ved gatewayen.
Til slutt, rapporter tilkoblingstilstanden atskilt fra oppgaven brukeren vil utføre. En tunnel kan være aktiv mens et privat navn eller et program forblir utilgjengelig, og den andre feilen fortjener sin egen melding og sin egen status. En kontroller som sier nøyaktig hvilket lag som feilet er mer nyttig enn en som sier at VPN-en er nede.