use serde::{Serialize, Deserialize};
use serde_json::Value as JsonValue;
pub type AuthenticatorId = String;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub enum AuthenticatorProtocol {
#[default]
U2f,
Ctap2,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub enum Ctap2Version {
#[default]
Ctap20,
Ctap21,
Ctap22,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub enum AuthenticatorTransport {
#[default]
Usb,
Nfc,
Ble,
Cable,
Internal,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct VirtualAuthenticatorOptions {
pub protocol: AuthenticatorProtocol,
#[serde(skip_serializing_if = "Option::is_none")]
pub ctap2Version: Option<Ctap2Version>,
pub transport: AuthenticatorTransport,
#[serde(skip_serializing_if = "Option::is_none")]
pub hasResidentKey: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hasUserVerification: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hasLargeBlob: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hasCredBlob: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hasMinPinLength: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hasPrf: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hasHmacSecret: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hasHmacSecretMc: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub automaticPresenceSimulation: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub isUserVerified: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub defaultBackupEligibility: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub defaultBackupState: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct Credential {
pub credentialId: String,
pub isResidentCredential: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub rpId: Option<String>,
pub privateKey: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub userHandle: Option<String>,
pub signCount: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub largeBlob: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub backupEligibility: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub backupState: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub userName: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub userDisplayName: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct EnableParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub enableUI: Option<bool>,
}
impl EnableParams { pub const METHOD: &'static str = "WebAuthn.enable"; }
impl crate::CdpCommand for EnableParams {
const METHOD: &'static str = "WebAuthn.enable";
type Response = crate::EmptyReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct DisableParams {}
impl DisableParams { pub const METHOD: &'static str = "WebAuthn.disable"; }
impl crate::CdpCommand for DisableParams {
const METHOD: &'static str = "WebAuthn.disable";
type Response = crate::EmptyReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct AddVirtualAuthenticatorParams {
pub options: VirtualAuthenticatorOptions,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct AddVirtualAuthenticatorReturns {
pub authenticatorId: AuthenticatorId,
}
impl AddVirtualAuthenticatorParams { pub const METHOD: &'static str = "WebAuthn.addVirtualAuthenticator"; }
impl crate::CdpCommand for AddVirtualAuthenticatorParams {
const METHOD: &'static str = "WebAuthn.addVirtualAuthenticator";
type Response = AddVirtualAuthenticatorReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct SetResponseOverrideBitsParams {
pub authenticatorId: AuthenticatorId,
#[serde(skip_serializing_if = "Option::is_none")]
pub isBogusSignature: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub isBadUV: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub isBadUP: Option<bool>,
}
impl SetResponseOverrideBitsParams { pub const METHOD: &'static str = "WebAuthn.setResponseOverrideBits"; }
impl crate::CdpCommand for SetResponseOverrideBitsParams {
const METHOD: &'static str = "WebAuthn.setResponseOverrideBits";
type Response = crate::EmptyReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct RemoveVirtualAuthenticatorParams {
pub authenticatorId: AuthenticatorId,
}
impl RemoveVirtualAuthenticatorParams { pub const METHOD: &'static str = "WebAuthn.removeVirtualAuthenticator"; }
impl crate::CdpCommand for RemoveVirtualAuthenticatorParams {
const METHOD: &'static str = "WebAuthn.removeVirtualAuthenticator";
type Response = crate::EmptyReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct AddCredentialParams {
pub authenticatorId: AuthenticatorId,
pub credential: Credential,
}
impl AddCredentialParams { pub const METHOD: &'static str = "WebAuthn.addCredential"; }
impl crate::CdpCommand for AddCredentialParams {
const METHOD: &'static str = "WebAuthn.addCredential";
type Response = crate::EmptyReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct GetCredentialParams {
pub authenticatorId: AuthenticatorId,
pub credentialId: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct GetCredentialReturns {
pub credential: Credential,
}
impl GetCredentialParams { pub const METHOD: &'static str = "WebAuthn.getCredential"; }
impl crate::CdpCommand for GetCredentialParams {
const METHOD: &'static str = "WebAuthn.getCredential";
type Response = GetCredentialReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct GetCredentialsParams {
pub authenticatorId: AuthenticatorId,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct GetCredentialsReturns {
pub credentials: Vec<Credential>,
}
impl GetCredentialsParams { pub const METHOD: &'static str = "WebAuthn.getCredentials"; }
impl crate::CdpCommand for GetCredentialsParams {
const METHOD: &'static str = "WebAuthn.getCredentials";
type Response = GetCredentialsReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct RemoveCredentialParams {
pub authenticatorId: AuthenticatorId,
pub credentialId: String,
}
impl RemoveCredentialParams { pub const METHOD: &'static str = "WebAuthn.removeCredential"; }
impl crate::CdpCommand for RemoveCredentialParams {
const METHOD: &'static str = "WebAuthn.removeCredential";
type Response = crate::EmptyReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct ClearCredentialsParams {
pub authenticatorId: AuthenticatorId,
}
impl ClearCredentialsParams { pub const METHOD: &'static str = "WebAuthn.clearCredentials"; }
impl crate::CdpCommand for ClearCredentialsParams {
const METHOD: &'static str = "WebAuthn.clearCredentials";
type Response = crate::EmptyReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct SetUserVerifiedParams {
pub authenticatorId: AuthenticatorId,
pub isUserVerified: bool,
}
impl SetUserVerifiedParams { pub const METHOD: &'static str = "WebAuthn.setUserVerified"; }
impl crate::CdpCommand for SetUserVerifiedParams {
const METHOD: &'static str = "WebAuthn.setUserVerified";
type Response = crate::EmptyReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct SetAutomaticPresenceSimulationParams {
pub authenticatorId: AuthenticatorId,
pub enabled: bool,
}
impl SetAutomaticPresenceSimulationParams { pub const METHOD: &'static str = "WebAuthn.setAutomaticPresenceSimulation"; }
impl crate::CdpCommand for SetAutomaticPresenceSimulationParams {
const METHOD: &'static str = "WebAuthn.setAutomaticPresenceSimulation";
type Response = crate::EmptyReturns;
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct SetCredentialPropertiesParams {
pub authenticatorId: AuthenticatorId,
pub credentialId: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub backupEligibility: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub backupState: Option<bool>,
}
impl SetCredentialPropertiesParams { pub const METHOD: &'static str = "WebAuthn.setCredentialProperties"; }
impl crate::CdpCommand for SetCredentialPropertiesParams {
const METHOD: &'static str = "WebAuthn.setCredentialProperties";
type Response = crate::EmptyReturns;
}