Forbind en lille controller med en NetworkManager-VPN
Aktivering returnerer et håndtag, ikke en klar session. Hold profilen, anmodningen og den aktive forbindelse adskilt, og genopbyg tilstanden efter en genstart.
Et lille program, der forbinder en eksisterende VPN, har brug for en controller, ikke en ny VPN-implementering. Den understøttede motor bør klare forhandling og tunneltrafik; dit program bør udtrykke brugerens anmodning og forklare resultatet ærligt. På Linux giver NetworkManager D-Bus-grænsefladen den controller en konkret model at følge.
Fire kontroller forhindrer, at controlleren forveksler en gemt profil, en aktiveringsanmodning og en fungerende session.
Kontrol et: hvilken identitet der vælges
Hold profilens UUID som den vedvarende identitet, og opløs den via manageren, når du har brug for objektstien. Et visningsnavn kan deles af to profiler, og en bussti ved kørsel er ikke en fornuftig brugerindstilling at gemme. Skriv valget ned i din egen konfiguration, ikke i en kommentar om, hvilken post der var nummer to på listen.
Bekræft, hvad manageren returnerer, før du kalder det et match. Et UUID, der ikke længere findes, giver en opslagsfejl, og det er en anden kodesti end en profil, der findes og nægter at aktivere.
Kontrol to: hvad aktiveringskaldet returnerer
Det dokumenterede aktiveringskald tager en objektsti til en eksisterende forbindelse, en enhedssti og et specifikt objekt. Det returnerer en sti til en aktiv forbindelse, og det svar er et håndtag, ikke et resultat om parathed. Sæt ikke programmets parathedsflag ud fra returværdien; abonnér i stedet på den aktive forbindelses tilstand og årsag.
For en VPN vælger det specifikke objekt den aktive basisforbindelse. Sendes rodstien, overlades valget af enhed til NetworkManager, som vælger den, der aktuelt er standard. Det er en beslutning om routingkontekst og ikke et adgangskodefelt, og det ændrer, hvilken enhed tunnelen lægges på.
Tag ikke et generisk tilføj-og-aktiver-eksempel og forvent, at det opretter en VPN-profil. Den dokumenterede hjælper udelukker VPN-forbindelser, så klargøring eller import af profilen er et separat, gennemgået trin. Det er vigtigt, fordi klargøring kræver autorisation og gennemgang, som en forbindelsesknap ikke giver. Behandl import som en administrativ handling med sin egen loglinje og sin egen godkender.
Kontrol tre: hvordan tilstand repræsenteres
En aktiv forbindelse bevæger sig gennem aktiverer, aktiv, deaktiverer og deaktiveret, og årsagsfeltet siger hvorfor. At presse alt det sammen til en boolsk værdi kaldet loggedIn mister de oplysninger, brugeren har brug for, og dem supporten vil spørge om. Vis mindst, om forbindelsen er afventende, etableret eller væk, og behold årsagsstrengen til fejltilfældet.
Knyt asynkrone svar til den anmodning, der frembragte dem. En sen fuldførelse fra et ældre forsøg må ikke overskrive en nyere brugerhandling, og et dobbelt tryk på Connect bør enten ignoreres eller behandles som annuller-og-prøv-igen med en synlig politik.
Kontrol fire: hvad der sker efter en genstart
Når manageren genstarter, eller din controller genopretter forbindelsen til bussen, skal du genopbygge den observerede tilstand fra ejeren. Bliv ikke ved med at vise en cachet session som aktiv, fordi en gammel objektsti stadig er i hukommelsen. Tilstandssignalernes formål er netop at lade en controller resynkronisere i stedet for at gætte.
Vælg, hvad det betyder at lukke controlleren. Det kan være rigtigt at lade en eksisterende maskinejet forbindelse være oppe, og det kan også være rigtigt at rive en bevidst kortlivet session ned. Det kan være rigtigt at lade en eksisterende maskinejet forbindelse være oppe; det kan også være rigtigt at rive en bevidst kortlivet session ned. Skriv den ejerskabskontrakt ind i grænsefladen i stedet for at antage, at procesafslutning udfører netværkshandlingen. Brugere bør ikke skulle gætte, om lukning af vinduet dropper deres tunnel. Sæt svaret i grænsefladeteksten, ikke kun i en kodekommentar.
Behold myndighed og hemmeligheder hos deres ejere
Tilladelser kommer tilbage som ja, auth eller nej, og grænsefladen bør afspejle forskellen mellem tilladt, tilladt efter godkendelse og afvist. At køre controlleren som root implementerer ikke en tilladelsespolitik; det fjerner spørgsmålet.
Legitimationsoplysninger hører til den understøttede hemmelighedsagent eller klientintegration til den konfigurerede godkendelsesmetode. En adgangskode i kildekode, i et argument eller i en log er et fund, og lokal administrativ autorisation er ikke den samme begivenhed som godkendelse ved gatewayen.
Rapportér endelig forbindelsestilstanden adskilt fra den opgave, brugeren vil udføre. En tunnel kan være aktiv, mens et privat navn eller et program forbliver utilgængeligt, og den anden fejl fortjener sin egen besked og sin egen status. En controller, der præcist siger, hvilket lag der fejlede, er mere nyttig end en, der siger, at VPN'en er nede.