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");