public async void Update()
        {
            IsUpdatingPassword = true;

            try
            {
                if (string.IsNullOrWhiteSpace(Password))
                {
                    SetError(PowerPlannerResources.GetString("Settings_ChangePasswordPage_Errors_MustEnterPassword"));
                    return;
                }

                if (Password.Length < 5)
                {
                    SetError(PowerPlannerResources.GetString("String_InvalidPasswordTooShortExplanation"));
                    return;
                }

                if (!Password.Equals(ConfirmPassword))
                {
                    ActionPasswordsDidNotMatch?.Invoke(this, PowerPlannerResources.GetString("Settings_ChangePasswordPage_Errors_PasswordsDidNotMatch"));
                    return;
                }

                if (Account.IsOnlineAccount)
                {
                    try
                    {
                        var resp = await PowerPlannerAuth.ChangeOnlineAccountPasswordAsync(
                            accountId : Account.AccountId,
                            username : Account.Username,
                            newPassword : Password,
                            currentToken : Account.Token);

                        if (resp.Error != null)
                        {
                            SetError(resp.Error);
                            return;
                        }

                        await updateToken(Account, resp.LocalToken, resp.Token);

                        GoBack();
                    }

                    catch { SetError(PowerPlannerResources.GetString("Settings_ChangePasswordPage_Errors_FailedUpdateOnline")); }
                }

                else
                {
                    var newLocalToken = PowerPlannerAuth.ChangeOfflineAccountPassword(Account.Username, Password, Account.LocalToken);
                    await updateToken(Account, newLocalToken, null);

                    GoBack();
                }
            }

            finally { IsUpdatingPassword = false; }
        }
        private async void LocalNotFound(string username)
        {
            string password = GetPassword();

            try
            {
                IsLoggingInOnline = true;

                OnlineLoginResponse resp;

                try
                {
                    resp = await PowerPlannerAuth.LoginOnlineAndAddDeviceAsync(username, password);
                }

                catch
                {
                    IsLoggingInOnline = false;
                    throw;
                }

                IsLoggingInOnline = false;

                if (resp.Error != null)
                {
                    ShowMessage(resp.Error, "Error logging in");
                }

                else
                {
                    AccountDataItem account = await CreateAccount(username, resp.LocalToken, resp.Token, resp.AccountId, resp.DeviceId);

                    if (account != null)
                    {
                        TelemetryExtension.Current?.TrackEvent("LoggedInToOnlineAccount");

                        AccountsManager.SetLastLoginIdentifier(account.LocalAccountId);

                        ToMainPage(account, existingAccount: false);
                    }
                }
            }

            catch (Exception ex)
            {
                Debug.WriteLine("Failed logging into online account: " + ex.ToString());

                ShowMessage(PowerPlannerResources.GetString("LoginPage_String_ExplanationOfflineAndNoLocalAccountFound"), PowerPlannerResources.GetString("LoginPage_String_NoAccountFoundHeader"));
            }

            finally
            {
                IsLoggingInOnline = false;
            }
        }
        public void Continue()
        {
            if (PowerPlannerAuth.ValidatePasswordLocally(Password, _currAccount.Username, _currAccount.LocalToken))
            {
                OnIdentityConfirmed?.Invoke(this, new EventArgs());

                RemoveViewModel();
            }

            else
            {
                ActionIncorrectPassword?.Invoke(this, new EventArgs());
            }
        }
Beispiel #4
0
        public async System.Threading.Tasks.Task LoginAsync()
        {
            try
            {
                string username = getUsername();
                string password = getPassword();

                var matching = await FindAccountByUsername(username);

                if (matching == null)
                {
                    localNotFound(username);
                }

                else
                {
                    if ((_autoFilledLocalToken != null && matching.LocalToken.Equals(_autoFilledLocalToken)) ||
                        PowerPlannerAuth.ValidatePasswordLocally(
                            password: password,
                            localUsername: username,
                            localToken: matching.LocalToken))
                    {
                        ToMainPage(matching);
                    }

                    //if a local transferred account
                    else if (!matching.IsOnlineAccount && matching.LocalToken.Equals(Variables.OLD_PASSWORD))
                    {
                        //update password with the new password
                        matching.LocalToken = password;
                        await AccountsManager.Save(matching);

                        ToMainPage(matching);
                    }

                    else
                    {
                        incorrectLocalPassword(matching, password);
                    }
                }
            }

            catch (Exception ex)
            {
                TelemetryExtension.Current?.TrackException(ex);
                await new PortableMessageDialog("Error logging in. Your issue has been sent to the developer.").ShowAsync();
            }
        }
        public async void CreateAccount()
        {
            if (!isOkayToCreate())
            {
                return;
            }

            string username = Username.Trim();
            string password = Password;
            string email    = Email.Trim();

            IsCreatingOnlineAccount = true;

            try
            {
                var resp = await PowerPlannerAuth.CreateAccountAndAddDeviceAsync(
                    username : username,
                    password : password,
                    email : email);

                if (resp == null)
                {
                    ShowMessage(PowerPlannerResources.GetStringOfflineExplanation(), "Error creating account");
                }

                else if (resp.Error != null)
                {
                    ShowMessage(resp.Error, "Error creating account");
                }

                else
                {
                    await FinishCreateAccount(username, resp.LocalToken, resp.Token, resp.AccountId, resp.DeviceId, email);
                }
            }

            catch
            {
                ShowMessage(PowerPlannerResources.GetStringOfflineExplanation(), "Error creating account");
            }

            finally
            {
                IsCreatingOnlineAccount = false;
            }
        }
