Use HTML swap to display success and error messages
This commit is contained in:
@@ -2,12 +2,12 @@ pub mod change_password;
|
||||
pub mod dashboard;
|
||||
pub mod newsletters;
|
||||
|
||||
use crate::{routes::error_chain_fmt, session_state::TypedSession};
|
||||
use crate::{routes::error_chain_fmt, session_state::TypedSession, templates::ErrorTemplate};
|
||||
use askama::Template;
|
||||
use axum::{
|
||||
Json,
|
||||
response::{IntoResponse, Redirect, Response},
|
||||
response::{Html, IntoResponse, Redirect, Response},
|
||||
};
|
||||
use axum_messages::Messages;
|
||||
pub use change_password::*;
|
||||
pub use dashboard::*;
|
||||
pub use newsletters::*;
|
||||
@@ -20,7 +20,7 @@ pub enum AdminError {
|
||||
#[error("Trying to access admin dashboard without authentication.")]
|
||||
NotAuthenticated,
|
||||
#[error("Updating password failed.")]
|
||||
ChangePassword,
|
||||
ChangePassword(String),
|
||||
#[error("Could not publish newsletter.")]
|
||||
Publish(#[source] anyhow::Error),
|
||||
#[error("The idempotency key was invalid.")]
|
||||
@@ -51,8 +51,18 @@ impl IntoResponse for AdminError {
|
||||
)
|
||||
.into_response(),
|
||||
AdminError::NotAuthenticated => Redirect::to("/login").into_response(),
|
||||
AdminError::ChangePassword => Redirect::to("/admin/password").into_response(),
|
||||
AdminError::Publish(_) => Redirect::to("/admin/newsletters").into_response(),
|
||||
AdminError::ChangePassword(e) => {
|
||||
let template = ErrorTemplate {
|
||||
error_message: e.to_owned(),
|
||||
};
|
||||
Html(template.render().unwrap()).into_response()
|
||||
}
|
||||
AdminError::Publish(e) => {
|
||||
let template = ErrorTemplate {
|
||||
error_message: e.to_string(),
|
||||
};
|
||||
Html(template.render().unwrap()).into_response()
|
||||
}
|
||||
AdminError::Idempotency(e) => {
|
||||
(StatusCode::BAD_REQUEST, Json(ErrorResponse { message: e })).into_response()
|
||||
}
|
||||
@@ -60,9 +70,8 @@ impl IntoResponse for AdminError {
|
||||
}
|
||||
}
|
||||
|
||||
#[tracing::instrument(name = "Logging out", skip(messages, session))]
|
||||
pub async fn logout(messages: Messages, session: TypedSession) -> Result<Response, AdminError> {
|
||||
#[tracing::instrument(name = "Logging out", skip(session))]
|
||||
pub async fn logout(session: TypedSession) -> Result<Response, AdminError> {
|
||||
session.clear().await;
|
||||
messages.success("You have successfully logged out.");
|
||||
Ok(Redirect::to("/login").into_response())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user