use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct EnrollPasskeyChallengeBody {
pub did: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct ListPasskeyVmsBody {
pub did: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct RevokePasskeyVmBody {
pub did: String,
pub fragment: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct RevokePasskeyVmResponse {}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct EnrollPasskeyChallengeResponse {
#[serde(rename = "ceremonyId", alias = "ceremony_id")]
pub ceremony_id: String,
pub challenge: String,
#[serde(rename = "rpId", alias = "rp_id")]
pub rp_id: String,
#[serde(rename = "rpName", alias = "rp_name")]
pub rp_name: String,
#[serde(rename = "userHandle", alias = "user_handle")]
pub user_handle: String,
#[serde(rename = "userName", alias = "user_name")]
pub user_name: String,
#[serde(rename = "userDisplayName", alias = "user_display_name")]
pub user_display_name: String,
#[serde(
rename = "timeoutMs",
default,
skip_serializing_if = "Option::is_none",
alias = "timeout_ms"
)]
pub timeout_ms: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct EnrollPasskeySubmitBody {
pub did: String,
#[serde(rename = "ceremonyId", alias = "ceremony_id")]
pub ceremony_id: String,
#[serde(rename = "credentialId", alias = "credential_id")]
pub credential_id: String,
#[serde(rename = "publicKeyMultibase", alias = "public_key_multibase")]
pub public_key_multibase: String,
#[serde(rename = "coseAlgorithm", alias = "cose_algorithm")]
pub cose_algorithm: i64,
#[serde(rename = "attestationObject", alias = "attestation_object")]
pub attestation_object: String,
#[serde(rename = "clientDataJson", alias = "client_data_json")]
pub client_data_json: String,
#[serde(rename = "authenticatorData", alias = "authenticator_data")]
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)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct EnrollPasskeySubmitResponse {
#[serde(rename = "verificationMethod", alias = "verification_method")]
pub verification_method: PasskeyVerificationMethod,
#[serde(rename = "webvhVersion", alias = "webvh_version")]
pub webvh_version: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct ListPasskeyVmsResponse {
#[serde(rename = "verificationMethods", alias = "verification_methods")]
pub verification_methods: Vec<PasskeyVerificationMethod>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct PasskeyVerificationMethod {
pub id: String,
#[serde(rename = "type", alias = "vm_type")]
pub vm_type: String,
pub controller: String,
#[serde(rename = "publicKeyMultibase", alias = "public_key_multibase")]
pub public_key_multibase: String,
#[serde(rename = "webauthnCredentialId", alias = "webauthn_credential_id")]
pub webauthn_credential_id: String,
#[serde(
rename = "webauthnTransports",
default,
skip_serializing_if = "Vec::is_empty"
)]
#[serde(alias = "webauthn_transports")]
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")
}
}