Merge "Disallow creating branches in Gerrit internal or tag refs namespaces"
This commit is contained in:
@@ -109,6 +109,12 @@ public class CreateBranch
|
||||
+ MagicBranch.getMagicRefNamePrefix(ref)
|
||||
+ "\"");
|
||||
}
|
||||
if (!isBranchAllowed(ref)) {
|
||||
throw new BadRequestException(
|
||||
"Cannot create a branch with name \""
|
||||
+ ref
|
||||
+ "\". Not allowed to create branches under Gerrit internal or tags refs.");
|
||||
}
|
||||
|
||||
BranchNameKey name = BranchNameKey.create(rsrc.getNameKey(), ref);
|
||||
try (Repository repo = repoManager.openRepository(rsrc.getNameKey())) {
|
||||
@@ -187,4 +193,9 @@ public class CreateBranch
|
||||
throw new BadRequestException("invalid revision \"" + input.revision + "\"", e);
|
||||
}
|
||||
}
|
||||
|
||||
/** Branches cannot be created under any Gerrit internal or tags refs. */
|
||||
private boolean isBranchAllowed(String branch) {
|
||||
return !RefNames.isGerritRef(branch) && !branch.startsWith(RefNames.REFS_TAGS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,15 +190,10 @@ public class CreateChangeIT extends AbstractDaemonTest {
|
||||
.add(allow(CREATE).ref("refs/*").group(REGISTERED_USERS))
|
||||
.update();
|
||||
|
||||
String disallowedRef = "refs/changes/00/1000"; // All Gerrit internal refs behave the same way
|
||||
requestScopeOperations.setApiUser(admin.id());
|
||||
BranchNameKey branchNameKey = BranchNameKey.create(project, disallowedRef);
|
||||
createBranch(branchNameKey);
|
||||
|
||||
requestScopeOperations.setApiUser(user.id());
|
||||
ChangeInput ci = newChangeInput(ChangeStatus.NEW);
|
||||
ci.subject = "Subject";
|
||||
ci.branch = disallowedRef;
|
||||
ci.branch = "refs/changes/00/1000"; // disallowedRef
|
||||
|
||||
Throwable thrown = assertThrows(RestApiException.class, () -> gApi.changes().create(ci));
|
||||
assertThat(thrown).hasMessageThat().contains("Cannot create a change on ref " + ci.branch);
|
||||
@@ -213,15 +208,10 @@ public class CreateChangeIT extends AbstractDaemonTest {
|
||||
.add(allow(CREATE).ref("refs/*").group(REGISTERED_USERS))
|
||||
.update();
|
||||
|
||||
String branchName = "refs/tags/v1.0";
|
||||
requestScopeOperations.setApiUser(admin.id());
|
||||
BranchNameKey branchNameKey = BranchNameKey.create(project, branchName);
|
||||
createBranch(branchNameKey);
|
||||
|
||||
requestScopeOperations.setApiUser(user.id());
|
||||
ChangeInput ci = newChangeInput(ChangeStatus.NEW);
|
||||
ci.subject = "Subject";
|
||||
ci.branch = branchName;
|
||||
ci.branch = "refs/tags/v1.0"; // disallowed ref
|
||||
|
||||
Throwable thrown = assertThrows(RestApiException.class, () -> gApi.changes().create(ci));
|
||||
assertThat(thrown).hasMessageThat().contains("Cannot create a change on ref " + ci.branch);
|
||||
|
||||
@@ -207,7 +207,7 @@ public class CreateBranchIT extends AbstractDaemonTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createUserBranch_Conflict() throws Exception {
|
||||
public void createUserBranch_NotAllowed() throws Exception {
|
||||
projectOperations
|
||||
.project(allUsers)
|
||||
.forUpdate()
|
||||
@@ -217,12 +217,12 @@ public class CreateBranchIT extends AbstractDaemonTest {
|
||||
assertCreateFails(
|
||||
BranchNameKey.create(allUsers, RefNames.refsUsers(Account.id(1))),
|
||||
RefNames.refsUsers(admin.id()),
|
||||
ResourceConflictException.class,
|
||||
"Not allowed to create user branch.");
|
||||
BadRequestException.class,
|
||||
"Not allowed to create branches under Gerrit internal or tags refs.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createGroupBranch_Conflict() throws Exception {
|
||||
public void createGroupBranch_NotAllowed() throws Exception {
|
||||
projectOperations
|
||||
.project(allUsers)
|
||||
.forUpdate()
|
||||
@@ -232,8 +232,8 @@ public class CreateBranchIT extends AbstractDaemonTest {
|
||||
assertCreateFails(
|
||||
BranchNameKey.create(allUsers, RefNames.refsGroups(AccountGroup.uuid("foo"))),
|
||||
RefNames.refsGroups(adminGroupUuid()),
|
||||
ResourceConflictException.class,
|
||||
"Not allowed to create group branch.");
|
||||
BadRequestException.class,
|
||||
"Not allowed to create branches under Gerrit internal or tags refs.");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -354,6 +354,22 @@ public class CreateBranchIT extends AbstractDaemonTest {
|
||||
"not allowed to create branches under \"" + MagicBranch.NEW_CHANGE + "\"");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void cannotCreateBranchInGerritInternalRefsNamespace() throws Exception {
|
||||
assertCreateFails(
|
||||
BranchNameKey.create(project, RefNames.REFS_CHANGES + "00/1000"),
|
||||
BadRequestException.class,
|
||||
"Not allowed to create branches under Gerrit internal or tags refs.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void cannotCreateBranchInTagsNamespace() throws Exception {
|
||||
assertCreateFails(
|
||||
BranchNameKey.create(project, RefNames.REFS_TAGS + "v1.0"),
|
||||
BadRequestException.class,
|
||||
"Not allowed to create branches under Gerrit internal or tags refs.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void cannotCreateBranchWithInvalidName() throws Exception {
|
||||
assertCreateFails(
|
||||
|
||||
Reference in New Issue
Block a user