예제 #1
0
        public async Task <CreateUser.Response> CreateUser(CreateUser.Request request, CancellationToken cancellationToken = default)
        {
            var existedUser = await _userManager.FindByNameAsync(request.Username);

            if (existedUser != null)
            {
                throw new ConflictException("Пользователь с таким именем уже существует");
            }

            var identityUser = new IdentityUser {
                UserName = request.Username
            };
            var identityResult = await _userManager.CreateAsync(identityUser, request.Password);

            if (identityResult.Succeeded)
            {
                await _userManager.AddToRoleAsync(identityUser, request.Role);

                return(new CreateUser.Response
                {
                    UserId = identityUser.Id,
                    IsSuccess = true
                });
            }

            return(new CreateUser.Response
            {
                IsSuccess = false,
                Errors = identityResult.Errors.Select(x => x.Description).ToArray()
            });
        }
        public async Task <Result <Unit> > AuthorizeUser(ClaimsPrincipal user)
        {
            if (!user.Identity.IsAuthenticated)
            {
                SetCurrentContext(GetAnonymousVisitor(_predefinedAnonymousUserId));
                return(Unit.Value);
            }

            var idValue = GetUserIdFromClaims(user);

            if (idValue == null)
            {
                return(Error.NotAuthorized("UserId claim is missing"));
            }

            if (IsPredefinedSystemId(idValue))
            {
                return(Error.NotAuthorized("User Id is invalid"));
            }

            Result <Unit> result;
            var           getRequest = new GetUser.Request
            {
                UserId = new UserId(idValue),
                Tenant = TenantId.Default
            };
            var getUser = await _getUserHandler.Handle(getRequest);

            if (getUser.IsSuccessful)
            {
                result = Unit.Value;
                SetCurrentContext(getUser.Value);
            }
            else if (getUser.Error.Type == ErrorType.NotFound)
            {
                var createRequest = new CreateUser.Request
                {
                    UserId = new UserId(idValue),
                    Tenant = TenantId.Default,
                    Role   = VisitorRole
                };
                var createUser = await _createUserHandler.Handle(createRequest);

                if (createUser.IsSuccessful)
                {
                    result = Unit.Value;
                    SetCurrentContext(createUser.Value);
                }
                else
                {
                    result = createUser.Error;
                }
            }
            else
            {
                result = getUser.Error;
            }

            return(result);
        }
        public void ScenarioSetup()
        {
            _authFixture.SetTestUserPermission(IdentityAndAccessConstants.Context, nameof(CreateUser));

            _expectedUser = UserBuilder.New();
            _request      = new CreateUser.Request();
        }
예제 #4
0
        public async Task <IActionResult> AddUser([FromBody] CreateUser.Request request)
        {
            request.ActionBy = UserId.GetValueOrDefault();

            var result = await Mediator.Send(request);

            return(Respond(result));
        }
 public void ScenarioSetup()
 {
     _expectedRequest = new CreateUser.Request
     {
         Tenant = TenantId.Default,
         Role   = _visitorRole
     };
 }
예제 #6
0
파일: User.cs 프로젝트: habibakcakale/ems
        public async void SearchUser_ShouldReturn_Response(CreateUser.Request request)
        {
            var mediator = host.Services.GetService <IMediator>();
            var response = await mediator.Send(new GetUserList.Request {
                Name = request.Email
            });

            Assert.NotNull(response);
        }
 private void MockCreateUserSuccess()
 {
     _createHandler.Handle(Arg.Any <CreateUser.Request>())
     .Returns(ci => Task.FromResult(
                  (Result <User>) new User(
                      ci.Arg <CreateUser.Request>().UserId,
                      ci.Arg <CreateUser.Request>().Tenant)))
     .AndDoes(ci => { _actualRequest = ci.Arg <CreateUser.Request>(); });
 }
예제 #8
0
파일: User.cs 프로젝트: habibakcakale/ems
        public async void CreateUser_ShouldCreate_User(CreateUser.Request request)
        {
            var mediator = host.Services.GetService <IMediator>();

            var response = await mediator.Send(request);

            Assert.NotNull(response);
            Assert.True(response.Id > 0);
            Assert.Equal(request.Email, response.Email);
            Assert.Equal(request.Gender, response.Gender);
            Assert.Equal(request.Status, response.Status);
            Assert.Equal(request.Name, response.Name);
        }
예제 #9
0
        public async Task <ActionResult <CreateUser.Response> > CreateUserAsnyc(CreateUser.Request request)
        {
            CreateUser.Response response = await new CreateUser(_userManager).DoModelAsync(request);

            if (response.isSucceeded)
            {
                return(Ok(response));
            }
            else
            {
                return(BadRequest(response));
            }
        }
