Chromium Code Reviews| Index: chrome/browser/chromeos/login/supervised_user_manager_impl.cc |
| diff --git a/chrome/browser/chromeos/login/supervised_user_manager_impl.cc b/chrome/browser/chromeos/login/supervised_user_manager_impl.cc |
| index ca5cadc0fa4e8c62a7799e9be46dd24f98a487f9..b6d60ef1ec2194e5d55ae311772a4ca5d619ebb3 100644 |
| --- a/chrome/browser/chromeos/login/supervised_user_manager_impl.cc |
| +++ b/chrome/browser/chromeos/login/supervised_user_manager_impl.cc |
| @@ -12,6 +12,7 @@ |
| #include "base/strings/utf_string_conversions.h" |
| #include "base/values.h" |
| #include "chrome/browser/browser_process.h" |
| +#include "chrome/browser/chromeos/login/managed/supervised_user_authentication.h" |
| #include "chrome/browser/chromeos/login/user_manager_impl.h" |
| #include "chromeos/settings/cros_settings_names.h" |
| #include "content/public/browser/browser_thread.h" |
| @@ -21,6 +22,7 @@ using content::BrowserThread; |
| namespace { |
| +// Names for pref keys in Local State. |
| // A map from locally managed user local user id to sync user id. |
| const char kManagedUserSyncId[] = |
| "ManagedUserSyncId"; |
| @@ -53,10 +55,29 @@ const char kLocallyManagedUserCreationTransactionDisplayName[] = |
| const char kLocallyManagedUserCreationTransactionUserId[] = |
| "LocallyManagedUserCreationTransactionUserId"; |
| +// A map from user id to password schema id. |
| +const char kSupervisedUserPasswordSchema[] = |
| + "SupervisedUserPasswordSchema"; |
| + |
| +// A map from user id to password salt. |
| +const char kSupervisedUserPasswordSalt[] = |
| + "SupervisedUserPasswordSalt"; |
| + |
| +// A map from user id to password revision. |
| +const char kSupervisedUserPasswordRevision[] = |
| + "SupervisedUserPasswordRevision"; |
| + |
| } // namespace |
| namespace chromeos { |
| +// |
|
Nikita (slow)
2013/12/19 14:53:03
nit: Comment is missing?
Denis Kuznetsov (DE-MUC)
2013/12/19 16:22:17
Done.
|
| +const char kSchemaVersion[] = "SchemaVersion"; |
| +const char kPasswordRevision[] = "PasswordRevision"; |
| +const char kSalt[] = "PasswordSalt"; |
| +const char kEncryptedPassword[] = "EncryptedPassword"; |
| +const int kMinPasswordRevision = 1; |
| + |
| // static |
| void SupervisedUserManager::RegisterPrefs(PrefRegistrySimple* registry) { |
| registry->RegisterListPref(kLocallyManagedUsersFirstRun); |
| @@ -69,6 +90,10 @@ void SupervisedUserManager::RegisterPrefs(PrefRegistrySimple* registry) { |
| registry->RegisterDictionaryPref(kManagedUserManagers); |
| registry->RegisterDictionaryPref(kManagedUserManagerNames); |
| registry->RegisterDictionaryPref(kManagedUserManagerDisplayEmails); |
| + |
| + registry->RegisterDictionaryPref(kSupervisedUserPasswordSchema); |
| + registry->RegisterDictionaryPref(kSupervisedUserPasswordSalt); |
| + registry->RegisterDictionaryPref(kSupervisedUserPasswordRevision); |
| } |
| SupervisedUserManagerImpl::SupervisedUserManagerImpl(UserManagerImpl* owner) |
| @@ -76,6 +101,7 @@ SupervisedUserManagerImpl::SupervisedUserManagerImpl(UserManagerImpl* owner) |
| cros_settings_(CrosSettings::Get()) { |
| // SupervisedUserManager instance should be used only on UI thread. |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + authentication_.reset(new SupervisedUserAuthentication(this)); |
| } |
| SupervisedUserManagerImpl::~SupervisedUserManagerImpl() { |
| @@ -150,11 +176,8 @@ const User* SupervisedUserManagerImpl::CreateUserRecord( |
| std::string SupervisedUserManagerImpl::GetUserSyncId(const std::string& user_id) |
| const { |
| - PrefService* local_state = g_browser_process->local_state(); |
| - const DictionaryValue* sync_ids = |
| - local_state->GetDictionary(kManagedUserSyncId); |
| std::string result; |
| - sync_ids->GetStringWithoutPathExpansion(user_id, &result); |
| + GetUserValue(user_id, kManagedUserSyncId, &result); |
| return result; |
| } |
| @@ -172,27 +195,63 @@ string16 SupervisedUserManagerImpl::GetManagerDisplayName( |
| std::string SupervisedUserManagerImpl::GetManagerUserId( |
| const std::string& user_id) const { |
| - PrefService* local_state = g_browser_process->local_state(); |
| - const DictionaryValue* manager_ids = |
| - local_state->GetDictionary(kManagedUserManagers); |
| std::string result; |
| - manager_ids->GetStringWithoutPathExpansion(user_id, &result); |
| + GetUserValue(user_id, kManagedUserManagers, &result); |
| return result; |
| } |
| std::string SupervisedUserManagerImpl::GetManagerDisplayEmail( |
| const std::string& user_id) const { |
| - PrefService* local_state = g_browser_process->local_state(); |
| - const DictionaryValue* manager_mails = |
| - local_state->GetDictionary(kManagedUserManagerDisplayEmails); |
| std::string result; |
| - if (manager_mails->GetStringWithoutPathExpansion(user_id, &result) && |
| - !result.empty()) { |
| + if (GetUserValue(user_id, kManagedUserManagerDisplayEmails, &result) && |
| + !result.empty()) |
| return result; |
| - } |
| return GetManagerUserId(user_id); |
| } |
| +void SupervisedUserManagerImpl::GetPasswordInformation( |
| + const std::string& user_id, |
| + base::DictionaryValue* result) { |
| + std::string holder; |
| + if (GetUserValue(user_id, kSupervisedUserPasswordSchema, &holder)) |
| + result->SetStringWithoutPathExpansion(kSchemaVersion, holder); |
| + if (GetUserValue(user_id, kSupervisedUserPasswordRevision, &holder)) |
| + result->SetStringWithoutPathExpansion(kPasswordRevision, holder); |
| + if (GetUserValue(user_id, kSupervisedUserPasswordSalt, &holder)) |
| + result->SetStringWithoutPathExpansion(kSalt, holder); |
| +} |
| + |
| +void SupervisedUserManagerImpl::SetPasswordInformation( |
| + const std::string& user_id, |
| + const base::DictionaryValue* password_info) { |
| + std::string holder; |
| + if (password_info->GetStringWithoutPathExpansion(kSchemaVersion, &holder)) |
| + SetUserValue(user_id, kSupervisedUserPasswordSchema, holder); |
| + if (password_info->GetStringWithoutPathExpansion(kPasswordRevision, &holder)) |
| + SetUserValue(user_id, kSupervisedUserPasswordRevision, holder); |
| + if (password_info->GetStringWithoutPathExpansion(kSalt, &holder)) |
| + SetUserValue(user_id, kSupervisedUserPasswordSalt, holder); |
| + g_browser_process->local_state()->CommitPendingWrite(); |
| +} |
| + |
| +bool SupervisedUserManagerImpl::GetUserValue( |
| + const std::string& user_id, |
| + const char* key, |
| + std::string* out_value) const { |
| + PrefService* local_state = g_browser_process->local_state(); |
| + const DictionaryValue* dictionary = local_state->GetDictionary(key); |
| + return dictionary->GetStringWithoutPathExpansion(user_id, out_value); |
| +} |
| + |
| +void SupervisedUserManagerImpl::SetUserValue( |
| + const std::string& user_id, |
| + const char* key, |
| + const std::string& value) { |
| + PrefService* local_state = g_browser_process->local_state(); |
| + DictionaryPrefUpdate update(local_state, key); |
| + update->SetStringWithoutPathExpansion(user_id, value); |
| +} |
| + |
| const User* SupervisedUserManagerImpl::FindByDisplayName( |
| const base::string16& display_name) const { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| @@ -289,19 +348,20 @@ void SupervisedUserManagerImpl::RemoveNonCryptohomeData( |
| ListPrefUpdate prefs_new_users_update(prefs, kLocallyManagedUsersFirstRun); |
| prefs_new_users_update->Remove(base::StringValue(user_id), NULL); |
| - DictionaryPrefUpdate synd_id_update(prefs, kManagedUserSyncId); |
| - synd_id_update->RemoveWithoutPathExpansion(user_id, NULL); |
| - |
| - DictionaryPrefUpdate managers_update(prefs, kManagedUserManagers); |
| - managers_update->RemoveWithoutPathExpansion(user_id, NULL); |
| - |
| - DictionaryPrefUpdate manager_names_update(prefs, |
| - kManagedUserManagerNames); |
| - manager_names_update->RemoveWithoutPathExpansion(user_id, NULL); |
| + CleanPref(user_id, kManagedUserSyncId); |
| + CleanPref(user_id, kManagedUserManagers); |
| + CleanPref(user_id, kManagedUserManagerNames); |
| + CleanPref(user_id, kManagedUserManagerDisplayEmails); |
| + CleanPref(user_id, kSupervisedUserPasswordSalt); |
| + CleanPref(user_id, kSupervisedUserPasswordSchema); |
| + CleanPref(user_id, kSupervisedUserPasswordRevision); |
| +} |
| - DictionaryPrefUpdate manager_emails_update(prefs, |
| - kManagedUserManagerDisplayEmails); |
| - manager_emails_update->RemoveWithoutPathExpansion(user_id, NULL); |
| +void SupervisedUserManagerImpl::CleanPref(const std::string& user_id, |
| + const char* key) { |
| + PrefService* prefs = g_browser_process->local_state(); |
| + DictionaryPrefUpdate dict_update(prefs, key); |
| + dict_update->RemoveWithoutPathExpansion(user_id, NULL); |
| } |
| bool SupervisedUserManagerImpl::CheckForFirstRun(const std::string& user_id) { |
| @@ -332,5 +392,8 @@ void SupervisedUserManagerImpl::UpdateManagerName(const std::string& manager_id, |
| } |
| } |
| +SupervisedUserAuthentication* SupervisedUserManagerImpl::GetAuthentication() { |
| + return authentication_.get(); |
| +} |
| } // namespace chromeos |