/// <summary> /// Inicia sessão de um Utilizador. /// <para>Chama AcquireToken para obter o Token de inicio de sessão.</para> /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void ButtonEntrar_Click(object sender, RoutedEventArgs e) { AuthenticationResult authResult = null; IPublicClientApplication app = App.PublicClientApp; IEnumerable <IAccount> accounts = (await app.GetAccountsAsync()).ToList(); IAccount firstAccount = accounts.FirstOrDefault(); try { authResult = await app.AcquireTokenSilent(_scopes, firstAccount).ExecuteAsync(); } catch (MsalUiRequiredException ex) { // A MsalUiRequiredException happened on AcquireTokenSilent. // This indicates you need to call AcquireTokenInteractive to acquire a token Console.WriteLine(@"MsalUiRequiredException: " + ex.Message); try { authResult = await app.AcquireTokenInteractive(_scopes).WithAccount(accounts.FirstOrDefault()) .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle) .WithPrompt(Prompt.SelectAccount).ExecuteAsync(); } catch (MsalException msalex) { // Erro ao adquirir Token MessageBox.Show("Erro ao adquirir Token: " + msalex, "DespesasWPF: MainWindow.ButtonEntrar_Click"); } } catch (Exception ex) { // Erro ao adquirir Token Silenciosamente MessageBox.Show("Erro ao adquirir Token Silenciosamente: " + ex, "DespesasWPF: MainWindow.ButtonEntrar_Click"); } if (authResult == null) { return; } string nomeTemp = await GetHttpContentWithToken(GraphApiEndpoint, authResult.AccessToken); string emailUtilizadorLigadoTemp = authResult.Account.Username; UtilizadorLigado.EmailSha = Hash.GetHashSha256(emailUtilizadorLigadoTemp); Api = new Api(UtilizadorLigado.EmailSha); // Get rates EuroEDolar = Api.GetUsdRatesToEuro(); DolarEEuro = Api.GetEuroRatesToUsd(); if (!Api.HasUser()) { await SoapClient.AddUserAsync(UtilizadorLigado.EmailSha, "EUR"); } UtilizadorLigado.GetUserFromDb(); Api.GetExpenses().ForEach(despesa => { Despesas.Add(despesa); }); // Preenchimento de dados na MainWindow LabelUtilizadorLigado.Content = ""; LabelUtilizadorLigado.Content += nomeTemp + " (" + emailUtilizadorLigadoTemp + ")"; // Preencher e organizar a tabela de Despesas DespesasTable.ItemsSource = Despesas; CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(DespesasTable.ItemsSource); view.SortDescriptions.Add(new SortDescription("Data", ListSortDirection.Descending)); // Calcular e mostrar o total foreach (Expense expense in Despesas) { TotalEur += expense.ValEur; TotalUsd += expense.ValUsd; } if (UtilizadorLigado.MoedaPadrao == "EUR") { RadioButtonEur.IsChecked = true; LabelTotal.Content = TotalEur + "€"; } else { RadioButtonUsd.IsChecked = true; LabelTotal.Content = TotalUsd + "$"; } EntrarPanel.Visibility = Visibility.Collapsed; DespesasPanel.Visibility = Visibility.Visible; }