use log::{info, warn}; use rocket::{form::Form, get, post, response::{Redirect, Flash}, uri, FromForm, request::FlashMessage, State}; use rocket_dyn_templates::{context, Template}; use crate::sbot; use crate::utils; use crate::db::Database; #[derive(FromForm)] pub struct PeerForm { pub public_key: String, } #[get("/")] pub async fn home(flash: Option>) -> Template { let whoami = match sbot::whoami().await { Ok(id) => id, Err(e) => format!("whoami call failed: {}", e), }; Template::render("base", context! { whoami, flash }) } #[post("/subscribe", data = "")] pub async fn subscribe_form(db: &State, peer: Form) -> Result> { info!("Subscribing to peer {}", &peer.public_key); if let Err(e) = utils::validate_public_key(&peer.public_key) { let validation_err_msg = format!("Public key {} is invalid: {}", &peer.public_key, e); warn!("{}", validation_err_msg); return Err(Flash::error(Redirect::to(uri!(home)), validation_err_msg)); } else { info!("Public key {} is valid.", &peer.public_key); match sbot::follow_if_not_following(&peer.public_key).await { Ok(_) => (), Err(e) => { warn!("{}", e); return Err(Flash::error(Redirect::to(uri!(home)), e)); } } } Ok(Redirect::to(uri!(home))) } #[post("/unsubscribe", data = "")] pub async fn unsubscribe_form(db: &State, peer: Form) -> Result> { info!("Unsubscribing to peer {}", &peer.public_key); if let Err(e) = utils::validate_public_key(&peer.public_key) { let validation_err_msg = format!("Public key {} is invalid: {}", &peer.public_key, e); warn!("{}", validation_err_msg); return Err(Flash::error(Redirect::to(uri!(home)), validation_err_msg)); } else { info!("Public key {} is valid.", &peer.public_key); match sbot::unfollow_if_not_following(&peer.public_key).await { Ok(_) => (), Err(e) => { warn!("{}", e); return Err(Flash::error(Redirect::to(uri!(home)), e)); } } } Ok(Redirect::to(uri!(home))) }