26 using namespace test::jtx;
31 BEAST_EXPECT(env.
rpc(
"ping")[
"result"][
"role"] ==
"admin");
37 BEAST_EXPECT(!env.rpc(
"ping")[
"result"].isMember(
"role"));
38 auto wsRes =
makeWSClient(env.app().config())->invoke(
"ping")[
"result"];
39 BEAST_EXPECT(!wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
44 BEAST_EXPECT(env.rpc(
"ping")[
"result"][
"role"] ==
"proxied");
45 auto wsRes =
makeWSClient(env.app().config())->invoke(
"ping")[
"result"];
46 BEAST_EXPECT(!wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
52 headers[
"X-Forwarded-For"] =
"12.34.56.78";
53 rpcRes = env.rpc(headers,
"ping")[
"result"];
54 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
55 BEAST_EXPECT(rpcRes[
"ip"] ==
"12.34.56.78");
58 headers[
"X-Forwarded-For"] =
"87.65.43.21, 44.33.22.11";
59 rpcRes = env.rpc(headers,
"ping")[
"result"];
60 BEAST_EXPECT(rpcRes[
"ip"] ==
"87.65.43.21");
63 headers[
"X-Forwarded-For"] =
"87.65.43.21:47011, 44.33.22.11";
64 rpcRes = env.rpc(headers,
"ping")[
"result"];
65 BEAST_EXPECT(rpcRes[
"ip"] ==
"87.65.43.21");
69 headers[
"Forwarded"] =
"for=88.77.66.55";
70 rpcRes = env.rpc(headers,
"ping")[
"result"];
71 BEAST_EXPECT(rpcRes[
"ip"] ==
"88.77.66.55");
74 headers[
"Forwarded"] =
75 "what=where;for=55.66.77.88;for=nobody;"
77 rpcRes = env.rpc(headers,
"ping")[
"result"];
78 BEAST_EXPECT(rpcRes[
"ip"] ==
"55.66.77.88");
81 headers[
"Forwarded"] =
82 "what=where; for=55.66.77.88, for=99.00.11.22;"
84 rpcRes = env.rpc(headers,
"ping")[
"result"];
85 BEAST_EXPECT(rpcRes[
"ip"] ==
"55.66.77.88");
88 headers[
"Forwarded"] =
89 "what=where; For=99.88.77.66, for=55.66.77.88;"
91 rpcRes = env.rpc(headers,
"ping")[
"result"];
92 BEAST_EXPECT(rpcRes[
"ip"] ==
"99.88.77.66");
95 headers[
"Forwarded"] =
96 "what=where; for=\"55.66.77.88:47011\";"
98 rpcRes = env.rpc(headers,
"ping")[
"result"];
99 BEAST_EXPECT(rpcRes[
"ip"] ==
"55.66.77.88");
102 headers[
"Forwarded"] =
103 "what=where; For= \" 99.88.77.66 \" ,for=11.22.33.44;"
105 rpcRes = env.rpc(headers,
"ping")[
"result"];
106 BEAST_EXPECT(rpcRes[
"ip"] ==
"99.88.77.66");
109 wsRes =
makeWSClient(env.app().config(),
true, 2, headers)->invoke(
"ping")[
"result"];
110 BEAST_EXPECT(!wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
113 headers[
"X-User"] = name;
114 rpcRes = env.rpc(headers,
"ping")[
"result"];
115 BEAST_EXPECT(rpcRes[
"role"] ==
"identified");
116 BEAST_EXPECT(rpcRes[
"username"] == name);
117 BEAST_EXPECT(rpcRes[
"ip"] ==
"99.88.77.66");
119 wsRes =
makeWSClient(env.app().config(),
true, 2, headers)->invoke(
"ping")[
"result"];
120 BEAST_EXPECT(wsRes[
"unlimited"].asBool());
124 headers[
"X-Forwarded-For"] =
"2001:db8:3333:4444:5555:6666:7777:8888";
125 rpcRes = env.rpc(headers,
"ping")[
"result"];
126 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
127 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:8888");
130 headers[
"X-Forwarded-For"] =
131 "2001:db8:3333:4444:5555:6666:7777:9999, a:b:c:d:e:f, "
133 rpcRes = env.rpc(headers,
"ping")[
"result"];
134 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
135 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:9999");
138 headers[
"X-Forwarded-For"] =
"[2001:db8:3333:4444:5555:6666:7777:8888]";
139 rpcRes = env.rpc(headers,
"ping")[
"result"];
140 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
141 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:8888");
144 headers[
"X-Forwarded-For"] =
145 "[2001:db8:3333:4444:5555:6666:7777:9999], [a:b:c:d:e:f], "
147 rpcRes = env.rpc(headers,
"ping")[
"result"];
148 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
149 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:9999");
153 headers[
"Forwarded"] =
"for=\"[2001:db8:3333:4444:5555:6666:7777:aaaa]\"";
154 rpcRes = env.rpc(headers,
"ping")[
"result"];
155 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
156 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:7777:aaaa");
159 headers[
"Forwarded"] =
"For=\"[2001:db8:bb:cc:dd:ee:ff::]:2345\", for=99.00.11.22";
160 rpcRes = env.rpc(headers,
"ping")[
"result"];
161 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
162 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:bb:cc:dd:ee:ff::");
165 headers[
"Forwarded"] =
166 "proto=http;FOR=\"[2001:db8:11:22:33:44:55:66]\""
168 rpcRes = env.rpc(headers,
"ping")[
"result"];
169 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
170 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:11:22:33:44:55:66");
175 headers[
"X-Forwarded-For"] =
"2001:db8:3333:4444:5555:6666:1.2.3.4";
176 rpcRes = env.rpc(headers,
"ping")[
"result"];
177 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
178 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:1.2.3.4");
181 headers[
"X-Forwarded-For"] =
182 "2001:db8:3333:4444:5555:6666:5.6.7.8, a:b:c:d:e:f, "
184 rpcRes = env.rpc(headers,
"ping")[
"result"];
185 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
186 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:5.6.7.8");
189 headers[
"X-Forwarded-For"] =
"[2001:db8:3333:4444:5555:6666:9.10.11.12]";
190 rpcRes = env.rpc(headers,
"ping")[
"result"];
191 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
192 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:9.10.11.12");
195 headers[
"X-Forwarded-For"] =
196 "[2001:db8:3333:4444:5555:6666:13.14.15.16], [a:b:c:d:e:f], "
198 rpcRes = env.rpc(headers,
"ping")[
"result"];
199 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
200 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:13.14.15.16");
204 headers[
"Forwarded"] =
"for=\"[2001:db8:3333:4444:5555:6666:20.19.18.17]\"";
205 rpcRes = env.rpc(headers,
"ping")[
"result"];
206 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
207 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:3333:4444:5555:6666:20.19.18.17");
210 headers[
"Forwarded"] =
"For=\"[2001:db8:bb:cc::24.23.22.21]\", for=99.00.11.22";
211 rpcRes = env.rpc(headers,
"ping")[
"result"];
212 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
213 BEAST_EXPECT(rpcRes[
"ip"] ==
"2001:db8:bb:cc::24.23.22.21");
216 headers[
"Forwarded"] =
217 "proto=http;FOR=\"[::11:22:33:44:45.55.65.75]:234\""
219 rpcRes = env.rpc(headers,
"ping")[
"result"];
220 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
221 BEAST_EXPECT(rpcRes[
"ip"] ==
"::11:22:33:44:45.55.65.75");
227 BEAST_EXPECT(env.rpc(
"ping")[
"result"][
"role"] ==
"admin");
228 BEAST_EXPECT(
makeWSClient(env.app().config())->invoke(
"ping")[
"result"][
"unlimited"].asBool());
233 BEAST_EXPECT(env.rpc(
"ping")[
"result"][
"role"] ==
"proxied");
234 auto wsRes =
makeWSClient(env.app().config())->invoke(
"ping")[
"result"];
235 BEAST_EXPECT(!wsRes.isMember(
"unlimited") || !wsRes[
"unlimited"].asBool());
238 headers[
"X-Forwarded-For"] =
"12.34.56.78";
239 Json::Value rpcRes = env.rpc(headers,
"ping")[
"result"];
240 BEAST_EXPECT(rpcRes[
"role"] ==
"proxied");
241 BEAST_EXPECT(rpcRes[
"ip"] ==
"12.34.56.78");