public async Task <ActionResult> Add(Admin admin)
        {
            if (ModelState.IsValid)
            {
                var userRepository = new ApplicationUserRepository <Admin>();
                var roleRepository = new ApplicationRoleRepository();
                var role           = roleRepository.GetByNameAsync("admin");
                var isUserExist    = userRepository.IsUserExistAsync(admin.UserName);

                if (await isUserExist)
                {
                    TempData["error"] = "Account with this name already exist!";
                    return(View("Create", admin));
                }

                Admin _admin = new Admin()
                {
                    UserName     = admin.UserName,
                    Email        = admin.Email,
                    Role         = await role,
                    PasswordHash = ApplicationPasswordHasher.HashPasword(admin.PasswordHash),
                    FirstName    = admin.FirstName,
                    LastName     = admin.LastName
                };

                new ApplicationUserRepository <Admin>().Create(_admin);
                TempData["success"] = "Admin account was added";
            }
            else
            {
                return(View("Create", admin));
            }

            return(RedirectToAction("Admins"));
        }
Exemplo n.º 2
0
        public static ApplicationRoleRepository GetApplicationRoleRepository(IUnitOfWork unitOfWork)
        {
            var repository = new ApplicationRoleRepository();

            repository.UnitOfWork = unitOfWork;
            return(repository);
        }
        public void TestApplicationRoleWithNewRoleDoesNotSave()
        {
            ApplicationRole applicationRole = null;

            try
            {
                #region Arrange
                applicationRole      = GetValid(9);
                applicationRole.Role = new Role();
                #endregion Arrange

                #region Act
                ApplicationRoleRepository.DbContext.BeginTransaction();
                ApplicationRoleRepository.EnsurePersistent(applicationRole);
                ApplicationRoleRepository.DbContext.CommitTransaction();
                #endregion Act
            }
            catch (Exception ex)
            {
                Assert.IsNotNull(applicationRole);
                Assert.IsNotNull(ex);
                Assert.AreEqual("object references an unsaved transient instance - save the transient instance before flushing. Type: Catbert4.Core.Domain.Role, Entity: Catbert4.Core.Domain.Role", ex.Message);
                throw;
            }
        }
Exemplo n.º 4
0
        public IActionResult EditUser(int id)
        {
            ApplicationUserRepository userRepo;
            ApplicationRoleRepository roleRepo;
            ApplicationUserViewModel  view = new ApplicationUserViewModel()
            {
                User = null, Roles = null
            };

            try
            {
                userRepo = new ApplicationUserRepository(settings, logger, dbc);
                roleRepo = new ApplicationRoleRepository(settings, logger, dbc);

                view.User = userRepo.FindByPKView(new PrimaryKey()
                {
                    Key = id, IsIdentity = true
                });
                view.Roles = roleRepo.FindAll();

                // Update the RoleBadges
                foreach (ApplicationUserClaim uc in view.User.Claims.Where(uc => uc.UserId == view.User.Id && uc.ClaimType == ClaimTypes.Role))
                {
                    view.User.RoleBadges += String.Format("{0}-{1}|", uc.Id, uc.ClaimValue);
                }
            }
            catch (Exception ex)
            {
                throw (Exception)Activator.CreateInstance(ex.GetType(), ex.Message + ex.StackTrace);
            }

            return(View("EditUser", view));
        }
        public void TestApplicationRoleDeleteDoesNotCascadeToRole()
        {
            #region Arrange
            RoleRepository.DbContext.BeginTransaction();
            LoadRoles(3);
            RoleRepository.DbContext.CommitTransaction();
            var applicationRole = GetValid(9);
            applicationRole.Role = RoleRepository.GetById(2);

            var applicationRoleCount = ApplicationRoleRepository.Queryable.Count();

            ApplicationRoleRepository.DbContext.BeginTransaction();
            ApplicationRoleRepository.EnsurePersistent(applicationRole);
            ApplicationRoleRepository.DbContext.CommitTransaction();

            Assert.IsNotNull(applicationRole.Role);
            Assert.IsFalse(applicationRole.IsTransient());
            Assert.IsTrue(applicationRole.IsValid());
            Assert.AreEqual(applicationRoleCount + 1, ApplicationRoleRepository.Queryable.Count());
            #endregion Arrange

            #region Act
            ApplicationRoleRepository.DbContext.BeginTransaction();
            ApplicationRoleRepository.Remove(applicationRole);
            ApplicationRoleRepository.DbContext.CommitTransaction();
            #endregion Act

            #region Assert
            Assert.AreEqual(applicationRoleCount, ApplicationRoleRepository.Queryable.Count());
            Assert.AreEqual(3, RoleRepository.Queryable.Count());
            #endregion Assert
        }
