package io.fathom.cloud.compute.metadata;
import java.io.IOException;
import java.net.URI;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.ext.Provider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fathomdb.Configuration;
@Singleton
@Provider
public class MetadataFilter implements ContainerRequestFilter {
private static final Logger log = LoggerFactory.getLogger(MetadataFilter.class);
final int port;
@Inject
public MetadataFilter(Configuration configuration) {
this.port = configuration.lookup("metadata.port", 8775);
}
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
URI uri = requestContext.getUriInfo().getRequestUri();
// TODO: Cope with fd00:0:0.... etc?
// TODO: Cope with no square brackets?
if (uri.getHost().equals("169.254.169.254") || uri.getHost().equals("[fd00::feed]")) {
String path = uri.getPath();
path = "/openstack/metadata" + path;
URI newUri = UriBuilder.fromUri(uri).replacePath(path).build();
log.info("Rewriting URI: {} -> {}", uri, newUri);
requestContext.setRequestUri(newUri);
}
}
}