1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/device_reauth/chromeos/authenticator_chromeos.h"
#include "ash/constants/ash_features.h"
#include "ash/constants/ash_pref_names.h"
#include "ash/public/cpp/in_session_auth_dialog_controller.h"
#include "base/containers/contains.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/ash/auth/legacy_fingerprint_engine.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chromeos/ash/components/osauth/public/common_types.h"
#include "components/prefs/pref_service.h"
namespace {
void OnAuthComplete(base::OnceCallback<void(bool)> callback,
bool success,
const ash::AuthProofToken& token,
base::TimeDelta timeout) {
// Here we simply ignore `token` and `timeout`, as password manager manages
// its own auth timeout
std::move(callback).Run(success);
}
bool HasFingerprintRecord(const PrefService& pref_service) {
return pref_service.GetInteger(ash::prefs::kQuickUnlockFingerprintRecord) !=
0;
}
} // namespace
AuthenticatorChromeOS::AuthenticatorChromeOS() = default;
AuthenticatorChromeOS::~AuthenticatorChromeOS() = default;
void AuthenticatorChromeOS::AuthenticateUser(
const std::u16string& message,
base::OnceCallback<void(bool)> result_callback) {
// Calls `InSessionAuthDialogController::ShowAuthDialog` to authenticate the
// currently active user using configured auth factors.
// On Lacros, makes a crosapi call to the
// `chromeos::auth::mojom::InSessionAuth` interface implemented by ash. This
// in turn calls `InSessionAuthDialogController::ShowAuthDialog` to
// authenticate the currently active user using configured auth factors.
ash::InSessionAuthDialogController::Get()->ShowAuthDialog(
ash::InSessionAuthDialogController::Reason::kAccessPasswordManager,
base::UTF16ToUTF8(message),
base::BindOnce(&OnAuthComplete, std::move(result_callback)));
}
BiometricsStatusChromeOS AuthenticatorChromeOS::CheckIfBiometricsAvailable() {
const PrefService& prefs =
*ProfileManager::GetActiveUserProfile()->GetPrefs();
// No need for an AuthPerformer since we don't intent to perform
// authentication here.
ash::LegacyFingerprintEngine fp_engine(nullptr);
bool is_fingerprint_enabled = fp_engine.IsFingerprintEnabled(
prefs, ash::LegacyFingerprintEngine::Purpose::kAny);
if (!is_fingerprint_enabled) {
return BiometricsStatusChromeOS::kUnavailable;
}
return HasFingerprintRecord(prefs)
? BiometricsStatusChromeOS::kAvailable
: BiometricsStatusChromeOS::kNotConfiguredForUser;
}
|