/// <summary>
        /// Returns IHashedUser object, with hashed passowrd and salt.
        /// Takes Salt lenght as int - Default 32.
        /// </summary>
        /// <param name="username">Username string</param>
        /// <param name="password">Password string</param>
        /// <param name="saltSize">Salt lenght as int - default 32</param>
        /// <returns></returns>
        public IHashedUser CreateHashedUser(string username, string password)
        {
            // Check if user input is valid.
            if (username == string.Empty || username == "")
            {
                throw new ArgumentNullException("Username");
            }

            if (password == string.Empty || password == "")
            {
                throw new ArgumentNullException("Password");
            }

            // Generate secure salt.
            ISaltGenerator saltGenerator = SaltGeneratorFactory.GetSaltGenerator();

            byte[] salt = saltGenerator.GenerateSalt(this._settings.SaltSize);

            // Create return object.
            IHashedUser hashedUser = new HashedUser();

            hashedUser.Username = username;                     // Set username from user input.
            hashedUser.Password = password;
            hashedUser.Salt     = Convert.ToBase64String(salt); // Set SaltByteArray with value generated above.

            // Instanziate hashing class - Select hashing method.
            hashedUser = this._hashingMethod.HashUserObject(hashedUser); // Returns hashed user - inlcuding password.

            return(hashedUser);
        }
Esempio n. 2
0
 public virtual void initialize()
 {
     runtimeService                = engineRule.RuntimeService;
     identityService               = engineRule.IdentityService;
     processEngineConfiguration    = engineRule.ProcessEngineConfiguration;
     camundaDefaultEncryptor       = processEngineConfiguration.PasswordEncryptor;
     camundaDefaultPasswordChecker = processEngineConfiguration.CustomPasswordChecker;
     camundaDefaultSaltGenerator   = processEngineConfiguration.SaltGenerator;
 }
Esempio n. 3
0
 public AccountController(IAuthenticationProvider<CustomPrincipal> authenticationProvider,
                          Context context,
                          ISaltGenerator saltGenerator,
                          IPasswordSalter passwordSalter)
 {
     _authenticationProvider = authenticationProvider;
     this._context = context;
     _saltGenerator = saltGenerator;
     _passwordSalter = passwordSalter;
 }
Esempio n. 4
0
 /// <summary>
 /// Initializes an instance of the <see cref="UserService"/> class.
 /// </summary>
 /// <param name="userRepository">The user repository.</param>
 /// <param name="credentialRepository">The credential repository.</param>
 /// <param name="credentialTypeRepository">The credential type repository.</param>
 /// <param name="hasher">The hasher.</param>
 /// <param name="saltGenerator">The salt generator.</param>
 /// <param name="accessTokenService">The access token service.</param>
 public UserService(
     IRepository <User> userRepository,
     IRepository <Credential> credentialRepository,
     IRepository <CredentialType> credentialTypeRepository,
     IHasher hasher,
     ISaltGenerator saltGenerator,
     IAccessTokenService accessTokenService)
 {
     _userRepository           = userRepository;
     _credentialRepository     = credentialRepository;
     _credentialTypeRepository = credentialTypeRepository;
     _hasher             = hasher;
     _saltGenerator      = saltGenerator;
     _accessTokenService = accessTokenService;
 }
        private void Init()
        {
            _hashSHA1Generator        = AlgorithmFactory.GetHasher(EHashType.SHA_1);
            _hashSHA256Generator      = AlgorithmFactory.GetHasher(EHashType.SHA_256);
            hashSHA512Generator       = AlgorithmFactory.GetHasher(EHashType.SHA_512);
            defaultHashGenerator      = hashSHA512Generator;
            signHMACSHA1Generator     = AlgorithmFactory.GetSigner(ESignType.HMAC_SHA1);
            signHMACSHA256Generator   = AlgorithmFactory.GetSigner(ESignType.HMAC_SHA256);
            _saltGenerator            = new SecureRNGAdapter();
            _asymmetricCryptGenerator = new RSAAdapter();

            Encoder = Encoding.UTF8;
            aes128  = AlgorithmFactory.GetSymmetricTransformCrypt(ESymmetricTransformCryptType.AES_128);
            aes256  = AlgorithmFactory.GetSymmetricTransformCrypt(ESymmetricTransformCryptType.AES_256);
        }
