From e2a28d43f0d1faf0c22ce9f505c5638fb30bce06 Mon Sep 17 00:00:00 2001 From: Andy Killorin <37423245+Speedy6451@users.noreply.github.com> Date: Sat, 7 Dec 2024 01:15:08 -0500 Subject: [PATCH] added admin panel --- server/src/main.rs | 78 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 73 insertions(+), 5 deletions(-) diff --git a/server/src/main.rs b/server/src/main.rs index c827817..e37e56d 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -10,6 +10,7 @@ use tracing::{error, info, trace, Level}; use tracing_subscriber::{filter, layer::{Filter, SubscriberExt}, util::SubscriberInitExt, Layer}; const FISH: &'static str = "169.254.2.1:1234"; +const DOOR: &'static str = "169.254.1.1:1234"; #[derive(Clone)] struct AppState { @@ -51,10 +52,13 @@ async fn main() -> Result<()>{ let app: Router = Router::new() - .route("/", get(root)) + .route("/names", get(root)) + .route("/admin", get(control)) .route("/phil", get(phil)) .route("/recent", get(recent_badge)) .route("/setLast", post(set_last)) + .route("/openDoor", post(open_door)) + .route("/setVolume", post(set_volume)) //.route("/map", post(set_badge)) .with_state(AppState { fish: fish.clone(), @@ -82,7 +86,7 @@ async fn main() -> Result<()>{ } }); - { + /*{ let _permit = fish.acquire().await?; let mut conn = TcpStream::connect(FISH).await?; @@ -101,7 +105,7 @@ async fn main() -> Result<()>{ let req = Request::SetVolume(30); conn.write_all(&to_allocvec(&req)?).await?; - } + }*/ loop { sleep(Duration::from_secs(2)).await; @@ -149,14 +153,78 @@ async fn root(state: State) -> Html { "Zoey", ] { page.push_str(&format!(r#" -
- + +
"#)); } + + page.push_str(&format!(r#" +
+ + +
+ + "#)); Html::from(page) } +async fn control(state: State) -> Html { + let (last_badge, time) = *state.last_badge.read().await; + let time = time.elapsed(); + + let page = format!(r#" + JOHNADMIN +

JOHN ADMIN PANEL

+
+ +
+
+ + +
+

+ most recent badge {last_badge:#0x}
+ {time:?} ago +

+ + "#); + + Html::from(page) +} + +#[derive(serde::Deserialize)] +struct Volume { + volume: u8, +} + +async fn open_door(state: State) -> Html<&'static str> { + info!("opening door"); + let mut conn = TcpStream::connect(DOOR).await.unwrap(); + + + conn.write_all(b"B f7c31d1603000000 \r\n").await.unwrap(); + conn.flush().await.unwrap(); + + Html::from("

opening the noor

") +} + +async fn set_volume( + state: State, + Form(input): Form) -> Html { + + info!("setting volume to {}", input.volume); + + let _fish = state.fish.acquire().await.unwrap(); + let mut conn = TcpStream::connect(FISH).await.unwrap(); + + let req = Request::SetVolume(input.volume); + conn.write_all(&to_allocvec(&req).unwrap()).await.unwrap(); + conn.flush().await.unwrap(); + + Html::from(format!("

volume is now {}


back", input.volume)) +} + #[derive(serde::Deserialize)] struct NameForm { name: String,