Skip to content

Commit 57ec10d

Browse files
committed
Rename BackendRequest to UserInteractedEvent
1 parent d3ae787 commit 57ec10d

6 files changed

Lines changed: 169 additions & 139 deletions

File tree

credentialsd-common/src/model.rs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -266,37 +266,39 @@ pub enum NfcState {
266266
Failed(Error),
267267
}
268268

269-
pub enum BackendRequest {
269+
pub enum UserInteractedEvent {
270270
/// Start Hybrid discovery
271-
StartHybridDiscovery,
271+
HybridDiscoveryRequested,
272272

273273
/// Start NFC discovery
274-
StartNfcDiscovery,
274+
NfcDiscoveryRequested,
275275

276276
/// Start USB discovery
277-
StartUsbDiscovery,
277+
UsbDiscoveryRequested,
278278

279279
/// Send client PIN
280-
EnterClientPin(String),
280+
ClientPinEntered(String),
281281

282282
/// Select a credential by credential ID
283-
SelectCredential(String),
283+
CredentialSelected(String),
284284

285-
CancelRequest,
285+
RequestCancelled,
286286
}
287287

288-
impl std::fmt::Debug for BackendRequest {
288+
impl std::fmt::Debug for UserInteractedEvent {
289289
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
290290
match self {
291-
Self::StartHybridDiscovery => write!(f, "StartHybridDiscovery"),
292-
Self::StartNfcDiscovery => write!(f, "StartNfcDiscovery"),
293-
Self::StartUsbDiscovery => write!(f, "StartUsbDiscovery"),
294-
Self::EnterClientPin(_) => f
291+
Self::HybridDiscoveryRequested => write!(f, "StartHybridDiscovery"),
292+
Self::NfcDiscoveryRequested => write!(f, "StartNfcDiscovery"),
293+
Self::UsbDiscoveryRequested => write!(f, "StartUsbDiscovery"),
294+
Self::ClientPinEntered(_) => f
295295
.debug_tuple("EnterClientPin")
296296
.field(&"******".to_string())
297297
.finish(),
298-
Self::SelectCredential(arg0) => f.debug_tuple("SelectCredential").field(arg0).finish(),
299-
Self::CancelRequest => write!(f, "CancelRequest"),
298+
Self::CredentialSelected(arg0) => {
299+
f.debug_tuple("SelectCredential").field(arg0).finish()
300+
}
301+
Self::RequestCancelled => write!(f, "CancelRequest"),
300302
}
301303
}
302304
}

credentialsd-common/src/server.rs

Lines changed: 117 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use zvariant::{
1111
SerializeDict, Signature, Str, Structure, StructureBuilder, Type, Value, signature::Fields,
1212
};
1313

14-
use crate::model::{BackendRequest, Device, Operation, RequestId, RequestingApplication};
14+
use crate::model::{Device, Operation, RequestId, RequestingApplication, UserInteractedEvent};
1515

1616
const TAG_VALUE_SIGNATURE: &Signature = &Signature::Structure(Fields::Static {
1717
fields: &[&Signature::U32, &Signature::Variant],
@@ -49,12 +49,12 @@ const BACKGROUND_EVENT_ERROR_CREDENTIAL_EXCLUDED: u32 = 0x80000006;
4949
const BACKGROUND_EVENT_ERROR_PIN_ATTEMPTS_EXHAUSTED: u32 = 0x80000007;
5050
const BACKGROUND_EVENT_ERROR_PIN_NOT_SET: u32 = 0x80000008;
5151

52-
const BACKEND_REQUEST_START_HYBRID_DISCOVERY: u32 = 0x01;
53-
const BACKEND_REQUEST_START_USB_DISCOVERY: u32 = 0x02;
54-
const BACKEND_REQUEST_START_NFC_DISCOVERY: u32 = 0x03;
55-
const BACKEND_REQUEST_ENTER_CLIENT_PIN: u32 = 0x04;
56-
const BACKEND_REQUEST_SELECT_CREDENTIAL: u32 = 0x05;
57-
const BACKEND_REQUEST_CANCEL_REQUEST: u32 = 0x06;
52+
const USER_INTERACTED_EVENT_HYBRID_DISCOVERY_REQUESTED: u32 = 0x01;
53+
const USER_INTERACTED_EVENT_NFC_DISCOVERY_REQUESTED: u32 = 0x02;
54+
const USER_INTERACTED_EVENT_USB_DISCOVERY_REQUESTED: u32 = 0x03;
55+
const USER_INTERACTED_EVENT_CLIENT_PIN_ENTERED: u32 = 0x04;
56+
const USER_INTERACTED_EVENT_CREDENTIAL_SELECTED: u32 = 0x05;
57+
const USER_INTERACTED_EVENT_REQUEST_CANCELLED: u32 = 0x06;
5858

5959
/// Flattened enum BackgroundEvent for sending across D-Bus.
6060
#[derive(Debug, Clone, PartialEq)]
@@ -274,94 +274,6 @@ impl<'de> Deserialize<'de> for BackgroundEvent {
274274
}
275275
}
276276

277-
impl Type for BackendRequest {
278-
const SIGNATURE: &'static Signature = TAG_VALUE_SIGNATURE;
279-
}
280-
281-
impl From<&BackendRequest> for Structure<'_> {
282-
fn from(value: &BackendRequest) -> Self {
283-
match value {
284-
BackendRequest::StartHybridDiscovery => tag_value_to_struct(0x01, None),
285-
BackendRequest::StartNfcDiscovery => tag_value_to_struct(0x02, None),
286-
BackendRequest::StartUsbDiscovery => tag_value_to_struct(0x03, None),
287-
BackendRequest::EnterClientPin(pin) => {
288-
tag_value_to_struct(0x04, Some(Value::Str(pin.into())))
289-
}
290-
BackendRequest::SelectCredential(credential_id) => {
291-
tag_value_to_struct(0x05, Some(Value::Str(credential_id.into())))
292-
}
293-
BackendRequest::CancelRequest => tag_value_to_struct(0x06, None),
294-
}
295-
}
296-
}
297-
298-
impl TryFrom<&Structure<'_>> for BackendRequest {
299-
type Error = zvariant::Error;
300-
301-
fn try_from(value: &Structure<'_>) -> Result<Self, Self::Error> {
302-
let (tag, value) = parse_tag_value_struct(value)?;
303-
304-
match tag {
305-
0x01 => Ok(BackendRequest::StartHybridDiscovery),
306-
0x02 => Ok(BackendRequest::StartNfcDiscovery),
307-
0x03 => Ok(BackendRequest::StartUsbDiscovery),
308-
0x04 => {
309-
let s: Str = value.downcast_ref()?;
310-
if s.is_empty() {
311-
return Err(zvariant::Error::invalid_length(
312-
s.len(),
313-
&"a non-empty string",
314-
));
315-
}
316-
Ok(BackendRequest::EnterClientPin(s.as_str().to_string()))
317-
}
318-
0x05 => {
319-
let s: Str = value.downcast_ref()?;
320-
if s.is_empty() {
321-
return Err(zvariant::Error::invalid_length(
322-
s.len(),
323-
&"a non-empty string",
324-
));
325-
}
326-
Ok(BackendRequest::SelectCredential(s.as_str().to_string()))
327-
}
328-
0x06 => Ok(BackendRequest::CancelRequest),
329-
_ => Err(zvariant::Error::Message(format!(
330-
"Unknown BackendRequest tag : {tag}"
331-
))),
332-
}
333-
}
334-
}
335-
336-
impl Serialize for BackendRequest {
337-
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
338-
where
339-
S: serde::Serializer,
340-
{
341-
let structure: Structure = self.into();
342-
structure.serialize(serializer)
343-
}
344-
}
345-
346-
impl<'de> Deserialize<'de> for BackendRequest {
347-
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
348-
where
349-
D: serde::Deserializer<'de>,
350-
{
351-
let d = Structure::deserializer_for_signature(TAG_VALUE_SIGNATURE).map_err(|err| {
352-
D::Error::custom(format!(
353-
"could not create deserializer for tag-value struct: {err}"
354-
))
355-
})?;
356-
let structure = d.deserialize(deserializer)?;
357-
(&structure).try_into().map_err(|err| {
358-
D::Error::custom(format!(
359-
"could not deserialize structure into BackendRequest: {err}"
360-
))
361-
})
362-
}
363-
}
364-
365277
#[derive(Clone, Debug, DeserializeDict, Type)]
366278
#[zvariant(signature = "dict")]
367279
pub struct CreateCredentialRequest {
@@ -507,6 +419,116 @@ impl From<GetPublicKeyCredentialResponse> for GetCredentialResponse {
507419
}
508420
}
509421

