From c37892ae59b0a5e24d3e256fca77fd27db2ee96d Mon Sep 17 00:00:00 2001 From: Isaiah Inuwa Date: Sat, 21 Feb 2026 09:25:15 -0600 Subject: [PATCH 1/3] daemon: Fix double-take of request context on error launching --- credentialsd/src/credential_service/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/credentialsd/src/credential_service/mod.rs b/credentialsd/src/credential_service/mod.rs index 200900b..09b593b 100644 --- a/credentialsd/src/credential_service/mod.rs +++ b/credentialsd/src/credential_service/mod.rs @@ -146,7 +146,6 @@ impl< .map_err(|err| err.to_string()); if let Err(err) = launch_ui_response { tracing::error!("Failed to launch UI for credentials: {err}. Cancelling request."); - _ = self.ctx.lock().unwrap().take(); let err = Err(CredentialServiceError::Internal(err)); let ctx = self.ctx.lock().unwrap().take().unwrap(); ctx.response_channel From 683757f103b94f0f20243381a3e5535cab551d99 Mon Sep 17 00:00:00 2001 From: Isaiah Inuwa Date: Sat, 21 Feb 2026 09:25:15 -0600 Subject: [PATCH 2/3] Remove redundant Device struct --- credentialsd-common/src/model.rs | 10 +++++-- credentialsd-common/src/server.rs | 41 ++------------------------- credentialsd-ui/src/client.rs | 6 ++-- credentialsd-ui/src/dbus.rs | 4 +-- credentialsd/src/dbus/flow_control.rs | 4 +-- 5 files changed, 15 insertions(+), 50 deletions(-) diff --git a/credentialsd-common/src/model.rs b/credentialsd-common/src/model.rs index 6ebbc43..7c2519b 100644 --- a/credentialsd-common/src/model.rs +++ b/credentialsd-common/src/model.rs @@ -30,25 +30,29 @@ pub enum CredentialType { // Password, } -#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Type)] pub struct Device { pub id: String, pub transport: Transport, } -#[derive(Debug, Serialize, Deserialize, Type)] +#[derive(Clone, Debug, Serialize, Deserialize, Type)] pub enum Operation { Create, Get, } -#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Type)] +#[zvariant(signature = "s")] pub enum Transport { + #[serde(rename = "BLE")] Ble, HybridLinked, HybridQr, Internal, + #[serde(rename = "NFC")] Nfc, + #[serde(rename = "USB")] Usb, } diff --git a/credentialsd-common/src/server.rs b/credentialsd-common/src/server.rs index aea6bbe..8096634 100644 --- a/credentialsd-common/src/server.rs +++ b/credentialsd-common/src/server.rs @@ -7,11 +7,11 @@ use serde::{ de::{DeserializeSeed, Error, Visitor}, }; use zvariant::{ - self, Array, DeserializeDict, DynamicDeserialize, LE, NoneValue, Optional, OwnedValue, + self, Array, DeserializeDict, DynamicDeserialize, NoneValue, Optional, OwnedValue, SerializeDict, Signature, Structure, StructureBuilder, Type, Value, signature::Fields, }; -use crate::model::{BackgroundEvent, Operation, RequestingApplication}; +use crate::model::{BackgroundEvent, Device, Operation, RequestingApplication}; const TAG_VALUE_SIGNATURE: &Signature = &Signature::Structure(Fields::Static { fields: &[&Signature::U8, &Signature::Variant], @@ -175,43 +175,6 @@ impl From for Credential { } } -#[derive(SerializeDict, DeserializeDict, Type)] -#[zvariant(signature = "a{sv}")] -pub struct Device { - pub id: String, - pub transport: String, -} - -impl TryFrom> for Device { - type Error = zvariant::Error; - fn try_from(value: Value<'_>) -> std::result::Result { - let ctx = zvariant::serialized::Context::new_dbus(LE, 0); - let encoded = zvariant::to_bytes(ctx, &value)?; - let device: Device = encoded.deserialize()?.0; - Ok(device) - } -} - -impl From for Device { - fn from(value: crate::model::Device) -> Self { - Device { - id: value.id, - transport: value.transport.as_str().to_owned(), - } - } -} - -impl TryFrom for crate::model::Device { - type Error = (); - fn try_from(value: Device) -> std::result::Result { - let transport = value.transport.try_into().map_err(|_| ())?; - Ok(Self { - id: value.id, - transport, - }) - } -} - impl TryFrom<&Value<'_>> for crate::model::Error { type Error = zvariant::Error; diff --git a/credentialsd-ui/src/client.rs b/credentialsd-ui/src/client.rs index adf716f..0f2184d 100644 --- a/credentialsd-ui/src/client.rs +++ b/credentialsd-ui/src/client.rs @@ -24,15 +24,13 @@ impl FlowController for DbusCredentialClient { async fn get_available_public_key_devices( &self, ) -> std::result::Result, ()> { - let dbus_devices = self - .proxy() + self.proxy() .await? .get_available_public_key_devices() .await .map_err(|err| { tracing::error!("Failed to retrieve available devices/transports: {err}") - })?; - dbus_devices.into_iter().map(|d| d.try_into()).collect() + }) } async fn get_hybrid_credential(&mut self) -> std::result::Result<(), ()> { diff --git a/credentialsd-ui/src/dbus.rs b/credentialsd-ui/src/dbus.rs index 2bce739..9ab511b 100644 --- a/credentialsd-ui/src/dbus.rs +++ b/credentialsd-ui/src/dbus.rs @@ -1,7 +1,7 @@ use async_std::channel::Sender; use credentialsd_common::{ - model::BackgroundEvent, - server::{Device, RequestId, ViewRequest}, + model::{BackgroundEvent, Device}, + server::{RequestId, ViewRequest}, }; use zbus::{fdo, interface, proxy}; diff --git a/credentialsd/src/dbus/flow_control.rs b/credentialsd/src/dbus/flow_control.rs index 5e07e33..737ac35 100644 --- a/credentialsd/src/dbus/flow_control.rs +++ b/credentialsd/src/dbus/flow_control.rs @@ -5,9 +5,9 @@ use std::future::Future; use std::{collections::VecDeque, fmt::Debug, sync::Arc}; use credentialsd_common::model::{ - BackgroundEvent, Error as CredentialServiceError, RequestingApplication, WebAuthnError, + BackgroundEvent, Device, Error as CredentialServiceError, RequestingApplication, WebAuthnError, }; -use credentialsd_common::server::{Device, RequestId, WindowHandle}; +use credentialsd_common::server::{RequestId, WindowHandle}; use futures_lite::StreamExt; use tokio::sync::oneshot; use tokio::{ From 9dcfe53a3b4155aedddb66eb891792a0ea4b4b1c Mon Sep 17 00:00:00 2001 From: Isaiah Inuwa Date: Fri, 23 Jan 2026 15:32:16 -0600 Subject: [PATCH 3/3] lint: Remove unused stuff --- credentialsd/src/dbus/gateway.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/credentialsd/src/dbus/gateway.rs b/credentialsd/src/dbus/gateway.rs index 7230f6f..32af944 100644 --- a/credentialsd/src/dbus/gateway.rs +++ b/credentialsd/src/dbus/gateway.rs @@ -602,7 +602,7 @@ impl From for Error { mod test { use credentialsd_common::model::WebAuthnError; - use crate::webauthn::{AppId, NavigationContext, Origin}; + use crate::webauthn::{NavigationContext, Origin}; use super::check_origin_from_privileged_client; fn check_same_origin(origin: &str) -> Result {