| 581 | } |
| 582 | |
| 583 | async fn deactivate( |
| 584 | &self, |
| 585 | request: Request<api::DeactivateDeviceRequest>, |
| 586 | ) -> Result<Response<()>, Status> { |
| 587 | let req = request.get_ref(); |
| 588 | let dev_eui = EUI64::from_str(&req.dev_eui).map_err(|e| e.status())?; |
| 589 | |
| 590 | self.validator |
| 591 | .validate( |
| 592 | request.extensions(), |
| 593 | validator::ValidateDeviceAccess::new(validator::Flag::Update, dev_eui), |
| 594 | ) |
| 595 | .await?; |
| 596 | |
| 597 | device_queue::flush_for_dev_eui(&dev_eui) |
| 598 | .await |
| 599 | .map_err(|e| e.status())?; |
| 600 | |
| 601 | device::partial_update( |
| 602 | dev_eui, |
| 603 | &device::DeviceChangeset { |
| 604 | dev_addr: Some(None), |
| 605 | secondary_dev_addr: Some(None), |
| 606 | device_session: Some(None), |
| 607 | ..Default::default() |
| 608 | }, |
| 609 | ) |
| 610 | .await |
| 611 | .map_err(|e| e.status())?; |
| 612 | |
| 613 | let mut resp = Response::new(()); |
| 614 | resp.metadata_mut() |
| 615 | .insert("x-log-dev_eui", req.dev_eui.parse().unwrap()); |
| 616 | |
| 617 | Ok(resp) |
| 618 | } |
| 619 | |
| 620 | async fn get_activation( |
| 621 | &self, |