422+
impl Type for UserInteractedEvent {
423+
const SIGNATURE: &'static Signature = TAG_VALUE_SIGNATURE;
424+
}
425+
426+
impl From<&UserInteractedEvent> for Structure<'_> {
427+
fn from(value: &UserInteractedEvent) -> Self {
428+
match value {
429+
UserInteractedEvent::HybridDiscoveryRequested => {
430+
tag_value_to_struct(USER_INTERACTED_EVENT_HYBRID_DISCOVERY_REQUESTED, None)
431+
}
432+
UserInteractedEvent::NfcDiscoveryRequested => {
433+
tag_value_to_struct(USER_INTERACTED_EVENT_NFC_DISCOVERY_REQUESTED, None)
434+
}
435+
UserInteractedEvent::UsbDiscoveryRequested => {
436+
tag_value_to_struct(USER_INTERACTED_EVENT_USB_DISCOVERY_REQUESTED, None)
437+
}
438+
UserInteractedEvent::ClientPinEntered(pin) => tag_value_to_struct(
439+
USER_INTERACTED_EVENT_CLIENT_PIN_ENTERED,
440+
Some(Value::Str(pin.into())),
441+
),
442+
UserInteractedEvent::CredentialSelected(credential_id) => tag_value_to_struct(
443+
USER_INTERACTED_EVENT_CREDENTIAL_SELECTED,
444+
Some(Value::Str(credential_id.into())),
445+
),
446+
UserInteractedEvent::RequestCancelled => {
447+
tag_value_to_struct(USER_INTERACTED_EVENT_REQUEST_CANCELLED, None)
448+
}
449+
}
450+
}
451+
}
452+
453+
impl TryFrom<&Structure<'_>> for UserInteractedEvent {
454+
type Error = zvariant::Error;
455+
456+
fn try_from(value: &Structure<'_>) -> Result<Self, Self::Error> {
457+
let (tag, value) = parse_tag_value_struct(value)?;
458+
459+
match tag {
460+
USER_INTERACTED_EVENT_HYBRID_DISCOVERY_REQUESTED => {
461+
Ok(UserInteractedEvent::HybridDiscoveryRequested)
462+
}
463+
USER_INTERACTED_EVENT_NFC_DISCOVERY_REQUESTED => {
464+
Ok(UserInteractedEvent::NfcDiscoveryRequested)
465+
}
466+
USER_INTERACTED_EVENT_USB_DISCOVERY_REQUESTED => {
467+
Ok(UserInteractedEvent::UsbDiscoveryRequested)
468+
}
469+
USER_INTERACTED_EVENT_CLIENT_PIN_ENTERED => {
470+
let s: Str = value.downcast_ref()?;
471+
if s.is_empty() {
472+
return Err(zvariant::Error::invalid_length(
473+
s.len(),
474+
&"a non-empty string",
475+
));
476+
}
477+
Ok(UserInteractedEvent::ClientPinEntered(
478+
s.as_str().to_string(),
479+
))
480+
}
481+
USER_INTERACTED_EVENT_CREDENTIAL_SELECTED => {
482+
let s: Str = value.downcast_ref()?;
483+
if s.is_empty() {
484+
return Err(zvariant::Error::invalid_length(
485+
s.len(),
486+
&"a non-empty string",
487+
));
488+
}
489+
Ok(UserInteractedEvent::CredentialSelected(
490+
s.as_str().to_string(),
491+
))
492+
}
493+
USER_INTERACTED_EVENT_REQUEST_CANCELLED => Ok(UserInteractedEvent::RequestCancelled),
494+
_ => Err(zvariant::Error::Message(format!(
495+
"Unknown {} tag : {tag}",
496+
stringify!(UserInteractedEvent)
497+
))),
498+
}
499+
}
500+
}
501+
502+
impl Serialize for UserInteractedEvent {
503+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
504+
where
505+
S: serde::Serializer,
506+
{
507+
let structure: Structure = self.into();
508+
structure.serialize(serializer)
509+
}
510+
}
511+
512+
impl<'de> Deserialize<'de> for UserInteractedEvent {
513+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
514+
where
515+
D: serde::Deserializer<'de>,
516+
{
517+
let d = Structure::deserializer_for_signature(TAG_VALUE_SIGNATURE).map_err(|err| {
518+
D::Error::custom(format!(
519+
"could not create deserializer for tag-value struct: {err}"
520+
))
521+
})?;
522+
let structure = d.deserialize(deserializer)?;
523+
(&structure).try_into().map_err(|err| {
524+
D::Error::custom(format!(
525+
"could not deserialize structure into {}: {err}",
526+
stringify!(UserInteractedEvent)
527+
))
528+
})
529+
}
530+
}
531+
510532
#[derive(Clone, Debug, Serialize, Deserialize, Type)]
511533
pub struct ViewRequest {
512534
pub operation: Operation,

credentialsd-ui/src/client.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use async_std::{
55
};
66
use credentialsd_common::{
77
client::FlowController,
8-
model::{BackendRequest, RequestId},
8+
model::{RequestId, UserInteractedEvent},
99
server::BackgroundEvent,
1010
};
1111
use futures_lite::StreamExt;
@@ -129,34 +129,35 @@ impl FlowController for DbusCredentialClient {
129129

130130
#[derive(Debug)]
131131
pub struct FlowControlClient {
132-
pub tx: Sender<BackendRequest>,
132+
pub tx: Sender<UserInteractedEvent>,
133133
pub rx: AsyncMutex<Option<Receiver<BackgroundEvent>>>,
134134
}
135135

136136
impl FlowControlClient {
137137
pub async fn discover_hybrid_authenticators(&self) -> Result<(), ()> {
138-
self.send(BackendRequest::StartHybridDiscovery).await
138+
self.send(UserInteractedEvent::HybridDiscoveryRequested)
139+
.await
139140
}
140141

141142
pub async fn discover_nfc_authenticators(&mut self) -> Result<(), ()> {
142-
self.send(BackendRequest::StartNfcDiscovery).await
143+
self.send(UserInteractedEvent::NfcDiscoveryRequested).await
143144
}
144145

145146
pub async fn discover_usb_authenticators(&mut self) -> Result<(), ()> {
146-
self.send(BackendRequest::StartUsbDiscovery).await
147+
self.send(UserInteractedEvent::UsbDiscoveryRequested).await
147148
}
148149

149150
pub async fn enter_client_pin(&mut self, pin: String) -> Result<(), ()> {
150-
self.send(BackendRequest::EnterClientPin(pin)).await
151+
self.send(UserInteractedEvent::ClientPinEntered(pin)).await
151152
}
152153

153154
pub async fn select_credential(&self, credential_id: String) -> Result<(), ()> {
154-
self.send(BackendRequest::SelectCredential(credential_id))
155+
self.send(UserInteractedEvent::CredentialSelected(credential_id))
155156
.await
156157
}
157158

158159
pub async fn cancel_request(&self) -> Result<(), ()> {
159-
self.send(BackendRequest::CancelRequest).await
160+
self.send(UserInteractedEvent::RequestCancelled).await
160161
}
161162

162163
/// Returns a channel for background events.
@@ -167,7 +168,7 @@ impl FlowControlClient {
167168
})
168169
}
169170

170-
async fn send(&self, request: BackendRequest) -> Result<(), ()> {
171+
async fn send(&self, request: UserInteractedEvent) -> Result<(), ()> {
171172
match self.tx.send(request).await {
172173
Ok(_) => Ok(()),
173174
Err(_) => Err(()),

credentialsd-ui/src/dbus.rs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ use zbus::{
1818
use credentialsd_common::{
1919
client::FlowController,
2020
model::{
21-
BackendRequest, Device, Operation, PortalBackendOptions, RequestId, RequestingApplication,
21+
Device, Operation, PortalBackendOptions, RequestId, RequestingApplication,
22+
UserInteractedEvent,
2223
},
2324
server::{BackgroundEvent, ViewRequest, WindowHandle},
2425
};
@@ -89,16 +90,20 @@ impl UiControlService {
8990
while let Ok(msg) = fc_rx.recv().await {
9091
// UI doesn't get an error if these fail...
9192
let result = match &msg {
92-
BackendRequest::StartHybridDiscovery => client.get_hybrid_credential().await,
93-
BackendRequest::StartNfcDiscovery => client.get_nfc_credential().await,
94-
BackendRequest::StartUsbDiscovery => client.get_usb_credential().await,
95-
BackendRequest::EnterClientPin(pin) => {
93+
UserInteractedEvent::HybridDiscoveryRequested => {
94+
client.get_hybrid_credential().await
95+
}
96+
UserInteractedEvent::NfcDiscoveryRequested => client.get_nfc_credential().await,
97+
UserInteractedEvent::UsbDiscoveryRequested => client.get_usb_credential().await,
98+
UserInteractedEvent::ClientPinEntered(pin) => {
9699
client.enter_client_pin(pin.to_string()).await
97100
}
98-
BackendRequest::SelectCredential(cred_id) => {
101+
UserInteractedEvent::CredentialSelected(cred_id) => {
99102
client.select_credential(cred_id.to_string()).await
100103
}
101-
BackendRequest::CancelRequest => client.cancel_request(request.id).await,
104+
UserInteractedEvent::RequestCancelled => {
105+
client.cancel_request(request.id).await
106+
}
102107
};
103108
if let Err(err) = result {
104109
tracing::error!("Failed to send {msg:?} to frontend: {err:?}");
@@ -292,6 +297,6 @@ impl CeremonyObject {
292297
#[zbus(signal)]
293298
async fn user_interacted(
294299
emitter: SignalEmitter<'_>,
295-
event: &BackendRequest,
300+
event: &UserInteractedEvent,
296301
) -> zbus::Result<()>;
297302
}

0 commit comments

Comments
 (0)