diff --git a/iot_config/src/route_service.rs b/iot_config/src/route_service.rs index 3ede2c637..ada31fa1a 100644 --- a/iot_config/src/route_service.rs +++ b/iot_config/src/route_service.rs @@ -122,6 +122,21 @@ impl RouteService { } } + async fn verify_request_signature_or_stream<'a, R>( + &self, + signer: &PublicKey, + request: &R, + id: OrgId<'a>, + ) -> Result<(), Status> + where + R: MsgVerify, + { + if let Ok(()) = self.verify_request_signature(signer, request, id).await { + return Ok(()); + } + self.verify_stream_request_signature(signer, request) + } + fn sign_response(&self, response: &[u8]) -> Result, Status> { self.signing_key .sign(response) @@ -418,8 +433,12 @@ impl iot_config::Route for RouteService { telemetry::count_request("route", "get-euis"); let signer = verify_public_key(&request.signer)?; - self.verify_request_signature(&signer, &request, OrgId::RouteId(&request.route_id)) - .await?; + self.verify_request_signature_or_stream( + &signer, + &request, + OrgId::RouteId(&request.route_id), + ) + .await?; let pool = self.pool.clone(); let (tx, rx) = tokio::sync::mpsc::channel(20); @@ -575,8 +594,12 @@ impl iot_config::Route for RouteService { telemetry::count_request("route", "get-devaddr-ranges"); let signer = verify_public_key(&request.signer)?; - self.verify_request_signature(&signer, &request, OrgId::RouteId(&request.route_id)) - .await?; + self.verify_request_signature_or_stream( + &signer, + &request, + OrgId::RouteId(&request.route_id), + ) + .await?; let (tx, rx) = tokio::sync::mpsc::channel(20); let pool = self.pool.clone(); @@ -739,8 +762,12 @@ impl iot_config::Route for RouteService { telemetry::count_request("route", "list-skfs"); let signer = verify_public_key(&request.signer)?; - self.verify_request_signature(&signer, &request, OrgId::RouteId(&request.route_id)) - .await?; + self.verify_request_signature_or_stream( + &signer, + &request, + OrgId::RouteId(&request.route_id), + ) + .await?; let pool = self.pool.clone(); let (tx, rx) = tokio::sync::mpsc::channel(20);