aboutsummaryrefslogtreecommitdiff
path: root/logic/src/admin/user.rs
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 /logic/src/admin/user.rs
parent1eeff5c03e8985d16d4f2b6283741dd82b369bd3 (diff)
downloadjellything-3b15caade07e8fbe351fed9aceb3f435bf58368e.tar
jellything-3b15caade07e8fbe351fed9aceb3f435bf58368e.tar.bz2
jellything-3b15caade07e8fbe351fed9aceb3f435bf58368e.tar.zst
move all direct database access to logic crate
Diffstat (limited to 'logic/src/admin/user.rs')
-rw-r--r--logic/src/admin/user.rs46
1 files changed, 40 insertions, 6 deletions
diff --git a/logic/src/admin/user.rs b/logic/src/admin/user.rs
index 3ec3852..e277077 100644
--- a/logic/src/admin/user.rs
+++ b/logic/src/admin/user.rs
@@ -4,14 +4,48 @@
Copyright (C) 2025 metamuffin <metamuffin.org>
*/
-use crate::session::AdminSession;
-use anyhow::Result;
-use jellycommon::api::ApiAdminUsersResponse;
-use jellydb::Database;
+use crate::{DATABASE, session::AdminSession};
+use anyhow::{Result, anyhow};
+use jellycommon::{
+ api::ApiAdminUsersResponse,
+ user::{User, UserPermission},
+};
-pub fn admin_users(db: &Database, _session: &AdminSession) -> Result<ApiAdminUsersResponse> {
+pub fn admin_users(_session: &AdminSession) -> Result<ApiAdminUsersResponse> {
// TODO dont return useless info like passwords
Ok(ApiAdminUsersResponse {
- users: db.list_users()?,
+ users: DATABASE.list_users()?,
+ })
+}
+pub fn get_user(_session: &AdminSession, username: &str) -> Result<User> {
+ DATABASE
+ .get_user(username)?
+ .ok_or(anyhow!("user not found"))
+}
+pub fn delete_user(_session: &AdminSession, username: &str) -> Result<()> {
+ if !DATABASE.delete_user(&username)? {
+ Err(anyhow!("user did not exist"))?;
+ }
+ Ok(())
+}
+
+pub enum GrantState {
+ Grant,
+ Revoke,
+ Unset,
+}
+pub fn update_user_perms(
+ _session: &AdminSession,
+ username: &str,
+ perm: UserPermission,
+ action: GrantState,
+) -> Result<()> {
+ DATABASE.update_user(username, |user| {
+ match action {
+ GrantState::Grant => drop(user.permissions.0.insert(perm.clone(), true)),
+ GrantState::Revoke => drop(user.permissions.0.insert(perm.clone(), false)),
+ GrantState::Unset => drop(user.permissions.0.remove(&perm)),
+ }
+ Ok(())
})
}