1
0
mirror of https://github.com/actix/actix-extras.git synced 2025-02-17 16:43:30 +01:00

updated logic to create session on new request wo cookie

This commit is contained in:
dowwie 2019-07-01 14:20:18 -04:00
parent 1086180267
commit 48ddb76915

View File

@ -145,38 +145,50 @@ where
srv.call(req).and_then(move |mut res| { srv.call(req).and_then(move |mut res| {
match Session::get_changes(&mut res) { match Session::get_changes(&mut res) {
(SessionStatus::Unchanged, _) => (SessionStatus::Unchanged, None) =>
Either::A(Either::A(ok(res))), Either::A(Either::A(Either::A(ok(res)))),
(SessionStatus::Changed, Some(state)) => (SessionStatus::Unchanged, Some(state)) =>
Either::B(Either::A(inner.update(res, state, value))), Either::A(Either::A(Either::B(
(SessionStatus::Purged, Some(_)) => { if value.is_none(){ // implies the session is new
Either::B(Either::B(
if let Some(val) = value {
Either::A( Either::A(
inner.clear_cache(val) inner.update(res, state, value)
.and_then(move |_|
match inner.remove_cookie(&mut res){
Ok(_) => Either::A(ok(res)),
Err(_err) => Either::B(err(
error::ErrorInternalServerError(_err)))
})
) )
} else { } else {
Either::B(err(error::ErrorInternalServerError("unexpected"))) Either::B(
ok(res)
)
}
))),
(SessionStatus::Changed, Some(state)) =>
Either::A(Either::B(Either::A(inner.update(res, state, value)))),
(SessionStatus::Purged, Some(_)) => {
if let Some(val) = value {
Either::A(Either::B(Either::B(Either::A(
inner.clear_cache(val)
.and_then(move |_|
match inner.remove_cookie(&mut res){
Ok(_) => Either::A(ok(res)),
Err(_err) => Either::B(err(
error::ErrorInternalServerError(_err)))
})
))))
} else {
Either::A(Either::B(Either::B(Either::B(
err(error::ErrorInternalServerError("unexpected"))
))))
} }
))
}, },
(SessionStatus::Renewed, Some(state)) => { (SessionStatus::Renewed, Some(state)) => {
if let Some(val) = value { if let Some(val) = value {
Either::A( Either::B(Either::A(
Either::B(
inner.clear_cache(val) inner.clear_cache(val)
.and_then(move |_| .and_then(move |_|
inner.update(res, state, None)) inner.update(res, state, None))
) ))
)
} else { } else {
Either::B(Either::A(inner.update(res, state, None))) Either::B(Either::B(
inner.update(res, state, None)
))
} }
}, },
(_, None) => unreachable!() (_, None) => unreachable!()