| 100 | } |
| 101 | |
| 102 | async fn remove_device( |
| 103 | &self, |
| 104 | request: Request<api::RemoveRelayDeviceRequest>, |
| 105 | ) -> Result<Response<()>, Status> { |
| 106 | let req = request.get_ref(); |
| 107 | let relay_dev_eui = EUI64::from_str(&req.relay_dev_eui).map_err(|e| e.status())?; |
| 108 | let device_dev_eui = EUI64::from_str(&req.device_dev_eui).map_err(|e| e.status())?; |
| 109 | |
| 110 | self.validator |
| 111 | .validate( |
| 112 | request.extensions(), |
| 113 | validator::ValidateDeviceAccess::new(validator::Flag::Update, relay_dev_eui), |
| 114 | ) |
| 115 | .await?; |
| 116 | self.validator |
| 117 | .validate( |
| 118 | request.extensions(), |
| 119 | validator::ValidateDeviceAccess::new(validator::Flag::Update, device_dev_eui), |
| 120 | ) |
| 121 | .await?; |
| 122 | |
| 123 | relay::remove_device(relay_dev_eui, device_dev_eui) |
| 124 | .await |
| 125 | .map_err(|e| e.status())?; |
| 126 | |
| 127 | let mut resp = Response::new(()); |
| 128 | resp.metadata_mut() |
| 129 | .insert("x-log-relay_dev_eui", req.relay_dev_eui.parse().unwrap()); |
| 130 | resp.metadata_mut() |
| 131 | .insert("x-log-device_dev_eui", req.device_dev_eui.parse().unwrap()); |
| 132 | |
| 133 | Ok(resp) |
| 134 | } |
| 135 | |
| 136 | async fn list_devices( |
| 137 | &self, |