aboutsummaryrefslogtreecommitdiff
path: root/server/src/ui/account
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-05-26 18:24:16 +0200
committermetamuffin <metamuffin@disroot.org>2025-05-26 18:24:16 +0200
commit3b15caade07e8fbe351fed9aceb3f435bf58368e (patch)
treecce91c229b78061ad36f29d76a76d67c3c737c59 /server/src/ui/account
parent1eeff5c03e8985d16d4f2b6283741dd82b369bd3 (diff)
downloadjellything-3b15caade07e8fbe351fed9aceb3f435bf58368e.tar
jellything-3b15caade07e8fbe351fed9aceb3f435bf58368e.tar.bz2
jellything-3b15caade07e8fbe351fed9aceb3f435bf58368e.tar.zst
move all direct database access to logic crate
Diffstat (limited to 'server/src/ui/account')
-rw-r--r--server/src/ui/account/mod.rs24
-rw-r--r--server/src/ui/account/settings.rs64
2 files changed, 37 insertions, 51 deletions
diff --git a/server/src/ui/account/mod.rs b/server/src/ui/account/mod.rs
index 51da348..2a513a9 100644
--- a/server/src/ui/account/mod.rs
+++ b/server/src/ui/account/mod.rs
@@ -11,13 +11,8 @@ use crate::{
ui::{error::MyResult, home::rocket_uri_macro_r_home},
};
use anyhow::anyhow;
-use jellycommon::user::User;
use jellyimport::is_importing;
-use jellylogic::{
- login::{hash_password, login_logic},
- session::Session,
- Database,
-};
+use jellylogic::{account::register_user, login::login_logic, session::Session};
use jellyui::{
account::{AccountLogin, AccountLogout, AccountRegister, AccountRegisterSuccess},
render_page,
@@ -29,7 +24,7 @@ use rocket::{
http::{Cookie, CookieJar},
post,
response::{content::RawHtml, Redirect},
- FromForm, State,
+ FromForm,
};
use serde::{Deserialize, Serialize};
@@ -98,7 +93,6 @@ pub fn r_account_logout(session: Option<A<Session>>, lang: AcceptLanguage) -> Ra
#[post("/account/register", data = "<form>")]
pub fn r_account_register_post<'a>(
- database: &'a State<Database>,
session: Option<A<Session>>,
form: Form<Contextual<'a, RegisterForm>>,
lang: AcceptLanguage,
@@ -110,16 +104,7 @@ pub fn r_account_register_post<'a>(
None => return Err(MyError(anyhow!(format_form_error(form)))),
};
- database.register_user(
- &form.invitation,
- &form.username,
- User {
- display_name: form.username.clone(),
- name: form.username.clone(),
- password: hash_password(&form.username, &form.password),
- ..Default::default()
- },
- )?;
+ register_user(&form.invitation, &form.username, &form.password)?;
Ok(RawHtml(render_page(
&AccountRegisterSuccess {
@@ -136,7 +121,6 @@ pub fn r_account_register_post<'a>(
#[post("/account/login", data = "<form>")]
pub fn r_account_login_post(
- database: &State<Database>,
jar: &CookieJar,
form: Form<Contextual<LoginForm>>,
) -> MyResult<Redirect> {
@@ -147,7 +131,7 @@ pub fn r_account_login_post(
jar.add(
Cookie::build((
"session",
- login_logic(database, &form.username, &form.password, None, None)?,
+ login_logic(&form.username, &form.password, None, None)?,
))
.permanent()
.build(),
diff --git a/server/src/ui/account/settings.rs b/server/src/ui/account/settings.rs
index f1a367d..7d1b7af 100644
--- a/server/src/ui/account/settings.rs
+++ b/server/src/ui/account/settings.rs
@@ -3,14 +3,20 @@
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2025 metamuffin <metamuffin.org>
*/
-use super::{format_form_error, hash_password};
+use super::format_form_error;
use crate::{
helper::{language::AcceptLanguage, A},
ui::error::MyResult,
};
use jellycommon::user::{PlayerKind, Theme};
use jellyimport::is_importing;
-use jellylogic::{session::Session, Database};
+use jellylogic::{
+ account::{
+ update_user_display_name, update_user_native_secret, update_user_password,
+ update_user_player_preference, update_user_theme,
+ },
+ session::Session,
+};
use jellyui::{
account::settings::SettingsPage,
locale::{tr, Language},
@@ -21,7 +27,7 @@ use rocket::{
form::{self, validate::len, Contextual, Form},
get, post,
response::content::RawHtml,
- FromForm, State,
+ FromForm,
};
use std::ops::Range;
@@ -70,7 +76,6 @@ pub fn r_account_settings(session: A<Session>, lang: AcceptLanguage) -> RawHtml<
#[post("/account/settings", data = "<form>")]
pub fn r_account_settings_post(
session: A<Session>,
- database: &State<Database>,
form: Form<Contextual<SettingsForm>>,
lang: AcceptLanguage,
) -> MyResult<RawHtml<String>> {
@@ -90,33 +95,30 @@ pub fn r_account_settings_post(
let mut out = String::new();
- database.update_user(&session.user.name, |user| {
- if let Some(password) = &form.password {
- user.password = hash_password(&session.user.name, password);
- out += &*tr(lang, "settings.account.password.changed");
- out += "\n";
- }
- if let Some(display_name) = &form.display_name {
- user.display_name = display_name.clone();
- out += &*tr(lang, "settings.account.display_name.changed");
- out += "\n";
- }
- if let Some(theme) = form.theme {
- user.theme = theme.0;
- out += &*tr(lang, "settings.account.theme.changed");
- out += "\n";
- }
- if let Some(player_preference) = form.player_preference {
- user.player_preference = player_preference.0;
- out += &*tr(lang, "settings.player_preference.changed");
- out += "\n";
- }
- if let Some(native_secret) = &form.native_secret {
- user.native_secret = native_secret.to_owned();
- out += "Native secret updated.\n";
- }
- Ok(())
- })?;
+ if let Some(password) = &form.password {
+ update_user_password(&session, password)?;
+ out += &*tr(lang, "settings.account.password.changed");
+ out += "\n";
+ }
+ if let Some(display_name) = &form.display_name {
+ update_user_display_name(&session, display_name)?;
+ out += &*tr(lang, "settings.account.display_name.changed");
+ out += "\n";
+ }
+ if let Some(theme) = form.theme {
+ update_user_theme(&session, theme.0)?;
+ out += &*tr(lang, "settings.account.theme.changed");
+ out += "\n";
+ }
+ if let Some(player_preference) = form.player_preference {
+ update_user_player_preference(&session, player_preference.0)?;
+ out += &*tr(lang, "settings.player_preference.changed");
+ out += "\n";
+ }
+ if let Some(native_secret) = &form.native_secret {
+ update_user_native_secret(&session, native_secret)?;
+ out += "Native secret updated.\n";
+ }
Ok(settings_page(
session, // using the old session here, results in outdated theme being displayed