diff options
Diffstat (limited to 'server/src/ui/admin/log.rs')
| -rw-r--r-- | server/src/ui/admin/log.rs | 62 |
1 files changed, 36 insertions, 26 deletions
diff --git a/server/src/ui/admin/log.rs b/server/src/ui/admin/log.rs index da70360..0965a25 100644 --- a/server/src/ui/admin/log.rs +++ b/server/src/ui/admin/log.rs @@ -3,50 +3,60 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2026 metamuffin <metamuffin.org> */ -use crate::{request_info::RequestInfo, ui::error::MyResult}; +use crate::{ + logger::{get_log_buffer, get_log_stream}, + request_info::RequestInfo, + ui::error::MyResult, +}; +use jellyui::{Scaffold, ServerLogPage, render_log_line}; use rocket::{get, response::content::RawHtml}; use rocket_ws::{Message, Stream, WebSocket}; use serde_json::json; #[get("/admin/log?<warnonly>", rank = 2)] pub fn r_admin_log(ri: RequestInfo, warnonly: bool) -> MyResult<RawHtml<String>> { - ri.session.assert_admin()?; + ri.require_admin()?; let messages = get_log_buffer(warnonly) .into_iter() .map(|l| render_log_line(&l)) .collect::<Vec<_>>(); - Ok(RawHtml(render_page( - &ServerLogPage { - messages: &messages, - warnonly, - }, - ri.render_info(), - ))) + + Ok(RawHtml( + Scaffold { + class: "theme-purple", + main: ServerLogPage { + messages: &messages, + warnonly, + }, + ri: &ri.render_info(), + title: "Admin Log", + } + .to_string(), + )) } #[get("/admin/log?stream&<warnonly>&<html>", rank = 1)] pub fn r_admin_log_stream( - session: A<Session>, + ri: RequestInfo, ws: WebSocket, warnonly: bool, html: bool, -) -> Stream!['static] { - // TODO type problems - let ok = session.0.assert_admin().is_ok(); +) -> MyResult<Stream!['static]> { + ri.require_admin()?; let mut stream = get_log_stream(warnonly); - Stream! { ws => - if !ok { - yield Message::Text("unauthorized".to_string()); - } else if html { - let _ = ws; - while let Ok(line) = stream.recv().await { - yield Message::Text(render_log_line(&line)); - } - } else { - let _ = ws; - while let Ok(line) = stream.recv().await { - yield Message::Text(json!(line).to_string()); + Ok({ + Stream! { ws => + if html { + let _ = ws; + while let Ok(line) = stream.recv().await { + yield Message::Text(render_log_line(&line)); + } + } else { + let _ = ws; + while let Ok(line) = stream.recv().await { + yield Message::Text(json!(line).to_string()); + } } } - } + }) } |