diff options
Diffstat (limited to 'server/src/ui/admin')
| -rw-r--r-- | server/src/ui/admin/import.rs | 28 | ||||
| -rw-r--r-- | server/src/ui/admin/log.rs | 19 | ||||
| -rw-r--r-- | server/src/ui/admin/mod.rs | 37 | ||||
| -rw-r--r-- | server/src/ui/admin/users.rs | 46 |
4 files changed, 51 insertions, 79 deletions
diff --git a/server/src/ui/admin/import.rs b/server/src/ui/admin/import.rs index 78db4a4..e199de4 100644 --- a/server/src/ui/admin/import.rs +++ b/server/src/ui/admin/import.rs @@ -4,27 +4,23 @@ Copyright (C) 2026 metamuffin <metamuffin.org> */ -use crate::{request_info::RequestInfo, ui::error::MyResult, ui_responder::UiResponse}; -use jellycommon::{ - jellyobject::{OBB, ObjectBuffer}, - routes::u_admin_import, - *, -}; +use crate::{request_info::RequestInfo, ui::error::MyResult}; +use jellycommon::routes::u_admin_import; use jellyimport::{ ImportConfig, import_wrap, is_importing, reporting::{IMPORT_ERRORS, IMPORT_PROGRESS}, }; -use jellyui::tr; +use jellyui::{components::admin::AdminImport, tr}; use rocket::{ get, post, - response::{Flash, Redirect}, + response::{Flash, Redirect, content::RawHtml}, }; use rocket_ws::{Message, Stream, WebSocket}; use std::time::Duration; use tokio::{spawn, time::sleep}; #[get("/admin/import", rank = 2)] -pub async fn r_admin_import(ri: RequestInfo<'_>) -> MyResult<UiResponse> { +pub async fn r_admin_import(ri: RequestInfo<'_>) -> MyResult<RawHtml<String>> { ri.require_admin()?; let last_import_err = IMPORT_ERRORS.read().await.clone(); @@ -33,15 +29,11 @@ pub async fn r_admin_import(ri: RequestInfo<'_>) -> MyResult<UiResponse> { .map(|e| e.as_str()) .collect::<Vec<_>>(); - let mut data = ObjectBuffer::empty(); - if is_importing() { - data = data.as_object().insert(ADMIN_IMPORT_BUSY, ()); - } - data = data - .as_object() - .insert_multi(ADMIN_IMPORT_ERROR, &last_import_err); - - Ok(ri.respond_ui(OBB::new().with(VIEW_ADMIN_IMPORT, data.as_object()))) + Ok(ri.respond_ui(&AdminImport { + busy: is_importing(), + errors: &last_import_err, + ri: &ri.render_info(), + })) } #[post("/admin/import?<incremental>")] diff --git a/server/src/ui/admin/log.rs b/server/src/ui/admin/log.rs index 0965a25..168ec6a 100644 --- a/server/src/ui/admin/log.rs +++ b/server/src/ui/admin/log.rs @@ -8,7 +8,7 @@ use crate::{ request_info::RequestInfo, ui::error::MyResult, }; -use jellyui::{Scaffold, ServerLogPage, render_log_line}; +use jellyui::components::admin_log::{ServerLogPage, render_log_line}; use rocket::{get, response::content::RawHtml}; use rocket_ws::{Message, Stream, WebSocket}; use serde_json::json; @@ -21,18 +21,11 @@ pub fn r_admin_log(ri: RequestInfo, warnonly: bool) -> MyResult<RawHtml<String>> .map(|l| render_log_line(&l)) .collect::<Vec<_>>(); - Ok(RawHtml( - Scaffold { - class: "theme-purple", - main: ServerLogPage { - messages: &messages, - warnonly, - }, - ri: &ri.render_info(), - title: "Admin Log", - } - .to_string(), - )) + Ok(ri.respond_ui(&ServerLogPage { + ri: &ri.render_info(), + messages: &messages, + warnonly, + })) } #[get("/admin/log?stream&<warnonly>&<html>", rank = 1)] diff --git a/server/src/ui/admin/mod.rs b/server/src/ui/admin/mod.rs index 10037b5..6119b74 100644 --- a/server/src/ui/admin/mod.rs +++ b/server/src/ui/admin/mod.rs @@ -9,34 +9,21 @@ pub mod log; pub mod users; use super::error::MyResult; -use crate::{request_info::RequestInfo, ui_responder::UiResponse}; -use jellycommon::{ - jellyobject::{OBB, ObjectBuffer}, - *, -}; -use jellyui::tr; -use rocket::get; +use crate::request_info::RequestInfo; +use jellyui::components::admin::AdminDashboard; +use rocket::{get, response::content::RawHtml}; #[get("/admin/dashboard")] -pub async fn r_admin_dashboard(ri: RequestInfo<'_>) -> MyResult<UiResponse> { +pub async fn r_admin_dashboard(ri: RequestInfo<'_>) -> MyResult<RawHtml<String>> { ri.require_admin()?; - let mut db_debug = String::new(); - ri.state.database.transaction(&mut |txn| { - db_debug = txn.debug_info()?; - Ok(()) - })?; + // let mut db_debug = String::new(); + // ri.state.database.transaction(&mut |txn| { + // db_debug = txn.debug_info()?; + // Ok(()) + // })?; - let mut page = OBB::new(); - page.push(VIEW_TITLE, &*tr(ri.lang, "admin.dashboard.title")); - page.push(VIEW_ADMIN_DASHBOARD, ()); - page.push( - VIEW_ADMIN_INFO, - ObjectBuffer::new(&mut [ - (ADMIN_INFO_TITLE.0, &"Database Debug"), - (ADMIN_INFO_TEXT.0, &db_debug.as_str()), - ]) - .as_object(), - ); - Ok(ri.respond_ui(page)) + Ok(ri.respond_ui(&AdminDashboard { + ri: &ri.render_info(), + })) } 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")] |