Exemplo n.º 6
0
        public UnitOfWork(ApplicationDbContext context)
        {
            _context = context;

            User     = new ApplicationUserRepository(context);
            Role     = new ApplicationRoleRepository(context);
            UserRole = new ApplicationUserRoleRepository(context);
        }
        //private System.Web.Security.SqlRoleProvider sqlManager;

        public UsersController()
        {
            //sqlManager = new System.Web.Security.SqlRoleProvider();
            context = new ApplicationDbContext();
            applicationUserRepository = new ApplicationUserRepository(context);
            applicationRoleRepository = new ApplicationRoleRepository(context);
            raceRepository            = new RaceRepository(context);
            unitOfWork  = new UnitOfWork(context);
            userStore   = new UserStore <ApplicationUser>(context);
            userManager = new UserManager <ApplicationUser>(userStore);
        }
Exemplo n.º 8
0
        public async Task <ActionResult> RegisterTester(Tester tester)
        {
            ModelState.Remove(nameof(tester.FirstName));
            ModelState.Remove(nameof(tester.LastName));

            if (ModelState.IsValid)
            {
                var userRepository = new ApplicationUserRepository <ApplicationUser>();
                var roleRepository = new ApplicationRoleRepository();
                var role           = roleRepository.GetByNameAsync("tester");
                var isUserExist    = userRepository.IsUserExistAsync(tester.UserName);

                if (await isUserExist)
                {
                    TempData["error"] = "Account with this name already exist!";
                    return(View("Tester"));
                }

                Tester _tester = new Tester()
                {
                    UserName     = tester.UserName,
                    Email        = tester.Email,
                    Role         = await role,
                    PasswordHash = ApplicationPasswordHasher.HashPasword(tester.PasswordHash)
                };

                _tester.Address = new Address()
                {
                    User = _tester
                };
                new ApplicationUserRepository <Tester>().Create(_tester);

                ClaimsIdentity identity = await AppUserManager.CreateIdentityAsync(_tester, DefaultAuthenticationTypes.ApplicationCookie);

                identity.AddClaim(new Claim(ClaimTypes.Role, _tester.Role.Name));

                AuthManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
                AuthManager.SignIn(new AuthenticationProperties()
                {
                    AllowRefresh = true,
                    IsPersistent = false,
                    ExpiresUtc   = DateTime.UtcNow.AddMinutes(10)
                }, identity);

                return(RedirectToAction("Index", "Home", new { area = "Testing" }));
            }

            return(View("Tester"));
        }
        public ActionResult Delete(IList <Admin> rows)
        {
            var adminRepo = new ApplicationUserRepository <Admin>();
            var roleRepo  = new ApplicationRoleRepository();

            foreach (var row in rows)
            {
                row.Role = roleRepo.GetByName("admin");
                adminRepo.Delete(row);
            }

            TempData["success"] = "User/s was deleted!";

            return(View("Admins"));
        }
Exemplo n.º 10
0
        public IActionResult Roles()
        {
            ApplicationRoleRepository     roleRepo;
            ICollection <ApplicationRole> roles;

            try
            {
                roleRepo = new ApplicationRoleRepository(settings, logger, dbc);
                roles    = roleRepo.FindAll();
            }
            catch (Exception ex)
            {
                throw (Exception)Activator.CreateInstance(ex.GetType(), ex.Message + ex.StackTrace);
            }

            return(View("Roles", roles));
        }
