package keywhiz.cli.commands; import com.google.common.base.Throwables; import java.io.IOException; import java.util.List; import keywhiz.api.model.SanitizedSecret; import keywhiz.cli.Printing; import keywhiz.cli.configs.ListVersionsActionConfig; import keywhiz.client.KeywhizClient; import keywhiz.client.KeywhizClient.NotFoundException; import static java.lang.String.format; import static keywhiz.cli.Utilities.VALID_NAME_PATTERN; import static keywhiz.cli.Utilities.validName; public class ListVersionsAction implements Runnable { private final ListVersionsActionConfig listVersionsActionConfig; private final KeywhizClient keywhizClient; private final Printing printing; public ListVersionsAction(ListVersionsActionConfig listVersionsActionConfig, KeywhizClient client, Printing printing) { this.listVersionsActionConfig = listVersionsActionConfig; this.keywhizClient = client; this.printing = printing; } @Override public void run() { if (listVersionsActionConfig.name == null || !validName(listVersionsActionConfig.name)) { throw new IllegalArgumentException(format("Invalid name, must match %s", VALID_NAME_PATTERN)); } try { SanitizedSecret sanitizedSecret = keywhizClient.getSanitizedSecretByName(listVersionsActionConfig.name); List<SanitizedSecret> versions = keywhizClient.listSecretVersions(sanitizedSecret.name(), listVersionsActionConfig.idx, listVersionsActionConfig.number); // The current version can never be negative printing.printSecretVersions(versions, sanitizedSecret.version().orElse(-1L)); } catch (NotFoundException e) { throw new AssertionError("Secret does not exist: " + listVersionsActionConfig.name); } catch (IOException e) { throw Throwables.propagate(e); } } }