diff options
Diffstat (limited to 'server/src/ui/admin')
-rw-r--r-- | server/src/ui/admin/log.rs | 21 | ||||
-rw-r--r-- | server/src/ui/admin/mod.rs | 74 | ||||
-rw-r--r-- | server/src/ui/admin/user.rs | 93 |
3 files changed, 62 insertions, 126 deletions
diff --git a/server/src/ui/admin/log.rs b/server/src/ui/admin/log.rs index c26b697..61d2ba7 100644 --- a/server/src/ui/admin/log.rs +++ b/server/src/ui/admin/log.rs @@ -4,10 +4,9 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ use crate::{ - helper::{language::AcceptLanguage, A}, + helper::{RequestInfo, A}, ui::error::MyResult, }; -use jellyimport::is_importing; use jellylogic::{ admin::log::{get_log_buffer, get_log_stream}, session::Session, @@ -15,20 +14,14 @@ use jellylogic::{ use jellyui::{ admin::log::{render_log_line, ServerLogPage}, render_page, - scaffold::{RenderInfo, SessionInfo}, }; 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<'a>( - session: A<Session>, - warnonly: bool, - lang: AcceptLanguage, -) -> MyResult<RawHtml<String>> { - session.0.assert_admin()?; - let AcceptLanguage(lang) = lang; +pub fn r_admin_log<'a>(ri: RequestInfo, warnonly: bool) -> MyResult<RawHtml<String>> { + ri.session.assert_admin()?; let messages = get_log_buffer(warnonly) .into_iter() .map(|l| render_log_line(&l)) @@ -38,13 +31,7 @@ pub fn r_admin_log<'a>( messages: &messages, warnonly, }, - RenderInfo { - importing: is_importing(), - session: Some(SessionInfo { - user: session.0.user, - }), - }, - lang, + ri.render_info(), ))) } diff --git a/server/src/ui/admin/mod.rs b/server/src/ui/admin/mod.rs index 4e07afb..e124a13 100644 --- a/server/src/ui/admin/mod.rs +++ b/server/src/ui/admin/mod.rs @@ -7,40 +7,31 @@ pub mod log; pub mod user; use super::error::MyResult; -use crate::helper::{language::AcceptLanguage, RequestInfo, A}; +use crate::helper::RequestInfo; use jellycommon::routes::u_admin_dashboard; use jellyimport::is_importing; -use jellylogic::{ - admin::{ - create_invite, delete_invite, do_import, get_import_errors, list_invites, - update_search_index, - }, - session::Session, -}; -use jellyui::{ - admin::AdminDashboardPage, - locale::tr, - render_page, - scaffold::{RenderInfo, SessionInfo}, +use jellylogic::admin::{ + create_invite, delete_invite, do_import, get_import_errors, list_invites, update_search_index, }; +use jellyui::{admin::AdminDashboardPage, locale::tr, render_page}; use rocket::{ form::Form, get, post, + request::FlashMessage, response::{content::RawHtml, Flash, Redirect}, FromForm, }; #[get("/admin/dashboard")] pub async fn r_admin_dashboard( - session: A<Session>, - lang: AcceptLanguage, + ri: RequestInfo, + flash: Option<FlashMessage<'_>>, ) -> MyResult<RawHtml<String>> { - session.0.assert_admin()?; - let AcceptLanguage(lang) = lang; + ri.session.assert_admin()?; let flash = None; - let invites = list_invites(&session.0)?; - let last_import_err = get_import_errors(&session.0).await; + let invites = list_invites(&ri.session)?; + let last_import_err = get_import_errors(&ri.session).await; let busy = if is_importing() { Some("An import is currently running.") @@ -54,15 +45,9 @@ pub async fn r_admin_dashboard( last_import_err: &last_import_err, invites: &invites, flash, - lang: &lang, - }, - RenderInfo { - importing: is_importing(), - session: Some(SessionInfo { - user: session.0.user, - }), + lang: &ri.lang, }, - lang, + ri.render_info(), ))) } @@ -82,24 +67,33 @@ pub struct DeleteInvite { #[post("/admin/remove_invite", data = "<form>")] pub async fn r_admin_remove_invite( - session: A<Session>, + ri: RequestInfo, form: Form<DeleteInvite>, -) -> MyResult<Redirect> { - session.0.assert_admin()?; - delete_invite(&session.0, &form.invite)?; - Ok(Redirect::temporary(u_admin_dashboard())) +) -> MyResult<Flash<Redirect>> { + ri.session.assert_admin()?; + delete_invite(&ri.session, &form.invite)?; + Ok(Flash::success( + Redirect::to(u_admin_dashboard()), + tr(ri.lang, "admin.invite_delete_success"), + )) } #[post("/admin/import?<incremental>")] -pub async fn r_admin_import(session: A<Session>, incremental: bool) -> MyResult<Redirect> { - session.0.assert_admin()?; - do_import(&session.0, incremental).await?.1?; - Ok(Redirect::temporary(u_admin_dashboard())) +pub async fn r_admin_import(ri: RequestInfo, incremental: bool) -> MyResult<Flash<Redirect>> { + ri.session.assert_admin()?; + do_import(&ri.session, incremental).await?.1?; + Ok(Flash::success( + Redirect::to(u_admin_dashboard()), + tr(ri.lang, "admin.import_success"), + )) } #[post("/admin/update_search")] -pub async fn r_admin_update_search(session: A<Session>) -> MyResult<Redirect> { - session.0.assert_admin()?; - update_search_index(&session.0).await?; - Ok(Redirect::temporary(u_admin_dashboard())) +pub async fn r_admin_update_search(ri: RequestInfo) -> MyResult<Flash<Redirect>> { + ri.session.assert_admin()?; + update_search_index(&ri.session).await?; + Ok(Flash::success( + Redirect::to(u_admin_dashboard()), + tr(ri.lang, "admin.update_search_success"), + )) } diff --git a/server/src/ui/admin/user.rs b/server/src/ui/admin/user.rs index e8dc332..afbe8f0 100644 --- a/server/src/ui/admin/user.rs +++ b/server/src/ui/admin/user.rs @@ -3,68 +3,42 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin <metamuffin.org> */ -use crate::{ - helper::{language::AcceptLanguage, A}, - ui::error::MyResult, -}; +use crate::{helper::RequestInfo, ui::error::MyResult}; use anyhow::Context; use jellycommon::user::UserPermission; -use jellyimport::is_importing; -use jellylogic::{ - admin::user::{admin_users, delete_user, get_user, update_user_perms, GrantState}, - session::Session, -}; +use jellylogic::admin::user::{admin_users, delete_user, get_user, update_user_perms, GrantState}; use jellyui::{ admin::user::{AdminUserPage, AdminUsersPage}, render_page, - scaffold::{RenderInfo, SessionInfo}, }; use rocket::{form::Form, get, post, response::content::RawHtml, FromForm, FromFormField}; #[get("/admin/users")] -pub fn r_admin_users(session: A<Session>, lang: AcceptLanguage) -> MyResult<RawHtml<String>> { - session.0.assert_admin()?; - let AcceptLanguage(lang) = lang; - let r = admin_users(&session.0)?; +pub fn r_admin_users(ri: RequestInfo) -> MyResult<RawHtml<String>> { + ri.session.assert_admin()?; + let r = admin_users(&ri.session)?; Ok(RawHtml(render_page( &AdminUsersPage { flash: None, - lang: &lang, + lang: &ri.lang, users: &r.users, }, - RenderInfo { - importing: is_importing(), - session: Some(SessionInfo { - user: session.0.user, - }), - }, - lang, + ri.render_info(), ))) } #[get("/admin/user/<name>")] -pub fn r_admin_user<'a>( - session: A<Session>, - name: &'a str, - lang: AcceptLanguage, -) -> MyResult<RawHtml<String>> { - session.0.assert_admin()?; - let AcceptLanguage(lang) = lang; - let user = get_user(&session.0, name)?; +pub fn r_admin_user<'a>(ri: RequestInfo, name: &'a str) -> MyResult<RawHtml<String>> { + ri.session.assert_admin()?; + let user = get_user(&ri.session, name)?; Ok(RawHtml(render_page( &AdminUserPage { flash: None, - lang: &lang, + lang: &ri.lang, user: &user, }, - RenderInfo { - importing: is_importing(), - session: Some(SessionInfo { - user: session.0.user, - }), - }, - lang, + ri.render_info(), ))) } @@ -83,18 +57,16 @@ pub enum UrlGrantState { #[post("/admin/user/<name>/update_permission", data = "<form>")] pub fn r_admin_user_permission( - session: A<Session>, + ri: RequestInfo, form: Form<UserPermissionForm>, name: &str, - lang: AcceptLanguage, ) -> MyResult<RawHtml<String>> { - session.0.assert_admin()?; - let AcceptLanguage(lang) = lang; + ri.session.assert_admin()?; let perm = serde_json::from_str::<UserPermission>(&form.permission) .context("parsing provided permission")?; update_user_perms( - &session.0, + &ri.session, name, perm, match form.action { @@ -104,47 +76,30 @@ pub fn r_admin_user_permission( }, )?; - let user = get_user(&session.0, name)?; + let user = get_user(&ri.session, name)?; Ok(RawHtml(render_page( &AdminUserPage { flash: Some(Ok("Permissions updated".to_string())), - lang: &lang, + lang: &ri.lang, user: &user, }, - RenderInfo { - importing: is_importing(), - session: Some(SessionInfo { - user: session.0.user, - }), - }, - lang, + ri.render_info(), ))) } #[post("/admin/<name>/remove")] -pub fn r_admin_remove_user( - session: A<Session>, - name: &str, - lang: AcceptLanguage, -) -> MyResult<RawHtml<String>> { - session.0.assert_admin()?; - let AcceptLanguage(lang) = lang; - delete_user(&session.0, name)?; - let r = admin_users(&session.0)?; +pub fn r_admin_remove_user(ri: RequestInfo, name: &str) -> MyResult<RawHtml<String>> { + ri.session.assert_admin()?; + delete_user(&ri.session, name)?; + let r = admin_users(&ri.session)?; Ok(RawHtml(render_page( &AdminUsersPage { flash: Some(Ok("User removed".to_string())), - lang: &lang, + lang: &ri.lang, users: &r.users, }, - RenderInfo { - importing: is_importing(), - session: Some(SessionInfo { - user: session.0.user, - }), - }, - lang, + ri.render_info(), ))) } |