diff options
author | metamuffin <metamuffin@disroot.org> | 2023-05-15 22:41:35 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-05-15 22:41:35 +0200 |
commit | 1831529a7a643108fe1122b191b4603cb258552c (patch) | |
tree | d42e7ffb8d34e2a40881853957a78637aa06a59a | |
parent | 4903a13f71b9fa59ccd37a68a6d9a3570cc2a71d (diff) | |
download | jellything-1831529a7a643108fe1122b191b4603cb258552c.tar jellything-1831529a7a643108fe1122b191b4603cb258552c.tar.bz2 jellything-1831529a7a643108fe1122b191b4603cb258552c.tar.zst |
invite administration
-rw-r--r-- | remuxer/src/lib.rs | 4 | ||||
-rw-r--r-- | server/src/routes/mod.rs | 6 | ||||
-rw-r--r-- | server/src/routes/ui/account/admin.rs | 47 |
3 files changed, 50 insertions, 7 deletions
diff --git a/remuxer/src/lib.rs b/remuxer/src/lib.rs index 71b86b1..8aaee15 100644 --- a/remuxer/src/lib.rs +++ b/remuxer/src/lib.rs @@ -168,7 +168,7 @@ impl RemuxerContext { let cluster_content_size = 1 + 1 // timestamp {tag, size} + vint_length(cluster_pts) // timestamp tag value + p; - let cluster_header_size = 4 // tag length + let cluster_size = 4 // tag length + vint_length(cluster_content_size as u64) // size varint + cluster_content_size; clusters.push(ClusterLayout { @@ -180,7 +180,7 @@ impl RemuxerContext { cluster_pts = block.pts; source_offsets = vec![None; inputs.len()]; - gp += cluster_header_size; + gp += cluster_size; p = 0; } if block.pts == u64::MAX { diff --git a/server/src/routes/mod.rs b/server/src/routes/mod.rs index 54d4ae0..8819cf8 100644 --- a/server/src/routes/mod.rs +++ b/server/src/routes/mod.rs @@ -14,7 +14,10 @@ use std::fs::File; use stream::r_stream; use ui::{ account::{ - admin::{r_account_admin_dashboard, r_account_admin_invite, r_account_admin_remove_user}, + admin::{ + r_account_admin_dashboard, r_account_admin_invite, r_account_admin_remove_invite, + r_account_admin_remove_user, + }, r_account_login, r_account_login_post, r_account_logout, r_account_logout_post, r_account_register, r_account_register_post, settings::{r_account_settings, r_account_settings_post}, @@ -79,6 +82,7 @@ pub fn build_rocket( r_account_admin_dashboard, r_account_admin_invite, r_account_admin_remove_user, + r_account_admin_remove_invite, r_account_settings, r_account_settings_post, r_api_version, diff --git a/server/src/routes/ui/account/admin.rs b/server/src/routes/ui/account/admin.rs index 8fe2a9a..ce388d4 100644 --- a/server/src/routes/ui/account/admin.rs +++ b/server/src/routes/ui/account/admin.rs @@ -27,6 +27,7 @@ pub fn r_account_admin_dashboard( // TODO this doesnt scale let users = database.users.iter().collect::<Result<Vec<_>, _>>()?; + let invites = database.invites.iter().collect::<Result<Vec<_>, _>>()?; Ok(LayoutPage { title: "Admin Dashboard".to_string(), @@ -36,14 +37,23 @@ pub fn r_account_admin_dashboard( form[method="POST", action=uri!(r_account_admin_invite())] { input[type="submit", value="Generate new invite code"]; } + ul { @for t in &invites { + li { + form[method="POST", action=uri!(r_account_admin_remove_invite())] { + span { @t.0 } + input[type="text", name="invite", value=&t.0, hidden]; + input[type="submit", value="Invalidate"]; + } + } + }} h2 { "Users" } - @for (_, u) in &users { - form[method="POST", action=uri!(r_account_admin_remove_user())] { + ul { @for (_, u) in &users { + li { form[method="POST", action=uri!(r_account_admin_remove_user())] { span { @format!("{:?}", u.display_name) " (" @u.name ")" } input[type="text", name="name", value=&u.name, hidden]; input[type="submit", value="Remove(!)"]; - } - } + }} + }} }, }) } @@ -91,6 +101,35 @@ pub fn r_account_admin_remove_user( title: "User removed".to_string(), content: markup::new! { p { "User removed" } + a[href=uri!(r_account_admin_dashboard())] {"Back"} + }, + }) +} + +#[derive(FromForm)] +pub struct DeleteInvite { + invite: String, +} + +#[post("/account/admin/remove_invite", data = "<form>")] +pub fn r_account_admin_remove_invite( + session: Session, + database: &State<Database>, + form: Form<DeleteInvite>, +) -> MyResult<DynLayoutPage<'static>> { + if !session.user.admin { + Err(anyhow!("you not admin"))? + } + database + .invites + .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"} }, }) } |