From 6bc41cee0ab3a4e1d0af6e3e344bede9a2622164 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 10 Sep 2018 11:03:10 +0200 Subject: [PATCH] Handle git urls with trailing .git suffix correctly --- .../java/sonia/scm/api/v2/resources/RepositoryDto.java | 2 +- .../web/protocol/NamespaceAndNameFromPathExtractor.java | 7 ++++++- .../protocol/NamespaceAndNameFromPathExtractorTest.java | 9 +++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDto.java index c597e12d4f..ddfe432d73 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDto.java @@ -24,7 +24,7 @@ public class RepositoryDto extends HalRepresentation { @JsonInclude(JsonInclude.Include.NON_NULL) private Instant lastModified; private String namespace; - @Pattern(regexp = "(?!^\\.\\.$)(?!^\\.$)(?!.*[\\\\\\[\\]])^[A-z0-9\\.][A-z0-9\\.\\-_/]*$") + @Pattern(regexp = "^[A-z0-9\\-_]+$") private String name; private boolean archived = false; @NotEmpty diff --git a/scm-webapp/src/main/java/sonia/scm/web/protocol/NamespaceAndNameFromPathExtractor.java b/scm-webapp/src/main/java/sonia/scm/web/protocol/NamespaceAndNameFromPathExtractor.java index b4315bc6ac..8cbdadf942 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/protocol/NamespaceAndNameFromPathExtractor.java +++ b/scm-webapp/src/main/java/sonia/scm/web/protocol/NamespaceAndNameFromPathExtractor.java @@ -28,6 +28,11 @@ class NamespaceAndNameFromPathExtractor { String name = uri.substring(endOfNamespace + 1, nameIndex); - return of(new NamespaceAndName(namespace, name)); + int nameDotIndex = name.indexOf('.'); + if (nameDotIndex >= 0) { + return of(new NamespaceAndName(namespace, name.substring(0, nameDotIndex))); + } else { + return of(new NamespaceAndName(namespace, name)); + } } } diff --git a/scm-webapp/src/test/java/sonia/scm/web/protocol/NamespaceAndNameFromPathExtractorTest.java b/scm-webapp/src/test/java/sonia/scm/web/protocol/NamespaceAndNameFromPathExtractorTest.java index be26ac89db..3018870e7d 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/protocol/NamespaceAndNameFromPathExtractorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/protocol/NamespaceAndNameFromPathExtractorTest.java @@ -25,6 +25,15 @@ public class NamespaceAndNameFromPathExtractorTest { ).map(this::createCorrectTest); } + @TestFactory + Stream shouldHandleTrailingDotSomethings() { + return Stream.of( + "/space/repo.git", + "/space/repo.and.more", + "/space/repo." + ).map(this::createCorrectTest); + } + private DynamicTest createCorrectTest(String path) { return dynamicTest( "should extract correct namespace and name for path " + path,