mirror of
https://github.com/actix/actix-extras.git
synced 2025-09-02 04:56:38 +02:00
Deploying to gh-pages from @ 74ec115161
🚀
This commit is contained in:
@@ -821,6 +821,13 @@
|
||||
<span id="820">820</span>
|
||||
<span id="821">821</span>
|
||||
<span id="822">822</span>
|
||||
<span id="823">823</span>
|
||||
<span id="824">824</span>
|
||||
<span id="825">825</span>
|
||||
<span id="826">826</span>
|
||||
<span id="827">827</span>
|
||||
<span id="828">828</span>
|
||||
<span id="829">829</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">rc::Rc</span>, <span class="ident">time::SystemTime</span>};
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_utils::future</span>::{<span class="ident">ready</span>, <span class="ident">Ready</span>};
|
||||
@@ -1194,6 +1201,7 @@
|
||||
<span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">borrow::Borrow</span>, <span class="ident">time::SystemTime</span>};
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{
|
||||
<span class="ident">body</span>::{<span class="ident">BoxBody</span>, <span class="ident">EitherBody</span>},
|
||||
<span class="ident">cookie</span>::{<span class="ident">Cookie</span>, <span class="ident">CookieJar</span>, <span class="ident">Key</span>, <span class="ident">SameSite</span>},
|
||||
<span class="ident">dev::ServiceResponse</span>,
|
||||
<span class="ident">http</span>::{<span class="ident">header</span>, <span class="ident">StatusCode</span>},
|
||||
@@ -1231,7 +1239,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">assert_login_cookie</span>(
|
||||
<span class="ident">response</span>: <span class="kw-2">&mut</span> <span class="ident">ServiceResponse</span>,
|
||||
<span class="ident">response</span>: <span class="kw-2">&mut</span> <span class="ident">ServiceResponse</span><span class="op"><</span><span class="ident">EitherBody</span><span class="op"><</span><span class="ident">BoxBody</span><span class="op">></span><span class="op">></span>,
|
||||
<span class="ident">identity</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">login_timestamp</span>: <span class="ident">LoginTimestampCheck</span>,
|
||||
<span class="ident">visit_timestamp</span>: <span class="ident">VisitTimeStampCheck</span>,
|
||||
@@ -1400,13 +1408,19 @@
|
||||
<span class="ident">jar</span>.<span class="ident">get</span>(<span class="ident">COOKIE_NAME</span>).<span class="ident">unwrap</span>().<span class="ident">clone</span>()
|
||||
}
|
||||
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">assert_logged_in</span>(<span class="ident">response</span>: <span class="ident">ServiceResponse</span>, <span class="ident">identity</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="kw-2">&</span><span class="ident">str</span><span class="op">></span>) {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">assert_logged_in</span>(
|
||||
<span class="ident">response</span>: <span class="ident">ServiceResponse</span><span class="op"><</span><span class="ident">EitherBody</span><span class="op"><</span><span class="ident">BoxBody</span><span class="op">></span><span class="op">></span>,
|
||||
<span class="ident">identity</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="kw-2">&</span><span class="ident">str</span><span class="op">></span>,
|
||||
) {
|
||||
<span class="kw">let</span> <span class="ident">bytes</span> <span class="op">=</span> <span class="ident">test::read_body</span>(<span class="ident">response</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">resp</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span> <span class="op">=</span> <span class="ident">serde_json::from_slice</span>(<span class="kw-2">&</span><span class="ident">bytes</span>[..]).<span class="ident">unwrap</span>();
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">resp</span>.<span class="ident">as_ref</span>().<span class="ident">map</span>(<span class="op">|</span><span class="ident">s</span><span class="op">|</span> <span class="ident">s</span>.<span class="ident">borrow</span>()), <span class="ident">identity</span>);
|
||||
}
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">assert_legacy_login_cookie</span>(<span class="ident">response</span>: <span class="kw-2">&mut</span> <span class="ident">ServiceResponse</span>, <span class="ident">identity</span>: <span class="kw-2">&</span><span class="ident">str</span>) {
|
||||
<span class="kw">fn</span> <span class="ident">assert_legacy_login_cookie</span>(
|
||||
<span class="ident">response</span>: <span class="kw-2">&mut</span> <span class="ident">ServiceResponse</span><span class="op"><</span><span class="ident">EitherBody</span><span class="op"><</span><span class="ident">BoxBody</span><span class="op">></span><span class="op">></span>,
|
||||
<span class="ident">identity</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
) {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">cookies</span> <span class="op">=</span> <span class="ident">CookieJar::new</span>();
|
||||
<span class="kw">for</span> <span class="ident">cookie</span> <span class="kw">in</span> <span class="ident">response</span>.<span class="ident">headers</span>().<span class="ident">get_all</span>(<span class="ident">header::SET_COOKIE</span>) {
|
||||
<span class="ident">cookies</span>.<span class="ident">add</span>(<span class="ident">Cookie::parse</span>(<span class="ident">cookie</span>.<span class="ident">to_str</span>().<span class="ident">unwrap</span>().<span class="ident">to_string</span>()).<span class="ident">unwrap</span>());
|
||||
@@ -1418,7 +1432,7 @@
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">cookie</span>.<span class="ident">value</span>(), <span class="ident">identity</span>);
|
||||
}
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">assert_no_login_cookie</span>(<span class="ident">response</span>: <span class="kw-2">&mut</span> <span class="ident">ServiceResponse</span>) {
|
||||
<span class="kw">fn</span> <span class="ident">assert_no_login_cookie</span>(<span class="ident">response</span>: <span class="kw-2">&mut</span> <span class="ident">ServiceResponse</span><span class="op"><</span><span class="ident">EitherBody</span><span class="op"><</span><span class="ident">BoxBody</span><span class="op">></span><span class="op">></span>) {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">cookies</span> <span class="op">=</span> <span class="ident">CookieJar::new</span>();
|
||||
<span class="kw">for</span> <span class="ident">cookie</span> <span class="kw">in</span> <span class="ident">response</span>.<span class="ident">headers</span>().<span class="ident">get_all</span>(<span class="ident">header::SET_COOKIE</span>) {
|
||||
<span class="ident">cookies</span>.<span class="ident">add</span>(<span class="ident">Cookie::parse</span>(<span class="ident">cookie</span>.<span class="ident">to_str</span>().<span class="ident">unwrap</span>().<span class="ident">to_string</span>()).<span class="ident">unwrap</span>());
|
||||
|
@@ -99,11 +99,11 @@
|
||||
<span id="98"> 98</span>
|
||||
<span id="99"> 99</span>
|
||||
<span id="100">100</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use</span> <span class="ident">actix_web</span>::{
|
||||
</pre><pre class="rust"><code><span class="kw">use</span> <span class="ident">actix_utils::future</span>::{<span class="ident">ready</span>, <span class="ident">Ready</span>};
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{
|
||||
<span class="ident">dev</span>::{<span class="ident">Extensions</span>, <span class="ident">Payload</span>},
|
||||
<span class="ident">Error</span>, <span class="ident">FromRequest</span>, <span class="ident">HttpRequest</span>,
|
||||
};
|
||||
<span class="kw">use</span> <span class="ident">actix_utils::future</span>::{<span class="ident">ready</span>, <span class="ident">Ready</span>};
|
||||
|
||||
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">struct</span> <span class="ident">IdentityItem</span> {
|
||||
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="ident">id</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>,
|
||||
@@ -149,12 +149,12 @@
|
||||
<span class="doccomment">/// Return the claimed identity of the user associated request or `None` if no identity can be</span>
|
||||
<span class="doccomment">/// found associated with the request.</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">identity</span>(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span> {
|
||||
<span class="ident">Identity::get_identity</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="number">0</span>.<span class="ident">extensions</span>())
|
||||
<span class="ident">Identity::get_identity</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="number">0</span>.<span class="ident">req_data</span>())
|
||||
}
|
||||
|
||||
<span class="doccomment">/// Remember identity.</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">remember</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">identity</span>: <span class="ident">String</span>) {
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">id</span>) <span class="op">=</span> <span class="self">self</span>.<span class="number">0</span>.<span class="ident">extensions_mut</span>().<span class="ident">get_mut</span>::<span class="op"><</span><span class="ident">IdentityItem</span><span class="op">></span>() {
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">id</span>) <span class="op">=</span> <span class="self">self</span>.<span class="number">0</span>.<span class="ident">req_data_mut</span>().<span class="ident">get_mut</span>::<span class="op"><</span><span class="ident">IdentityItem</span><span class="op">></span>() {
|
||||
<span class="ident">id</span>.<span class="ident">id</span> <span class="op">=</span> <span class="prelude-val">Some</span>(<span class="ident">identity</span>);
|
||||
<span class="ident">id</span>.<span class="ident">changed</span> <span class="op">=</span> <span class="bool-val">true</span>;
|
||||
}
|
||||
@@ -162,7 +162,7 @@
|
||||
|
||||
<span class="doccomment">/// This method is used to 'forget' the current identity on subsequent requests.</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">forget</span>(<span class="kw-2">&</span><span class="self">self</span>) {
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">id</span>) <span class="op">=</span> <span class="self">self</span>.<span class="number">0</span>.<span class="ident">extensions_mut</span>().<span class="ident">get_mut</span>::<span class="op"><</span><span class="ident">IdentityItem</span><span class="op">></span>() {
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">id</span>) <span class="op">=</span> <span class="self">self</span>.<span class="number">0</span>.<span class="ident">req_data_mut</span>().<span class="ident">get_mut</span>::<span class="op"><</span><span class="ident">IdentityItem</span><span class="op">></span>() {
|
||||
<span class="ident">id</span>.<span class="ident">id</span> <span class="op">=</span> <span class="prelude-val">None</span>;
|
||||
<span class="ident">id</span>.<span class="ident">changed</span> <span class="op">=</span> <span class="bool-val">true</span>;
|
||||
}
|
||||
|
@@ -152,6 +152,10 @@
|
||||
<span id="151">151</span>
|
||||
<span id="152">152</span>
|
||||
<span id="153">153</span>
|
||||
<span id="154">154</span>
|
||||
<span id="155">155</span>
|
||||
<span id="156">156</span>
|
||||
<span id="157">157</span>
|
||||
</pre><pre class="rust"><code><span class="doccomment">//! Opinionated request identity service for Actix Web apps.</span>
|
||||
<span class="doccomment">//!</span>
|
||||
<span class="doccomment">//! [`IdentityService`] middleware can be used with different policies types to store</span>
|
||||
@@ -257,7 +261,11 @@
|
||||
<span class="kw">mod</span> <span class="ident">tests</span> {
|
||||
<span class="kw">use</span> <span class="ident">std::time::SystemTime</span>;
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">dev::ServiceResponse</span>, <span class="ident">test</span>, <span class="ident">web</span>, <span class="ident">App</span>, <span class="ident">Error</span>};
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{
|
||||
<span class="ident">body</span>::{<span class="ident">BoxBody</span>, <span class="ident">EitherBody</span>},
|
||||
<span class="ident">dev::ServiceResponse</span>,
|
||||
<span class="ident">test</span>, <span class="ident">web</span>, <span class="ident">App</span>, <span class="ident">Error</span>,
|
||||
};
|
||||
|
||||
<span class="kw">use</span> <span class="kw">super</span>::<span class="kw-2">*</span>;
|
||||
|
||||
@@ -284,7 +292,7 @@
|
||||
<span class="ident">f</span>: <span class="ident">F</span>,
|
||||
) -> <span class="kw">impl</span> <span class="ident">actix_service::Service</span><span class="op"><</span>
|
||||
<span class="ident">actix_http::Request</span>,
|
||||
<span class="ident">Response</span> <span class="op">=</span> <span class="ident">ServiceResponse</span><span class="op"><</span><span class="ident">actix_web::body::AnyBody</span><span class="op">></span>,
|
||||
<span class="ident">Response</span> <span class="op">=</span> <span class="ident">ServiceResponse</span><span class="op"><</span><span class="ident">EitherBody</span><span class="op"><</span><span class="ident">BoxBody</span><span class="op">></span><span class="op">></span>,
|
||||
<span class="ident">Error</span> <span class="op">=</span> <span class="ident">Error</span>,
|
||||
<span class="op">></span> {
|
||||
<span class="ident">test::init_service</span>(
|
||||
|
@@ -172,16 +172,15 @@
|
||||
<span id="171">171</span>
|
||||
<span id="172">172</span>
|
||||
<span id="173">173</span>
|
||||
<span id="174">174</span>
|
||||
</pre><pre class="rust"><code><span class="kw">use</span> <span class="ident">std</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_utils::future</span>::{<span class="ident">ready</span>, <span class="ident">Ready</span>};
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{
|
||||
<span class="ident">body</span>::{<span class="ident">AnyBody</span>, <span class="ident">MessageBody</span>},
|
||||
<span class="ident">body</span>::{<span class="ident">EitherBody</span>, <span class="ident">MessageBody</span>},
|
||||
<span class="ident">dev</span>::{<span class="ident">Service</span>, <span class="ident">ServiceRequest</span>, <span class="ident">ServiceResponse</span>, <span class="ident">Transform</span>},
|
||||
<span class="ident">Error</span>, <span class="ident">HttpMessage</span>, <span class="prelude-ty">Result</span>,
|
||||
};
|
||||
<span class="kw">use</span> <span class="ident">futures_util::future</span>::{<span class="ident">FutureExt</span> <span class="kw">as</span> <span class="kw">_</span>, <span class="ident">LocalBoxFuture</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">FutureExt</span> <span class="kw">as</span> <span class="kw">_</span>, <span class="ident">LocalBoxFuture</span>};
|
||||
|
||||
<span class="kw">use</span> <span class="kw">crate</span>::{<span class="ident">identity::IdentityItem</span>, <span class="ident">IdentityPolicy</span>};
|
||||
|
||||
@@ -221,7 +220,7 @@
|
||||
<span class="ident">B</span>: <span class="ident">MessageBody</span> <span class="op">+</span> <span class="lifetime">'static</span>,
|
||||
<span class="ident">B::Error</span>: <span class="ident">StdError</span>,
|
||||
{
|
||||
<span class="kw">type</span> <span class="ident">Response</span> <span class="op">=</span> <span class="ident">ServiceResponse</span>;
|
||||
<span class="kw">type</span> <span class="ident">Response</span> <span class="op">=</span> <span class="ident">ServiceResponse</span><span class="op"><</span><span class="ident">EitherBody</span><span class="op"><</span><span class="ident">B</span><span class="op">></span><span class="op">></span>;
|
||||
<span class="kw">type</span> <span class="ident">Error</span> <span class="op">=</span> <span class="ident">Error</span>;
|
||||
<span class="kw">type</span> <span class="ident">InitError</span> <span class="op">=</span> ();
|
||||
<span class="kw">type</span> <span class="ident">Transform</span> <span class="op">=</span> <span class="ident">IdentityServiceMiddleware</span><span class="op"><</span><span class="ident">S</span>, <span class="ident">T</span><span class="op">></span>;
|
||||
@@ -257,7 +256,7 @@
|
||||
<span class="ident">B</span>: <span class="ident">MessageBody</span> <span class="op">+</span> <span class="lifetime">'static</span>,
|
||||
<span class="ident">B::Error</span>: <span class="ident">StdError</span>,
|
||||
{
|
||||
<span class="kw">type</span> <span class="ident">Response</span> <span class="op">=</span> <span class="ident">ServiceResponse</span>;
|
||||
<span class="kw">type</span> <span class="ident">Response</span> <span class="op">=</span> <span class="ident">ServiceResponse</span><span class="op"><</span><span class="ident">EitherBody</span><span class="op"><</span><span class="ident">B</span><span class="op">></span><span class="op">></span>;
|
||||
<span class="kw">type</span> <span class="ident">Error</span> <span class="op">=</span> <span class="ident">Error</span>;
|
||||
<span class="kw">type</span> <span class="ident">Future</span> <span class="op">=</span> <span class="ident">LocalBoxFuture</span><span class="op"><</span><span class="lifetime">'static</span>, <span class="prelude-ty">Result</span><span class="op"><</span><span class="ident"><span class="self">Self</span>::Response</span>, <span class="ident"><span class="self">Self</span>::Error</span><span class="op">></span><span class="op">></span>;
|
||||
|
||||
@@ -279,17 +278,16 @@
|
||||
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">id</span>) <span class="op">=</span> <span class="ident">id</span> {
|
||||
<span class="kw">match</span> <span class="ident">backend</span>.<span class="ident">to_response</span>(<span class="ident">id</span>.<span class="ident">id</span>, <span class="ident">id</span>.<span class="ident">changed</span>, <span class="kw-2">&mut</span> <span class="ident">res</span>).<span class="kw">await</span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="kw">_</span>) => <span class="prelude-val">Ok</span>(<span class="ident">res</span>.<span class="ident">map_body</span>(<span class="op">|</span><span class="kw">_</span>, <span class="ident">body</span><span class="op">|</span> <span class="ident">AnyBody::new_boxed</span>(<span class="ident">body</span>))),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) => <span class="prelude-val">Ok</span>(<span class="ident">res</span>.<span class="ident">error_response</span>(<span class="ident">e</span>)),
|
||||
<span class="prelude-val">Ok</span>(<span class="kw">_</span>) => <span class="prelude-val">Ok</span>(<span class="ident">res</span>.<span class="ident">map_into_left_body</span>()),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">err</span>) => <span class="prelude-val">Ok</span>(<span class="ident">res</span>.<span class="ident">error_response</span>(<span class="ident">err</span>).<span class="ident">map_into_right_body</span>()),
|
||||
}
|
||||
} <span class="kw">else</span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">res</span>.<span class="ident">map_body</span>(<span class="op">|</span><span class="kw">_</span>, <span class="ident">body</span><span class="op">|</span> <span class="ident">AnyBody::new_boxed</span>(<span class="ident">body</span>)))
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">res</span>.<span class="ident">map_into_left_body</span>())
|
||||
}
|
||||
}
|
||||
<span class="prelude-val">Err</span>(<span class="ident">err</span>) => <span class="prelude-val">Ok</span>(<span class="ident">req</span>.<span class="ident">error_response</span>(<span class="ident">err</span>)),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">err</span>) => <span class="prelude-val">Ok</span>(<span class="ident">req</span>.<span class="ident">error_response</span>(<span class="ident">err</span>).<span class="ident">map_into_right_body</span>()),
|
||||
}
|
||||
}
|
||||
.<span class="ident">map_ok</span>(<span class="op">|</span><span class="ident">res</span><span class="op">|</span> <span class="ident">res</span>.<span class="ident">map_body</span>(<span class="op">|</span><span class="kw">_</span>, <span class="ident">body</span><span class="op">|</span> <span class="ident">AnyBody::new_boxed</span>(<span class="ident">body</span>)))
|
||||
.<span class="ident">boxed_local</span>()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user