Exemplo n.º 11
0
        public async Task <ActionResult> RegisterCompany(Company company)
        {
            ModelState.Remove(nameof(company.Rating));
            ModelState.Remove(nameof(company.Reviews));
            ModelState.Remove(nameof(company.CompanyName));

            if (ModelState.IsValid)
            {
                var userRepository = new ApplicationUserRepository <ApplicationUser>();
                var roleRepository = new ApplicationRoleRepository();
                var role           = roleRepository.GetByNameAsync("company");
                var isUserExist    = userRepository.IsUserExistAsync(company.UserName);

                if (await isUserExist)
                {
                    TempData["error"] = "Account with this name already exist!";
                    return(View("Company"));
                }

                Company _company = new Company()
                {
                    UserName     = company.UserName,
                    Email        = company.Email,
                    Role         = await role,
                    PasswordHash = ApplicationPasswordHasher.HashPasword(company.PasswordHash),
                    Address      = new Address()
                };

                new ApplicationUserRepository <Company>().Create(_company);

                ClaimsIdentity identity = await AppUserManager.CreateIdentityAsync(_company, DefaultAuthenticationTypes.ApplicationCookie);

                AuthManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
                AuthManager.SignIn(new AuthenticationProperties()
                {
                    AllowRefresh = true,
                    IsPersistent = false,
                    ExpiresUtc   = DateTime.UtcNow.AddMinutes(10)
                }, identity);

                return(RedirectToAction("Index", "Home", new { area = "Testing" }));
            }

            return(View("Company"));
        }
        public void TestApplicationRoleWithMinValueSaves()
        {
            #region Arrange
            var applicationRole = GetValid(9);
            applicationRole.Level = int.MinValue;
            #endregion Arrange

            #region Act
            ApplicationRoleRepository.DbContext.BeginTransaction();
            ApplicationRoleRepository.EnsurePersistent(applicationRole);
            ApplicationRoleRepository.DbContext.CommitTransaction();
            #endregion Act

            #region Assert
            Assert.AreEqual(int.MinValue, applicationRole.Level);
            Assert.IsFalse(applicationRole.IsTransient());
            Assert.IsTrue(applicationRole.IsValid());
            #endregion Assert
        }
        public void TestApplicationRoleWithNullRoleSaves()
        {
            #region Arrange
            var applicationRole = GetValid(9);
            applicationRole.Role = null;
            #endregion Arrange

            #region Act
            ApplicationRoleRepository.DbContext.BeginTransaction();
            ApplicationRoleRepository.EnsurePersistent(applicationRole);
            ApplicationRoleRepository.DbContext.CommitTransaction();
            #endregion Act

            #region Assert
            Assert.IsNull(applicationRole.Role);
            Assert.IsFalse(applicationRole.IsTransient());
            Assert.IsTrue(applicationRole.IsValid());
            #endregion Assert
        }
Exemplo n.º 14
0
        public UserService(IRepository <ApplicationUser> clientRepository)
        {
            _clientRepository = clientRepository;
            ApplicationContext db = new ApplicationContext("DefaultConnection");

            var provider = new DpapiDataProtectionProvider("Sample");

            UserManager = new ApplicationUserRepository(new UserStore <ApplicationUser,
                                                                       CustomRole, int, CustomUserLogin, CustomUserRole, CustomUserClaim>(db));
            UserManager.UserTokenProvider = new DataProtectorTokenProvider <ApplicationUser, int>(provider.Create("EmailConfirmation"));
            RoleManager = new ApplicationRoleRepository(new RoleStore <ApplicationRole>(db));

            var currentUser = _clientRepository.Get(HttpContext.Current.User.Identity.GetUserId <int>());

            if (!ReferenceEquals(currentUser, null))
            {
                HttpContext.Current.Session["isPerformer"] = currentUser.IsPerformer;
                HttpContext.Current.Session["adminStatus"] = currentUser.AdminStatus;
            }
        }
Exemplo n.º 15
0
 public UnitOfWork(ApplicationDbContext db)
 {
     _db                = db;
     Wehicle            = new WehicleRepository(_db);
     BusStop            = new BusStopRepository(_db);
     LineName           = new LineNameRepository(_db);
     BusStopList        = new BusStopListRepository(_db);
     Holidays           = new HolidaysRepository(_db);
     Messages           = new MessagesRepository(_db);
     OperatingDays      = new OperatingDaysRepository(_db);
     TicketPrice        = new TicketPriceRepository(_db);
     ArrivalsDepartures = new ArrivalDeparturesRepository(_db);
     Timetable          = new TimetableRepository(_db);
     BusRoute           = new BusRouteRepository(_db);
     Tickets            = new TicketsRepository(_db);
     Payment            = new PaymentRepository(_db);
     ApplicationUser    = new ApplicationUserRepository(_db);
     ApplicationRole    = new ApplicationRoleRepository(_db);
     BankAccount        = new BankAccountRepository(_db);
 }
