Skip to content

Commit 707619b

Browse files
msirringhausiinuwa
authored andcommitted
Fix parsing of some MakeCredentialOptions
1 parent 5a59c43 commit 707619b

File tree

3 files changed

+34
-34
lines changed

3 files changed

+34
-34
lines changed

webext/add-on/background.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ function serializeRequest(options) {
7272
if (clone.publicKey.user) {
7373
clone.publicKey.user.id = serializeBytes(clone.publicKey.user.id)
7474
}
75-
if (clone.publicKey.excludedCredentials) {
76-
for (const cred in clone.publicKey.excludedCredentials) {
75+
if (clone.publicKey.excludeCredentials) {
76+
for (const cred of clone.publicKey.excludeCredentials) {
7777
cred.id = serializeBytes(cred.id)
7878
}
7979
}

xyz-iinuwa-credential-manager-portal-gtk/src/dbus.rs

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -328,28 +328,30 @@ impl CreateCredentialRequest {
328328
let other_options =
329329
serde_json::from_str::<webauthn::MakeCredentialOptions>(&request_value.to_string())
330330
.map_err(|_| webauthn::Error::Internal("Invalid request JSON".to_string()))?;
331-
let (require_resident_key, user_verification) =
332-
if let Some(authenticator_selection) = other_options.authenticator_selection {
333-
let is_authenticator_storage_capable = true;
334-
let require_resident_key = authenticator_selection.resident_key.map_or_else(
335-
|| false,
336-
|r| r == "required" || (r == "preferred" && is_authenticator_storage_capable),
337-
); // fallback to authenticator_selection.require_resident_key == true for WebAuthn Level 1?
338-
339-
let user_verification = authenticator_selection
340-
.user_verification
341-
.map(|uv| match uv.as_ref() {
342-
"required" => UserVerificationRequirement::Required,
343-
"preferred" => UserVerificationRequirement::Preferred,
344-
"discouraged" => UserVerificationRequirement::Discouraged,
345-
_ => todo!("This should be fixed in the future"),
346-
})
347-
.unwrap_or(UserVerificationRequirement::Preferred);
348-
349-
(require_resident_key, user_verification)
350-
} else {
351-
(false, UserVerificationRequirement::Preferred)
352-
};
331+
let (require_resident_key, user_verification) = if let Some(authenticator_selection) =
332+
other_options.authenticator_selection
333+
{
334+
let is_authenticator_storage_capable = true;
335+
let require_resident_key = authenticator_selection
336+
.resident_key
337+
.map(|r| r == "required" || (r == "preferred" && is_authenticator_storage_capable))
338+
.or(authenticator_selection.require_resident_key) // fallback to authenticator_selection.require_resident_key == true for WebAuthn Level 1
339+
.unwrap_or_default();
340+
341+
let user_verification = authenticator_selection
342+
.user_verification
343+
.map(|uv| match uv.as_ref() {
344+
"required" => UserVerificationRequirement::Required,
345+
"preferred" => UserVerificationRequirement::Preferred,
346+
"discouraged" => UserVerificationRequirement::Discouraged,
347+
_ => todo!("This should be fixed in the future"),
348+
})
349+
.unwrap_or(UserVerificationRequirement::Preferred);
350+
351+
(require_resident_key, user_verification)
352+
} else {
353+
(false, UserVerificationRequirement::Preferred)
354+
};
353355
let extensions = if let Some(incoming_extensions) = other_options.extensions {
354356
let extensions = MakeCredentialsRequestExtensions {
355357
cred_props: incoming_extensions.cred_props,

xyz-iinuwa-credential-manager-portal-gtk/src/webauthn.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use libwebauthn::{
1111
use serde::{Deserialize, Serialize};
1212
use serde_json::json;
1313
use tracing::debug;
14-
use zbus::zvariant::{DeserializeDict, Type};
1514

1615
use crate::cose::{CoseKeyAlgorithmIdentifier, CoseKeyType};
1716

@@ -75,7 +74,7 @@ pub(crate) struct MakeCredentialOptions {
7574
#[serde(deserialize_with = "crate::serde::duration::from_opt_ms")]
7675
#[serde(default)]
7776
pub timeout: Option<Duration>,
78-
#[serde(rename = "excludedCredentials")]
77+
#[serde(rename = "excludeCredentials")]
7978
pub excluded_credentials: Option<Vec<CredentialDescriptor>>,
8079
#[serde(rename = "authenticatorSelection")]
8180
pub authenticator_selection: Option<AuthenticatorSelectionCriteria>,
@@ -197,8 +196,7 @@ pub(crate) struct GetCredentialExtensions {
197196
pub prf: Option<Prf>,
198197
}
199198

200-
#[derive(Debug, Deserialize, Type)]
201-
#[zvariant(signature = "dict")]
199+
#[derive(Debug, Deserialize)]
202200
/// https://www.w3.org/TR/webauthn-3/#dictionary-credential-descriptor
203201
pub(crate) struct CredentialDescriptor {
204202
/// Type of the public key credential the caller is referring to.
@@ -250,24 +248,24 @@ impl TryFrom<CredentialDescriptor> for Ctap2PublicKeyCredentialDescriptor {
250248
}
251249
}
252250

253-
#[derive(Debug, DeserializeDict, Type)]
254-
#[zvariant(signature = "dict")]
251+
#[derive(Debug, Deserialize)]
255252
/// https://www.w3.org/TR/webauthn-3/#dictionary-authenticatorSelection
256253
pub(crate) struct AuthenticatorSelectionCriteria {
257254
// /// https://www.w3.org/TR/webauthn-3/#enum-attachment
258255
// #[zvariant(rename = "authenticatorAttachment")]
259256
// pub authenticator_attachment: Option<String>,
260257
//
261258
/// https://www.w3.org/TR/webauthn-3/#enum-residentKeyRequirement
262-
#[zvariant(rename = "residentKey")]
259+
#[serde(rename = "residentKey")]
263260
pub resident_key: Option<String>,
264261

265262
// Implied by resident_key == "required", deprecated in webauthn
266263
// https://www.w3.org/TR/webauthn-3/#enum-residentKeyRequirement
267-
// #[zvariant(rename = "requireResidentKey")]
268-
// require_resident_key: Option<bool>,
264+
#[serde(rename = "requireResidentKey")]
265+
pub require_resident_key: Option<bool>,
266+
269267
/// https://www.w3.org/TR/webauthn-3/#enumdef-userverificationrequirement
270-
#[zvariant(rename = "userVerification")]
268+
#[serde(rename = "userVerification")]
271269
pub user_verification: Option<String>,
272270
}
273271

0 commit comments

Comments
 (0)