From 5db84d96a2cdec0be6a29c939a1d92f2b9a304cd Mon Sep 17 00:00:00 2001 From: Mohd Ariff Date: Tue, 10 Dec 2024 15:27:21 +0800 Subject: [PATCH] update --- Areas/Identity/Pages/Account/Login.cshtml | 16 +- Controllers/API/AdminAPI.cs | 57 ++++-- Controllers/IdentityController.cs | 29 +++ Views/Identity/RoleAssignment.cshtml | 207 ++++++++++++++++++++++ 4 files changed, 290 insertions(+), 19 deletions(-) create mode 100644 Controllers/IdentityController.cs create mode 100644 Views/Identity/RoleAssignment.cshtml diff --git a/Areas/Identity/Pages/Account/Login.cshtml b/Areas/Identity/Pages/Account/Login.cshtml index 2ab7656..4bea835 100644 --- a/Areas/Identity/Pages/Account/Login.cshtml +++ b/Areas/Identity/Pages/Account/Login.cshtml @@ -136,11 +136,21 @@ if (!response.ok) { throw new Error('Name module already exist'); } - alert('Module information saved successfully'); + return response.json(); + }) + .then(data => { + console.log(data); + if (data.redirectUrl) { + window.location.href = data.redirectUrl; + } + else + { + console.error('Login failed:', data); + } }) .catch(error => { - console.error('There was a problem with the update operation:', error); - alert('Failed to save data: ' + error.message); + console.error('Error during LDAP login:', error); + alert('Failed to login: ' + error.message); }); }, fetchControllerMethodList() { diff --git a/Controllers/API/AdminAPI.cs b/Controllers/API/AdminAPI.cs index 70cb4af..91fe2f1 100644 --- a/Controllers/API/AdminAPI.cs +++ b/Controllers/API/AdminAPI.cs @@ -16,17 +16,19 @@ namespace PSTW_CentralSystem.Controllers.API public class AdminAPI : Controller { - private readonly ILogger _logger; + private readonly ILogger _logger; private readonly IdentityDBContext _authDbContext; private readonly UserManager _userManager; + private readonly SignInManager _signInManager; // Communication Key for API. Not API authentication key private readonly string _commKey = "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF4NW42anlkNlpTYzZNSE1Zem9qaApUbldpYTIra2pud2ZNbVhpSWlyK0RadjM2cEVGMGhRUWFLaWpaMWtyMGNiT25Ha2d2QnNwTzNiYkFua0E3SWwzCk4zM3NNYWdQV0JOQzZyVm1jT04zNEhDSWJCM0hvQXFYQUtkSHFUOGZneklMRzFhRzdxK2h4RDZhZzZsemhTMnEKdDA1bHdNc0hONWpOdmVNNnFWalRnTVB4aEFOMUhnUTkrd1lRWFh5bnZYYUo5OUNySHBqS21WdUt2VUh6WXdlRwp6SnBtYXZOclc4bE9oM1lMeVNuUVU5bjRrdURubGc1OWNHeUtKbzJ2YUxZbll4MkR1ZDNabzBXMHRMWGd0dlQyCjVXdVFsY0NVbldvaVpBV1JBTGI3anRpcTF0MGY5eVBiV2gxYXpMMjFoL3QvckJUMXNCL2FQd2kzRCt3MnBUR00KeVFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg=="; - public AdminAPI(ILogger logger, IdentityDBContext authDbContext, UserManager userManager) + public AdminAPI(ILogger logger, IdentityDBContext authDbContext, UserManager userManager, SignInManager signInManager) { _logger = logger; _authDbContext = authDbContext; _userManager = userManager; + _signInManager = signInManager; } [HttpPost("GetClassAndMethodInformation")] @@ -128,6 +130,7 @@ namespace PSTW_CentralSystem.Controllers.API public required string username { get; set; } public required string password { get; set; } } + [HttpPost("LdapLogin")] public async Task LdapLogin([FromBody] LdapLoginCredential ldapLoginInfo) { @@ -146,10 +149,6 @@ namespace PSTW_CentralSystem.Controllers.API byte[] rsaData = rsaBase.Encrypt(Encoding.UTF8.GetBytes(jsonData), RSAEncryptionPadding.Pkcs1); string rsaDataBase64 = Convert.ToBase64String(rsaData); - Console.WriteLine("Sending data (RSA-Encrypted JSON as Base64)"); - Console.WriteLine(rsaDataBase64); - Console.WriteLine(""); - string ldapUrl = "http://192.168.11.231/api/ldap/"; string ldapUrlResult = ""; @@ -158,11 +157,11 @@ namespace PSTW_CentralSystem.Controllers.API try { StringContent rsaDataB64HttpContent = new(rsaDataBase64, Encoding.UTF8); - HttpResponseMessage ldapUrlResponse = httpClient.PostAsync(ldapUrl, rsaDataB64HttpContent).Result; + HttpResponseMessage ldapUrlResponse = await httpClient.PostAsync(ldapUrl, rsaDataB64HttpContent); ldapUrlResponse.EnsureSuccessStatusCode(); if (ldapUrlResponse.IsSuccessStatusCode) { - ldapUrlResult = ldapUrlResponse.Content.ReadAsStringAsync().Result; + ldapUrlResult = await ldapUrlResponse.Content.ReadAsStringAsync(); } } catch (Exception e) @@ -171,26 +170,52 @@ namespace PSTW_CentralSystem.Controllers.API } } - - userLdapInfo userInfo = JsonSerializer.Deserialize(ldapUrlResult)!; - - if (userInfo.Authenticated != "True") + userLdapInfo userLdapInfo = JsonSerializer.Deserialize(ldapUrlResult)!; + userInfo userInfo = userLdapInfo.UserInfo; + + if (!userLdapInfo.Authenticated) { return BadRequest(new { Message = "Login Failed" }); } UserModel ldapuser = new UserModel() { - UserName = userInfo.UserInfo.Email, - Email = userInfo.UserInfo.Email, + FullName = userInfo.Username, + UserName = userInfo.Email, + NormalizedUserName = userInfo.Email.ToUpper(), + Email = userInfo.Email, + NormalizedEmail = userInfo.Email.ToUpper(), + EmailConfirmed = true, + PhoneNumberConfirmed = false, + TwoFactorEnabled = false, + LockoutEnabled = false, + AccessFailedCount = 0, + }; + var existUser = await doUserExists(ldapuser.Email); + if (existUser == null) + { + await _userManager.CreateAsync(ldapuser); + //await _userManager.SetLockoutEnabledAsync(ldapuser, false); + //return RedirectToAction("AssignRoleAfterLdap", "IdentityController"); + return Ok(new { RedirectUrl = Url.Action("RoleAssignment", "Identity") }); + }; - return Json(userInfo); + await _signInManager.SignInAsync(existUser, false); + //return RedirectToAction("Index", "HomeController"); + return Ok(new { RedirectUrl = Url.Action("Index", "Home") }); + + } + + public async Task doUserExists(string username) + { + var user = await _userManager.FindByNameAsync(username); + return user != null ? user : null; } class userLdapInfo() { - public required string Authenticated { get; set; } + public required bool Authenticated { get; set; } public required userInfo UserInfo { get; set; } } class userInfo() diff --git a/Controllers/IdentityController.cs b/Controllers/IdentityController.cs new file mode 100644 index 0000000..4354a34 --- /dev/null +++ b/Controllers/IdentityController.cs @@ -0,0 +1,29 @@ +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using PSTW_CentralSystem.DBContext; +using PSTW_CentralSystem.Models; + +namespace PSTW_CentralSystem.Controllers +{ + + public class IdentityController: Controller + { + private readonly ILogger _logger; + private readonly IdentityDBContext _authDbContext; + private readonly UserManager _userManager; + + public IdentityController(ILogger logger, IdentityDBContext authDbContext, UserManager userManager) + { + _logger = logger; + _authDbContext = authDbContext; + _userManager = userManager; + } + + public async Task RoleAssignment() + { + var thisUser = await _userManager.GetUserAsync(User); + return View(); + } + } + +} diff --git a/Views/Identity/RoleAssignment.cshtml b/Views/Identity/RoleAssignment.cshtml new file mode 100644 index 0000000..53b6681 --- /dev/null +++ b/Views/Identity/RoleAssignment.cshtml @@ -0,0 +1,207 @@ +@* + For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 +*@ +@{ + ViewData["Title"] = "Role Assignment"; + Layout = "~/Views/Shared/_Layout.cshtml"; +} + +

+ @* Create New *@ +

+
+
+
+
+
+

Latest Posts

+
+
+ +
+
+
+
+
+
+
+ + +
+@section Scripts { + @{ + await Html.RenderPartialAsync("_ValidationScriptsPartial"); + } + +}