45 using namespace test::jtx;
50 BEAST_EXPECT(env.
rpc(
"ping")[
"result"][
"role"] ==
"admin");
52 ->invoke(
"ping")[
"result"][
"unlimited"]
58 BEAST_EXPECT(!env.rpc(
"ping")[
"result"].isMember(
"role"));
60 makeWSClient(env.app().config())->invoke(
"ping")[
"result"];
62 !wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
67 BEAST_EXPECT(env.rpc(
"ping")[
"result"][
"role"] ==
"proxied");
69 makeWSClient(env.app().config())->invoke(
"ping")[
"result"];
71 !wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
77 headers[
"X-Forwarded-For"] =
"12.34.56.78";
78 rpcRes = env.rpc(headers,
"ping")[
"result"];
79 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
80 BEAST_EXPECT(rpcRes[
"ip"] ==
"12.34.56.78");
83 headers[
"X-Forwarded-For"] =
"87.65.43.21, 44.33.22.11";
84 rpcRes = env.rpc(headers,
"ping")[
"result"];
85 BEAST_EXPECT(rpcRes[
"ip"] ==
"87.65.43.21");
88 headers[
"X-Forwarded-For"] =
"87.65.43.21:47011, 44.33.22.11";
89 rpcRes = env.rpc(headers,
"ping")[
"result"];
90 BEAST_EXPECT(rpcRes[
"ip"] ==
"87.65.43.21");
94 headers[
"Forwarded"] =
"for=88.77.66.55";
95 rpcRes = env.rpc(headers,
"ping")[
"result"];
96 BEAST_EXPECT(rpcRes[
"ip"] ==
"88.77.66.55");
99 headers[
"Forwarded"] =
100 "what=where;for=55.66.77.88;for=nobody;"
102 rpcRes = env.rpc(headers,
"ping")[
"result"];
103 BEAST_EXPECT(rpcRes[
"ip"] ==
"55.66.77.88");
106 headers[
"Forwarded"] =
107 "what=where; for=55.66.77.88, for=99.00.11.22;"
109 rpcRes = env.rpc(headers,
"ping")[
"result"];
110 BEAST_EXPECT(rpcRes[
"ip"] ==
"55.66.77.88");
113 headers[
"Forwarded"] =
114 "what=where; For=99.88.77.66, for=55.66.77.88;"
116 rpcRes = env.rpc(headers,
"ping")[
"result"];
117 BEAST_EXPECT(rpcRes[
"ip"] ==
"99.88.77.66");
120 headers[
"Forwarded"] =
121 "what=where; for=\"55.66.77.88:47011\";"
123 rpcRes = env.rpc(headers,
"ping")[
"result"];
124 BEAST_EXPECT(rpcRes[
"ip"] ==
"55.66.77.88");
127 headers[
"Forwarded"] =
128 "what=where; For= \" 99.88.77.66 \" ,for=11.22.33.44;"
130 rpcRes = env.rpc(headers,
"ping")[
"result"];
131 BEAST_EXPECT(rpcRes[
"ip"] ==
"99.88.77.66");
134 wsRes =
makeWSClient(env.app().config(),
true, 2, headers)
135 ->invoke(
"ping")[
"result"];
137 !wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
140 headers[
"X-User"] = name;
141 rpcRes = env.rpc(headers,
"ping")[
"result"];
142 BEAST_EXPECT(rpcRes[
"role"] ==
"identified");
143 BEAST_EXPECT(rpcRes[
"username"] == name);
144 BEAST_EXPECT(rpcRes[
"ip"] ==
"99.88.77.66");
146 wsRes =
makeWSClient(env.app().config(),
true, 2, headers)
147 ->invoke(
"ping")[
"result"];
148 BEAST_EXPECT(wsRes[
"unlimited"].asBool());
152 headers[
"X-Forwarded-For"] =
153 "2001:db8:3333:4444:5555:6666:7777:8888";
154 rpcRes = env.rpc(headers,
"ping")[
"result"];
155 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
157 rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:8888");
160 headers[
"X-Forwarded-For"] =
161 "2001:db8:3333:4444:5555:6666:7777:9999, a:b:c:d:e:f, "
163 rpcRes = env.rpc(headers,
"ping")[
"result"];
164 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
166 rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:9999");
169 headers[
"X-Forwarded-For"] =
170 "[2001:db8:3333:4444:5555:6666:7777:8888]";
171 rpcRes = env.rpc(headers,
"ping")[
"result"];
172 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
174 rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:8888");
177 headers[
"X-Forwarded-For"] =
178 "[2001:db8:3333:4444:5555:6666:7777:9999], [a:b:c:d:e:f], "
180 rpcRes = env.rpc(headers,
"ping")[
"result"];
181 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
183 rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:9999");
187 headers[
"Forwarded"] =
188 "for=\"[2001:db8:3333:4444:5555:6666:7777:aaaa]\"";
189 rpcRes = env.rpc(headers,
"ping")[
"result"];
190 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
192 rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:aaaa");
195 headers[
"Forwarded"] =
196 "For=\"[2001:db8:bb:cc:dd:ee:ff::]:2345\", for=99.00.11.22";
197 rpcRes = env.rpc(headers,
"ping")[
"result"];
198 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
199 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:bb:cc:dd:ee:ff::");
202 headers[
"Forwarded"] =
203 "proto=http;FOR=\"[2001:db8:11:22:33:44:55:66]\""
205 rpcRes = env.rpc(headers,
"ping")[
"result"];
206 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
207 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:11:22:33:44:55:66");
212 headers[
"X-Forwarded-For"] =
"2001:db8:3333:4444:5555:6666:1.2.3.4";
213 rpcRes = env.rpc(headers,
"ping")[
"result"];
214 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
216 rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:1.2.3.4");
219 headers[
"X-Forwarded-For"] =
220 "2001:db8:3333:4444:5555:6666:5.6.7.8, a:b:c:d:e:f, "
222 rpcRes = env.rpc(headers,
"ping")[
"result"];
223 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
225 rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:5.6.7.8");
228 headers[
"X-Forwarded-For"] =
229 "[2001:db8:3333:4444:5555:6666:9.10.11.12]";
230 rpcRes = env.rpc(headers,
"ping")[
"result"];
231 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
233 rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:9.10.11.12");
236 headers[
"X-Forwarded-For"] =
237 "[2001:db8:3333:4444:5555:6666:13.14.15.16], [a:b:c:d:e:f], "
239 rpcRes = env.rpc(headers,
"ping")[
"result"];
240 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
242 rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:13.14.15.16");
246 headers[
"Forwarded"] =
247 "for=\"[2001:db8:3333:4444:5555:6666:20.19.18.17]\"";
248 rpcRes = env.rpc(headers,
"ping")[
"result"];
249 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
251 rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:20.19.18.17");
254 headers[
"Forwarded"] =
255 "For=\"[2001:db8:bb:cc::24.23.22.21]\", for=99.00.11.22";
256 rpcRes = env.rpc(headers,
"ping")[
"result"];
257 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
258 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:bb:cc::24.23.22.21");
261 headers[
"Forwarded"] =
262 "proto=http;FOR=\"[::11:22:33:44:45.55.65.75]:234\""
264 rpcRes = env.rpc(headers,
"ping")[
"result"];
265 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
266 BEAST_EXPECT(rpcRes[
"ip"] ==
"::11:22:33:44:45.55.65.75");
272 BEAST_EXPECT(env.rpc(
"ping")[
"result"][
"role"] ==
"admin");
274 ->invoke(
"ping")[
"result"][
"unlimited"]
280 BEAST_EXPECT(env.rpc(
"ping")[
"result"][
"role"] ==
"proxied");
282 makeWSClient(env.app().config())->invoke(
"ping")[
"result"];
284 !wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
287 headers[
"X-Forwarded-For"] =
"12.34.56.78";
288 Json::Value rpcRes = env.rpc(headers,
"ping")[
"result"];
289 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
290 BEAST_EXPECT(rpcRes[
"ip"] ==
"12.34.56.78");