Notify devices of available updates through sync endpoint

This commit is contained in:
2024-10-05 19:44:32 +02:00
parent d38040cb98
commit 37844ae5fa
3 changed files with 33 additions and 3 deletions

View File

@ -2,12 +2,15 @@ use crate::app_config::AppConfig;
use crate::devices::device::{DeviceId, DeviceInfo};
use crate::energy::energy_actor;
use crate::energy::energy_actor::RelaySyncStatus;
use crate::ota::ota_manager;
use crate::ota::ota_update::OTAPlatform;
use crate::server::custom_error::HttpResult;
use crate::server::devices_api::jwt_parser::JWTRequest;
use crate::server::WebEnergyActor;
use actix_web::{web, HttpResponse};
use openssl::nid::Nid;
use openssl::x509::X509Req;
use std::str::FromStr;
#[derive(Debug, serde::Deserialize)]
pub struct EnrollRequest {
@ -135,6 +138,7 @@ struct Claims {
#[derive(serde::Serialize)]
struct SyncResult {
relays: Vec<RelaySyncStatus>,
available_update: Option<semver::Version>,
}
/// Synchronize device
@ -142,8 +146,25 @@ pub async fn sync_device(body: web::Json<JWTRequest>, actor: WebEnergyActor) ->
let (device, claims) = body.0.parse_jwt::<Claims>(actor.clone()).await?;
let relays = actor
.send(energy_actor::SynchronizeDevice(device.id, claims.info))
.send(energy_actor::SynchronizeDevice(
device.id,
claims.info.clone(),
))
.await??;
Ok(HttpResponse::Ok().json(SyncResult { relays }))
let mut available_update = None;
// Check if the version is available
if let Some(desired) = device.desired_version {
if claims.info.version < desired
&& ota_manager::update_exists(OTAPlatform::from_str(&claims.info.reference)?, &desired)?
{
available_update = Some(desired);
}
}
Ok(HttpResponse::Ok().json(SyncResult {
relays,
available_update,
}))
}