LocalAuthenticator.h [plain text]
#pragma once
#if ENABLE(WEB_AUTHN)
#include "Authenticator.h"
#include "LocalConnection.h"
#include <wtf/UniqueRef.h>
OBJC_CLASS LAContext;
namespace WebKit {
class LocalAuthenticator final : public Authenticator {
public:
enum class State {
Init,
RequestReceived,
UserVerified,
Attested,
ResponseSelected,
PolicyDecided,
};
static Ref<LocalAuthenticator> create(UniqueRef<LocalConnection>&& connection)
{
return adoptRef(*new LocalAuthenticator(WTFMove(connection)));
}
static void clearAllCredentials();
private:
explicit LocalAuthenticator(UniqueRef<LocalConnection>&&);
void makeCredential() final;
void continueMakeCredentialAfterDecidePolicy(LocalAuthenticatorPolicy);
void continueMakeCredentialAfterReceivingLAContext(LAContext *);
void continueMakeCredentialAfterUserVerification(SecAccessControlRef, LocalConnection::UserVerification, LAContext *);
void continueMakeCredentialAfterAttested(Vector<uint8_t>&& credentialId, Vector<uint8_t>&& authData, NSArray *certificates, NSError *);
void getAssertion() final;
void continueGetAssertionAfterResponseSelected(Ref<WebCore::AuthenticatorAssertionResponse>&&);
void continueGetAssertionAfterUserVerification(Ref<WebCore::AuthenticatorAssertionResponse>&&, LocalConnection::UserVerification, LAContext *);
void receiveException(WebCore::ExceptionData&&, WebAuthenticationStatus = WebAuthenticationStatus::LAError) const;
void deleteDuplicateCredential() const;
bool validateUserVerification(LocalConnection::UserVerification) const;
State m_state { State::Init };
UniqueRef<LocalConnection> m_connection;
Vector<Ref<WebCore::AuthenticatorAssertionResponse>> m_existingCredentials;
RetainPtr<NSData> m_provisionalCredentialId;
};
}
#endif // ENABLE(WEB_AUTHN)