MCPcopy Create free account
hub / github.com/chirpstack/chirpstack / get_activation

Method get_activation

chirpstack/src/api/device.rs:620–688  ·  view source on GitHub ↗
(
        &self,
        request: Request<api::GetDeviceActivationRequest>,
    )

Source from the content-addressed store, hash-verified

618 }
619
620 async fn get_activation(
621 &self,
622 request: Request<api::GetDeviceActivationRequest>,
623 ) -> Result<Response<api::GetDeviceActivationResponse>, Status> {
624 let req = request.get_ref();
625 let dev_eui = EUI64::from_str(&req.dev_eui).map_err(|e| e.status())?;
626
627 self.validator
628 .validate(
629 request.extensions(),
630 validator::ValidateDeviceAccess::new(validator::Flag::Read, dev_eui),
631 )
632 .await?;
633
634 let d = device::get(&dev_eui).await.map_err(|e| e.status())?;
635 let ds = match d.get_device_session() {
636 Ok(v) => v,
637 Err(StorageError::NotFound(_)) => {
638 return Ok(Response::new(api::GetDeviceActivationResponse {
639 device_activation: None,
640 join_server_context: None,
641 }));
642 }
643 Err(e) => {
644 return Err(e.status());
645 }
646 };
647
648 let mut resp = Response::new(api::GetDeviceActivationResponse {
649 device_activation: Some(api::DeviceActivation {
650 dev_eui: d.dev_eui.to_string(),
651 dev_addr: d.get_dev_addr().map_err(|e| e.status())?.to_string(),
652 app_s_key: match &ds.app_s_key {
653 Some(v) => hex::encode(&v.aes_key),
654 None => "".to_string(),
655 },
656 nwk_s_enc_key: hex::encode(&ds.nwk_s_enc_key),
657 s_nwk_s_int_key: hex::encode(&ds.s_nwk_s_int_key),
658 f_nwk_s_int_key: hex::encode(&ds.f_nwk_s_int_key),
659 f_cnt_up: d.f_cnt_up as u32,
660 n_f_cnt_down: ds.n_f_cnt_down,
661 a_f_cnt_down: ds.a_f_cnt_down,
662 }),
663 join_server_context: if !ds.js_session_key_id.is_empty() {
664 Some(common::JoinServerContext {
665 app_s_key: None,
666 session_key_id: hex::encode(&ds.js_session_key_id),
667 })
668 } else if let Some(app_s_key) = &ds.app_s_key {
669 if !app_s_key.kek_label.is_empty() {
670 Some(common::JoinServerContext {
671 app_s_key: Some(common::KeyEnvelope {
672 kek_label: app_s_key.kek_label.clone(),
673 aes_key: app_s_key.aes_key.clone(),
674 }),
675 session_key_id: "".into(),
676 })
677 } else {

Callers 1

test_deviceFunction · 0.80

Calls 10

statusMethod · 0.80
get_device_sessionMethod · 0.80
to_stringMethod · 0.80
get_dev_addrMethod · 0.80
insertMethod · 0.80
unwrapMethod · 0.80
getFunction · 0.50
encodeFunction · 0.50
validateMethod · 0.45
intoMethod · 0.45

Tested by 1

test_deviceFunction · 0.64