Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1106)

Unified Diff: chrome/browser/chromeos/login/extended_authenticator.cc

Issue 286933002: [cros login] Split login related classes into subfolders. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix includes in new tests Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/login/extended_authenticator.cc
diff --git a/chrome/browser/chromeos/login/extended_authenticator.cc b/chrome/browser/chromeos/login/extended_authenticator.cc
deleted file mode 100644
index bee6f64ef06782f7fa4340e11c3a4728ca1e9763..0000000000000000000000000000000000000000
--- a/chrome/browser/chromeos/login/extended_authenticator.cc
+++ /dev/null
@@ -1,406 +0,0 @@
-// Copyright 2014 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.
-
-#include "chrome/browser/chromeos/login/extended_authenticator.h"
-
-#include "base/bind.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
-#include "chrome/browser/chromeos/boot_times_loader.h"
-#include "chrome/browser/chromeos/login/login_status_consumer.h"
-#include "chrome/browser/chromeos/login/parallel_authenticator.h"
-#include "chromeos/cryptohome/async_method_caller.h"
-#include "chromeos/cryptohome/cryptohome_parameters.h"
-#include "chromeos/cryptohome/homedir_methods.h"
-#include "chromeos/cryptohome/system_salt_getter.h"
-#include "chromeos/dbus/cryptohome_client.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
-#include "content/public/browser/browser_thread.h"
-#include "crypto/sha2.h"
-#include "google_apis/gaia/gaia_auth_util.h"
-#include "third_party/cros_system_api/dbus/service_constants.h"
-
-using content::BrowserThread;
-
-namespace chromeos {
-
-namespace {
-
-void RecordStartMarker(const std::string& marker) {
- std::string full_marker = "Cryptohome-";
- full_marker.append(marker);
- full_marker.append("-Start");
- chromeos::BootTimesLoader::Get()->AddLoginTimeMarker(full_marker, false);
-}
-
-void RecordEndMarker(const std::string& marker) {
- std::string full_marker = "Cryptohome-";
- full_marker.append(marker);
- full_marker.append("-End");
- chromeos::BootTimesLoader::Get()->AddLoginTimeMarker(full_marker, false);
-}
-
-} // namespace
-
-ExtendedAuthenticator::ExtendedAuthenticator(AuthStatusConsumer* consumer)
- : salt_obtained_(false), consumer_(consumer), old_consumer_(NULL) {
- SystemSaltGetter::Get()->GetSystemSalt(
- base::Bind(&ExtendedAuthenticator::OnSaltObtained, this));
-}
-
-ExtendedAuthenticator::ExtendedAuthenticator(LoginStatusConsumer* consumer)
- : salt_obtained_(false), consumer_(NULL), old_consumer_(consumer) {
- SystemSaltGetter::Get()->GetSystemSalt(
- base::Bind(&ExtendedAuthenticator::OnSaltObtained, this));
-}
-
-ExtendedAuthenticator::~ExtendedAuthenticator() {}
-
-void ExtendedAuthenticator::SetConsumer(LoginStatusConsumer* consumer) {
- old_consumer_ = consumer;
-}
-
-void ExtendedAuthenticator::OnSaltObtained(const std::string& system_salt) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- salt_obtained_ = true;
- system_salt_ = system_salt;
- for (size_t i = 0; i < hashing_queue_.size(); i++) {
- hashing_queue_[i].Run(system_salt);
- }
- hashing_queue_.clear();
-}
-
-void ExtendedAuthenticator::AuthenticateToMount(
- const UserContext& context,
- const HashSuccessCallback& success_callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- TransformContext(context,
- base::Bind(&ExtendedAuthenticator::DoAuthenticateToMount,
- this,
- success_callback));
-}
-
-void ExtendedAuthenticator::AuthenticateToCheck(
- const UserContext& context,
- const base::Closure& success_callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- TransformContext(context,
- base::Bind(&ExtendedAuthenticator::DoAuthenticateToCheck,
- this,
- success_callback));
-}
-
-void ExtendedAuthenticator::CreateMount(
- const std::string& user_id,
- const std::vector<cryptohome::KeyDefinition>& keys,
- const HashSuccessCallback& success_callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- RecordStartMarker("MountEx");
-
- std::string canonicalized = gaia::CanonicalizeEmail(user_id);
- cryptohome::Identification id(canonicalized);
- cryptohome::Authorization auth(keys.front());
- cryptohome::MountParameters mount(false);
- for (size_t i = 0; i < keys.size(); i++) {
- mount.create_keys.push_back(keys[i]);
- }
- UserContext context(user_id, keys.front().key, std::string());
- context.SetKeyLabel(keys.front().label);
-
- cryptohome::HomedirMethods::GetInstance()->MountEx(
- id,
- auth,
- mount,
- base::Bind(&ExtendedAuthenticator::OnMountComplete,
- this,
- "MountEx",
- context,
- success_callback));
-}
-
-void ExtendedAuthenticator::AddKey(const UserContext& context,
- const cryptohome::KeyDefinition& key,
- bool replace_existing,
- const base::Closure& success_callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- TransformContext(context,
- base::Bind(&ExtendedAuthenticator::DoAddKey,
- this,
- key,
- replace_existing,
- success_callback));
-}
-
-void ExtendedAuthenticator::UpdateKeyAuthorized(
- const UserContext& context,
- const cryptohome::KeyDefinition& key,
- const std::string& signature,
- const base::Closure& success_callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- TransformContext(context,
- base::Bind(&ExtendedAuthenticator::DoUpdateKeyAuthorized,
- this,
- key,
- signature,
- success_callback));
-}
-
-void ExtendedAuthenticator::RemoveKey(const UserContext& context,
- const std::string& key_to_remove,
- const base::Closure& success_callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- TransformContext(context,
- base::Bind(&ExtendedAuthenticator::DoRemoveKey,
- this,
- key_to_remove,
- success_callback));
-}
-
-void ExtendedAuthenticator::DoAuthenticateToMount(
- const HashSuccessCallback& success_callback,
- const UserContext& user_context) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- RecordStartMarker("MountEx");
-
- std::string canonicalized = gaia::CanonicalizeEmail(user_context.GetUserID());
- cryptohome::Identification id(canonicalized);
- cryptohome::Authorization auth(user_context.GetPassword(),
- user_context.GetKeyLabel());
- cryptohome::MountParameters mount(false);
-
- cryptohome::HomedirMethods::GetInstance()->MountEx(
- id,
- auth,
- mount,
- base::Bind(&ExtendedAuthenticator::OnMountComplete,
- this,
- "MountEx",
- user_context,
- success_callback));
-}
-
-void ExtendedAuthenticator::DoAuthenticateToCheck(
- const base::Closure& success_callback,
- const UserContext& user_context) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- RecordStartMarker("CheckKeyEx");
-
- std::string canonicalized = gaia::CanonicalizeEmail(user_context.GetUserID());
- cryptohome::Identification id(canonicalized);
- cryptohome::Authorization auth(user_context.GetPassword(),
- user_context.GetKeyLabel());
-
- cryptohome::HomedirMethods::GetInstance()->CheckKeyEx(
- id,
- auth,
- base::Bind(&ExtendedAuthenticator::OnOperationComplete,
- this,
- "CheckKeyEx",
- user_context,
- success_callback));
-}
-
-void ExtendedAuthenticator::DoAddKey(const cryptohome::KeyDefinition& key,
- bool replace_existing,
- const base::Closure& success_callback,
- const UserContext& user_context) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- RecordStartMarker("AddKeyEx");
-
- std::string canonicalized = gaia::CanonicalizeEmail(user_context.GetUserID());
- cryptohome::Identification id(canonicalized);
- cryptohome::Authorization auth(user_context.GetPassword(),
- user_context.GetKeyLabel());
-
- cryptohome::HomedirMethods::GetInstance()->AddKeyEx(
- id,
- auth,
- key,
- replace_existing,
- base::Bind(&ExtendedAuthenticator::OnOperationComplete,
- this,
- "AddKeyEx",
- user_context,
- success_callback));
-}
-
-void ExtendedAuthenticator::DoUpdateKeyAuthorized(
- const cryptohome::KeyDefinition& key,
- const std::string& signature,
- const base::Closure& success_callback,
- const UserContext& user_context) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- RecordStartMarker("UpdateKeyAuthorized");
-
- std::string canonicalized = gaia::CanonicalizeEmail(user_context.GetUserID());
- cryptohome::Identification id(canonicalized);
- cryptohome::Authorization auth(user_context.GetPassword(),
- user_context.GetKeyLabel());
-
- cryptohome::HomedirMethods::GetInstance()->UpdateKeyEx(
- id,
- auth,
- key,
- signature,
- base::Bind(&ExtendedAuthenticator::OnOperationComplete,
- this,
- "UpdateKeyAuthorized",
- user_context,
- success_callback));
-}
-
-void ExtendedAuthenticator::DoRemoveKey(const std::string& key_to_remove,
- const base::Closure& success_callback,
- const UserContext& user_context) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- RecordStartMarker("RemoveKeyEx");
-
- std::string canonicalized = gaia::CanonicalizeEmail(user_context.GetUserID());
- cryptohome::Identification id(canonicalized);
- cryptohome::Authorization auth(user_context.GetPassword(),
- user_context.GetKeyLabel());
-
- cryptohome::HomedirMethods::GetInstance()->RemoveKeyEx(
- id,
- auth,
- key_to_remove,
- base::Bind(&ExtendedAuthenticator::OnOperationComplete,
- this,
- "RemoveKeyEx",
- user_context,
- success_callback));
-}
-
-void ExtendedAuthenticator::OnMountComplete(
- const std::string& time_marker,
- const UserContext& user_context,
- const HashSuccessCallback& success_callback,
- bool success,
- cryptohome::MountError return_code,
- const std::string& mount_hash) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- RecordEndMarker(time_marker);
- UserContext copy;
- copy.CopyFrom(user_context);
- copy.SetUserIDHash(mount_hash);
- if (return_code == cryptohome::MOUNT_ERROR_NONE) {
- if (!success_callback.is_null())
- success_callback.Run(mount_hash);
- if (old_consumer_)
- old_consumer_->OnLoginSuccess(copy);
- return;
- }
- AuthState state = FAILED_MOUNT;
- if (return_code == cryptohome::MOUNT_ERROR_TPM_COMM_ERROR ||
- return_code == cryptohome::MOUNT_ERROR_TPM_DEFEND_LOCK ||
- return_code == cryptohome::MOUNT_ERROR_TPM_NEEDS_REBOOT) {
- state = FAILED_TPM;
- }
- if (return_code == cryptohome::MOUNT_ERROR_USER_DOES_NOT_EXIST) {
- state = NO_MOUNT;
- }
- if (consumer_)
- consumer_->OnAuthenticationFailure(state);
- if (old_consumer_) {
- LoginFailure failure(LoginFailure::COULD_NOT_MOUNT_CRYPTOHOME);
- old_consumer_->OnLoginFailure(failure);
- }
-}
-
-void ExtendedAuthenticator::OnOperationComplete(
- const std::string& time_marker,
- const UserContext& user_context,
- const base::Closure& success_callback,
- bool success,
- cryptohome::MountError return_code) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- RecordEndMarker(time_marker);
- if (return_code == cryptohome::MOUNT_ERROR_NONE) {
- if (!success_callback.is_null())
- success_callback.Run();
- if (old_consumer_)
- old_consumer_->OnLoginSuccess(user_context);
- return;
- }
-
- AuthState state = FAILED_MOUNT;
-
- if (return_code == cryptohome::MOUNT_ERROR_TPM_COMM_ERROR ||
- return_code == cryptohome::MOUNT_ERROR_TPM_DEFEND_LOCK ||
- return_code == cryptohome::MOUNT_ERROR_TPM_NEEDS_REBOOT) {
- state = FAILED_TPM;
- }
-
- if (return_code == cryptohome::MOUNT_ERROR_USER_DOES_NOT_EXIST)
- state = NO_MOUNT;
-
- if (consumer_)
- consumer_->OnAuthenticationFailure(state);
-
- if (old_consumer_) {
- LoginFailure failure(LoginFailure::UNLOCK_FAILED);
- old_consumer_->OnLoginFailure(failure);
- }
-}
-
-void ExtendedAuthenticator::HashPasswordWithSalt(
- const std::string& password,
- const HashSuccessCallback& success_callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DCHECK(consumer_) << "This is a part of new API";
-
- DoHashWithSalt(password, success_callback, system_salt_);
-}
-
-void ExtendedAuthenticator::TransformContext(const UserContext& user_context,
- const ContextCallback& callback) {
- if (!user_context.DoesNeedPasswordHashing()) {
- callback.Run(user_context);
- } else {
- DoHashWithSalt(user_context.GetPassword(),
- base::Bind(&ExtendedAuthenticator::DidTransformContext,
- this,
- user_context,
- callback),
- system_salt_);
- }
-}
-
-void ExtendedAuthenticator::DidTransformContext(
- const UserContext& user_context,
- const ContextCallback& callback,
- const std::string& hashed_password) {
- DCHECK(user_context.DoesNeedPasswordHashing());
- UserContext context;
- context.CopyFrom(user_context);
- context.SetPassword(hashed_password);
- context.SetDoesNeedPasswordHashing(false);
- callback.Run(context);
-}
-
-void ExtendedAuthenticator::DoHashWithSalt(const std::string& password,
- const HashSuccessCallback& callback,
- const std::string& system_salt) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- if (salt_obtained_) {
- std::string hash =
- ParallelAuthenticator::HashPassword(password, system_salt);
- callback.Run(hash);
- return;
- }
- hashing_queue_.push_back(base::Bind(
- &ExtendedAuthenticator::DoHashWithSalt, this, password, callback));
-}
-
-} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/login/extended_authenticator.h ('k') | chrome/browser/chromeos/login/fake_login_utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698