package io.cattle.platform.host.api;
import io.cattle.platform.host.service.HostApiService;
import io.cattle.platform.iaas.api.request.handler.ScriptsHandler;
import io.cattle.platform.ssh.common.SshKeyGen;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import java.io.IOException;
import java.security.PublicKey;
import java.util.Map;
import javax.inject.Inject;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HostApiPublicKeyScriptHandler implements ScriptsHandler {
public static final String FILENAME = "api.crt";
private static final Logger log = LoggerFactory.getLogger(HostApiPublicKeyScriptHandler.class);
@Inject
HostApiService hostApiService;
@Override
public boolean handle(ApiRequest request) throws IOException {
String id = request.getId();
if (!FILENAME.equals(id)) {
return false;
}
String pem = null;
for (Map.Entry<String, PublicKey> entry : hostApiService.getPublicKeys().entrySet()) {
try {
pem = SshKeyGen.writePublicKey(entry.getValue());
break;
} catch (Exception e) {
log.error("Failed to write PEM", e);
}
}
if (pem == null) {
return false;
}
byte[] content = pem.getBytes("UTF-8");
HttpServletResponse response = request.getServletContext().getResponse();
response.getOutputStream().write(pem.getBytes("UTF-8"));
response.setContentLength(content.length);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + FILENAME);
response.setHeader("Cache-Control", "private");
response.setHeader("Pragma", "private");
response.setHeader("Expires", "Wed 24 Feb 1982 18:42:00 GMT");
response.getOutputStream().write(content);
return true;
}
}