mirror of
https://github.com/actix/actix-extras.git
synced 2025-08-30 19:10:20 +02:00
Deploying to gh-pages from @ 8741cd32cc
🚀
This commit is contained in:
@@ -829,21 +829,21 @@
|
||||
<span id="826">826</span>
|
||||
<span id="827">827</span>
|
||||
</pre><div class="example-wrap"><pre class="rust ">
|
||||
<span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">rc</span>::<span class="ident">Rc</span>, <span class="ident">time</span>::<span class="ident">SystemTime</span>};
|
||||
<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">futures_util</span>::<span class="ident">future</span>::{<span class="ident">ready</span>, <span class="ident">Ready</span>};
|
||||
<span class="kw">use</span> <span class="ident">futures_util::future</span>::{<span class="ident">ready</span>, <span class="ident">Ready</span>};
|
||||
<span class="kw">use</span> <span class="ident">serde</span>::{<span class="ident">Deserialize</span>, <span class="ident">Serialize</span>};
|
||||
<span class="kw">use</span> <span class="ident">time</span>::<span class="ident">Duration</span>;
|
||||
<span class="kw">use</span> <span class="ident">time::Duration</span>;
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_web</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</span>::{<span class="ident">ServiceRequest</span>, <span class="ident">ServiceResponse</span>},
|
||||
<span class="ident">error</span>::{<span class="ident">Error</span>, <span class="prelude-ty">Result</span>},
|
||||
<span class="ident">http</span>::<span class="ident">header</span>::{<span class="self">self</span>, <span class="ident">HeaderValue</span>},
|
||||
<span class="ident">http::header</span>::{<span class="self">self</span>, <span class="ident">HeaderValue</span>},
|
||||
<span class="ident">HttpMessage</span>,
|
||||
};
|
||||
|
||||
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">IdentityPolicy</span>;
|
||||
<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::IdentityPolicy</span>;
|
||||
|
||||
<span class="kw">struct</span> <span class="ident">CookieIdentityInner</span> {
|
||||
<span class="ident">key</span>: <span class="ident">Key</span>,
|
||||
@@ -880,8 +880,8 @@
|
||||
<span class="kw">let</span> <span class="ident">key_v2</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">u8</span><span class="op">></span> <span class="op">=</span> [<span class="ident">key</span>, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>]].<span class="ident">concat</span>();
|
||||
|
||||
<span class="ident">CookieIdentityInner</span> {
|
||||
<span class="ident">key</span>: <span class="ident">Key</span>::<span class="ident">derive_from</span>(<span class="ident">key</span>),
|
||||
<span class="ident">key_v2</span>: <span class="ident">Key</span>::<span class="ident">derive_from</span>(<span class="kw-2">&</span><span class="ident">key_v2</span>),
|
||||
<span class="ident">key</span>: <span class="ident">Key::derive_from</span>(<span class="ident">key</span>),
|
||||
<span class="ident">key_v2</span>: <span class="ident">Key::derive_from</span>(<span class="kw-2">&</span><span class="ident">key_v2</span>),
|
||||
<span class="ident">name</span>: <span class="string">"actix-identity"</span>.<span class="ident">to_owned</span>(),
|
||||
<span class="ident">path</span>: <span class="string">"/"</span>.<span class="ident">to_owned</span>(),
|
||||
<span class="ident">domain</span>: <span class="prelude-val">None</span>,
|
||||
@@ -902,14 +902,14 @@
|
||||
<span class="kw">let</span> <span class="ident">add_cookie</span> <span class="op">=</span> <span class="ident">value</span>.<span class="ident">is_some</span>();
|
||||
<span class="kw">let</span> <span class="ident">val</span> <span class="op">=</span> <span class="ident">value</span>.<span class="ident">map</span>(<span class="op">|</span><span class="ident">val</span><span class="op">|</span> {
|
||||
<span class="kw">if</span> <span class="op">!</span><span class="self">self</span>.<span class="ident">legacy_supported</span>() {
|
||||
<span class="ident">serde_json</span>::<span class="ident">to_string</span>(<span class="kw-2">&</span><span class="ident">val</span>)
|
||||
<span class="ident">serde_json::to_string</span>(<span class="kw-2">&</span><span class="ident">val</span>)
|
||||
} <span class="kw">else</span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">val</span>.<span class="ident">identity</span>)
|
||||
}
|
||||
});
|
||||
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">cookie</span> <span class="op">=</span>
|
||||
<span class="ident">Cookie</span>::<span class="ident">new</span>(<span class="self">self</span>.<span class="ident">name</span>.<span class="ident">clone</span>(), <span class="ident">val</span>.<span class="ident">unwrap_or_else</span>(<span class="op">|</span><span class="op">|</span> <span class="prelude-val">Ok</span>(<span class="ident">String</span>::<span class="ident">new</span>()))<span class="question-mark">?</span>);
|
||||
<span class="ident">Cookie::new</span>(<span class="self">self</span>.<span class="ident">name</span>.<span class="ident">clone</span>(), <span class="ident">val</span>.<span class="ident">unwrap_or_else</span>(<span class="op">|</span><span class="op">|</span> <span class="prelude-val">Ok</span>(<span class="ident">String::new</span>()))<span class="question-mark">?</span>);
|
||||
<span class="ident">cookie</span>.<span class="ident">set_path</span>(<span class="self">self</span>.<span class="ident">path</span>.<span class="ident">clone</span>());
|
||||
<span class="ident">cookie</span>.<span class="ident">set_secure</span>(<span class="self">self</span>.<span class="ident">secure</span>);
|
||||
<span class="ident">cookie</span>.<span class="ident">set_http_only</span>(<span class="bool-val">true</span>);
|
||||
@@ -930,7 +930,7 @@
|
||||
<span class="ident">cookie</span>.<span class="ident">set_same_site</span>(<span class="ident">same_site</span>);
|
||||
}
|
||||
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">jar</span> <span class="op">=</span> <span class="ident">CookieJar</span>::<span class="ident">new</span>();
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">jar</span> <span class="op">=</span> <span class="ident">CookieJar::new</span>();
|
||||
|
||||
<span class="kw">let</span> <span class="ident">key</span> <span class="op">=</span> <span class="kw">if</span> <span class="self">self</span>.<span class="ident">legacy_supported</span>() {
|
||||
<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">key</span>
|
||||
@@ -946,8 +946,8 @@
|
||||
}
|
||||
|
||||
<span class="kw">for</span> <span class="ident">cookie</span> <span class="kw">in</span> <span class="ident">jar</span>.<span class="ident">delta</span>() {
|
||||
<span class="kw">let</span> <span class="ident">val</span> <span class="op">=</span> <span class="ident">HeaderValue</span>::<span class="ident">from_str</span>(<span class="kw-2">&</span><span class="ident">cookie</span>.<span class="ident">to_string</span>())<span class="question-mark">?</span>;
|
||||
<span class="ident">resp</span>.<span class="ident">headers_mut</span>().<span class="ident">append</span>(<span class="ident">header</span>::<span class="ident">SET_COOKIE</span>, <span class="ident">val</span>);
|
||||
<span class="kw">let</span> <span class="ident">val</span> <span class="op">=</span> <span class="ident">HeaderValue::from_str</span>(<span class="kw-2">&</span><span class="ident">cookie</span>.<span class="ident">to_string</span>())<span class="question-mark">?</span>;
|
||||
<span class="ident">resp</span>.<span class="ident">headers_mut</span>().<span class="ident">append</span>(<span class="ident">header::SET_COOKIE</span>, <span class="ident">val</span>);
|
||||
}
|
||||
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
@@ -955,7 +955,7 @@
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">load</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">req</span>: <span class="kw-2">&</span><span class="ident">ServiceRequest</span>) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">CookieValue</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">req</span>.<span class="ident">cookie</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">name</span>)<span class="question-mark">?</span>;
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">jar</span> <span class="op">=</span> <span class="ident">CookieJar</span>::<span class="ident">new</span>();
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">jar</span> <span class="op">=</span> <span class="ident">CookieJar::new</span>();
|
||||
<span class="ident">jar</span>.<span class="ident">add_original</span>(<span class="ident">cookie</span>.<span class="ident">clone</span>());
|
||||
|
||||
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="kw">if</span> <span class="self">self</span>.<span class="ident">legacy_supported</span>() {
|
||||
@@ -976,8 +976,8 @@
|
||||
}
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">parse</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">cookie</span>: <span class="ident">Cookie</span><span class="op"><</span><span class="lifetime">'_</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">CookieValue</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">value</span>: <span class="ident">CookieValue</span> <span class="op">=</span> <span class="ident">serde_json</span>::<span class="ident">from_str</span>(<span class="ident">cookie</span>.<span class="ident">value</span>()).<span class="ident">ok</span>()<span class="question-mark">?</span>;
|
||||
<span class="kw">let</span> <span class="ident">now</span> <span class="op">=</span> <span class="ident">SystemTime</span>::<span class="ident">now</span>();
|
||||
<span class="kw">let</span> <span class="ident">value</span>: <span class="ident">CookieValue</span> <span class="op">=</span> <span class="ident">serde_json::from_str</span>(<span class="ident">cookie</span>.<span class="ident">value</span>()).<span class="ident">ok</span>()<span class="question-mark">?</span>;
|
||||
<span class="kw">let</span> <span class="ident">now</span> <span class="op">=</span> <span class="ident">SystemTime::now</span>();
|
||||
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">visit_deadline</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">visit_deadline</span> {
|
||||
<span class="kw">let</span> <span class="ident">inactivity</span> <span class="op">=</span> <span class="ident">now</span>.<span class="ident">duration_since</span>(<span class="ident">value</span>.<span class="ident">visit_timestamp</span><span class="question-mark">?</span>).<span class="ident">ok</span>()<span class="question-mark">?</span>;
|
||||
@@ -1044,7 +1044,7 @@
|
||||
<span class="doccomment">/// # Panics</span>
|
||||
<span class="doccomment">/// Panics if `key` is less than 32 bytes in length..</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">key</span>: <span class="kw-2">&</span>[<span class="ident">u8</span>]) <span class="op">-</span><span class="op">></span> <span class="ident">CookieIdentityPolicy</span> {
|
||||
<span class="ident">CookieIdentityPolicy</span>(<span class="ident">Rc</span>::<span class="ident">new</span>(<span class="ident">CookieIdentityInner</span>::<span class="ident">new</span>(<span class="ident">key</span>)))
|
||||
<span class="ident">CookieIdentityPolicy</span>(<span class="ident">Rc::new</span>(<span class="ident">CookieIdentityInner::new</span>(<span class="ident">key</span>)))
|
||||
}
|
||||
|
||||
<span class="doccomment">/// Sets the name of issued cookies.</span>
|
||||
@@ -1079,7 +1079,7 @@
|
||||
|
||||
<span class="doccomment">/// Sets the `Max-Age` attribute of issued cookies with given number of seconds.</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">max_age_secs</span>(<span class="self">self</span>, <span class="ident">seconds</span>: <span class="ident">i64</span>) <span class="op">-</span><span class="op">></span> <span class="ident">CookieIdentityPolicy</span> {
|
||||
<span class="self">self</span>.<span class="ident">max_age</span>(<span class="ident">Duration</span>::<span class="ident">seconds</span>(<span class="ident">seconds</span>))
|
||||
<span class="self">self</span>.<span class="ident">max_age</span>(<span class="ident">Duration::seconds</span>(<span class="ident">seconds</span>))
|
||||
}
|
||||
|
||||
<span class="doccomment">/// Sets the `HttpOnly` attribute of issued cookies.</span>
|
||||
@@ -1124,7 +1124,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">inner_mut</span>(<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-</span><span class="op">></span> <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">CookieIdentityInner</span> {
|
||||
<span class="ident">Rc</span>::<span class="ident">get_mut</span>(<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="self">self</span>.<span class="number">0</span>).<span class="ident">unwrap</span>()
|
||||
<span class="ident">Rc::get_mut</span>(<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="self">self</span>.<span class="number">0</span>).<span class="ident">unwrap</span>()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1132,7 +1132,7 @@
|
||||
<span class="kw">type</span> <span class="ident">Future</span> <span class="op">=</span> <span class="ident">Ready</span><span class="op"><</span><span class="prelude-ty">Result</span><span class="op"><</span><span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>, <span class="ident">Error</span><span class="op">></span><span class="op">></span>;
|
||||
<span class="kw">type</span> <span class="ident">ResponseFuture</span> <span class="op">=</span> <span class="ident">Ready</span><span class="op"><</span><span class="prelude-ty">Result</span><span class="op"><</span>(), <span class="ident">Error</span><span class="op">></span><span class="op">></span>;
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">from_request</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">req</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">ServiceRequest</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span>::<span class="ident">Future</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from_request</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">req</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">ServiceRequest</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span><span class="ident">::Future</span> {
|
||||
<span class="ident">ready</span>(<span class="prelude-val">Ok</span>(<span class="self">self</span>.<span class="number">0</span>.<span class="ident">load</span>(<span class="ident">req</span>).<span class="ident">map</span>(<span class="op">|</span><span class="ident">value</span><span class="op">|</span> {
|
||||
<span class="kw">let</span> <span class="ident">CookieValue</span> {
|
||||
<span class="ident">identity</span>,
|
||||
@@ -1154,9 +1154,9 @@
|
||||
<span class="ident">id</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>,
|
||||
<span class="ident">changed</span>: <span class="ident">bool</span>,
|
||||
<span class="ident">res</span>: <span class="kw-2">&</span><span class="kw-2">mut</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="self">Self</span>::<span class="ident">ResponseFuture</span> {
|
||||
) <span class="op">-</span><span class="op">></span> <span class="self">Self</span><span class="ident">::ResponseFuture</span> {
|
||||
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="kw">if</span> <span class="ident">changed</span> {
|
||||
<span class="kw">let</span> <span class="ident">login_timestamp</span> <span class="op">=</span> <span class="ident">SystemTime</span>::<span class="ident">now</span>();
|
||||
<span class="kw">let</span> <span class="ident">login_timestamp</span> <span class="op">=</span> <span class="ident">SystemTime::now</span>();
|
||||
|
||||
<span class="self">self</span>.<span class="number">0</span>.<span class="ident">set_cookie</span>(
|
||||
<span class="ident">res</span>,
|
||||
@@ -1167,7 +1167,7 @@
|
||||
}),
|
||||
)
|
||||
} <span class="kw">else</span> <span class="kw">if</span> <span class="self">self</span>.<span class="number">0</span>.<span class="ident">always_update_cookie</span>() <span class="op">&&</span> <span class="ident">id</span>.<span class="ident">is_some</span>() {
|
||||
<span class="kw">let</span> <span class="ident">visit_timestamp</span> <span class="op">=</span> <span class="ident">SystemTime</span>::<span class="ident">now</span>();
|
||||
<span class="kw">let</span> <span class="ident">visit_timestamp</span> <span class="op">=</span> <span class="ident">SystemTime::now</span>();
|
||||
|
||||
<span class="kw">let</span> <span class="ident">login_timestamp</span> <span class="op">=</span> <span class="kw">if</span> <span class="self">self</span>.<span class="number">0</span>.<span class="ident">requires_oob_data</span>() {
|
||||
<span class="kw">let</span> <span class="ident">CookieIdentityExtension</span> { <span class="ident">login_timestamp</span> } <span class="op">=</span>
|
||||
@@ -1196,16 +1196,16 @@
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
|
||||
<span class="kw">mod</span> <span class="ident">tests</span> {
|
||||
<span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">borrow</span>::<span class="ident">Borrow</span>, <span class="ident">time</span>::<span class="ident">SystemTime</span>};
|
||||
<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">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</span>::<span class="ident">ServiceResponse</span>,
|
||||
<span class="ident">dev::ServiceResponse</span>,
|
||||
<span class="ident">http</span>::{<span class="ident">header</span>, <span class="ident">StatusCode</span>},
|
||||
<span class="ident">test</span>::{<span class="self">self</span>, <span class="ident">TestRequest</span>},
|
||||
<span class="ident">web</span>, <span class="ident">App</span>, <span class="ident">HttpResponse</span>,
|
||||
};
|
||||
<span class="kw">use</span> <span class="ident">time</span>::<span class="ident">Duration</span>;
|
||||
<span class="kw">use</span> <span class="ident">time::Duration</span>;
|
||||
|
||||
<span class="kw">use</span> <span class="kw">super</span>::<span class="kw-2">*</span>;
|
||||
<span class="kw">use</span> <span class="kw">crate</span>::{<span class="ident">tests</span>::<span class="kw-2">*</span>, <span class="ident">Identity</span>, <span class="ident">IdentityService</span>};
|
||||
@@ -1215,16 +1215,16 @@
|
||||
<span class="ident">login_timestamp</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">SystemTime</span><span class="op">></span>,
|
||||
<span class="ident">visit_timestamp</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">SystemTime</span><span class="op">></span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">Cookie</span><span class="op"><</span><span class="lifetime">'static</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">jar</span> <span class="op">=</span> <span class="ident">CookieJar</span>::<span class="ident">new</span>();
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">jar</span> <span class="op">=</span> <span class="ident">CookieJar::new</span>();
|
||||
<span class="kw">let</span> <span class="ident">key</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">u8</span><span class="op">></span> <span class="op">=</span> <span class="ident">COOKIE_KEY_MASTER</span>
|
||||
.<span class="ident">iter</span>()
|
||||
.<span class="ident">chain</span>([<span class="number">1</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>].<span class="ident">iter</span>())
|
||||
.<span class="ident">copied</span>()
|
||||
.<span class="ident">collect</span>();
|
||||
|
||||
<span class="ident">jar</span>.<span class="ident">private</span>(<span class="kw-2">&</span><span class="ident">Key</span>::<span class="ident">derive_from</span>(<span class="kw-2">&</span><span class="ident">key</span>)).<span class="ident">add</span>(<span class="ident">Cookie</span>::<span class="ident">new</span>(
|
||||
<span class="ident">jar</span>.<span class="ident">private</span>(<span class="kw-2">&</span><span class="ident">Key::derive_from</span>(<span class="kw-2">&</span><span class="ident">key</span>)).<span class="ident">add</span>(<span class="ident">Cookie::new</span>(
|
||||
<span class="ident">COOKIE_NAME</span>,
|
||||
<span class="ident">serde_json</span>::<span class="ident">to_string</span>(<span class="kw-2">&</span><span class="ident">CookieValue</span> {
|
||||
<span class="ident">serde_json::to_string</span>(<span class="kw-2">&</span><span class="ident">CookieValue</span> {
|
||||
<span class="ident">identity</span>: <span class="ident">identity</span>.<span class="ident">to_string</span>(),
|
||||
<span class="ident">login_timestamp</span>,
|
||||
<span class="ident">visit_timestamp</span>,
|
||||
@@ -1241,10 +1241,10 @@
|
||||
<span class="ident">login_timestamp</span>: <span class="ident">LoginTimestampCheck</span>,
|
||||
<span class="ident">visit_timestamp</span>: <span class="ident">VisitTimeStampCheck</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</span>::<span class="ident">new</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</span>::<span class="ident">SET_COOKIE</span>) {
|
||||
<span class="ident">cookies</span>.<span class="ident">add</span>(<span class="ident">Cookie</span>::<span class="ident">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>());
|
||||
<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>());
|
||||
}
|
||||
|
||||
<span class="kw">let</span> <span class="ident">key</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">u8</span><span class="op">></span> <span class="op">=</span> <span class="ident">COOKIE_KEY_MASTER</span>
|
||||
@@ -1254,232 +1254,232 @@
|
||||
.<span class="ident">collect</span>();
|
||||
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">cookies</span>
|
||||
.<span class="ident">private</span>(<span class="kw-2">&</span><span class="ident">Key</span>::<span class="ident">derive_from</span>(<span class="kw-2">&</span><span class="ident">key</span>))
|
||||
.<span class="ident">private</span>(<span class="kw-2">&</span><span class="ident">Key::derive_from</span>(<span class="kw-2">&</span><span class="ident">key</span>))
|
||||
.<span class="ident">get</span>(<span class="ident">COOKIE_NAME</span>)
|
||||
.<span class="ident">unwrap</span>();
|
||||
|
||||
<span class="kw">let</span> <span class="ident">cv</span>: <span class="ident">CookieValue</span> <span class="op">=</span> <span class="ident">serde_json</span>::<span class="ident">from_str</span>(<span class="ident">cookie</span>.<span class="ident">value</span>()).<span class="ident">unwrap</span>();
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">cv</span>.<span class="ident">identity</span>, <span class="ident">identity</span>);
|
||||
<span class="kw">let</span> <span class="ident">cv</span>: <span class="ident">CookieValue</span> <span class="op">=</span> <span class="ident">serde_json::from_str</span>(<span class="ident">cookie</span>.<span class="ident">value</span>()).<span class="ident">unwrap</span>();
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">cv</span>.<span class="ident">identity</span>, <span class="ident">identity</span>);
|
||||
|
||||
<span class="kw">let</span> <span class="ident">now</span> <span class="op">=</span> <span class="ident">SystemTime</span>::<span class="ident">now</span>();
|
||||
<span class="kw">let</span> <span class="ident">t30sec_ago</span> <span class="op">=</span> <span class="ident">now</span> <span class="op">-</span> <span class="ident">Duration</span>::<span class="ident">seconds</span>(<span class="number">30</span>);
|
||||
<span class="kw">let</span> <span class="ident">now</span> <span class="op">=</span> <span class="ident">SystemTime::now</span>();
|
||||
<span class="kw">let</span> <span class="ident">t30sec_ago</span> <span class="op">=</span> <span class="ident">now</span> <span class="op">-</span> <span class="ident">Duration::seconds</span>(<span class="number">30</span>);
|
||||
|
||||
<span class="kw">match</span> <span class="ident">login_timestamp</span> {
|
||||
<span class="ident">LoginTimestampCheck</span>::<span class="ident">NoTimestamp</span> <span class="op">=</span><span class="op">></span> <span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">cv</span>.<span class="ident">login_timestamp</span>, <span class="prelude-val">None</span>),
|
||||
<span class="ident">LoginTimestampCheck</span>::<span class="ident">NewTimestamp</span> <span class="op">=</span><span class="op">></span> <span class="macro">assert</span><span class="macro">!</span>(
|
||||
<span class="ident">LoginTimestampCheck::NoTimestamp</span> <span class="op">=</span><span class="op">></span> <span class="macro">assert_eq!</span>(<span class="ident">cv</span>.<span class="ident">login_timestamp</span>, <span class="prelude-val">None</span>),
|
||||
<span class="ident">LoginTimestampCheck::NewTimestamp</span> <span class="op">=</span><span class="op">></span> <span class="macro">assert!</span>(
|
||||
<span class="ident">t30sec_ago</span> <span class="op"><</span><span class="op">=</span> <span class="ident">cv</span>.<span class="ident">login_timestamp</span>.<span class="ident">unwrap</span>()
|
||||
<span class="op">&&</span> <span class="ident">cv</span>.<span class="ident">login_timestamp</span>.<span class="ident">unwrap</span>() <span class="op"><</span><span class="op">=</span> <span class="ident">now</span>
|
||||
),
|
||||
<span class="ident">LoginTimestampCheck</span>::<span class="ident">OldTimestamp</span>(<span class="ident">old_timestamp</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">cv</span>.<span class="ident">login_timestamp</span>, <span class="prelude-val">Some</span>(<span class="ident">old_timestamp</span>))
|
||||
<span class="ident">LoginTimestampCheck::OldTimestamp</span>(<span class="ident">old_timestamp</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">cv</span>.<span class="ident">login_timestamp</span>, <span class="prelude-val">Some</span>(<span class="ident">old_timestamp</span>))
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">match</span> <span class="ident">visit_timestamp</span> {
|
||||
<span class="ident">VisitTimeStampCheck</span>::<span class="ident">NoTimestamp</span> <span class="op">=</span><span class="op">></span> <span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">cv</span>.<span class="ident">visit_timestamp</span>, <span class="prelude-val">None</span>),
|
||||
<span class="ident">VisitTimeStampCheck</span>::<span class="ident">NewTimestamp</span> <span class="op">=</span><span class="op">></span> <span class="macro">assert</span><span class="macro">!</span>(
|
||||
<span class="ident">VisitTimeStampCheck::NoTimestamp</span> <span class="op">=</span><span class="op">></span> <span class="macro">assert_eq!</span>(<span class="ident">cv</span>.<span class="ident">visit_timestamp</span>, <span class="prelude-val">None</span>),
|
||||
<span class="ident">VisitTimeStampCheck::NewTimestamp</span> <span class="op">=</span><span class="op">></span> <span class="macro">assert!</span>(
|
||||
<span class="ident">t30sec_ago</span> <span class="op"><</span><span class="op">=</span> <span class="ident">cv</span>.<span class="ident">visit_timestamp</span>.<span class="ident">unwrap</span>()
|
||||
<span class="op">&&</span> <span class="ident">cv</span>.<span class="ident">visit_timestamp</span>.<span class="ident">unwrap</span>() <span class="op"><</span><span class="op">=</span> <span class="ident">now</span>
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_flow</span>() {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">init_service</span>(
|
||||
<span class="ident">App</span>::<span class="ident">new</span>()
|
||||
.<span class="ident">wrap</span>(<span class="ident">IdentityService</span>::<span class="ident">new</span>(
|
||||
<span class="ident">CookieIdentityPolicy</span>::<span class="ident">new</span>(<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>)
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">test::init_service</span>(
|
||||
<span class="ident">App::new</span>()
|
||||
.<span class="ident">wrap</span>(<span class="ident">IdentityService::new</span>(
|
||||
<span class="ident">CookieIdentityPolicy::new</span>(<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>)
|
||||
.<span class="ident">domain</span>(<span class="string">"www.rust-lang.org"</span>)
|
||||
.<span class="ident">name</span>(<span class="ident">COOKIE_NAME</span>)
|
||||
.<span class="ident">path</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">secure</span>(<span class="bool-val">true</span>),
|
||||
))
|
||||
.<span class="ident">service</span>(<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/index"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> {
|
||||
.<span class="ident">service</span>(<span class="ident">web::resource</span>(<span class="string">"/index"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> {
|
||||
<span class="kw">if</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">is_some</span>() {
|
||||
<span class="ident">HttpResponse</span>::<span class="ident">Created</span>()
|
||||
<span class="ident">HttpResponse::Created</span>()
|
||||
} <span class="kw">else</span> {
|
||||
<span class="ident">HttpResponse</span>::<span class="prelude-val">Ok</span>()
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
}
|
||||
}))
|
||||
.<span class="ident">service</span>(<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/login"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> {
|
||||
.<span class="ident">service</span>(<span class="ident">web::resource</span>(<span class="string">"/login"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> {
|
||||
<span class="ident">id</span>.<span class="ident">remember</span>(<span class="ident">COOKIE_LOGIN</span>.<span class="ident">to_string</span>());
|
||||
<span class="ident">HttpResponse</span>::<span class="prelude-val">Ok</span>()
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
}))
|
||||
.<span class="ident">service</span>(<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/logout"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> {
|
||||
.<span class="ident">service</span>(<span class="ident">web::resource</span>(<span class="string">"/logout"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> {
|
||||
<span class="kw">if</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">is_some</span>() {
|
||||
<span class="ident">id</span>.<span class="ident">forget</span>();
|
||||
<span class="ident">HttpResponse</span>::<span class="prelude-val">Ok</span>()
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
} <span class="kw">else</span> {
|
||||
<span class="ident">HttpResponse</span>::<span class="ident">BadRequest</span>()
|
||||
<span class="ident">HttpResponse::BadRequest</span>()
|
||||
}
|
||||
})),
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span>
|
||||
<span class="ident">test</span>::<span class="ident">call_service</span>(<span class="kw-2">&</span><span class="ident">srv</span>, <span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/index"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
|
||||
<span class="ident">test::call_service</span>(<span class="kw-2">&</span><span class="ident">srv</span>, <span class="ident">TestRequest::with_uri</span>(<span class="string">"/index"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
|
||||
|
||||
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span>
|
||||
<span class="ident">test</span>::<span class="ident">call_service</span>(<span class="kw-2">&</span><span class="ident">srv</span>, <span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/login"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
|
||||
<span class="ident">test::call_service</span>(<span class="kw-2">&</span><span class="ident">srv</span>, <span class="ident">TestRequest::with_uri</span>(<span class="string">"/login"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
|
||||
<span class="kw">let</span> <span class="ident">c</span> <span class="op">=</span> <span class="ident">resp</span>.<span class="ident">response</span>().<span class="ident">cookies</span>().<span class="ident">next</span>().<span class="ident">unwrap</span>().<span class="ident">to_owned</span>();
|
||||
|
||||
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">srv</span>,
|
||||
<span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/index"</span>)
|
||||
<span class="ident">TestRequest::with_uri</span>(<span class="string">"/index"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">c</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">CREATED</span>);
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::CREATED</span>);
|
||||
|
||||
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">srv</span>,
|
||||
<span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/logout"</span>)
|
||||
<span class="ident">TestRequest::with_uri</span>(<span class="string">"/logout"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">c</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
|
||||
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">headers</span>().<span class="ident">contains_key</span>(<span class="ident">header</span>::<span class="ident">SET_COOKIE</span>))
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
|
||||
<span class="macro">assert!</span>(<span class="ident">resp</span>.<span class="ident">headers</span>().<span class="ident">contains_key</span>(<span class="ident">header::SET_COOKIE</span>))
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_max_age_time</span>() {
|
||||
<span class="kw">let</span> <span class="ident">duration</span> <span class="op">=</span> <span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">1</span>);
|
||||
<span class="kw">let</span> <span class="ident">duration</span> <span class="op">=</span> <span class="ident">Duration::days</span>(<span class="number">1</span>);
|
||||
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">init_service</span>(
|
||||
<span class="ident">App</span>::<span class="ident">new</span>()
|
||||
.<span class="ident">wrap</span>(<span class="ident">IdentityService</span>::<span class="ident">new</span>(
|
||||
<span class="ident">CookieIdentityPolicy</span>::<span class="ident">new</span>(<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>)
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">test::init_service</span>(
|
||||
<span class="ident">App::new</span>()
|
||||
.<span class="ident">wrap</span>(<span class="ident">IdentityService::new</span>(
|
||||
<span class="ident">CookieIdentityPolicy::new</span>(<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>)
|
||||
.<span class="ident">domain</span>(<span class="string">"www.rust-lang.org"</span>)
|
||||
.<span class="ident">name</span>(<span class="ident">COOKIE_NAME</span>)
|
||||
.<span class="ident">path</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">max_age</span>(<span class="ident">duration</span>)
|
||||
.<span class="ident">secure</span>(<span class="bool-val">true</span>),
|
||||
))
|
||||
.<span class="ident">service</span>(<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/login"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> {
|
||||
.<span class="ident">service</span>(<span class="ident">web::resource</span>(<span class="string">"/login"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> {
|
||||
<span class="ident">id</span>.<span class="ident">remember</span>(<span class="string">"test"</span>.<span class="ident">to_string</span>());
|
||||
<span class="ident">HttpResponse</span>::<span class="prelude-val">Ok</span>()
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
})),
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span>
|
||||
<span class="ident">test</span>::<span class="ident">call_service</span>(<span class="kw-2">&</span><span class="ident">srv</span>, <span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/login"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
|
||||
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">headers</span>().<span class="ident">contains_key</span>(<span class="ident">header</span>::<span class="ident">SET_COOKIE</span>));
|
||||
<span class="ident">test::call_service</span>(<span class="kw-2">&</span><span class="ident">srv</span>, <span class="ident">TestRequest::with_uri</span>(<span class="string">"/login"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
|
||||
<span class="macro">assert!</span>(<span class="ident">resp</span>.<span class="ident">headers</span>().<span class="ident">contains_key</span>(<span class="ident">header::SET_COOKIE</span>));
|
||||
<span class="kw">let</span> <span class="ident">c</span> <span class="op">=</span> <span class="ident">resp</span>.<span class="ident">response</span>().<span class="ident">cookies</span>().<span class="ident">next</span>().<span class="ident">unwrap</span>().<span class="ident">to_owned</span>();
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">duration</span>, <span class="ident">c</span>.<span class="ident">max_age</span>().<span class="ident">unwrap</span>());
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">duration</span>, <span class="ident">c</span>.<span class="ident">max_age</span>().<span class="ident">unwrap</span>());
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_http_only_same_site</span>() {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">init_service</span>(
|
||||
<span class="ident">App</span>::<span class="ident">new</span>()
|
||||
.<span class="ident">wrap</span>(<span class="ident">IdentityService</span>::<span class="ident">new</span>(
|
||||
<span class="ident">CookieIdentityPolicy</span>::<span class="ident">new</span>(<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>)
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">test::init_service</span>(
|
||||
<span class="ident">App::new</span>()
|
||||
.<span class="ident">wrap</span>(<span class="ident">IdentityService::new</span>(
|
||||
<span class="ident">CookieIdentityPolicy::new</span>(<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>)
|
||||
.<span class="ident">domain</span>(<span class="string">"www.rust-lang.org"</span>)
|
||||
.<span class="ident">name</span>(<span class="ident">COOKIE_NAME</span>)
|
||||
.<span class="ident">path</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">http_only</span>(<span class="bool-val">true</span>)
|
||||
.<span class="ident">same_site</span>(<span class="ident">SameSite</span>::<span class="prelude-val">None</span>),
|
||||
.<span class="ident">same_site</span>(<span class="ident">SameSite::None</span>),
|
||||
))
|
||||
.<span class="ident">service</span>(<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/login"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> {
|
||||
.<span class="ident">service</span>(<span class="ident">web::resource</span>(<span class="string">"/login"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> {
|
||||
<span class="ident">id</span>.<span class="ident">remember</span>(<span class="string">"test"</span>.<span class="ident">to_string</span>());
|
||||
<span class="ident">HttpResponse</span>::<span class="prelude-val">Ok</span>()
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
})),
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span>
|
||||
<span class="ident">test</span>::<span class="ident">call_service</span>(<span class="kw-2">&</span><span class="ident">srv</span>, <span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/login"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
<span class="ident">test::call_service</span>(<span class="kw-2">&</span><span class="ident">srv</span>, <span class="ident">TestRequest::with_uri</span>(<span class="string">"/login"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
|
||||
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">headers</span>().<span class="ident">contains_key</span>(<span class="ident">header</span>::<span class="ident">SET_COOKIE</span>));
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
|
||||
<span class="macro">assert!</span>(<span class="ident">resp</span>.<span class="ident">headers</span>().<span class="ident">contains_key</span>(<span class="ident">header::SET_COOKIE</span>));
|
||||
|
||||
<span class="kw">let</span> <span class="ident">c</span> <span class="op">=</span> <span class="ident">resp</span>.<span class="ident">response</span>().<span class="ident">cookies</span>().<span class="ident">next</span>().<span class="ident">unwrap</span>().<span class="ident">to_owned</span>();
|
||||
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">c</span>.<span class="ident">http_only</span>().<span class="ident">unwrap</span>());
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">SameSite</span>::<span class="prelude-val">None</span>, <span class="ident">c</span>.<span class="ident">same_site</span>().<span class="ident">unwrap</span>());
|
||||
<span class="macro">assert!</span>(<span class="ident">c</span>.<span class="ident">http_only</span>().<span class="ident">unwrap</span>());
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">SameSite::None</span>, <span class="ident">c</span>.<span class="ident">same_site</span>().<span class="ident">unwrap</span>());
|
||||
}
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">legacy_login_cookie</span>(<span class="ident">identity</span>: <span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>) <span class="op">-</span><span class="op">></span> <span class="ident">Cookie</span><span class="op"><</span><span class="lifetime">'static</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">jar</span> <span class="op">=</span> <span class="ident">CookieJar</span>::<span class="ident">new</span>();
|
||||
<span class="ident">jar</span>.<span class="ident">private</span>(<span class="kw-2">&</span><span class="ident">Key</span>::<span class="ident">derive_from</span>(<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>))
|
||||
.<span class="ident">add</span>(<span class="ident">Cookie</span>::<span class="ident">new</span>(<span class="ident">COOKIE_NAME</span>, <span class="ident">identity</span>));
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">jar</span> <span class="op">=</span> <span class="ident">CookieJar::new</span>();
|
||||
<span class="ident">jar</span>.<span class="ident">private</span>(<span class="kw-2">&</span><span class="ident">Key::derive_from</span>(<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>))
|
||||
.<span class="ident">add</span>(<span class="ident">Cookie::new</span>(<span class="ident">COOKIE_NAME</span>, <span class="ident">identity</span>));
|
||||
<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">let</span> <span class="ident">bytes</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">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</span>::<span class="ident">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="macro">!</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">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">&</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">let</span> <span class="kw-2">mut</span> <span class="ident">cookies</span> <span class="op">=</span> <span class="ident">CookieJar</span>::<span class="ident">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</span>::<span class="ident">SET_COOKIE</span>) {
|
||||
<span class="ident">cookies</span>.<span class="ident">add</span>(<span class="ident">Cookie</span>::<span class="ident">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>());
|
||||
<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>());
|
||||
}
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">cookies</span>
|
||||
.<span class="ident">private</span>(<span class="kw-2">&</span><span class="ident">Key</span>::<span class="ident">derive_from</span>(<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>))
|
||||
.<span class="ident">private</span>(<span class="kw-2">&</span><span class="ident">Key::derive_from</span>(<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>))
|
||||
.<span class="ident">get</span>(<span class="ident">COOKIE_NAME</span>)
|
||||
.<span class="ident">unwrap</span>();
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">cookie</span>.<span class="ident">value</span>(), <span class="ident">identity</span>);
|
||||
<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">&</span><span class="kw-2">mut</span> <span class="ident">ServiceResponse</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</span>::<span class="ident">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</span>::<span class="ident">SET_COOKIE</span>) {
|
||||
<span class="ident">cookies</span>.<span class="ident">add</span>(<span class="ident">Cookie</span>::<span class="ident">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>());
|
||||
<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>());
|
||||
}
|
||||
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">cookies</span>.<span class="ident">get</span>(<span class="ident">COOKIE_NAME</span>).<span class="ident">is_none</span>());
|
||||
<span class="macro">assert!</span>(<span class="ident">cookies</span>.<span class="ident">get</span>(<span class="ident">COOKIE_NAME</span>).<span class="ident">is_none</span>());
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_max_age</span>() {
|
||||
<span class="kw">let</span> <span class="ident">seconds</span> <span class="op">=</span> <span class="number">60</span>;
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">init_service</span>(
|
||||
<span class="ident">App</span>::<span class="ident">new</span>()
|
||||
.<span class="ident">wrap</span>(<span class="ident">IdentityService</span>::<span class="ident">new</span>(
|
||||
<span class="ident">CookieIdentityPolicy</span>::<span class="ident">new</span>(<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>)
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">test::init_service</span>(
|
||||
<span class="ident">App::new</span>()
|
||||
.<span class="ident">wrap</span>(<span class="ident">IdentityService::new</span>(
|
||||
<span class="ident">CookieIdentityPolicy::new</span>(<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>)
|
||||
.<span class="ident">domain</span>(<span class="string">"www.rust-lang.org"</span>)
|
||||
.<span class="ident">name</span>(<span class="ident">COOKIE_NAME</span>)
|
||||
.<span class="ident">path</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">max_age_secs</span>(<span class="ident">seconds</span>)
|
||||
.<span class="ident">secure</span>(<span class="bool-val">true</span>),
|
||||
))
|
||||
.<span class="ident">service</span>(<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/login"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> {
|
||||
.<span class="ident">service</span>(<span class="ident">web::resource</span>(<span class="string">"/login"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> {
|
||||
<span class="ident">id</span>.<span class="ident">remember</span>(<span class="string">"test"</span>.<span class="ident">to_string</span>());
|
||||
<span class="ident">HttpResponse</span>::<span class="prelude-val">Ok</span>()
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
})),
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span>
|
||||
<span class="ident">test</span>::<span class="ident">call_service</span>(<span class="kw-2">&</span><span class="ident">srv</span>, <span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/login"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
|
||||
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">headers</span>().<span class="ident">contains_key</span>(<span class="ident">header</span>::<span class="ident">SET_COOKIE</span>));
|
||||
<span class="ident">test::call_service</span>(<span class="kw-2">&</span><span class="ident">srv</span>, <span class="ident">TestRequest::with_uri</span>(<span class="string">"/login"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
|
||||
<span class="macro">assert!</span>(<span class="ident">resp</span>.<span class="ident">headers</span>().<span class="ident">contains_key</span>(<span class="ident">header::SET_COOKIE</span>));
|
||||
<span class="kw">let</span> <span class="ident">c</span> <span class="op">=</span> <span class="ident">resp</span>.<span class="ident">response</span>().<span class="ident">cookies</span>().<span class="ident">next</span>().<span class="ident">unwrap</span>().<span class="ident">to_owned</span>();
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">Duration</span>::<span class="ident">seconds</span>(<span class="ident">seconds</span> <span class="kw">as</span> <span class="ident">i64</span>), <span class="ident">c</span>.<span class="ident">max_age</span>().<span class="ident">unwrap</span>());
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">Duration::seconds</span>(<span class="ident">seconds</span> <span class="kw">as</span> <span class="ident">i64</span>), <span class="ident">c</span>.<span class="ident">max_age</span>().<span class="ident">unwrap</span>());
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_legacy_cookie_is_set</span>() {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span>
|
||||
<span class="ident">test</span>::<span class="ident">call_service</span>(<span class="kw-2">&</span><span class="ident">srv</span>, <span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
<span class="ident">test::call_service</span>(<span class="kw-2">&</span><span class="ident">srv</span>, <span class="ident">TestRequest::with_uri</span>(<span class="string">"/"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
<span class="ident">assert_legacy_login_cookie</span>(<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">resp</span>, <span class="ident">COOKIE_LOGIN</span>);
|
||||
<span class="ident">assert_logged_in</span>(<span class="ident">resp</span>, <span class="prelude-val">None</span>).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_legacy_cookie_works</span>() {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">legacy_login_cookie</span>(<span class="ident">COOKIE_LOGIN</span>);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">srv</span>,
|
||||
<span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/"</span>)
|
||||
<span class="ident">TestRequest::with_uri</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookie</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
@@ -1488,13 +1488,13 @@
|
||||
<span class="ident">assert_logged_in</span>(<span class="ident">resp</span>, <span class="prelude-val">Some</span>(<span class="ident">COOKIE_LOGIN</span>)).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_legacy_cookie_rejected_if_visit_timestamp_needed</span>() {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">visit_deadline</span>(<span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">visit_deadline</span>(<span class="ident">Duration::days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">legacy_login_cookie</span>(<span class="ident">COOKIE_LOGIN</span>);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">srv</span>,
|
||||
<span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/"</span>)
|
||||
<span class="ident">TestRequest::with_uri</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookie</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
@@ -1502,19 +1502,19 @@
|
||||
<span class="ident">assert_login_cookie</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">resp</span>,
|
||||
<span class="ident">COOKIE_LOGIN</span>,
|
||||
<span class="ident">LoginTimestampCheck</span>::<span class="ident">NoTimestamp</span>,
|
||||
<span class="ident">VisitTimeStampCheck</span>::<span class="ident">NewTimestamp</span>,
|
||||
<span class="ident">LoginTimestampCheck::NoTimestamp</span>,
|
||||
<span class="ident">VisitTimeStampCheck::NewTimestamp</span>,
|
||||
);
|
||||
<span class="ident">assert_logged_in</span>(<span class="ident">resp</span>, <span class="prelude-val">None</span>).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_legacy_cookie_rejected_if_login_timestamp_needed</span>() {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">login_deadline</span>(<span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">login_deadline</span>(<span class="ident">Duration::days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">legacy_login_cookie</span>(<span class="ident">COOKIE_LOGIN</span>);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">srv</span>,
|
||||
<span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/"</span>)
|
||||
<span class="ident">TestRequest::with_uri</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookie</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
@@ -1522,19 +1522,19 @@
|
||||
<span class="ident">assert_login_cookie</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">resp</span>,
|
||||
<span class="ident">COOKIE_LOGIN</span>,
|
||||
<span class="ident">LoginTimestampCheck</span>::<span class="ident">NewTimestamp</span>,
|
||||
<span class="ident">VisitTimeStampCheck</span>::<span class="ident">NoTimestamp</span>,
|
||||
<span class="ident">LoginTimestampCheck::NewTimestamp</span>,
|
||||
<span class="ident">VisitTimeStampCheck::NoTimestamp</span>,
|
||||
);
|
||||
<span class="ident">assert_logged_in</span>(<span class="ident">resp</span>, <span class="prelude-val">None</span>).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_cookie_rejected_if_login_timestamp_needed</span>() {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">login_deadline</span>(<span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">login_cookie</span>(<span class="ident">COOKIE_LOGIN</span>, <span class="prelude-val">None</span>, <span class="prelude-val">Some</span>(<span class="ident">SystemTime</span>::<span class="ident">now</span>()));
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">login_deadline</span>(<span class="ident">Duration::days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">login_cookie</span>(<span class="ident">COOKIE_LOGIN</span>, <span class="prelude-val">None</span>, <span class="prelude-val">Some</span>(<span class="ident">SystemTime::now</span>()));
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">srv</span>,
|
||||
<span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/"</span>)
|
||||
<span class="ident">TestRequest::with_uri</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookie</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
@@ -1542,19 +1542,19 @@
|
||||
<span class="ident">assert_login_cookie</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">resp</span>,
|
||||
<span class="ident">COOKIE_LOGIN</span>,
|
||||
<span class="ident">LoginTimestampCheck</span>::<span class="ident">NewTimestamp</span>,
|
||||
<span class="ident">VisitTimeStampCheck</span>::<span class="ident">NoTimestamp</span>,
|
||||
<span class="ident">LoginTimestampCheck::NewTimestamp</span>,
|
||||
<span class="ident">VisitTimeStampCheck::NoTimestamp</span>,
|
||||
);
|
||||
<span class="ident">assert_logged_in</span>(<span class="ident">resp</span>, <span class="prelude-val">None</span>).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_cookie_rejected_if_visit_timestamp_needed</span>() {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">visit_deadline</span>(<span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">login_cookie</span>(<span class="ident">COOKIE_LOGIN</span>, <span class="prelude-val">Some</span>(<span class="ident">SystemTime</span>::<span class="ident">now</span>()), <span class="prelude-val">None</span>);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">visit_deadline</span>(<span class="ident">Duration::days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">login_cookie</span>(<span class="ident">COOKIE_LOGIN</span>, <span class="prelude-val">Some</span>(<span class="ident">SystemTime::now</span>()), <span class="prelude-val">None</span>);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">srv</span>,
|
||||
<span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/"</span>)
|
||||
<span class="ident">TestRequest::with_uri</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookie</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
@@ -1562,23 +1562,23 @@
|
||||
<span class="ident">assert_login_cookie</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">resp</span>,
|
||||
<span class="ident">COOKIE_LOGIN</span>,
|
||||
<span class="ident">LoginTimestampCheck</span>::<span class="ident">NoTimestamp</span>,
|
||||
<span class="ident">VisitTimeStampCheck</span>::<span class="ident">NewTimestamp</span>,
|
||||
<span class="ident">LoginTimestampCheck::NoTimestamp</span>,
|
||||
<span class="ident">VisitTimeStampCheck::NewTimestamp</span>,
|
||||
);
|
||||
<span class="ident">assert_logged_in</span>(<span class="ident">resp</span>, <span class="prelude-val">None</span>).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_cookie_rejected_if_login_timestamp_too_old</span>() {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">login_deadline</span>(<span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">login_deadline</span>(<span class="ident">Duration::days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">login_cookie</span>(
|
||||
<span class="ident">COOKIE_LOGIN</span>,
|
||||
<span class="prelude-val">Some</span>(<span class="ident">SystemTime</span>::<span class="ident">now</span>() <span class="op">-</span> <span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">180</span>)),
|
||||
<span class="prelude-val">Some</span>(<span class="ident">SystemTime::now</span>() <span class="op">-</span> <span class="ident">Duration::days</span>(<span class="number">180</span>)),
|
||||
<span class="prelude-val">None</span>,
|
||||
);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">srv</span>,
|
||||
<span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/"</span>)
|
||||
<span class="ident">TestRequest::with_uri</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookie</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
@@ -1586,23 +1586,23 @@
|
||||
<span class="ident">assert_login_cookie</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">resp</span>,
|
||||
<span class="ident">COOKIE_LOGIN</span>,
|
||||
<span class="ident">LoginTimestampCheck</span>::<span class="ident">NewTimestamp</span>,
|
||||
<span class="ident">VisitTimeStampCheck</span>::<span class="ident">NoTimestamp</span>,
|
||||
<span class="ident">LoginTimestampCheck::NewTimestamp</span>,
|
||||
<span class="ident">VisitTimeStampCheck::NoTimestamp</span>,
|
||||
);
|
||||
<span class="ident">assert_logged_in</span>(<span class="ident">resp</span>, <span class="prelude-val">None</span>).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_cookie_rejected_if_visit_timestamp_too_old</span>() {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">visit_deadline</span>(<span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">visit_deadline</span>(<span class="ident">Duration::days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">login_cookie</span>(
|
||||
<span class="ident">COOKIE_LOGIN</span>,
|
||||
<span class="prelude-val">None</span>,
|
||||
<span class="prelude-val">Some</span>(<span class="ident">SystemTime</span>::<span class="ident">now</span>() <span class="op">-</span> <span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">180</span>)),
|
||||
<span class="prelude-val">Some</span>(<span class="ident">SystemTime::now</span>() <span class="op">-</span> <span class="ident">Duration::days</span>(<span class="number">180</span>)),
|
||||
);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">srv</span>,
|
||||
<span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/"</span>)
|
||||
<span class="ident">TestRequest::with_uri</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookie</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
@@ -1610,19 +1610,19 @@
|
||||
<span class="ident">assert_login_cookie</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">resp</span>,
|
||||
<span class="ident">COOKIE_LOGIN</span>,
|
||||
<span class="ident">LoginTimestampCheck</span>::<span class="ident">NoTimestamp</span>,
|
||||
<span class="ident">VisitTimeStampCheck</span>::<span class="ident">NewTimestamp</span>,
|
||||
<span class="ident">LoginTimestampCheck::NoTimestamp</span>,
|
||||
<span class="ident">VisitTimeStampCheck::NewTimestamp</span>,
|
||||
);
|
||||
<span class="ident">assert_logged_in</span>(<span class="ident">resp</span>, <span class="prelude-val">None</span>).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_cookie_not_updated_on_login_deadline</span>() {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">login_deadline</span>(<span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">login_cookie</span>(<span class="ident">COOKIE_LOGIN</span>, <span class="prelude-val">Some</span>(<span class="ident">SystemTime</span>::<span class="ident">now</span>()), <span class="prelude-val">None</span>);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> <span class="ident">c</span>.<span class="ident">login_deadline</span>(<span class="ident">Duration::days</span>(<span class="number">90</span>))).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">login_cookie</span>(<span class="ident">COOKIE_LOGIN</span>, <span class="prelude-val">Some</span>(<span class="ident">SystemTime::now</span>()), <span class="prelude-val">None</span>);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">srv</span>,
|
||||
<span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/"</span>)
|
||||
<span class="ident">TestRequest::with_uri</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookie</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
@@ -1631,18 +1631,18 @@
|
||||
<span class="ident">assert_logged_in</span>(<span class="ident">resp</span>, <span class="prelude-val">Some</span>(<span class="ident">COOKIE_LOGIN</span>)).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_identity_cookie_updated_on_visit_deadline</span>() {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">create_identity_server</span>(<span class="op">|</span><span class="ident">c</span><span class="op">|</span> {
|
||||
<span class="ident">c</span>.<span class="ident">visit_deadline</span>(<span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">90</span>))
|
||||
.<span class="ident">login_deadline</span>(<span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">90</span>))
|
||||
<span class="ident">c</span>.<span class="ident">visit_deadline</span>(<span class="ident">Duration::days</span>(<span class="number">90</span>))
|
||||
.<span class="ident">login_deadline</span>(<span class="ident">Duration::days</span>(<span class="number">90</span>))
|
||||
})
|
||||
.<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">timestamp</span> <span class="op">=</span> <span class="ident">SystemTime</span>::<span class="ident">now</span>() <span class="op">-</span> <span class="ident">Duration</span>::<span class="ident">days</span>(<span class="number">1</span>);
|
||||
<span class="kw">let</span> <span class="ident">timestamp</span> <span class="op">=</span> <span class="ident">SystemTime::now</span>() <span class="op">-</span> <span class="ident">Duration::days</span>(<span class="number">1</span>);
|
||||
<span class="kw">let</span> <span class="ident">cookie</span> <span class="op">=</span> <span class="ident">login_cookie</span>(<span class="ident">COOKIE_LOGIN</span>, <span class="prelude-val">Some</span>(<span class="ident">timestamp</span>), <span class="prelude-val">Some</span>(<span class="ident">timestamp</span>));
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">srv</span>,
|
||||
<span class="ident">TestRequest</span>::<span class="ident">with_uri</span>(<span class="string">"/"</span>)
|
||||
<span class="ident">TestRequest::with_uri</span>(<span class="string">"/"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookie</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
@@ -1650,8 +1650,8 @@
|
||||
<span class="ident">assert_login_cookie</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">resp</span>,
|
||||
<span class="ident">COOKIE_LOGIN</span>,
|
||||
<span class="ident">LoginTimestampCheck</span>::<span class="ident">OldTimestamp</span>(<span class="ident">timestamp</span>),
|
||||
<span class="ident">VisitTimeStampCheck</span>::<span class="ident">NewTimestamp</span>,
|
||||
<span class="ident">LoginTimestampCheck::OldTimestamp</span>(<span class="ident">timestamp</span>),
|
||||
<span class="ident">VisitTimeStampCheck::NewTimestamp</span>,
|
||||
);
|
||||
<span class="ident">assert_logged_in</span>(<span class="ident">resp</span>, <span class="prelude-val">Some</span>(<span class="ident">COOKIE_LOGIN</span>)).<span class="kw">await</span>;
|
||||
}
|
||||
|
@@ -107,7 +107,7 @@
|
||||
<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">futures_util</span>::<span class="ident">future</span>::{<span class="ident">ready</span>, <span class="ident">Ready</span>};
|
||||
<span class="kw">use</span> <span class="ident">futures_util::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>,
|
||||
@@ -153,7 +153,7 @@
|
||||
<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="op">-</span><span class="op">></span> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span> {
|
||||
<span class="ident">Identity</span>::<span class="ident">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">extensions</span>())
|
||||
}
|
||||
|
||||
<span class="doccomment">/// Remember identity.</span>
|
||||
@@ -200,7 +200,7 @@
|
||||
<span class="kw">type</span> <span class="ident">Future</span> <span class="op">=</span> <span class="ident">Ready</span><span class="op"><</span><span class="prelude-ty">Result</span><span class="op"><</span><span class="ident">Identity</span>, <span class="ident">Error</span><span class="op">></span><span class="op">></span>;
|
||||
|
||||
<span class="attribute">#[<span class="ident">inline</span>]</span>
|
||||
<span class="kw">fn</span> <span class="ident">from_request</span>(<span class="ident">req</span>: <span class="kw-2">&</span><span class="ident">HttpRequest</span>, <span class="kw">_</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">Payload</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span>::<span class="ident">Future</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from_request</span>(<span class="ident">req</span>: <span class="kw-2">&</span><span class="ident">HttpRequest</span>, <span class="kw">_</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">Payload</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span><span class="ident">::Future</span> {
|
||||
<span class="ident">ready</span>(<span class="prelude-val">Ok</span>(<span class="ident">Identity</span>(<span class="ident">req</span>.<span class="ident">clone</span>())))
|
||||
}
|
||||
}
|
||||
|
@@ -202,7 +202,7 @@
|
||||
|
||||
<span class="attribute">#![<span class="ident">deny</span>(<span class="ident">rust_2018_idioms</span>, <span class="ident">nonstandard_style</span>)]</span>
|
||||
|
||||
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">future</span>::<span class="ident">Future</span>;
|
||||
<span class="kw">use</span> <span class="ident">std::future::Future</span>;
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{
|
||||
<span class="ident">dev</span>::{<span class="ident">ServiceRequest</span>, <span class="ident">ServiceResponse</span>},
|
||||
@@ -213,9 +213,9 @@
|
||||
<span class="kw">mod</span> <span class="ident">identity</span>;
|
||||
<span class="kw">mod</span> <span class="ident">middleware</span>;
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">cookie</span>::<span class="ident">CookieIdentityPolicy</span>;
|
||||
<span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">identity</span>::<span class="ident">Identity</span>;
|
||||
<span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span>::<span class="ident">middleware</span>::<span class="ident">IdentityService</span>;
|
||||
<span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span><span class="ident">::cookie::CookieIdentityPolicy</span>;
|
||||
<span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span><span class="ident">::identity::Identity</span>;
|
||||
<span class="kw">pub</span> <span class="kw">use</span> <span class="self">self</span><span class="ident">::middleware::IdentityService</span>;
|
||||
|
||||
<span class="doccomment">/// Identity policy.</span>
|
||||
<span class="kw">pub</span> <span class="kw">trait</span> <span class="ident">IdentityPolicy</span>: <span class="ident">Sized</span> <span class="op">+</span> <span class="lifetime">'static</span> {
|
||||
@@ -226,7 +226,7 @@
|
||||
<span class="kw">type</span> <span class="ident">ResponseFuture</span>: <span class="ident">Future</span><span class="op"><</span><span class="ident">Output</span> <span class="op">=</span> <span class="prelude-ty">Result</span><span class="op"><</span>(), <span class="ident">Error</span><span class="op">></span><span class="op">></span>;
|
||||
|
||||
<span class="doccomment">/// Parse the session from request and load data from a service identity.</span>
|
||||
<span class="kw">fn</span> <span class="ident">from_request</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">req</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">ServiceRequest</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span>::<span class="ident">Future</span>;
|
||||
<span class="kw">fn</span> <span class="ident">from_request</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">req</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">ServiceRequest</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span><span class="ident">::Future</span>;
|
||||
|
||||
<span class="doccomment">/// Write changes to response</span>
|
||||
<span class="kw">fn</span> <span class="ident">to_response</span><span class="op"><</span><span class="ident">B</span><span class="op">></span>(
|
||||
@@ -234,7 +234,7 @@
|
||||
<span class="ident">identity</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>,
|
||||
<span class="ident">changed</span>: <span class="ident">bool</span>,
|
||||
<span class="ident">response</span>: <span class="kw-2">&</span><span class="kw-2">mut</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="self">Self</span>::<span class="ident">ResponseFuture</span>;
|
||||
) <span class="op">-</span><span class="op">></span> <span class="self">Self</span><span class="ident">::ResponseFuture</span>;
|
||||
}
|
||||
|
||||
<span class="doccomment">/// Helper trait that allows to get Identity.</span>
|
||||
@@ -250,15 +250,15 @@
|
||||
<span class="ident">T</span>: <span class="ident">HttpMessage</span>,
|
||||
{
|
||||
<span class="kw">fn</span> <span class="ident">get_identity</span>(<span class="kw-2">&</span><span class="self">self</span>) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span> {
|
||||
<span class="ident">Identity</span>::<span class="ident">get_identity</span>(<span class="kw-2">&</span><span class="self">self</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="ident">extensions</span>())
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
|
||||
<span class="kw">mod</span> <span class="ident">tests</span> {
|
||||
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">time</span>::<span class="ident">SystemTime</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</span>::<span class="ident">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">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>;
|
||||
|
||||
@@ -266,14 +266,14 @@
|
||||
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">const</span> <span class="ident">COOKIE_NAME</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"actix_auth"</span>;
|
||||
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">const</span> <span class="ident">COOKIE_LOGIN</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"test"</span>;
|
||||
|
||||
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">clippy</span>::<span class="ident">enum_variant_names</span>)]</span>
|
||||
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">clippy::enum_variant_names</span>)]</span>
|
||||
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">enum</span> <span class="ident">LoginTimestampCheck</span> {
|
||||
<span class="ident">NoTimestamp</span>,
|
||||
<span class="ident">NewTimestamp</span>,
|
||||
<span class="ident">OldTimestamp</span>(<span class="ident">SystemTime</span>),
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">clippy</span>::<span class="ident">enum_variant_names</span>)]</span>
|
||||
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">clippy::enum_variant_names</span>)]</span>
|
||||
<span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">enum</span> <span class="ident">VisitTimeStampCheck</span> {
|
||||
<span class="ident">NoTimestamp</span>,
|
||||
<span class="ident">NewTimestamp</span>,
|
||||
@@ -283,24 +283,24 @@
|
||||
<span class="ident">F</span>: <span class="ident">Fn</span>(<span class="ident">CookieIdentityPolicy</span>) <span class="op">-</span><span class="op">></span> <span class="ident">CookieIdentityPolicy</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Clone</span> <span class="op">+</span> <span class="lifetime">'static</span>,
|
||||
<span class="op">></span>(
|
||||
<span class="ident">f</span>: <span class="ident">F</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">actix_service</span>::<span class="ident">Service</span><span class="op"><</span>
|
||||
<span class="ident">actix_http</span>::<span class="ident">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</span>::<span class="ident">body</span>::<span class="ident">Body</span><span class="op">></span>,
|
||||
) <span class="op">-</span><span class="op">></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::Body</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</span>::<span class="ident">init_service</span>(
|
||||
<span class="ident">App</span>::<span class="ident">new</span>()
|
||||
.<span class="ident">wrap</span>(<span class="ident">IdentityService</span>::<span class="ident">new</span>(<span class="ident">f</span>(<span class="ident">CookieIdentityPolicy</span>::<span class="ident">new</span>(
|
||||
<span class="ident">test::init_service</span>(
|
||||
<span class="ident">App::new</span>()
|
||||
.<span class="ident">wrap</span>(<span class="ident">IdentityService::new</span>(<span class="ident">f</span>(<span class="ident">CookieIdentityPolicy::new</span>(
|
||||
<span class="kw-2">&</span><span class="ident">COOKIE_KEY_MASTER</span>,
|
||||
)
|
||||
.<span class="ident">secure</span>(<span class="bool-val">false</span>)
|
||||
.<span class="ident">name</span>(<span class="ident">COOKIE_NAME</span>))))
|
||||
.<span class="ident">service</span>(<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> <span class="kw">async</span> <span class="kw">move</span> {
|
||||
.<span class="ident">service</span>(<span class="ident">web::resource</span>(<span class="string">"/"</span>).<span class="ident">to</span>(<span class="op">|</span><span class="ident">id</span>: <span class="ident">Identity</span><span class="op">|</span> <span class="kw">async</span> <span class="kw">move</span> {
|
||||
<span class="kw">let</span> <span class="ident">identity</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>();
|
||||
<span class="kw">if</span> <span class="ident">identity</span>.<span class="ident">is_none</span>() {
|
||||
<span class="ident">id</span>.<span class="ident">remember</span>(<span class="ident">COOKIE_LOGIN</span>.<span class="ident">to_string</span>())
|
||||
}
|
||||
<span class="ident">web</span>::<span class="ident">Json</span>(<span class="ident">identity</span>)
|
||||
<span class="ident">web::Json</span>(<span class="ident">identity</span>)
|
||||
})),
|
||||
)
|
||||
.<span class="kw">await</span>
|
||||
|
@@ -170,15 +170,15 @@
|
||||
<span id="167">167</span>
|
||||
<span id="168">168</span>
|
||||
</pre><div class="example-wrap"><pre class="rust ">
|
||||
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">rc</span>::<span class="ident">Rc</span>;
|
||||
<span class="kw">use</span> <span class="ident">std::rc::Rc</span>;
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_web</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</span>::<span class="ident">future</span>::{<span class="ident">ready</span>, <span class="ident">FutureExt</span>, <span class="ident">LocalBoxFuture</span>, <span class="ident">Ready</span>};
|
||||
<span class="kw">use</span> <span class="ident">futures_util::future</span>::{<span class="ident">ready</span>, <span class="ident">FutureExt</span>, <span class="ident">LocalBoxFuture</span>, <span class="ident">Ready</span>};
|
||||
|
||||
<span class="kw">use</span> <span class="kw">crate</span>::{<span class="ident">identity</span>::<span class="ident">IdentityItem</span>, <span class="ident">IdentityPolicy</span>};
|
||||
<span class="kw">use</span> <span class="kw">crate</span>::{<span class="ident">identity::IdentityItem</span>, <span class="ident">IdentityPolicy</span>};
|
||||
|
||||
<span class="doccomment">/// Request identity middleware</span>
|
||||
<span class="doccomment">///</span>
|
||||
@@ -203,7 +203,7 @@
|
||||
<span class="doccomment">/// Create new identity service with specified backend.</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">backend</span>: <span class="ident">T</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="ident">IdentityService</span> {
|
||||
<span class="ident">backend</span>: <span class="ident">Rc</span>::<span class="ident">new</span>(<span class="ident">backend</span>),
|
||||
<span class="ident">backend</span>: <span class="ident">Rc::new</span>(<span class="ident">backend</span>),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -211,7 +211,7 @@
|
||||
<span class="kw">impl</span><span class="op"><</span><span class="ident">S</span>, <span class="ident">T</span>, <span class="ident">B</span><span class="op">></span> <span class="ident">Transform</span><span class="op"><</span><span class="ident">S</span>, <span class="ident">ServiceRequest</span><span class="op">></span> <span class="kw">for</span> <span class="ident">IdentityService</span><span class="op"><</span><span class="ident">T</span><span class="op">></span>
|
||||
<span class="kw">where</span>
|
||||
<span class="ident">S</span>: <span class="ident">Service</span><span class="op"><</span><span class="ident">ServiceRequest</span>, <span class="ident">Response</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="ident">Error</span> <span class="op">=</span> <span class="ident">Error</span><span class="op">></span> <span class="op">+</span> <span class="lifetime">'static</span>,
|
||||
<span class="ident">S</span>::<span class="ident">Future</span>: <span class="lifetime">'static</span>,
|
||||
<span class="ident">S::Future</span>: <span class="lifetime">'static</span>,
|
||||
<span class="ident">T</span>: <span class="ident">IdentityPolicy</span>,
|
||||
<span class="ident">B</span>: <span class="lifetime">'static</span>,
|
||||
{
|
||||
@@ -219,12 +219,12 @@
|
||||
<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>;
|
||||
<span class="kw">type</span> <span class="ident">Future</span> <span class="op">=</span> <span class="ident">Ready</span><span class="op"><</span><span class="prelude-ty">Result</span><span class="op"><</span><span class="self">Self</span>::<span class="ident">Transform</span>, <span class="self">Self</span>::<span class="ident">InitError</span><span class="op">></span><span class="op">></span>;
|
||||
<span class="kw">type</span> <span class="ident">Future</span> <span class="op">=</span> <span class="ident">Ready</span><span class="op"><</span><span class="prelude-ty">Result</span><span class="op"><</span><span class="self">Self</span><span class="ident">::Transform</span>, <span class="self">Self</span><span class="ident">::InitError</span><span class="op">></span><span class="op">></span>;
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">new_transform</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">service</span>: <span class="ident">S</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span>::<span class="ident">Future</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new_transform</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">service</span>: <span class="ident">S</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span><span class="ident">::Future</span> {
|
||||
<span class="ident">ready</span>(<span class="prelude-val">Ok</span>(<span class="ident">IdentityServiceMiddleware</span> {
|
||||
<span class="ident">backend</span>: <span class="self">self</span>.<span class="ident">backend</span>.<span class="ident">clone</span>(),
|
||||
<span class="ident">service</span>: <span class="ident">Rc</span>::<span class="ident">new</span>(<span class="ident">service</span>),
|
||||
<span class="ident">service</span>: <span class="ident">Rc::new</span>(<span class="ident">service</span>),
|
||||
}))
|
||||
}
|
||||
}
|
||||
@@ -237,8 +237,8 @@
|
||||
<span class="kw">impl</span><span class="op"><</span><span class="ident">S</span>, <span class="ident">T</span><span class="op">></span> <span class="ident">Clone</span> <span class="kw">for</span> <span class="ident">IdentityServiceMiddleware</span><span class="op"><</span><span class="ident">S</span>, <span class="ident">T</span><span class="op">></span> {
|
||||
<span class="kw">fn</span> <span class="ident">clone</span>(<span class="kw-2">&</span><span class="self">self</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="self">Self</span> {
|
||||
<span class="ident">backend</span>: <span class="ident">Rc</span>::<span class="ident">clone</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">backend</span>),
|
||||
<span class="ident">service</span>: <span class="ident">Rc</span>::<span class="ident">clone</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">service</span>),
|
||||
<span class="ident">backend</span>: <span class="ident">Rc::clone</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">backend</span>),
|
||||
<span class="ident">service</span>: <span class="ident">Rc::clone</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">service</span>),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -247,18 +247,18 @@
|
||||
<span class="kw">where</span>
|
||||
<span class="ident">B</span>: <span class="lifetime">'static</span>,
|
||||
<span class="ident">S</span>: <span class="ident">Service</span><span class="op"><</span><span class="ident">ServiceRequest</span>, <span class="ident">Response</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="ident">Error</span> <span class="op">=</span> <span class="ident">Error</span><span class="op">></span> <span class="op">+</span> <span class="lifetime">'static</span>,
|
||||
<span class="ident">S</span>::<span class="ident">Future</span>: <span class="lifetime">'static</span>,
|
||||
<span class="ident">S::Future</span>: <span class="lifetime">'static</span>,
|
||||
<span class="ident">T</span>: <span class="ident">IdentityPolicy</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">B</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="self">Self</span>::<span class="ident">Response</span>, <span class="self">Self</span>::<span class="ident">Error</span><span class="op">></span><span class="op">></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="self">Self</span><span class="ident">::Response</span>, <span class="self">Self</span><span class="ident">::Error</span><span class="op">></span><span class="op">></span>;
|
||||
|
||||
<span class="ident">actix_service</span>::<span class="macro">forward_ready</span><span class="macro">!</span>(<span class="ident">service</span>);
|
||||
<span class="macro">actix_service::forward_ready!</span>(<span class="ident">service</span>);
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">call</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="kw-2">mut</span> <span class="ident">req</span>: <span class="ident">ServiceRequest</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span>::<span class="ident">Future</span> {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">Rc</span>::<span class="ident">clone</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">service</span>);
|
||||
<span class="kw">let</span> <span class="ident">backend</span> <span class="op">=</span> <span class="ident">Rc</span>::<span class="ident">clone</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">backend</span>);
|
||||
<span class="kw">fn</span> <span class="ident">call</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="kw-2">mut</span> <span class="ident">req</span>: <span class="ident">ServiceRequest</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span><span class="ident">::Future</span> {
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="ident">Rc::clone</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">service</span>);
|
||||
<span class="kw">let</span> <span class="ident">backend</span> <span class="op">=</span> <span class="ident">Rc::clone</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">backend</span>);
|
||||
<span class="kw">let</span> <span class="ident">fut</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">backend</span>.<span class="ident">from_request</span>(<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">req</span>);
|
||||
|
||||
<span class="kw">async</span> <span class="kw">move</span> {
|
||||
@@ -288,23 +288,23 @@
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
|
||||
<span class="kw">mod</span> <span class="ident">tests</span> {
|
||||
<span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">rc</span>::<span class="ident">Rc</span>, <span class="ident">time</span>::<span class="ident">Duration</span>};
|
||||
<span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">rc::Rc</span>, <span class="ident">time::Duration</span>};
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_service</span>::<span class="ident">into_service</span>;
|
||||
<span class="kw">use</span> <span class="ident">actix_service::into_service</span>;
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">dev</span>, <span class="ident">error</span>, <span class="ident">test</span>, <span class="ident">Error</span>, <span class="prelude-ty">Result</span>};
|
||||
|
||||
<span class="kw">use</span> <span class="kw">super</span>::<span class="kw-2">*</span>;
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_borrowed_mut_error</span>() {
|
||||
<span class="kw">use</span> <span class="ident">futures_util</span>::<span class="ident">future</span>::{<span class="ident">lazy</span>, <span class="ident">ok</span>, <span class="ident">Ready</span>};
|
||||
<span class="kw">use</span> <span class="ident">futures_util::future</span>::{<span class="ident">lazy</span>, <span class="ident">ok</span>, <span class="ident">Ready</span>};
|
||||
|
||||
<span class="kw">struct</span> <span class="ident">Ident</span>;
|
||||
<span class="kw">impl</span> <span class="ident">IdentityPolicy</span> <span class="kw">for</span> <span class="ident">Ident</span> {
|
||||
<span class="kw">type</span> <span class="ident">Future</span> <span class="op">=</span> <span class="ident">Ready</span><span class="op"><</span><span class="prelude-ty">Result</span><span class="op"><</span><span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>, <span class="ident">Error</span><span class="op">></span><span class="op">></span>;
|
||||
<span class="kw">type</span> <span class="ident">ResponseFuture</span> <span class="op">=</span> <span class="ident">Ready</span><span class="op"><</span><span class="prelude-ty">Result</span><span class="op"><</span>(), <span class="ident">Error</span><span class="op">></span><span class="op">></span>;
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">from_request</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">dev</span>::<span class="ident">ServiceRequest</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span>::<span class="ident">Future</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from_request</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">dev::ServiceRequest</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span><span class="ident">::Future</span> {
|
||||
<span class="ident">ok</span>(<span class="prelude-val">Some</span>(<span class="string">"test"</span>.<span class="ident">to_string</span>()))
|
||||
}
|
||||
|
||||
@@ -312,28 +312,28 @@
|
||||
<span class="kw-2">&</span><span class="self">self</span>,
|
||||
<span class="kw">_</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>,
|
||||
<span class="kw">_</span>: <span class="ident">bool</span>,
|
||||
<span class="kw">_</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">dev</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="self">Self</span>::<span class="ident">ResponseFuture</span> {
|
||||
<span class="kw">_</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">dev::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="self">Self</span><span class="ident">::ResponseFuture</span> {
|
||||
<span class="ident">ok</span>(())
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="kw">crate</span>::<span class="ident">middleware</span>::<span class="ident">IdentityServiceMiddleware</span> {
|
||||
<span class="ident">backend</span>: <span class="ident">Rc</span>::<span class="ident">new</span>(<span class="ident">Ident</span>),
|
||||
<span class="ident">service</span>: <span class="ident">Rc</span>::<span class="ident">new</span>(<span class="ident">into_service</span>(<span class="op">|</span><span class="kw">_</span>: <span class="ident">dev</span>::<span class="ident">ServiceRequest</span><span class="op">|</span> <span class="kw">async</span> <span class="kw">move</span> {
|
||||
<span class="ident">actix_rt</span>::<span class="ident">time</span>::<span class="ident">sleep</span>(<span class="ident">Duration</span>::<span class="ident">from_secs</span>(<span class="number">100</span>)).<span class="kw">await</span>;
|
||||
<span class="prelude-val">Err</span>::<span class="op"><</span><span class="ident">dev</span>::<span class="ident">ServiceResponse</span>, <span class="kw">_</span><span class="op">></span>(<span class="ident">error</span>::<span class="ident">ErrorBadRequest</span>(<span class="string">"error"</span>))
|
||||
<span class="kw">let</span> <span class="ident">srv</span> <span class="op">=</span> <span class="kw">crate</span><span class="ident">::middleware::IdentityServiceMiddleware</span> {
|
||||
<span class="ident">backend</span>: <span class="ident">Rc::new</span>(<span class="ident">Ident</span>),
|
||||
<span class="ident">service</span>: <span class="ident">Rc::new</span>(<span class="ident">into_service</span>(<span class="op">|</span><span class="kw">_</span>: <span class="ident">dev::ServiceRequest</span><span class="op">|</span> <span class="kw">async</span> <span class="kw">move</span> {
|
||||
<span class="ident">actix_rt::time::sleep</span>(<span class="ident">Duration::from_secs</span>(<span class="number">100</span>)).<span class="kw">await</span>;
|
||||
<span class="prelude-val">Err</span>::<span class="op"><</span><span class="ident">dev::ServiceResponse</span>, <span class="kw">_</span><span class="op">></span>(<span class="ident">error::ErrorBadRequest</span>(<span class="string">"error"</span>))
|
||||
})),
|
||||
};
|
||||
|
||||
<span class="kw">let</span> <span class="ident">srv2</span> <span class="op">=</span> <span class="ident">srv</span>.<span class="ident">clone</span>();
|
||||
<span class="kw">let</span> <span class="ident">req</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">TestRequest</span>::<span class="ident">default</span>().<span class="ident">to_srv_request</span>();
|
||||
<span class="kw">let</span> <span class="ident">req</span> <span class="op">=</span> <span class="ident">test::TestRequest::default</span>().<span class="ident">to_srv_request</span>();
|
||||
|
||||
<span class="ident">actix_rt</span>::<span class="ident">spawn</span>(<span class="kw">async</span> <span class="kw">move</span> {
|
||||
<span class="ident">actix_rt::spawn</span>(<span class="kw">async</span> <span class="kw">move</span> {
|
||||
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="ident">srv2</span>.<span class="ident">call</span>(<span class="ident">req</span>).<span class="kw">await</span>;
|
||||
});
|
||||
|
||||
<span class="ident">actix_rt</span>::<span class="ident">time</span>::<span class="ident">sleep</span>(<span class="ident">Duration</span>::<span class="ident">from_millis</span>(<span class="number">50</span>)).<span class="kw">await</span>;
|
||||
<span class="ident">actix_rt::time::sleep</span>(<span class="ident">Duration::from_millis</span>(<span class="number">50</span>)).<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="ident">lazy</span>(<span class="op">|</span><span class="ident">cx</span><span class="op">|</span> <span class="ident">srv</span>.<span class="ident">poll_ready</span>(<span class="ident">cx</span>)).<span class="kw">await</span>;
|
||||
}
|
||||
|
Reference in New Issue
Block a user