private SettingsWindow(AppSettings settings, ViewModelWireguardSettings wgSettingsModel)
        {
            InitializeComponent();
            Settings = settings;
            AppState = AppState.Instance();

            Settings.FreezeSettings(); // save corrent settings state (in order to have possibility to restore)

            // if WiFi functionality is disable - hide trusted\untrusted wifi configuration
            NetworksSettings = new ViewModelNetworksSettings(Settings.NetworkActions, this);
            if (NetworksSettings.IsWiFiFunctionalityOn == false)
            {
                GuiTabItemNetworks.Visibility = Visibility.Collapsed;
            }

            DataContext = this;

            switch (Settings.ProxyType)
            {
            case ProxyType.None:
                rbProxyNone.IsChecked = true;
                break;

            case ProxyType.Auto:
                rbProxyAuto.IsChecked = true;
                break;

            case ProxyType.Http:
                rbProxyHTTP.IsChecked = true;
                break;

            case ProxyType.Socks:
                rbProxySOCKS.IsChecked = true;
                break;
            }

            txtProxyPassword.Password = Settings.ProxyUnsafePassword;

            WireGuardSettings          = wgSettingsModel;
            WireGuardSettings.OnError += WireGuardSettings_OnError;
            Closing += (sender, args) => { WireGuardSettings.OnError -= WireGuardSettings_OnError; };

            // WireGuard key regeneration interval
            for (int i = 1; i <= 30; i++)
            {
                GuiComboBoxWgKeyRegenerateDays.Items.Add(i);
            }
            GuiComboBoxWgKeyRegenerateDays.SelectedIndex = WireGuardSettings.RegenerationIntervalDays - 1;

            if (GuiComboBoxWgKeyRegenerateDays.SelectedIndex < 0)
            {
                GuiComboBoxWgKeyRegenerateDays.SelectedIndex = 0;
            }
            GuiComboBoxWgKeyRegenerateDays.SelectionChanged += (sender, args) => { WireGuardSettings.RegenerationIntervalDays = GuiComboBoxWgKeyRegenerateDays.SelectedIndex + 1; };

            Settings.PropertyChanged += Settings_OnPropertyChanged;
            Closing += (sender, args) => { Settings.PropertyChanged -= Settings_OnPropertyChanged; };
        }
예제 #2
0
        private void SetSettings(AppSettings settings)
        {
            __Settings = settings;
            __Settings.PropertyChanged += __Settings_PropertyChanged;

            Settings       = new AppSettingsAdapter(__Settings);
            NetworkActions = new ObservableObject(__Settings.NetworkActions);

            __NetworksViewModel         = new ViewModelNetworksSettings(__Settings.NetworkActions, this);
            NetworksViewModelObservable = new ObservableObject(__NetworksViewModel);

            __Observers = new List <IDisposable>();
            __Observers.Add(Settings.AddObserver(new NSString("ProxyTypeId"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                if (Window.FirstResponder is NSTextView)
                {
                    UnfocusElement();
                }
            }));

            __Observers.Add(Settings.AddObserver(new NSString("FirewallAllowLAN"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                __MainViewModel.KillSwitchAllowLAN = __Settings.FirewallAllowLAN;
            }));

            __Observers.Add(Settings.AddObserver(new NSString("FirewallAllowLANMulticast"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                __MainViewModel.KillSwitchAllowLANMulticast = __Settings.FirewallAllowLANMulticast;
            }));

            __Observers.Add(Settings.AddObserver(new NSString("ServiceUseObfsProxy"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                __Service.Proxy.SetPreference("enable_obfsproxy", settings.ServiceUseObfsProxy ? "1" : "0");
            }));

            __Observers.Add(Settings.AddObserver(new NSString("IsLoggingEnabled"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                __Service.Proxy.SetPreference("enable_logging", settings.IsLoggingEnabled ? "1" : "0");
            }));

            __Observers.Add(Settings.AddObserver(new NSString("FirewallTypeId"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                bool isPersistent = settings.FirewallType == IVPNFirewallType.Persistent;
                __MainViewModel.KillSwitchIsPersistent = isPersistent;
            }));

            __Observers.Add(Settings.AddObserver(new NSString("OpenVPNExtraParameters"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                if (!Helpers.OpenVPN.OpenVPNConfigChecker.IsIsUserParametersAllowed(settings.OpenVPNExtraParameters, out string errorDesc))
                {
                    IVPNAlert.Show(//this.Window, - do not use window argument (alert will be possible to show when window closing)
                        __MainViewModel.AppServices.LocalizedString("OpenVPNParamsNotSupported", "Some OpenVPN additional parameters are not supported"),
                        errorDesc,
                        NSAlertStyle.Warning);
                    return;
                }

                __Service.Proxy.SetPreference("open_vpn_extra_parameters", settings.OpenVPNExtraParameters);
            }));

            __Observers.Add(Settings.AddObserver(new NSString("StopServerOnClientDisconnect"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                __Service.Proxy.SetPreference("is_stop_server_on_client_disconnect", __Settings.StopServerOnClientDisconnect ? "1" : "0");
            }));
        }
