public SecurityController(
     SignInManager <ApplicationUser> signInManager,
     RoleManager <Role> roleManager,
     IPermissionsRegistrar permissionsProvider,
     IUserSearchService userSearchService,
     IRoleSearchService roleSearchService,
     IOptions <Core.Security.AuthorizationOptions> securityOptions,
     IOptions <UserOptionsExtended> userOptionsExtended,
     IPasswordValidator <ApplicationUser> passwordValidator,
     IEmailSender emailSender,
     IEventPublisher eventPublisher,
     IUserApiKeyService userApiKeyService)
 {
     _signInManager       = signInManager;
     _securityOptions     = securityOptions.Value;
     _userOptionsExtended = userOptionsExtended.Value;
     _passwordValidator   = passwordValidator;
     _permissionsProvider = permissionsProvider;
     _roleManager         = roleManager;
     _userSearchService   = userSearchService;
     _roleSearchService   = roleSearchService;
     _emailSender         = emailSender;
     _eventPublisher      = eventPublisher;
     _userApiKeyService   = userApiKeyService;
 }
示例#2
0
 public CustomUserManager(IUserStore <ApplicationUser> store, IOptions <IdentityOptions> optionsAccessor, IPasswordHasher <ApplicationUser> passwordHasher, IUserPasswordHasher userPasswordHasher,
                          IOptions <UserOptionsExtended> userOptionsExtended,
                          IEnumerable <IUserValidator <ApplicationUser> > userValidators, IEnumerable <IPasswordValidator <ApplicationUser> > passwordValidators,
                          ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IServiceProvider services,
                          ILogger <UserManager <ApplicationUser> > logger, RoleManager <Role> roleManager, IPlatformMemoryCache memoryCache, IEventPublisher eventPublisher)
     : base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger)
 {
     _memoryCache         = memoryCache;
     _roleManager         = roleManager;
     _eventPublisher      = eventPublisher;
     _userPasswordHasher  = userPasswordHasher;
     _userOptionsExtended = userOptionsExtended.Value;
 }
示例#3
0
        public static int ContDaysTillPasswordExpiry(ApplicationUser user, UserOptionsExtended userOptions)
        {
            var result = -1; // not a valid expiry days number

            if (!user.PasswordExpired &&
                userOptions.RemindPasswordExpiryInDays > 0 &&
                userOptions.MaxPasswordAge != null &&
                userOptions.MaxPasswordAge.Value > TimeSpan.Zero)
            {
                var lastPasswordChangeDate = user.LastPasswordChangedDate ?? user.CreatedDate;
                var timeTillExpiry         = lastPasswordChangeDate.Add(userOptions.MaxPasswordAge.Value) - DateTime.UtcNow;
                if (timeTillExpiry > TimeSpan.Zero &&
                    timeTillExpiry < TimeSpan.FromDays(userOptions.RemindPasswordExpiryInDays))
                {
                    result = timeTillExpiry.Days;
                }
            }

            return(result);
        }
        public void TestPasswordExpiryCalculator(bool passwordExpired, int remindPasswordExpiryInDays, TimeSpan?maxPasswordAge, int expectedDays)
        {
            //Arrange
            var user = new ApplicationUser
            {
                LastPasswordChangedDate = DateTime.UtcNow.AddDays(-20),
                PasswordExpired         = passwordExpired
            };

            var userOptionsExtended = new UserOptionsExtended
            {
                RemindPasswordExpiryInDays = remindPasswordExpiryInDays,
                MaxPasswordAge             = maxPasswordAge
            };

            //Act
            var daysTillPasswordExpiry = PasswordExpiryHelper.ContDaysTillPasswordExpiry(user, userOptionsExtended);

            //Assert
            Assert.Equal(expectedDays, daysTillPasswordExpiry);
        }
