From ff91690cfb73babcd54a8d341f145a94f505ec1f Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Thu, 14 Oct 2010 16:55:09 -0700 Subject: [PATCH] Adding a test for slugs --HG-- branch : dev --- .../Routable/Services/RoutableServiceTests.cs | 7 +++++++ src/Orchard.Web/Core/Routable/Services/RoutableService.cs | 8 +------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Orchard.Core.Tests/Routable/Services/RoutableServiceTests.cs b/src/Orchard.Core.Tests/Routable/Services/RoutableServiceTests.cs index c83dbceb7..3d02cc9af 100644 --- a/src/Orchard.Core.Tests/Routable/Services/RoutableServiceTests.cs +++ b/src/Orchard.Core.Tests/Routable/Services/RoutableServiceTests.cs @@ -84,6 +84,13 @@ namespace Orchard.Core.Tests.Routable.Services { Assert.That(_routableService.IsSlugValid("some/page"), Is.True); } + [Test] + public void DotsAroundSlugAreAllowed() { + Assert.That(_routableService.IsSlugValid(".slug"), Is.False); + Assert.That(_routableService.IsSlugValid("slug."), Is.False); + Assert.That(_routableService.IsSlugValid("slug.slug"), Is.True); + } + [Test] public void EmptySlugsShouldBeConsideredValid() { // so that automatic generation on Publish occurs diff --git a/src/Orchard.Web/Core/Routable/Services/RoutableService.cs b/src/Orchard.Web/Core/Routable/Services/RoutableService.cs index 0c013e1c1..b5403aa88 100644 --- a/src/Orchard.Web/Core/Routable/Services/RoutableService.cs +++ b/src/Orchard.Web/Core/Routable/Services/RoutableService.cs @@ -66,13 +66,7 @@ namespace Orchard.Core.Routable.Services { } public bool IsSlugValid(string slug) { - slug = (slug ?? String.Empty).Trim(); - return !( SlugHasProhibitedChard(slug) || slug.StartsWith(".") || slug.EndsWith(".") ); - } - - public bool SlugHasProhibitedChard(string slug) { - // see http://tools.ietf.org/html/rfc3987 for prohibited chars - return Regex.IsMatch(slug, @"^[^:?#\[\]@!$&'()*+,;=\s]+$"); + return String.IsNullOrWhiteSpace(slug) || Regex.IsMatch(slug, @"^[^:?#\[\]@!$&'()*+,;=\s]+$") && !(slug.StartsWith(".") || slug.EndsWith(".")); } public bool ProcessSlug(RoutePart part) {