예제 #3
0
        public NetworkActionButton(NetworkAction networkAction,
                                   ViewModelNetworksSettings networksSettingsModel,
                                   float width) : base()
        {
            NetworkAction         = networkAction;
            NetworksSettingsModel = networksSettingsModel;
            const int constButtonHeight = 35;
            const int constImgHeight    = 16;

            Bordered = false;
            Title    = "";
            Frame    = new CGRect(0, 0, width, constButtonHeight);

            // wifi icon
            var wifiIconView = new NSImageView();

            wifiIconView.Frame = new CGRect(20, (constButtonHeight - constImgHeight) / 2, constImgHeight, constImgHeight);
            wifiIconView.Image = NSImage.ImageNamed("iconWiFiSmallBlue");
            AddSubview(wifiIconView);

            // title
            __Title           = UIUtils.NewLabel(networkAction.Network.SSID);
            __Title.Frame     = new CGRect(49, wifiIconView.Frame.Y, width / 2, 18);
            __Title.TextColor = NSColor.FromRgb(38, 57, 77);
            AddSubview(__Title);

            WiFiActionTypeEnum action = networkAction.Action;

            if (action == WiFiActionTypeEnum.Default)
            {
                action = networksSettingsModel.NetworkActions.DefaultActionType;
            }

            System.nfloat xpos = __Title.Frame.Width + __Title.Frame.X + 20;

            //action
            __PopUpButton          = new NSPopUpButton();
            __PopUpButton.Bordered = false;
            __PopUpButton.Frame    = new CGRect(xpos, (constButtonHeight - 24) / 2, width - xpos - 10, 24);
            AddSubview(__PopUpButton);

            networkAction.PropertyChanged += NetworkAction_PropertyChanged;
            NetworksSettingsModel.NetworkActions.PropertyChanged += NetworkActions_PropertyChanged;

            CreatePopupButtonElements();
        }
        private void SetSettings(AppSettings settings)
        {
            __Settings = settings;
            __Settings.PropertyChanged += __Settings_PropertyChanged;

            __MainViewModel.AppState.OnSessionChanged += AppState_OnSessionChanged;

            Settings       = new AppSettingsAdapter(__Settings);
            NetworkActions = new ObservableObject(__Settings.NetworkActions);

            __NetworksViewModel         = new ViewModelNetworksSettings(__Settings.NetworkActions, this);
            NetworksViewModelObservable = new ObservableObject(__NetworksViewModel);

            __Observers = new List <IDisposable>();
            __Observers.Add(Settings.AddObserver(new NSString("ProxyTypeId"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                if (Window.FirstResponder is NSTextView)
                {
                    UnfocusElement();
                }
            }));

            __Observers.Add(Settings.AddObserver(new NSString("FirewallAllowLAN"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                __MainViewModel.KillSwitchAllowLAN = __Settings.FirewallAllowLAN;
            }));

            __Observers.Add(Settings.AddObserver(new NSString("FirewallAllowLANMulticast"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                __MainViewModel.KillSwitchAllowLANMulticast = __Settings.FirewallAllowLANMulticast;
            }));

            __Observers.Add(Settings.AddObserver(new NSString("ServiceUseObfsProxy"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                __Service.Proxy.SetPreference("enable_obfsproxy", settings.ServiceUseObfsProxy ? "1" : "0");
            }));

            __Observers.Add(Settings.AddObserver(new NSString("IsLoggingEnabled"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                __Service.Proxy.SetPreference("enable_logging", settings.IsLoggingEnabled ? "1" : "0");
            }));

            __Observers.Add(Settings.AddObserver(new NSString("FirewallTypeId"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                bool isPersistent = settings.FirewallType == IVPNFirewallType.Persistent;
                __MainViewModel.KillSwitchIsPersistent = isPersistent;
            }));

            __Observers.Add(Settings.AddObserver(new NSString("StopServerOnClientDisconnect"), NSKeyValueObservingOptions.New, (NSObservedChange e) => {
                __Service.Proxy.SetPreference("is_stop_server_on_client_disconnect", __Settings.StopServerOnClientDisconnect ? "1" : "0");
            }));
        }