Example #1
0
 Boolean DialUp()
 {
     try {
         using (var phoneBook = new RasPhoneBook()) {
             var name   = VpnConfig.GetConfig().ConnectionName;
             var user   = VpnConfig.GetConfig().Username;
             var pass   = VpnConfig.GetConfig().Password;
             var pbPath = VpnConfig.GetConfig().PhoneBookPath;
             phoneBook.Open(pbPath);
             var entry = phoneBook.Entries.FirstOrDefault(e => e.Name.Equals(name));
             if (entry != null)
             {
                 using (var dialer = new RasDialer()) {
                     dialer.EntryName     = name;
                     dialer.Credentials   = new NetworkCredential(user, pass);
                     dialer.PhoneBookPath = pbPath;
                     dialer.Dial();
                 }
             }
             else
             {
                 throw new ArgumentException(
                           message: "entry wasn't found: " + name,
                           paramName: "entry"
                           );
             }
         }
         return(true);
     }
     catch {
         // log the exception
         return(false);
     }
 }
Example #2
0
        public void Connect(IReadOnlyList <VpnHost> servers, VpnConfig config, VpnProtocol protocol,
                            VpnCredentials credentials)
        {
            ApplyNetworkSettings();

            _origin.Connect(servers, config, protocol, credentials);
        }
        public void DoesntWriteThePlainPasswordField()
        {
            var passwordInPlainText = "Password-in-plain-text";
            var vpnConfig           = new VpnConfig()
            {
                UserName = "******",
                Password = passwordInPlainText,
            };

            var jsonSerializerOptions = new JsonSerializerOptions {
                WriteIndented = true,
                Converters    =
                {
                    new VpnConfigConverter()
                },
            };

            string result = JsonSerializer.Serialize(vpnConfig, jsonSerializerOptions);

            result.Should().NotContain(passwordInPlainText);
            result.Should().Contain(vpnConfig.PasswordEncoded);

            result.Should().NotContain($@"""{nameof(VpnConfig.Password)}""");
            result.Should().Contain($@"""{nameof(VpnConfig.PasswordEncoded)}""");
        }
Example #4
0
        public void Connect(IReadOnlyList <VpnHost> servers, VpnConfig config, VpnProtocol protocol,
                            VpnCredentials credentials)
        {
            AddDefaultGateway();

            _origin.Connect(servers, config, protocol, credentials);
        }
Example #5
0
        public void Connect(VpnEndpoint endpoint, VpnCredentials credentials, VpnConfig config)
        {
            _config      = config;
            _endpoint    = endpoint;
            _credentials = credentials;

            _connectAction.Run();
        }
Example #6
0
        public void TestInitialize()
        {
            _logger    = Substitute.For <ILogger>();
            _taskQueue = new TaskQueue();
            _origin    = Substitute.For <ISingleVpnConnection>();

            _endpoint    = new VpnEndpoint(new VpnHost("proton.vpn", "135.27.46.203", string.Empty), VpnProtocol.OpenVpnTcp, 777);
            _credentials = new VpnCredentials("username", "password");
            _config      = new VpnConfig(new Dictionary <VpnProtocol, IReadOnlyCollection <int> >(), SplitTunnelMode.Disabled, useTunAdapter: false);
        }
Example #7
0
        public async Task UpdateServers(IReadOnlyList <VpnHost> servers, VpnConfig config)
        {
            Ensure.NotNull(servers, nameof(servers));
            Ensure.NotNull(config, nameof(config));

            VpnHostContract[] endpointIpsContract = Map(servers);
            VpnConfigContract configContract      = Map(config);

            await _vpnService.UpdateServers(endpointIpsContract, configContract);
        }
Example #8
0
        public void TestInitialize()
        {
            _logger    = Substitute.For <ILogger>();
            _taskQueue = new TaskQueue();
            _origin    = Substitute.For <ISingleVpnConnection>();

            _endpoint    = new VpnEndpoint(new VpnHost("proton.vpn", "135.27.46.203"), VpnProtocol.OpenVpnTcp, 777);
            _credentials = new VpnCredentials("username", "password");
            _config      = new VpnConfig(new Dictionary <VpnProtocol, IReadOnlyCollection <int> >(), new List <string>());
        }
