@page "/login" @using System.Text.Json; @using System.Text; @using System.Net; @using System.ComponentModel.DataAnnotations; @using phronCare.UIBlazor.Models @using phronCare.UIBlazor.Services.Authorization; @using phronCare.UIBlazor.Models.Login; @inject NavigationManager _navigationManager @inject HttpClient _httpClient @inject ILoginService _iLoginService @inject IToastService toastService
@if (!isSecret) {

Iniciar sesión

@if (codeTwoFactor) {
}
} else {

Restablecer password


}
@code { Login loginModel = new Login(); Login2FA login2FAModel = new Login2FA(); ResetPassword resetPassword = new ResetPassword(); public bool isSecret = false; bool codeTwoFactor = false; string OTPCode = string.Empty; private async Task LoginAsync() { if (codeTwoFactor && login2FAModel.Code.Length > 4) { string requestUrl = $"api/Authentication/login-2FA?code={login2FAModel.Code}&username={login2FAModel.UserName}"; var response = await _httpClient.PostAsync(requestUrl, null); if (response.IsSuccessStatusCode) { var tokenResponse = await response.Content.ReadAsStringAsync(); await _iLoginService.Login(tokenResponse); _navigationManager.NavigateTo("/registration-confirmation"); } else if (response.StatusCode == HttpStatusCode.BadRequest) { var errorResponse = await response.Content.ReadAsStringAsync(); var errorMessages = JsonSerializer.Deserialize(errorResponse); } } else { loginModel.UserName = login2FAModel.UserName; loginModel.Password = login2FAModel.Password; var jsonPayload = JsonSerializer.Serialize(loginModel); var requestContent = new StringContent(jsonPayload, Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync("api/Authentication/login", requestContent); if (response.StatusCode == HttpStatusCode.BadRequest) { var errors = await response.Content.ReadFromJsonAsync>>(); } else if (response.StatusCode == HttpStatusCode.OK) { var tokenResponse = await response.Content.ReadAsStringAsync(); await _iLoginService.Login(tokenResponse); } else if (response.StatusCode == HttpStatusCode.Accepted) { codeTwoFactor = true; } else if (response.StatusCode == HttpStatusCode.Unauthorized) { var tokenResponse = await response.Content.ReadAsStringAsync(); toastService.ShowError(tokenResponse); } } } private async Task ResetPasswordAsync() { if (resetPassword.Password != resetPassword.ConfirmPassword) { toastService.ShowError("Las contraseñas no coinciden. ¡Inténtalo de nuevo!"); } else if (string.IsNullOrEmpty(resetPassword.Token)) { toastService.ShowWarning("Debe ingresar el token enviado por correo."); } else { await ResetingPassword(); } } private async Task ResetingPassword() { var jsonRequest = JsonSerializer.Serialize(resetPassword); var requestContent = new StringContent(jsonRequest, Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync("/api/Authentication/reset-password/", requestContent); var messageResponse = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { toastService.ShowSuccess(messageResponse); ToggleIsSecret(); StateHasChanged(); } else { toastService.ShowError(messageResponse); } } private void ToggleIsSecret() { isSecret = !isSecret; } #region Clases public class ResetPassword { [Required(ErrorMessage = "El campo Nueva Contraseña es obligatorio.")] public string Password { get; set; } = null!; [Compare("Password", ErrorMessage = "Las contraseñas no coinciden.")] public string ConfirmPassword { get; set; } = null!; [Required(ErrorMessage = "El campo Email es obligatorio.")] [EmailAddress(ErrorMessage = "El formato ingresado es invalido")] [DataType(DataType.EmailAddress)] public string Email { get; set; } = null!; [Required(ErrorMessage = "El campo Token es obligatorio.")] public string Token { get; set; } = null!; } #endregion }