package io.cattle.platform.bootstrap.script;
import io.cattle.platform.archaius.util.ArchaiusUtil;
import io.cattle.platform.iaas.api.request.handler.ScriptsHandler;
import io.cattle.platform.token.impl.RSAKeyProvider;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.cert.Certificate;
import javax.inject.Inject;
import org.apache.commons.io.IOUtils;
import com.netflix.config.DynamicStringProperty;
public class BootstrapScriptsHandler implements ScriptsHandler {
private static final DynamicStringProperty BOOTSTRAP_SOURCE = ArchaiusUtil.getString("bootstrap.source");
private static final DynamicStringProperty REQUIRED_IMAGE = ArchaiusUtil.getString("bootstrap.required.image");
private static final String BOOTSTRAP = "bootstrap";
@Inject
RSAKeyProvider keyProvider;
@Override
public boolean handle(ApiRequest request) throws IOException {
if (!BOOTSTRAP.equals(request.getId())) {
return false;
}
byte[] content = getBootstrapSource(request);
IOUtils.copy(new ByteArrayInputStream(content), request.getServletContext().getResponse().getOutputStream());
return true;
}
protected byte[] getBootstrapSource(ApiRequest apiRequest) throws IOException {
ClassLoader cl = BootstrapScriptsHandler.class.getClassLoader();
Certificate cert = keyProvider.getCACertificate();
byte[] pem = keyProvider.toBytes(cert);
try (InputStream is = cl.getResourceAsStream(BOOTSTRAP_SOURCE.get())) {
String content = IOUtils.toString(is);
content = content.replace("REQUIRED_IMAGE=", String.format("REQUIRED_IMAGE=\"%s\"", REQUIRED_IMAGE.get()));
content = content.replace("DETECTED_CATTLE_AGENT_IP=", String.format("DETECTED_CATTLE_AGENT_IP=\"%s\"", apiRequest.getClientIp()));
content = content.replace("%CERT%", new String(pem, "UTF-8"));
return content.getBytes("UTF-8");
}
}
}