diff --git a/apps/desktop/desktop_native/napi/index.d.ts b/apps/desktop/desktop_native/napi/index.d.ts index 927fc8c9d0b..1221139e8fa 100644 --- a/apps/desktop/desktop_native/napi/index.d.ts +++ b/apps/desktop/desktop_native/napi/index.d.ts @@ -176,8 +176,8 @@ export declare namespace autofill { export interface PasskeyAssertionWithoutUserInterfaceRequest { rpId: string credentialId: Array - userName: string - userHandle: Array + userName?: string + userHandle?: Array recordIdentifier?: string clientDataHash: Array userVerification: UserVerification diff --git a/apps/desktop/desktop_native/napi/src/lib.rs b/apps/desktop/desktop_native/napi/src/lib.rs index 870a59f4abb..ec663ee5539 100644 --- a/apps/desktop/desktop_native/napi/src/lib.rs +++ b/apps/desktop/desktop_native/napi/src/lib.rs @@ -713,8 +713,8 @@ pub mod autofill { pub struct PasskeyAssertionWithoutUserInterfaceRequest { pub rp_id: String, pub credential_id: Vec, - pub user_name: String, - pub user_handle: Vec, + pub user_name: Option, + pub user_handle: Option>, pub record_identifier: Option, pub client_data_hash: Vec, pub user_verification: UserVerification, diff --git a/apps/desktop/desktop_native/windows_plugin_authenticator/src/assert.rs b/apps/desktop/desktop_native/windows_plugin_authenticator/src/assert.rs index ce8b21d2737..142fd129f5d 100644 --- a/apps/desktop/desktop_native/windows_plugin_authenticator/src/assert.rs +++ b/apps/desktop/desktop_native/windows_plugin_authenticator/src/assert.rs @@ -7,15 +7,18 @@ use std::{ }; use windows_core::{s, HRESULT}; -use crate::com_provider::{ - parse_credential_list, WebAuthnPluginOperationRequest, WebAuthnPluginOperationResponse, -}; use crate::ipc2::{ PasskeyAssertionRequest, PasskeyAssertionResponse, Position, TimedCallback, UserVerification, WindowsProviderClient, }; use crate::util::{debug_log, delay_load, wstr_to_string}; use crate::webauthn::WEBAUTHN_CREDENTIAL_LIST; +use crate::{ + com_provider::{ + parse_credential_list, WebAuthnPluginOperationRequest, WebAuthnPluginOperationResponse, + }, + ipc2::PasskeyAssertionWithoutUserInterfaceRequest, +}; // Windows API types for WebAuthn (from webauthn.h.sample) #[repr(C)] @@ -134,7 +137,22 @@ fn send_assertion_request( .map_err(|err| format!("Failed to serialize assertion request: {err}"))?; tracing::debug!(?request_json, "Sending assertion request"); let callback = Arc::new(TimedCallback::new()); - ipc_client.prepare_passkey_assertion(request, callback.clone()); + if request.allowed_credentials.len() == 1 { + // copying this into another struct because I'm too lazy to make an enum right now. + let request = PasskeyAssertionWithoutUserInterfaceRequest { + rp_id: request.rp_id, + credential_id: request.allowed_credentials[0].clone(), + // user_name: request.user_name, + // user_handle: request., + // record_identifier: todo!(), + client_data_hash: request.client_data_hash, + user_verification: request.user_verification, + window_xy: request.window_xy, + }; + ipc_client.prepare_passkey_assertion_without_user_interface(request, callback.clone()); + } else { + ipc_client.prepare_passkey_assertion(request, callback.clone()); + } callback .wait_for_response(Duration::from_secs(30)) .map_err(|_| "Registration request timed out".to_string())? diff --git a/apps/desktop/desktop_native/windows_plugin_authenticator/src/ipc2/assertion.rs b/apps/desktop/desktop_native/windows_plugin_authenticator/src/ipc2/assertion.rs index 32a9b9a0b67..367ee51bfc8 100644 --- a/apps/desktop/desktop_native/windows_plugin_authenticator/src/ipc2/assertion.rs +++ b/apps/desktop/desktop_native/windows_plugin_authenticator/src/ipc2/assertion.rs @@ -18,14 +18,14 @@ pub struct PasskeyAssertionRequest { #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct PasskeyAssertionWithoutUserInterfaceRequest { - rp_id: String, - credential_id: Vec, - user_name: String, - user_handle: Vec, - record_identifier: Option, - client_data_hash: Vec, - user_verification: UserVerification, - window_xy: Position, + pub rp_id: String, + pub credential_id: Vec, + // pub user_name: String, + // pub user_handle: Vec, + // pub record_identifier: Option, + pub client_data_hash: Vec, + pub user_verification: UserVerification, + pub window_xy: Position, } #[derive(Debug, Serialize, Deserialize)]