public async Task <IActionResult> CreateSystemAccount([FromBody] ApplicationUserVM applicationUser) { try { string response = ""; if (applicationUser == null) { return(BadRequest("Invalid User Data")); } var user = await _userManager.FindByEmailAsync(applicationUser.Email); if (user == null) { user = new ApplicationUser { FirstName = applicationUser.FirstName, LastName = applicationUser.LastName, Email = applicationUser.Email, UserName = applicationUser.Email, DateStamp = DateTime.Now, CompanyId = CreateCompany(applicationUser.CompanyName).CompanyId, CountryId = applicationUser.CountryId, Address = applicationUser.Address, Address2 = applicationUser.Address2, City = applicationUser.City, Zip = applicationUser.Zip, IsSuperAdmin = true, IsAccountOwner = true, RoleId = 1 }; var userResult = await _userManager.CreateAsync(user, applicationUser.Password); if (userResult != IdentityResult.Success) { response = "Account for " + applicationUser.Email + " Could Not Be Created At This Time. Try again. "; return(BadRequest(response)); } else { if (user.RoleId == 1) { await _userManager.AddToRoleAsync(user, "ADMINISTRATOR"); user.IsAdmin = true; } else if (user.RoleId == 2) { await _userManager.AddToRoleAsync(user, "ADMINISTRATOR"); user.IsAdmin = true; } else if (user.RoleId == 3) { await _userManager.AddToRoleAsync(user, "USER"); user.IsUser = true; } else { await _userManager.AddToRoleAsync(user, "GUEST"); user.IsUser = true; } foreach (var bm in _context.BinmakModules.ToList()) { BinmakModuleAccess binmakModule = new BinmakModuleAccess(); binmakModule.BinmakModuleId = bm.BinmakModuleId; binmakModule.Reference = user.Id; _context.BinmakModuleAccesses.Add(binmakModule); } _context.SaveChanges(); var smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, Credentials = new NetworkCredential("*****@*****.**", "Binmak@2020"), Timeout = 20000 }; using (var message = new MailMessage("*****@*****.**", applicationUser.Email) { IsBodyHtml = true, Subject = "Binmak Software System Account Details", Body = "<html><body>Hi " + applicationUser.FirstName + ", <br/>Please use the credentials below in order to log in to Binmak Software System: <br/><br/>Link: http://binmakdev.dedicated.co.za <br/>Domain: " + applicationUser.CompanyName + "<br/>Username: "******" <br/>Password: "******" <br/><br/><p>Binmak</p></body></html></body></html>" }) { smtp.Send(message); } } } else { return(BadRequest("Account already created! Choose different email or sign-in")); } } catch (Exception Ex) { return(BadRequest("Could not create account for: " + applicationUser.Email + " " + Ex.Message)); } return(Ok()); }
public IActionResult UpdateUser([FromBody] BinmakBackEnd.Models.UpdateUser updateUser) { if (updateUser == null) { return(BadRequest("Something bad happened. Make sure user is selected")); } try { ApplicationUser applicationUser = _context.Users.FirstOrDefault(id => id.Id == updateUser.Id); if (updateUser.RoleId == 1) { return(BadRequest("Error. Super administrator can not be added, atleat for now.")); } applicationUser.RoleId = updateUser.RoleId; applicationUser.FirstName = updateUser.FirstName; applicationUser.LastName = updateUser.LastName; //Updating modules List <BinmakModuleAccess> binmakModuleAccesses = _context.BinmakModuleAccesses.Where(id => id.Reference == updateUser.Id).ToList(); _context.BinmakModuleAccesses.RemoveRange(binmakModuleAccesses); _context.SaveChanges(); List <BinmakModule> binmakModules = new List <BinmakModule>(); foreach (int item in updateUser.BinmakModuleId) { binmakModules.Add(_context.BinmakModules.FirstOrDefault(id => id.BinmakModuleId == item)); } foreach (var item in binmakModules) { BinmakModuleAccess binmakModule = new BinmakModuleAccess(); binmakModule.BinmakModuleId = item.BinmakModuleId; binmakModule.Reference = updateUser.Id; _context.BinmakModuleAccesses.Add(binmakModule); } _context.SaveChanges(); List <UserGroup> userGroupsToBeRemoved = _context.UserGroups.Where(id => id.UserId == updateUser.Id).ToList(); _context.RemoveRange(userGroupsToBeRemoved); _context.SaveChanges(); List <UserGroup> userGroups = new List <UserGroup>(); AssetNode assetNodes = _context.AssetNodes.FirstOrDefault(id => id.AssetNodeId == updateUser.AssignedAssetsNode); List <AssetNode> assetNodes1 = new List <AssetNode>(); if (assetNodes.RootAssetNodeId == 0) { assetNodes1 = _context.AssetNodes.Where(id => (id.RootAssetNodeId == assetNodes.AssetNodeId) || (id.AssetNodeId >= assetNodes.AssetNodeId)).ToList(); } else { assetNodes1 = _context.AssetNodes.Where(id => (id.RootAssetNodeId == assetNodes.RootAssetNodeId) && (id.AssetNodeId >= assetNodes.AssetNodeId)).ToList(); } var orderAssetNodes = assetNodes1.OrderBy(id => id.AssetNodeId).ToList(); var lastItem = orderAssetNodes.LastOrDefault(); int rootLatItem = 0; if (lastItem.RootAssetNodeId == 0) { rootLatItem = lastItem.AssetNodeId; } else { rootLatItem = lastItem.RootAssetNodeId; } List <AssetNode> assetNodes2 = assetNodes1.Where(id => (id.RootAssetNodeId == rootLatItem) || (id.AssetNodeId <= updateUser.AssignedAssetsNode)).ToList(); foreach (var item in assetNodes2) { UserGroup userGroup = new UserGroup(); userGroup.RootId = rootLatItem; userGroup.GroupId = _context.Groups.FirstOrDefault(id => id.AssetNodeId == item.AssetNodeId).GroupId; userGroup.UserId = updateUser.Id; _context.UserGroups.Add(userGroup); } _context.SaveChanges(); return(Ok()); } catch (Exception Ex) { return(BadRequest("Something bad happened. " + Ex.Message)); } }
public async Task <IActionResult> Post([FromBody] Register applicationUser) { if (ModelState.IsValid) { try { string response = ""; if (applicationUser == null) { return(BadRequest("Invalid User Data")); } var user = await _userManager.FindByEmailAsync(applicationUser.Email); if (user == null) { user = new ApplicationUser { FirstName = applicationUser.FirstName, LastName = applicationUser.LastName, Email = applicationUser.Email, UserName = applicationUser.Email, DateStamp = DateTime.Now, Reference = applicationUser.Reference, }; var password = CreatePassword(6); var userResult = await _userManager.CreateAsync(user, password); if (applicationUser.RoleId == 2) { await _userManager.AddToRoleAsync(user, "ADMINISTRATOR"); user.IsAdmin = true; } else if (applicationUser.RoleId == 3) { await _userManager.AddToRoleAsync(user, "USER"); user.IsUser = true; } else { await _userManager.AddToRoleAsync(user, "GUEST"); user.IsGuest = true; } _context.Users.Update(user); List <int> tempGI = new List <int>(); tempGI.Add(applicationUser.GroupIds); List <int> groupIds = tempGI; foreach (int groupId in groupIds) { Group group = _context.Groups.FirstOrDefault(id => id.GroupId == groupId); AssetNode accessFromAssetNode = _context.AssetNodes.FirstOrDefault(id => id.AssetNodeId == group.AssetNodeId); List <AssetNode> assetNodes = _context.AssetNodes.Where(id => (id.RootAssetNodeId == accessFromAssetNode.RootAssetNodeId) && (id.AssetNodeId > accessFromAssetNode.AssetNodeId)).ToList(); foreach (var item in assetNodes) { UserGroup userGroup = new UserGroup(); userGroup.GroupId = item.GroupId; userGroup.UserId = user.Id; userGroup.RootId = item.RootAssetNodeId; UserGroup userGroupChecker = _context.UserGroups.FirstOrDefault(id => (id.GroupId == groupId) && (id.UserId == user.Id)); if (userGroupChecker == null) { _context.UserGroups.Add(userGroup); _context.SaveChanges(); } } } foreach (var assignedModule in applicationUser.AssignedBinmakModulesIds) { BinmakModuleAccess binmakModule = new BinmakModuleAccess(); binmakModule.BinmakModuleId = assignedModule; binmakModule.Reference = user.Id; binmakModule.DateStamp = DateTime.Now; _context.BinmakModuleAccesses.Add(binmakModule); } _context.SaveChanges(); if (userResult != IdentityResult.Success) { response = "Account for " + applicationUser.Email + " Could Not Be Created At This Time. Try again. "; return(BadRequest(response)); } else { var smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, Credentials = new NetworkCredential("*****@*****.**", "Binmak@2020"), Timeout = 20000 }; using (var message = new MailMessage("*****@*****.**", applicationUser.Email) { IsBodyHtml = true, Subject = "Binmak Account Details", Body = "<html><body>Hi " + applicationUser.FirstName + ", <br/>Please use the credentials below in order to log in to Binmak System: <br/><br/>Link: http://binmakdev.dedicated.co.za <br/>Username: "******" <br/>Password: "******" <br/><br/><p>Binmak</p></body></html></body></html>" }) { smtp.Send(message); } } } return(Ok()); } catch (Exception Ex) { return(BadRequest("Could not create account for: " + applicationUser.Email + " " + Ex.Message)); } } return(BadRequest("Model not valid ")); }