Example #9
0
        private static VpnConfigContract Map(VpnConfig config)
        {
            var portConfig = config.Ports.ToDictionary(p => Map(p.Key), p => p.Value.ToArray());

            return(new VpnConfigContract
            {
                Ports = portConfig,
                CustomDns = config.CustomDns.ToList(),
            });
        }
 public VpnConnectionRequest(
     IReadOnlyList <VpnHost> servers,
     VpnProtocol protocol,
     VpnConfig config,
     VpnCredentials credentials)
 {
     Servers     = servers;
     Protocol    = protocol;
     Config      = config;
     Credentials = credentials;
 }
Example #11
0
        public void Connect(IReadOnlyList <VpnHost> servers, VpnConfig config, VpnCredentials credentials)
        {
            _servers     = servers;
            _config      = config;
            _credentials = credentials;

            _connectRequested     = true;
            _disconnectedReceived = false;

            Queued(Connect);
        }
Example #12
0
 public void UpdateServers(IReadOnlyList <VpnHost> servers, VpnConfig config)
 {
     if (_connectRequested)
     {
         _servers = servers;
         _config  = config;
     }
     else
     {
         _origin.UpdateServers(servers, config);
     }
 }
 public OpenVpnProcessParams(
     VpnEndpoint endpoint,
     int managementPort,
     string password,
     VpnConfig config)
 {
     Endpoint       = endpoint;
     ManagementPort = managementPort;
     Password       = password;
     CustomDns      = config.CustomDns;
     SkipIpv6       = config.SkipIpv6;
 }
Example #14
0
 public void DeleteRoutes(VpnConfig vpnConfig)
 {
     switch (vpnConfig.SplitTunnelMode)
     {
     case SplitTunnelMode.Block:
         foreach (string ip in vpnConfig.SplitTunnelIPs)
         {
             RoutingTableHelper.DeleteRoute(new NetworkAddress(ip).Ip);
         }
         break;
     }
 }
Example #15
0
        public void TestInitialize()
        {
            _logger    = Substitute.For <ILogger>();
            _taskQueue = new TaskQueue();
            _origin    = Substitute.For <ISingleVpnConnection>();

            _endpoint    = new VpnEndpoint(new VpnHost("proton.vpn", "135.27.46.203", string.Empty, null), VpnProtocol.OpenVpnTcp, 777);
            _credentials = new VpnCredentials("username", "password", "cert",
                                              new AsymmetricKeyPair(
                                                  new SecretKey("U2VjcmV0S2V5", KeyAlgorithm.Unknown),
                                                  new PublicKey("UHVibGljS2V5", KeyAlgorithm.Unknown)));
            _config = new VpnConfig(new VpnConfigParameters());
        }
        public void Connect(VpnEndpoint endpoint, VpnCredentials credentials, VpnConfig config)
        {
            _endpoint    = endpoint;
            _credentials = credentials;
            _config      = config;

            _connectRequested    = true;
            _disconnectRequested = false;
            _disconnectError     = VpnError.Unknown;

            _logger.Info("HandlingRequestsWrapper: Connect requested, queuing Connect");
            Queued(Connect);
        }
Example #17
0
        public void Connect(VpnEndpoint endpoint, VpnCredentials credentials, VpnConfig config)
        {
            _vpnEndpoint    = endpoint;
            _vpnCredentials = credentials;
            _config         = config;

            _cancellationHandle.Cancel();
            var cancellationToken = _cancellationHandle.Token;

            _disconnectDelay = Task.Delay(DisconnectDelay, cancellationToken);

            Queued(ScanPorts, cancellationToken);
        }
Example #18
0
        public void Connect(VpnEndpoint endpoint, VpnCredentials credentials, VpnConfig config)
        {
            if (endpoint.Server.X25519PublicKey == null)
            {
                InvokeStateChange(VpnStatus.Disconnected, VpnError.MissingServerPublicKey);
                return;
            }

            _credentials = credentials;
            _endpoint    = endpoint;
            _vpnConfig   = config;

            _connectAction.Run();
        }
        public void Connect(IReadOnlyList <VpnHost> servers, VpnConfig config, VpnProtocol protocol, VpnCredentials credentials)
        {
            _reconnectPending = false;
            _reconnecting     = false;
            _disconnecting    = false;
            _protocol         = protocol;
            _credentials      = credentials;
            _config           = config;

            _candidates.Set(servers);
            _candidates.Reset();
            _endpoint = _candidates.Next(_protocol);

            _origin.Connect(_endpoint, credentials, config);
        }
        public void UpdateServers(IReadOnlyList <VpnHost> servers, VpnConfig config)
        {
            _candidates.Set(servers);
            _logger.Info("VPN endpoint candidates updated");

            if (_reconnectPending ||
                _state.Status == VpnStatus.Disconnected ||
                _state.Status == VpnStatus.Disconnecting ||
                _candidates.Contains(_candidates.Current))
            {
                return;
            }

            _logger.Info("Current VPN endpoint is not in VPN endpoint candidates, disconnecting");
            _origin.Disconnect(VpnError.Unknown);
        }
