12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_normalizer.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_constants.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_signature.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos {
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace onc {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Normalizer::Normalizer(bool remove_recommended_fields)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : remove_recommended_fields_(remove_recommended_fields) {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Normalizer::~Normalizer() {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::DictionaryValue> Normalizer::NormalizeObject(
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const OncValueSignature* object_signature,
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const base::DictionaryValue& onc_object) {
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CHECK(object_signature != NULL);
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool error = false;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> result =
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      MapObject(*object_signature, onc_object, &error);
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(!error);
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return result.Pass();
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::DictionaryValue> Normalizer::MapObject(
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const OncValueSignature& signature,
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const base::DictionaryValue& onc_object,
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool* error) {
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> normalized =
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Mapper::MapObject(signature, onc_object, error);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (normalized.get() == NULL)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return scoped_ptr<base::DictionaryValue>();
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (remove_recommended_fields_)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    normalized->RemoveWithoutPathExpansion(kRecommended, NULL);
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (&signature == &kCertificateSignature)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NormalizeCertificate(normalized.get());
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else if (&signature == &kEAPSignature)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NormalizeEAP(normalized.get());
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else if (&signature == &kEthernetSignature)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NormalizeEthernet(normalized.get());
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else if (&signature == &kIPsecSignature)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NormalizeIPsec(normalized.get());
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else if (&signature == &kNetworkConfigurationSignature)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NormalizeNetworkConfiguration(normalized.get());
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else if (&signature == &kOpenVPNSignature)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NormalizeOpenVPN(normalized.get());
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else if (&signature == &kProxySettingsSignature)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NormalizeProxySettings(normalized.get());
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else if (&signature == &kVPNSignature)
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NormalizeVPN(normalized.get());
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else if (&signature == &kWiFiSignature)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NormalizeWiFi(normalized.get());
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return normalized.Pass();
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RemoveEntryUnless(base::DictionaryValue* dict,
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       const std::string path,
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       bool condition) {
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!condition)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    dict->RemoveWithoutPathExpansion(path, NULL);
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeCertificate(base::DictionaryValue* cert) {
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  using namespace certificate;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool remove = false;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cert->GetBooleanWithoutPathExpansion(kRemove, &remove);
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(cert, certificate::kType, !remove);
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string type;
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cert->GetStringWithoutPathExpansion(certificate::kType, &type);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(cert, kPKCS12, type == kClient);
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  RemoveEntryUnless(cert, kTrustBits, type == kServer || type == kAuthority);
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(cert, kX509, type == kServer || type == kAuthority);
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeEthernet(base::DictionaryValue* ethernet) {
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  using namespace ethernet;
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string auth;
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ethernet->GetStringWithoutPathExpansion(kAuthentication, &auth);
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(ethernet, kEAP, auth == k8021X);
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeEAP(base::DictionaryValue* eap) {
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  using namespace eap;
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string clientcert_type;
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  eap->GetStringWithoutPathExpansion(kClientCertType, &clientcert_type);
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(eap, kClientCertPattern,
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    clientcert_type == certificate::kPattern);
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(eap, kClientCertRef, clientcert_type == certificate::kRef);
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string outer;
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  eap->GetStringWithoutPathExpansion(kOuter, &outer);
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(eap, kAnonymousIdentity,
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    outer == kPEAP || outer == kEAP_TTLS);
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(eap, kInner,
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    outer == kPEAP || outer == kEAP_TTLS || outer == kEAP_FAST);
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeIPsec(base::DictionaryValue* ipsec) {
121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  using namespace ipsec;
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string auth_type;
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ipsec->GetStringWithoutPathExpansion(kAuthenticationType, &auth_type);
125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  RemoveEntryUnless(ipsec, vpn::kClientCertType, auth_type == kCert);
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(ipsec, kServerCARef, auth_type == kCert);
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(ipsec, kPSK, auth_type == kPSK);
128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  RemoveEntryUnless(ipsec, vpn::kSaveCredentials, auth_type == kPSK);
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string clientcert_type;
131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ipsec->GetStringWithoutPathExpansion(vpn::kClientCertType, &clientcert_type);
132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  RemoveEntryUnless(ipsec, vpn::kClientCertPattern,
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    clientcert_type == certificate::kPattern);
134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  RemoveEntryUnless(ipsec, vpn::kClientCertRef,
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    clientcert_type == certificate::kRef);
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int ike_version = -1;
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ipsec->GetIntegerWithoutPathExpansion(kIKEVersion, &ike_version);
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(ipsec, kEAP, ike_version == 2);
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(ipsec, kGroup, ike_version == 1);
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(ipsec, kXAUTH, ike_version == 1);
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeNetworkConfiguration(base::DictionaryValue* network) {
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool remove = false;
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  network->GetBooleanWithoutPathExpansion(kRemove, &remove);
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (remove) {
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    network->RemoveWithoutPathExpansion(network_config::kIPConfigs, NULL);
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    network->RemoveWithoutPathExpansion(network_config::kName, NULL);
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    network->RemoveWithoutPathExpansion(network_config::kNameServers, NULL);
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    network->RemoveWithoutPathExpansion(network_config::kProxySettings, NULL);
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    network->RemoveWithoutPathExpansion(network_config::kSearchDomains, NULL);
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    network->RemoveWithoutPathExpansion(network_config::kType, NULL);
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Fields dependent on kType are removed afterwards, too.
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string type;
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  network->GetStringWithoutPathExpansion(network_config::kType, &type);
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(network, network_config::kEthernet,
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    type == network_type::kEthernet);
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(network, network_config::kVPN, type == network_type::kVPN);
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(network, network_config::kWiFi,
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    type == network_type::kWiFi);
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeOpenVPN(base::DictionaryValue* openvpn) {
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  using namespace vpn;
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string clientcert_type;
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  openvpn->GetStringWithoutPathExpansion(kClientCertType, &clientcert_type);
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(openvpn, kClientCertPattern,
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    clientcert_type == certificate::kPattern);
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(openvpn, kClientCertRef,
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    clientcert_type == certificate::kRef);
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeProxySettings(base::DictionaryValue* proxy) {
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  using namespace proxy;
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string type;
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  proxy->GetStringWithoutPathExpansion(proxy::kType, &type);
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(proxy, kManual, type == kManual);
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(proxy, kExcludeDomains, type == kManual);
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(proxy, kPAC, type == kPAC);
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeVPN(base::DictionaryValue* vpn) {
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  using namespace vpn;
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string type;
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  vpn->GetStringWithoutPathExpansion(vpn::kType, &type);
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(vpn, kOpenVPN, type == kOpenVPN);
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(vpn, kIPsec, type == kIPsec || type == kTypeL2TP_IPsec);
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(vpn, kL2TP, type == kTypeL2TP_IPsec);
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Normalizer::NormalizeWiFi(base::DictionaryValue* wifi) {
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  using namespace wifi;
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string security;
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  wifi->GetStringWithoutPathExpansion(wifi::kSecurity, &security);
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(wifi, kEAP, security == kWEP_8021X || security == kWPA_EAP);
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RemoveEntryUnless(wifi, kPassphrase,
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    security == kWEP_PSK || security == kWPA_PSK);
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace onc
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace chromeos
209