package io.cattle.platform.servicediscovery.api.action;
import io.cattle.platform.api.action.ActionHandler;
import io.cattle.platform.core.constants.ServiceConstants;
import io.cattle.platform.core.model.Service;
import io.cattle.platform.iaas.api.credential.ApiKeyCertificateDownloadLinkHandler;
import io.cattle.platform.servicediscovery.api.service.ServiceDiscoveryApiService;
import io.github.ibuildthecloud.gdapi.exception.ClientVisibleException;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import io.github.ibuildthecloud.gdapi.util.ResponseCodes;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Named
public class ServiceCertificateActionHandler implements ActionHandler {
private static final Logger log = LoggerFactory.getLogger(ServiceCertificateActionHandler.class);
@Inject
ServiceDiscoveryApiService sdApiService;
@Override
public String getName() {
return ServiceConstants.PROCESS_SERVICE_CERTIFICATE;
}
@Override
public Object perform(String name, Object obj, ApiRequest request) {
if (!(obj instanceof Service)) {
return null;
}
Service service = (Service)obj;
String serviceName = service.getName();
try {
String certs = sdApiService.getServiceCertificate(service);
if (certs == null) {
return null;
}
ApiKeyCertificateDownloadLinkHandler.prepareRequest(serviceName + "-certs.zip", request);
request.getOutputStream().write(Base64.decodeBase64(certs));
} catch (Exception e) {
log.error("Failed to generate certificate for service [{}]", service.getId(), e);
throw new ClientVisibleException(ResponseCodes.INTERNAL_SERVER_ERROR, "CertGenerationFailed");
}
return new Object();
}
}