Exemple #1
0
        public async Task OnVpnStateChanged(VpnStateChangedEventArgs e)
        {
            if (_appSettings.NetworkAdapterType == OpenVpnAdapter.Tun && e.Error == VpnError.TapAdapterInUseError)
            {
                _modals.Show <TunInUseModalViewModel>();
                return;
            }

            VpnStatus status = e.State.Status;

            switch (e.Error)
            {
            case VpnError.CertRevokedOrExpired:
                await _authCertificateManager.ForceRequestNewKeyPairAndCertificateAsync();

                await _vpnManager.ReconnectAsync(new VpnReconnectionSettings { IsToReconnectIfDisconnected = true });

                return;

            case VpnError.CertificateExpired when e.State.Status == VpnStatus.ActionRequired:
                _lastAuthCertificate = _appSettings.AuthenticationCertificatePem;
                await _authCertificateManager.ForceRequestNewCertificateAsync();

                if (FailedToUpdateAuthCert())
                {
                    await _vpnManager.ReconnectAsync(new VpnReconnectionSettings
                    {
                        IsToReconnectIfDisconnected = true
                    });
                }
                else
                {
                    await _vpnServiceManager.UpdateAuthCertificate(_appSettings.AuthenticationCertificatePem);
                }
                return;
            }

            if (ModalShouldBeShown(e))
            {
                Post(() => ShowModalAsync(e));
            }
            else
            {
                if (status == VpnStatus.Pinging ||
                    status == VpnStatus.Connecting ||
                    status == VpnStatus.Connected ||
                    (status == VpnStatus.Disconnecting ||
                     status == VpnStatus.Disconnected) &&
                    e.Error == VpnError.None)
                {
                    Post(CloseModalAsync);
                }
            }
        }
Exemple #2
0
 private async Task RequestNewKeysAndCertificateOnLoginAsync(bool isAutoLogin)
 {
     if (isAutoLogin)
     {
         await _authCertificateManager.RequestNewCertificateAsync();
     }
     else
     {
         await _authCertificateManager.ForceRequestNewKeyPairAndCertificateAsync();
     }
 }
Exemple #3
0
        public async Task <AuthCredential> GenerateAsync()
        {
            AsymmetricKeyPair keyPair        = _authKeyManager.GetKeyPairOrNull();
            string            certificatePem = _appSettings.AuthenticationCertificatePem;

            if (keyPair == null)
            {
                _logger.Info("AuthCredentialManager: Missing auth key pair, requesting new keys and certificate.");
                await _authCertificateManager.ForceRequestNewKeyPairAndCertificateAsync();

                keyPair        = _authKeyManager.GetKeyPairOrNull();
                certificatePem = _appSettings.AuthenticationCertificatePem;
            }
            else if (certificatePem == null)
            {
                _logger.Info("AuthCredentialManager: Auth keys are present but certificate is missing, requesting new certificate.");
                await _authCertificateManager.ForceRequestNewCertificateAsync();

                keyPair        = _authKeyManager.GetKeyPairOrNull();
                certificatePem = _appSettings.AuthenticationCertificatePem;
            }

            return(new AuthCredential(keyPair, certificatePem));
        }