Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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));
            }
        }
Exemplo n.º 3
0
        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 "));
        }