Beispiel #1
0
        public MainWindow()
        {
            DataContext = this;

            wantsConnect = false;

            sReroute = new StreamReroute();

            InitializeComponent();

            if (Properties.Settings.Default.needsUpgrade)
            {
                Properties.Settings.Default.Upgrade();
                Properties.Settings.Default.needsUpgrade = false;
                Properties.Settings.Default.Save();
            }

            this.Topmost = true;

            PopulateComboBox();

            bool needsLoginWindow = true;

            if (checkLogin())
            {
                // VPN for some reason still in place
                if (vpnControl.checkVPNExists())
                {
                    //initTimer();
                    needsLoginWindow = false;

                    setConnecting();
                }
                // else check certificate installed; then go ahead and add back VPN
                else if (VPNControl.checkCertificateInstalled() && !noInternet)
                {
                    needsLoginWindow = false;
                    vpnControl.addVPN(Properties.Settings.Default.region);

                    setConnecting();

                    //initTimer();
                }
                else if (noInternet && !needsLoginWindow)
                {
                    System.Windows.Forms.MessageBox.Show("Can't connect to server.");
                }
                else if (!VPNControl.checkCertificateInstalled() && !noInternet)
                {
                    // reinstall certificates
                    var getKeyResponse       = apiControl.getKey();
                    var getKeyResponseString = getKeyResponse.Result.Content.ReadAsStringAsync();

                    var getKeyDict = JsonConvert.DeserializeObject <Dictionary <string, string> >(getKeyResponseString.Result);

                    if (getKeyDict.ContainsKey("b64"))
                    {
                        string tempFile = System.IO.Path.GetTempFileName();

                        File.WriteAllBytes(tempFile, Convert.FromBase64String(getKeyDict["b64"]));

                        VPNControl.addCertificate(tempFile);

                        needsLoginWindow = false;
                        vpnControl.addVPN(Properties.Settings.Default.region);

                        setConnecting();
                    }
                }
                else
                {
                    needsLoginWindow = true;
                }
            }

            // if not ready to run VPN, send to login window
            if (needsLoginWindow)
            {
                handleLoginForm(false);
            }
            else
            {
                notifyIcon.Visible = true;
                initTimer();
            }
            //initNotifyIcon();

            // For crash testing
            //int x = 0;
            //int y = 1 / x;

            //SetWindowPosition();
        }
        private void submitButton_Click(object sender, RoutedEventArgs e)
        {
            if (emailTextBox.Text != "" && passwordBox.Password != "" && (!isSignUp || passwordBox.Password == passwordConfirmBox.Password))
            {
                submitButton.IsEnabled = false;

                if (!initialClick)
                {
                    submitHideButton.Visibility = Visibility.Hidden; // hide enable animation on first appearance
                }

                username = password = null;

                new System.Threading.Thread(() =>
                {
                    this.Dispatcher.Invoke(() =>
                    {
                        Properties.Settings.Default.username = username = emailTextBox.Text;
                        password = passwordBox.Password;
                        Properties.Settings.Default.password = DPAPIInterface.Protect(password, null, System.Security.Cryptography.DataProtectionScope.CurrentUser);
                        Properties.Settings.Default.Save();
                    });

                    Task <HttpResponseMessage> response = null;

                    while (username == null || password == null)
                    {
                        Thread.Sleep(10);
                    }

                    bool hasError = false;

                    // only create user in register
                    if (isSignUp)
                    {
                        if (!apiControl.checkVersion1Login(username, password))
                        {
                            response = apiControl.signUp(username, password);
                            var signUpResponseString = response.Result.Content.ReadAsStringAsync();

                            try
                            {
                                var jsonDict = JsonConvert.DeserializeObject <Dictionary <string, string> >(signUpResponseString.Result);

                                if (jsonDict.ContainsKey("code") && jsonDict["code"] == "3")
                                {
                                    this.Dispatcher.Invoke(() =>
                                    {
                                        confirmEmailLabel.Content    = "Password must contain a capital letter, contain a\nnumber, and contain a special character.";
                                        confirmEmailLabel.Visibility = Visibility.Visible;
                                        submitButton.IsEnabled       = true;
                                    });

                                    hasError = true;
                                }
                            }
                            catch (AggregateException ae)
                            {
                            }
                        }
                    }

                    if (!hasError)
                    {
                        try
                        {
                            APIControl.SignInResponse signInResponse = apiControl.signIn(username, password);

                            if (signInResponse == APIControl.SignInResponse.AccountNotFound)
                            {
                                this.Dispatcher.Invoke(() =>
                                {
                                    confirmEmailLabel.Content    = "Incorrect email or password.";
                                    confirmEmailLabel.Visibility = Visibility.Visible;
                                    submitButton.IsEnabled       = true;
                                });
                            }
                            else if (signInResponse == APIControl.SignInResponse.AwaitingVerification)
                            {
                                this.Dispatcher.Invoke(() =>
                                {
                                    confirmEmailLabel.Content    = "Please confirm email.";
                                    confirmEmailLabel.Visibility = Visibility.Visible;
                                    submitButton.IsEnabled       = true;
                                });
                            }
                            else
                            {
                                var getKeyResponse       = apiControl.getKey();
                                var getKeyResponseString = getKeyResponse.Result.Content.ReadAsStringAsync();

                                if (getKeyResponse.Result.StatusCode == System.Net.HttpStatusCode.OK)
                                {
                                    var testDict = JsonConvert.DeserializeObject <Dictionary <string, string> >(getKeyResponseString.Result);

                                    if (testDict.ContainsKey("code") && testDict["code"] == "1")
                                    {
                                        this.Dispatcher.Invoke(() =>
                                        {
                                            confirmEmailLabel.Content    = "Please confirm email.";
                                            confirmEmailLabel.Visibility = Visibility.Visible;
                                            submitButton.IsEnabled       = true;
                                        });
                                    }
                                    // else finished registration and subscription
                                    else if (!testDict.ContainsKey("code"))
                                    {
                                        this.Dispatcher.Invoke(() =>
                                        {
                                            isSubscribed                 = true;
                                            emailLabel.Content           = Properties.Settings.Default.username;
                                            confirmEmailLabel.Visibility = Visibility.Hidden;
                                            //wizardPages1.SelectedTab = tabPage5;
                                            Dispatcher.BeginInvoke((Action)(() => loginTabControl.SelectedIndex = 2));
                                            submitButton.IsEnabled = true;
                                        });
                                    }
                                    else
                                    {
                                        this.Dispatcher.Invoke(() =>
                                        {
                                            isSubscribed = false;
                                            confirmEmailLabel.Visibility = Visibility.Hidden;
                                            emailLabel.Content           = Properties.Settings.Default.username;
                                            initBrowser();
                                            //wizardPages1.SelectedTab = tabPage5; // go to EULA after sign in page
                                            Dispatcher.BeginInvoke((Action)(() => loginTabControl.SelectedIndex = 2));
                                            submitButton.IsEnabled = true;
                                        });
                                    }
                                }
                                else if (getKeyResponse.Result.StatusCode == System.Net.HttpStatusCode.Unauthorized)
                                {
                                    var testDict = JsonConvert.DeserializeObject <Dictionary <string, string> >(getKeyResponseString.Result);
                                    if (testDict.ContainsKey("code") && testDict["code"] == "1")
                                    {
                                        this.Dispatcher.Invoke(() =>
                                        {
                                            confirmEmailLabel.Content    = "Please confirm email.";
                                            confirmEmailLabel.Visibility = Visibility.Visible;
                                            submitButton.IsEnabled       = true;
                                        });
                                    }
                                    else
                                    {
                                        this.Dispatcher.Invoke(() =>
                                        {
                                            confirmEmailLabel.Content    = "Incorrect email or password.";
                                            confirmEmailLabel.Visibility = Visibility.Visible;
                                            submitButton.IsEnabled       = true;
                                        });
                                    }
                                }
                                else if (getKeyResponse.Result.StatusCode == System.Net.HttpStatusCode.BadRequest)
                                {
                                    this.Dispatcher.Invoke(() =>
                                    {
                                        confirmEmailLabel.Content    = "Account does not include desktop access.\nUpgrade to unlimited.";
                                        confirmEmailLabel.Visibility = Visibility.Visible;
                                        submitButton.IsEnabled       = true;
                                    });
                                }
                            }
                        }
                        catch (AggregateException ae)
                        {
                            MessageBox.Show("Can't connect to internet.");

                            this.Dispatcher.Invoke(() =>
                            {
                                submitButton.IsEnabled = true;
                            });
                        }
                    }
                }).Start();
            }
            // else if passwords don't match
            else if (isSignUp && passwordBox.Password != "" && passwordBox.Password != passwordConfirmBox.Password)
            {
                confirmEmailLabel.Content    = "Passwords do not match.";
                confirmEmailLabel.Visibility = Visibility.Visible;
                submitButton.IsEnabled       = true;
            }
            else
            {
                submitButton.IsEnabled = true;
            }

            initialClick = false;
        }