diff options
Diffstat (limited to 'server/src/ui/admin/mod.rs')
| -rw-r--r-- | server/src/ui/admin/mod.rs | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/server/src/ui/admin/mod.rs b/server/src/ui/admin/mod.rs index 8413ead..3fa0591 100644 --- a/server/src/ui/admin/mod.rs +++ b/server/src/ui/admin/mod.rs @@ -9,9 +9,14 @@ pub mod log; use super::error::MyResult; use crate::{request_info::RequestInfo, ui_responder::UiResponse}; -use jellycommon::{jellyobject::ObjectBuffer, *}; +use jellycommon::{ + jellyobject::{ObjectBuffer, ObjectBufferBuilder}, + *, +}; +use jellydb::Query; use jellyui::tr; use rocket::get; +use std::str::FromStr; #[get("/admin/dashboard")] pub async fn r_admin_dashboard(ri: RequestInfo<'_>) -> MyResult<UiResponse> { @@ -35,3 +40,30 @@ pub async fn r_admin_dashboard(ri: RequestInfo<'_>) -> MyResult<UiResponse> { ), ]))) } + +#[get("/admin/users")] +pub fn r_admin_users(ri: RequestInfo) -> MyResult<UiResponse> { + ri.require_admin()?; + + let mut users = Vec::new(); + ri.state.database.transaction(&mut |txn| { + users.clear(); + let rows = txn + .query(Query::from_str("FILTER Ulgn")?)? + .collect::<Vec<_>>(); + for row in rows { + let (row, _) = row?; + users.push(txn.get(row)?.unwrap()); + } + Ok(()) + })?; + + let mut list = ObjectBufferBuilder::default(); + for u in users { + list.push(ADMIN_USER_LIST_ITEM, u.as_object()); + } + Ok(ri.respond_ui(ObjectBuffer::new(&mut [( + VIEW_ADMIN_USER_LIST.0, + &list.finish().as_object(), + )]))) +} |