lykin_playalong/src/routes.rs

63 lines
2.2 KiB
Rust
Raw Normal View History

use log::{info, warn};
2022-09-24 14:53:52 +00:00
use rocket::{form::Form, get, post, response::{Redirect, Flash}, uri, FromForm, request::FlashMessage, State};
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;
use crate::utils;
use crate::db::Database;
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("/")]
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
};
Template::render("base", context! { whoami, flash })
2022-09-24 14:53:52 +00:00
}
#[post("/subscribe", data = "<peer>")]
pub async fn subscribe_form(db: &State<Database>, peer: Form<PeerForm>) -> Result<Redirect, Flash<Redirect>> {
2022-09-24 14:53:52 +00:00
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)))
2022-09-24 14:53:52 +00:00
}
#[post("/unsubscribe", data = "<peer>")]
pub async fn unsubscribe_form(db: &State<Database>, peer: Form<PeerForm>) -> Result<Redirect, Flash<Redirect>> {
2022-09-24 14:53:52 +00:00
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)))
2022-09-24 10:23:54 +00:00
}