diff options
Diffstat (limited to 'server/src/ui/admin/users.rs')
| -rw-r--r-- | server/src/ui/admin/users.rs | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/server/src/ui/admin/users.rs b/server/src/ui/admin/users.rs index 172facc..85f241b 100644 --- a/server/src/ui/admin/users.rs +++ b/server/src/ui/admin/users.rs @@ -6,28 +6,29 @@ use std::str::FromStr; +use crate::{auth::hash_password, request_info::RequestInfo, ui::error::MyResult}; +use anyhow::anyhow; use base64::{Engine, prelude::BASE64_URL_SAFE}; use jellycommon::{ - jellyobject::{OBB, ObjectBufferBuilder, Path}, + jellyobject::{ObjectBufferBuilder, Path}, routes::u_admin_users, *, }; use jellydb::{Filter, Query}; -use jellyui::tr; +use jellyui::{ + components::admin::{AdminUser, AdminUserList}, + tr, +}; use rand::random; use rocket::{ FromForm, form::Form, get, post, - response::{Flash, Redirect}, -}; - -use crate::{ - auth::hash_password, request_info::RequestInfo, ui::error::MyResult, ui_responder::UiResponse, + response::{Flash, Redirect, content::RawHtml}, }; #[get("/admin/users")] -pub fn r_admin_users(ri: RequestInfo) -> MyResult<UiResponse> { +pub fn r_admin_users(ri: RequestInfo) -> MyResult<RawHtml<String>> { ri.require_admin()?; let mut users = Vec::new(); @@ -43,15 +44,10 @@ pub fn r_admin_users(ri: RequestInfo) -> MyResult<UiResponse> { Ok(()) })?; - let mut list = ObjectBufferBuilder::default(); - for u in users { - list.push(ADMIN_USER_LIST_ITEM, u.as_object()); - } - - let mut page = ObjectBufferBuilder::default(); - page.push(VIEW_TITLE, &*tr(ri.lang, "admin.users")); - page.push(VIEW_ADMIN_USER_LIST, list.finish().as_object()); - Ok(ri.respond_ui(page)) + Ok(ri.respond_ui(&AdminUserList { + ri: &ri.render_info(), + users: &users.iter().map(|u| u.as_object()).collect::<Vec<_>>(), + })) } #[derive(FromForm)] @@ -83,22 +79,26 @@ pub fn r_admin_new_user(ri: RequestInfo, form: Form<NewUser>) -> MyResult<Flash< } #[get("/admin/user/<name>")] -pub fn r_admin_user(ri: RequestInfo<'_>, name: &str) -> MyResult<UiResponse> { +pub fn r_admin_user(ri: RequestInfo<'_>, name: &str) -> MyResult<RawHtml<String>> { ri.require_admin()?; - let mut page = OBB::new(); + let mut user = None; ri.state.database.transaction(&mut |txn| { if let Some(row) = txn.query_single(Query { filter: Filter::Match(Path(vec![USER_LOGIN.0]), name.into()), ..Default::default() })? { - let user = txn.get(row)?.unwrap(); - page = OBB::new(); - page.push(VIEW_ADMIN_USER, user.as_object()); + user = Some(txn.get(row)?.unwrap()); } Ok(()) })?; + let Some(user) = user else { + Err(anyhow!("no such user"))? + }; - Ok(ri.respond_ui(page)) + Ok(ri.respond_ui(&AdminUser { + ri: &ri.render_info(), + user: user.as_object(), + })) } #[post("/admin/user/<name>/remove")] |