diff options
author | metamuffin <metamuffin@disroot.org> | 2023-08-02 15:08:43 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-08-02 15:08:43 +0200 |
commit | c81d8bbfd46d53fba6e0086b5f859f8af8639f4a (patch) | |
tree | 8088fcfad28e9fae3a0a70853b5fd12204cde35a /server/src/routes/ui/account | |
parent | 0d6a5fb84d3e0016c80baa1849612f550db31a81 (diff) | |
download | jellything-c81d8bbfd46d53fba6e0086b5f859f8af8639f4a.tar jellything-c81d8bbfd46d53fba6e0086b5f859f8af8639f4a.tar.bz2 jellything-c81d8bbfd46d53fba6e0086b5f859f8af8639f4a.tar.zst |
refactor admin panel
Diffstat (limited to 'server/src/routes/ui/account')
-rw-r--r-- | server/src/routes/ui/account/admin.rs | 58 |
1 files changed, 33 insertions, 25 deletions
diff --git a/server/src/routes/ui/account/admin.rs b/server/src/routes/ui/account/admin.rs index 37457b0..7124f4a 100644 --- a/server/src/routes/ui/account/admin.rs +++ b/server/src/routes/ui/account/admin.rs @@ -5,10 +5,11 @@ */ use crate::{ database::Database, + import::import, routes::ui::{ account::session::Session, error::MyResult, - layout::{DynLayoutPage, LayoutPage}, + layout::{DynLayoutPage, FlashDisplay, LayoutPage}, }, uri, }; @@ -24,16 +25,28 @@ pub fn r_account_admin_dashboard( if !session.user.admin { Err(anyhow!("you not admin"))? } + admin_dashboard(database, None) +} +pub fn admin_dashboard<'a>( + database: &Database, + flash: Option<MyResult<String>>, +) -> MyResult<DynLayoutPage<'a>> { // TODO this doesnt scale, pagination! let users = database.user.iter().collect::<Result<Vec<_>, _>>()?; let invites = database.invite.iter().collect::<Result<Vec<_>, _>>()?; + let flash = flash.map(|f| f.map_err(|e| format!("{e:?}"))); Ok(LayoutPage { title: "Admin Dashboard".to_string(), content: markup::new! { h1 { "Admin Panel" } - h2 { "Invitations"} + @FlashDisplay { flash: flash.clone() } + h2 { "Library" } + form[method="POST", action=uri!(r_account_admin_import())] { + input[type="submit", value="(Re-)Import Library"]; + } + h2 { "Invitations" } form[method="POST", action=uri!(r_account_admin_invite())] { input[type="submit", value="Generate new invite code"]; } @@ -71,13 +84,7 @@ pub fn r_account_admin_invite( let i = format!("{}", rand::thread_rng().gen::<u128>()); database.invite.insert(&i, &())?; - Ok(LayoutPage { - title: "Admin Dashboard".to_string(), - content: markup::new! { - pre { code { @i } } - }, - ..Default::default() - }) + admin_dashboard(database, Some(Ok(format!("Invite: {}", i)))) } #[derive(FromForm)] @@ -99,14 +106,7 @@ pub fn r_account_admin_remove_user( .remove(&form.name)? .ok_or(anyhow!("user did not exist"))?; - Ok(LayoutPage { - title: "User removed".to_string(), - content: markup::new! { - p { "User removed" } - a[href=uri!(r_account_admin_dashboard())] {"Back"} - }, - ..Default::default() - }) + admin_dashboard(database, Some(Ok("User removed".into()))) } #[derive(FromForm)] @@ -128,12 +128,20 @@ pub fn r_account_admin_remove_invite( .remove(&form.invite)? .ok_or(anyhow!("invite did not exist"))?; - Ok(LayoutPage { - title: "Invite invalidated".to_string(), - content: markup::new! { - p { "Invite invalidated" } - a[href=uri!(r_account_admin_dashboard())] {"Back"} - }, - ..Default::default() - }) + admin_dashboard(database, Some(Ok("Invite invalidated".into()))) +} + +#[post("/account/admin/import")] +pub async fn r_account_admin_import( + session: Session, + database: &State<Database>, +) -> MyResult<DynLayoutPage<'static>> { + if !session.user.admin { + Err(anyhow!("you not admin"))? + } + let r = import(&database).await; + admin_dashboard( + &database, + Some(r.map_err(|e| e.into()).map(|_| "Import successful".into())), + ) } |