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
|
link:rest-api-groups.html#group-info[GroupInfo] objects, describing
|
||||||
the group UUIDs used in the `local` map. Groups that are not visible
|
the group UUIDs used in the `local` map. Groups that are not visible
|
||||||
are omitted from the `groups` map.
|
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.GroupInfo;
|
||||||
import com.google.gerrit.extensions.common.ProjectInfo;
|
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.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -29,4 +31,5 @@ public class ProjectAccessInfo {
|
|||||||
public Boolean canAdd;
|
public Boolean canAdd;
|
||||||
public Boolean configVisible;
|
public Boolean configVisible;
|
||||||
public Map<String, GroupInfo> groups;
|
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.Permission;
|
||||||
import com.google.gerrit.common.data.PermissionRule;
|
import com.google.gerrit.common.data.PermissionRule;
|
||||||
import com.google.gerrit.common.data.RefConfigSection;
|
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.common.errors.NoSuchGroupException;
|
||||||
import com.google.gerrit.extensions.api.access.AccessSectionInfo;
|
import com.google.gerrit.extensions.api.access.AccessSectionInfo;
|
||||||
import com.google.gerrit.extensions.api.access.PermissionInfo;
|
import com.google.gerrit.extensions.api.access.PermissionInfo;
|
||||||
import com.google.gerrit.extensions.api.access.PermissionRuleInfo;
|
import com.google.gerrit.extensions.api.access.PermissionRuleInfo;
|
||||||
import com.google.gerrit.extensions.api.access.ProjectAccessInfo;
|
import com.google.gerrit.extensions.api.access.ProjectAccessInfo;
|
||||||
import com.google.gerrit.extensions.common.GroupInfo;
|
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.AuthException;
|
||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
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.Project;
|
||||||
import com.google.gerrit.reviewdb.client.RefNames;
|
import com.google.gerrit.reviewdb.client.RefNames;
|
||||||
import com.google.gerrit.server.CurrentUser;
|
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.GroupBackend;
|
||||||
import com.google.gerrit.server.account.GroupControl;
|
import com.google.gerrit.server.account.GroupControl;
|
||||||
import com.google.gerrit.server.config.AllProjectsName;
|
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.Provider;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -98,6 +102,7 @@ public class GetAccess implements RestReadView<ProjectResource> {
|
|||||||
private final MetaDataUpdate.Server metaDataUpdateFactory;
|
private final MetaDataUpdate.Server metaDataUpdateFactory;
|
||||||
private final GroupBackend groupBackend;
|
private final GroupBackend groupBackend;
|
||||||
private final GroupJson groupJson;
|
private final GroupJson groupJson;
|
||||||
|
private final WebLinks webLinks;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public GetAccess(
|
public GetAccess(
|
||||||
@@ -109,7 +114,8 @@ public class GetAccess implements RestReadView<ProjectResource> {
|
|||||||
MetaDataUpdate.Server metaDataUpdateFactory,
|
MetaDataUpdate.Server metaDataUpdateFactory,
|
||||||
ProjectJson projectJson,
|
ProjectJson projectJson,
|
||||||
GroupBackend groupBackend,
|
GroupBackend groupBackend,
|
||||||
GroupJson groupJson) {
|
GroupJson groupJson,
|
||||||
|
WebLinks webLinks) {
|
||||||
this.user = self;
|
this.user = self;
|
||||||
this.permissionBackend = permissionBackend;
|
this.permissionBackend = permissionBackend;
|
||||||
this.groupControlFactory = groupControlFactory;
|
this.groupControlFactory = groupControlFactory;
|
||||||
@@ -119,6 +125,7 @@ public class GetAccess implements RestReadView<ProjectResource> {
|
|||||||
this.metaDataUpdateFactory = metaDataUpdateFactory;
|
this.metaDataUpdateFactory = metaDataUpdateFactory;
|
||||||
this.groupBackend = groupBackend;
|
this.groupBackend = groupBackend;
|
||||||
this.groupJson = groupJson;
|
this.groupJson = groupJson;
|
||||||
|
this.webLinks = webLinks;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProjectAccessInfo apply(Project.NameKey nameKey)
|
public ProjectAccessInfo apply(Project.NameKey nameKey)
|
||||||
@@ -147,6 +154,15 @@ public class GetAccess implements RestReadView<ProjectResource> {
|
|||||||
ProjectConfig config;
|
ProjectConfig config;
|
||||||
try (MetaDataUpdate md = metaDataUpdateFactory.create(projectName)) {
|
try (MetaDataUpdate md = metaDataUpdateFactory.create(projectName)) {
|
||||||
config = ProjectConfig.read(md);
|
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)) {
|
if (config.updateGroupNames(groupBackend)) {
|
||||||
md.setMessage("Update group names\n");
|
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.api.projects.ProjectApi;
|
||||||
import com.google.gerrit.extensions.client.ChangeStatus;
|
import com.google.gerrit.extensions.client.ChangeStatus;
|
||||||
import com.google.gerrit.extensions.common.ChangeInfo;
|
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.AuthException;
|
||||||
import com.google.gerrit.extensions.restapi.BadRequestException;
|
import com.google.gerrit.extensions.restapi.BadRequestException;
|
||||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
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.Project;
|
||||||
import com.google.gerrit.reviewdb.client.RefNames;
|
import com.google.gerrit.reviewdb.client.RefNames;
|
||||||
import com.google.gerrit.server.config.AllProjectsNameProvider;
|
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 com.google.gerrit.server.group.SystemGroupBackend;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import javax.inject.Inject;
|
||||||
import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
|
import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
|
||||||
import org.eclipse.jgit.junit.TestRepository;
|
import org.eclipse.jgit.junit.TestRepository;
|
||||||
import org.eclipse.jgit.lib.Config;
|
import org.eclipse.jgit.lib.Config;
|
||||||
@@ -63,6 +68,8 @@ public class AccessIT extends AbstractDaemonTest {
|
|||||||
private String newProjectName;
|
private String newProjectName;
|
||||||
private ProjectApi pApi;
|
private ProjectApi pApi;
|
||||||
|
|
||||||
|
@Inject private DynamicSet<FileHistoryWebLink> fileHistoryWebLinkDynamicSet;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
newProjectName = createProject(PROJECT_NAME).get();
|
newProjectName = createProject(PROJECT_NAME).get();
|
||||||
@@ -75,6 +82,30 @@ public class AccessIT extends AbstractDaemonTest {
|
|||||||
assertThat(inheritedName).isEqualTo(AllProjectsNameProvider.DEFAULT);
|
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
|
@Test
|
||||||
public void addAccessSection() throws Exception {
|
public void addAccessSection() throws Exception {
|
||||||
Project.NameKey p = new Project.NameKey(newProjectName);
|
Project.NameKey p = new Project.NameKey(newProjectName);
|
||||||
|
|||||||
Reference in New Issue
Block a user