Esempio n. 6
0
        public Pbes2KeyWrapper(PasswordBasedJwk key, EncryptionAlgorithm encryptionAlgorithm, KeyManagementAlgorithm algorithm, uint iterationCount, uint saltSizeInBytes, ISaltGenerator saltGenerator)
            : base(encryptionAlgorithm, algorithm)
        {
            Debug.Assert(key.SupportKeyManagement(algorithm));
            Debug.Assert(algorithm.Category == AlgorithmCategory.Pbkdf2);
            Debug.Assert(algorithm.WrappedAlgorithm != null);
            Debug.Assert(algorithm.HashAlgorithm != null);

            _algorithm              = algorithm.Name;
            _keySizeInBytes         = algorithm.WrappedAlgorithm.RequiredKeySizeInBits >> 3;
            _algorithmNameLength    = _algorithm.EncodedUtf8Bytes.Length;
            _hashAlgorithm          = algorithm.HashAlgorithm;
            _keyManagementAlgorithm = algorithm.WrappedAlgorithm;
            _password        = key.ToArray();
            _iterationCount  = iterationCount;
            _saltSizeInBytes = (int)saltSizeInBytes;
            _saltGenerator   = saltGenerator;
        }
Esempio n. 7
0
 public UserManager(
     IRepository <ApplicationUser> applicationUserRepository,
     IRepository <CredentialType> credentialTypeRepository,
     IRepository <Credential> credentialRepository,
     IRepository <Role> roleRepository,
     IRepository <UserRole> userRoleRepository,
     IRepository <RolePermission> rolePermissionRepository,
     IRepository <Permission> permissionRepository,
     IHttpContextAccessor contextAccessor,
     IHasher hasher,
     ISaltGenerator saltGenerator)
 {
     _applicationUserRepository = applicationUserRepository;
     _credentialTypeRepository  = credentialTypeRepository;
     _credentialRepository      = credentialRepository;
     _roleRepository            = roleRepository;
     _userRoleRepository        = userRoleRepository;
     _rolePermissionRepository  = rolePermissionRepository;
     _permissionRepository      = permissionRepository;
     _contextAccessor           = contextAccessor;
     _hasher        = hasher;
     _saltGenerator = saltGenerator;
 }
Esempio n. 8
0
 /// <summary>
 /// Instantiate a new instance of the UserManager class.
 /// </summary>
 /// <param name="saltGenerator">Salt generator used to salt user passwords.</param>
 /// <param name="passwordHasher">Password hasher used to salt and hash user passwords.</param>
 public UserManager(ISaltGenerator saltGenerator, IPasswordHasher passwordHasher)
 {
     _saltGenerator  = saltGenerator;
     _passwordHasher = passwordHasher;
 }
Esempio n. 9
0
 /// <summary>
 /// Initializes a new hash generator with specified options and salt generator.
 /// </summary>
 /// <param name="options">Hashing options to use.</param>
 /// <param name="saltGenerator">Salt generator to use.</param>
 public HashGenerator(HashGeneratorOptions options, ISaltGenerator saltGenerator)
 {
     _options       = options;
     _saltGenerator = saltGenerator;
 }