Exemplo n.º 16
0
        public ActionResult Update(Admin admin)
        {
            ModelState.Remove(nameof(admin.PasswordConfirmationHash));
            if (ModelState.IsValid)
            {
                var userRepository = new ApplicationUserRepository <Admin>();

                var roleRepository = new ApplicationRoleRepository();
                var role           = roleRepository.GetByName("admin");
                admin.Role = role;

                userRepository.Update(admin);
                TempData["success"] = "Admin account was edited";
            }
            else
            {
                return(View("Edit", admin));
            }

            return(RedirectToAction("Admins"));
        }
        public void TestApplicationRoleWithExistingRoleSaves()
        {
            #region Arrange
            RoleRepository.DbContext.BeginTransaction();
            LoadRoles(1);
            RoleRepository.DbContext.CommitTransaction();
            var applicationRole = GetValid(9);
            applicationRole.Role = RoleRepository.GetById(1);
            #endregion Arrange

            #region Act
            ApplicationRoleRepository.DbContext.BeginTransaction();
            ApplicationRoleRepository.EnsurePersistent(applicationRole);
            ApplicationRoleRepository.DbContext.CommitTransaction();
            #endregion Act

            #region Assert
            Assert.IsNotNull(applicationRole.Role);
            Assert.AreEqual("Name1", applicationRole.Role.Name);
            Assert.IsFalse(applicationRole.IsTransient());
            Assert.IsTrue(applicationRole.IsValid());
            #endregion Assert
        }
 public ApplicationRoleRepositoryTests(PubsContextInMemoryDatabaseFixture fixture)
 {
     _repository = new ApplicationRoleRepository(fixture.PubsDbContext);
 }
Exemplo n.º 19
0
 public RoleService(ApplicationRoleRepository _repo)
 {
     repo = _repo;
 }
 public ApplicationRoleController()
 {
     context = new ApplicationDbContext();
     applicationRoleRepository = new ApplicationRoleRepository(context);
     unitOfWork = new UnitOfWork(context);
 }
