diff --git a/gradle/changelog/repository_permission_without_name.yaml b/gradle/changelog/repository_permission_without_name.yaml new file mode 100644 index 0000000000..fae2f6e73d --- /dev/null +++ b/gradle/changelog/repository_permission_without_name.yaml @@ -0,0 +1,2 @@ +- type: fixed + description: Creating a repository permission without a name breaks the repository ([#2126](https://github.com/scm-manager/scm-manager/pull/2126)) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java index 05c23f0d73..75dc0f11f9 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java @@ -33,6 +33,7 @@ import lombok.ToString; import javax.validation.constraints.NotEmpty; import sonia.scm.util.ValidationUtil; +import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import java.util.Collection; @@ -43,6 +44,7 @@ public class RepositoryPermissionDto extends HalRepresentation implements Update public static final String GROUP_PREFIX = "@"; + @NotNull @Pattern(regexp = ValidationUtil.REGEX_NAME) private String name; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResourceTest.java index d929bd4ebf..ec2f35402a 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResourceTest.java @@ -275,6 +275,21 @@ public class RepositoryPermissionRootResourceTest extends RepositoryTestBase { assertEquals(400, response.getStatus()); } + @Test + public void shouldGet400OnCreatingNewPermissionWithoutName() throws URISyntaxException { + createUserWithRepository("user"); + String permissionJson = "{ \"verbs\": [\"*\"] }"; + MockHttpRequest request = MockHttpRequest + .post("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + PATH_OF_ALL_PERMISSIONS) + .content(permissionJson.getBytes()) + .contentType(VndMediaType.REPOSITORY_PERMISSION); + MockHttpResponse response = new MockHttpResponse(); + + dispatcher.invoke(request, response); + + assertEquals(400, response.getStatus()); + } + @Test public void shouldGetCreatedPermissions() throws URISyntaxException { createUserWithRepositoryAndPermissions(TEST_PERMISSIONS, PERMISSION_WRITE);