Example #21
0
        private static VpnConfigContract Map(VpnConfig config)
        {
            Dictionary <VpnProtocolContract, int[]> portConfig =
                config.Ports.ToDictionary(p => Map(p.Key), p => p.Value.ToArray());

            return(new VpnConfigContract
            {
                Ports = portConfig,
                CustomDns = config.CustomDns.ToList(),
                SplitTunnelMode = config.SplitTunnelMode,
                SplitTunnelIPs = config.SplitTunnelIPs.ToList(),
                NetShieldMode = config.NetShieldMode,
                VpnProtocol = Map(config.VpnProtocol),
                PreferredProtocols = Map(config.PreferredProtocols),
                SplitTcp = config.SplitTcp,
            });
        }
Example #22
0
        public void SetUpRoutingTable(VpnConfig vpnConfig, string localIp)
        {
            INetworkInterface adapter = _networkInterfaceLoader.GetByVpnProtocol(vpnConfig.VpnProtocol, vpnConfig.OpenVpnAdapter);

            switch (vpnConfig.SplitTunnelMode)
            {
            case SplitTunnelMode.Permit:
                //Remove default wireguard route as it has metric 0, but instead we add the same route with low priority
                //so that we still have the route for include mode apps to be routed through the tunnel.
                RoutingTableHelper.DeleteRoute("0.0.0.0", "0.0.0.0", localIp);
                RoutingTableHelper.CreateRoute("0.0.0.0", "0.0.0.0", localIp, adapter.Index, ROUTE_METRIC);
                RoutingTableHelper.CreateRoute(_config.WireGuard.DefaultDnsServer, "255.255.255.255", localIp, adapter.Index, ROUTE_METRIC);

                foreach (string ip in vpnConfig.SplitTunnelIPs)
                {
                    NetworkAddress address = new(ip);
                    RoutingTableHelper.CreateRoute(address.Ip, address.Mask, localIp, adapter.Index, ROUTE_METRIC);
                }
                break;

            case SplitTunnelMode.Block:
                INetworkInterface bestInterface = _networkInterfaces.GetBestInterface(_config.GetHardwareId(vpnConfig.OpenVpnAdapter));
                int result = RoutingTableHelper.GetIpInterfaceEntry(bestInterface.Index, out MibIPInterfaceRow interfaceRow);
                if (result == 0)
                {
                    foreach (string ip in vpnConfig.SplitTunnelIPs)
                    {
                        NetworkAddress address = new(ip);
                        RoutingTableHelper.CreateRoute(
                            address.Ip,
                            address.Mask,
                            bestInterface.DefaultGateway.ToString(),
                            bestInterface.Index,
                            (int)interfaceRow.Metric);
                    }
                }
                break;
            }
        }
Example #23
0
 public void Connect(VpnEndpoint endpoint, VpnCredentials credentials, VpnConfig config)
 {
     _origin.Connect(endpoint, credentials, config);
 }
Example #24
0
 public IEnumerable <ValidationResult> Validate(ValidationContext validationContext)
 {
     return(Credentials.Validate(validationContext)
            .Concat(VpnConfig.Validate(validationContext))
            .Concat(GetServerValidationResult(validationContext)));
 }
Example #25
0
 public void Connect(VpnEndpoint endpoint, VpnCredentials credentials, VpnConfig config)
 {
     _vpnProtocol = config.VpnProtocol;
     VpnConnection.Connect(endpoint, credentials, config);
 }
Example #26
0
 public void UpdateServers(IReadOnlyList <VpnHost> servers, VpnConfig config)
 {
     _origin.UpdateServers(servers, config);
 }
Example #27
0
 public void Connect(IReadOnlyList <VpnHost> servers, VpnConfig config, VpnCredentials credentials)
 {
     _origin.Connect(servers, config, credentials);
 }
Example #28
0
 public async Task UpdateServers(IReadOnlyList<VpnHost> servers, VpnConfig config)
 {
     await InvokeAction(() => _decorated.UpdateServers(servers, config));
 }