aboutsummaryrefslogtreecommitdiff
path: root/server/src/ui/admin
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/ui/admin')
-rw-r--r--server/src/ui/admin/log.rs21
-rw-r--r--server/src/ui/admin/mod.rs74
-rw-r--r--server/src/ui/admin/user.rs93
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(),
)))
}