mount blobstore and add theme support for all routes
This commit is contained in:
parent
41bd39d422
commit
3a05396afb
|
@ -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);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -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])
|
||||
}
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue