public LoginWindow(APIControl apiControl)
        {
            InitializeComponent();

            this.apiControl = apiControl;

            if (Properties.Settings.Default.username != "" && Properties.Settings.Default.password != "")
            {
                emailTextBox.Text    = Properties.Settings.Default.username;
                passwordBox.Password = DPAPIInterface.Unprotect(Properties.Settings.Default.password, null, System.Security.Cryptography.DataProtectionScope.CurrentUser);

                passwordConfirmHide(true);
                signInButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
            }
            else if (Properties.Settings.Default.username != "")
            {
                emailTextBox.Text = Properties.Settings.Default.username;

                passwordConfirmHide(true);
                signInButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
            }
            else
            {
                passwordConfirmHide(false);
                signUpButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
            }

            initialClick = true;
            submitButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
        }
Beispiel #2
0
        public bool checkStoredLogin()
        {
            string username = Properties.Settings.Default.username;
            string password = Properties.Settings.Default.password;

            if (password != "")
            {
                password = DPAPIInterface.Unprotect(password, null, System.Security.Cryptography.DataProtectionScope.CurrentUser);
            }

            if (password == "" || username == "")
            {
                return(false);
            }

            try
            {
                if (signIn(username, password) == SignInResponse.SignedIn)
                {
                    var getKeyResponse = getKey();

                    if (getKeyResponse.Result.StatusCode == HttpStatusCode.OK)
                    {
                        var getKeyResponseString = getKeyResponse.Result.Content.ReadAsStringAsync();
                        var getKeyDict           = JsonConvert.DeserializeObject <Dictionary <string, string> >(getKeyResponseString.Result);

                        if (!getKeyDict.ContainsKey("code"))
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            }
            catch (AggregateException e)
            {
                throw e;
            }
        }
        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;
        }