Connectar un controlador petit a una VPN del NetworkManager
L'activació retorna un identificador, no una sessió a punt. Mantingueu el perfil, la sol·licitud i la connexió activa per separat, i reconstruïu l'estat després d'un reinici.
Un programa petit que connecta una VPN existent necessita un controlador, no una implementació nova de VPN. El motor compatible hauria de gestionar la negociació i el trànsit del túnel; el vostre programa hauria d'expressar la sol·licitud de l'usuari i explicar el resultat amb honestedat. A Linux, la interfície D-Bus del NetworkManager dona a aquest controlador un model concret a seguir.
Quatre comprovacions eviten que el controlador confongui un perfil desat, una sol·licitud d'activació i una sessió en funcionament.
Primera comprovació: quina identitat es selecciona
Manteniu l'UUID del perfil com a identitat persistent i resoleu-lo a través del gestor quan necessiteu el camí de l'objecte. Un nom de visualització poden compartir-lo dos perfils, i un camí de bus d'execució no és una preferència d'usuari raonable per desar. Escriviu la selecció a la vostra pròpia configuració, no en un comentari sobre quina entrada era la segona de la llista.
Verifiqueu què retorna el gestor abans de considerar-ho una coincidència. Un UUID que ja no existeix produeix un error de cerca, que és un camí de codi diferent del d'un perfil que existeix i es nega a activar-se.
Segona comprovació: què retorna la crida d'activació
La crida d'activació documentada pren el camí de l'objecte d'una connexió existent, el camí d'un dispositiu i un objecte específic. Retorna el camí d'una connexió activa, i aquesta resposta és un identificador, no un resultat de disponibilitat. No establiu l'indicador de disposició de la vostra aplicació a partir del valor retornat; subscriviu-vos en canvi a l'estat i el motiu de la connexió activa.
Per a una VPN, l'objecte específic selecciona la connexió base activa. Passar el camí arrel deixa l'elecció del dispositiu al NetworkManager, que tria el que és predeterminat en aquell moment. Això és una decisió de context d'encaminament i no un camp de contrasenya, i canvia sobre quin dispositiu es disposa el túnel.
No agafeu un exemple genèric d'afegir i activar i espereu que creï un perfil de VPN. L'auxiliar documentat exclou les connexions VPN, així que aprovisionar o importar el perfil és un pas separat i revisat. Això importa perquè l'aprovisionament necessita autorització i revisió que un botó de connexió no ofereix. Tracteu la importació com una acció administrativa amb la seva pròpia línia de registre i el seu propi aprovador.
Tercera comprovació: com es representa l'estat
Una connexió activa passa per activació, activa, desactivació i desactivada, i el camp de motiu diu per què. Reduir tot això a un booleà anomenat loggedIn perd la informació que l'usuari necessita i la que el suport demanarà. Mostreu com a mínim si la connexió està pendent, establerta o desapareguda, i conserveu la cadena de motiu per al cas de fallada.
Associeu les respostes asíncrones amb la sol·licitud que les ha produïdes. Una finalització tardana d'un intent anterior no ha de sobreescriure una acció més nova de l'usuari, i una pressió duplicada de Connect s'ha d'ignorar o bé tractar com una cancel·lació i reintent amb una política visible.
Quarta comprovació: què passa després d'un reinici
Quan el gestor es reinicia o el vostre controlador es reconnecta al bus, reconstruïu l'estat observat a partir del propietari. No continueu mostrant una sessió en memòria cau com a activa perquè un camí d'objecte antic encara és a la memòria. Els senyals de canvi d'estat existeixen precisament perquè un controlador pugui ressincronitzar-se en lloc d'endevinar.
Trieu què significa tancar el controlador. Deixar aixecada una connexió existent propietat de la màquina pot ser correcte, i desmuntar una sessió deliberadament de curta durada també pot ser correcte. Deixar aixecada una connexió existent propietat de la màquina pot ser correcte; desmuntar una sessió deliberadament de curta durada també pot ser correcte. Escriviu aquest contracte de propietat a la interfície en lloc de suposar que la sortida del procés fa l'acció de xarxa. Els usuaris no haurien d'haver d'endevinar si tancar la finestra els farà caure el túnel. Poseu la resposta al text de la interfície, no només en un comentari del codi.
Manteniu l'autoritat i els secrets amb els seus propietaris
Els permisos tornen com a sí, auth o no, i la interfície hauria de reflectir la diferència entre permès, permès després d'autenticar-se i denegat. Executar el controlador com a root no implementa cap política de permisos; elimina la pregunta.
Les credencials pertanyen a l'agent de secrets compatible o a la integració del client per al mètode d'autenticació configurat. Una contrasenya al codi font, en un argument o en un registre és una troballa, i l'autorització administrativa local no és el mateix esdeveniment que l'autenticació amb la passarel·la.
Finalment, informeu de l'estat de la connexió per separat de la tasca que l'usuari vol fer. Un túnel pot estar actiu mentre un nom privat o una aplicació romà inaccessibles, i aquesta segona fallada mereix el seu propi missatge i el seu propi estat. Un controlador que diu exactament quina capa ha fallat és més útil que un que diu que la VPN està caiguda.