| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromeos/network/managed_network_configuration_handler.h" | 5 #include "chromeos/network/managed_network_configuration_handler.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 const network_handler::ErrorCallback& error_callback) { | 81 const network_handler::ErrorCallback& error_callback) { |
| 82 network_event_log::AddEntry(kLogModule, error_name, error_message); | 82 network_event_log::AddEntry(kLogModule, error_name, error_message); |
| 83 error_callback.Run( | 83 error_callback.Run( |
| 84 error_name, | 84 error_name, |
| 85 make_scoped_ptr( | 85 make_scoped_ptr( |
| 86 network_handler::CreateErrorData(service_path, | 86 network_handler::CreateErrorData(service_path, |
| 87 error_name, | 87 error_name, |
| 88 error_message))); | 88 error_message))); |
| 89 } | 89 } |
| 90 | 90 |
| 91 // Returns the NetworkUIData parsed from the UIData property of | |
| 92 // |shill_dictionary|. If parsing fails or the field doesn't exist, returns | |
| 93 // NULL. | |
| 94 scoped_ptr<NetworkUIData> GetUIData( | |
| 95 const base::DictionaryValue& shill_dictionary) { | |
| 96 std::string ui_data_blob; | |
| 97 if (shill_dictionary.GetStringWithoutPathExpansion( | |
| 98 flimflam::kUIDataProperty, | |
| 99 &ui_data_blob) && | |
| 100 !ui_data_blob.empty()) { | |
| 101 scoped_ptr<base::DictionaryValue> ui_data_dict = | |
| 102 onc::ReadDictionaryFromJson(ui_data_blob); | |
| 103 if (ui_data_dict) | |
| 104 return make_scoped_ptr(new NetworkUIData(*ui_data_dict)); | |
| 105 else | |
| 106 LOG(ERROR) << "UIData is not a valid JSON dictionary."; | |
| 107 } | |
| 108 return scoped_ptr<NetworkUIData>(); | |
| 109 } | |
| 110 | |
| 111 // Sets the UIData property in |shill_dictionary| to the serialization of | 91 // Sets the UIData property in |shill_dictionary| to the serialization of |
| 112 // |ui_data|. | 92 // |ui_data|. |
| 113 void SetUIData(const NetworkUIData& ui_data, | 93 void SetUIData(const NetworkUIData& ui_data, |
| 114 base::DictionaryValue* shill_dictionary) { | 94 base::DictionaryValue* shill_dictionary) { |
| 115 base::DictionaryValue ui_data_dict; | 95 base::DictionaryValue ui_data_dict; |
| 116 ui_data.FillDictionary(&ui_data_dict); | 96 ui_data.FillDictionary(&ui_data_dict); |
| 117 std::string ui_data_blob; | 97 std::string ui_data_blob; |
| 118 base::JSONWriter::Write(&ui_data_dict, &ui_data_blob); | 98 base::JSONWriter::Write(&ui_data_dict, &ui_data_blob); |
| 119 shill_dictionary->SetStringWithoutPathExpansion(flimflam::kUIDataProperty, | 99 shill_dictionary->SetStringWithoutPathExpansion(flimflam::kUIDataProperty, |
| 120 ui_data_blob); | 100 ui_data_blob); |
| 121 } | 101 } |
| 122 | 102 |
| 123 // A dummy callback to ignore the result of Shill calls. | 103 // A dummy callback to ignore the result of Shill calls. |
| 124 void IgnoreString(const std::string& str) { | 104 void IgnoreString(const std::string& str) { |
| 125 } | 105 } |
| 126 | 106 |
| 127 void LogErrorWithDict(const tracked_objects::Location& from_where, | 107 void LogErrorWithDict(const tracked_objects::Location& from_where, |
| 128 const std::string& error_name, | 108 const std::string& error_name, |
| 129 const scoped_ptr<base::DictionaryValue> error_data) { | 109 scoped_ptr<base::DictionaryValue> error_data) { |
| 130 LOG(ERROR) << from_where.ToString() << ": " << error_name; | 110 LOG(ERROR) << from_where.ToString() << ": " << error_name; |
| 131 } | 111 } |
| 132 | 112 |
| 133 void LogErrorMessage(const tracked_objects::Location& from_where, | 113 void LogErrorMessage(const tracked_objects::Location& from_where, |
| 134 const std::string& error_name, | 114 const std::string& error_name, |
| 135 const std::string& error_message) { | 115 const std::string& error_message) { |
| 136 LOG(ERROR) << from_where.ToString() << ": " << error_message; | 116 LOG(ERROR) << from_where.ToString() << ": " << error_message; |
| 137 } | 117 } |
| 138 | 118 |
| 139 // Removes all kFakeCredential values from sensitive fields (determined by | 119 // Removes all kFakeCredential values from sensitive fields (determined by |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 | 201 |
| 222 scoped_ptr<base::DictionaryValue> shill_dictionary( | 202 scoped_ptr<base::DictionaryValue> shill_dictionary( |
| 223 onc::TranslateONCObjectToShill(&onc::kNetworkConfigurationSignature, | 203 onc::TranslateONCObjectToShill(&onc::kNetworkConfigurationSignature, |
| 224 *effective)); | 204 *effective)); |
| 225 | 205 |
| 226 shill_dictionary->SetStringWithoutPathExpansion(flimflam::kProfileProperty, | 206 shill_dictionary->SetStringWithoutPathExpansion(flimflam::kProfileProperty, |
| 227 profile_path); | 207 profile_path); |
| 228 | 208 |
| 229 scoped_ptr<NetworkUIData> ui_data; | 209 scoped_ptr<NetworkUIData> ui_data; |
| 230 if (policy) | 210 if (policy) |
| 231 ui_data = CreateUIDataFromONC(onc_source, *policy); | 211 ui_data = NetworkUIData::CreateUIDataFromONC(onc_source, *policy); |
| 232 else | 212 else |
| 233 ui_data.reset(new NetworkUIData()); | 213 ui_data.reset(new NetworkUIData()); |
| 234 | 214 |
| 235 if (settings) { | 215 if (settings) { |
| 236 // Shill doesn't know that sensitive data is contained in the UIData | 216 // Shill doesn't know that sensitive data is contained in the UIData |
| 237 // property and might write it into logs or other insecure places. Thus, we | 217 // property and might write it into logs or other insecure places. Thus, we |
| 238 // have to remove or mask credentials. | 218 // have to remove or mask credentials. |
| 239 // | 219 // |
| 240 // Shill's GetProperties doesn't return credentials. Masking credentials | 220 // Shill's GetProperties doesn't return credentials. Masking credentials |
| 241 // instead of just removing them, allows remembering if a credential is set | 221 // instead of just removing them, allows remembering if a credential is set |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 delete g_configuration_handler_instance; | 303 delete g_configuration_handler_instance; |
| 324 g_configuration_handler_instance = NULL; | 304 g_configuration_handler_instance = NULL; |
| 325 } | 305 } |
| 326 | 306 |
| 327 // static | 307 // static |
| 328 ManagedNetworkConfigurationHandler* ManagedNetworkConfigurationHandler::Get() { | 308 ManagedNetworkConfigurationHandler* ManagedNetworkConfigurationHandler::Get() { |
| 329 CHECK(g_configuration_handler_instance); | 309 CHECK(g_configuration_handler_instance); |
| 330 return g_configuration_handler_instance; | 310 return g_configuration_handler_instance; |
| 331 } | 311 } |
| 332 | 312 |
| 313 // static |
| 314 scoped_ptr<NetworkUIData> ManagedNetworkConfigurationHandler::GetUIData( |
| 315 const base::DictionaryValue& shill_dictionary) { |
| 316 std::string ui_data_blob; |
| 317 if (shill_dictionary.GetStringWithoutPathExpansion( |
| 318 flimflam::kUIDataProperty, |
| 319 &ui_data_blob) && |
| 320 !ui_data_blob.empty()) { |
| 321 scoped_ptr<base::DictionaryValue> ui_data_dict = |
| 322 onc::ReadDictionaryFromJson(ui_data_blob); |
| 323 if (ui_data_dict) |
| 324 return make_scoped_ptr(new NetworkUIData(*ui_data_dict)); |
| 325 else |
| 326 LOG(ERROR) << "UIData is not a valid JSON dictionary."; |
| 327 } |
| 328 LOG(ERROR) << "JSON dictionary has no UIData blob: " << shill_dictionary; |
| 329 return scoped_ptr<NetworkUIData>(); |
| 330 } |
| 331 |
| 333 void ManagedNetworkConfigurationHandler::GetManagedProperties( | 332 void ManagedNetworkConfigurationHandler::GetManagedProperties( |
| 334 const std::string& service_path, | 333 const std::string& service_path, |
| 335 const network_handler::DictionaryResultCallback& callback, | 334 const network_handler::DictionaryResultCallback& callback, |
| 336 const network_handler::ErrorCallback& error_callback) { | 335 const network_handler::ErrorCallback& error_callback) { |
| 337 if (!user_policies_initialized_ || !device_policies_initialized_) { | 336 if (!user_policies_initialized_ || !device_policies_initialized_) { |
| 338 RunErrorCallback(service_path, | 337 RunErrorCallback(service_path, |
| 339 kPoliciesNotInitialized, | 338 kPoliciesNotInitialized, |
| 340 kPoliciesNotInitializedMessage, | 339 kPoliciesNotInitializedMessage, |
| 341 error_callback); | 340 error_callback); |
| 342 return; | 341 return; |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 scoped_ptr<base::DictionaryValue> shill_dictionary( | 504 scoped_ptr<base::DictionaryValue> shill_dictionary( |
| 506 CreateShillConfiguration(state->profile_path(), guid, policy, | 505 CreateShillConfiguration(state->profile_path(), guid, policy, |
| 507 &user_settings)); | 506 &user_settings)); |
| 508 | 507 |
| 509 NetworkConfigurationHandler::Get()->SetProperties(service_path, | 508 NetworkConfigurationHandler::Get()->SetProperties(service_path, |
| 510 *shill_dictionary, | 509 *shill_dictionary, |
| 511 callback, | 510 callback, |
| 512 error_callback); | 511 error_callback); |
| 513 } | 512 } |
| 514 | 513 |
| 515 void ManagedNetworkConfigurationHandler::Connect( | |
| 516 const std::string& service_path, | |
| 517 const base::Closure& callback, | |
| 518 const network_handler::ErrorCallback& error_callback) const { | |
| 519 NetworkConfigurationHandler::Get()->Connect(service_path, | |
| 520 callback, | |
| 521 error_callback); | |
| 522 } | |
| 523 | |
| 524 void ManagedNetworkConfigurationHandler::Disconnect( | |
| 525 const std::string& service_path, | |
| 526 const base::Closure& callback, | |
| 527 const network_handler::ErrorCallback& error_callback) const { | |
| 528 NetworkConfigurationHandler::Get()->Disconnect(service_path, | |
| 529 callback, | |
| 530 error_callback); | |
| 531 } | |
| 532 | |
| 533 void ManagedNetworkConfigurationHandler::CreateConfiguration( | 514 void ManagedNetworkConfigurationHandler::CreateConfiguration( |
| 534 const base::DictionaryValue& properties, | 515 const base::DictionaryValue& properties, |
| 535 const network_handler::StringResultCallback& callback, | 516 const network_handler::StringResultCallback& callback, |
| 536 const network_handler::ErrorCallback& error_callback) const { | 517 const network_handler::ErrorCallback& error_callback) const { |
| 537 std::string profile_path = kUserProfilePath; | 518 std::string profile_path = kUserProfilePath; |
| 538 const PolicyMap* policies_by_guid = GetPoliciesForProfile(profile_path); | 519 const PolicyMap* policies_by_guid = GetPoliciesForProfile(profile_path); |
| 539 | 520 |
| 540 if (!policies_by_guid) { | 521 if (!policies_by_guid) { |
| 541 RunErrorCallback("", | 522 RunErrorCallback("", |
| 542 kPoliciesNotInitialized, | 523 kPoliciesNotInitialized, |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 871 device_policies_initialized_(false), | 852 device_policies_initialized_(false), |
| 872 weak_ptr_factory_(this) { | 853 weak_ptr_factory_(this) { |
| 873 } | 854 } |
| 874 | 855 |
| 875 ManagedNetworkConfigurationHandler::~ManagedNetworkConfigurationHandler() { | 856 ManagedNetworkConfigurationHandler::~ManagedNetworkConfigurationHandler() { |
| 876 STLDeleteValues(&user_policies_by_guid_); | 857 STLDeleteValues(&user_policies_by_guid_); |
| 877 STLDeleteValues(&device_policies_by_guid_); | 858 STLDeleteValues(&device_policies_by_guid_); |
| 878 } | 859 } |
| 879 | 860 |
| 880 } // namespace chromeos | 861 } // namespace chromeos |
| OLD | NEW |