PublicKeyCredentialRequestOptions.h [plain text]
#pragma once
#if ENABLE(WEB_AUTHN)
#include "AuthenticationExtensionsClientInputs.h"
#include "BufferSource.h"
#include "PublicKeyCredentialDescriptor.h"
#include "UserVerificationRequirement.h"
#include <wtf/Forward.h>
#endif // ENABLE(WEB_AUTHN)
namespace WebCore {
struct PublicKeyCredentialRequestOptions {
#if ENABLE(WEB_AUTHN)
BufferSource challenge;
Optional<unsigned> timeout;
mutable String rpId;
Vector<PublicKeyCredentialDescriptor> allowCredentials;
UserVerificationRequirement userVerification { UserVerificationRequirement::Preferred };
mutable Optional<AuthenticationExtensionsClientInputs> extensions;
template<class Encoder> void encode(Encoder&) const;
template<class Decoder> static Optional<PublicKeyCredentialRequestOptions> decode(Decoder&);
#endif // ENABLE(WEB_AUTHN)
};
#if ENABLE(WEB_AUTHN)
template<class Encoder>
void PublicKeyCredentialRequestOptions::encode(Encoder& encoder) const
{
encoder << timeout << rpId << allowCredentials << userVerification << extensions;
}
template<class Decoder>
Optional<PublicKeyCredentialRequestOptions> PublicKeyCredentialRequestOptions::decode(Decoder& decoder)
{
PublicKeyCredentialRequestOptions result;
Optional<Optional<unsigned>> timeout;
decoder >> timeout;
if (!timeout)
return WTF::nullopt;
result.timeout = WTFMove(*timeout);
if (!decoder.decode(result.rpId))
return WTF::nullopt;
if (!decoder.decode(result.allowCredentials))
return WTF::nullopt;
Optional<UserVerificationRequirement> userVerification;
decoder >> userVerification;
if (!userVerification)
return WTF::nullopt;
result.userVerification = WTFMove(*userVerification);
Optional<Optional<AuthenticationExtensionsClientInputs>> extensions;
decoder >> extensions;
if (!extensions)
return WTF::nullopt;
result.extensions = WTFMove(*extensions);
return result;
}
#endif // ENABLE(WEB_AUTHN)
}