2022-09-24 16:31:21 +00:00
|
|
|
use log::{info, warn};
|
2022-09-24 14:53:52 +00:00
|
|
|
|
2022-09-24 16:31:21 +00:00
|
|
|
use rocket::{form::Form, get, post, response::{Redirect, Flash}, uri, FromForm, request::FlashMessage};
|
2022-09-24 14:53:52 +00:00
|
|
|
use rocket_dyn_templates::{context, Template};
|
2022-09-24 10:23:54 +00:00
|
|
|
|
|
|
|
use crate::sbot;
|
2022-09-24 16:31:21 +00:00
|
|
|
use crate::utils;
|
2022-09-24 10:23:54 +00:00
|
|
|
|
2022-09-24 14:53:52 +00:00
|
|
|
#[derive(FromForm)]
|
|
|
|
pub struct PeerForm {
|
|
|
|
pub public_key: String,
|
|
|
|
}
|
|
|
|
|
2022-09-24 10:23:54 +00:00
|
|
|
#[get("/")]
|
2022-09-24 16:31:21 +00:00
|
|
|
pub async fn home(flash: Option<FlashMessage<'_>>) -> Template {
|
2022-09-24 14:53:52 +00:00
|
|
|
let whoami = match sbot::whoami().await {
|
2022-09-24 10:23:54 +00:00
|
|
|
Ok(id) => id,
|
|
|
|
Err(e) => format!("whoami call failed: {}", e),
|
2022-09-24 14:53:52 +00:00
|
|
|
};
|
2022-09-24 16:31:21 +00:00
|
|
|
Template::render("base", context! { whoami, flash })
|
2022-09-24 14:53:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[post("/subscribe", data = "<peer>")]
|
2022-09-24 16:31:21 +00:00
|
|
|
pub async fn subscribe_form(peer: Form<PeerForm>) -> Result<Redirect, Flash<Redirect>> {
|
2022-09-24 14:53:52 +00:00
|
|
|
info!("Subscribing to peer {}", &peer.public_key);
|
2022-09-24 16:31:21 +00:00
|
|
|
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);
|
|
|
|
if let Ok(whoami) = sbot::whoami().await {
|
|
|
|
match sbot::is_following(&whoami, &peer.public_key).await {
|
|
|
|
Ok(status) if status.as_str() == "false" => {
|
|
|
|
info!("Not currently following peer {}", &peer.public_key);
|
|
|
|
},
|
|
|
|
Ok(status) if status.as_str() == "true" => {
|
|
|
|
info!("Already following peer {}. No further action needed here.", &peer.public_key);
|
|
|
|
},
|
|
|
|
_ => (),
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
warn!("Received an error during `whoami` RPC call. Please ensure the go-sbot is running and try again.")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Ok(Redirect::to(uri!(home)))
|
2022-09-24 14:53:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[post("/unsubscribe", data = "<peer>")]
|
2022-09-24 16:31:21 +00:00
|
|
|
pub async fn unsubscribe_form(peer: Form<PeerForm>) -> Result<Redirect, Flash<Redirect>> {
|
2022-09-24 14:53:52 +00:00
|
|
|
info!("Unsubscribing to peer {}", &peer.public_key);
|
2022-09-24 16:31:21 +00:00
|
|
|
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);
|
|
|
|
if let Ok(whoami) = sbot::whoami().await {
|
|
|
|
match sbot::is_following(&whoami, &peer.public_key).await {
|
|
|
|
Ok(status) if status.as_str() == "false" => {
|
|
|
|
info!("Currently following peer {}", &peer.public_key);
|
|
|
|
},
|
|
|
|
Ok(status) if status.as_str() == "true" => {
|
|
|
|
info!("Already not following peer {}. No further action needed here.", &peer.public_key);
|
|
|
|
},
|
|
|
|
_ => (),
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
warn!("Received an error during `whoami` RPC call. Please ensure the go-sbot is running and try again.")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Ok(Redirect::to(uri!(home)))
|
2022-09-24 10:23:54 +00:00
|
|
|
}
|