package se.bjurr.prnfb.http; import static com.google.common.base.Optional.fromNullable; import java.io.File; import java.io.FileInputStream; import java.security.KeyStore; import java.security.KeyStoreException; import se.bjurr.prnfb.settings.PrnfbSettingsData; import com.google.common.base.Optional; /** * A keystore based on the definition from the application properties.<br> * <br> * Inspired by:<br> * Philip Dodds (pdodds) https://github.com/pdodds */ public class ClientKeyStore { private KeyStore keyStore = null; private char[] password = null; public ClientKeyStore(PrnfbSettingsData settings) { if (settings.getKeyStore().isPresent()) { File keyStoreFile = new File(settings.getKeyStore().get()); try { this.keyStore = getKeyStore(settings.getKeyStoreType()); if (settings.getKeyStorePassword().isPresent()) { this.password = settings.getKeyStorePassword().get().toCharArray(); } this.keyStore.load(new FileInputStream(keyStoreFile), this.password); } catch (Exception e) { throw new RuntimeException( "Unable to build keystore from " + keyStoreFile.getAbsolutePath(), e); } } } public Optional<KeyStore> getKeyStore() { return fromNullable(this.keyStore); } public char[] getPassword() { return this.password; } private KeyStore getKeyStore(String keyStoreType) throws KeyStoreException { if (keyStoreType != null) { return KeyStore.getInstance(keyStoreType); } else { return KeyStore.getInstance(KeyStore.getDefaultType()); } } }