add standalone check before mounting routes
This commit is contained in:
@ -37,6 +37,7 @@ maintenance = { status = "actively-developed" }
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
env_logger = "0.8"
|
env_logger = "0.8"
|
||||||
|
lazy_static = "1.4.0"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
nest = "1.0.0"
|
nest = "1.0.0"
|
||||||
peach-lib = { path = "../peach-lib" }
|
peach-lib = { path = "../peach-lib" }
|
||||||
|
@ -25,106 +25,36 @@
|
|||||||
#![feature(proc_macro_hygiene, decl_macro)]
|
#![feature(proc_macro_hygiene, decl_macro)]
|
||||||
|
|
||||||
pub mod error;
|
pub mod error;
|
||||||
|
mod router;
|
||||||
pub mod routes;
|
pub mod routes;
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests;
|
mod tests;
|
||||||
pub mod utils;
|
pub mod utils;
|
||||||
|
|
||||||
|
use std::{env, process};
|
||||||
|
|
||||||
|
use lazy_static::lazy_static;
|
||||||
use log::{error, info};
|
use log::{error, info};
|
||||||
use std::process;
|
use rocket::{Build, Rocket};
|
||||||
|
|
||||||
use rocket::{catchers, fs::FileServer, routes, Build, Rocket};
|
|
||||||
use rocket_dyn_templates::Template;
|
|
||||||
|
|
||||||
use crate::routes::authentication::*;
|
|
||||||
use crate::routes::catchers::*;
|
|
||||||
use crate::routes::index::*;
|
|
||||||
use crate::routes::scuttlebutt::*;
|
|
||||||
use crate::routes::status::device::*;
|
|
||||||
use crate::routes::status::network::*;
|
|
||||||
|
|
||||||
use crate::routes::settings::admin::*;
|
|
||||||
use crate::routes::settings::dns::*;
|
|
||||||
use crate::routes::settings::menu::*;
|
|
||||||
use crate::routes::settings::network::*;
|
|
||||||
use crate::routes::settings::scuttlebutt::*;
|
|
||||||
|
|
||||||
pub type BoxError = Box<dyn std::error::Error>;
|
pub type BoxError = Box<dyn std::error::Error>;
|
||||||
|
|
||||||
/// Create rocket instance & mount all routes.
|
lazy_static! {
|
||||||
fn init_rocket() -> Rocket<Build> {
|
// determine run-mode from env var; default to standalone mode (aka peachpub)
|
||||||
rocket::build()
|
static ref STANDALONE_MODE: bool = match env::var("PEACH_STANDALONE_MODE") {
|
||||||
// GENERAL HTML ROUTES
|
// parse the value to a boolean; default to true for any error
|
||||||
.mount(
|
Ok(val) => val.parse().unwrap_or(true),
|
||||||
"/",
|
Err(_) => true
|
||||||
routes![
|
};
|
||||||
help,
|
}
|
||||||
home,
|
|
||||||
login,
|
pub fn init_rocket() -> Rocket<Build> {
|
||||||
login_post,
|
info!("Initializing Rocket");
|
||||||
logout,
|
if *STANDALONE_MODE {
|
||||||
reboot_cmd,
|
router::build_minimal_rocket()
|
||||||
shutdown_cmd,
|
} else {
|
||||||
power_menu,
|
router::build_complete_rocket()
|
||||||
settings_menu,
|
}
|
||||||
],
|
|
||||||
)
|
|
||||||
// STATUS HTML ROUTES
|
|
||||||
.mount("/status", routes![device_status, network_status])
|
|
||||||
// ADMIN SETTINGS HTML ROUTES
|
|
||||||
.mount(
|
|
||||||
"/settings/admin",
|
|
||||||
routes![
|
|
||||||
admin_menu,
|
|
||||||
configure_admin,
|
|
||||||
add_admin,
|
|
||||||
add_admin_post,
|
|
||||||
delete_admin_post,
|
|
||||||
change_password,
|
|
||||||
change_password_post,
|
|
||||||
reset_password,
|
|
||||||
reset_password_post,
|
|
||||||
forgot_password_page,
|
|
||||||
send_password_reset_post,
|
|
||||||
],
|
|
||||||
)
|
|
||||||
// NETWORK SETTINGS HTML ROUTES
|
|
||||||
.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,
|
|
||||||
],
|
|
||||||
)
|
|
||||||
// SCUTTLEBUTT SETTINGS HTML ROUTES
|
|
||||||
.mount("/settings/scuttlebutt", routes![ssb_settings_menu])
|
|
||||||
// SCUTTLEBUTT SOCIAL HTML ROUTES
|
|
||||||
.mount(
|
|
||||||
"/scuttlebutt",
|
|
||||||
routes![
|
|
||||||
peers, friends, follows, followers, blocks, profile, private, follow, unfollow,
|
|
||||||
block, publish,
|
|
||||||
],
|
|
||||||
)
|
|
||||||
.mount("/", FileServer::from("static"))
|
|
||||||
.register("/", catchers![not_found, internal_error, forbidden])
|
|
||||||
.attach(Template::fairing())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Launch the peach-web rocket server.
|
/// Launch the peach-web rocket server.
|
||||||
@ -134,7 +64,6 @@ async fn main() {
|
|||||||
env_logger::init();
|
env_logger::init();
|
||||||
|
|
||||||
// initialize rocket
|
// initialize rocket
|
||||||
info!("Initializing Rocket");
|
|
||||||
let rocket = init_rocket();
|
let rocket = init_rocket();
|
||||||
|
|
||||||
// launch rocket
|
// launch rocket
|
||||||
|
142
peach-web/src/router.rs
Normal file
142
peach-web/src/router.rs
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
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::*},
|
||||||
|
status::{device::*, network::*},
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Create minimal rocket instance and mount routes. This excludes settings
|
||||||
|
/// and status routes related to networking and the device (memory,
|
||||||
|
/// hard disk, CPU etc.).
|
||||||
|
pub fn build_minimal_rocket() -> Rocket<Build> {
|
||||||
|
rocket::build()
|
||||||
|
// GENERAL HTML ROUTES
|
||||||
|
.mount(
|
||||||
|
"/",
|
||||||
|
routes![
|
||||||
|
help,
|
||||||
|
home,
|
||||||
|
login,
|
||||||
|
login_post,
|
||||||
|
logout,
|
||||||
|
reboot_cmd,
|
||||||
|
shutdown_cmd,
|
||||||
|
power_menu,
|
||||||
|
settings_menu,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
// ADMIN SETTINGS HTML ROUTES
|
||||||
|
.mount(
|
||||||
|
"/settings/admin",
|
||||||
|
routes![
|
||||||
|
admin_menu,
|
||||||
|
configure_admin,
|
||||||
|
add_admin,
|
||||||
|
add_admin_post,
|
||||||
|
delete_admin_post,
|
||||||
|
change_password,
|
||||||
|
change_password_post,
|
||||||
|
reset_password,
|
||||||
|
reset_password_post,
|
||||||
|
forgot_password_page,
|
||||||
|
send_password_reset_post,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
// SCUTTLEBUTT SETTINGS HTML ROUTES
|
||||||
|
.mount("/settings/scuttlebutt", routes![ssb_settings_menu])
|
||||||
|
// SCUTTLEBUTT SOCIAL HTML ROUTES
|
||||||
|
.mount(
|
||||||
|
"/scuttlebutt",
|
||||||
|
routes![
|
||||||
|
peers, friends, follows, followers, blocks, profile, private, follow, unfollow,
|
||||||
|
block, publish,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
// STATUS HTML ROUTES
|
||||||
|
// TODO: replace this with a route for `scuttlebutt_status`
|
||||||
|
.mount("/status", routes![device_status, network_status])
|
||||||
|
.mount("/", FileServer::from("static"))
|
||||||
|
.register("/", catchers![not_found, internal_error, forbidden])
|
||||||
|
.attach(Template::fairing())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create complete rocket instance and mount all routes.
|
||||||
|
pub fn build_complete_rocket() -> Rocket<Build> {
|
||||||
|
rocket::build()
|
||||||
|
// GENERAL HTML ROUTES
|
||||||
|
.mount(
|
||||||
|
"/",
|
||||||
|
routes![
|
||||||
|
help,
|
||||||
|
home,
|
||||||
|
login,
|
||||||
|
login_post,
|
||||||
|
logout,
|
||||||
|
reboot_cmd,
|
||||||
|
shutdown_cmd,
|
||||||
|
power_menu,
|
||||||
|
settings_menu,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
// ADMIN SETTINGS HTML ROUTES
|
||||||
|
.mount(
|
||||||
|
"/settings/admin",
|
||||||
|
routes![
|
||||||
|
admin_menu,
|
||||||
|
configure_admin,
|
||||||
|
add_admin,
|
||||||
|
add_admin_post,
|
||||||
|
delete_admin_post,
|
||||||
|
change_password,
|
||||||
|
change_password_post,
|
||||||
|
reset_password,
|
||||||
|
reset_password_post,
|
||||||
|
forgot_password_page,
|
||||||
|
send_password_reset_post,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
// NETWORK SETTINGS HTML ROUTES
|
||||||
|
.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,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
// SCUTTLEBUTT SETTINGS HTML ROUTES
|
||||||
|
.mount("/settings/scuttlebutt", routes![ssb_settings_menu])
|
||||||
|
// SCUTTLEBUTT SOCIAL HTML ROUTES
|
||||||
|
.mount(
|
||||||
|
"/scuttlebutt",
|
||||||
|
routes![
|
||||||
|
peers, friends, follows, followers, blocks, profile, private, follow, unfollow,
|
||||||
|
block, publish,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
// STATUS HTML ROUTES
|
||||||
|
.mount("/status", routes![device_status, network_status])
|
||||||
|
.mount("/", FileServer::from("static"))
|
||||||
|
.register("/", catchers![not_found, internal_error, forbidden])
|
||||||
|
.attach(Template::fairing())
|
||||||
|
}
|
Reference in New Issue
Block a user