26 using namespace test::jtx;
31 BEAST_EXPECT(env.
rpc(
"ping")[
"result"][
"role"] ==
"admin");
38 BEAST_EXPECT(!env.rpc(
"ping")[
"result"].isMember(
"role"));
39 auto wsRes =
makeWSClient(env.app().config())->invoke(
"ping")[
"result"];
40 BEAST_EXPECT(!wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
45 BEAST_EXPECT(env.rpc(
"ping")[
"result"][
"role"] ==
"proxied");
46 auto wsRes =
makeWSClient(env.app().config())->invoke(
"ping")[
"result"];
47 BEAST_EXPECT(!wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
53 headers[
"X-Forwarded-For"] =
"12.34.56.78";
54 rpcRes = env.rpc(headers,
"ping")[
"result"];
55 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
56 BEAST_EXPECT(rpcRes[
"ip"] ==
"12.34.56.78");
59 headers[
"X-Forwarded-For"] =
"87.65.43.21, 44.33.22.11";
60 rpcRes = env.rpc(headers,
"ping")[
"result"];
61 BEAST_EXPECT(rpcRes[
"ip"] ==
"87.65.43.21");
64 headers[
"X-Forwarded-For"] =
"87.65.43.21:47011, 44.33.22.11";
65 rpcRes = env.rpc(headers,
"ping")[
"result"];
66 BEAST_EXPECT(rpcRes[
"ip"] ==
"87.65.43.21");
70 headers[
"Forwarded"] =
"for=88.77.66.55";
71 rpcRes = env.rpc(headers,
"ping")[
"result"];
72 BEAST_EXPECT(rpcRes[
"ip"] ==
"88.77.66.55");
75 headers[
"Forwarded"] =
76 "what=where;for=55.66.77.88;for=nobody;"
78 rpcRes = env.rpc(headers,
"ping")[
"result"];
79 BEAST_EXPECT(rpcRes[
"ip"] ==
"55.66.77.88");
82 headers[
"Forwarded"] =
83 "what=where; for=55.66.77.88, for=99.00.11.22;"
85 rpcRes = env.rpc(headers,
"ping")[
"result"];
86 BEAST_EXPECT(rpcRes[
"ip"] ==
"55.66.77.88");
89 headers[
"Forwarded"] =
90 "what=where; For=99.88.77.66, for=55.66.77.88;"
92 rpcRes = env.rpc(headers,
"ping")[
"result"];
93 BEAST_EXPECT(rpcRes[
"ip"] ==
"99.88.77.66");
96 headers[
"Forwarded"] =
97 "what=where; for=\"55.66.77.88:47011\";"
99 rpcRes = env.rpc(headers,
"ping")[
"result"];
100 BEAST_EXPECT(rpcRes[
"ip"] ==
"55.66.77.88");
103 headers[
"Forwarded"] =
104 "what=where; For= \" 99.88.77.66 \" ,for=11.22.33.44;"
106 rpcRes = env.rpc(headers,
"ping")[
"result"];
107 BEAST_EXPECT(rpcRes[
"ip"] ==
"99.88.77.66");
110 wsRes =
makeWSClient(env.app().config(),
true, 2, headers)->invoke(
"ping")[
"result"];
111 BEAST_EXPECT(!wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
114 headers[
"X-User"] = name;
115 rpcRes = env.rpc(headers,
"ping")[
"result"];
116 BEAST_EXPECT(rpcRes[
"role"] ==
"identified");
117 BEAST_EXPECT(rpcRes[
"username"] == name);
118 BEAST_EXPECT(rpcRes[
"ip"] ==
"99.88.77.66");
120 wsRes =
makeWSClient(env.app().config(),
true, 2, headers)->invoke(
"ping")[
"result"];
121 BEAST_EXPECT(wsRes[
"unlimited"].asBool());
125 headers[
"X-Forwarded-For"] =
"2001:db8:3333:4444:5555:6666:7777:8888";
126 rpcRes = env.rpc(headers,
"ping")[
"result"];
127 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
128 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:8888");
131 headers[
"X-Forwarded-For"] =
132 "2001:db8:3333:4444:5555:6666:7777:9999, a:b:c:d:e:f, "
134 rpcRes = env.rpc(headers,
"ping")[
"result"];
135 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
136 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:9999");
139 headers[
"X-Forwarded-For"] =
"[2001:db8:3333:4444:5555:6666:7777:8888]";
140 rpcRes = env.rpc(headers,
"ping")[
"result"];
141 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
142 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:8888");
145 headers[
"X-Forwarded-For"] =
146 "[2001:db8:3333:4444:5555:6666:7777:9999], [a:b:c:d:e:f], "
148 rpcRes = env.rpc(headers,
"ping")[
"result"];
149 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
150 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:9999");
154 headers[
"Forwarded"] =
"for=\"[2001:db8:3333:4444:5555:6666:7777:aaaa]\"";
155 rpcRes = env.rpc(headers,
"ping")[
"result"];
156 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
157 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:aaaa");
160 headers[
"Forwarded"] =
"For=\"[2001:db8:bb:cc:dd:ee:ff::]:2345\", for=99.00.11.22";
161 rpcRes = env.rpc(headers,
"ping")[
"result"];
162 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
163 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:bb:cc:dd:ee:ff::");
166 headers[
"Forwarded"] =
167 "proto=http;FOR=\"[2001:db8:11:22:33:44:55:66]\""
169 rpcRes = env.rpc(headers,
"ping")[
"result"];
170 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
171 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:11:22:33:44:55:66");
176 headers[
"X-Forwarded-For"] =
"2001:db8:3333:4444:5555:6666:1.2.3.4";
177 rpcRes = env.rpc(headers,
"ping")[
"result"];
178 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
179 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:1.2.3.4");
182 headers[
"X-Forwarded-For"] =
183 "2001:db8:3333:4444:5555:6666:5.6.7.8, a:b:c:d:e:f, "
185 rpcRes = env.rpc(headers,
"ping")[
"result"];
186 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
187 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:5.6.7.8");
190 headers[
"X-Forwarded-For"] =
"[2001:db8:3333:4444:5555:6666:9.10.11.12]";
191 rpcRes = env.rpc(headers,
"ping")[
"result"];
192 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
193 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:9.10.11.12");
196 headers[
"X-Forwarded-For"] =
197 "[2001:db8:3333:4444:5555:6666:13.14.15.16], [a:b:c:d:e:f], "
199 rpcRes = env.rpc(headers,
"ping")[
"result"];
200 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
201 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:13.14.15.16");
205 headers[
"Forwarded"] =
"for=\"[2001:db8:3333:4444:5555:6666:20.19.18.17]\"";
206 rpcRes = env.rpc(headers,
"ping")[
"result"];
207 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
208 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:20.19.18.17");
211 headers[
"Forwarded"] =
"For=\"[2001:db8:bb:cc::24.23.22.21]\", for=99.00.11.22";
212 rpcRes = env.rpc(headers,
"ping")[
"result"];
213 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
214 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:bb:cc::24.23.22.21");
217 headers[
"Forwarded"] =
218 "proto=http;FOR=\"[::11:22:33:44:45.55.65.75]:234\""
220 rpcRes = env.rpc(headers,
"ping")[
"result"];
221 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
222 BEAST_EXPECT(rpcRes[
"ip"] ==
"::11:22:33:44:45.55.65.75");
228 BEAST_EXPECT(env.rpc(
"ping")[
"result"][
"role"] ==
"admin");
230 makeWSClient(env.app().config())->invoke(
"ping")[
"result"][
"unlimited"].asBool());
235 BEAST_EXPECT(env.rpc(
"ping")[
"result"][
"role"] ==
"proxied");
236 auto wsRes =
makeWSClient(env.app().config())->invoke(
"ping")[
"result"];
237 BEAST_EXPECT(!wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
240 headers[
"X-Forwarded-For"] =
"12.34.56.78";
241 Json::Value rpcRes = env.rpc(headers,
"ping")[
"result"];
242 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
243 BEAST_EXPECT(rpcRes[
"ip"] ==
"12.34.56.78");