using CommunityToolkit.Maui.Alerts; using CommunityToolkit.Maui.Core; using System.Drawing; using WorkFlowCheck.MAUI.Helper; using WorkFlowCheck.MAUI.Pages.NFC; using WorkFlowCheck.MAUI.Services.Interfaces; namespace WorkFlowCheck.MAUI.Pages.Security; public partial class LoginPage : BasePage { private IUserService _userService; private ISyncService _syncService; public LoginPage() { InitializeComponent(); SetContent(LoginContent); _userService = MauiProgram.ServiceProvider.GetRequiredService(); _syncService = MauiProgram.ServiceProvider.GetRequiredService(); } private async void OnLoginClicked(object sender, EventArgs e) { LoadingIndicator.IsRunning = true; LoadingIndicator.IsVisible = true; LoginBtn.IsEnabled = false; UsernameEntry.IsEnabled = false; PasswordEntry.IsEnabled = false; try { var response = await _userService.Authenticate(UsernameEntry.Text.ToString(), PasswordEntry.Text.ToString()); if (response != null && response.IsSuccess) { _userService.SetCurrentUser(response.Data); SystemHelper.SystemUserDTO = response.Data; //await _syncService.SyncDatas(); var wFCUser = Newtonsoft.Json.JsonConvert.SerializeObject(response.Data); await SecureStorage.Default.SetAsync("WFCUser", "wFCUser"); await SecureStorage.Default.SetAsync("AuthToken", response.Data.JwtToken); await Shell.Current.GoToAsync("//SyncPage"); } else { var visualOptions = new SnackbarOptions { ActionButtonTextColor = Colors.Yellow, CornerRadius = new CornerRadius(10), Font = Microsoft.Maui.Font.SystemFontOfSize(16), BackgroundColor = Microsoft.Maui.Graphics.Color.Parse("Red"), TextColor = Colors.Yellow }; var snackbar = Snackbar.Make( "Invalid login credentials.", duration: TimeSpan.FromSeconds(10), action: () => Console.WriteLine("Snackbar dismissed"), actionButtonText: "OK", visualOptions: visualOptions ); await snackbar.Show(); } } catch (Exception) { throw; } finally { LoginBtn.IsEnabled = true; LoadingIndicator.IsRunning = false; LoadingIndicator.IsVisible = false; UsernameEntry.IsEnabled = true; PasswordEntry.IsEnabled = true; } } private async void OnLoginNFCClicked(object sender, EventArgs e) { LoadingIndicator.IsRunning = true; LoadingIndicator.IsVisible = true; LoginBtn.IsEnabled = false; LoginNFCBtn.IsEnabled = false; UsernameEntry.IsEnabled = false; PasswordEntry.IsEnabled = false; try { var nFCCode = await NFCWaiter.ShowModalAsync(); if (!string.IsNullOrEmpty(nFCCode)) { var response = await _userService.AuthenticateNFC(nFCCode); if (response != null && response.IsSuccess) { _userService.SetCurrentUser(response.Data); //await _syncService.SyncDatas(); var wFCUser = Newtonsoft.Json.JsonConvert.SerializeObject(response.Data); await SecureStorage.Default.SetAsync("WFCUser", "wFCUser"); await SecureStorage.Default.SetAsync("AuthToken", response.Data.JwtToken); await Shell.Current.GoToAsync("//SyncPage"); } else { var visualOptions = new SnackbarOptions { ActionButtonTextColor = Colors.Yellow, CornerRadius = new CornerRadius(10), Font = Microsoft.Maui.Font.SystemFontOfSize(16), BackgroundColor = Microsoft.Maui.Graphics.Color.Parse("Red"), TextColor = Colors.Yellow }; var snackbar = Snackbar.Make( "Invalid login credentials.", duration: TimeSpan.FromSeconds(10), action: () => Console.WriteLine("Snackbar dismissed"), actionButtonText: "OK", visualOptions: visualOptions ); await snackbar.Show(); } } } catch (Exception) { throw; } finally { LoginBtn.IsEnabled = true; LoginNFCBtn.IsEnabled = true; LoadingIndicator.IsRunning = false; LoadingIndicator.IsVisible = false; UsernameEntry.IsEnabled = true; PasswordEntry.IsEnabled = true; LoginNFCBtn.IsEnabled = true; } } }