use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnrollPasskeyChallengeBody {
pub did: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListPasskeyVmsBody {
pub did: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RevokePasskeyVmBody {
pub did: String,
pub fragment: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct RevokePasskeyVmResponse {}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnrollPasskeyChallengeResponse {
#[serde(rename = "ceremonyId")]
pub ceremony_id: String,
pub challenge: String,
#[serde(rename = "rpId")]
pub rp_id: String,
#[serde(rename = "rpName")]
pub rp_name: String,
#[serde(rename = "userHandle")]
pub user_handle: String,
#[serde(rename = "userName")]
pub user_name: String,
#[serde(rename = "userDisplayName")]
pub user_display_name: String,
#[serde(rename = "timeoutMs", default, skip_serializing_if = "Option::is_none")]
pub timeout_ms: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnrollPasskeySubmitBody {
pub did: String,
#[serde(rename = "ceremonyId")]
pub ceremony_id: String,
#[serde(rename = "credentialId")]
pub credential_id: String,
#[serde(rename = "publicKeyMultibase")]
pub public_key_multibase: String,
#[serde(rename = "coseAlgorithm")]
pub cose_algorithm: i64,
#[serde(rename = "attestationObject")]
pub attestation_object: String,
#[serde(rename = "clientDataJson")]
pub client_data_json: String,
#[serde(rename = "authenticatorData")]
pub authenticator_data: String,
#[serde(default)]
pub transports: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnrollPasskeySubmitResponse {
#[serde(rename = "verificationMethod")]
pub verification_method: PasskeyVerificationMethod,
#[serde(rename = "webvhVersion")]
pub webvh_version: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListPasskeyVmsResponse {
#[serde(rename = "verificationMethods")]
pub verification_methods: Vec<PasskeyVerificationMethod>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PasskeyVerificationMethod {
pub id: String,
#[serde(rename = "type")]
pub vm_type: String,
pub controller: String,
#[serde(rename = "publicKeyMultibase")]
pub public_key_multibase: String,
#[serde(rename = "webauthnCredentialId")]
pub webauthn_credential_id: String,
#[serde(
rename = "webauthnTransports",
default,
skip_serializing_if = "Vec::is_empty"
)]
pub webauthn_transports: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
}
impl PasskeyVerificationMethod {
pub fn to_json_value(&self) -> Value {
serde_json::to_value(self).expect("PasskeyVerificationMethod is always serialisable")
}
}