chromium/chromeos/ash/components/osauth/impl/request/webauthn_auth_request.h

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMEOS_ASH_COMPONENTS_OSAUTH_IMPL_REQUEST_WEBAUTHN_AUTH_REQUEST_H_
#define CHROMEOS_ASH_COMPONENTS_OSAUTH_IMPL_REQUEST_WEBAUTHN_AUTH_REQUEST_H_

#include "base/component_export.h"
#include "base/functional/callback.h"
#include "chromeos/ash/components/osauth/public/request/auth_request.h"

namespace ash {

// Passed to `ActiveSessionAuthController::ShowAuthDialog` when authenticating
// with WebAuthN, handles behavior specific to those requests.
class COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_OSAUTH) WebAuthNAuthRequest
    : public AuthRequest {
 public:
  // Callback for overall authentication flow result.
  using FinishCallback = base::OnceCallback<void(bool success)>;

  WebAuthNAuthRequest(const std::string& rp_id, FinishCallback callback);
  ~WebAuthNAuthRequest() override;
  WebAuthNAuthRequest(const WebAuthNAuthRequest&) = delete;
  WebAuthNAuthRequest& operator=(const WebAuthNAuthRequest&) = delete;

  // AuthRequest:
  AuthSessionIntent GetAuthSessionIntent() const override;
  AuthRequest::Reason GetAuthReason() const override;
  const std::u16string GetDescription() const override;
  void NotifyAuthSuccess(std::unique_ptr<UserContext> user_context) override;
  void NotifyAuthFailure() override;

  const std::string GetRpId() const;

 private:
  FinishCallback finish_callback_;
  const std::string rp_id_;
};

}  // namespace ash

#endif  // CHROMEOS_ASH_COMPONENTS_OSAUTH_IMPL_REQUEST_WEBAUTHN_AUTH_REQUEST_H_