package io.cattle.platform.docker.api.container; import io.cattle.platform.api.utils.ApiUtils; import io.cattle.platform.core.dao.InstanceDao; import io.cattle.platform.core.model.Instance; import io.cattle.platform.docker.api.ContainerProxyActionHandler; import io.cattle.platform.docker.api.model.ServiceProxy; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import io.github.ibuildthecloud.gdapi.request.resource.impl.AbstractNoOpResourceManager; import io.github.ibuildthecloud.gdapi.util.ResponseCodes; import java.util.List; import javax.inject.Inject; import org.apache.commons.lang3.StringUtils; public class ServiceProxyManager extends AbstractNoOpResourceManager { @Inject InstanceDao instanceDao; @Inject ContainerProxyActionHandler actionHandler; @Override protected Object createInternal(String type, ApiRequest request) { ServiceProxy proxy = request.proxyRequestObject(ServiceProxy.class); String service = proxy.getService(); if (StringUtils.isBlank(service)) { request.setResponseCode(ResponseCodes.NOT_FOUND); return null; } String[] parts = StringUtils.split(service, ".", 2); List<? extends Instance> instances = null; if (parts.length == 2) { instances = instanceDao.findInstanceByServiceName(ApiUtils.getPolicy().getAccountId(), parts[1], parts[0]); } else { instances = instanceDao.findInstanceByServiceName(ApiUtils.getPolicy().getAccountId(), parts[0]); } if (instances.size() == 0) { request.setResponseCode(ResponseCodes.NOT_FOUND); return null; } return actionHandler.perform(null, instances.get(0), request); } @Override public Class<?>[] getTypeClasses() { return new Class<?>[] { ServiceProxy.class }; } }