23 lines
701 B
Rust
23 lines
701 B
Rust
|
|
use axum::extract::State;
|
||
|
|
use axum::response::{IntoResponse, Redirect, Response};
|
||
|
|
use axum_extra::extract::cookie::CookieJar;
|
||
|
|
|
||
|
|
use crate::db::DatabaseInterface;
|
||
|
|
use crate::http::HttpState;
|
||
|
|
use crate::http::login::{LoginError, login_page};
|
||
|
|
|
||
|
|
pub async fn logout<D: DatabaseInterface>(
|
||
|
|
State(state): State<HttpState<D>>,
|
||
|
|
cookies: CookieJar,
|
||
|
|
) -> Response {
|
||
|
|
let Some(session) = state.sessions.get_session(&cookies) else {
|
||
|
|
return (cookies, Redirect::to("/")).into_response();
|
||
|
|
};
|
||
|
|
|
||
|
|
let cookies = state.sessions.remove_session(&session, cookies);
|
||
|
|
(
|
||
|
|
cookies,
|
||
|
|
login_page(State(state), Some(LoginError::SessionInvalidated)).await,
|
||
|
|
)
|
||
|
|
.into_response()
|
||
|
|
}
|