From f73aa32549743b2967160d38c1622199c41524a4 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 29 Apr 2025 15:19:36 +0200 Subject: aaaaaaa --- server/src/ui/admin/user.rs | 140 +++++++++++++++++++++++++++----------------- 1 file changed, 85 insertions(+), 55 deletions(-) (limited to 'server/src/ui/admin/user.rs') diff --git a/server/src/ui/admin/user.rs b/server/src/ui/admin/user.rs index 1af83d4..77bcc71 100644 --- a/server/src/ui/admin/user.rs +++ b/server/src/ui/admin/user.rs @@ -3,68 +3,68 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin */ -use crate::{database::Database, ui::error::MyResult}; +use crate::{database::Database, locale::AcceptLanguage, ui::error::MyResult}; use anyhow::{anyhow, Context}; use jellycommon::user::UserPermission; -use jellylogic::session::AdminSession; -use rocket::{form::Form, get, post, FromForm, FromFormField, State}; +use jellyimport::is_importing; +use jellylogic::{admin::user::admin_users, 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}; #[get("/admin/users")] pub fn r_admin_users( - _session: AdminSession, + session: AdminSession, database: &State, -) -> MyResult> { - user_management(database, None) -} - -fn user_management<'a>( - database: &Database, - flash: Option>, -) -> MyResult> { - // TODO this doesnt scale, pagination! - let users = database.list_users()?; - let flash = flash.map(|f| f.map_err(|e| format!("{e:?}"))); - - Ok(LayoutPage { - title: "User management".to_string(), - content: markup::new! { - h1 { "User Management" } - @FlashDisplay { flash: flash.clone() } - h2 { "All Users" } - ul { @for u in &users { - li { - a[href=uri!(r_admin_user(&u.name))] { @format!("{:?}", u.display_name) " (" @u.name ")" } - } - }} + lang: AcceptLanguage, +) -> MyResult> { + let AcceptLanguage(lang) = lang; + let r = admin_users(database, &session)?; + Ok(RawHtml(render_page( + &AdminUsersPage { + flash: None, + lang: &lang, + users: &r.users, + }, + RenderInfo { + importing: is_importing(), + session: Some(SessionInfo { + user: session.0.user, + }), }, - ..Default::default() - }) + lang, + ))) } #[get("/admin/user/")] pub fn r_admin_user<'a>( - _session: AdminSession, + session: AdminSession, database: &State, name: &'a str, -) -> MyResult> { - manage_single_user(database, None, name.to_string()) -} - -fn manage_single_user<'a>( - database: &Database, - flash: Option>, - name: String, -) -> MyResult> { + lang: AcceptLanguage, +) -> MyResult> { + let AcceptLanguage(lang) = lang; let user = database .get_user(&name)? .ok_or(anyhow!("user does not exist"))?; - let flash = flash.map(|f| f.map_err(|e| format!("{e:?}"))); - Ok(LayoutPage { - title: "User management".to_string(), - content: markup::new! {}, - ..Default::default() - }) + Ok(RawHtml(render_page( + &AdminUserPage { + flash: None, + lang: &lang, + user: &user, + }, + RenderInfo { + importing: is_importing(), + session: Some(SessionInfo { + user: session.0.user, + }), + }, + lang, + ))) } #[derive(FromForm)] @@ -86,8 +86,9 @@ pub fn r_admin_user_permission( database: &State, form: Form, name: &str, -) -> MyResult> { - drop(session); + lang: AcceptLanguage, +) -> MyResult> { + let AcceptLanguage(lang) = lang; let perm = serde_json::from_str::(&form.permission) .context("parsing provided permission")?; @@ -100,11 +101,24 @@ pub fn r_admin_user_permission( Ok(()) })?; - manage_single_user( - database, - Some(Ok("Permissions update".into())), - form.name.clone(), - ) + let user = database + .get_user(&name)? + .ok_or(anyhow!("user does not exist"))?; + + Ok(RawHtml(render_page( + &AdminUserPage { + flash: Some(Ok("Permissions updated".to_string())), + lang: &lang, + user: &user, + }, + RenderInfo { + importing: is_importing(), + session: Some(SessionInfo { + user: session.0.user, + }), + }, + lang, + ))) } #[post("/admin//remove")] @@ -112,10 +126,26 @@ pub fn r_admin_remove_user( session: AdminSession, database: &State, name: &str, -) -> MyResult> { - drop(session); + lang: AcceptLanguage, +) -> MyResult> { + let AcceptLanguage(lang) = lang; if !database.delete_user(&name)? { Err(anyhow!("user did not exist"))?; } - user_management(database, Some(Ok("User removed".into()))) + let r = admin_users(database, &session)?; + + Ok(RawHtml(render_page( + &AdminUsersPage { + flash: Some(Ok("User removed".to_string())), + lang: &lang, + users: &r.users, + }, + RenderInfo { + importing: is_importing(), + session: Some(SessionInfo { + user: session.0.user, + }), + }, + lang, + ))) } -- cgit v1.2.3-70-g09d2