Beispiel #6
0
        private async void incorrectLocalPassword(AccountDataItem account, string password)
        {
            if (account.IsOnlineAccount)
            {
                try
                {
                    IsCheckingOnlinePassword = true;
                    var resp = await PowerPlannerAuth.CheckUpdatedCredentialsAsync(
                        accountId : account.AccountId,
                        username : account.Username,
                        password : password);

                    if (resp.Error != null)
                    {
                        ShowMessage(resp.Error, "Password error");
                    }

                    else
                    {
                        //update to new password
                        account.LocalToken = resp.LocalToken;
                        account.Token      = resp.Token;
                        await AccountsManager.Save(account);

                        //then log them in
                        ToMainPage(account);
                    }
                }

                catch
                {
                    ShowMessage(PowerPlannerResources.GetString("LoginPage_String_ExplanationIncorrectPasswordAndOffline"), PowerPlannerResources.GetString("LoginPage_String_IncorrectPassword"));
                }

                finally
                {
                    IsCheckingOnlinePassword = false;
                }
            }

            else
            {
                ShowMessage(PowerPlannerResources.GetString("LoginPage_String_ExplanationIncorrectPasswordAndLocalAccount"), PowerPlannerResources.GetString("LoginPage_String_IncorrectPassword"));
            }
        }
        public async void CreateLocalAccount()
        {
            if (DefaultAccountToUpgrade != null)
            {
                // This code should never be hit. If it does get hit, that implies the UI wasn't correctly hiding the option for
                // creating the local account (it should be hidden when upgrading a default account, only allowing online account).
                TelemetryExtension.Current?.TrackException(new Exception("Tried to create local account for default account"));
                return;
            }

            if (!isOkayToCreateLocal())
            {
                return;
            }

            string localToken = PowerPlannerAuth.CreateOfflineAccount(Username, Password);

            await FinishCreateAccount(Username, localToken, null, 0, 0, "");
        }
Beispiel #8
0
        public async void LogIn()
        {
            IsLoggingIn = true;

            try
            {
                string username = Username.Trim();
                string password = Password;

                if (UpdateType == UpdateTypes.NoDevice)
                {
                    var resp = await PowerPlannerAuth.AddDeviceAsync(
                        username : username,
                        password : password);

                    if (resp.Error != null)
                    {
                        SetError(resp.Error);
                        return;
                    }

                    // Set their new device ID and token
                    Account.DeviceId   = resp.DeviceId;
                    Account.LocalToken = resp.LocalToken;
                    Account.Token      = resp.Token;

                    await AccountsManager.Save(Account);

                    // Trigger a sync but don't await it
                    try
                    {
                        var dontWait = SyncLayer.Sync.SyncAccountAsync(Account);
                    }
                    catch { }
                }

                else
                {
                    var resp = await PowerPlannerAuth.CheckUpdatedCredentialsAsync(
                        accountId : Account.AccountId,
                        username : username,
                        password : password);

                    if (resp.Error != null)
                    {
                        SetError(resp.Error);
                        return;
                    }

                    //update their local account
                    Account.Username   = username;
                    Account.LocalToken = resp.LocalToken;
                    Account.Token      = resp.Token;

                    await AccountsManager.Save(Account);

                    // Trigger a sync but don't await it
                    try
                    {
                        var dontWait = SyncLayer.Sync.SyncAccountAsync(Account);
                    }
                    catch { }
                }

                GoBack();
            }

            catch
            {
                SetError("Failed to check your new credentials. Maybe you're offline?");
            }

            finally { IsLoggingIn = false; }
        }
Beispiel #9
0
 private static void SetUpApiKey()
 {
     Website.ApiKey = new ApiKeyCombo(Secrets.PowerPlannerApiKey, Secrets.PowerPlannerApiHashedKey);
     PowerPlannerAuth.SetApiKey(Website.ApiKey.ApiKey, Website.ApiKey.HashedKey);
 }
Beispiel #10
0
        private async void localNotFound(string username)
        {
            string password = getPassword();

            try
            {
                IsLoggingInOnline = true;

                OnlineLoginResponse resp;

                try
                {
                    resp = await PowerPlannerAuth.LoginOnlineAndAddDeviceAsync(username, password);
                }

                catch
                {
                    IsLoggingInOnline = false;
                    throw;
                }

                IsLoggingInOnline = false;

                if (resp.Error != null)
                {
                    ShowMessage(resp.Error, "Error logging in");
                }

                else
                {
                    AccountDataItem account = await CreateAccount(username, resp.LocalToken, resp.Token, resp.AccountId, resp.DeviceId);

                    AccountsManager.SetLastLoginIdentifier(account.LocalAccountId);

                    if (account != null)
                    {
                        TelemetryExtension.Current?.TrackEvent("LoggedInToOnlineAccount");

                        IsSyncingAccount = true;

                        try
                        {
                            var result = await Sync.SyncAccountAsync(account);

                            if (result != null && result.SelectedSemesterId != null && result.SelectedSemesterId.Value != Guid.Empty)
                            {
                                await account.SetCurrentSemesterAsync(result.SelectedSemesterId.Value, uploadSettings : false);
                            }
                        }

                        catch (OperationCanceledException) { }

                        catch { }

                        IsSyncingAccount = false;

                        ToMainPage(account, false); // don't sync since we just did
                    }
                }
            }

            catch (Exception ex)
            {
                Debug.WriteLine("Failed logging into online account: " + ex.ToString());

                ShowMessage(PowerPlannerResources.GetString("LoginPage_String_ExplanationOfflineAndNoLocalAccountFound"), PowerPlannerResources.GetString("LoginPage_String_NoAccountFoundHeader"));
            }

            finally
            {
                IsLoggingInOnline = false;
            }
        }