Exemplo n.º 21
0
        public async Task <ActionResult> EditUser(ApplicationUserViewModel view)
        {
            ApplicationUserRepository      userRepo;
            ApplicationRoleRepository      roleRepo;
            ApplicationUserClaimRepository userClaimRepo;
            ApplicationAuditLogRepository  logRepo;
            ApplicationUserClaim           userClaim = null;
            IList <string> currentRoles         = null;
            string         role                 = String.Empty;
            int            claimId              = 0;
            int            rows                 = 0;
            const string   issuer               = "Local Authority";
            const string   claimTypesDepartment = "Department";
            bool           isCurrentUser        = view.User.UserName.ToUpper() == HttpContext.User.Identity.Name.ToUpper() ? true : false;

            try
            {
                userRepo      = new ApplicationUserRepository(settings, logger, dbc);
                userClaimRepo = new ApplicationUserClaimRepository(settings, logger, dbc);
                roleRepo      = new ApplicationRoleRepository(settings, logger, dbc);
                logRepo       = new ApplicationAuditLogRepository(settings, logger, dbc);

                if (ModelState.IsValid)
                {
                    // Update the user in the database
                    userRepo.Update(view.User);

                    //Add DOB claim to database and to claims list of the current user, if applicable
                    userClaim = (userClaimRepo.FindAll()).FirstOrDefault(uc => uc.UserId == view.User.Id && uc.ClaimType == ClaimTypes.DateOfBirth);
                    if (userClaim != null)
                    {
                        if (userClaim.ClaimValue != view.User.DOB.ToString("yyyy-MM-dd hh:mm:ss"))
                        {
                            userClaim.ModifiedDt = DateTime.Now;
                            userClaim.ClaimValue = view.User.DOB.ToString("yyyy-MM-dd hh:mm:ss");
                            // Update the database
                            userClaimRepo.Update(userClaim);
                            logger.LogInformation($"Updated claim({ClaimTypes.DateOfBirth}) for user account: {view.User.UserName}");
                        }
                        else
                        {
                            // Nothing changed, so no need to update the database
                        }
                    }
                    else
                    {
                        // Add DOB claim to the database
                        userClaim = new ApplicationUserClaim()
                        {
                            UserId    = view.User.Id,
                            ClaimType = ClaimTypes.DateOfBirth, ClaimValue = view.User.DOB.ToString("yyyy-MM-dd hh:mm:ss"), ClaimIssuer = issuer,
                            Active    = true, ModifiedDt = DateTime.Now, CreateDt = DateTime.Now
                        };
                        userClaimRepo.Add(userClaim);
                        logger.LogInformation($"Added new claim({ClaimTypes.DateOfBirth}) to user account: {view.User.UserName}");
                    }

                    //TODO: Department still has issues when transitioning from null to not null
                    //Add Department claim to database and to claims list of the user
                    userClaim = (userClaimRepo.FindAll()).FirstOrDefault(uc => uc.UserId == view.User.Id && uc.ClaimType == claimTypesDepartment);
                    if (userClaim != null)
                    {
                        if (view.User.Department != null && userClaim.ClaimValue != view.User.Department)
                        {
                            userClaim.ModifiedDt = DateTime.Now;
                            userClaim.ClaimValue = view.User.Department;
                            userClaimRepo.Update(userClaim);
                            logger.LogInformation($"Updated claim({claimTypesDepartment}) for user account: {view.User.UserName}");
                        }
                        else
                        {
                            // Nothing changed, so no need to update the database
                        }
                    }
                    else
                    {
                        if (view.User.Department != null)
                        {
                            userClaim = new ApplicationUserClaim()
                            {
                                UserId    = view.User.Id,
                                ClaimType = claimTypesDepartment, ClaimValue = view.User.Department, ClaimIssuer = issuer,
                                Active    = true, ModifiedDt = DateTime.Now, CreateDt = DateTime.Now
                            };
                            userClaimRepo.Add(userClaim);
                            logger.LogInformation($"Assigned new claim({claimTypesDepartment}) to user account: {view.User.UserName}");
                        }
                    }

                    //Add Role claim to database and to claims list of the user
                    // Process the roles and update the role store
                    currentRoles = (userClaimRepo.FindAll()).Where(uc => uc.UserId == view.User.Id && uc.ClaimType == ClaimTypes.Role).Select(r => r.ClaimValue).ToList();;
                    if (view.User.RoleBadges != null)
                    {
                        foreach (string r in view.User.RoleBadges.Split("|"))
                        {
                            if (r != String.Empty)
                            {
                                role = r.Substring(r.IndexOf('-') + 1, r.Length - r.IndexOf('-') - 1);
                                // Add, if it's a new role
                                if (!currentRoles.Contains(role))
                                {
                                    claimId = (int)userClaimRepo.Add(new ApplicationUserClaim()
                                    {
                                        UserId    = view.User.Id,
                                        ClaimType = ClaimTypes.Role, ClaimValue = role, ClaimIssuer = issuer,
                                        Active    = true, ModifiedDt = DateTime.Now, CreateDt = DateTime.Now
                                    });

                                    if (claimId > 0)
                                    {
                                        logger.LogInformation($"Assigned role({role}) to user account: {view.User.UserName}");
                                    }
                                    else
                                    {
                                        logger.LogError($"Error assigning role({role}) to user account: {view.User.UserName}");
                                    }
                                }
                            }
                        }
                    }
                    // Remove any roles of which the user is no longer a member
                    foreach (string r in currentRoles)
                    {
                        if (!view.User.RoleBadges.Contains(r))
                        {
                            claimId = (userClaimRepo.FindAll()).FirstOrDefault(c => c.ClaimType == ClaimTypes.Role && c.UserId == view.User.Id).Id;
                            rows    = userClaimRepo.Delete(new PrimaryKey()
                            {
                                Key = (int)claimId, IsIdentity = true
                            });
                            if (rows > 0)
                            {
                                logger.LogInformation($"Removed role({r}) from user account: {view.User.UserName}");
                            }
                            else
                            {
                                logger.LogError($"Error removing role({r}) from account: {view.User.UserName}");
                            }
                        }
                    }

                    // If we've updated the claims for the currently signed-in user,
                    // then refresh Cookie by recreating the User Security Principal from the database
                    if (isCurrentUser)
                    {
                        await identityManager.RefreshClaimsAsync(view.User, userClaimRepo.FindAll().Where(uc => uc.UserId == view.User.Id).ToList());

                        logRepo.Add(new ApplicationAuditLog()
                        {
                            CategoryId = 1, Description = $"User ({view.User.UserName}) logged into application with refreshed claims."
                        });
                        logger.LogInformation($"Refreshed cookie for user: {view.User.UserName}");
                    }

                    return(RedirectToAction("Index", "Account"));
                }
                else
                {
                    userClaimRepo = new ApplicationUserClaimRepository(settings, logger, dbc);
                    userRepo      = new ApplicationUserRepository(settings, logger, dbc);

                    view.User = userRepo.FindByPKView(new PrimaryKey()
                    {
                        Key = view.User.Id, IsIdentity = true
                    });
                    view.Roles = roleRepo.FindAll();

                    // Update the RoleBadges
                    foreach (ApplicationUserClaim uc in view.User.Claims.Where(uc => uc.UserId == view.User.Id))
                    {
                        view.User.RoleBadges += String.Format("{0}-{1}|", uc.Id, uc.ClaimType);
                    }

                    return(View("EditUser", view));
                }
            }
            catch (Exception ex)
            {
                throw (Exception)Activator.CreateInstance(ex.GetType(), ex.Message + ex.StackTrace);
            }
        }
 public ApplicationRoleRepositoryTests()
 {
     _repository = new ApplicationRoleRepository(Context);
 }