• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chromeos/network/certificate_pattern.h"
6 
7 #include "base/logging.h"
8 #include "base/values.h"
9 #include "components/onc/onc_constants.h"
10 
11 namespace chromeos {
12 
13 namespace {
14 
GetAsListOfStrings(const base::Value & value,std::vector<std::string> * result)15 bool GetAsListOfStrings(const base::Value& value,
16                         std::vector<std::string>* result) {
17   const base::ListValue* list = NULL;
18   if (!value.GetAsList(&list))
19     return false;
20   result->clear();
21   result->reserve(list->GetSize());
22   for (size_t i = 0; i < list->GetSize(); i++) {
23     std::string item;
24     if (!list->GetString(i, &item))
25       return false;
26     result->push_back(item);
27   }
28   return true;
29 }
30 
31 }  // namespace
32 
33 ////////////////////////////////////////////////////////////////////////////////
34 // IssuerSubjectPattern
IssuerSubjectPattern(const std::string & common_name,const std::string & locality,const std::string & organization,const std::string & organizational_unit)35 IssuerSubjectPattern::IssuerSubjectPattern(
36     const std::string& common_name,
37     const std::string& locality,
38     const std::string& organization,
39     const std::string& organizational_unit)
40     : common_name_(common_name),
41       locality_(locality),
42       organization_(organization),
43       organizational_unit_(organizational_unit) {
44 }
45 
IssuerSubjectPattern()46 IssuerSubjectPattern::IssuerSubjectPattern() {
47 }
48 
~IssuerSubjectPattern()49 IssuerSubjectPattern::~IssuerSubjectPattern() {
50 }
51 
Empty() const52 bool IssuerSubjectPattern::Empty() const {
53   return common_name_.empty() && locality_.empty() && organization_.empty() &&
54          organizational_unit_.empty();
55 }
56 
Clear()57 void IssuerSubjectPattern::Clear() {
58   common_name_.clear();
59   locality_.clear();
60   organization_.clear();
61   organizational_unit_.clear();
62 }
63 
ReadFromONCDictionary(const base::DictionaryValue & dict)64 void IssuerSubjectPattern::ReadFromONCDictionary(
65     const base::DictionaryValue& dict) {
66   Clear();
67 
68   dict.GetStringWithoutPathExpansion(onc::client_cert::kCommonName,
69                                      &common_name_);
70   dict.GetStringWithoutPathExpansion(onc::client_cert::kLocality, &locality_);
71   dict.GetStringWithoutPathExpansion(onc::client_cert::kOrganization,
72                                      &organization_);
73   dict.GetStringWithoutPathExpansion(onc::client_cert::kOrganizationalUnit,
74                                      &organizational_unit_);
75 }
76 
77 ////////////////////////////////////////////////////////////////////////////////
78 // CertificatePattern
79 
CertificatePattern()80 CertificatePattern::CertificatePattern() {
81 }
82 
~CertificatePattern()83 CertificatePattern::~CertificatePattern() {
84 }
85 
Empty() const86 bool CertificatePattern::Empty() const {
87   return issuer_ca_pems_.empty() && issuer_.Empty() && subject_.Empty();
88 }
89 
Clear()90 void CertificatePattern::Clear() {
91   issuer_ca_pems_.clear();
92   issuer_.Clear();
93   subject_.Clear();
94   enrollment_uri_list_.clear();
95 }
96 
ReadFromONCDictionary(const base::DictionaryValue & dict)97 bool CertificatePattern::ReadFromONCDictionary(
98     const base::DictionaryValue& dict) {
99   Clear();
100 
101   const base::DictionaryValue* child_dict = NULL;
102   const base::ListValue* child_list = NULL;
103 
104   // All of these are optional.
105   if (dict.GetListWithoutPathExpansion(onc::client_cert::kIssuerCAPEMs,
106                                        &child_list) &&
107       child_list) {
108     if (!GetAsListOfStrings(*child_list, &issuer_ca_pems_))
109       return false;
110   }
111   if (dict.GetDictionaryWithoutPathExpansion(onc::client_cert::kIssuer,
112                                              &child_dict) &&
113       child_dict) {
114     issuer_.ReadFromONCDictionary(*child_dict);
115   }
116   child_dict = NULL;
117   if (dict.GetDictionaryWithoutPathExpansion(onc::client_cert::kSubject,
118                                              &child_dict) &&
119       child_dict) {
120     subject_.ReadFromONCDictionary(*child_dict);
121   }
122   child_list = NULL;
123   if (dict.GetListWithoutPathExpansion(onc::client_cert::kEnrollmentURI,
124                                        &child_list) &&
125       child_list) {
126     if (!GetAsListOfStrings(*child_list, &enrollment_uri_list_))
127       return false;
128   }
129 
130   return true;
131 }
132 
133 }  // namespace chromeos
134