blob: d2ed69c045c0871bb65dba861f564b76653987fe [file] [log] [blame]
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
Alexander Afanasyev7b112462018-10-17 11:51:52 -04003 * Copyright (c) 2013-2018 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
25#include "validation-policy.hpp"
26#include "validator-config/rule.hpp"
27#include "validator-config/common.hpp"
28
29namespace ndn {
30namespace security {
31namespace v2 {
32namespace validator_config {
33
34/**
35 * @brief The validator which can be set up via a configuration file.
36 *
37 * @note For command Interest validation, this policy must be combined with
38 * @p ValidationPolicyCommandInterest, in order to guard against replay attacks.
39 * @note This policy does not support inner policies (a sole policy or a terminal inner policy)
40 * @sa https://named-data.net/doc/ndn-cxx/current/tutorials/security-validator-config.html
41 */
42class ValidationPolicyConfig : public ValidationPolicy
43{
44public:
45 ValidationPolicyConfig();
46
Alexander Afanasyev7b112462018-10-17 11:51:52 -040047 /**
48 * @brief Load policy from file @p filename
49 * @throw Error Validator instance not assigned to the policy (m_validator == nullptr)
50 */
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -080051 void
52 load(const std::string& filename);
53
Alexander Afanasyev7b112462018-10-17 11:51:52 -040054 /**
55 * @brief Load policy from direct @p input
56 * @throw Error Validator instance not assigned to the policy (m_validator == nullptr)
57 */
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -080058 void
59 load(const std::string& input, const std::string& filename);
60
Alexander Afanasyev7b112462018-10-17 11:51:52 -040061 /**
62 * @brief Load policy from direct @p input
63 * @throw Error Validator instance not assigned to the policy (m_validator == nullptr)
64 */
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -080065 void
66 load(std::istream& input, const std::string& filename);
67
Alexander Afanasyev7b112462018-10-17 11:51:52 -040068 /**
69 * @brief Load policy from @p configSection
70 * @throw Error Validator instance not assigned to the policy (m_validator == nullptr)
71 */
Alexander Afanasyeve5a19b82017-01-30 22:30:46 -080072 void
73 load(const ConfigSection& configSection, const std::string& filename);
74
75protected:
76 void
77 checkPolicy(const Data& data, const shared_ptr<ValidationState>& state,
78 const ValidationContinuation& continueValidation) override;
79
80 void
81 checkPolicy(const Interest& interest, const shared_ptr<ValidationState>& state,
82 const ValidationContinuation& continueValidation) override;
83
84private:
85 void
86 processConfigTrustAnchor(const ConfigSection& section, const std::string& filename);
87
88 time::nanoseconds
89 getRefreshPeriod(ConfigSection::const_iterator& it, const ConfigSection::const_iterator& end);
90
91 time::nanoseconds
92 getDefaultRefreshPeriod();
93
94NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PRIVATE:
95 /** @brief whether to always bypass validation
96 *
97 * This is set to true when 'any' is specified as a trust anchor.
98 * It causes all packets to bypass validation.
99 */
100 bool m_shouldBypass;
101 bool m_isConfigured;
102
103 std::vector<unique_ptr<Rule>> m_dataRules;
104 std::vector<unique_ptr<Rule>> m_interestRules;
105};
106
107} // namespace validator_config
108
109using validator_config::ValidationPolicyConfig;
110
111} // namespace v2
112} // namespace security
113} // namespace ndn
114
115#endif // NDN_SECURITY_V2_VALIDATION_POLICY_CONFIG_HPP