/*
* Copyright (C) 2014 Intel Corporation
* All rights reserved.
*/
package com.intel.mtwilson.trustagent.setup;
import com.intel.dcsg.cpg.configuration.Configuration;
import com.intel.dcsg.cpg.configuration.EnvironmentConfiguration;
import com.intel.dcsg.cpg.configuration.KeyTransformerConfiguration;
import com.intel.dcsg.cpg.configuration.MutableConfiguration;
import com.intel.dcsg.cpg.extensions.Extensions;
import com.intel.dcsg.cpg.util.AllCapsNamingStrategy;
import com.intel.mtwilson.setup.AbstractSetupTask;
import com.intel.mtwilson.tls.policy.creator.impl.CertificateDigestTlsPolicyCreator;
import com.intel.mtwilson.tls.policy.creator.impl.CertificateTlsPolicyCreator;
import com.intel.mtwilson.tls.policy.creator.impl.InsecureTlsPolicyCreator;
import com.intel.mtwilson.tls.policy.creator.impl.InsecureTrustFirstPublicKeyTlsPolicyCreator;
import com.intel.mtwilson.tls.policy.creator.impl.PublicKeyDigestTlsPolicyCreator;
import com.intel.mtwilson.tls.policy.creator.impl.PublicKeyTlsPolicyCreator;
import com.intel.mtwilson.tls.policy.factory.TlsPolicyCreator;
import com.intel.mtwilson.trustagent.TrustagentConfiguration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
/**
*
* @author jbuhacoff
*/
public class ConfigureFromEnvironment extends AbstractSetupTask {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ConfigureFromEnvironment.class);
private MutableConfiguration configuration;
private String[] variables;
private AllCapsNamingStrategy allcaps;
private Configuration env;
@Override
protected void configure() throws Exception {
log.debug("setup task configuration instance {}", getConfiguration());
configuration = getConfiguration();
variables = new String[] {
TrustagentConfiguration.MTWILSON_API_URL,
TrustagentConfiguration.MTWILSON_API_USERNAME, // NOTE: excluded from storing in trustagent.properties by com.intel.mtwilson.trustagent.cmd.Setup beforeStore
TrustagentConfiguration.MTWILSON_API_PASSWORD, // NOTE: excluded from storing in trustagent.properties by com.intel.mtwilson.trustagent.cmd.Setup beforeStore
TrustagentConfiguration.MTWILSON_TLS_CERT_SHA1,
TrustagentConfiguration.TPM_QUOTE_IPV4,
TrustagentConfiguration.TPM_OWNER_SECRET,
TrustagentConfiguration.TPM_SRK_SECRET,
TrustagentConfiguration.TRUSTAGENT_HTTP_TLS_PORT,
TrustagentConfiguration.TRUSTAGENT_KEYSTORE_PASSWORD,
TrustagentConfiguration.TRUSTAGENT_TLS_CERT_DN,
TrustagentConfiguration.TRUSTAGENT_TLS_CERT_DNS,
TrustagentConfiguration.TRUSTAGENT_TLS_CERT_IP,
TrustagentConfiguration.AIK_SECRET,
TrustagentConfiguration.AIK_INDEX,
TrustagentConfiguration.DAA_ENABLED,
TrustagentConfiguration.HARDWARE_UUID
};
allcaps = new AllCapsNamingStrategy();
env = new KeyTransformerConfiguration(allcaps, new EnvironmentConfiguration()); // transforms mtwilson.ssl.cert.sha1 to MTWILSON_SSL_CERT_SHA1
// TODO: load extensions temporarily so that installer works
Extensions.register(TlsPolicyCreator.class, CertificateTlsPolicyCreator.class);
Extensions.register(TlsPolicyCreator.class, CertificateDigestTlsPolicyCreator.class);
Extensions.register(TlsPolicyCreator.class, PublicKeyTlsPolicyCreator.class);
Extensions.register(TlsPolicyCreator.class, PublicKeyDigestTlsPolicyCreator.class);
Extensions.register(TlsPolicyCreator.class, InsecureTlsPolicyCreator.class);
Extensions.register(TlsPolicyCreator.class, InsecureTrustFirstPublicKeyTlsPolicyCreator.class);
}
@Override
protected void validate() throws Exception {
ArrayList<String> updatelist = new ArrayList<>();
for (String variable : variables) {
String envValue = env.getString(variable);
String confValue = configuration.getString(variable);
log.debug("checking to see if environment variable [{}] needs to be added to configuration", variable);
log.debug("env {} property {}", envValue, confValue);
if (envValue != null && !envValue.isEmpty() && (confValue == null || !confValue.equals(envValue))) {
log.debug("environment variable [{}] needs to be added to configuration", variable);
updatelist.add(variable);
}
}
if (!updatelist.isEmpty()) {
validation("Updates available for %d settings: %s", updatelist.size(), StringUtils.join(updatelist, ","));
}
}
@Override
protected void execute() throws Exception {
for (String variable : variables) {
String envValue = env.getString(variable);
if (envValue != null && !envValue.isEmpty()) {
log.debug("Copying environment variable {} to configuration property {} with value {}", allcaps.toAllCaps(variable), variable, envValue);
configuration.setString(variable, envValue);
}
}
}
}