Added support for cases where the parent directory is included in the request path. Added unit tests to check this case. Bumped package version to 1.6.4

This commit is contained in:
MattMo 2023-06-29 08:21:54 -07:00
parent 46aab308fa
commit 4617f861fc
3 changed files with 34 additions and 3 deletions

@ -46,6 +46,16 @@ namespace Rest.Net.Tests
resolvedPath.Should().BeEquivalentTo(this.TestFile);
}
[Fact]
public void ServeMultiple_File_WithParentDirectory_ShouldWork()
{
HttpListenerResponseExtensions.ResolveMultiPagePath(this.BaseDirectory, "test/test.html", null, out string resolvedPath, out bool isDirectory).Should().BeTrue();
isDirectory.Should().BeFalse();
resolvedPath.Should().BeEquivalentTo(this.TestFile);
}
[Fact]
public void ServeMultiple_Directory_ShouldWork()
{
@ -88,6 +98,16 @@ namespace Rest.Net.Tests
resolvedPath.Should().BeEquivalentTo(this.TestFile);
}
[Fact]
public void ServeSingle_File_WithParentDirectory_ShouldWork()
{
HttpListenerResponseExtensions.ResolveSinglePagePath(this.BaseDirectory, "test/test.html", null, out string resolvedPath, out bool isDirectory).Should().BeTrue();
isDirectory.Should().BeFalse();
resolvedPath.Should().BeEquivalentTo(this.TestFile);
}
[Fact]
public void ServeSingle_Directory_ShouldWork()
{

@ -547,9 +547,20 @@ namespace MontoyaTech.Rest.Net
if (string.IsNullOrWhiteSpace(requestPath) || requestPath == "/" || requestPath == ".")
requestPath = indexFile;
//Break th erequest path into it's components so we can enfore staying in the base path.
//See if there is a parent directory in the basePath, if so get it
var parentDirectory = basePath.Split(new char[] { '/', '\\' }, StringSplitOptions.RemoveEmptyEntries).LastOrDefault();
//Break the request path into it's components so we can enfore staying in the base path.
var components = requestPath.Split(new char[] { '/', '\\' }, StringSplitOptions.RemoveEmptyEntries).ToList();
//If the first component is the parent directory, then remove it
if (components.Count > 0 && components[0].Equals(parentDirectory, StringComparison.CurrentCultureIgnoreCase))
components.RemoveAt(0);
//Quirk, if the components is now empty, point to the indexFile
if (components.Count == 0)
components.Add(indexFile);
for (int i = 0; i < components.Count; i++)
{
if (components[i].Trim() == "..")
@ -655,7 +666,7 @@ namespace MontoyaTech.Rest.Net
if (string.IsNullOrWhiteSpace(requestPath) || requestPath == "/" || requestPath == ".")
requestPath = indexFile;
//Break th erequest path into it's components so we can enfore staying in the base path.
//Break the request path into it's components so we can enfore staying in the base path.
var components = requestPath.Split(new char[] { '/', '\\' }, StringSplitOptions.RemoveEmptyEntries).ToList();
for (int i = 0; i < components.Count; i++)

@ -17,7 +17,7 @@
<AssemblyName>MontoyaTech.Rest.Net</AssemblyName>
<RootNamespace>MontoyaTech.Rest.Net</RootNamespace>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<Version>1.6.3</Version>
<Version>1.6.4</Version>
<PackageReleaseNotes></PackageReleaseNotes>
<PackageIcon>Logo_Symbol_Black_Outline.png</PackageIcon>
</PropertyGroup>