aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/ui/account/settings.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-01-20 00:50:20 +0100
committermetamuffin <metamuffin@disroot.org>2024-01-20 00:50:20 +0100
commit46c251655db7bb3d9aa814b1a5dde85336b0b9b1 (patch)
treeab0696f2c92e8854ce6aa0737877cc15184bd8b6 /server/src/routes/ui/account/settings.rs
parent1c37d32a0985ff7390313833345b9299f9f0b196 (diff)
downloadjellything-46c251655db7bb3d9aa814b1a5dde85336b0b9b1.tar
jellything-46c251655db7bb3d9aa814b1a5dde85336b0b9b1.tar.bz2
jellything-46c251655db7bb3d9aa814b1a5dde85336b0b9b1.tar.zst
replace sled with redb
Diffstat (limited to 'server/src/routes/ui/account/settings.rs')
-rw-r--r--server/src/routes/ui/account/settings.rs53
1 files changed, 33 insertions, 20 deletions
diff --git a/server/src/routes/ui/account/settings.rs b/server/src/routes/ui/account/settings.rs
index f14478b..ecc0723 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::Database,
+ database::DataAcid,
routes::ui::{
account::{rocket_uri_macro_r_account_login, session::Session},
error::MyResult,
@@ -13,7 +13,11 @@ use crate::{
},
uri,
};
-use jellybase::permission::PermissionSetExt;
+use anyhow::anyhow;
+use jellybase::{
+ database::{ReadableTable, Ser, T_USER},
+ permission::PermissionSetExt,
+};
use jellycommon::user::{Theme, UserPermission};
use markup::{Render, RenderAttributeValue};
use rocket::{
@@ -97,7 +101,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<Database>,
+ database: &State<DataAcid>,
form: Form<Contextual<SettingsForm>>,
) -> MyResult<DynLayoutPage<'static>> {
session
@@ -111,23 +115,32 @@ pub fn r_account_settings_post(
};
let mut out = String::new();
- database.user.fetch_and_update(&session.user.name, |k| {
- k.map(|mut k| {
- if let Some(password) = &form.password {
- k.password = hash_password(&session.user.name, password);
- out += "Password updated\n";
- }
- if let Some(display_name) = &form.display_name {
- k.display_name = display_name.clone();
- out += "Display name updated\n";
- }
- if let Some(theme) = form.theme {
- k.theme = theme;
- out += "Theme updated\n";
- }
- k
- })
- })?;
+
+ 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";
+ }
+
+ users.insert(&*session.user.name, Ser(user))?;
+ drop(users);
+ txn.commit()?;
Ok(settings_page(
session, // using the old session here, results in outdated theme being displayed