Can build central in production mode
This commit is contained in:
@ -8,5 +8,6 @@ pub mod devices_api;
|
||||
pub mod servers;
|
||||
pub mod unsecure_server;
|
||||
pub mod web_api;
|
||||
pub mod web_app_controller;
|
||||
|
||||
pub type WebEnergyActor = web::Data<EnergyActorAddr>;
|
||||
|
@ -6,6 +6,7 @@ use crate::server::auth_middleware::AuthChecker;
|
||||
use crate::server::devices_api::{mgmt_controller, utils_controller};
|
||||
use crate::server::unsecure_server::*;
|
||||
use crate::server::web_api::*;
|
||||
use crate::server::web_app_controller;
|
||||
use actix_cors::Cors;
|
||||
use actix_identity::config::LogoutBehaviour;
|
||||
use actix_identity::IdentityMiddleware;
|
||||
@ -105,7 +106,7 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()>
|
||||
.app_data(web::Data::new(RemoteIPConfig {
|
||||
proxy: AppConfig::get().proxy_ip.clone(),
|
||||
}))
|
||||
.route("/", web::get().to(server_controller::secure_home))
|
||||
//.route("/", web::get().to(server_controller::secure_home))
|
||||
// Web API
|
||||
// Server controller
|
||||
.route(
|
||||
@ -181,6 +182,13 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()>
|
||||
"/devices_api/mgmt/get_certificate",
|
||||
web::get().to(mgmt_controller::get_certificate),
|
||||
)
|
||||
// Web app
|
||||
.route("/", web::get().to(web_app_controller::root_index))
|
||||
.route(
|
||||
"/assets/{tail:.*}",
|
||||
web::get().to(web_app_controller::serve_assets_content),
|
||||
)
|
||||
.route("/{tail:.*}", web::get().to(web_app_controller::root_index))
|
||||
})
|
||||
.bind_openssl(&AppConfig::get().listen_address, builder)?
|
||||
.run()
|
||||
|
46
central_backend/src/server/web_app_controller.rs
Normal file
46
central_backend/src/server/web_app_controller.rs
Normal file
@ -0,0 +1,46 @@
|
||||
#[cfg(debug_assertions)]
|
||||
pub use serve_static_debug::{root_index, serve_assets_content};
|
||||
#[cfg(not(debug_assertions))]
|
||||
pub use serve_static_release::{root_index, serve_assets_content};
|
||||
|
||||
#[cfg(debug_assertions)]
|
||||
mod serve_static_debug {
|
||||
use actix_web::{HttpResponse, Responder};
|
||||
|
||||
pub async fn root_index() -> impl Responder {
|
||||
HttpResponse::Ok()
|
||||
.body("Solar energy secure home: Hello world! Debug=on for Solar platform!")
|
||||
}
|
||||
|
||||
pub async fn serve_assets_content() -> impl Responder {
|
||||
HttpResponse::NotFound().body("Hello world! Static assets are not served in debug mode")
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(debug_assertions))]
|
||||
mod serve_static_release {
|
||||
use actix_web::{web, HttpResponse, Responder};
|
||||
use rust_embed::RustEmbed;
|
||||
|
||||
#[derive(RustEmbed)]
|
||||
#[folder = "static/"]
|
||||
struct Asset;
|
||||
|
||||
fn handle_embedded_file(path: &str, can_fallback: bool) -> HttpResponse {
|
||||
match (Asset::get(path), can_fallback) {
|
||||
(Some(content), _) => HttpResponse::Ok()
|
||||
.content_type(mime_guess::from_path(path).first_or_octet_stream().as_ref())
|
||||
.body(content.data.into_owned()),
|
||||
(None, false) => HttpResponse::NotFound().body("404 Not Found"),
|
||||
(None, true) => handle_embedded_file("index.html", false),
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn root_index() -> impl Responder {
|
||||
handle_embedded_file("index.html", false)
|
||||
}
|
||||
|
||||
pub async fn serve_assets_content(path: web::Path<String>) -> impl Responder {
|
||||
handle_embedded_file(&format!("assets/{}", path.as_ref()), false)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user