!htt #19388 Chanring x-real-ip from raw to real modeled header

* Allows for parsing rules to be applied to vet the ip
* Removed last cases of code where the String variant of apply on RemoteAddress is used
This commit is contained in:
Chris Baxter 2016-02-10 12:08:09 -05:00
parent 7850ad36a5
commit 6d3bb94d09
10 changed files with 84 additions and 10 deletions

View file

@ -13,8 +13,11 @@ import akka.http.javadsl.server.RequestVals;
import akka.http.javadsl.server.Unmarshallers;
import akka.http.javadsl.testkit.JUnitRouteTest;
import akka.http.javadsl.testkit.TestRoute;
import org.junit.Test;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.regex.Pattern;
public class RequestValTest extends JUnitRouteTest {
@ -62,16 +65,16 @@ public class RequestValTest extends JUnitRouteTest {
}
@Test
public void testClientIpExtraction() {
public void testClientIpExtraction() throws UnknownHostException{
TestRoute route = testRoute(completeWithValueToString(RequestVals.clientIP()));
route
.run(HttpRequest.create().addHeader(XForwardedFor.create(RemoteAddress.create("127.0.0.2"))))
.run(HttpRequest.create().addHeader(XForwardedFor.create(RemoteAddress.create(InetAddress.getByName("127.0.0.2")))))
.assertStatusCode(200)
.assertEntity("127.0.0.2");
route
.run(HttpRequest.create().addHeader(akka.http.javadsl.model.headers.RemoteAddress.create(RemoteAddress.create("127.0.0.3"))))
.run(HttpRequest.create().addHeader(akka.http.javadsl.model.headers.RemoteAddress.create(RemoteAddress.create(InetAddress.getByName("127.0.0.3")))))
.assertStatusCode(200)
.assertEntity("127.0.0.3");

View file

@ -10,22 +10,23 @@ import scala.concurrent.duration._
import scala.util.Try
import akka.http.scaladsl.model._
import headers._
import java.net.InetAddress
class MiscDirectivesSpec extends RoutingSpec {
"the extractClientIP directive" should {
"extract from a X-Forwarded-For header" in {
Get() ~> addHeaders(`X-Forwarded-For`("2.3.4.5"), RawHeader("x-real-ip", "1.2.3.4")) ~> {
Get() ~> addHeaders(`X-Forwarded-For`(remoteAddress("2.3.4.5")), RawHeader("x-real-ip", "1.2.3.4")) ~> {
extractClientIP { echoComplete }
} ~> check { responseAs[String] shouldEqual "2.3.4.5" }
}
"extract from a Remote-Address header" in {
Get() ~> addHeaders(RawHeader("x-real-ip", "1.2.3.4"), `Remote-Address`(RemoteAddress("5.6.7.8"))) ~> {
Get() ~> addHeaders(`X-Real-Ip`(remoteAddress("1.2.3.4")), `Remote-Address`(remoteAddress("5.6.7.8"))) ~> {
extractClientIP { echoComplete }
} ~> check { responseAs[String] shouldEqual "5.6.7.8" }
}
"extract from a X-Real-IP header" in {
Get() ~> addHeader(RawHeader("x-real-ip", "1.2.3.4")) ~> {
Get() ~> addHeader(`X-Real-Ip`(remoteAddress("1.2.3.4"))) ~> {
extractClientIP { echoComplete }
} ~> check { responseAs[String] shouldEqual "1.2.3.4" }
}
@ -85,4 +86,6 @@ class MiscDirectivesSpec extends RoutingSpec {
}
}
}
def remoteAddress(ip: String) = RemoteAddress(InetAddress.getByName(ip))
}