aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/ui/account/settings.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/routes/ui/account/settings.rs')
-rw-r--r--server/src/routes/ui/account/settings.rs66
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