use rouille::{router, Request, Response}; use crate::{ routes, templates, utils::{cookie::CookieResponse, flash::FlashResponse}, SessionData, }; // TODO: add mount_peachcloud_routes() // https://github.com/tomaka/rouille/issues/232#issuecomment-919225104 /// Define the PeachPub router. /// /// Takes an incoming request and matches on the defined routes, /// returning either a template or a redirect. /// /// All of these routes require the user to be authenticated. See the /// `public_router` for publically-accessible, authentication-related routes. /// /// Excludes settings and status routes related to networking and the device /// (memory, hard disk, CPU etc.). pub fn mount_peachpub_routes( request: &Request, session_data: &mut Option, ) -> Response { router!(request, (GET) (/) => { Response::html(routes::home::build_template()) // reset the back_url cookie each time we visit the homepage .reset_cookie("back_url") }, (GET) (/auth/change) => { // build the html template Response::html(routes::authentication::change::build_template(request)) // reset the flash msg cookies in the response object .reset_flash() }, (POST) (/auth/change) => { routes::authentication::change::handle_form(request) }, (GET) (/auth/logout) => { routes::authentication::logout::deauthenticate(session_data) }, (GET) (/guide) => { Response::html(routes::guide::build_template()) }, (POST) (/scuttlebutt/block) => { routes::scuttlebutt::block::handle_form(request) }, (GET) (/scuttlebutt/blocks) => { Response::html(routes::scuttlebutt::blocks::build_template()) // add a back_url cookie to allow the path of the back button // to be set correctly on the /scuttlebutt/profile page .add_cookie("back_url=/scuttlebutt/blocks") }, (POST) (/scuttlebutt/follow) => { routes::scuttlebutt::follow::handle_form(request) }, (GET) (/scuttlebutt/follows) => { Response::html(routes::scuttlebutt::follows::build_template()) // add a back_url cookie to allow the path of the back button // to be set correctly on the /scuttlebutt/profile page .add_cookie("back_url=/scuttlebutt/follows") }, (GET) (/scuttlebutt/friends) => { Response::html(routes::scuttlebutt::friends::build_template()) // add a back_url cookie to allow the path of the back button // to be set correctly on the /scuttlebutt/profile page .add_cookie("back_url=/scuttlebutt/friends") }, (GET) (/scuttlebutt/invites) => { Response::html(routes::scuttlebutt::invites::build_template(request)) .reset_flash() }, (POST) (/scuttlebutt/invites) => { routes::scuttlebutt::invites::handle_form(request) }, (GET) (/scuttlebutt/peers) => { Response::html(routes::scuttlebutt::peers::build_template()) }, (GET) (/scuttlebutt/private) => { Response::html(routes::scuttlebutt::private::build_template(request, None)) }, (POST) (/scuttlebutt/private) => { routes::scuttlebutt::private::handle_form(request) }, (GET) (/scuttlebutt/private/{ssb_id: String}) => { Response::html(routes::scuttlebutt::private::build_template(request, Some(ssb_id))) }, (GET) (/scuttlebutt/profile) => { Response::html(routes::scuttlebutt::profile::build_template(request, None)) .reset_flash() }, (GET) (/scuttlebutt/profile/update) => { Response::html(routes::scuttlebutt::profile_update::build_template(request)) .reset_flash() }, (POST) (/scuttlebutt/profile/update) => { routes::scuttlebutt::profile_update::handle_form(request) }, (GET) (/scuttlebutt/profile/{ssb_id: String}) => { Response::html(routes::scuttlebutt::profile::build_template(request, Some(ssb_id))) }, (POST) (/scuttlebutt/publish) => { routes::scuttlebutt::publish::handle_form(request) }, (GET) (/scuttlebutt/search) => { Response::html(routes::scuttlebutt::search::build_template(request)) .reset_flash() }, (POST) (/scuttlebutt/search) => { routes::scuttlebutt::search::handle_form(request) // add a back_url cookie to allow the path of the back button // to be set correctly on the /scuttlebutt/profile page .add_cookie("back_url=/scuttlebutt/search") }, (POST) (/scuttlebutt/unblock) => { routes::scuttlebutt::unblock::handle_form(request) }, (POST) (/scuttlebutt/unfollow) => { routes::scuttlebutt::unfollow::handle_form(request) }, (GET) (/settings) => { Response::html(routes::settings::menu::build_template()) }, (GET) (/settings/admin) => { Response::html(routes::settings::admin::menu::build_template()) }, (POST) (/settings/admin/add) => { routes::settings::admin::add::handle_form(request) }, (GET) (/settings/admin/configure) => { Response::html(routes::settings::admin::configure::build_template(request)) .reset_flash() }, (POST) (/settings/admin/delete) => { routes::settings::admin::delete::handle_form(request) }, (GET) (/settings/power) => { Response::html(routes::settings::power::menu::build_template(request)) }, (GET) (/settings/power/reboot) => { routes::settings::power::reboot::handle_reboot() }, (GET) (/settings/power/shutdown) => { routes::settings::power::shutdown::handle_shutdown() }, (GET) (/settings/scuttlebutt) => { Response::html(routes::settings::scuttlebutt::menu::build_template(request)) .reset_flash() }, (GET) (/settings/scuttlebutt/restart) => { routes::settings::scuttlebutt::restart::restart_sbot() }, (GET) (/settings/scuttlebutt/start) => { routes::settings::scuttlebutt::start::start_sbot() }, (GET) (/settings/scuttlebutt/stop) => { routes::settings::scuttlebutt::stop::stop_sbot() }, (GET) (/settings/scuttlebutt/configure) => { Response::html(routes::settings::scuttlebutt::configure::build_template(request)) .reset_flash() }, (POST) (/settings/scuttlebutt/configure) => { routes::settings::scuttlebutt::configure::handle_form(request, false) }, (POST) (/settings/scuttlebutt/configure/restart) => { routes::settings::scuttlebutt::configure::handle_form(request, true) }, (GET) (/settings/scuttlebutt/configure/default) => { routes::settings::scuttlebutt::default::write_config() }, (GET) (/settings/network) => { Response::html(routes::settings::network::menu::build_template(request)).reset_flash() }, (GET) (/settings/network/dns) => { Response::html(routes::settings::network::configure_dns::build_template(request)).reset_flash() }, (POST) (/settings/network/dns) => { routes::settings::network::configure_dns::handle_form(request) }, (GET) (/settings/network/wifi) => { Response::html(routes::settings::network::list_aps::build_template()) }, (GET) (/settings/network/wifi/add) => { Response::html(routes::settings::network::add_ap::build_template(request, None)).reset_flash() }, (POST) (/settings/network/wifi/add) => { routes::settings::network::add_ap::handle_form(request) }, (GET) (/settings/network/wifi/add/{ssid: String}) => { Response::html(routes::settings::network::add_ap::build_template(request, Some(ssid))).reset_flash() }, (GET) (/settings/network/wifi/modify) => { Response::html(routes::settings::network::modify_ap::build_template(request, None)).reset_flash() }, (POST) (/settings/network/wifi/modify) => { routes::settings::network::modify_ap::handle_form(request) }, (GET) (/settings/network/wifi/modify/{ssid: String}) => { Response::html(routes::settings::network::modify_ap::build_template(request, Some(ssid))).reset_flash() }, (GET) (/settings/network/wifi/{ssid: String}) => { Response::html(routes::settings::network::ap_details::build_template(request, ssid)) }, (GET) (/settings/theme/{theme: String}) => { routes::settings::theme::set_theme(theme) }, (GET) (/status) => { Response::html(routes::status::device::build_template()) }, (GET) (/status/scuttlebutt) => { Response::html(routes::status::scuttlebutt::build_template()).add_cookie("back_url=/status/scuttlebutt") }, (GET) (/status/network) => { Response::html(routes::status::network::build_template()) }, // render the not_found template and set a 404 status code if none of // the other blocks matches the request _ => Response::html(templates::not_found::build_template()).with_status_code(404) ) }