| 408 | } |
| 409 | |
| 410 | async fn update_keys( |
| 411 | &self, |
| 412 | request: Request<api::UpdateDeviceKeysRequest>, |
| 413 | ) -> Result<Response<()>, Status> { |
| 414 | let req_dk = match &request.get_ref().device_keys { |
| 415 | Some(v) => v, |
| 416 | None => { |
| 417 | return Err(Status::invalid_argument("device_keys is missing")); |
| 418 | } |
| 419 | }; |
| 420 | let dev_eui = EUI64::from_str(&req_dk.dev_eui).map_err(|e| e.status())?; |
| 421 | |
| 422 | self.validator |
| 423 | .validate( |
| 424 | request.extensions(), |
| 425 | validator::ValidateDeviceAccess::new(validator::Flag::Update, dev_eui), |
| 426 | ) |
| 427 | .await?; |
| 428 | |
| 429 | let dk = device_keys::get(&dev_eui).await.map_err(|e| e.status())?; |
| 430 | let dk = device_keys::DeviceKeys { |
| 431 | dev_eui: dk.dev_eui, |
| 432 | created_at: dk.created_at, |
| 433 | dev_nonces: dk.dev_nonces, |
| 434 | join_nonce: dk.join_nonce, |
| 435 | nwk_key: AES128Key::from_str(&req_dk.nwk_key).map_err(|e| e.status())?, |
| 436 | app_key: AES128Key::from_str(&req_dk.app_key).map_err(|e| e.status())?, |
| 437 | gen_app_key: AES128Key::from_str(&req_dk.gen_app_key).map_err(|e| e.status())?, |
| 438 | ..Default::default() |
| 439 | }; |
| 440 | let _ = device_keys::update(dk).await.map_err(|e| e.status())?; |
| 441 | |
| 442 | let mut resp = Response::new(()); |
| 443 | resp.metadata_mut() |
| 444 | .insert("x-log-dev_eui", req_dk.dev_eui.parse().unwrap()); |
| 445 | |
| 446 | Ok(resp) |
| 447 | } |
| 448 | |
| 449 | async fn delete_keys( |
| 450 | &self, |