aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/ui/account/admin.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/routes/ui/account/admin.rs')
-rw-r--r--server/src/routes/ui/account/admin.rs58
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())),
+ )
}