Exemplo n.º 1
0
        public async Task <IActionResult> CreateUser([FromBody] CreateUserRequest request)
        {
            var user = new User {
                Id          = $"{Guid.NewGuid()}",
                UserName    = request.UserName,
                Email       = request.Email,
                CreateDate  = DateTime.UtcNow,
                PhoneNumber = request.PhoneNumber,
                PasswordExpirationPolicy = request.PasswordExpirationPolicy
            };
            IdentityResult result = null;

            if (string.IsNullOrEmpty(request.Password))
            {
                result = await _userManager.CreateAsync(user);
            }
            else
            {
                result = await _userManager.CreateAsync(user, request.Password, validatePassword : !request.BypassPasswordValidation.GetValueOrDefault());
            }
            if (!result.Succeeded)
            {
                return(BadRequest(result.Errors.ToValidationProblemDetails()));
            }
            if (request.ChangePasswordAfterFirstSignIn.HasValue && request.ChangePasswordAfterFirstSignIn.Value == true)
            {
                await _userManager.SetPasswordExpiredAsync(user, true);
            }
            var claims = request?.Claims?.Count() > 0 ? request.Claims.Select(x => new Claim(x.Type, x.Value)).ToList() : new List <Claim>();

            if (!string.IsNullOrEmpty(request.FirstName))
            {
                claims.Add(new Claim(JwtClaimTypes.GivenName, request.FirstName));
            }
            if (!string.IsNullOrEmpty(request.LastName))
            {
                claims.Add(new Claim(JwtClaimTypes.FamilyName, request.LastName));
            }
            if (claims.Any())
            {
                await _userManager.AddClaimsAsync(user, claims);
            }
            var response = SingleUserInfo.FromUser(user);
            await _eventService.Publish(new UserCreatedEvent(response));

            return(CreatedAtAction(nameof(GetUser), Name, new { userId = user.Id }, response));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> CreateUser([FromBody] CreateUserRequest request)
        {
            var user = new User {
                Id          = $"{Guid.NewGuid()}",
                UserName    = request.UserName,
                Email       = request.Email,
                CreateDate  = DateTime.UtcNow,
                PhoneNumber = request.PhoneNumber,
                PasswordExpirationPolicy = request.PasswordExpirationPolicy
            };
            IdentityResult result = null;

            if (string.IsNullOrEmpty(request.Password))
            {
                result = await _userManager.CreateAsync(user);
            }
            else
            {
                result = await _userManager.CreateAsync(user, request.Password);
            }
            if (!result.Succeeded)
            {
                return(BadRequest(result.Errors.ToValidationProblemDetails()));
            }
            if (request.ChangePasswordAfterFirstSignIn.HasValue && request.ChangePasswordAfterFirstSignIn.Value == true)
            {
                await _userManager.SetPasswordExpiredAsync(user, true);
            }
            var claims = new List <Claim>();

            if (!string.IsNullOrEmpty(request.FirstName))
            {
                claims.Add(new Claim(JwtClaimTypes.GivenName, request.FirstName));
            }
            if (!string.IsNullOrEmpty(request.LastName))
            {
                claims.Add(new Claim(JwtClaimTypes.FamilyName, request.LastName));
            }
            if (claims.Any())
            {
                await _userManager.AddClaimsAsync(user, claims);
            }
            var response = new SingleUserInfo {
                Id          = user.Id,
                UserName    = user.UserName,
                Email       = user.Email,
                PhoneNumber = user.PhoneNumber,
                PasswordExpirationPolicy = user.PasswordExpirationPolicy,
                IsAdmin              = user.Admin,
                TwoFactorEnabled     = user.TwoFactorEnabled,
                EmailConfirmed       = user.EmailConfirmed,
                PhoneNumberConfirmed = user.PhoneNumberConfirmed,
                Claims = user.Claims?.Select(x => new ClaimInfo {
                    Id    = x.Id,
                    Type  = x.ClaimType,
                    Value = x.ClaimValue
                })
                         .ToList()
            };
            await _eventService.Raise(new UserCreatedEvent(response));

            return(CreatedAtAction(nameof(GetUser), Name, new { userId = user.Id }, response));
        }