Can build central in production mode
This commit is contained in:
		
							
								
								
									
										11
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					DOCKER_TEMP_DIR=temp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					all: frontend backend
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					frontend:
 | 
				
			||||||
 | 
						cd central_frontend && npm run build && cd ..
 | 
				
			||||||
 | 
						rm -rf central_backend/static
 | 
				
			||||||
 | 
						mv central_frontend/dist central_backend/static
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					backend: frontend
 | 
				
			||||||
 | 
						cd central_backend && cargo clippy -- -D warnings && cargo build --release
 | 
				
			||||||
							
								
								
									
										1
									
								
								central_backend/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								central_backend/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,3 +1,4 @@
 | 
				
			|||||||
target
 | 
					target
 | 
				
			||||||
.idea
 | 
					.idea
 | 
				
			||||||
storage
 | 
					storage
 | 
				
			||||||
 | 
					static
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										83
									
								
								central_backend/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										83
									
								
								central_backend/Cargo.lock
									
									
									
										generated
									
									
									
								
							@@ -610,10 +610,12 @@ dependencies = [
 | 
				
			|||||||
 "lazy_static",
 | 
					 "lazy_static",
 | 
				
			||||||
 "libc",
 | 
					 "libc",
 | 
				
			||||||
 "log",
 | 
					 "log",
 | 
				
			||||||
 | 
					 "mime_guess",
 | 
				
			||||||
 "openssl",
 | 
					 "openssl",
 | 
				
			||||||
 "openssl-sys",
 | 
					 "openssl-sys",
 | 
				
			||||||
 "rand",
 | 
					 "rand",
 | 
				
			||||||
 "reqwest",
 | 
					 "reqwest",
 | 
				
			||||||
 | 
					 "rust-embed",
 | 
				
			||||||
 "semver",
 | 
					 "semver",
 | 
				
			||||||
 "serde",
 | 
					 "serde",
 | 
				
			||||||
 "serde_json",
 | 
					 "serde_json",
 | 
				
			||||||
@@ -1441,6 +1443,16 @@ version = "0.3.17"
 | 
				
			|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
 | 
					checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "mime_guess"
 | 
				
			||||||
 | 
					version = "2.0.5"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "mime",
 | 
				
			||||||
 | 
					 "unicase",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "miniz_oxide"
 | 
					name = "miniz_oxide"
 | 
				
			||||||
version = "0.7.4"
 | 
					version = "0.7.4"
 | 
				
			||||||
@@ -1816,6 +1828,40 @@ dependencies = [
 | 
				
			|||||||
 "windows-sys 0.52.0",
 | 
					 "windows-sys 0.52.0",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "rust-embed"
 | 
				
			||||||
 | 
					version = "8.5.0"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "fa66af4a4fdd5e7ebc276f115e895611a34739a9c1c01028383d612d550953c0"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "rust-embed-impl",
 | 
				
			||||||
 | 
					 "rust-embed-utils",
 | 
				
			||||||
 | 
					 "walkdir",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "rust-embed-impl"
 | 
				
			||||||
 | 
					version = "8.5.0"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "6125dbc8867951125eec87294137f4e9c2c96566e61bf72c45095a7c77761478"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "proc-macro2",
 | 
				
			||||||
 | 
					 "quote",
 | 
				
			||||||
 | 
					 "rust-embed-utils",
 | 
				
			||||||
 | 
					 "syn",
 | 
				
			||||||
 | 
					 "walkdir",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "rust-embed-utils"
 | 
				
			||||||
 | 
					version = "8.5.0"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "sha2",
 | 
				
			||||||
 | 
					 "walkdir",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "rustc-demangle"
 | 
					name = "rustc-demangle"
 | 
				
			||||||
version = "0.1.24"
 | 
					version = "0.1.24"
 | 
				
			||||||
@@ -1890,6 +1936,15 @@ version = "1.0.18"
 | 
				
			|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
 | 
					checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "same-file"
 | 
				
			||||||
 | 
					version = "1.0.6"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "winapi-util",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "schannel"
 | 
					name = "schannel"
 | 
				
			||||||
version = "0.1.23"
 | 
					version = "0.1.23"
 | 
				
			||||||
@@ -2315,6 +2370,15 @@ version = "1.17.0"
 | 
				
			|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
 | 
					checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "unicase"
 | 
				
			||||||
 | 
					version = "2.7.0"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "version_check",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "unicode-bidi"
 | 
					name = "unicode-bidi"
 | 
				
			||||||
version = "0.3.15"
 | 
					version = "0.3.15"
 | 
				
			||||||
@@ -2391,6 +2455,16 @@ version = "0.9.4"
 | 
				
			|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
 | 
					checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "walkdir"
 | 
				
			||||||
 | 
					version = "2.5.0"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "same-file",
 | 
				
			||||||
 | 
					 "winapi-util",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "want"
 | 
					name = "want"
 | 
				
			||||||
version = "0.3.1"
 | 
					version = "0.3.1"
 | 
				
			||||||
@@ -2482,6 +2556,15 @@ dependencies = [
 | 
				
			|||||||
 "wasm-bindgen",
 | 
					 "wasm-bindgen",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "winapi-util"
 | 
				
			||||||
 | 
					version = "0.1.9"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "windows-sys 0.52.0",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "windows-core"
 | 
					name = "windows-core"
 | 
				
			||||||
version = "0.52.0"
 | 
					version = "0.52.0"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,3 +32,5 @@ semver = { version = "1.0.23", features = ["serde"] }
 | 
				
			|||||||
lazy-regex = "3.1.0"
 | 
					lazy-regex = "3.1.0"
 | 
				
			||||||
tokio = { version = "1.38.1", features = ["full"] }
 | 
					tokio = { version = "1.38.1", features = ["full"] }
 | 
				
			||||||
tokio_schedule = "0.3.2"
 | 
					tokio_schedule = "0.3.2"
 | 
				
			||||||
 | 
					mime_guess = "2.0.5"
 | 
				
			||||||
 | 
					rust-embed = "8.5.0"
 | 
				
			||||||
@@ -8,5 +8,6 @@ pub mod devices_api;
 | 
				
			|||||||
pub mod servers;
 | 
					pub mod servers;
 | 
				
			||||||
pub mod unsecure_server;
 | 
					pub mod unsecure_server;
 | 
				
			||||||
pub mod web_api;
 | 
					pub mod web_api;
 | 
				
			||||||
 | 
					pub mod web_app_controller;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub type WebEnergyActor = web::Data<EnergyActorAddr>;
 | 
					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::devices_api::{mgmt_controller, utils_controller};
 | 
				
			||||||
use crate::server::unsecure_server::*;
 | 
					use crate::server::unsecure_server::*;
 | 
				
			||||||
use crate::server::web_api::*;
 | 
					use crate::server::web_api::*;
 | 
				
			||||||
 | 
					use crate::server::web_app_controller;
 | 
				
			||||||
use actix_cors::Cors;
 | 
					use actix_cors::Cors;
 | 
				
			||||||
use actix_identity::config::LogoutBehaviour;
 | 
					use actix_identity::config::LogoutBehaviour;
 | 
				
			||||||
use actix_identity::IdentityMiddleware;
 | 
					use actix_identity::IdentityMiddleware;
 | 
				
			||||||
@@ -105,7 +106,7 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()>
 | 
				
			|||||||
            .app_data(web::Data::new(RemoteIPConfig {
 | 
					            .app_data(web::Data::new(RemoteIPConfig {
 | 
				
			||||||
                proxy: AppConfig::get().proxy_ip.clone(),
 | 
					                proxy: AppConfig::get().proxy_ip.clone(),
 | 
				
			||||||
            }))
 | 
					            }))
 | 
				
			||||||
            .route("/", web::get().to(server_controller::secure_home))
 | 
					            //.route("/", web::get().to(server_controller::secure_home))
 | 
				
			||||||
            // Web API
 | 
					            // Web API
 | 
				
			||||||
            // Server controller
 | 
					            // Server controller
 | 
				
			||||||
            .route(
 | 
					            .route(
 | 
				
			||||||
@@ -181,6 +182,13 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()>
 | 
				
			|||||||
                "/devices_api/mgmt/get_certificate",
 | 
					                "/devices_api/mgmt/get_certificate",
 | 
				
			||||||
                web::get().to(mgmt_controller::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)?
 | 
					    .bind_openssl(&AppConfig::get().listen_address, builder)?
 | 
				
			||||||
    .run()
 | 
					    .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)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -10,7 +10,6 @@ import Paper from "@mui/material/Paper";
 | 
				
			|||||||
import TextField from "@mui/material/TextField";
 | 
					import TextField from "@mui/material/TextField";
 | 
				
			||||||
import Typography from "@mui/material/Typography";
 | 
					import Typography from "@mui/material/Typography";
 | 
				
			||||||
import * as React from "react";
 | 
					import * as React from "react";
 | 
				
			||||||
import { useAlert } from "../hooks/context_providers/AlertDialogProvider";
 | 
					 | 
				
			||||||
import { useLoadingMessage } from "../hooks/context_providers/LoadingMessageProvider";
 | 
					import { useLoadingMessage } from "../hooks/context_providers/LoadingMessageProvider";
 | 
				
			||||||
import { AuthApi } from "../api/AuthApi";
 | 
					import { AuthApi } from "../api/AuthApi";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user