Un piccolo programma che collega una VPN esistente ha bisogno di un controller, non di una nuova implementazione di VPN. Il motore supportato dovrebbe gestire la negoziazione e il traffico del tunnel; il tuo programma dovrebbe esprimere la richiesta dell'utente e spiegare il risultato con onestà. Su Linux, l'interfaccia D-Bus di NetworkManager offre a quel controller un modello concreto da seguire.

Quattro controlli impediscono al controller di confondere un profilo salvato, una richiesta di attivazione e una sessione funzionante.

Controllo uno: quale identità viene selezionata

Mantieni l'UUID del profilo come identità persistente e risolvilo tramite il gestore quando ti serve il percorso dell'oggetto. Un nome visualizzato può essere condiviso da due profili, e un percorso di bus a runtime non è una preferenza utente sensata da memorizzare. Scrivi la selezione nella tua configurazione, non in un commento su quale voce fosse la seconda dell'elenco.

Verifica cosa restituisce il gestore prima di chiamarla corrispondenza. Un UUID che non esiste più produce un errore di ricerca, che è un percorso di codice diverso da quello di un profilo che esiste e rifiuta di attivarsi.

Controllo due: cosa restituisce la chiamata di attivazione

La chiamata di attivazione documentata prende il percorso dell'oggetto di una connessione esistente, un percorso di dispositivo e un oggetto specifico. Restituisce il percorso di una connessione attiva, e quella risposta è un handle, non un esito di prontezza. Non impostare l'indicatore di prontezza dell'applicazione dal valore restituito; iscriviti invece allo stato e al motivo della connessione attiva.

Per una VPN, l'oggetto specifico seleziona la connessione di base attiva. Passando il percorso radice si lascia la scelta del dispositivo a NetworkManager, che sceglie quello attualmente predefinito. È una decisione di contesto di instradamento e non un campo password, e cambia su quale dispositivo è stratificato il tunnel.

Non prendere un esempio generico di aggiungi e attiva e aspettarti che crei un profilo VPN. L'helper documentato esclude le connessioni VPN, quindi il provisioning o l'importazione del profilo è un passo separato e revisionato. Questo conta perché il provisioning richiede autorizzazione e revisione che un pulsante di connessione non offre. Tratta l'importazione come un'azione amministrativa con la propria riga di log e il proprio approvatore.

Controllo tre: come viene rappresentato lo stato

Una connessione attiva passa per attivazione, attiva, disattivazione e disattivata, e il campo motivo dice perché. Ridurre tutto questo a un booleano chiamato loggedIn perde le informazioni che l'utente necessita e quelle che il supporto chiederà. Mostra almeno se la connessione è in attesa, stabilita o sparita, e conserva la stringa del motivo per il caso di errore.

Associa le risposte asincrone alla richiesta che le ha prodotte. Un completamento tardivo di un tentativo precedente non deve sovrascrivere un'azione più recente dell'utente, e una pressione ripetuta di Connect va ignorata o trattata come annullamento e nuovo tentativo con una politica visibile.

Controllo quattro: cosa succede dopo un riavvio

Quando il gestore si riavvia o il tuo controller si riconnette al bus, ricostruisci lo stato osservato dal proprietario. Non continuare a mostrare una sessione in cache come attiva perché un vecchio percorso di oggetto è ancora in memoria. I segnali di cambio di stato esistono proprio perché un controller possa risincronizzarsi invece di indovinare.

Scegli cosa significa chiudere il controller. Lasciare attiva una connessione esistente di proprietà della macchina può essere corretto, e smontare una sessione volutamente di breve durata può esserlo altrettanto. Lasciare attiva una connessione esistente di proprietà della macchina può essere corretto; smontare una sessione volutamente di breve durata può esserlo altrettanto. Scrivi quel contratto di proprietà nell'interfaccia invece di presumere che l'uscita del processo esegua l'azione di rete. Gli utenti non dovrebbero dover indovinare se chiudere la finestra farà cadere il loro tunnel. Metti la risposta nel testo dell'interfaccia, non solo in un commento al codice.

Tieni l'autorità e i segreti presso i loro proprietari

I permessi tornano come sì, auth o no, e l'interfaccia dovrebbe riflettere la differenza tra consentito, consentito dopo l'autenticazione e negato. Eseguire il controller come root non implementa una politica dei permessi; elimina la domanda.

Le credenziali appartengono all'agente segreto supportato o all'integrazione del client per il metodo di autenticazione configurato. Una password nel codice sorgente, in un argomento o in un log è un rilievo, e l'autorizzazione amministrativa locale non è lo stesso evento dell'autenticazione al gateway.

Infine, riporta lo stato della connessione separatamente dal compito che l'utente vuole svolgere. Un tunnel può essere attivo mentre un nome privato o un'applicazione resta non disponibile, e quel secondo guasto merita il proprio messaggio e il proprio stato. Un controller che dice esattamente quale strato ha fallito è più utile di uno che dice che la VPN è giù.

Articoli correlati