blob: 2478eb0d8fc5461661b4db85fcfd20300c92f783 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "authenticator_mojom_traits.h"
#include "url/mojom/url_gurl_mojom_traits.h"
namespace mojo {
// static
blink::mojom::AuthenticatorTransport
EnumTraits<blink::mojom::AuthenticatorTransport,
device::FidoTransportProtocol>::ToMojom(device::FidoTransportProtocol
input) {
switch (input) {
case ::device::FidoTransportProtocol::kUsbHumanInterfaceDevice:
return blink::mojom::AuthenticatorTransport::USB;
case ::device::FidoTransportProtocol::kNearFieldCommunication:
return blink::mojom::AuthenticatorTransport::NFC;
case ::device::FidoTransportProtocol::kBluetoothLowEnergy:
return blink::mojom::AuthenticatorTransport::BLE;
case ::device::FidoTransportProtocol::kCloudAssistedBluetoothLowEnergy:
return blink::mojom::AuthenticatorTransport::CABLE;
case ::device::FidoTransportProtocol::kInternal:
return blink::mojom::AuthenticatorTransport::INTERNAL;
}
NOTREACHED();
return blink::mojom::AuthenticatorTransport::USB;
}
// static
bool EnumTraits<blink::mojom::AuthenticatorTransport,
device::FidoTransportProtocol>::
FromMojom(blink::mojom::AuthenticatorTransport input,
device::FidoTransportProtocol* output) {
switch (input) {
case blink::mojom::AuthenticatorTransport::USB:
*output = ::device::FidoTransportProtocol::kUsbHumanInterfaceDevice;
return true;
case blink::mojom::AuthenticatorTransport::NFC:
*output = ::device::FidoTransportProtocol::kNearFieldCommunication;
return true;
case blink::mojom::AuthenticatorTransport::BLE:
*output = ::device::FidoTransportProtocol::kBluetoothLowEnergy;
return true;
case blink::mojom::AuthenticatorTransport::CABLE:
*output =
::device::FidoTransportProtocol::kCloudAssistedBluetoothLowEnergy;
return true;
case blink::mojom::AuthenticatorTransport::INTERNAL:
*output = ::device::FidoTransportProtocol::kInternal;
return true;
}
NOTREACHED();
return false;
}
// static
blink::mojom::PublicKeyCredentialType
EnumTraits<blink::mojom::PublicKeyCredentialType,
device::CredentialType>::ToMojom(device::CredentialType input) {
switch (input) {
case ::device::CredentialType::kPublicKey:
return blink::mojom::PublicKeyCredentialType::PUBLIC_KEY;
}
NOTREACHED();
return blink::mojom::PublicKeyCredentialType::PUBLIC_KEY;
}
// static
bool EnumTraits<blink::mojom::PublicKeyCredentialType, device::CredentialType>::
FromMojom(blink::mojom::PublicKeyCredentialType input,
device::CredentialType* output) {
switch (input) {
case blink::mojom::PublicKeyCredentialType::PUBLIC_KEY:
*output = ::device::CredentialType::kPublicKey;
return true;
}
NOTREACHED();
return false;
}
// static
bool StructTraits<blink::mojom::PublicKeyCredentialParametersDataView,
device::PublicKeyCredentialParams::CredentialInfo>::
Read(blink::mojom::PublicKeyCredentialParametersDataView data,
device::PublicKeyCredentialParams::CredentialInfo* out) {
out->algorithm = data.algorithm_identifier();
if (data.ReadType(&out->type)) {
return true;
}
return false;
}
// static
bool StructTraits<blink::mojom::PublicKeyCredentialDescriptorDataView,
device::PublicKeyCredentialDescriptor>::
Read(blink::mojom::PublicKeyCredentialDescriptorDataView data,
device::PublicKeyCredentialDescriptor* out) {
device::CredentialType type;
std::vector<uint8_t> id;
std::vector<device::FidoTransportProtocol> protocols;
if (!data.ReadType(&type) || !data.ReadId(&id) ||
!data.ReadTransports(&protocols)) {
return false;
}
device::PublicKeyCredentialDescriptor descriptor(type, id,
{std::move(protocols)});
*out = descriptor;
return true;
}
// static
blink::mojom::AuthenticatorAttachment EnumTraits<
blink::mojom::AuthenticatorAttachment,
device::AuthenticatorAttachment>::ToMojom(device::AuthenticatorAttachment
input) {
switch (input) {
case ::device::AuthenticatorAttachment::kAny:
return blink::mojom::AuthenticatorAttachment::NO_PREFERENCE;
case ::device::AuthenticatorAttachment::kPlatform:
return blink::mojom::AuthenticatorAttachment::PLATFORM;
case ::device::AuthenticatorAttachment::kCrossPlatform:
return blink::mojom::AuthenticatorAttachment::CROSS_PLATFORM;
}
NOTREACHED();
return blink::mojom::AuthenticatorAttachment::NO_PREFERENCE;
}
// static
bool EnumTraits<blink::mojom::AuthenticatorAttachment,
device::AuthenticatorAttachment>::
FromMojom(blink::mojom::AuthenticatorAttachment input,
device::AuthenticatorAttachment* output) {
switch (input) {
case blink::mojom::AuthenticatorAttachment::NO_PREFERENCE:
*output = ::device::AuthenticatorAttachment::kAny;
return true;
case blink::mojom::AuthenticatorAttachment::PLATFORM:
*output = ::device::AuthenticatorAttachment::kPlatform;
return true;
case blink::mojom::AuthenticatorAttachment::CROSS_PLATFORM:
*output = ::device::AuthenticatorAttachment::kCrossPlatform;
return true;
}
NOTREACHED();
return false;
}
// static
blink::mojom::UserVerificationRequirement
EnumTraits<blink::mojom::UserVerificationRequirement,
device::UserVerificationRequirement>::
ToMojom(device::UserVerificationRequirement input) {
switch (input) {
case ::device::UserVerificationRequirement::kRequired:
return blink::mojom::UserVerificationRequirement::REQUIRED;
case ::device::UserVerificationRequirement::kPreferred:
return blink::mojom::UserVerificationRequirement::PREFERRED;
case ::device::UserVerificationRequirement::kDiscouraged:
return blink::mojom::UserVerificationRequirement::DISCOURAGED;
}
NOTREACHED();
return blink::mojom::UserVerificationRequirement::REQUIRED;
}
// static
bool EnumTraits<blink::mojom::UserVerificationRequirement,
device::UserVerificationRequirement>::
FromMojom(blink::mojom::UserVerificationRequirement input,
device::UserVerificationRequirement* output) {
switch (input) {
case blink::mojom::UserVerificationRequirement::REQUIRED:
*output = ::device::UserVerificationRequirement::kRequired;
return true;
case blink::mojom::UserVerificationRequirement::PREFERRED:
*output = ::device::UserVerificationRequirement::kPreferred;
return true;
case blink::mojom::UserVerificationRequirement::DISCOURAGED:
*output = ::device::UserVerificationRequirement::kDiscouraged;
return true;
}
NOTREACHED();
return false;
}
// static
bool StructTraits<blink::mojom::AuthenticatorSelectionCriteriaDataView,
device::AuthenticatorSelectionCriteria>::
Read(blink::mojom::AuthenticatorSelectionCriteriaDataView data,
device::AuthenticatorSelectionCriteria* out) {
device::AuthenticatorAttachment authenticator_attachment;
bool require_resident_key = data.require_resident_key();
device::UserVerificationRequirement user_verification_requirement;
if (!data.ReadAuthenticatorAttachment(&authenticator_attachment) ||
!data.ReadUserVerification(&user_verification_requirement)) {
return false;
}
*out = device::AuthenticatorSelectionCriteria(authenticator_attachment,
require_resident_key,
user_verification_requirement);
return true;
}
// static
bool StructTraits<blink::mojom::PublicKeyCredentialRpEntityDataView,
device::PublicKeyCredentialRpEntity>::
Read(blink::mojom::PublicKeyCredentialRpEntityDataView data,
device::PublicKeyCredentialRpEntity* out) {
if (!data.ReadId(&out->id) || !data.ReadName(&out->name) ||
!data.ReadIcon(&out->icon_url)) {
return false;
}
return true;
}
// static
bool StructTraits<blink::mojom::PublicKeyCredentialUserEntityDataView,
device::PublicKeyCredentialUserEntity>::
Read(blink::mojom::PublicKeyCredentialUserEntityDataView data,
device::PublicKeyCredentialUserEntity* out) {
if (!data.ReadId(&out->id) || !data.ReadName(&out->name) ||
!data.ReadDisplayName(&out->display_name) ||
!data.ReadIcon(&out->icon_url)) {
return false;
}
return true;
}
// static
bool StructTraits<blink::mojom::CableAuthenticationDataView,
device::CableDiscoveryData>::
Read(blink::mojom::CableAuthenticationDataView data,
device::CableDiscoveryData* out) {
if (data.version() != 1) {
return false;
}
out->version = device::CableDiscoveryData::Version::V1;
out->v1.emplace();
if (!data.ReadClientEid(&out->v1->client_eid) ||
!data.ReadAuthenticatorEid(&out->v1->authenticator_eid) ||
!data.ReadSessionPreKey(&out->v1->session_pre_key)) {
return false;
}
return true;
}
// static
blink::mojom::AttestationConveyancePreference
EnumTraits<blink::mojom::AttestationConveyancePreference,
device::AttestationConveyancePreference>::
ToMojom(device::AttestationConveyancePreference input) {
switch (input) {
case ::device::AttestationConveyancePreference::kNone:
return blink::mojom::AttestationConveyancePreference::NONE;
case ::device::AttestationConveyancePreference::kIndirect:
return blink::mojom::AttestationConveyancePreference::INDIRECT;
case ::device::AttestationConveyancePreference::kDirect:
return blink::mojom::AttestationConveyancePreference::DIRECT;
case ::device::AttestationConveyancePreference::kEnterprise:
return blink::mojom::AttestationConveyancePreference::ENTERPRISE;
}
NOTREACHED();
return blink::mojom::AttestationConveyancePreference::NONE;
}
// static
bool EnumTraits<blink::mojom::AttestationConveyancePreference,
device::AttestationConveyancePreference>::
FromMojom(blink::mojom::AttestationConveyancePreference input,
device::AttestationConveyancePreference* output) {
switch (input) {
case blink::mojom::AttestationConveyancePreference::NONE:
*output = ::device::AttestationConveyancePreference::kNone;
return true;
case blink::mojom::AttestationConveyancePreference::INDIRECT:
*output = ::device::AttestationConveyancePreference::kIndirect;
return true;
case blink::mojom::AttestationConveyancePreference::DIRECT:
*output = ::device::AttestationConveyancePreference::kDirect;
return true;
case blink::mojom::AttestationConveyancePreference::ENTERPRISE:
*output = ::device::AttestationConveyancePreference::kEnterprise;
return true;
}
NOTREACHED();
return false;
}
} // namespace mojo