Ejemplo n.º 1
0
        // public is for test purposes.
        public async Task <DbUser> CreateUserAsync(ClaimsUser claimsUser)
        {
            _emailDomainValidatorService.Validate(claimsUser.Email);

            var user = new DbUser
            {
                UserName       = claimsUser.Email,
                Email          = claimsUser.Email,
                FirstName      = claimsUser.FirstName,
                LastName       = claimsUser.LastName,
                EmailConfirmed = true
            };

            IdentityResult createUserResult = await _userManager.CreateAsync(user);

            if (!createUserResult.Succeeded)
            {
                throw CreateException($"Cannot create new user '{claimsUser.Email}'\r\n", createUserResult);
            }

            string role = (await ChooseUserRoleAsync()).ToString();

            IdentityResult roleAddingResult = await _userManager.AddToRoleAsync(user, role);

            if (!roleAddingResult.Succeeded)
            {
                throw CreateException($"Cannot add role '{role}' to user '{claimsUser.Email}'\r\n", roleAddingResult);
            }

            var claimsAddingResult = await _userManager.AddClaimsAsync(
                user : user,
                claims : claimsUser.Claims().Concat(user.Claims(role)));

            if (!claimsAddingResult.Succeeded)
            {
                throw CreateException($"Cannot add claims to user '{claimsUser.Email}'\r\n", claimsAddingResult);
            }

            return(user);
        }
Ejemplo n.º 2
0
        // public is for test purposes.
        public async Task <Database.Models.User> CreateUserAsync(GoogleClaims claimsUser)
        {
            _emailDomainValidatorService.Validate(claimsUser.Email);

            Role userRole = await ChooseUserRoleAsync();

            var user = new Database.Models.User(
                firstName: claimsUser.GivenName,
                lastName: claimsUser.Surname,
                email: claimsUser.Email,
                role: userRole,
                emailConfirmed: true);

            claimsUser = claimsUser.ReadUser(user);

            IdentityResult createUserResult = await _userManager.CreateAsync(user);

            if (!createUserResult.Succeeded)
            {
                throw CreateException($"Cannot create new user '{claimsUser.Email}'\r\n", createUserResult);
            }

            string role = userRole.ToString();

            IdentityResult roleAddingResult = await _userManager.AddToRoleAsync(user, role);

            if (!roleAddingResult.Succeeded)
            {
                throw CreateException($"Cannot add role '{role}' to user '{claimsUser.Email}'\r\n", roleAddingResult);
            }

            IdentityResult claimsAddingResult = await _userManager.AddClaimsAsync(user, claimsUser);

            if (!claimsAddingResult.Succeeded)
            {
                throw CreateException($"Cannot add claims to user '{claimsUser.Email}'\r\n", claimsAddingResult);
            }

            return(user);
        }
Ejemplo n.º 3
0
        public async Task <int> ImportAsync(IReadOnlyCollection <UserDto> users)
        {
            users.ThrowIfNullOrEmpty(nameof(users));

            if (users.Count != users.GroupBy(x => x.UserName).Count())
            {
                throw new BadAssException("Collection of users for import contains duplications");
            }

            var        usersToInsert = new List <User>();
            const Role defaultRole   = Role.Employee;

            foreach (UserDto user in users)
            {
                user.PurifyData();
                _emailDomainValidatorService.Validate(user.UserName);

                if (await _userRepository.CheckHasUserWithUsernameAsync(user.UserName))
                {
                    continue;
                }

                var applicationUserToInsert = new User(
                    firstName: user.FirstName,
                    lastName: user.LastName,
                    userName: user.UserName,
                    role: defaultRole,
                    emailConfirmed: false);

                usersToInsert.Add(applicationUserToInsert);
            }

            if (usersToInsert.Any())
            {
                await _userRepository.InsertAsync(usersToInsert);
            }

            return(usersToInsert.Count);
        }
Ejemplo n.º 4
0
        public void Validate_Email_OnEmpty_Email()
        {
            var target = new EmailDomainValidatorService("example.com");

            Assert.ThrowsAny <ArgumentNullException>(() => target.Validate(string.Empty));
        }
Ejemplo n.º 5
0
        public void Validate_Email_Domain_Wrong(string email)
        {
            var target = new EmailDomainValidatorService("example.com");

            Assert.ThrowsAny <BadAssException>(() => target.Validate(email));
        }