mirror of
https://github.com/actix/actix-extras.git
synced 2025-08-31 19:37:00 +02:00
Deploying to gh-pages from @ e10937103e
🚀
This commit is contained in:
@@ -617,12 +617,6 @@
|
||||
<span id="617">617</span>
|
||||
<span id="618">618</span>
|
||||
<span id="619">619</span>
|
||||
<span id="620">620</span>
|
||||
<span id="621">621</span>
|
||||
<span id="622">622</span>
|
||||
<span id="623">623</span>
|
||||
<span id="624">624</span>
|
||||
<span id="625">625</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">collections::HashSet</span>, <span class="ident">convert::TryInto</span>, <span class="ident">iter::FromIterator</span>, <span class="ident">rc::Rc</span>};
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{
|
||||
@@ -775,8 +769,7 @@
|
||||
|
||||
<span class="prelude-val">Ok</span>(<span class="kw">_</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="kw">if</span> <span class="ident">cors</span>.<span class="ident">allowed_origins</span>.<span class="ident">is_all</span>() {
|
||||
<span class="ident">cors</span>.<span class="ident">allowed_origins</span> <span class="op">=</span>
|
||||
<span class="ident">AllOrSome::Some</span>(<span class="ident">HashSet::with_capacity</span>(<span class="number">8</span>));
|
||||
<span class="ident">cors</span>.<span class="ident">allowed_origins</span> <span class="op">=</span> <span class="ident">AllOrSome::Some</span>(<span class="ident">HashSet::with_capacity</span>(<span class="number">8</span>));
|
||||
}
|
||||
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">origins</span>) <span class="op">=</span> <span class="ident">cors</span>.<span class="ident">allowed_origins</span>.<span class="ident">as_mut</span>() {
|
||||
@@ -882,8 +875,7 @@
|
||||
<span class="kw">match</span> <span class="ident">header</span>.<span class="ident">try_into</span>() {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">method</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="kw">if</span> <span class="ident">cors</span>.<span class="ident">allowed_headers</span>.<span class="ident">is_all</span>() {
|
||||
<span class="ident">cors</span>.<span class="ident">allowed_headers</span> <span class="op">=</span>
|
||||
<span class="ident">AllOrSome::Some</span>(<span class="ident">HashSet::with_capacity</span>(<span class="number">8</span>));
|
||||
<span class="ident">cors</span>.<span class="ident">allowed_headers</span> <span class="op">=</span> <span class="ident">AllOrSome::Some</span>(<span class="ident">HashSet::with_capacity</span>(<span class="number">8</span>));
|
||||
}
|
||||
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="ident">AllOrSome::Some</span>(<span class="kw-2">ref</span> <span class="kw-2">mut</span> <span class="ident">headers</span>) <span class="op">=</span> <span class="ident">cors</span>.<span class="ident">allowed_headers</span> {
|
||||
@@ -919,8 +911,7 @@
|
||||
<span class="kw">match</span> <span class="ident">h</span>.<span class="ident">try_into</span>() {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">method</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="kw">if</span> <span class="ident">cors</span>.<span class="ident">allowed_headers</span>.<span class="ident">is_all</span>() {
|
||||
<span class="ident">cors</span>.<span class="ident">allowed_headers</span> <span class="op">=</span>
|
||||
<span class="ident">AllOrSome::Some</span>(<span class="ident">HashSet::with_capacity</span>(<span class="number">8</span>));
|
||||
<span class="ident">cors</span>.<span class="ident">allowed_headers</span> <span class="op">=</span> <span class="ident">AllOrSome::Some</span>(<span class="ident">HashSet::with_capacity</span>(<span class="number">8</span>));
|
||||
}
|
||||
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="ident">AllOrSome::Some</span>(<span class="kw-2">ref</span> <span class="kw-2">mut</span> <span class="ident">headers</span>) <span class="op">=</span> <span class="ident">cors</span>.<span class="ident">allowed_headers</span> {
|
||||
@@ -967,8 +958,7 @@
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">header</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">cors</span>) <span class="op">=</span> <span class="ident">cors</span>(<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="self">self</span>.<span class="ident">inner</span>, <span class="kw-2">&</span><span class="self">self</span>.<span class="ident">error</span>) {
|
||||
<span class="kw">if</span> <span class="ident">cors</span>.<span class="ident">expose_headers</span>.<span class="ident">is_all</span>() {
|
||||
<span class="ident">cors</span>.<span class="ident">expose_headers</span> <span class="op">=</span>
|
||||
<span class="ident">AllOrSome::Some</span>(<span class="ident">HashSet::with_capacity</span>(<span class="number">8</span>));
|
||||
<span class="ident">cors</span>.<span class="ident">expose_headers</span> <span class="op">=</span> <span class="ident">AllOrSome::Some</span>(<span class="ident">HashSet::with_capacity</span>(<span class="number">8</span>));
|
||||
}
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="ident">AllOrSome::Some</span>(<span class="kw-2">ref</span> <span class="kw-2">mut</span> <span class="ident">headers</span>) <span class="op">=</span> <span class="ident">cors</span>.<span class="ident">expose_headers</span> {
|
||||
<span class="ident">headers</span>.<span class="ident">insert</span>(<span class="ident">header</span>);
|
||||
@@ -1131,12 +1121,11 @@
|
||||
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">inner</span> <span class="op">=</span> <span class="ident">Rc::clone</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">inner</span>);
|
||||
|
||||
<span class="kw">if</span> <span class="ident">inner</span>.<span class="ident">supports_credentials</span>
|
||||
<span class="op">&&</span> <span class="ident">inner</span>.<span class="ident">send_wildcard</span>
|
||||
<span class="op">&&</span> <span class="ident">inner</span>.<span class="ident">allowed_origins</span>.<span class="ident">is_all</span>()
|
||||
{
|
||||
<span class="macro">error!</span>(<span class="string">"Illegal combination of CORS options: credentials can not be supported when all \
|
||||
origins are allowed and `send_wildcard` is enabled."</span>);
|
||||
<span class="kw">if</span> <span class="ident">inner</span>.<span class="ident">supports_credentials</span> <span class="op">&&</span> <span class="ident">inner</span>.<span class="ident">send_wildcard</span> <span class="op">&&</span> <span class="ident">inner</span>.<span class="ident">allowed_origins</span>.<span class="ident">is_all</span>() {
|
||||
<span class="macro">error!</span>(
|
||||
<span class="string">"Illegal combination of CORS options: credentials can not be supported when all \
|
||||
origins are allowed and `send_wildcard` is enabled."</span>
|
||||
);
|
||||
<span class="kw">return</span> <span class="ident">future::err</span>(());
|
||||
}
|
||||
|
||||
@@ -1144,8 +1133,7 @@
|
||||
<span class="kw">match</span> <span class="ident">inner</span>.<span class="ident">allowed_headers</span>.<span class="ident">as_ref</span>() {
|
||||
<span class="prelude-val">Some</span>(<span class="ident">header_set</span>) <span class="kw">if</span> <span class="op">!</span><span class="ident">header_set</span>.<span class="ident">is_empty</span>() <span class="op">=</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">allowed_headers_str</span> <span class="op">=</span> <span class="ident">intersperse_header_values</span>(<span class="ident">header_set</span>);
|
||||
<span class="ident">Rc::make_mut</span>(<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">inner</span>).<span class="ident">allowed_headers_baked</span> <span class="op">=</span>
|
||||
<span class="prelude-val">Some</span>(<span class="ident">allowed_headers_str</span>);
|
||||
<span class="ident">Rc::make_mut</span>(<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">inner</span>).<span class="ident">allowed_headers_baked</span> <span class="op">=</span> <span class="prelude-val">Some</span>(<span class="ident">allowed_headers_str</span>);
|
||||
}
|
||||
<span class="kw">_</span> <span class="op">=</span><span class="op">></span> {}
|
||||
}
|
||||
|
@@ -48,12 +48,6 @@
|
||||
<span id="48">48</span>
|
||||
<span id="49">49</span>
|
||||
<span id="50">50</span>
|
||||
<span id="51">51</span>
|
||||
<span id="52">52</span>
|
||||
<span id="53">53</span>
|
||||
<span id="54">54</span>
|
||||
<span id="55">55</span>
|
||||
<span id="56">56</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">http::StatusCode</span>, <span class="ident">HttpResponse</span>, <span class="ident">ResponseError</span>};
|
||||
|
||||
<span class="kw">use</span> <span class="ident">derive_more</span>::{<span class="ident">Display</span>, <span class="ident">Error</span>};
|
||||
@@ -71,21 +65,15 @@
|
||||
<span class="ident">MissingOrigin</span>,
|
||||
|
||||
<span class="doccomment">/// Request header `Access-Control-Request-Method` is required but is missing.</span>
|
||||
<span class="attribute">#[<span class="ident">display</span>(
|
||||
<span class="ident">fmt</span> <span class="op">=</span> <span class="string">"Request header `Access-Control-Request-Method` is required but is missing."</span>
|
||||
)]</span>
|
||||
<span class="attribute">#[<span class="ident">display</span>(<span class="ident">fmt</span> <span class="op">=</span> <span class="string">"Request header `Access-Control-Request-Method` is required but is missing."</span>)]</span>
|
||||
<span class="ident">MissingRequestMethod</span>,
|
||||
|
||||
<span class="doccomment">/// Request header `Access-Control-Request-Method` has an invalid value.</span>
|
||||
<span class="attribute">#[<span class="ident">display</span>(
|
||||
<span class="ident">fmt</span> <span class="op">=</span> <span class="string">"Request header `Access-Control-Request-Method` has an invalid value."</span>
|
||||
)]</span>
|
||||
<span class="attribute">#[<span class="ident">display</span>(<span class="ident">fmt</span> <span class="op">=</span> <span class="string">"Request header `Access-Control-Request-Method` has an invalid value."</span>)]</span>
|
||||
<span class="ident">BadRequestMethod</span>,
|
||||
|
||||
<span class="doccomment">/// Request header `Access-Control-Request-Headers` has an invalid value.</span>
|
||||
<span class="attribute">#[<span class="ident">display</span>(
|
||||
<span class="ident">fmt</span> <span class="op">=</span> <span class="string">"Request header `Access-Control-Request-Headers` has an invalid value."</span>
|
||||
)]</span>
|
||||
<span class="attribute">#[<span class="ident">display</span>(<span class="ident">fmt</span> <span class="op">=</span> <span class="string">"Request header `Access-Control-Request-Headers` has an invalid value."</span>)]</span>
|
||||
<span class="ident">BadRequestHeaders</span>,
|
||||
|
||||
<span class="doccomment">/// Origin is not allowed to make this request.</span>
|
||||
|
@@ -325,17 +325,6 @@
|
||||
<span id="325">325</span>
|
||||
<span id="326">326</span>
|
||||
<span id="327">327</span>
|
||||
<span id="328">328</span>
|
||||
<span id="329">329</span>
|
||||
<span id="330">330</span>
|
||||
<span id="331">331</span>
|
||||
<span id="332">332</span>
|
||||
<span id="333">333</span>
|
||||
<span id="334">334</span>
|
||||
<span id="335">335</span>
|
||||
<span id="336">336</span>
|
||||
<span id="337">337</span>
|
||||
<span id="338">338</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">collections::HashSet</span>, <span class="ident">convert::TryFrom</span>, <span class="ident">convert::TryInto</span>, <span class="ident">fmt</span>, <span class="ident">rc::Rc</span>};
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{
|
||||
@@ -416,9 +405,7 @@
|
||||
<span class="kw">match</span> <span class="ident">req</span>.<span class="ident">headers</span>().<span class="ident">get</span>(<span class="ident">header::ORIGIN</span>) {
|
||||
<span class="comment">// origin header exists and is a string</span>
|
||||
<span class="prelude-val">Some</span>(<span class="ident">origin</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="kw">if</span> <span class="ident">allowed_origins</span>.<span class="ident">contains</span>(<span class="ident">origin</span>)
|
||||
<span class="op">|</span><span class="op">|</span> <span class="self">self</span>.<span class="ident">validate_origin_fns</span>(<span class="ident">origin</span>, <span class="ident">req</span>)
|
||||
{
|
||||
<span class="kw">if</span> <span class="ident">allowed_origins</span>.<span class="ident">contains</span>(<span class="ident">origin</span>) <span class="op">|</span><span class="op">|</span> <span class="self">self</span>.<span class="ident">validate_origin_fns</span>(<span class="ident">origin</span>, <span class="ident">req</span>) {
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
} <span class="kw">else</span> {
|
||||
<span class="prelude-val">Err</span>(<span class="ident">CorsError::OriginNotAllowed</span>)
|
||||
@@ -440,10 +427,7 @@
|
||||
}
|
||||
|
||||
<span class="doccomment">/// Only called if origin exists and always after it's validated.</span>
|
||||
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn</span> <span class="ident">access_control_allow_origin</span>(
|
||||
<span class="kw-2">&</span><span class="self">self</span>,
|
||||
<span class="ident">req</span>: <span class="kw-2">&</span><span class="ident">RequestHead</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">HeaderValue</span><span class="op">></span> {
|
||||
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn</span> <span class="ident">access_control_allow_origin</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">req</span>: <span class="kw-2">&</span><span class="ident">RequestHead</span>) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">HeaderValue</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">origin</span> <span class="op">=</span> <span class="ident">req</span>.<span class="ident">headers</span>().<span class="ident">get</span>(<span class="ident">header::ORIGIN</span>);
|
||||
|
||||
<span class="kw">match</span> <span class="self">self</span>.<span class="ident">allowed_origins</span> {
|
||||
@@ -467,10 +451,7 @@
|
||||
|
||||
<span class="doccomment">/// Use in preflight checks and therefore operates on header list in</span>
|
||||
<span class="doccomment">/// `Access-Control-Request-Headers` not the actual header set.</span>
|
||||
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn</span> <span class="ident">validate_allowed_method</span>(
|
||||
<span class="kw-2">&</span><span class="self">self</span>,
|
||||
<span class="ident">req</span>: <span class="kw-2">&</span><span class="ident">RequestHead</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Result</span><span class="op"><</span>(), <span class="ident">CorsError</span><span class="op">></span> {
|
||||
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn</span> <span class="ident">validate_allowed_method</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">req</span>: <span class="kw-2">&</span><span class="ident">RequestHead</span>) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Result</span><span class="op"><</span>(), <span class="ident">CorsError</span><span class="op">></span> {
|
||||
<span class="comment">// extract access control header and try to parse as method</span>
|
||||
<span class="kw">let</span> <span class="ident">request_method</span> <span class="op">=</span> <span class="ident">req</span>
|
||||
.<span class="ident">headers</span>()
|
||||
@@ -492,10 +473,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn</span> <span class="ident">validate_allowed_headers</span>(
|
||||
<span class="kw-2">&</span><span class="self">self</span>,
|
||||
<span class="ident">req</span>: <span class="kw-2">&</span><span class="ident">RequestHead</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Result</span><span class="op"><</span>(), <span class="ident">CorsError</span><span class="op">></span> {
|
||||
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn</span> <span class="ident">validate_allowed_headers</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">req</span>: <span class="kw-2">&</span><span class="ident">RequestHead</span>) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Result</span><span class="op"><</span>(), <span class="ident">CorsError</span><span class="op">></span> {
|
||||
<span class="comment">// return early if all headers are allowed or get ref to allowed origins set</span>
|
||||
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">clippy::mutable_key_type</span>)]</span>
|
||||
<span class="kw">let</span> <span class="ident">allowed_headers</span> <span class="op">=</span> <span class="kw">match</span> <span class="kw-2">&</span><span class="self">self</span>.<span class="ident">allowed_headers</span> {
|
||||
|
@@ -212,13 +212,6 @@
|
||||
<span id="212">212</span>
|
||||
<span id="213">213</span>
|
||||
<span id="214">214</span>
|
||||
<span id="215">215</span>
|
||||
<span id="216">216</span>
|
||||
<span id="217">217</span>
|
||||
<span id="218">218</span>
|
||||
<span id="219">219</span>
|
||||
<span id="220">220</span>
|
||||
<span id="221">221</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">convert::TryInto</span>, <span class="ident">error::Error</span> <span class="kw">as</span> <span class="ident">StdError</span>, <span class="ident">rc::Rc</span>};
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{
|
||||
@@ -231,9 +224,7 @@
|
||||
},
|
||||
<span class="ident">HttpResponse</span>,
|
||||
};
|
||||
<span class="kw">use</span> <span class="ident">futures_util::future</span>::{
|
||||
<span class="ident">ok</span>, <span class="ident">Either</span>, <span class="ident">FutureExt</span> <span class="kw">as</span> <span class="kw">_</span>, <span class="ident">LocalBoxFuture</span>, <span class="ident">Ready</span>, <span class="ident">TryFutureExt</span> <span class="kw">as</span> <span class="kw">_</span>,
|
||||
};
|
||||
<span class="kw">use</span> <span class="ident">futures_util::future</span>::{<span class="ident">ok</span>, <span class="ident">Either</span>, <span class="ident">FutureExt</span> <span class="kw">as</span> <span class="kw">_</span>, <span class="ident">LocalBoxFuture</span>, <span class="ident">Ready</span>, <span class="ident">TryFutureExt</span> <span class="kw">as</span> <span class="kw">_</span>};
|
||||
<span class="kw">use</span> <span class="ident">log::debug</span>;
|
||||
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::Inner</span>;
|
||||
@@ -274,9 +265,7 @@
|
||||
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">headers</span>) <span class="op">=</span> <span class="ident">inner</span>.<span class="ident">allowed_headers_baked</span> {
|
||||
<span class="ident">res</span>.<span class="ident">insert_header</span>((<span class="ident">header::ACCESS_CONTROL_ALLOW_HEADERS</span>, <span class="ident">headers</span>.<span class="ident">clone</span>()));
|
||||
} <span class="kw">else</span> <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">headers</span>) <span class="op">=</span>
|
||||
<span class="ident">req</span>.<span class="ident">headers</span>().<span class="ident">get</span>(<span class="ident">header::ACCESS_CONTROL_REQUEST_HEADERS</span>)
|
||||
{
|
||||
} <span class="kw">else</span> <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">headers</span>) <span class="op">=</span> <span class="ident">req</span>.<span class="ident">headers</span>().<span class="ident">get</span>(<span class="ident">header::ACCESS_CONTROL_REQUEST_HEADERS</span>) {
|
||||
<span class="comment">// all headers allowed, return</span>
|
||||
<span class="ident">res</span>.<span class="ident">insert_header</span>((<span class="ident">header::ACCESS_CONTROL_ALLOW_HEADERS</span>, <span class="ident">headers</span>.<span class="ident">clone</span>()));
|
||||
}
|
||||
@@ -296,10 +285,7 @@
|
||||
<span class="ident">req</span>.<span class="ident">into_response</span>(<span class="ident">res</span>)
|
||||
}
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">augment_response</span><span class="op"><</span><span class="ident">B</span><span class="op">></span>(
|
||||
<span class="ident">inner</span>: <span class="kw-2">&</span><span class="ident">Inner</span>,
|
||||
<span class="kw-2">mut</span> <span class="ident">res</span>: <span class="ident">ServiceResponse</span><span class="op"><</span><span class="ident">B</span><span class="op">></span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResponse</span><span class="op"><</span><span class="ident">B</span><span class="op">></span> {
|
||||
<span class="kw">fn</span> <span class="ident">augment_response</span><span class="op"><</span><span class="ident">B</span><span class="op">></span>(<span class="ident">inner</span>: <span class="kw-2">&</span><span class="ident">Inner</span>, <span class="kw-2">mut</span> <span class="ident">res</span>: <span class="ident">ServiceResponse</span><span class="op"><</span><span class="ident">B</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResponse</span><span class="op"><</span><span class="ident">B</span><span class="op">></span> {
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">origin</span>) <span class="op">=</span> <span class="ident">inner</span>.<span class="ident">access_control_allow_origin</span>(<span class="ident">res</span>.<span class="ident">request</span>().<span class="ident">head</span>()) {
|
||||
<span class="ident">res</span>.<span class="ident">headers_mut</span>()
|
||||
.<span class="ident">insert</span>(<span class="ident">header::ACCESS_CONTROL_ALLOW_ORIGIN</span>, <span class="ident">origin</span>);
|
||||
|
Reference in New Issue
Block a user