blob: e94ccec6858ca7ac4bf0b4cea286145451858ff0 [file] [log] [blame]
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
Davide Pesavento0a6456c2019-11-14 00:33:11 -05003 * Copyright (c) 2013-2019 Regents of the University of California.
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -08004 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library 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 Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20 */
21
22#ifndef NDN_SECURITY_V2_VALIDATION_POLICY_CONFIG_HPP
23#define NDN_SECURITY_V2_VALIDATION_POLICY_CONFIG_HPP
24
Davide Pesavento7e780642018-11-24 15:51:34 -050025#include "ndn-cxx/security/v2/validation-policy.hpp"
26#include "ndn-cxx/security/v2/validator-config/rule.hpp"
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -080027
28namespace ndn {
29namespace security {
30namespace v2 {
31namespace validator_config {
32
33/**
Davide Pesavento0a6456c2019-11-14 00:33:11 -050034 * @brief A validator that can be set up via a configuration file.
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -080035 *
36 * @note For command Interest validation, this policy must be combined with
37 * @p ValidationPolicyCommandInterest, in order to guard against replay attacks.
38 * @note This policy does not support inner policies (a sole policy or a terminal inner policy)
39 * @sa https://named-data.net/doc/ndn-cxx/current/tutorials/security-validator-config.html
40 */
41class ValidationPolicyConfig : public ValidationPolicy
42{
43public:
Alexander Afanasyev7b112462018-10-17 11:51:52 -040044 /**
45 * @brief Load policy from file @p filename
46 * @throw Error Validator instance not assigned to the policy (m_validator == nullptr)
47 */
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -080048 void
49 load(const std::string& filename);
50
Alexander Afanasyev7b112462018-10-17 11:51:52 -040051 /**
52 * @brief Load policy from direct @p input
53 * @throw Error Validator instance not assigned to the policy (m_validator == nullptr)
54 */
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -080055 void
56 load(const std::string& input, const std::string& filename);
57
Alexander Afanasyev7b112462018-10-17 11:51:52 -040058 /**
59 * @brief Load policy from direct @p input
60 * @throw Error Validator instance not assigned to the policy (m_validator == nullptr)
61 */
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -080062 void
63 load(std::istream& input, const std::string& filename);
64
Alexander Afanasyev7b112462018-10-17 11:51:52 -040065 /**
66 * @brief Load policy from @p configSection
67 * @throw Error Validator instance not assigned to the policy (m_validator == nullptr)
68 */
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -080069 void
70 load(const ConfigSection& configSection, const std::string& filename);
71
72protected:
73 void
74 checkPolicy(const Data& data, const shared_ptr<ValidationState>& state,
75 const ValidationContinuation& continueValidation) override;
76
77 void
78 checkPolicy(const Interest& interest, const shared_ptr<ValidationState>& state,
79 const ValidationContinuation& continueValidation) override;
80
81private:
82 void
83 processConfigTrustAnchor(const ConfigSection& section, const std::string& filename);
84
85 time::nanoseconds
86 getRefreshPeriod(ConfigSection::const_iterator& it, const ConfigSection::const_iterator& end);
87
88 time::nanoseconds
89 getDefaultRefreshPeriod();
90
91NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PRIVATE:
Davide Pesavento0a6456c2019-11-14 00:33:11 -050092 /** @brief Whether to always bypass validation.
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -080093 *
94 * This is set to true when 'any' is specified as a trust anchor.
95 * It causes all packets to bypass validation.
96 */
Davide Pesavento0a6456c2019-11-14 00:33:11 -050097 bool m_shouldBypass = false;
98 bool m_isConfigured = false;
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -080099
100 std::vector<unique_ptr<Rule>> m_dataRules;
101 std::vector<unique_ptr<Rule>> m_interestRules;
102};
103
104} // namespace validator_config
105
106using validator_config::ValidationPolicyConfig;
107
108} // namespace v2
109} // namespace security
110} // namespace ndn
111
112#endif // NDN_SECURITY_V2_VALIDATION_POLICY_CONFIG_HPP