23 lines
678 B
Rust
23 lines
678 B
Rust
use axum::extract::State;
|
|
use axum::response::{IntoResponse, Redirect, Response};
|
|
use axum_extra::extract::cookie::CookieJar;
|
|
|
|
use crate::http::login::{LoginError, login_page};
|
|
use crate::http::{HttpState, OptionalHttpSession};
|
|
|
|
pub async fn logout(
|
|
State(state): State<HttpState>,
|
|
session: Option<OptionalHttpSession>,
|
|
cookies: CookieJar,
|
|
) -> Response {
|
|
let Some(session) = session 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()
|
|
}
|