Add route to download firmware on device
This commit is contained in:
		@@ -25,6 +25,12 @@ pub fn save_update(
 | 
			
		||||
    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
 | 
			
		||||
pub fn get_ota_updates_for_platform(platform: OTAPlatform) -> anyhow::Result<Vec<OTAUpdate>> {
 | 
			
		||||
    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 devices_ota;
 | 
			
		||||
pub mod jwt_parser;
 | 
			
		||||
pub mod mgmt_controller;
 | 
			
		||||
pub mod utils_controller;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,9 @@ use crate::constants;
 | 
			
		||||
use crate::crypto::pki;
 | 
			
		||||
use crate::energy::energy_actor::EnergyActorAddr;
 | 
			
		||||
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::web_api::*;
 | 
			
		||||
use crate::server::web_app_controller;
 | 
			
		||||
@@ -251,6 +253,10 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()>
 | 
			
		||||
                "/devices_api/mgmt/sync",
 | 
			
		||||
                web::post().to(mgmt_controller::sync_device),
 | 
			
		||||
            )
 | 
			
		||||
            .route(
 | 
			
		||||
                "/devices_api/ota/{platform}/{version}",
 | 
			
		||||
                web::get().to(devices_ota::retrieve_firmware),
 | 
			
		||||
            )
 | 
			
		||||
            .route(
 | 
			
		||||
                "/devices_api/logging/record",
 | 
			
		||||
                web::post().to(device_logging_controller::report_log),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user