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));
}
}