Index: chrome/browser/chromeos/login/managed/supervised_user_login_flow.cc |
diff --git a/chrome/browser/chromeos/login/managed/supervised_user_login_flow.cc b/chrome/browser/chromeos/login/managed/supervised_user_login_flow.cc |
deleted file mode 100644 |
index 0e3dd8e47af91dd2943e0ef2134406280d866150..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/login/managed/supervised_user_login_flow.cc |
+++ /dev/null |
@@ -1,258 +0,0 @@ |
-// Copyright 2013 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/managed/supervised_user_login_flow.h" |
- |
-#include "base/base64.h" |
-#include "base/logging.h" |
-#include "base/metrics/histogram.h" |
-#include "base/prefs/pref_registry_simple.h" |
-#include "base/prefs/pref_service.h" |
-#include "base/values.h" |
-#include "chrome/browser/chromeos/login/login_utils.h" |
-#include "chrome/browser/chromeos/login/managed/locally_managed_user_constants.h" |
-#include "chrome/browser/chromeos/login/managed/locally_managed_user_creation_screen.h" |
-#include "chrome/browser/chromeos/login/managed/supervised_user_authentication.h" |
-#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" |
-#include "chrome/browser/chromeos/login/users/supervised_user_manager.h" |
-#include "chrome/browser/chromeos/login/users/user_manager.h" |
-#include "chrome/browser/chromeos/login/wizard_controller.h" |
-#include "chromeos/login/auth/key.h" |
-#include "content/public/browser/browser_thread.h" |
- |
-using content::BrowserThread; |
- |
-namespace chromeos { |
- |
-SupervisedUserLoginFlow::SupervisedUserLoginFlow( |
- const std::string& user_id) |
- : ExtendedUserFlow(user_id), |
- data_loaded_(false), |
- weak_factory_(this) { |
-} |
- |
-SupervisedUserLoginFlow::~SupervisedUserLoginFlow() {} |
- |
-bool SupervisedUserLoginFlow::CanLockScreen() { |
- return true; |
-} |
- |
-bool SupervisedUserLoginFlow::ShouldLaunchBrowser() { |
- return data_loaded_; |
-} |
- |
-bool SupervisedUserLoginFlow::ShouldSkipPostLoginScreens() { |
- return true; |
-} |
- |
-bool SupervisedUserLoginFlow::HandleLoginFailure(const AuthFailure& failure) { |
- return false; |
-} |
- |
-bool SupervisedUserLoginFlow::HandlePasswordChangeDetected() { |
- return false; |
-} |
- |
-void SupervisedUserLoginFlow::HandleOAuthTokenStatusChange( |
- User::OAuthTokenStatus status) { |
-} |
- |
-void SupervisedUserLoginFlow::OnSyncSetupDataLoaded( |
- const std::string& token) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- ConfigureSync(token); |
-} |
- |
-void SupervisedUserLoginFlow::ConfigureSync(const std::string& token) { |
- data_loaded_ = true; |
- |
- // TODO(antrim): add error handling (no token loaded). |
- // See also: http://crbug.com/312751 |
- UserManager::Get()->GetSupervisedUserManager()->ConfigureSyncWithToken( |
- profile_, token); |
- SupervisedUserAuthentication* auth = |
- UserManager::Get()->GetSupervisedUserManager()->GetAuthentication(); |
- |
- if (auth->HasScheduledPasswordUpdate(user_id())) { |
- auth->LoadPasswordUpdateData( |
- user_id(), |
- base::Bind(&SupervisedUserLoginFlow::OnPasswordChangeDataLoaded, |
- weak_factory_.GetWeakPtr()), |
- base::Bind(&SupervisedUserLoginFlow::OnPasswordChangeDataLoadFailed, |
- weak_factory_.GetWeakPtr())); |
- return; |
- } |
- Finish(); |
-} |
- |
-void SupervisedUserLoginFlow::HandleLoginSuccess( |
- const UserContext& login_context) { |
- context_ = login_context; |
-} |
- |
-void SupervisedUserLoginFlow::OnPasswordChangeDataLoaded( |
- const base::DictionaryValue* password_data) { |
- // Edge case, when manager has signed in and already updated the password. |
- SupervisedUserAuthentication* auth = |
- UserManager::Get()->GetSupervisedUserManager()->GetAuthentication(); |
- if (!auth->NeedPasswordChange(user_id(), password_data)) { |
- VLOG(1) << "Password already changed for " << user_id(); |
- auth->ClearScheduledPasswordUpdate(user_id()); |
- Finish(); |
- return; |
- } |
- |
- // Two cases now - we can currently have either old-style password, or new |
- // password. |
- std::string base64_signature; |
- std::string signature; |
- std::string password; |
- int revision = 0; |
- int schema = 0; |
- bool success = password_data->GetStringWithoutPathExpansion( |
- kPasswordSignature, &base64_signature); |
- success &= password_data->GetIntegerWithoutPathExpansion(kPasswordRevision, |
- &revision); |
- success &= |
- password_data->GetIntegerWithoutPathExpansion(kSchemaVersion, &schema); |
- success &= password_data->GetStringWithoutPathExpansion(kEncryptedPassword, |
- &password); |
- if (!success) { |
- LOG(ERROR) << "Incomplete data for password change"; |
- |
- UMA_HISTOGRAM_ENUMERATION( |
- "ManagedUsers.ChromeOS.PasswordChange", |
- SupervisedUserAuthentication::PASSWORD_CHANGE_FAILED_INCOMPLETE_DATA, |
- SupervisedUserAuthentication::PASSWORD_CHANGE_RESULT_MAX_VALUE); |
- Finish(); |
- return; |
- } |
- base::Base64Decode(base64_signature, &signature); |
- scoped_ptr<base::DictionaryValue> data_copy(password_data->DeepCopy()); |
- cryptohome::KeyDefinition key(password, |
- kCryptohomeSupervisedUserKeyLabel, |
- kCryptohomeSupervisedUserKeyPrivileges); |
- |
- authenticator_ = new ExtendedAuthenticator(this); |
- SupervisedUserAuthentication::Schema current_schema = |
- auth->GetPasswordSchema(user_id()); |
- |
- key.revision = revision; |
- |
- if (SupervisedUserAuthentication::SCHEMA_PLAIN == current_schema) { |
- // We need to add new key, and block old one. As we don't actually have |
- // signature key, use Migrate privilege instead of AuthorizedUpdate. |
- key.privileges = kCryptohomeSupervisedUserIncompleteKeyPrivileges; |
- |
- VLOG(1) << "Adding new schema key"; |
- DCHECK(context_.GetKey()->GetLabel().empty()); |
- authenticator_->AddKey(context_, |
- key, |
- false /* no key exists */, |
- base::Bind(&SupervisedUserLoginFlow::OnNewKeyAdded, |
- weak_factory_.GetWeakPtr(), |
- Passed(&data_copy))); |
- } else if (SupervisedUserAuthentication::SCHEMA_SALT_HASHED == |
- current_schema) { |
- VLOG(1) << "Updating the key"; |
- |
- if (auth->HasIncompleteKey(user_id())) { |
- // We need to use Migrate instead of Authorized Update privilege. |
- key.privileges = kCryptohomeSupervisedUserIncompleteKeyPrivileges; |
- } |
- // Just update the key. |
- DCHECK_EQ(context_.GetKey()->GetLabel(), kCryptohomeSupervisedUserKeyLabel); |
- authenticator_->UpdateKeyAuthorized( |
- context_, |
- key, |
- signature, |
- base::Bind(&SupervisedUserLoginFlow::OnPasswordUpdated, |
- weak_factory_.GetWeakPtr(), |
- Passed(&data_copy))); |
- } else { |
- NOTREACHED() << "Unsupported password schema"; |
- } |
-} |
- |
-void SupervisedUserLoginFlow::OnNewKeyAdded( |
- scoped_ptr<base::DictionaryValue> password_data) { |
- VLOG(1) << "New key added"; |
- SupervisedUserAuthentication* auth = |
- UserManager::Get()->GetSupervisedUserManager()->GetAuthentication(); |
- auth->StorePasswordData(user_id(), *password_data.get()); |
- auth->MarkKeyIncomplete(user_id(), true /* incomplete */); |
- authenticator_->RemoveKey( |
- context_, |
- kLegacyCryptohomeSupervisedUserKeyLabel, |
- base::Bind(&SupervisedUserLoginFlow::OnOldKeyRemoved, |
- weak_factory_.GetWeakPtr())); |
-} |
- |
-void SupervisedUserLoginFlow::OnOldKeyRemoved() { |
- UMA_HISTOGRAM_ENUMERATION( |
- "ManagedUsers.ChromeOS.PasswordChange", |
- SupervisedUserAuthentication::PASSWORD_CHANGED_IN_USER_SESSION, |
- SupervisedUserAuthentication::PASSWORD_CHANGE_RESULT_MAX_VALUE); |
- Finish(); |
-} |
- |
-void SupervisedUserLoginFlow::OnPasswordChangeDataLoadFailed() { |
- LOG(ERROR) << "Could not load data for password change"; |
- |
- UMA_HISTOGRAM_ENUMERATION( |
- "ManagedUsers.ChromeOS.PasswordChange", |
- SupervisedUserAuthentication::PASSWORD_CHANGE_FAILED_LOADING_DATA, |
- SupervisedUserAuthentication::PASSWORD_CHANGE_RESULT_MAX_VALUE); |
- Finish(); |
-} |
- |
-void SupervisedUserLoginFlow::OnAuthenticationFailure( |
- ExtendedAuthenticator::AuthState state) { |
- LOG(ERROR) << "Authentication error during password change"; |
- |
- UMA_HISTOGRAM_ENUMERATION( |
- "ManagedUsers.ChromeOS.PasswordChange", |
- SupervisedUserAuthentication:: |
- PASSWORD_CHANGE_FAILED_AUTHENTICATION_FAILURE, |
- SupervisedUserAuthentication::PASSWORD_CHANGE_RESULT_MAX_VALUE); |
- Finish(); |
-} |
- |
-void SupervisedUserLoginFlow::OnPasswordUpdated( |
- scoped_ptr<base::DictionaryValue> password_data) { |
- VLOG(1) << "Updated password for supervised user"; |
- |
- SupervisedUserAuthentication* auth = |
- UserManager::Get()->GetSupervisedUserManager()->GetAuthentication(); |
- |
- // Incomplete state is not there in password_data, carry it from old state. |
- bool was_incomplete = auth->HasIncompleteKey(user_id()); |
- auth->StorePasswordData(user_id(), *password_data.get()); |
- if (was_incomplete) |
- auth->MarkKeyIncomplete(user_id(), true /* incomplete */); |
- |
- UMA_HISTOGRAM_ENUMERATION( |
- "ManagedUsers.ChromeOS.PasswordChange", |
- SupervisedUserAuthentication::PASSWORD_CHANGED_IN_USER_SESSION, |
- SupervisedUserAuthentication::PASSWORD_CHANGE_RESULT_MAX_VALUE); |
- Finish(); |
-} |
- |
-void SupervisedUserLoginFlow::Finish() { |
- LoginUtils::Get()->DoBrowserLaunch(profile_, host()); |
- profile_ = NULL; |
- UnregisterFlowSoon(); |
-} |
- |
-void SupervisedUserLoginFlow::LaunchExtraSteps( |
- Profile* profile) { |
- profile_ = profile; |
- UserManager::Get()->GetSupervisedUserManager()->LoadSupervisedUserToken( |
- profile, |
- base::Bind( |
- &SupervisedUserLoginFlow::OnSyncSetupDataLoaded, |
- weak_factory_.GetWeakPtr())); |
-} |
- |
-} // namespace chromeos |