package io.cattle.platform.iaas.api.filter.registry;
import io.cattle.platform.api.auth.Policy;
import io.cattle.platform.core.constants.CommonStatesConstants;
import io.cattle.platform.core.constants.StoragePoolConstants;
import io.cattle.platform.core.model.StoragePool;
import io.cattle.platform.iaas.api.filter.common.AbstractDefaultResourceManagerFilter;
import io.cattle.platform.object.ObjectManager;
import io.cattle.platform.object.meta.ObjectMetaDataManager;
import io.cattle.platform.util.type.CollectionUtils;
import io.github.ibuildthecloud.gdapi.context.ApiContext;
import io.github.ibuildthecloud.gdapi.exception.ClientVisibleException;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import io.github.ibuildthecloud.gdapi.request.resource.ResourceManager;
import io.github.ibuildthecloud.gdapi.util.ResponseCodes;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
public class RegistryServerAddressFilter extends AbstractDefaultResourceManagerFilter {
@Inject
ObjectManager objectManager;
@Override
public Object create(String type, ApiRequest request, ResourceManager next) {
Map<String, Object> requestObject = CollectionUtils.toMap(request.getRequestObject());
String serverAddress = (String) requestObject.get(StoragePoolConstants.SERVER_ADDRESS);
long accountId = ((Policy) ApiContext.getContext().getPolicy()).getAccountId();
List<StoragePool> registries = objectManager.find(StoragePool.class,
ObjectMetaDataManager.KIND_FIELD, StoragePoolConstants.KIND_REGISTRY,
ObjectMetaDataManager.ACCOUNT_FIELD, accountId,
ObjectMetaDataManager.REMOVED_FIELD, null);
for (StoragePool registry: registries){
if (!CommonStatesConstants.PURGED.equalsIgnoreCase(registry.getState())) {
if (serverAddress.equalsIgnoreCase(
(String) CollectionUtils.getNestedValue(registry.getData(), "fields", StoragePoolConstants.SERVER_ADDRESS))) {
throw new ClientVisibleException(ResponseCodes.BAD_REQUEST, "ServerAddressUsed");
}
}
}
return super.create(type, request, next);
}
@Override
public String[] getTypes() {
return new String[] { StoragePoolConstants.KIND_REGISTRY };
}
}