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 4d35f0673622d572138949ef9a489ab42dea1a4f..e656ebfa43ec1210805be96e4941866b55a6044b 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" |
| @@ -53,10 +54,27 @@ const char kLocallyManagedUserCreationTransactionDisplayName[] = |
| const char kLocallyManagedUserCreationTransactionUserId[] = |
| "LocallyManagedUserCreationTransactionUserId"; |
| +// A map from user id to password schema version, |
|
Nikita (slow)
2013/12/09 16:42:16
nit: revision, dot at the end.
Denis Kuznetsov (DE-MUC)
2013/12/12 19:45:24
Done.
|
| +const char kSupervisedUserPasswordSchemaVersion[] = |
| + "SupervisedUserPasswordSchemaVersion"; |
| + |
| +// A map from user id to password version. |
| +const char kSupervisedUserPasswordSalt[] = |
| + "SupervisedUserPasswordSalt"; |
| + |
| +// A map from user id to password salt. |
| +const char kSupervisedUserPasswordVersion[] = |
| + "SupervisedUserPasswordVersion"; |
| + |
| } // namespace |
| namespace chromeos { |
| +const char kSchemaVersion[] = "SchemaVersion"; |
|
Nikita (slow)
2013/12/09 16:42:16
nit: One small comment about these would be helpfu
Denis Kuznetsov (DE-MUC)
2013/12/12 19:45:24
Done.
|
| +const char kPasswordVersion[] = "PasswordVersion"; |
| +const char kSalt[] = "PasswordSalt"; |
| +const char kEncryptedPassword[] = "EncryptedPassword"; |
| + |
| // static |
| void SupervisedUserManager::RegisterPrefs(PrefRegistrySimple* registry) { |
| registry->RegisterListPref(kLocallyManagedUsersFirstRun); |
| @@ -69,6 +87,10 @@ void SupervisedUserManager::RegisterPrefs(PrefRegistrySimple* registry) { |
| registry->RegisterDictionaryPref(kManagedUserManagers); |
| registry->RegisterDictionaryPref(kManagedUserManagerNames); |
| registry->RegisterDictionaryPref(kManagedUserManagerDisplayEmails); |
| + |
| + registry->RegisterDictionaryPref(kSupervisedUserPasswordSchemaVersion); |
| + registry->RegisterDictionaryPref(kSupervisedUserPasswordSalt); |
| + registry->RegisterDictionaryPref(kSupervisedUserPasswordVersion); |
| } |
| SupervisedUserManagerImpl::SupervisedUserManagerImpl(UserManagerImpl* owner) |
| @@ -76,6 +98,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 +173,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 +192,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) { |
|
Bernhard Bauer
2013/12/11 14:46:43
You don't really need to pass a dictionary here th
Denis Kuznetsov (DE-MUC)
2013/12/12 19:45:24
I want to keep things simple - same dictionary wil
Bernhard Bauer
2013/12/13 00:30:50
Like I explained above, it won't be the exact same
|
| + std::string holder; |
| + if (GetUserValue(user_id, kSupervisedUserPasswordSchemaVersion, &holder)) |
| + result->SetStringWithoutPathExpansion(kSchemaVersion, holder); |
| + if (GetUserValue(user_id, kSupervisedUserPasswordVersion, &holder)) |
| + result->SetStringWithoutPathExpansion(kPasswordVersion, 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, kSupervisedUserPasswordSchemaVersion, holder); |
| + if (password_info->GetStringWithoutPathExpansion(kPasswordVersion, &holder)) |
| + SetUserValue(user_id, kSupervisedUserPasswordVersion, 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->SetWithoutPathExpansion(user_id, new base::StringValue(value)); |
|
Bernhard Bauer
2013/12/11 14:46:43
SetStringWithoutPathExpansion()
Denis Kuznetsov (DE-MUC)
2013/12/12 19:45:24
Done.
|
| +} |
| + |
| const User* SupervisedUserManagerImpl::FindByDisplayName( |
| const string16& display_name) const { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| @@ -289,19 +345,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, kSupervisedUserPasswordSchemaVersion); |
| + CleanPref(user_id, kSupervisedUserPasswordVersion); |
| +} |
| - 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 +389,9 @@ void SupervisedUserManagerImpl::UpdateManagerName(const std::string& manager_id, |
| } |
| } |
| +SupervisedUserAuthentication* SupervisedUserManagerImpl:: |
| + GetSupervisedUserAuthentication() { |
| + return authentication_.get(); |
| +} |
| } // namespace chromeos |