package io.cattle.platform.iaas.api.host;
import io.cattle.platform.api.link.LinkHandler;
import io.cattle.platform.core.constants.HostTemplateConstants;
import io.cattle.platform.core.model.HostTemplate;
import io.cattle.platform.framework.secret.SecretsService;
import io.cattle.platform.json.JsonMapper;
import io.cattle.platform.object.ObjectManager;
import io.cattle.platform.object.util.DataAccessor;
import io.github.ibuildthecloud.gdapi.model.Schema;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import java.io.IOException;
import javax.inject.Inject;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
public class HostTemplateLinkHandler implements LinkHandler {
@Inject
ObjectManager objectManager;
@Inject
SecretsService secretService;
@Inject
JsonMapper jsonMapper;
@Override
public String[] getTypes() {
return new String[] { HostTemplateConstants.KIND };
}
@Override
public boolean handles(String type, String id, String link, ApiRequest request) {
return "secretvalues".equalsIgnoreCase(link);
}
@Override
public Object link(String name, Object obj, ApiRequest request) throws IOException {
if (!(obj instanceof HostTemplate)) {
return null;
}
HostTemplate ht = (HostTemplate)obj;
Schema s = request.getSchemaFactory().getSchema(HostTemplate.class);
if (!s.getResourceFields().get(HostTemplateConstants.FIELD_SECRET_VALUES).isReadOnCreateOnly()) {
String secrets = DataAccessor.fieldString(obj, HostTemplateConstants.FIELD_SECRET_VALUES);
if (secrets != null) {
try {
secrets = secretService.decrypt(ht.getAccountId(), secrets);
request.setResponseContentType("application/json");
request.setResponseObject(new Object());
IOUtils.write(Base64.decodeBase64(secrets), request.getOutputStream());
return new Object();
} catch (Exception e) {
throw new IOException(e);
}
}
}
return null;
}
}