Use lower-level SetInactiveFlag to disable account Rely on the Gerrit lower-level interface to disable accounts so that users can be allowed to self-disable themselves. Access to self-removal is however protected by a new permission provided by this plugin. Skipping thus the self-disabling check in Gerrit is considered safe in this case. Change-Id: Id0b49348d3e745ba993e2583baad03af7aebc6ed
diff --git a/src/main/java/com/gerritforge/gerrit/plugins/account/GerritAccountRemover.java b/src/main/java/com/gerritforge/gerrit/plugins/account/GerritAccountRemover.java index bf1553b..d12830b 100644 --- a/src/main/java/com/gerritforge/gerrit/plugins/account/GerritAccountRemover.java +++ b/src/main/java/com/gerritforge/gerrit/plugins/account/GerritAccountRemover.java
@@ -24,9 +24,11 @@ import com.google.gerrit.extensions.common.EmailInfo; import com.google.gerrit.extensions.common.SshKeyInfo; import com.google.gerrit.extensions.restapi.RestApiException; +import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.account.AccountResource; import com.google.gerrit.server.account.PutName; +import com.google.gerrit.server.account.SetInactiveFlag; import com.google.gerrit.server.account.externalids.ExternalId; import com.google.gerrit.server.permissions.PermissionBackend; import com.google.inject.Inject; @@ -34,16 +36,14 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class GerritAccountRemover implements AccountRemover { - private static final Logger log = LoggerFactory.getLogger(GerritAccountRemover.class); private final Accounts accounts; private final PutName putName; private final AccountResourceFactory accountFactory; private final PermissionBackend permissionBackend; private final Provider<CurrentUser> userProvider; + private final SetInactiveFlag setInactive; private final String pluginName; @Inject @@ -53,12 +53,14 @@ AccountResourceFactory accountFactory, PermissionBackend permissionBackend, Provider<CurrentUser> userProvider, + SetInactiveFlag setInactive, @PluginName String pluginName) { this.accounts = api.accounts(); this.putName = putName; this.accountFactory = accountFactory; this.permissionBackend = permissionBackend; this.userProvider = userProvider; + this.setInactive = setInactive; this.pluginName = pluginName; } @@ -84,7 +86,7 @@ removeExternalIds(account); removeFullName(getAccountResource(accountId)); if (account.getActive()) { - account.setActive(false); + setInactive.deactivate(new Account.Id(accountId)); } }