org.jolokia.jvmagent.client.command.EncryptCommand Maven / Gradle / Ivy
package org.jolokia.jvmagent.client.command;
import org.jolokia.jvmagent.client.util.OptionsAndArgs;
import org.jolokia.jvmagent.client.util.VirtualMachineHandler;
import org.jolokia.util.*;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.security.GeneralSecurityException;
import java.util.List;
/**
* Command for encrypting a password which can be used in the configuration
* to e.g. access a keystore.
*
* @author nevenr
* @since 12/09/2015.
*/
public class EncryptCommand extends AbstractBaseCommand {
private final JolokiaCipher.KeyHolder keyHolder;
public EncryptCommand() {
this(null);
}
public EncryptCommand(JolokiaCipher.KeyHolder pKeyHolder) {
this.keyHolder = pKeyHolder;
}
@Override
String getName() {
return "encrypt";
}
@Override
int execute(OptionsAndArgs pOpts, Object pVm, VirtualMachineHandler pHandler)
throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
try {
List args = pOpts.getExtraArgs();
String password = args.size() == 0 ?
getPasswordFromConsoleOrStdin(pOpts) :
args.get(0);
JolokiaCipher jolokiaCipher = keyHolder != null ?
new JolokiaCipher(keyHolder) :
new JolokiaCipher();
String encrypted = jolokiaCipher.encrypt(password);
System.out.printf("[[%s]]%n", encrypted);
return 0;
} catch (GeneralSecurityException exp) {
throw new InvocationTargetException(exp,"Can not encrypt password");
}
}
private String getPasswordFromConsoleOrStdin(OptionsAndArgs pOpts) {
Console console = System.console();
if (console != null) {
char[] password = console.readPassword(pOpts.isQuiet() ? "" : "Enter password : ");
return new String(password);
} else {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
return reader.readLine();
} catch (IOException e) {
throw new IllegalArgumentException("Cannot read password from standard input: " + e);
}
}
}
}