network_ui_data.cc revision a93a17c8d99d686bd4a1511e5504e5e6cc9fcadf
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/network/network_ui_data.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/network/onc/onc_signature.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos { 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Top-level UI data dictionary keys. 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char NetworkUIData::kKeyONCSource[] = "onc_source"; 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char NetworkUIData::kKeyCertificatePattern[] = "certificate_pattern"; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char NetworkUIData::kKeyCertificateType[] = "certificate_type"; 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char NetworkUIData::kKeyUserSettings[] = "user_settings"; 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template <typename Enum> 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct StringEnumEntry { 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* string; 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Enum enum_value; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const StringEnumEntry<onc::ONCSource> kONCSourceTable[] = { 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "user_import", onc::ONC_SOURCE_USER_IMPORT }, 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "device_policy", onc::ONC_SOURCE_DEVICE_POLICY }, 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "user_policy", onc::ONC_SOURCE_USER_POLICY } 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const StringEnumEntry<ClientCertType> kClientCertTable[] = { 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "none", CLIENT_CERT_TYPE_NONE }, 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "pattern", CLIENT_CERT_TYPE_PATTERN }, 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "ref", CLIENT_CERT_TYPE_REF } 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Converts |enum_value| to the corresponding string according to |table|. If no 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// enum value of the table matches (which can only occur if incorrect casting 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// was used to obtain |enum_value|), returns an empty string instead. 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template <typename Enum, int N> 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)std::string EnumToString(const StringEnumEntry<Enum>(& table)[N], 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Enum enum_value) { 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (int i = 0; i < N; ++i) { 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (table[i].enum_value == enum_value) 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return table[i].string; 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return std::string(); 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Converts |str| to the corresponding enum value according to |table|. If no 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// string of the table matches, returns |fallback| instead. 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template<typename Enum, int N> 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)Enum StringToEnum(const StringEnumEntry<Enum>(& table)[N], 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& str, 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Enum fallback) { 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (int i = 0; i < N; ++i) { 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (table[i].string == str) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return table[i].enum_value; 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return fallback; 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkUIData::NetworkUIData() 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : onc_source_(onc::ONC_SOURCE_NONE), 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) certificate_type_(CLIENT_CERT_TYPE_NONE) { 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkUIData::NetworkUIData(const NetworkUIData& other) { 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *this = other; 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkUIData& NetworkUIData::operator=(const NetworkUIData& other) { 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) certificate_pattern_ = other.certificate_pattern_; 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onc_source_ = other.onc_source_; 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) certificate_type_ = other.certificate_type_; 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (other.user_settings_) 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_settings_.reset(other.user_settings_->DeepCopy()); 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policy_guid_ = other.policy_guid_; 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return *this; 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkUIData::NetworkUIData(const DictionaryValue& dict) { 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string source; 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict.GetString(kKeyONCSource, &source); 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onc_source_ = StringToEnum(kONCSourceTable, source, onc::ONC_SOURCE_NONE); 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string type_string; 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict.GetString(kKeyCertificateType, &type_string); 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) certificate_type_ = 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StringToEnum(kClientCertTable, type_string, CLIENT_CERT_TYPE_NONE); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (certificate_type_ == CLIENT_CERT_TYPE_PATTERN) { 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const DictionaryValue* cert_dict = NULL; 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict.GetDictionary(kKeyCertificatePattern, &cert_dict); 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cert_dict) 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) certificate_pattern_.CopyFromDictionary(*cert_dict); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (certificate_pattern_.Empty()) { 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LOG(ERROR) << "Couldn't parse a valid certificate pattern."; 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) certificate_type_ = CLIENT_CERT_TYPE_NONE; 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const DictionaryValue* user_settings = NULL; 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (dict.GetDictionary(kKeyUserSettings, &user_settings)) 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_settings_.reset(user_settings->DeepCopy()); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkUIData::~NetworkUIData() { 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void NetworkUIData::FillDictionary(base::DictionaryValue* dict) const { 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict->Clear(); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string source_string = EnumToString(kONCSourceTable, onc_source_); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!source_string.empty()) 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict->SetString(kKeyONCSource, source_string); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (certificate_type_ != CLIENT_CERT_TYPE_NONE) { 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string type_string = EnumToString(kClientCertTable, certificate_type_); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict->SetString(kKeyCertificateType, type_string); 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (certificate_type_ == CLIENT_CERT_TYPE_PATTERN && 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !certificate_pattern_.Empty()) { 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict->Set(kKeyCertificatePattern, 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) certificate_pattern_.CreateAsDictionary()); 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (user_settings_) 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict->SetWithoutPathExpansion(kKeyUserSettings, 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_settings_->DeepCopy()); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TranslateClientCertType(const std::string& client_cert_type, 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkUIData* ui_data) { 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) using namespace onc::certificate; 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ClientCertType type; 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (client_cert_type == kNone) { 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) type = CLIENT_CERT_TYPE_NONE; 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else if (client_cert_type == kRef) { 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) type = CLIENT_CERT_TYPE_REF; 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else if (client_cert_type == kPattern) { 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) type = CLIENT_CERT_TYPE_PATTERN; 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) type = CLIENT_CERT_TYPE_NONE; 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_data->set_certificate_type(type); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TranslateCertificatePattern(const base::DictionaryValue& onc_object, 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkUIData* ui_data) { 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CertificatePattern pattern; 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool success = pattern.CopyFromDictionary(onc_object); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(success); 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_data->set_certificate_pattern(pattern); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TranslateEAP(const base::DictionaryValue& eap, 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkUIData* ui_data) { 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string client_cert_type; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (eap.GetStringWithoutPathExpansion(onc::eap::kClientCertType, 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &client_cert_type)) { 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TranslateClientCertType(client_cert_type, ui_data); 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TranslateIPsec(const base::DictionaryValue& ipsec, 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkUIData* ui_data) { 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string client_cert_type; 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (ipsec.GetStringWithoutPathExpansion(onc::vpn::kClientCertType, 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &client_cert_type)) { 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TranslateClientCertType(client_cert_type, ui_data); 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TranslateOpenVPN(const base::DictionaryValue& openvpn, 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkUIData* ui_data) { 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string client_cert_type; 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (openvpn.GetStringWithoutPathExpansion(onc::vpn::kClientCertType, 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &client_cert_type)) { 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TranslateClientCertType(client_cert_type, ui_data); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TranslateONCHierarchy(const onc::OncValueSignature& signature, 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue& onc_object, 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkUIData* ui_data) { 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (&signature == &onc::kCertificatePatternSignature) 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TranslateCertificatePattern(onc_object, ui_data); 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) else if (&signature == &onc::kEAPSignature) 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TranslateEAP(onc_object, ui_data); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) else if (&signature == &onc::kIPsecSignature) 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TranslateIPsec(onc_object, ui_data); 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) else if (&signature == &onc::kOpenVPNSignature) 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TranslateOpenVPN(onc_object, ui_data); 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Recurse into nested objects. 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (base::DictionaryValue::Iterator it(onc_object); !it.IsAtEnd(); 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) it.Advance()) { 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue* inner_object; 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!it.value().GetAsDictionary(&inner_object)) 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) continue; 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const onc::OncFieldSignature* field_signature = 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetFieldSignature(signature, it.key()); 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TranslateONCHierarchy(*field_signature->value_signature, *inner_object, 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_data); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 221a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)// static 222a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)scoped_ptr<NetworkUIData> NetworkUIData::CreateFromONC( 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onc::ONCSource onc_source, 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue& onc_network) { 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<NetworkUIData> ui_data(new NetworkUIData()); 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TranslateONCHierarchy(onc::kNetworkConfigurationSignature, onc_network, 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_data.get()); 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_data->set_onc_source(onc_source); 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return ui_data.Pass(); 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace chromeos 235