diff options
Diffstat (limited to 'server/src/ui/admin/user.rs')
-rw-r--r-- | server/src/ui/admin/user.rs | 54 |
1 files changed, 23 insertions, 31 deletions
diff --git a/server/src/ui/admin/user.rs b/server/src/ui/admin/user.rs index 939ee83..27d5256 100644 --- a/server/src/ui/admin/user.rs +++ b/server/src/ui/admin/user.rs @@ -7,25 +7,24 @@ use crate::{ helper::{language::AcceptLanguage, A}, ui::error::MyResult, }; -use anyhow::{anyhow, Context}; +use anyhow::Context; use jellycommon::user::UserPermission; use jellyimport::is_importing; -use jellylogic::{admin::user::admin_users, session::AdminSession, Database}; +use jellylogic::{ + admin::user::{admin_users, delete_user, get_user, update_user_perms, GrantState}, + session::AdminSession, +}; use jellyui::{ admin::user::{AdminUserPage, AdminUsersPage}, render_page, scaffold::{RenderInfo, SessionInfo}, }; -use rocket::{form::Form, get, post, response::content::RawHtml, FromForm, FromFormField, State}; +use rocket::{form::Form, get, post, response::content::RawHtml, FromForm, FromFormField}; #[get("/admin/users")] -pub fn r_admin_users( - session: A<AdminSession>, - database: &State<Database>, - lang: AcceptLanguage, -) -> MyResult<RawHtml<String>> { +pub fn r_admin_users(session: A<AdminSession>, lang: AcceptLanguage) -> MyResult<RawHtml<String>> { let AcceptLanguage(lang) = lang; - let r = admin_users(database, &session.0)?; + let r = admin_users(&session.0)?; Ok(RawHtml(render_page( &AdminUsersPage { flash: None, @@ -45,14 +44,11 @@ pub fn r_admin_users( #[get("/admin/user/<name>")] pub fn r_admin_user<'a>( session: A<AdminSession>, - database: &State<Database>, name: &'a str, lang: AcceptLanguage, ) -> MyResult<RawHtml<String>> { let AcceptLanguage(lang) = lang; - let user = database - .get_user(&name)? - .ok_or(anyhow!("user does not exist"))?; + let user = get_user(&session.0, name)?; Ok(RawHtml(render_page( &AdminUserPage { @@ -73,11 +69,11 @@ pub fn r_admin_user<'a>( #[derive(FromForm)] pub struct UserPermissionForm { permission: String, - action: GrantState, + action: UrlGrantState, } #[derive(FromFormField)] -pub enum GrantState { +pub enum UrlGrantState { Grant, Revoke, Unset, @@ -86,7 +82,6 @@ pub enum GrantState { #[post("/admin/user/<name>/update_permission", data = "<form>")] pub fn r_admin_user_permission( session: A<AdminSession>, - database: &State<Database>, form: Form<UserPermissionForm>, name: &str, lang: AcceptLanguage, @@ -95,18 +90,18 @@ pub fn r_admin_user_permission( let perm = serde_json::from_str::<UserPermission>(&form.permission) .context("parsing provided permission")?; - database.update_user(name, |user| { + update_user_perms( + &session.0, + name, + perm, match form.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(()) - })?; + UrlGrantState::Grant => GrantState::Grant, + UrlGrantState::Revoke => GrantState::Revoke, + UrlGrantState::Unset => GrantState::Unset, + }, + )?; - let user = database - .get_user(&name)? - .ok_or(anyhow!("user does not exist"))?; + let user = get_user(&session.0, name)?; Ok(RawHtml(render_page( &AdminUserPage { @@ -127,15 +122,12 @@ pub fn r_admin_user_permission( #[post("/admin/<name>/remove")] pub fn r_admin_remove_user( session: A<AdminSession>, - database: &State<Database>, name: &str, lang: AcceptLanguage, ) -> MyResult<RawHtml<String>> { let AcceptLanguage(lang) = lang; - if !database.delete_user(&name)? { - Err(anyhow!("user did not exist"))?; - } - let r = admin_users(database, &session.0)?; + delete_user(&session.0, name)?; + let r = admin_users(&session.0)?; Ok(RawHtml(render_page( &AdminUsersPage { |