26        using namespace test::jtx;
 
   31            BEAST_EXPECT(env.
rpc(
"ping")[
"result"][
"role"] == 
"admin");
 
   33                             ->invoke(
"ping")[
"result"][
"unlimited"]
 
   39            BEAST_EXPECT(!env.rpc(
"ping")[
"result"].isMember(
"role"));
 
   41                makeWSClient(env.app().config())->invoke(
"ping")[
"result"];
 
   43                !wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
 
   48            BEAST_EXPECT(env.rpc(
"ping")[
"result"][
"role"] == 
"proxied");
 
   50                makeWSClient(env.app().config())->invoke(
"ping")[
"result"];
 
   52                !wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
 
   58            headers[
"X-Forwarded-For"] = 
"12.34.56.78";
 
   59            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
   60            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
   61            BEAST_EXPECT(rpcRes[
"ip"] == 
"12.34.56.78");
 
   64            headers[
"X-Forwarded-For"] = 
"87.65.43.21, 44.33.22.11";
 
   65            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
   66            BEAST_EXPECT(rpcRes[
"ip"] == 
"87.65.43.21");
 
   69            headers[
"X-Forwarded-For"] = 
"87.65.43.21:47011, 44.33.22.11";
 
   70            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
   71            BEAST_EXPECT(rpcRes[
"ip"] == 
"87.65.43.21");
 
   75            headers[
"Forwarded"] = 
"for=88.77.66.55";
 
   76            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
   77            BEAST_EXPECT(rpcRes[
"ip"] == 
"88.77.66.55");
 
   80            headers[
"Forwarded"] =
 
   81                "what=where;for=55.66.77.88;for=nobody;" 
   83            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
   84            BEAST_EXPECT(rpcRes[
"ip"] == 
"55.66.77.88");
 
   87            headers[
"Forwarded"] =
 
   88                "what=where; for=55.66.77.88, for=99.00.11.22;" 
   90            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
   91            BEAST_EXPECT(rpcRes[
"ip"] == 
"55.66.77.88");
 
   94            headers[
"Forwarded"] =
 
   95                "what=where; For=99.88.77.66, for=55.66.77.88;" 
   97            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
   98            BEAST_EXPECT(rpcRes[
"ip"] == 
"99.88.77.66");
 
  101            headers[
"Forwarded"] =
 
  102                "what=where; for=\"55.66.77.88:47011\";" 
  104            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  105            BEAST_EXPECT(rpcRes[
"ip"] == 
"55.66.77.88");
 
  108            headers[
"Forwarded"] =
 
  109                "what=where; For= \" 99.88.77.66 \" ,for=11.22.33.44;" 
  111            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  112            BEAST_EXPECT(rpcRes[
"ip"] == 
"99.88.77.66");
 
  115            wsRes = 
makeWSClient(env.app().config(), 
true, 2, headers)
 
  116                        ->invoke(
"ping")[
"result"];
 
  118                !wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
 
  121            headers[
"X-User"] = name;
 
  122            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  123            BEAST_EXPECT(rpcRes[
"role"] == 
"identified");
 
  124            BEAST_EXPECT(rpcRes[
"username"] == name);
 
  125            BEAST_EXPECT(rpcRes[
"ip"] == 
"99.88.77.66");
 
  127            wsRes = 