示例#5
0
        public static CustomUserManager TestCustomUserManager(Mock <IUserStore <ApplicationUser> > storeMock = null,
                                                              UserOptionsExtended userOptions = null, IdentityOptions identityOptions = null, PlatformMemoryCache platformMemoryCache = null, IEventPublisher eventPublisher = null, Func <ISecurityRepository> repositoryFactory = null, Mock <IUserPasswordHasher> passwordHasher = null)
        {
            storeMock ??= new Mock <IUserStore <ApplicationUser> >();
            storeMock.As <IUserRoleStore <ApplicationUser> >()
            .Setup(x => x.GetRolesAsync(It.IsAny <ApplicationUser>(), CancellationToken.None))
            .ReturnsAsync(Array.Empty <string>());
            storeMock.As <IUserLoginStore <ApplicationUser> >()
            .Setup(x => x.GetLoginsAsync(It.IsAny <ApplicationUser>(), CancellationToken.None))
            .ReturnsAsync(Array.Empty <UserLoginInfo>());
            storeMock.Setup(x => x.UpdateAsync(It.IsAny <ApplicationUser>(), CancellationToken.None))
            .ReturnsAsync(IdentityResult.Success);

            var identityOptionsMock = new Mock <IOptions <IdentityOptions> >();

            if (identityOptions != null)
            {
                identityOptionsMock.Setup(o => o.Value).Returns(identityOptions);
            }

            if (passwordHasher == null)
            {
                passwordHasher = new Mock <IUserPasswordHasher>();
                passwordHasher.Setup(x => x.VerifyHashedPassword(It.IsAny <ApplicationUser>(), It.IsAny <string>(), It.IsAny <string>()))
                .Returns(PasswordVerificationResult.Success);
            }

            userOptions ??= new UserOptionsExtended
            {
                MaxPasswordAge = new TimeSpan(0)
            };
            var userOptionsMock = new Mock <IOptions <UserOptionsExtended> >();

            userOptionsMock.Setup(o => o.Value).Returns(userOptions);
            var userValidators = new List <IUserValidator <ApplicationUser> >();
            var validator      = new Mock <IUserValidator <ApplicationUser> >();

            userValidators.Add(validator.Object);

            repositoryFactory ??= () => Mock.Of <ISecurityRepository>();
            var passwordOptionsMock = new Mock <IOptions <PasswordOptionsExtended> >();

            passwordOptionsMock.Setup(o => o.Value).Returns(new PasswordOptionsExtended());

            var pwdValidators = new PasswordValidator <ApplicationUser>[] { new CustomPasswordValidator(new CustomIdentityErrorDescriber(), repositoryFactory, passwordHasher.Object, passwordOptionsMock.Object) };

            var roleManagerMock = new Mock <RoleManager <Role> >(Mock.Of <IRoleStore <Role> >(),
                                                                 new[] { Mock.Of <IRoleValidator <Role> >() },
                                                                 Mock.Of <ILookupNormalizer>(),
                                                                 Mock.Of <IdentityErrorDescriber>(),
                                                                 Mock.Of <ILogger <RoleManager <Role> > >());

            var userManager = new CustomUserManager(storeMock.Object,
                                                    identityOptionsMock.Object,
                                                    passwordHasher.Object,
                                                    passwordHasher.Object,
                                                    userOptionsMock.Object,
                                                    userValidators,
                                                    pwdValidators,
                                                    Mock.Of <ILookupNormalizer>(),
                                                    Mock.Of <IdentityErrorDescriber>(),
                                                    Mock.Of <IServiceProvider>(),
                                                    Mock.Of <ILogger <UserManager <ApplicationUser> > >(),
                                                    roleManagerMock.Object,
                                                    platformMemoryCache ?? Mock.Of <IPlatformMemoryCache>(),
                                                    eventPublisher,
                                                    repositoryFactory,
                                                    passwordOptionsMock.Object);

            validator.Setup(x => x.ValidateAsync(userManager, It.IsAny <ApplicationUser>()))
            .ReturnsAsync(IdentityResult.Success).Verifiable();
            return(userManager);
        }