diff options
Diffstat (limited to 'server/src/routes/ui/account/settings.rs')
-rw-r--r-- | server/src/routes/ui/account/settings.rs | 66 |
1 files changed, 26 insertions, 40 deletions
diff --git a/server/src/routes/ui/account/settings.rs b/server/src/routes/ui/account/settings.rs index 24e90de..06754b1 100644 --- a/server/src/routes/ui/account/settings.rs +++ b/server/src/routes/ui/account/settings.rs @@ -5,7 +5,7 @@ */ use super::{format_form_error, hash_password}; use crate::{ - database::DataAcid, + database::Database, routes::ui::{ account::{rocket_uri_macro_r_account_login, session::Session}, error::MyResult, @@ -13,11 +13,7 @@ use crate::{ }, uri, }; -use anyhow::anyhow; -use jellybase::{ - database::{redb::ReadableTable, Ser, T_USER}, - permission::PermissionSetExt, -}; +use jellybase::permission::PermissionSetExt; use jellycommon::user::{PlayerKind, Theme, UserPermission}; use markup::{Render, RenderAttributeValue}; use rocket::{ @@ -117,7 +113,7 @@ pub fn r_account_settings(session: Session) -> DynLayoutPage<'static> { #[post("/account/settings", data = "<form>")] pub fn r_account_settings_post( session: Session, - database: &State<DataAcid>, + database: &State<Database>, form: Form<Contextual<SettingsForm>>, ) -> MyResult<DynLayoutPage<'static>> { session @@ -132,39 +128,29 @@ pub fn r_account_settings_post( let mut out = String::new(); - let txn = database.begin_write()?; - let mut users = txn.open_table(T_USER)?; - - let mut user = users - .get(&*session.user.name)? - .ok_or(anyhow!("user missing"))? - .value() - .0; - - if let Some(password) = &form.password { - user.password = hash_password(&session.user.name, password); - out += "Password updated\n"; - } - if let Some(display_name) = &form.display_name { - user.display_name = display_name.clone(); - out += "Display name updated\n"; - } - if let Some(theme) = form.theme { - user.theme = theme; - out += "Theme updated\n"; - } - if let Some(player_preference) = form.player_preference { - user.player_preference = player_preference; - out += "Player preference changed.\n"; - } - if let Some(native_secret) = &form.native_secret { - user.native_secret = native_secret.to_owned(); - out += "Native secret updated.\n"; - } - - users.insert(&*session.user.name, Ser(user))?; - drop(users); - txn.commit()?; + database.update_user(&session.user.name, |user| { + if let Some(password) = &form.password { + user.password = hash_password(&session.user.name, password); + out += "Password updated\n"; + } + if let Some(display_name) = &form.display_name { + user.display_name = display_name.clone(); + out += "Display name updated\n"; + } + if let Some(theme) = form.theme { + user.theme = theme; + out += "Theme updated\n"; + } + if let Some(player_preference) = form.player_preference { + user.player_preference = player_preference; + out += "Player preference changed.\n"; + } + if let Some(native_secret) = &form.native_secret { + user.native_secret = native_secret.to_owned(); + out += "Native secret updated.\n"; + } + Ok(()) + })?; Ok(settings_page( session, // using the old session here, results in outdated theme being displayed |