Fixing ShellTable mismatch when using a slug starting with another's Url Prefix

--HG--
branch : 1.x
extra : rebase_source : 2f2761fc4db442c5ad64001d6dc8836193bd0528
This commit is contained in:
Sebastien Ros
2013-03-15 17:33:12 -07:00
parent 1d66293871
commit de0316afbd
2 changed files with 28 additions and 1 deletions

View File

@@ -135,6 +135,7 @@ namespace Orchard.Tests.Environment {
Assert.That(table.Match(new StubHttpContext("~/foo/bar", "wiki.example.com")), Is.EqualTo(settingsA).Using(new ShellComparer()));
Assert.That(table.Match(new StubHttpContext("~/bar/foo", "wiki.example.com")), Is.EqualTo(settingsB).Using(new ShellComparer()));
Assert.That(table.Match(new StubHttpContext("~/", "wiki.example.com")), Is.EqualTo(settingsG).Using(new ShellComparer()));
Assert.That(table.Match(new StubHttpContext("~/baaz", "wiki.example.com")), Is.EqualTo(settingsG).Using(new ShellComparer()));
Assert.That(table.Match(new StubHttpContext("~/foo/bar", "www.example.com")), Is.EqualTo(settings).Using(new ShellComparer()));
Assert.That(table.Match(new StubHttpContext("~/bar/foo", "www.example.com")), Is.EqualTo(settings).Using(new ShellComparer()));
@@ -149,6 +150,21 @@ namespace Orchard.Tests.Environment {
Assert.That(table.Match(new StubHttpContext("~/yarg", "a.example.com")), Is.Null);
}
[Test]
public void PathAndHostMustMatchOnFullUrl() {
var table = (IRunningShellTable)new RunningShellTable();
var settings = new ShellSettings { Name = ShellSettings.DefaultName, RequestUrlHost = "www.example.com", };
var settingsB = new ShellSettings { Name = "Beta", RequestUrlHost = "wiki.example.com", RequestUrlPrefix = "bar" };
var settingsG = new ShellSettings { Name = "Gamma", RequestUrlHost = "wiki.example.com" };
table.Add(settings);
table.Add(settingsB);
table.Add(settingsG);
Assert.That(table.Match(new StubHttpContext("~/bar/foo", "wiki.example.com")), Is.EqualTo(settingsB).Using(new ShellComparer()));
Assert.That(table.Match(new StubHttpContext("~/", "wiki.example.com")), Is.EqualTo(settingsG).Using(new ShellComparer()));
Assert.That(table.Match(new StubHttpContext("~/baaz", "wiki.example.com")), Is.EqualTo(settingsG).Using(new ShellComparer()));
Assert.That(table.Match(new StubHttpContext("~/barbaz", "wiki.example.com")), Is.EqualTo(settingsG).Using(new ShellComparer()));
}
[Test]
public void PathAloneWillMatch() {
var table = (IRunningShellTable)new RunningShellTable();

View File

@@ -93,7 +93,18 @@ namespace Orchard.Environment {
.Where(group => host.EndsWith(group.Key, StringComparison.OrdinalIgnoreCase))
.SelectMany(group => group
.OrderByDescending(settings => (settings.RequestUrlPrefix ?? string.Empty).Length))
.FirstOrDefault(settings => settings.State.CurrentState != TenantState.State.Disabled && appRelativePath.StartsWith("~/" + (settings.RequestUrlPrefix ?? string.Empty), StringComparison.OrdinalIgnoreCase));
.FirstOrDefault(settings => {
if (settings.State.CurrentState == TenantState.State.Disabled) {
return false;
}
if (String.IsNullOrWhiteSpace(settings.RequestUrlPrefix)) {
return true;
}
return appRelativePath.StartsWith("~/" + settings.RequestUrlPrefix + "/", StringComparison.OrdinalIgnoreCase)
|| appRelativePath.Equals("~/" + settings.RequestUrlPrefix, StringComparison.OrdinalIgnoreCase);
});
return mostQualifiedMatch ?? _fallback;
}