mount blobstore and add theme support for all routes

This commit is contained in:
glyph 2022-03-23 11:41:47 +02:00
parent 41bd39d422
commit 3a05396afb
2 changed files with 123 additions and 202 deletions

View File

@ -32,7 +32,7 @@ use log::info;
// crate-local dependencies
use config::Config;
use utils::theme::Theme;
use utils::{sbot, theme::Theme};
pub type BoxError = Box<dyn std::error::Error>;
@ -50,6 +50,7 @@ pub struct RocketConfig {
}
*/
/// The path of the application configuration parameters.
static CONFIG_PATH: &str = "./config";
lazy_static! {
@ -116,12 +117,35 @@ fn main() {
// static file server
// matches on assets in the `static` directory
let response = rouille::match_assets(request, "static");
if response.is_success() {
return response;
let static_response = rouille::match_assets(request, "static");
if static_response.is_success() {
return static_response;
}
// set the `.ssb-go` path in order to mount the blob fileserver
let ssb_path = sbot::get_go_ssb_path().expect("define ssb-go dir path");
let blobstore = format!("{}/blobs/sha256", ssb_path);
// blobstore file server
// removes the /blob url prefix and serves blobs from blobstore
// matches on assets in the `static` directory
if let Some(request) = request.remove_prefix("/blob") {
return rouille::match_assets(&request, &blobstore);
}
// TODO: mount the blobstore fileserver (see old code in src/router.rs)
router::mount_peachpub_routes(request)
});
}
// TODO: write a test for each route
// look at `init_test_rocket()` from old code
// https://docs.rs/rouille/latest/rouille/struct.Request.html#method.fake_http
/*
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}
*/

View File

@ -1,6 +1,9 @@
use rouille::{router, Request, Response};
use crate::{routes, utils::flash::FlashResponse};
use crate::{routes, templates, utils::flash::FlashResponse};
// TODO: add mount_peachcloud_routes()
// https://github.com/tomaka/rouille/issues/232#issuecomment-919225104
/// Define the PeachPub router.
///
@ -52,10 +55,95 @@ pub fn mount_peachpub_routes(request: &Request) -> Response {
Response::html(routes::guide::build_template())
},
(GET) (/scuttlebutt/blocks) => {
Response::html(routes::scuttlebutt::blocks::build_template())
},
(GET) (/scuttlebutt/follows) => {
Response::html(routes::scuttlebutt::follows::build_template())
},
(GET) (/scuttlebutt/friends) => {
Response::html(routes::scuttlebutt::friends::build_template())
},
(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)
},
(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/scuttlebutt) => {
Response::html(routes::settings::scuttlebutt::menu::build_template(request))
.reset_flash()
@ -86,207 +174,16 @@ pub fn mount_peachpub_routes(request: &Request) -> Response {
routes::settings::scuttlebutt::configure::handle_form(request, true)
},
(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) (/scuttlebutt/blocks) => {
Response::html(routes::scuttlebutt::blocks::build_template())
},
(GET) (/scuttlebutt/follows) => {
Response::html(routes::scuttlebutt::follows::build_template())
},
(GET) (/scuttlebutt/friends) => {
Response::html(routes::scuttlebutt::friends::build_template())
},
(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/profile) => {
Response::html(routes::scuttlebutt::profile::build_template(request, None))
},
(GET) (/scuttlebutt/profile/update) => {
Response::html(routes::scuttlebutt::profile_update::build_template(request))
},
(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)))
},
(GET) (/scuttlebutt/search) => {
Response::html(routes::scuttlebutt::search::build_template(request))
.reset_flash()
},
(POST) (/scuttlebutt/search) => {
routes::scuttlebutt::search::handle_form(request)
(GET) (/settings/theme/{theme: String}) => {
routes::settings::theme::set_theme(theme)
},
(GET) (/status/scuttlebutt) => {
Response::html(routes::status::scuttlebutt::build_template())
},
// The code block is called if none of the other blocks matches the request.
// We return an empty response with a 404 status code.
_ => Response::empty_404()
// 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)
)
}
/*
use rocket::{catchers, fs::FileServer, routes, Build, Rocket};
use rocket_dyn_templates::Template;
use crate::{
routes::{
authentication::*,
catchers::*,
index::*,
scuttlebutt::*,
settings::{admin::*, dns::*, menu::*, network::*, scuttlebutt::*, theme::*},
status::{device::*, network::*, scuttlebutt::*},
},
utils,
};
/// Create a Rocket instance and mount PeachPub routes, fileserver and
/// catchers. This gives us everything we need to run PeachPub and excludes
/// settings and status routes related to networking and the device (memory,
/// hard disk, CPU etc.).
pub fn mount_peachpub_routes(rocket: Rocket<Build>) -> Rocket<Build> {
// set the `.ssb-go` path in order to mount the blob fileserver
let ssb_path = utils::get_go_ssb_path().expect("define ssb-go dir path");
let blobstore = format!("{}/blobs/sha256", ssb_path);
rocket
.mount(
"/",
routes![
guide,
home,
login,
login_post,
logout,
settings_menu,
set_theme,
],
)
.mount(
"/settings/admin",
routes![
admin_menu,
configure_admin,
add_admin_post,
delete_admin_post,
change_password,
change_password_post,
reset_password,
reset_password_post,
forgot_password_page,
send_password_reset_post,
],
)
.mount(
"/settings/scuttlebutt",
routes![
ssb_settings_menu,
configure_sbot,
configure_sbot_default,
configure_sbot_post,
restart_sbot,
start_sbot,
stop_sbot
],
)
.mount(
"/scuttlebutt",
routes![
invites,
create_invite,
peers,
search,
search_post,
friends,
follows,
blocks,
profile,
update_profile,
update_profile_post,
private,
private_post,
follow,
unfollow,
block,
unblock,
publish,
],
)
.mount("/status", routes![scuttlebutt_status])
.mount("/", FileServer::from("static"))
.mount("/blob", FileServer::from(blobstore).rank(-1))
.register("/", catchers![not_found, internal_error, forbidden])
.attach(Template::fairing())
}
/// Create a Rocket instance with PeachPub routes, fileserver and catchers by
/// calling `mount_peachpub_routes()` and then mount all additional routes
/// required to run a complete PeachCloud build.
pub fn mount_peachcloud_routes(rocket: Rocket<Build>) -> Rocket<Build> {
mount_peachpub_routes(rocket)
.mount("/", routes![reboot_cmd, shutdown_cmd, power_menu,])
.mount(
"/settings/network",
routes![
add_credentials,
connect_wifi,
configure_dns,
configure_dns_post,
disconnect_wifi,
deploy_ap,
deploy_client,
forget_wifi,
network_home,
add_ssid,
add_wifi,
network_detail,
wifi_list,
wifi_password,
wifi_set_password,
wifi_usage,
wifi_usage_alerts,
wifi_usage_reset,
],
)
.mount("/status", routes![device_status, network_status])
}
*/