blob: 652ad218b5fb8df3f230b7ec11569da4f5f1b498 [file] [log] [blame]
// Copyright (C) 2018 GerritForge Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.gerritforge.gerrit.plugins.account;
import com.google.common.annotations.VisibleForTesting;
import com.google.gerrit.server.account.AccountResource;
import com.google.gerrit.sshd.CommandMetaData;
import com.google.gerrit.sshd.SshCommand;
import com.google.inject.Inject;
import java.io.PrintWriter;
import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.Option;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@CommandMetaData(name = "delete", description = "Delete a specific account")
public class DeleteAccountCommand extends SshCommand {
private static final Logger log = LoggerFactory.getLogger(DeleteAccountCommand.class);
@Argument(index = 0, required = true, metaVar = "ACCOUNT-ID", usage = "id of the account")
private int accountId;
@Option(
name = "--yes-really-delete",
metaVar = "ACCOUNT-NAME",
usage = "confirmation to delete the account")
private String accountName;
private final AccountResourceFactory accountFactory;
private final DeleteAccount deleteAccount;
@Inject
public DeleteAccountCommand(AccountResourceFactory accountFactory, DeleteAccount deleteAccount) {
this.accountFactory = accountFactory;
this.deleteAccount = deleteAccount;
}
@Override
protected void run() throws UnloggedFailure, Failure, Exception {
try {
AccountResource account = accountFactory.create(accountId);
DeleteAccount.Input input = new DeleteAccount.Input();
input.accountName = accountName;
DeleteAccountResponse resp =
(DeleteAccountResponse) deleteAccount.apply(account, input).value();
@SuppressWarnings("resource")
PrintWriter out = resp.deleted ? stdout : stderr;
out.println("Account " + (resp.deleted ? "" : "NOT") + " deleted");
} catch (Exception e) {
stderr.printf("FAILED (%s): %s\n", e.getClass().getName(), e.getMessage());
stderr.flush();
log.error("Unable to remove account %d", accountId, e);
die(e);
}
}
@VisibleForTesting
public void testRun(int accountId, String accountName) throws Exception {
this.accountId = accountId;
this.accountName = accountName;
run();
}
@VisibleForTesting
public void setPrintWriters(PrintWriter out, PrintWriter err) {
this.stdout = out;
this.stderr = err;
}
}