public async Task <IActionResult> PutWhitelistedResource([FromRoute] int id, [FromBody] WhitelistedResource whitelistedResource)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != whitelistedResource.Id)
            {
                return(BadRequest());
            }

            _whitelistedResourceRepository.Edit(whitelistedResource);

            try
            {
                await _whitelistedResourceRepository.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!WhitelistedResourceExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public void WhitelistedResourceRepository_Edit_ShouldNotSaveEntitiesWithExistingBasePaths()
        {
            using (var context = _whitelistedResourceRepository.New())
            {
                // Arrange
                for (var i = 0; i < 2; i++)
                {
                    var whitelistedResource = new WhitelistedResource()
                    {
                        BasePath = $@"index{i}.php"
                    };
                    context.Add(whitelistedResource);
                    context.SaveChanges();
                }

                var secondEntity = context.FindBy(x => x.BasePath == @"index1.php").Single();
                secondEntity.BasePath = @"index0.php";
                // Act
                context.Edit(secondEntity);
                context.SaveChanges();

                var collection = context.GetAll().ToList();

                // Assert
                Assert.Collection(context.GetAll(),
                                  resource => Assert.Contains("index0.php", resource.BasePath),
                                  resource => Assert.Contains("index1.php", resource.BasePath)
                                  );
            }
        }
        public async Task <IActionResult> PostWhitelistedResource([FromBody] WhitelistedResource whitelistedResource)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            await _whitelistedResourceRepository.AddAsync(whitelistedResource);

            await _whitelistedResourceRepository.SaveChangesAsync();

            return(CreatedAtAction("GetWhitelistedResource", new { id = whitelistedResource.Id }, whitelistedResource));
        }
        public void RequestedResourceIsWhitelisted_ReturnsTrue_IfRequestResourceIsWhitelisted()
        {
            using (var context = _apacheLogContextFactory.NewTestContext())
            {
                // Arrange
                var whitelistedResources = new WhitelistedResource[3]
                {
                    new WhitelistedResource()
                    {
                        BasePath = "media"
                    },
                    new WhitelistedResource()
                    {
                        BasePath = "index.php"
                    },
                    new WhitelistedResource()
                    {
                        BasePath = "script.cgi"
                    }
                };

                context.WhitelistedResources.AddRange(whitelistedResources);
                context.SaveChanges();

                var whitelist      = new Whitelist(context);
                var accessRequests = new List <AccessRequest>()
                {
                    new AccessRequest()
                    {
                        Resource = @"/media/rest/getPlaylists.view"
                    },
                    new AccessRequest()
                    {
                        Resource = @"/index.php"
                    },
                    new AccessRequest()
                    {
                        Resource = @"script.cgi"
                    }
                };

                foreach (var accessRequest in accessRequests)
                {
                    // Act
                    var result = whitelist.RequestedResourceIsWhitelisted(accessRequest);

                    // Assert
                    Assert.True(result);
                }
            }
        }
        public void WhitelistedResourceRepository_Add_ShouldNotSaveEntitiesWithExistingBasePaths()
        {
            using (var context = _whitelistedResourceRepository.New())
            {
                // Arrange
                for (var i = 0; i < 2; i++)
                {
                    var whitelistedResouce = new WhitelistedResource()
                    {
                        BasePath = @"index.php"
                    };
                    // Act
                    context.Add(whitelistedResouce);
                    context.SaveChanges();
                }

                // Assert
                Assert.Single(context.GetAll());
            }
        }