chromium/chromeos/ash/components/osauth/public/request/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_PUBLIC_REQUEST_AUTH_REQUEST_H_
#define CHROMEOS_ASH_COMPONENTS_OSAUTH_PUBLIC_REQUEST_AUTH_REQUEST_H_

#include <memory>

#include "chromeos/ash/components/login/auth/public/auth_session_intent.h"

namespace ash {

class UserContext;

// This class encapsulates logic that governs behaviors specific to
// a given `ActiveSessionAuthController::Reason`.
// `AuthRequest` is passed to `ActiveSessionAuthController::ShowAuthDialog`
// to modify various behaviors of the authentication.
class COMPONENT_EXPORT(CHROMEOS_ASH_COMPONENTS_OSAUTH) AuthRequest {
 public:
  // The enums below are used in histograms, do not remove/renumber entries. If
  // you're adding to any of these enums, update
  // ActiveSessionAuthControllerReason in
  // tools/metrics/histograms/metadata/ash/enums.xml:
  enum class Reason {
    kPasswordManager = 0,
    kSettings = 1,
    kWebAuthN = 2,
    kMaxValue = kWebAuthN
  };

  // Returns the AuthSession intent to be used for the AuthRequest.
  // This differs from `GetAuthReason` in that in returns the
  // cryptohome-level intent of the authentication. i.e kDecrypt vs
  // kVerifyOnly vs kWebAuthN.
  virtual AuthSessionIntent GetAuthSessionIntent() const = 0;

  // Return the reason from authentication. This is the client that
  // requested the authentication. i.e ChromeOS settings, Chrome
  // password manager, WebAuthN.
  virtual Reason GetAuthReason() const = 0;

  // Returns a description to attach under the dialog's Titlebar,
  // describing the purpose of the authentication. i.e "ChromeOS
  // settings would like to know it's you".
  virtual const std::u16string GetDescription() const = 0;

  // Notified clients of the authentication of success or failure.
  virtual void NotifyAuthSuccess(std::unique_ptr<UserContext> user_context) = 0;
  virtual void NotifyAuthFailure() = 0;

  virtual ~AuthRequest() = default;
};

}  // namespace ash

#endif  // CHROMEOS_ASH_COMPONENTS_OSAUTH_PUBLIC_REQUEST_AUTH_REQUEST_H_