graph TD style Deregistered fill:cyan Deregistered(Deregistered) -->|Register| Main style Main fill:white Main(Main) -->|Deregister| Deregistered style Main fill:white Main(Main) -->|Add a server| AddingServer style Main fill:white Main(Main) -->|Get a VPN config| GettingConfig style Main fill:white Main(Main) -->|Already connected| Connected style AddingServer fill:white AddingServer(AddingServer) -->|Authorize| OAuthStarted style OAuthStarted fill:white OAuthStarted(OAuthStarted) -->|Authorized| Main style GettingConfig fill:white GettingConfig(GettingConfig) -->|Invalid location| AskLocation style GettingConfig fill:white GettingConfig(GettingConfig) -->|Invalid or no profile| AskProfile style GettingConfig fill:white GettingConfig(GettingConfig) -->|Successfully got a configuration| GotConfig style GettingConfig fill:white GettingConfig(GettingConfig) -->|Authorize| OAuthStarted style AskLocation fill:white AskLocation(AskLocation) -->|Location chosen| GettingConfig style AskProfile fill:white AskProfile(AskProfile) -->|Profile chosen| GettingConfig style GotConfig fill:white GotConfig(GotConfig) -->|Get a VPN config again| GettingConfig style GotConfig fill:white GotConfig(GotConfig) -->|VPN is connecting| Connecting style Connecting fill:white Connecting(Connecting) -->|VPN is connected| Connected style Connecting fill:white Connecting(Connecting) -->|Cancel connecting| Disconnecting style Connected fill:white Connected(Connected) -->|VPN is disconnecting| Disconnecting style Disconnecting fill:white Disconnecting(Disconnecting) -->|VPN is disconnected| Disconnected style Disconnecting fill:white Disconnecting(Disconnecting) -->|Cancel disconnecting| Connected style Disconnected fill:white Disconnected(Disconnected) -->|Connect again| GettingConfig style Disconnected fill:white Disconnected(Disconnected) -->|Renew| OAuthStarted