Provide browsing URL for GetAccess
This is so the PolyGerrit admin screen can show a link to history like the GWT admin screen does. Change-Id: Ida03b41469a8a785fbc0f37313565a169ce01b93
This commit is contained in:
@@ -406,6 +406,9 @@ project.
|
||||
link:rest-api-groups.html#group-info[GroupInfo] objects, describing
|
||||
the group UUIDs used in the `local` map. Groups that are not visible
|
||||
are omitted from the `groups` map.
|
||||
|`configWebLinks` ||
|
||||
A list of URLs that display the history of the configuration file
|
||||
governing this project's access rights.
|
||||
|==================================
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@ package com.google.gerrit.extensions.api.access;
|
||||
|
||||
import com.google.gerrit.extensions.common.GroupInfo;
|
||||
import com.google.gerrit.extensions.common.ProjectInfo;
|
||||
import com.google.gerrit.extensions.common.WebLinkInfo;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -29,4 +31,5 @@ public class ProjectAccessInfo {
|
||||
public Boolean canAdd;
|
||||
public Boolean configVisible;
|
||||
public Map<String, GroupInfo> groups;
|
||||
public List<WebLinkInfo> configWebLinks;
|
||||
}
|
||||
|
||||
@@ -27,12 +27,14 @@ import com.google.gerrit.common.data.AccessSection;
|
||||
import com.google.gerrit.common.data.Permission;
|
||||
import com.google.gerrit.common.data.PermissionRule;
|
||||
import com.google.gerrit.common.data.RefConfigSection;
|
||||
import com.google.gerrit.common.data.WebLinkInfoCommon;
|
||||
import com.google.gerrit.common.errors.NoSuchGroupException;
|
||||
import com.google.gerrit.extensions.api.access.AccessSectionInfo;
|
||||
import com.google.gerrit.extensions.api.access.PermissionInfo;
|
||||
import com.google.gerrit.extensions.api.access.PermissionRuleInfo;
|
||||
import com.google.gerrit.extensions.api.access.ProjectAccessInfo;
|
||||
import com.google.gerrit.extensions.common.GroupInfo;
|
||||
import com.google.gerrit.extensions.common.WebLinkInfo;
|
||||
import com.google.gerrit.extensions.restapi.AuthException;
|
||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||
@@ -41,6 +43,7 @@ import com.google.gerrit.reviewdb.client.AccountGroup;
|
||||
import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.reviewdb.client.RefNames;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.WebLinks;
|
||||
import com.google.gerrit.server.account.GroupBackend;
|
||||
import com.google.gerrit.server.account.GroupControl;
|
||||
import com.google.gerrit.server.config.AllProjectsName;
|
||||
@@ -61,6 +64,7 @@ import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.Singleton;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
@@ -98,6 +102,7 @@ public class GetAccess implements RestReadView<ProjectResource> {
|
||||
private final MetaDataUpdate.Server metaDataUpdateFactory;
|
||||
private final GroupBackend groupBackend;
|
||||
private final GroupJson groupJson;
|
||||
private final WebLinks webLinks;
|
||||
|
||||
@Inject
|
||||
public GetAccess(
|
||||
@@ -109,7 +114,8 @@ public class GetAccess implements RestReadView<ProjectResource> {
|
||||
MetaDataUpdate.Server metaDataUpdateFactory,
|
||||
ProjectJson projectJson,
|
||||
GroupBackend groupBackend,
|
||||
GroupJson groupJson) {
|
||||
GroupJson groupJson,
|
||||
WebLinks webLinks) {
|
||||
this.user = self;
|
||||
this.permissionBackend = permissionBackend;
|
||||
this.groupControlFactory = groupControlFactory;
|
||||
@@ -119,6 +125,7 @@ public class GetAccess implements RestReadView<ProjectResource> {
|
||||
this.metaDataUpdateFactory = metaDataUpdateFactory;
|
||||
this.groupBackend = groupBackend;
|
||||
this.groupJson = groupJson;
|
||||
this.webLinks = webLinks;
|
||||
}
|
||||
|
||||
public ProjectAccessInfo apply(Project.NameKey nameKey)
|
||||
@@ -147,6 +154,15 @@ public class GetAccess implements RestReadView<ProjectResource> {
|
||||
ProjectConfig config;
|
||||
try (MetaDataUpdate md = metaDataUpdateFactory.create(projectName)) {
|
||||
config = ProjectConfig.read(md);
|
||||
info.configWebLinks = new ArrayList<>();
|
||||
|
||||
// WebLinks operates in terms of the data types used in the GWT UI. Once the GWT UI is gone,
|
||||
// WebLinks should be fixed to use the extension data types.
|
||||
for (WebLinkInfoCommon wl :
|
||||
webLinks.getFileHistoryLinks(
|
||||
projectName.get(), config.getRevision().getName(), ProjectConfig.PROJECT_CONFIG)) {
|
||||
info.configWebLinks.add(new WebLinkInfo(wl.name, wl.imageUrl, wl.url, wl.target));
|
||||
}
|
||||
|
||||
if (config.updateGroupNames(groupBackend)) {
|
||||
md.setMessage("Update group names\n");
|
||||
|
||||
@@ -33,9 +33,13 @@ import com.google.gerrit.extensions.api.projects.BranchInfo;
|
||||
import com.google.gerrit.extensions.api.projects.ProjectApi;
|
||||
import com.google.gerrit.extensions.client.ChangeStatus;
|
||||
import com.google.gerrit.extensions.common.ChangeInfo;
|
||||
import com.google.gerrit.extensions.common.WebLinkInfo;
|
||||
import com.google.gerrit.extensions.registration.DynamicSet;
|
||||
import com.google.gerrit.extensions.registration.RegistrationHandle;
|
||||
import com.google.gerrit.extensions.restapi.AuthException;
|
||||
import com.google.gerrit.extensions.restapi.BadRequestException;
|
||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||
import com.google.gerrit.extensions.webui.FileHistoryWebLink;
|
||||
import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.reviewdb.client.RefNames;
|
||||
import com.google.gerrit.server.config.AllProjectsNameProvider;
|
||||
@@ -43,6 +47,7 @@ import com.google.gerrit.server.git.ProjectConfig;
|
||||
import com.google.gerrit.server.group.SystemGroupBackend;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import javax.inject.Inject;
|
||||
import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
|
||||
import org.eclipse.jgit.junit.TestRepository;
|
||||
import org.eclipse.jgit.lib.Config;
|
||||
@@ -63,6 +68,8 @@ public class AccessIT extends AbstractDaemonTest {
|
||||
private String newProjectName;
|
||||
private ProjectApi pApi;
|
||||
|
||||
@Inject private DynamicSet<FileHistoryWebLink> fileHistoryWebLinkDynamicSet;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
newProjectName = createProject(PROJECT_NAME).get();
|
||||
@@ -75,6 +82,30 @@ public class AccessIT extends AbstractDaemonTest {
|
||||
assertThat(inheritedName).isEqualTo(AllProjectsNameProvider.DEFAULT);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void webLinks() throws Exception {
|
||||
RegistrationHandle handle =
|
||||
fileHistoryWebLinkDynamicSet.add(
|
||||
new FileHistoryWebLink() {
|
||||
@Override
|
||||
public WebLinkInfo getFileHistoryWebLink(
|
||||
String projectName, String revision, String fileName) {
|
||||
WebLinkInfo info =
|
||||
new WebLinkInfo(
|
||||
"name", "imageURL", "http://view/" + projectName + "/" + fileName);
|
||||
return info;
|
||||
}
|
||||
});
|
||||
try {
|
||||
ProjectAccessInfo info = pApi.access();
|
||||
assertThat(info.configWebLinks).hasSize(1);
|
||||
assertThat(info.configWebLinks.get(0).url)
|
||||
.isEqualTo("http://view/" + newProjectName + "/project.config");
|
||||
} finally {
|
||||
handle.remove();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addAccessSection() throws Exception {
|
||||
Project.NameKey p = new Project.NameKey(newProjectName);
|
||||
|
||||
Reference in New Issue
Block a user