12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // 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.
- #ifndef DEVICE_FIDO_RESET_REQUEST_HANDLER_H_
- #define DEVICE_FIDO_RESET_REQUEST_HANDLER_H_
- #include <memory>
- #include "base/callback.h"
- #include "base/component_export.h"
- #include "base/containers/flat_set.h"
- #include "base/memory/weak_ptr.h"
- #include "base/sequence_checker.h"
- #include "device/fido/fido_discovery_factory.h"
- #include "device/fido/fido_request_handler_base.h"
- #include "device/fido/fido_transport_protocol.h"
- namespace device {
- class FidoAuthenticator;
- namespace pin {
- struct EmptyResponse;
- }
- // ResetRequestHandler is a simple state machine that gets a touch from an
- // authenticator and then sends a CTAP2 reset request. This is expected to be
- // driven by Settings UI for users to manually reset authenticators.
- class COMPONENT_EXPORT(DEVICE_FIDO) ResetRequestHandler
- : public FidoRequestHandlerBase {
- public:
- // ResetSentCallback will be run once an authenticator has been touched and a
- // reset command has been sent to it. This will always occur before
- // |FinishedCallback|.
- using ResetSentCallback = base::OnceCallback<void()>;
- // FinishedCallback will be called once this process has completed. If the
- // status is |kCtap1ErrInvalidCommand| then the user may have selected a non-
- // CTAP2 authenticator, in which case no reset command was ever sent.
- // Otherwise the status is the result of the reset command.
- using FinishedCallback = base::OnceCallback<void(CtapDeviceResponseCode)>;
- ResetRequestHandler(
- const base::flat_set<FidoTransportProtocol>& supported_transports,
- ResetSentCallback reset_sent_callback,
- FinishedCallback finished_callback,
- std::unique_ptr<FidoDiscoveryFactory> fido_discovery_factory =
- std::make_unique<FidoDiscoveryFactory>());
- ResetRequestHandler(const ResetRequestHandler&) = delete;
- ResetRequestHandler& operator=(const ResetRequestHandler&) = delete;
- ~ResetRequestHandler() override;
- private:
- // FidoRequestHandlerBase:
- void DispatchRequest(FidoAuthenticator* authenticator) override;
- void OnTouch(FidoAuthenticator* authenticator);
- void OnResetComplete(CtapDeviceResponseCode status,
- absl::optional<pin::EmptyResponse> response);
- ResetSentCallback reset_sent_callback_;
- FinishedCallback finished_callback_;
- bool processed_touch_ = false;
- std::unique_ptr<FidoDiscoveryFactory> fido_discovery_factory_;
- SEQUENCE_CHECKER(my_sequence_checker_);
- base::WeakPtrFactory<ResetRequestHandler> weak_factory_{this};
- };
- } // namespace device
- #endif // DEVICE_FIDO_RESET_REQUEST_HANDLER_H_
|