Koppel 'n klein beheerder aan 'n NetworkManager-VPN
Aktivering gee 'n handvatsel terug, nie 'n gereed sessie nie. Hou die profiel, die versoek en die aktiewe verbinding apart, en bou die toestand ná 'n herbegin weer op.
'n Klein program wat 'n bestaande VPN koppel, het 'n beheerder nodig, nie 'n nuwe VPN-implementering nie. Die ondersteunde enjin moet onderhandeling en tonnelverkeer hanteer; jou program moet die gebruiker se versoek uitdruk en die resultaat eerlik verduidelik. Op Linux gee die NetworkManager-D-Bus-koppelvlak daardie beheerder 'n konkrete model om te volg.
Vier kontroles verhoed dat die beheerder 'n gestoorde profiel, 'n aktiveringsversoek en 'n werkende sessie verwar.
Kontrole een: watter identiteit word gekies
Hou die profiel-UUID as die blywende identiteit, en los dit deur die bestuurder op wanneer jy die objekpad nodig het. 'n Vertoonnaam kan deur twee profiele gedeel word, en 'n tydren-buspad is nie 'n sinvolle gebruikersvoorkeur om te stoor nie. Skryf die keuse in jou eie konfigurasie neer, nie in 'n kommentaar oor watter inskrywing tweede in die lys was nie.
Verifieer wat die bestuurder teruggee voordat jy dit 'n ooreenstemming noem. 'n UUID wat nie meer bestaan nie, lewer 'n opsoekfout op, wat 'n ander kodepad is as 'n profiel wat bestaan en weier om te aktiveer.
Kontrole twee: wat die aktiveringsoproep teruggee
Die gedokumenteerde aktiveringsoproep neem 'n bestaande verbinding-objekpad, 'n toestelpad en 'n spesifieke objek. Dit gee 'n aktiewe-verbinding-pad terug, en daardie antwoord is 'n handvatsel eerder as 'n gereedheidsresultaat. Moenie jou toepassing se gereed-vlag uit die teruggawewaarde stel nie; teken eerder op die aktiewe verbinding se toestand en rede in.
Vir 'n VPN kies die spesifieke objek die aktiewe basisverbinding. Om die wortelpad te stuur, laat die keuse van toestel aan NetworkManager oor, wat die een kies wat tans verstek is. Dit is 'n besluit oor die roeteringskonteks eerder as 'n wagwoordveld, en dit verander op watter toestel die tonnel gelê word.
Moenie 'n generiese voorbeeld van byvoeg-en-aktiveer oorneem en verwag dat dit 'n VPN-profiel skep nie. Die gedokumenteerde hulpmiddel sluit VPN-verbindings uit, so die voorsiening of invoer van die profiel is 'n aparte, nagegane stap. Dit maak saak omdat voorsiening magtiging en nasien vereis wat 'n koppelknoppie nie het nie. Behandel invoer as 'n administratiewe aksie met sy eie logreël en sy eie goedkeurder.
Kontrole drie: hoe toestand voorgestel word
'n Aktiewe verbinding beweeg deur aktiveer, geaktiveer, deaktiveer en gedeaktiveer, en die rede-veld sê waarom. Om dit alles in 'n Booleaanse waarde met die naam loggedIn saam te pers, verloor die inligting wat die gebruiker nodig het en wat ondersteuning sal vra. Wys ten minste of die verbinding hangende, gevestig of weg is, en hou die rede-string vir die foutgeval.
Koppel asinchrone antwoorde aan die versoek wat hulle veroorsaak het. 'n Late voltooiing van 'n ouer poging mag nie 'n nuwer gebruikersaksie oorskryf nie, en 'n dubbele druk op Connect moet óf geïgnoreer word óf as 'n kanselleer-en-probeer-weer met 'n sigbare beleid behandel word.
Kontrole vier: wat ná 'n herbegin gebeur
Wanneer die bestuurder herbegin of jou beheerder weer aan die bus koppel, bou die waargenome toestand by die eienaar op nuut op. Moenie aanhou om 'n gekasde sessie as aktief te wys omdat 'n ou objekpad nog in die geheue is nie. Die toestandverandering-seine bestaan juis sodat 'n beheerder kan hersinkroniseer eerder as raai.
Kies wat dit beteken om die beheerder te sluit. Om 'n bestaande masjien-beheerde verbinding te laat staan, kan korrek wees, en om 'n doelbewus kortstondige sessie af te breek, kan ook korrek wees. Om 'n bestaande masjien-beheerde verbinding te laat staan, kan korrek wees; om 'n doelbewus kortstondige sessie af te breek, kan ook korrek wees. Skryf daardie eienaarskapkontrak in die koppelvlak in eerder as om te aanvaar dat prosesbeëindiging die netwerkaksie uitvoer. Gebruikers moenie hoef te raai of die sluit van die venster hulle tonnel sal laat val nie. Sit die antwoord in die koppelvlakteks, nie net in 'n kodekommentaar nie.
Hou gesag en geheime by hulle eienaars
Toestemmings kom terug as ja, auth of nee, en die koppelvlak moet die verskil tussen toegelaat, toegelaat ná verifikasie en geweier weerspieël. Om die beheerder as root te laat loop, implementeer nie 'n toestemmingsbeleid nie; dit verwyder die vraag.
Geloofsbriewe hoort by die ondersteunde geheime-agent of kliëntintegrasie vir die gekonfigureerde verifikasiemetode. 'n Wagwoord in bronkode, in 'n argument of in 'n log is 'n bevinding, en plaaslike administratiewe magtiging is nie dieselfde gebeurtenis as gateway-verifikasie nie.
Rapporteer laastens verbindingstoestand apart van die taak wat die gebruiker wil uitvoer. 'n Tonnel kan aktief wees terwyl 'n private naam of 'n toepassing onbeskikbaar bly, en daardie tweede fout verdien sy eie boodskap en sy eie status. 'n Beheerder wat presies sê watter laag gefaal het, is nuttiger as een wat sê die VPN is af.