Adapt to permission backend Change-Id: I47acb21795718ff6b9312f3ba25d034865017fb6
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/CompleteProjectImport.java b/src/main/java/com/googlesource/gerrit/plugins/importer/CompleteProjectImport.java index 2df913f..2767f13 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/importer/CompleteProjectImport.java +++ b/src/main/java/com/googlesource/gerrit/plugins/importer/CompleteProjectImport.java
@@ -14,8 +14,11 @@ package com.googlesource.gerrit.plugins.importer; +import static com.google.gerrit.server.permissions.GlobalPermission.ADMINISTRATE_SERVER; + import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.annotations.RequiresCapability; +import com.google.gerrit.extensions.api.access.PluginPermission; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; @@ -24,9 +27,9 @@ import com.google.gerrit.extensions.webui.UiAction; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.CurrentUser; -import com.google.gerrit.server.account.CapabilityControl; import com.google.gerrit.server.config.ConfigResource; import com.google.gerrit.server.git.GitRepositoryManager; +import com.google.gerrit.server.permissions.PermissionBackend; import com.google.gerrit.server.project.ProjectResource; import com.google.inject.Inject; import com.google.inject.Provider; @@ -123,16 +126,19 @@ private final CompleteProjectImport completeProjectImport; private final Provider<CurrentUser> currentUserProvider; private final String pluginName; + private final PermissionBackend permissionBackend; @Inject public OnProjects(ProjectsCollection projectsCollection, CompleteProjectImport completeProjectImport, Provider<CurrentUser> currentUserProvider, - @PluginName String pluginName) { + @PluginName String pluginName, + PermissionBackend permissionBackend) { this.projectsCollection = projectsCollection; this.completeProjectImport = completeProjectImport; this.currentUserProvider = currentUserProvider; this.pluginName = pluginName; + this.permissionBackend = permissionBackend; } @Override @@ -170,10 +176,10 @@ } private boolean canCompleteImport(ProjectResource rsrc) { - CapabilityControl ctl = currentUserProvider.get().getCapabilities(); - return ctl.canAdministrateServer() - || (ctl.canPerform(pluginName + "-" + ImportCapability.ID) - && rsrc.getControl().isOwner()); + return permissionBackend.user(currentUserProvider).testOrFalse(ADMINISTRATE_SERVER) || + (permissionBackend.user(currentUserProvider).testOrFalse( + new PluginPermission(pluginName, ImportCapability.ID)) + && rsrc.getControl().isOwner()); } } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/CopyProject.java b/src/main/java/com/googlesource/gerrit/plugins/importer/CopyProject.java index 579d684..cc33fd9 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/importer/CopyProject.java +++ b/src/main/java/com/googlesource/gerrit/plugins/importer/CopyProject.java
@@ -14,19 +14,23 @@ package com.googlesource.gerrit.plugins.importer; +import static com.google.gerrit.server.permissions.GlobalPermission.ADMINISTRATE_SERVER; + import com.google.common.base.Strings; import com.google.gerrit.common.errors.NoSuchAccountException; import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.annotations.RequiresCapability; +import com.google.gerrit.extensions.api.access.PluginPermission; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.webui.UiAction; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.CurrentUser; -import com.google.gerrit.server.account.CapabilityControl; import com.google.gerrit.server.config.ConfigResource; import com.google.gerrit.server.update.UpdateException; +import com.google.gerrit.server.permissions.PermissionBackend; +import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gerrit.server.project.ProjectResource; import com.google.gerrit.server.validators.ValidationException; @@ -55,24 +59,26 @@ private final ImportProject.Factory importProjectFactory; private final Provider<CurrentUser> currentUserProvider; private final String pluginName; - + private final PermissionBackend permissionBackend; private Writer err; @Inject CopyProject( ImportProject.Factory importProjectFactory, Provider<CurrentUser> currentUserProvider, - @PluginName String pluginName) { + @PluginName String pluginName, + PermissionBackend permissionBackend) { this.importProjectFactory = importProjectFactory; this.currentUserProvider = currentUserProvider; this.pluginName = pluginName; + this.permissionBackend = permissionBackend; } @Override public ImportStatistic apply(ProjectResource rsrc, Input input) throws RestApiException, OrmException, IOException, ValidationException, GitAPIException, NoSuchChangeException, NoSuchAccountException, - UpdateException, ConfigInvalidException { + UpdateException, ConfigInvalidException, PermissionBackendException { if (Strings.isNullOrEmpty(input.name)) { throw new BadRequestException("name is required"); } @@ -95,9 +101,9 @@ } private boolean canCopy() { - CapabilityControl ctl = currentUserProvider.get().getCapabilities(); - return ctl.canAdministrateServer() - || ctl.canPerform(pluginName + "-" + CopyProjectCapability.ID); + return permissionBackend.user(currentUserProvider).testOrFalse(ADMINISTRATE_SERVER) || + permissionBackend.user(currentUserProvider).testOrFalse( + new PluginPermission(pluginName, CopyProjectCapability.ID)); } void setErr(PrintWriter err) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroup.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroup.java index e2eec41..7016c39 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroup.java +++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroup.java
@@ -16,6 +16,7 @@ import static com.google.gerrit.reviewdb.client.AccountGroup.isInternalGroup; +import com.google.gerrit.common.TimeUtil; import com.google.gerrit.common.errors.NoSuchAccountException; import com.google.gerrit.extensions.annotations.RequiresCapability; import com.google.gerrit.extensions.common.AccountInfo; @@ -272,7 +273,8 @@ AccountGroup.Id groupId = new AccountGroup.Id(db.nextAccountGroupId()); AccountGroup.UUID uuid = new AccountGroup.UUID(info.id); AccountGroup group = - new AccountGroup(new AccountGroup.NameKey(info.name), groupId, uuid); + new AccountGroup(new AccountGroup.NameKey(info.name), groupId, uuid, + TimeUtil.nowTs()); group.setVisibleToAll(cfg.getBoolean("groups", "newGroupsVisibleToAll", false)); group.setDescription(info.description);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportMenu.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportMenu.java index f0b0976..2edfdc1 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportMenu.java +++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportMenu.java
@@ -14,12 +14,15 @@ package com.googlesource.gerrit.plugins.importer; +import static com.google.gerrit.server.permissions.GlobalPermission.ADMINISTRATE_SERVER; + import com.google.common.collect.Lists; import com.google.gerrit.extensions.annotations.PluginName; +import com.google.gerrit.extensions.api.access.PluginPermission; import com.google.gerrit.extensions.client.MenuItem; import com.google.gerrit.extensions.webui.TopMenu; import com.google.gerrit.server.CurrentUser; -import com.google.gerrit.server.account.CapabilityControl; +import com.google.gerrit.server.permissions.PermissionBackend; import com.google.inject.Inject; import com.google.inject.Provider; @@ -29,13 +32,16 @@ private final String pluginName; private final Provider<CurrentUser> userProvider; private final List<MenuEntry> menuEntries; + private final PermissionBackend permissionBackend; @Inject ImportMenu( @PluginName String pluginName, - Provider<CurrentUser> userProvider) { + Provider<CurrentUser> userProvider, + PermissionBackend permissionBackend) { this.pluginName = pluginName; this.userProvider = userProvider; + this.permissionBackend = permissionBackend; menuEntries = Lists.newArrayList(); List<MenuItem> projectItems = Lists.newArrayListWithExpectedSize(2); @@ -54,9 +60,9 @@ } private boolean canImport() { - CapabilityControl ctl = userProvider.get().getCapabilities(); - return ctl.canAdministrateServer() - || ctl.canPerform(pluginName + "-" + ImportCapability.ID); + return permissionBackend.user(userProvider).testOrFalse( + new PluginPermission(pluginName, ImportCapability.ID)) || + permissionBackend.user(userProvider).testOrFalse(ADMINISTRATE_SERVER); } @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProject.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProject.java index ea00a2d..9e7c61b 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProject.java +++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProject.java
@@ -29,6 +29,7 @@ import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.config.ConfigResource; import com.google.gerrit.server.update.UpdateException; +import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gerrit.server.project.ProjectCache; import com.google.gerrit.server.project.ProjectState; @@ -166,7 +167,7 @@ public ImportStatistic apply(ConfigResource rsrc, Input input) throws RestApiException, OrmException, IOException, ValidationException, GitAPIException, NoSuchChangeException, NoSuchAccountException, - UpdateException, ConfigInvalidException { + UpdateException, ConfigInvalidException, PermissionBackendException { if (input == null) { input = new Input(); } @@ -182,7 +183,7 @@ public ResumeImportStatistic resume(String user, String pass, boolean force, File importStatus) throws RestApiException, OrmException, IOException, GitAPIException, NoSuchChangeException, NoSuchAccountException, - UpdateException, ConfigInvalidException { + UpdateException, ConfigInvalidException, PermissionBackendException { LockFile lockFile = lockForImport(); try { ImportProjectInfo info = ImportJson.parse(importStatus); @@ -205,7 +206,8 @@ private ResumeImportStatistic apply(LockFile lockFile, Input input, ImportProjectInfo info) throws RestApiException, OrmException, IOException, GitAPIException, NoSuchChangeException, - NoSuchAccountException, UpdateException, ConfigInvalidException { + NoSuchAccountException, UpdateException, ConfigInvalidException, + PermissionBackendException { boolean resume = info != null; api = apiFactory.create(input.from, input.user, input.pass);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/LocalApi.java b/src/main/java/com/googlesource/gerrit/plugins/importer/LocalApi.java index a5dd841..9248b8c 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/importer/LocalApi.java +++ b/src/main/java/com/googlesource/gerrit/plugins/importer/LocalApi.java
@@ -31,6 +31,7 @@ import com.google.gerrit.server.account.AccountResource; import com.google.gerrit.server.account.AccountsCollection; import com.google.gerrit.server.account.GetSshKeys; +import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; @@ -128,7 +129,7 @@ accounts.parse(TopLevelResource.INSTANCE, IdString.fromDecoded(userId)); return getSshKeys.apply(rsrc); - } catch (ResourceNotFoundException | AuthException e) { + } catch (ResourceNotFoundException | AuthException | PermissionBackendException e) { throw new BadRequestException(e.getMessage()); } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/OpenRepositoryStep.java b/src/main/java/com/googlesource/gerrit/plugins/importer/OpenRepositoryStep.java index 9386c68..f37d9b2 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/importer/OpenRepositoryStep.java +++ b/src/main/java/com/googlesource/gerrit/plugins/importer/OpenRepositoryStep.java
@@ -22,6 +22,7 @@ import com.google.gerrit.extensions.restapi.UnprocessableEntityException; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.git.GitRepositoryManager; +import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.project.CreateProjectArgs; import com.google.gerrit.server.project.ProjectCache; import com.google.gerrit.server.project.ProjectsCollection; @@ -58,7 +59,8 @@ Repository open(Project.NameKey name, boolean resume, ProgressMonitor pm, Project.NameKey parent) - throws ResourceConflictException, IOException, UnprocessableEntityException { + throws ResourceConflictException, IOException, UnprocessableEntityException, + PermissionBackendException { pm.beginTask("Open repository", 1); try { Repository repo = git.openRepository(name); @@ -83,7 +85,8 @@ } private void beforeCreateProject(Project.NameKey name, Project.NameKey parent) - throws ResourceConflictException, UnprocessableEntityException, IOException { + throws ResourceConflictException, UnprocessableEntityException, IOException, + PermissionBackendException { CreateProjectArgs args = new CreateProjectArgs(); args.setProjectName(name); args.newParent = projectsCollection.get().parse(parent.get()).getControl();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ProjectCommand.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ProjectCommand.java index 5dbbaae..d55bb4c 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/importer/ProjectCommand.java +++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ProjectCommand.java
@@ -21,6 +21,7 @@ import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.config.ConfigResource; import com.google.gerrit.server.update.UpdateException; +import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gerrit.server.validators.ValidationException; import com.google.gerrit.sshd.CommandMetaData; @@ -73,7 +74,7 @@ protected void run() throws OrmException, IOException, UnloggedFailure, ValidationException, GitAPIException, NoSuchChangeException, NoSuchAccountException, - UpdateException, ConfigInvalidException { + UpdateException, ConfigInvalidException, PermissionBackendException { ImportProject.Input input = new ImportProject.Input(); input.from = url; input.name = name;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ResumeCopyProject.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ResumeCopyProject.java index f58d421..ae6ed9f 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/importer/ResumeCopyProject.java +++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ResumeCopyProject.java
@@ -14,9 +14,12 @@ package com.googlesource.gerrit.plugins.importer; +import static com.google.gerrit.server.permissions.GlobalPermission.ADMINISTRATE_SERVER; + import com.google.gerrit.common.errors.NoSuchAccountException; import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.annotations.RequiresCapability; +import com.google.gerrit.extensions.api.access.PluginPermission; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; import com.google.gerrit.extensions.restapi.RestApiException; @@ -24,9 +27,10 @@ import com.google.gerrit.extensions.webui.UiAction; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.CurrentUser; -import com.google.gerrit.server.account.CapabilityControl; import com.google.gerrit.server.config.ConfigResource; import com.google.gerrit.server.update.UpdateException; +import com.google.gerrit.server.permissions.PermissionBackend; +import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gerrit.server.project.ProjectCache; import com.google.gerrit.server.project.ProjectResource; @@ -55,6 +59,7 @@ private final Provider<CurrentUser> currentUserProvider; private final String pluginName; private final ProjectCache projectCache; + private final PermissionBackend permissionBackend; private Writer err; @@ -64,12 +69,14 @@ ProjectsCollection projectsCollection, Provider<CurrentUser> currentUserProvider, @PluginName String pluginName, - ProjectCache projectCache) { + ProjectCache projectCache, + PermissionBackend permissionBackend) { this.resumeProjectImport = resumeProjectImport; this.projectsCollection = projectsCollection; this.currentUserProvider = currentUserProvider; this.pluginName = pluginName; this.projectCache = projectCache; + this.permissionBackend = permissionBackend; } ResumeCopyProject setErr(Writer err) { @@ -81,7 +88,7 @@ public ResumeImportStatistic apply(ProjectResource rsrc, Input input) throws RestApiException, IOException, OrmException, ValidationException, GitAPIException, NoSuchChangeException, NoSuchAccountException, - UpdateException, ConfigInvalidException { + UpdateException, ConfigInvalidException, PermissionBackendException { ImportProjectResource projectResource = projectsCollection.parse(new ConfigResource(), IdString.fromDecoded(rsrc.getName())); @@ -103,10 +110,10 @@ } private boolean canResumeCopy(ProjectResource rsrc) { - CapabilityControl ctl = currentUserProvider.get().getCapabilities(); - return ctl.canAdministrateServer() - || (ctl.canPerform(pluginName + "-" + CopyProjectCapability.ID) - && rsrc.getControl().isOwner()); + return permissionBackend.user(currentUserProvider).testOrFalse(ADMINISTRATE_SERVER) || + (permissionBackend.user(currentUserProvider).testOrFalse( + new PluginPermission(pluginName, CopyProjectCapability.ID)) && + rsrc.getControl().isOwner()); } private boolean isCopied(ProjectResource rsrc) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ResumeProjectImport.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ResumeProjectImport.java index 40e0d26..996c7e4 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/importer/ResumeProjectImport.java +++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ResumeProjectImport.java
@@ -14,10 +14,13 @@ package com.googlesource.gerrit.plugins.importer; +import static com.google.gerrit.server.permissions.GlobalPermission.ADMINISTRATE_SERVER; + import com.google.common.base.Strings; import com.google.gerrit.common.errors.NoSuchAccountException; import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.annotations.RequiresCapability; +import com.google.gerrit.extensions.api.access.PluginPermission; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; @@ -25,9 +28,10 @@ import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.webui.UiAction; import com.google.gerrit.server.CurrentUser; -import com.google.gerrit.server.account.CapabilityControl; import com.google.gerrit.server.config.ConfigResource; import com.google.gerrit.server.update.UpdateException; +import com.google.gerrit.server.permissions.PermissionBackend; +import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gerrit.server.project.ProjectResource; import com.google.gerrit.server.validators.ValidationException; @@ -95,7 +99,7 @@ public ResumeImportStatistic apply(ImportProjectResource rsrc, Input input) throws RestApiException, IOException, OrmException, ValidationException, GitAPIException, NoSuchChangeException, NoSuchAccountException, - UpdateException, ConfigInvalidException { + UpdateException, ConfigInvalidException, PermissionBackendException { if (copy) { input.validateResumeCopy(); } else { @@ -115,24 +119,27 @@ private final ResumeProjectImport resumeProjectImport; private final Provider<CurrentUser> currentUserProvider; private final String pluginName; + private final PermissionBackend permissionBackend; @Inject public OnProjects( ProjectsCollection projectsCollection, ResumeProjectImport resumeProjectImport, Provider<CurrentUser> currentUserProvider, - @PluginName String pluginName) { + @PluginName String pluginName, + PermissionBackend permissionBackend) { this.projectsCollection = projectsCollection; this.resumeProjectImport = resumeProjectImport; this.currentUserProvider = currentUserProvider; this.pluginName = pluginName; + this.permissionBackend = permissionBackend; } @Override public ResumeImportStatistic apply(ProjectResource rsrc, Input input) throws RestApiException, IOException, OrmException, ValidationException, GitAPIException, NoSuchChangeException, NoSuchAccountException, - UpdateException, ConfigInvalidException { + UpdateException, ConfigInvalidException, PermissionBackendException { ImportProjectResource projectResource = projectsCollection.parse(new ConfigResource(), IdString.fromDecoded(rsrc.getName())); @@ -148,10 +155,10 @@ } private boolean canResumeImport(ProjectResource rsrc) { - CapabilityControl ctl = currentUserProvider.get().getCapabilities(); - return ctl.canAdministrateServer() - || (ctl.canPerform(pluginName + "-" + ImportCapability.ID) - && rsrc.getControl().isOwner()); + return permissionBackend.user(currentUserProvider).testOrFalse(ADMINISTRATE_SERVER) || + (permissionBackend.user(currentUserProvider).testOrFalse( + new PluginPermission(pluginName, ImportCapability.ID)) && + rsrc.getControl().isOwner()); } private boolean isImported(ProjectResource rsrc) {