Esempio n. 1
0
        /// <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;
        }