From 676951e80918afd70de509770dbe10468030fe2d Mon Sep 17 00:00:00 2001 From: Josef Rokos Date: Fri, 23 Feb 2024 14:00:31 +0100 Subject: [PATCH] Improved logging, UI tweaks. --- Cargo.lock | 2 +- Cargo.toml | 4 ++-- assets/banner.css | 10 +++++++++- config_sample.toml | 3 +++ src/backend/reservation.rs | 5 +++++ src/backend/user.rs | 5 +++++ src/config.rs | 18 +++++++++++++++++- src/error.rs | 15 ++++++++++++++- src/locales/catalogues.rs | 3 ++- src/main.rs | 4 ++-- src/pages/appearance_settings.rs | 4 ++-- src/pages/public.rs | 4 ++-- 12 files changed, 64 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6ccaab9..5c5ee4c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2963,7 +2963,7 @@ dependencies = [ [[package]] name = "rezervator" -version = "0.1.0" +version = "1.0.0" dependencies = [ "actix-files", "actix-multipart", diff --git a/Cargo.toml b/Cargo.toml index 9e42387..eeb0217 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rezervator" -version = "0.1.0" +version = "1.0.0" edition = "2021" [lib] @@ -88,7 +88,7 @@ browserquery = "defaults" # Set by cargo-leptos watch when building with that tool. Controls whether autoreload JS will be included in the head watch = false # The environment Leptos will run in, usually either "DEV" or "PROD" -env = "DEV" +env = "PROD" # The features to use when compiling the bin target # # Optional. Can be over-ridden with the command line parameter --bin-features diff --git a/assets/banner.css b/assets/banner.css index 2eb7f97..ea38dcf 100644 --- a/assets/banner.css +++ b/assets/banner.css @@ -7,8 +7,12 @@ div.header_banner { color: white; } +div.header_banner_text { + padding: 10px; +} + h1.header_banner { - font-size: xxx-large; + font-size: x-large; color: white; text-shadow: -3px -3px 0 #000, 3px -3px 0 #000, -3px 3px 0 #000, 3px 3px 0 #000; } @@ -17,4 +21,8 @@ h1.header_banner { div.header_banner { height: 200px; } + + h1.header_banner { + font-size: xxx-large; + } } \ No newline at end of file diff --git a/config_sample.toml b/config_sample.toml index 9a9e7ec..3504ac8 100644 --- a/config_sample.toml +++ b/config_sample.toml @@ -23,3 +23,6 @@ path = "Maildir" #password = "password" #tls = true #accept_all_certs = true + +[logging] +severity = "debug" diff --git a/src/backend/reservation.rs b/src/backend/reservation.rs index 69df9e3..fcb82f7 100644 --- a/src/backend/reservation.rs +++ b/src/backend/reservation.rs @@ -14,6 +14,7 @@ cfg_if! { if #[cfg(feature = "ssr")] { use std::str::FromStr; use std::collections::HashMap; use log::warn; + use log::info; use crate::backend::data::{ReservationSum, ReservationState, ResWithProperty, Customer, Message, MessageType, ChartData, ResAllView}; use crate::backend::get_pool; use crate::backend::get_mailing; @@ -239,6 +240,8 @@ pub async fn get_public_form_data(day: NaiveDate) -> Result Resu warn!("Notification not send: {}", e); } + info!("Reservation created"); + Ok(ApiResponse::Data(reservation.date())) } diff --git a/src/backend/user.rs b/src/backend/user.rs index b7a4c63..8de0f8f 100644 --- a/src/backend/user.rs +++ b/src/backend/user.rs @@ -134,6 +134,8 @@ pub async fn logout() -> Result<(), ServerFnError> { let session = extract::().await?; session.clear(); + info!("User logged out"); + redirect("/login"); Ok(()) } @@ -150,6 +152,7 @@ pub async fn admin_check() -> Result { #[server] pub async fn get_user() -> Result, ServerFnError> { + info!("Get user"); Ok(logged_in_user().await) } @@ -231,6 +234,8 @@ pub async fn change_pwd(new_pw: PwdChange) -> Result, ServerFnEr .execute(&pool) .await?; + info!("Password changed for user: {}", new_pw.login()); + Ok(ApiResponse::Data(())) } diff --git a/src/config.rs b/src/config.rs index fa41e98..aa9c0ed 100644 --- a/src/config.rs +++ b/src/config.rs @@ -107,6 +107,18 @@ impl Mailing { } } +#[cfg(feature = "ssr")] +#[derive(Deserialize)] +pub struct Logging { + severity: String +} + +#[cfg(feature = "ssr")] +impl Logging { + pub fn severity(&self) -> &str { + &self.severity + } +} #[cfg(feature = "ssr")] #[derive(Deserialize)] @@ -114,7 +126,8 @@ pub struct Configuration { session: Session, network: Network, database: Database, - mailing: Mailing + mailing: Mailing, + logging: Logging } #[cfg(feature = "ssr")] @@ -131,6 +144,9 @@ impl Configuration { pub fn mailing(&self) -> &Mailing { &self.mailing } + pub fn logging(&self) -> &Logging { + &self.logging + } } #[cfg(feature = "ssr")] diff --git a/src/error.rs b/src/error.rs index 84bd88a..92bad26 100644 --- a/src/error.rs +++ b/src/error.rs @@ -2,6 +2,7 @@ use std::error::Error; use std::fmt::{Debug, Display, Formatter}; use chrono::ParseError; use leptos::ServerFnError; +use log::error; #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd)] pub enum AppError { @@ -28,6 +29,10 @@ impl AppError { } } +fn log_error(error: &dyn ToString) { + error!("Application error: {}", error.to_string()); +} + impl Display for AppError { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.as_string()) @@ -38,6 +43,7 @@ impl Error for AppError {} impl From for AppError { fn from(value: ServerFnError) -> Self { + log_error(&value); AppError::ServerError(value.to_string()) } } @@ -45,12 +51,14 @@ impl From for AppError { #[cfg(feature = "ssr")] impl From for AppError { fn from(value: sqlx::Error) -> Self { + log_error(&value); AppError::FatalError(value.to_string()) } } impl From for AppError { - fn from(_value: ParseError) -> Self { + fn from(value: ParseError) -> Self { + log_error(&value); AppError::HourParseError } } @@ -58,6 +66,7 @@ impl From for AppError { #[cfg(feature = "ssr")] impl From for AppError { fn from(value: lettre::address::AddressError) -> Self { + log_error(&value); AppError::MailAddrParseErr(value.to_string()) } } @@ -65,6 +74,7 @@ impl From for AppError { #[cfg(feature = "ssr")] impl From for AppError { fn from(value: lettre::error::Error) -> Self { + log_error(&value); AppError::MailSendError(value.to_string()) } } @@ -72,6 +82,7 @@ impl From for AppError { #[cfg(feature = "ssr")] impl From for AppError { fn from(value: lettre::transport::smtp::Error) -> Self { + log_error(&value); AppError::MailSendError(value.to_string()) } } @@ -79,6 +90,7 @@ impl From for AppError { #[cfg(feature = "ssr")] impl From for AppError { fn from(value: lettre::transport::file::Error) -> Self { + log_error(&value); AppError::MailSendError(value.to_string()) } } @@ -86,6 +98,7 @@ impl From for AppError { #[cfg(feature = "ssr")] impl From for AppError { fn from(value: std::io::Error) -> Self { + log_error(&value); AppError::FileIOError(value.to_string()) } } \ No newline at end of file diff --git a/src/locales/catalogues.rs b/src/locales/catalogues.rs index df4ede9..28ec227 100644 --- a/src/locales/catalogues.rs +++ b/src/locales/catalogues.rs @@ -142,7 +142,8 @@ lazy_static! { ("Update text", "Upravit text"), ("Update title", "Upravit titulek"), ("Are you sure you want to delete banner?", "Opravdu chcete smazat banner?"), - ("Delete banner", "Smazat banner") + ("Delete banner", "Smazat banner"), + ("Appearance", "Vzhled") ])), ("sk", HashMap::from( [ ("Dashboard", "Prehlad"), diff --git a/src/main.rs b/src/main.rs index 29a511e..f5c0204 100644 --- a/src/main.rs +++ b/src/main.rs @@ -42,12 +42,12 @@ async fn main() -> std::io::Result<()> { Pow::init_random().expect("Cannot init captcha"); let cfg_path = matches.opt_str("c").unwrap_or("config.toml".to_string()); + let srv_conf = load_config(&cfg_path); - env_logger::Builder::from_env(Env::default().default_filter_or("debug")).init(); + env_logger::Builder::from_env(Env::default().default_filter_or(srv_conf.logging().severity())).init(); info!("Starting server"); let conf = get_configuration(None).await.unwrap(); - let srv_conf = load_config(&cfg_path); // Generate the list of routes in your Leptos App let routes = generate_route_list(|| view! { }); let key = Key::from(srv_conf.session().key()); diff --git a/src/pages/appearance_settings.rs b/src/pages/appearance_settings.rs index 8008cea..62b0571 100644 --- a/src/pages/appearance_settings.rs +++ b/src/pages/appearance_settings.rs @@ -104,8 +104,8 @@ pub fn appearance() -> impl IntoView { {trl("Delete")}

-
- {app.text.unwrap_or("<< TEXT >>".to_string())} +
>".to_string())}> +
{trl("Edit text")} diff --git a/src/pages/public.rs b/src/pages/public.rs index ff56d3e..0e7b29f 100644 --- a/src/pages/public.rs +++ b/src/pages/public.rs @@ -133,8 +133,8 @@ pub fn Public() -> impl IntoView {
-
- {app.text.unwrap_or("".to_string())} +
+