makeWSClient(env.app().config(), 
true, 2, headers)
 
  128                        ->invoke(
"ping")[
"result"];
 
  129            BEAST_EXPECT(wsRes[
"unlimited"].asBool());
 
  133            headers[
"X-Forwarded-For"] =
 
  134                "2001:db8:3333:4444:5555:6666:7777:8888";
 
  135            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  136            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  138                rpcRes[
"ip"] == 
"2001:db8:3333:4444:5555:6666:7777:8888");
 
  141            headers[
"X-Forwarded-For"] =
 
  142                "2001:db8:3333:4444:5555:6666:7777:9999, a:b:c:d:e:f, " 
  144            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  145            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  147                rpcRes[
"ip"] == 
"2001:db8:3333:4444:5555:6666:7777:9999");
 
  150            headers[
"X-Forwarded-For"] =
 
  151                "[2001:db8:3333:4444:5555:6666:7777:8888]";
 
  152            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  153            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  155                rpcRes[
"ip"] == 
"2001:db8:3333:4444:5555:6666:7777:8888");
 
  158            headers[
"X-Forwarded-For"] =
 
  159                "[2001:db8:3333:4444:5555:6666:7777:9999], [a:b:c:d:e:f], " 
  161            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  162            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  164                rpcRes[
"ip"] == 
"2001:db8:3333:4444:5555:6666:7777:9999");
 
  168            headers[
"Forwarded"] =
 
  169                "for=\"[2001:db8:3333:4444:5555:6666:7777:aaaa]\"";
 
  170            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  171            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  173                rpcRes[
"ip"] == 
"2001:db8:3333:4444:5555:6666:7777:aaaa");
 
  176            headers[
"Forwarded"] =
 
  177                "For=\"[2001:db8:bb:cc:dd:ee:ff::]:2345\", for=99.00.11.22";
 
  178            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  179            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  180            BEAST_EXPECT(rpcRes[
"ip"] == 
"2001:db8:bb:cc:dd:ee:ff::");
 
  183            headers[
"Forwarded"] =
 
  184                "proto=http;FOR=\"[2001:db8:11:22:33:44:55:66]\"" 
  186            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  187            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  188            BEAST_EXPECT(rpcRes[
"ip"] == 
"2001:db8:11:22:33:44:55:66");
 
  193            headers[
"X-Forwarded-For"] = 
"2001:db8:3333:4444:5555:6666:1.2.3.4";
 
  194            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  195            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  197                rpcRes[
"ip"] == 
"2001:db8:3333:4444:5555:6666:1.2.3.4");
 
  200            headers[
"X-Forwarded-For"] =
 
  201                "2001:db8:3333:4444:5555:6666:5.6.7.8, a:b:c:d:e:f, " 
  203            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  204            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  206                rpcRes[
"ip"] == 
"2001:db8:3333:4444:5555:6666:5.6.7.8");
 
  209            headers[
"X-Forwarded-For"] =
 
  210                "[2001:db8:3333:4444:5555:6666:9.10.11.12]";
 
  211            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  212            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  214                rpcRes[
"ip"] == 
"2001:db8:3333:4444:5555:6666:9.10.11.12");
 
  217            headers[
"X-Forwarded-For"] =
 
  218                "[2001:db8:3333:4444:5555:6666:13.14.15.16], [a:b:c:d:e:f], " 
  220            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  221            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  223                rpcRes[
"ip"] == 
"2001:db8:3333:4444:5555:6666:13.14.15.16");
 
  227            headers[
"Forwarded"] =
 
  228                "for=\"[2001:db8:3333:4444:5555:6666:20.19.18.17]\"";
 
  229            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  230            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  232                rpcRes[
"ip"] == 
"2001:db8:3333:4444:5555:6666:20.19.18.17");
 
  235            headers[
"Forwarded"] =
 
  236                "For=\"[2001:db8:bb:cc::24.23.22.21]\", for=99.00.11.22";
 
  237            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  238            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  239            BEAST_EXPECT(rpcRes[
"ip"] == 
"2001:db8:bb:cc::24.23.22.21");
 
  242            headers[
"Forwarded"] =
 
  243                "proto=http;FOR=\"[::11:22:33:44:45.55.65.75]:234\"" 
  245            rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  246            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  247            BEAST_EXPECT(rpcRes[
"ip"] == 
"::11:22:33:44:45.55.65.75");
 
  253            BEAST_EXPECT(env.rpc(
"ping")[
"result"][
"role"] == 
"admin");
 
  255                             ->invoke(
"ping")[
"result"][
"unlimited"]
 
  261            BEAST_EXPECT(env.rpc(
"ping")[
"result"][
"role"] == 
"proxied");
 
  263                makeWSClient(env.app().config())->invoke(
"ping")[
"result"];
 
  265                !wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
 
  268            headers[
"X-Forwarded-For"] = 
"12.34.56.78";
 
  269            Json::Value rpcRes = env.rpc(headers, 
"ping")[
"result"];
 
  270            BEAST_EXPECT(rpcRes[
"role"] == 
"proxied");
 
  271            BEAST_EXPECT(rpcRes[
"ip"] == 
"12.34.56.78");