blob: e28407c41c45220caf8420f43d65c8e1db46672d [file] [log] [blame]
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Zhiyi Zhang916ba2d2018-02-01 18:16:27 -08003 * Copyright (c) 2017-2018, Regents of the University of California.
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -08004 *
5 * This file is part of ndncert, a certificate management system based on NDN.
6 *
7 * ndncert is free software: you can redistribute it and/or modify it under the terms
8 * of the GNU General Public License as published by the Free Software Foundation, either
9 * version 3 of the License, or (at your option) any later version.
10 *
11 * ndncert is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License along with
16 * ndncert, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
17 *
18 * See AUTHORS.md for complete list of ndncert authors and contributors.
19 */
20
21#include "client-config.hpp"
Zhiyi Zhang5ebeb692017-03-10 14:13:01 -080022#include <ndn-cxx/util/io.hpp>
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -080023
24namespace ndn {
25namespace ndncert {
26
27void
28ClientConfig::load(const std::string& fileName)
29{
Zhiyi Zhange4ee8222017-12-08 22:43:04 -080030 JsonSection config;
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -080031 try {
Zhiyi Zhange4ee8222017-12-08 22:43:04 -080032 boost::property_tree::read_json(fileName, config);
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -080033 }
34 catch (const boost::property_tree::info_parser_error& error) {
35 BOOST_THROW_EXCEPTION(Error("Failed to parse configuration file " + fileName +
36 " " + error.message() + " line " + std::to_string(error.line())));
37 }
38
Zhiyi Zhange4ee8222017-12-08 22:43:04 -080039 if (config.begin() == config.end()) {
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -080040 BOOST_THROW_EXCEPTION(Error("Error processing configuration file: " + fileName + " no data"));
41 }
42
Zhiyi Zhange4ee8222017-12-08 22:43:04 -080043 load(config);
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -080044}
45
46void
Zhiyi Zhange4ee8222017-12-08 22:43:04 -080047ClientConfig::load(const JsonSection& configSection)
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -080048{
49 m_caItems.clear();
Zhiyi Zhange4ee8222017-12-08 22:43:04 -080050 auto caList = configSection.get_child("ca-list");
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -080051 auto it = caList.begin();
52 for (; it != caList.end(); it++) {
Zhiyi Zhang1c0bd372017-12-18 18:32:55 +080053 m_caItems.push_back(extractCaItem(it->second));
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -080054 }
Zhiyi Zhang1c0bd372017-12-18 18:32:55 +080055 m_localNdncertAnchor = configSection.get("local-ndncert-anchor", "");
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -080056}
57
Zhiyi Zhang1c0bd372017-12-18 18:32:55 +080058ClientCaItem
59ClientConfig::extractCaItem(const JsonSection& configSection)
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -080060{
Zhiyi Zhang1c0bd372017-12-18 18:32:55 +080061 ClientCaItem item;
62 item.m_caName = Name(configSection.get<std::string>("ca-prefix"));
63 item.m_caInfo = configSection.get<std::string>("ca-info");
64 item.m_probe = configSection.get("probe", "");
Zhiyi Zhang916ba2d2018-02-01 18:16:27 -080065 std::string listEnabledField = configSection.get("is-list-enabled", "false");
66 if (listEnabledField == "true") {
67 item.m_isListEnabled = true;
68 }
69 else {
70 item.m_isListEnabled = false;
71 }
Zhiyi Zhang1c0bd372017-12-18 18:32:55 +080072 item.m_targetedList = configSection.get("target-list", "");
73
74 std::istringstream ss(configSection.get<std::string>("certificate"));
75 item.m_anchor = *(io::load<security::v2::Certificate>(ss));
76
77 return item;
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -080078}
79
80void
81ClientConfig::removeCaItem(const Name& caName)
82{
Zhiyi Zhang5ebeb692017-03-10 14:13:01 -080083 m_caItems.remove_if([&] (const ClientCaItem& item) {return item.m_caName == caName;});
Zhiyi Zhang32dbb9f2017-02-16 15:15:10 -080084}
85
86} // namespace ndncert
87} // namespace ndn