package org.ovirt.engine.core.bll.hostdeploy; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.logging.Level; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.utils.PKIResources; import org.ovirt.engine.core.utils.hostinstall.OpenSslCAWrapper; import org.ovirt.otopi.dialog.Event; import org.ovirt.ovirt_host_deploy.constants.Const; import org.ovirt.ovirt_host_deploy.constants.Displays; import org.ovirt.ovirt_host_deploy.constants.VdsmEnv; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class VdsDeployPKIUnit implements VdsDeployUnit { private static final Logger log = LoggerFactory.getLogger(VdsDeployPKIUnit.class); private final List<Callable<Boolean>> CUSTOMIZATION_DIALOG = new ArrayList() {{ add( new Callable<Boolean>() { public Boolean call() throws Exception { _deploy.getParser().cliEnvironmentSet( VdsmEnv.CERTIFICATE_ENROLLMENT, Const.CERTIFICATE_ENROLLMENT_INLINE ); return true; }} );}}; private VdsDeployBase _deploy; private String _certificate; // VdsDeployUnit interface @Override public void setVdsDeploy(VdsDeployBase deploy) { _deploy = deploy; } @Override public void init() { _deploy.addCustomizationDialog(CUSTOMIZATION_DIALOG); } @Override public boolean processEvent(Event.Base bevent) throws IOException { boolean unknown = true; if (bevent instanceof Event.QueryMultiString) { Event.QueryMultiString event = (Event.QueryMultiString)bevent; if (org.ovirt.ovirt_host_deploy.constants.Queries.CERTIFICATE_CHAIN.equals(event.name)) { event.value = ( PKIResources.getCaCertificate().toString(PKIResources.Format.X509_PEM) + _certificate ).split("\n"); unknown = false; } } else if (bevent instanceof Event.DisplayMultiString) { Event.DisplayMultiString event = (Event.DisplayMultiString)bevent; if (Displays.CERTIFICATE_REQUEST.equals(event.name)) { _deploy.userVisibleLog( Level.INFO, "Enrolling certificate" ); _certificate = OpenSslCAWrapper.signCertificateRequest( StringUtils.join(event.value, "\n"), _deploy.getVds().getHostName(), _deploy.getVds().getHostName() ); unknown = false; } } return unknown; } }