use peach_lib::sbot::SbotStatus; use rouille::{post_input, try_or_400, Request, Response}; use crate::utils::{flash::FlashResponse, sbot}; // ROUTE: /scuttlebutt/publish /// Publish a public Scuttlebutt post. /// /// Parse the post text from the submitted form and publish the message. /// Redirect to the profile page of the PeachCloud local identity with a flash /// message describing the outcome of the action (may be successful or /// unsuccessful). pub fn handle_form(request: &Request) -> Response { // query the request body for form data // return a 400 error if the admin_id field is missing let data = try_or_400!(post_input!(request, { text: String, })); let (flash_name, flash_msg) = match SbotStatus::read() { Ok(status) if status.state == Some("active".to_string()) => { match sbot::publish_public_post(data.text) { Ok(success_msg) => ( "flash_name=success".to_string(), format!("flash_msg={}", success_msg), ), Err(error_msg) => ( "flash_name=error".to_string(), format!("flash_msg={}", error_msg), ), } } _ => ( "flash_name=warning".to_string(), "Public posting is unavailable.".to_string(), ), }; Response::redirect_303("/scuttlebutt/profile").add_flash(flash_name, flash_msg) }