package org.dcache.http; import com.google.common.collect.ImmutableMap; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpMessage; import static com.google.common.base.Preconditions.checkNotNull; /** * Support for injecting admin-supplied custom headers into the response headers. */ public class CustomResponseHeadersHandler extends ChannelOutboundHandlerAdapter { private final ImmutableMap<String,String> customHeaders; public CustomResponseHeadersHandler(ImmutableMap<String,String> customHeaders) { this.customHeaders = checkNotNull(customHeaders); } @Override public void write(ChannelHandlerContext ctx, Object genericMessage, ChannelPromise promise) throws Exception { if (genericMessage instanceof HttpMessage) { HttpHeaders headers = ((HttpMessage) genericMessage).headers(); customHeaders.forEach( (name,value) -> { if (!headers.contains(name)) { headers.set(name, value); } } ); } super.write(ctx, genericMessage, promise); } }