public void GetUserPath_UserIdGiven_ReturnsProperCustomerPath()
        {
            //Arrange
            var userId = Guid.NewGuid();

            //Act
            var path = AmazonPathHelper.GetUserPath(userId);

            //Assert
            Assert.AreEqual($"/customers/{userId}/", path);
        }
        public void GetUserPath_NullUserId_ReturnsSlash()
        {
            //Arrange
            var userId = (Guid?)null;

            //Act
            var path = AmazonPathHelper.GetUserPath(userId);

            //Assert
            Assert.AreEqual("/", path);
        }
Example #3
0
        public async Task <AmazonUser> Handle(EnsureAmazonUserWithNameCommand request, CancellationToken cancellationToken)
        {
            var amazonUser = await mediator.Send(
                new GetAmazonUserByNameQuery(request.Name),
                cancellationToken);

            if (amazonUser != null)
            {
                return(amazonUser);
            }

            var newUser = new AmazonUser()
            {
                Name   = request.Name,
                UserId = request.UserId,
                EncryptedSecretAccessKey = Array.Empty <byte>(),
                EncryptedAccessKeyId     = Array.Empty <byte>()
            };

            await this.dataContext.AmazonUsers.AddAsync(newUser, cancellationToken);

            await this.dataContext.SaveChangesAsync(cancellationToken);

            await amazonIdentityManagementService.CreateUserAsync(new CreateUserRequest(request.Name)
            {
                Path = AmazonPathHelper.GetUserPath(request.UserId),
                Tags = new List <Tag>()
                {
                    new Tag()
                    {
                        Key   = "UserId",
                        Value = request.UserId?.ToString() ?? string.Empty
                    }
                }
            }, cancellationToken);

            try
            {
                var keyResponse = await this.amazonIdentityManagementService.CreateAccessKeyAsync(new CreateAccessKeyRequest()
                {
                    UserName = request.Name
                }, cancellationToken);

                try
                {
                    newUser.EncryptedAccessKeyId = await this.aesEncryptionHelper.EncryptAsync(keyResponse.AccessKey.AccessKeyId);

                    newUser.EncryptedSecretAccessKey = await this.aesEncryptionHelper.EncryptAsync(keyResponse.AccessKey.SecretAccessKey);

                    await this.dataContext.SaveChangesAsync(cancellationToken);

                    await EnsureGroupMembershipAsync(newUser, cancellationToken);
                }
                catch
                {
                    await this.amazonIdentityManagementService.DeleteAccessKeyAsync(new DeleteAccessKeyRequest(request.Name), cancellationToken);

                    throw;
                }
            }
            catch
            {
                await this.amazonIdentityManagementService.DeleteUserAsync(new DeleteUserRequest(request.Name), cancellationToken);

                throw;
            }

            return(newUser);
        }