| 66 | } |
| 67 | |
| 68 | async fn add_device( |
| 69 | &self, |
| 70 | request: Request<api::AddRelayDeviceRequest>, |
| 71 | ) -> Result<Response<()>, Status> { |
| 72 | let req = request.get_ref(); |
| 73 | let relay_dev_eui = EUI64::from_str(&req.relay_dev_eui).map_err(|e| e.status())?; |
| 74 | let device_dev_eui = EUI64::from_str(&req.device_dev_eui).map_err(|e| e.status())?; |
| 75 | |
| 76 | self.validator |
| 77 | .validate( |
| 78 | request.extensions(), |
| 79 | validator::ValidateDeviceAccess::new(validator::Flag::Update, relay_dev_eui), |
| 80 | ) |
| 81 | .await?; |
| 82 | self.validator |
| 83 | .validate( |
| 84 | request.extensions(), |
| 85 | validator::ValidateDeviceAccess::new(validator::Flag::Update, device_dev_eui), |
| 86 | ) |
| 87 | .await?; |
| 88 | |
| 89 | relay::add_device(relay_dev_eui, device_dev_eui) |
| 90 | .await |
| 91 | .map_err(|e| e.status())?; |
| 92 | |
| 93 | let mut resp = Response::new(()); |
| 94 | resp.metadata_mut() |
| 95 | .insert("x-log-relay_dev_eui", req.relay_dev_eui.parse().unwrap()); |
| 96 | resp.metadata_mut() |
| 97 | .insert("x-log-device_dev_eui", req.device_dev_eui.parse().unwrap()); |
| 98 | |
| 99 | Ok(resp) |
| 100 | } |
| 101 | |
| 102 | async fn remove_device( |
| 103 | &self, |