diff --git a/src/WorkFlowCheck.API/Controllers/UserController.cs b/src/WorkFlowCheck.API/Controllers/UserController.cs index b3fbe6c..6922edd 100644 --- a/src/WorkFlowCheck.API/Controllers/UserController.cs +++ b/src/WorkFlowCheck.API/Controllers/UserController.cs @@ -183,7 +183,7 @@ namespace WorkFlowCheck.API.Controllers try { var response = await _userService.Authenticate2F1(userSimpleDTO.UserName, userSimpleDTO.Password); - if (response != null) + if (!string.IsNullOrEmpty(response)) { retVal.IsSuccess = true; retVal.Data = response; @@ -222,9 +222,9 @@ namespace WorkFlowCheck.API.Controllers } try { - var userDTO_Response = await _userService.Authenticate2F2(user2FADTO.UserName, - user2FADTO.Password, - user2FADTO.Code, + var userDTO_Response = await _userService.Authenticate2F2(user2FADTO.UserName, + user2FADTO.Password, + user2FADTO.Code, user2FADTO.Token2FA); if (userDTO_Response != null) { diff --git a/src/WorkFlowCheck.Common/DTO/User2FADTO.cs b/src/WorkFlowCheck.Common/DTO/User2FADTO.cs index 374da91..5213682 100644 --- a/src/WorkFlowCheck.Common/DTO/User2FADTO.cs +++ b/src/WorkFlowCheck.Common/DTO/User2FADTO.cs @@ -8,7 +8,7 @@ namespace WorkFlowCheck.Common.DTO { public class User2FADTO { - public int Id { get; set; } + public string UserName { get; set; } = null!; public string Password { get; set; } = null!; public string Code { get; set; } = null!; diff --git a/src/WorkFlowCheck.Web/Pages/Account/Login.cshtml b/src/WorkFlowCheck.Web/Pages/Account/Login.cshtml index 65ba13e..7e94936 100644 --- a/src/WorkFlowCheck.Web/Pages/Account/Login.cshtml +++ b/src/WorkFlowCheck.Web/Pages/Account/Login.cshtml @@ -2,6 +2,8 @@ @model WorkFlowCheck.Web.Pages.Account.LoginModel @using WorkFlowCheck.Common.Helper @using WorkFlowCheck.Common.DTO +@using Microsoft.AspNetCore.Antiforgery +@inject IAntiforgery Antiforgery @{ Layout = null; ViewData["Title"] = "Bejelentkezés"; @@ -27,20 +29,30 @@ }
+ +
- - - + + +
- - - + + +
- -
- +
+ + + +
+
+
+ +
+
+
@@ -50,7 +62,91 @@ + + + + diff --git a/src/WorkFlowCheck.Web/Pages/Account/Login.cshtml.cs b/src/WorkFlowCheck.Web/Pages/Account/Login.cshtml.cs index d11e412..9cb16b4 100644 --- a/src/WorkFlowCheck.Web/Pages/Account/Login.cshtml.cs +++ b/src/WorkFlowCheck.Web/Pages/Account/Login.cshtml.cs @@ -14,7 +14,8 @@ namespace WorkFlowCheck.Web.Pages.Account private readonly IUserService _userService; [BindProperty] - public UserDTO UserSimpleDTO { get; set; } + public User2FADTO User2FADTO { get; set; } + public string ErrorMessage { get; set; } public LoginModel(IUserService userService) @@ -25,14 +26,31 @@ namespace WorkFlowCheck.Web.Pages.Account public void OnGet() { } - public async Task OnPostAsync() + public async Task OnPostLogin2F1([FromBody] UserSimpleDTO userSimpleDTO) { - var response = await _userService.Authenticate(UserSimpleDTO.UserName, UserSimpleDTO.Password); + var response = await _userService.Authenticate2F1(userSimpleDTO.UserName, userSimpleDTO.Password); if (response.IsSuccess) { - - var token = response.Data.JwtToken; + return new JsonResult(new { success = true, data = response.Data }); + } + else + { + ErrorMessage = "Hibás bejelentkezés!"; + return new JsonResult(new { success = false }); + } + } + public async Task OnPostLogin2F2([FromBody] User2FADTO user2FADTO) + { + var response = await _userService.Authenticate2F2(user2FADTO.UserName, + user2FADTO.Password, + user2FADTO.Code, + user2FADTO.Token2FA); + + if (response.IsSuccess) + { + + var token = response.Data.JwtToken; Response.Cookies.Append("AuthToken", token, new CookieOptions { @@ -42,11 +60,11 @@ namespace WorkFlowCheck.Web.Pages.Account Expires = DateTimeOffset.UtcNow.AddMinutes(30) }); - return RedirectToPage("/Index"); // vagy ahová szeretnéd + return new JsonResult(new { success = true }); } ErrorMessage = "Hibás bejelentkezés!"; - return Page(); + return new JsonResult(new { success = false }); } } } diff --git a/src/WorkFlowCheck.Web/Services/Interfaces/IUserService.cs b/src/WorkFlowCheck.Web/Services/Interfaces/IUserService.cs index cd5761e..bb6becd 100644 --- a/src/WorkFlowCheck.Web/Services/Interfaces/IUserService.cs +++ b/src/WorkFlowCheck.Web/Services/Interfaces/IUserService.cs @@ -8,6 +8,8 @@ namespace WorkFlowCheck.Web.Services.Interfaces Task> GetAllUsers(); Task> UpdateUser(UserDTO userDTO); Task> Authenticate(string username, string password); + Task> Authenticate2F1(string username, string password); + Task> Authenticate2F2(string userName, string password, string code, string token2FA); Task DeleteUser(int id); Task GetRole(int id); diff --git a/src/WorkFlowCheck.Web/Services/UserService.cs b/src/WorkFlowCheck.Web/Services/UserService.cs index 021bae2..eccde4c 100644 --- a/src/WorkFlowCheck.Web/Services/UserService.cs +++ b/src/WorkFlowCheck.Web/Services/UserService.cs @@ -55,7 +55,7 @@ namespace WorkFlowCheck.Web.Services } return retVal; } - public async Task> UpdateUser(UserDTO userDTO) + public async Task> UpdateUser(UserDTO userDTO) { try { @@ -94,9 +94,9 @@ namespace WorkFlowCheck.Web.Services { UserName = username, Password = password, - + }; - + using (HttpResponseMessage httpResponseMessage = await _httpClient.PostAsJsonAsync(endpoint, userSimpleDTO)) { @@ -120,6 +120,81 @@ namespace WorkFlowCheck.Web.Services }; } } + public async Task> Authenticate2F1(string username, string password) + { + try + { + // Az API végpont meghatározása + string endpoint = $"{_httpClient.BaseAddress}api/User/Authenticate2F1"; + + var userSimpleDTO = new UserSimpleDTO() + { + UserName = username, + Password = password, + + }; + + + using (HttpResponseMessage httpResponseMessage = await _httpClient.PostAsJsonAsync(endpoint, userSimpleDTO)) + { + httpResponseMessage.EnsureSuccessStatusCode(); + + var jsonString = await httpResponseMessage.Content.ReadAsStringAsync(); + var response = JsonConvert.DeserializeObject>(jsonString); + + return response ?? new ApiResponseDTO + { + IsSuccess = false, + }; + } + } + catch (Exception ex) + { + // Hiba visszaadása + return new ApiResponseDTO + { + IsSuccess = false + }; + } + } + public async Task> Authenticate2F2(string userName, string password, string code, string token2FA) + { + try + { + + string endpoint = $"{_httpClient.BaseAddress}api/User/Authenticate2F2"; + + var userSimpleDTO = new User2FADTO() + { + UserName = userName, + Password = password, + Code = code, + Token2FA = token2FA + }; + + + using (HttpResponseMessage httpResponseMessage = await _httpClient.PostAsJsonAsync(endpoint, userSimpleDTO)) + { + httpResponseMessage.EnsureSuccessStatusCode(); + + var jsonString = await httpResponseMessage.Content.ReadAsStringAsync(); + var response = JsonConvert.DeserializeObject>(jsonString); + + return response ?? new ApiResponseDTO + { + IsSuccess = false, + }; + } + } + catch (Exception ex) + { + + return new ApiResponseDTO + { + IsSuccess = false + }; + } + } public async Task DeleteUser(int id) { string endpoint = $"{_httpClient.BaseAddress}api/User/DeleteUser/{id}"; @@ -326,7 +401,7 @@ namespace WorkFlowCheck.Web.Services } return retVal; } - public async Task> GetAllRoleCheckListTemplates() + public async Task> GetAllRoleCheckListTemplates() { string endpoint = $"{_httpClient.BaseAddress}api/User/GetAllRoleCheckListTemplateHeaders"; var retVal = new List(); @@ -446,5 +521,7 @@ namespace WorkFlowCheck.Web.Services }; } } + + } }