Esempio n. 10
0
        public static IServiceCollection AddApplicationServices(this IServiceCollection serviceCollection)
        {
            serviceCollection.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            serviceCollection.AddSingleton <IFactory <AppDbContext>, ApplicationDbFactory>();

            serviceCollection.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options =>
            {
                options.ExpireTimeSpan = TimeSpan.FromDays(7);
            }
                       );

            #region Cryptography
            serviceCollection.AddSingleton <IHasher, Pbkdf2Hasher>();
            serviceCollection.AddSingleton <ISaltGenerator, RandomSaltGenerator>();
            #endregion Cryptography

            #region Validators
            serviceCollection.AddTransient <IEntityValidator <Follower>, FollowerValidator>();
            serviceCollection.AddTransient <IEntityValidator <Collection>, CollectionValidator>();
            serviceCollection.AddTransient <IEntityValidator <SharedMeme>, SharedMemeValidator>();
            serviceCollection.AddTransient <IEntityValidator <Meme>, MemeValidator>();
            serviceCollection.AddTransient <IEntityValidator <MemeLike>, MemeLikeValidator>();
            serviceCollection.AddTransient <IEntityValidator <CollectionItemDetail>, CollectionItemDetailValidator>();
            serviceCollection.AddTransient <IEntityValidator <CollectionSubscriber>, CollectionSubscriberValidator>();
            serviceCollection.AddTransient <IEntityValidator <ApplicationUser>, ApplicationUserValidator>();
            serviceCollection.AddTransient <IEntityValidator <Comment>, CommentValidator>();
            serviceCollection.AddTransient <IEntityValidator <Credential>, CredentialValidator>();
            serviceCollection.AddTransient <IEntityValidator <CredentialType>, CredentialTypeValidator>();
            serviceCollection.AddTransient <IEntityValidator <Role>, RoleValidator>();
            serviceCollection.AddTransient <IEntityValidator <UserRole>, UserRoleValidator>();
            serviceCollection.AddTransient <IEntityValidator <RolePermission>, RolePermissionValidator>();
            serviceCollection.AddTransient <IEntityValidator <Permission>, PermissionValidator>();
            #endregion Validators

            #region Repositories
            serviceCollection.AddTransient <IRepository <Meme>, MemeRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <Meme> entityValidator      = serviceProvider.GetService <IEntityValidator <Meme> >();
                return(new MemeRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <Follower>, FollowerRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <Follower> entityValidator  = serviceProvider.GetService <IEntityValidator <Follower> >();
                return(new FollowerRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <Collection>, CollectionRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory  = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <Collection> entityValidator = serviceProvider.GetService <IEntityValidator <Collection> >();
                return(new CollectionRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <SharedMeme>, SharedMemeRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory  = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <SharedMeme> entityValidator = serviceProvider.GetService <IEntityValidator <SharedMeme> >();
                return(new SharedMemeRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <ApplicationUser>, UserRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory       = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <ApplicationUser> entityValidator = serviceProvider.GetService <IEntityValidator <ApplicationUser> >();
                return(new UserRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <MemeLike>, MemeLikeRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <MemeLike> entityValidator  = serviceProvider.GetService <IEntityValidator <MemeLike> >();
                return(new MemeLikeRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <CollectionItemDetail>, CollectionItemDetailRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory            = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <CollectionItemDetail> entityValidator = serviceProvider.GetService <IEntityValidator <CollectionItemDetail> >();
                return(new CollectionItemDetailRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <CollectionSubscriber>, CollectionSubscriberRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory            = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <CollectionSubscriber> entityValidator = serviceProvider.GetService <IEntityValidator <CollectionSubscriber> >();
                return(new CollectionSubscriberRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <Comment>, CommentRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <Comment> entityValidator   = serviceProvider.GetService <IEntityValidator <Comment> >();
                return(new CommentRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <Credential>, CredentialRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory  = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <Credential> entityValidator = serviceProvider.GetService <IEntityValidator <Credential> >();
                return(new CredentialRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <CredentialType>, CredentialTypeRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory      = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <CredentialType> entityValidator = serviceProvider.GetService <IEntityValidator <CredentialType> >();
                return(new CredentialTypeRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <Role>, RoleRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <Role> entityValidator      = serviceProvider.GetService <IEntityValidator <Role> >();
                return(new RoleRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <UserRole>, UserRoleRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <UserRole> entityValidator  = serviceProvider.GetService <IEntityValidator <UserRole> >();
                return(new UserRoleRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <RolePermission>, RolePermissionRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory      = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <RolePermission> entityValidator = serviceProvider.GetService <IEntityValidator <RolePermission> >();
                return(new RolePermissionRepository(applicationDbFactory.Create(), entityValidator));
            });
            serviceCollection.AddTransient <IRepository <Permission>, PermissionRepository>(serviceProvider =>
            {
                IFactory <AppDbContext> applicationDbFactory  = serviceProvider.GetService <IFactory <AppDbContext> >();
                IEntityValidator <Permission> entityValidator = serviceProvider.GetService <IEntityValidator <Permission> >();
                return(new PermissionRepository(applicationDbFactory.Create(), entityValidator));
            });
            #endregion Repositories

            #region Managers
            serviceCollection.AddScoped <IUserManager, UserManager>(serviceProvider =>
            {
                IRepository <ApplicationUser> applicationUserRepository = serviceProvider.GetService <IRepository <ApplicationUser> >();
                IRepository <Credential> credentialRepository           = serviceProvider.GetService <IRepository <Credential> >();
                IRepository <CredentialType> credentialTypeRepository   = serviceProvider.GetService <IRepository <CredentialType> >();
                IRepository <Role> roleRepository                     = serviceProvider.GetService <IRepository <Role> >();
                IRepository <UserRole> userRoleRepository             = serviceProvider.GetService <IRepository <UserRole> >();
                IRepository <RolePermission> rolePermissionRepository = serviceProvider.GetService <IRepository <RolePermission> >();
                IRepository <Permission> permissionRepository         = serviceProvider.GetService <IRepository <Permission> >();
                IHttpContextAccessor httpContextAccessor              = serviceProvider.GetService <IHttpContextAccessor>();
                IHasher hasher = serviceProvider.GetService <IHasher>();
                ISaltGenerator saltGenerator = serviceProvider.GetService <ISaltGenerator>();
                return(new UserManager(applicationUserRepository, credentialTypeRepository, credentialRepository, roleRepository, userRoleRepository, rolePermissionRepository, permissionRepository, httpContextAccessor, hasher, saltGenerator));
            });
            #endregion Managers

            #region Services
            //serviceCollection.AddTransient<IExternalMemeFetcherService, ExternalMemeFetcherService>();
            serviceCollection.AddTransient <IMemeFetcherService, LocalMemeFetcherService>();
            serviceCollection.AddTransient <IMemeService, MemeService>(serviceProvider =>
            {
                IRepository <Meme> memeRepository      = serviceProvider.GetService <IRepository <Meme> >();
                IMemeFetcherService memeFetcherService = serviceProvider.GetService <IMemeFetcherService>();
                return(new MemeService(memeFetcherService, memeRepository));
            });
            serviceCollection.AddTransient <ICollectionService, CollectionService>(serviceProvider =>
            {
                IRepository <Collection> collectionRepository = serviceProvider.GetService <IRepository <Collection> >();
                return(new CollectionService(collectionRepository));
            });
            serviceCollection.AddTransient <IUserService, UserService>(serviceProvider =>
            {
                IRepository <ApplicationUser> userRepository = serviceProvider.GetService <IRepository <ApplicationUser> >();
                IRepository <Follower> followerRepository    = serviceProvider.GetService <IRepository <Follower> >();
                IUserManager userManager = serviceProvider.GetService <IUserManager>();
                return(new UserService(userManager, userRepository, followerRepository));
            });
            serviceCollection.AddTransient <IFollowerService, FollowerService>(serviceProvider =>
            {
                IRepository <Follower> followerRepository = serviceProvider.GetService <IRepository <Follower> >();
                IRepository <ApplicationUser> applicationUserRepository = serviceProvider.GetService <IRepository <ApplicationUser> >();
                return(new FollowerService(followerRepository, applicationUserRepository));
            });
            serviceCollection.AddTransient <IMemeSharingService, MemeSharingService>(serviceProvider =>
            {
                IRepository <SharedMeme> sharedMemeRepository = serviceProvider.GetService <IRepository <SharedMeme> >();
                IRepository <ApplicationUser> userRepository  = serviceProvider.GetService <IRepository <ApplicationUser> >();
                return(new MemeSharingService(sharedMemeRepository, userRepository));
            });
            serviceCollection.AddTransient <IMemeLikingService, MemeLikingService>(serviceProvider =>
            {
                IRepository <MemeLike> memeLikeRepository = serviceProvider.GetService <IRepository <MemeLike> >();
                return(new MemeLikingService(memeLikeRepository));
            });
            serviceCollection.AddTransient <ICollectionItemDetailService, CollectionItemDetailService>(serviceProvider =>
            {
                IRepository <CollectionItemDetail> collectionItemDetailRepository = serviceProvider.GetService <IRepository <CollectionItemDetail> >();
                IRepository <Collection> collectionRepository = serviceProvider.GetService <IRepository <Collection> >();
                IRepository <Meme> memeRepository             = serviceProvider.GetService <IRepository <Meme> >();
                return(new CollectionItemDetailService(collectionItemDetailRepository, collectionRepository, memeRepository));
            });
            serviceCollection.AddTransient <ICollectionSubscriberService, CollectionSubscriberService>(serviceProvider =>
            {
                IRepository <CollectionSubscriber> collectionSubscriberRepository = serviceProvider.GetService <IRepository <CollectionSubscriber> >();
                return(new CollectionSubscriberService(collectionSubscriberRepository));
            });
            serviceCollection.AddTransient <ITempDataService, TempDataService>(serviceProvider =>
            {
                ICollectionService collectionService = serviceProvider.GetService <ICollectionService>();
                IFollowerService followerService     = serviceProvider.GetService <IFollowerService>();
                return(new TempDataService(collectionService, followerService));
            });
            serviceCollection.AddTransient <ICommentService, CommentService>(serviceProvider =>
            {
                IRepository <Comment> commentRepository = serviceProvider.GetService <IRepository <Comment> >();
                IRepository <Meme> memeRepository       = serviceProvider.GetService <IRepository <Meme> >();
                return(new CommentService(commentRepository, memeRepository));
            });
            #endregion Services

            return(serviceCollection);
        }
Esempio n. 11
0
        public static ScryptResult Encode(byte[] password, int iterationCount, int blockSize, int threadCount, ISaltGenerator saltGenerator)
        {
            var saltBytes = new byte[SaltLength];

            saltGenerator.GetSaltBytes(saltBytes);

            return(Encode(password, iterationCount, blockSize, threadCount, saltBytes));
        }