From ff955c633aeef820ada6bf5ec300f23dc0344acb Mon Sep 17 00:00:00 2001 From: Darren Lee Date: Tue, 15 Jun 2010 11:18:10 -0700 Subject: [PATCH] Add ability to rewrite arbitrary headers --- src/main/scala/fakehttp/Proxy.scala | 2 +- .../interceptor/HeaderRewriting.scala | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/main/scala/fakehttp/interceptor/HeaderRewriting.scala diff --git a/src/main/scala/fakehttp/Proxy.scala b/src/main/scala/fakehttp/Proxy.scala index d3546fb..2c9d36c 100644 --- a/src/main/scala/fakehttp/Proxy.scala +++ b/src/main/scala/fakehttp/Proxy.scala @@ -37,7 +37,7 @@ class Proxy(val interceptor: Interceptor, val port: Int, val sslMode: SslMode) { object Proxy { def main(args: Array[String]): Unit = { val port = args(0).toInt - val interceptor = new NoopInterceptor with HeaderBasedRedirection + val interceptor = new NoopInterceptor with HeaderBasedRedirection with HeaderRewriting val sslMode = new OpaqueSslMode() // ClearSslMode() val proxy = new Proxy(interceptor, port, sslMode) diff --git a/src/main/scala/fakehttp/interceptor/HeaderRewriting.scala b/src/main/scala/fakehttp/interceptor/HeaderRewriting.scala new file mode 100644 index 0000000..9e43e5b --- /dev/null +++ b/src/main/scala/fakehttp/interceptor/HeaderRewriting.scala @@ -0,0 +1,37 @@ +package fakehttp.interceptor + +import org.jboss.netty.handler.codec.http._ + +/** + * This trait adds header rewriting to the interceptor. + * + * To use, define a header with prefix "X-Fakehttp-Header-Rewrite-{header}". The value of this header will be written + * into the "{header}" header. These X-Fakehttp-Header-Rewrite-* headers will then be removed. + * + * @author darren + * + */ +trait HeaderRewriting extends Interceptor { + + import HeaderRewriting._ + import scala.collection.JavaConversions._ + + override abstract def intercept(request: HttpRequest): InterceptResult = { + request.getHeaderNames filter { + _.startsWith(PREFIX) + } foreach { header => + val value = request.getHeader(header) + request.setHeader(header.substring(PREFIX_LENGTH), value) + System.err.println("Setting header [%s] to [%s]".format(header.substring(PREFIX_LENGTH), value)) + request.removeHeader(header) + } + + super.intercept(request) + } + +} + +object HeaderRewriting { + val PREFIX = "X-Fakehttp-Header-Rewrite-" + val PREFIX_LENGTH = PREFIX.length +}