예제 #10
0
        public async Task <CreateUser.Response> CreateUser(CreateUser.Request request, CancellationToken cancellationToken = default)
        {
            var existedUser = await _userManager.FindByEmailAsync(request.Email);

            if (existedUser != null)
            {
                throw new DuplicateException("Пользователь с почтой уже существует");
            }

            var newUser = new IdentityUser
            {
                Email    = request.Email,
                UserName = request.Username
            };
            var identityResult = await _userManager.CreateAsync(newUser, request.Password);

            if (identityResult.Succeeded)
            {
                await _userManager.AddToRoleAsync(newUser, request.Role);

                var confirmationToken = await _userManager.GenerateEmailConfirmationTokenAsync(newUser);

                var encodedToken = HttpUtility.UrlEncode(confirmationToken);
                var message      = MessageToConfirmEmail.Message(newUser.Id, newUser.Id, encodedToken, _configuration["ApiUri"]);
                try
                {
                    await _mailService.Send(request.Email, "Подтвердите Email!", message, cancellationToken);
                }
                catch (Exception ex)
                {
                    await _userManager.DeleteAsync(newUser);

                    throw new SendingMailException("Произошла ошибка!" + ex.Message);
                }

                return(new CreateUser.Response
                {
                    IsSuccess = true,
                    UserId = newUser.Id
                });
            }

            return(new CreateUser.Response
            {
                IsSuccess = false,
                Errors = identityResult.Errors.Select(x => x.Description).ToArray()
            });
        }
예제 #11
0
파일: User.cs 프로젝트: habibakcakale/ems
        public async void GetUser_ShouldReturn_User(CreateUser.Request request)
        {
            var mediator = host.Services.GetService <IMediator>();
            // Create a user
            var created = await mediator.Send(request);

            Assert.NotNull(created);
            Assert.True(created.Id > 0);
            var user = await mediator.Send(new GetUser.Request {
                Id = created.Id
            });

            Assert.NotNull(user);
            Assert.NotEmpty(user.Email);
            Assert.Equal(request.Email, user.Email);
        }
예제 #12
0
파일: User.cs 프로젝트: habibakcakale/ems
        public async void UpdateUser_ShouldUpdate_UserName(CreateUser.Request request)
        {
            var mediator = host.Services.GetService <IMediator>();
            // Create a user
            var created = await mediator.Send(request);

            Assert.NotNull(created);
            Assert.True(created.Id > 0);
            const string name     = "George Who Knows";
            var          response = await mediator.Send(new UpdateUser.Request {
                Id   = created.Id,
                Name = name
            });

            Assert.Equal(created.Id, response.Id);
            Assert.Equal(name, response.Name);
            Assert.Equal(request.Email, response.Email);
        }
예제 #13
0
파일: User.cs 프로젝트: habibakcakale/ems
        public async void DeleteUser_ShouldDelete_User(CreateUser.Request request)
        {
            var mediator = host.Services.GetService <IMediator>();
            // Create a user
            var created = await mediator.Send(request);

            Assert.NotNull(created);
            Assert.True(created.Id > 0);
            // It should delete created user
            await mediator.Send(new DeleteUser.Request {
                Id = created.Id
            });

            await Assert.ThrowsAsync <GoRestApiException>((() => mediator.Send(new DeleteUser.Request()
            {
                Id = created.Id
            })));
        }
        public void MockCreateUserSuccess()
        {
            User BuildUser(CallInfo ci)
            {
                var req    = ci.Arg <CreateUser.Request>();
                var result = new User(
                    req.UserId,
                    req.Tenant);

                if (req.Role != null)
                {
                    result.AssignRole(req.Role);
                }

                return(result);
            }

            _createHandler.Handle(Arg.Any <CreateUser.Request>())
            .Returns(ci => BuildUser(ci))
            .AndDoes(ci => { _actualCreateRequest = ci.Arg <CreateUser.Request>(); });

            OverrideHandlerMetadata <CreateUser.Request>(
                new HandlerInfo("IdentityAndAccess", "CreateUser"));
        }
 public async Task <IActionResult> CreateUser([FromBody] CreateUser.Request request) => Ok((await new CreateUser(_userManager).Do(request)));
 public void VerifyUserCreated(CreateUser.Request expectedRequest)
 {
     _actualCreateRequest.Should().BeEquivalentTo(expectedRequest,
                                                  "user should be created with ID claim, with default tenant and assigned visitor role");
 }
예제 #17
0
        public async Task <IActionResult> CreateUser([FromBody] CreateUser.Request request)
        {
            await _createUser.Do(request);

            return(Ok());
        }
예제 #18
0
        public async Task <IActionResult> CreateAsync([FromBody] CreateUser.Request request)
        {
            var response = await _mediator.Send(request, HttpContext.RequestAborted);

            return(Created($"users/{response.User.Id}", response.User));
        }