Add route to download firmware on device
This commit is contained in:
		@@ -25,6 +25,12 @@ pub fn save_update(
 | 
				
			|||||||
    Ok(())
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Get the content of an OTA update
 | 
				
			||||||
 | 
					pub fn get_ota_update(platform: OTAPlatform, version: &semver::Version) -> anyhow::Result<Vec<u8>> {
 | 
				
			||||||
 | 
					    let path = AppConfig::get().path_ota_update(platform, version);
 | 
				
			||||||
 | 
					    Ok(std::fs::read(path)?)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Get the list of OTA software updates for a platform
 | 
					/// Get the list of OTA software updates for a platform
 | 
				
			||||||
pub fn get_ota_updates_for_platform(platform: OTAPlatform) -> anyhow::Result<Vec<OTAUpdate>> {
 | 
					pub fn get_ota_updates_for_platform(platform: OTAPlatform) -> anyhow::Result<Vec<OTAUpdate>> {
 | 
				
			||||||
    let ota_path = AppConfig::get().ota_platform_dir(platform);
 | 
					    let ota_path = AppConfig::get().ota_platform_dir(platform);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										21
									
								
								central_backend/src/server/devices_api/devices_ota.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								central_backend/src/server/devices_api/devices_ota.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					use crate::ota::ota_manager;
 | 
				
			||||||
 | 
					use crate::ota::ota_update::OTAPlatform;
 | 
				
			||||||
 | 
					use crate::server::custom_error::HttpResult;
 | 
				
			||||||
 | 
					use actix_web::{web, HttpResponse};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(serde::Deserialize)]
 | 
				
			||||||
 | 
					pub struct FirmwarePath {
 | 
				
			||||||
 | 
					    platform: OTAPlatform,
 | 
				
			||||||
 | 
					    version: semver::Version,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Download firmware update
 | 
				
			||||||
 | 
					pub async fn retrieve_firmware(path: web::Path<FirmwarePath>) -> HttpResult {
 | 
				
			||||||
 | 
					    if !ota_manager::update_exists(path.platform, &path.version)? {
 | 
				
			||||||
 | 
					        return Ok(HttpResponse::NotFound().json("The requested firmware was not found!"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let firmware = ota_manager::get_ota_update(path.platform, &path.version)?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Ok(HttpResponse::Ok().body(firmware))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
pub mod device_logging_controller;
 | 
					pub mod device_logging_controller;
 | 
				
			||||||
 | 
					pub mod devices_ota;
 | 
				
			||||||
pub mod jwt_parser;
 | 
					pub mod jwt_parser;
 | 
				
			||||||
pub mod mgmt_controller;
 | 
					pub mod mgmt_controller;
 | 
				
			||||||
pub mod utils_controller;
 | 
					pub mod utils_controller;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,9 @@ use crate::constants;
 | 
				
			|||||||
use crate::crypto::pki;
 | 
					use crate::crypto::pki;
 | 
				
			||||||
use crate::energy::energy_actor::EnergyActorAddr;
 | 
					use crate::energy::energy_actor::EnergyActorAddr;
 | 
				
			||||||
use crate::server::auth_middleware::AuthChecker;
 | 
					use crate::server::auth_middleware::AuthChecker;
 | 
				
			||||||
use crate::server::devices_api::{device_logging_controller, mgmt_controller, utils_controller};
 | 
					use crate::server::devices_api::{
 | 
				
			||||||
 | 
					    device_logging_controller, devices_ota, 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 crate::server::web_app_controller;
 | 
				
			||||||
@@ -251,6 +253,10 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()>
 | 
				
			|||||||
                "/devices_api/mgmt/sync",
 | 
					                "/devices_api/mgmt/sync",
 | 
				
			||||||
                web::post().to(mgmt_controller::sync_device),
 | 
					                web::post().to(mgmt_controller::sync_device),
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					            .route(
 | 
				
			||||||
 | 
					                "/devices_api/ota/{platform}/{version}",
 | 
				
			||||||
 | 
					                web::get().to(devices_ota::retrieve_firmware),
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
            .route(
 | 
					            .route(
 | 
				
			||||||
                "/devices_api/logging/record",
 | 
					                "/devices_api/logging/record",
 | 
				
			||||||
                web::post().to(device_logging_controller::report_log),
 | 
					                web::post().to(device_logging_controller::report_log),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user