Line data Source code
1 : /*
2 : ___________________________________________
3 : | _ ___ _ |
4 : | | | |__ \ | | |
5 : | | |__ ) |__ _ __ _ ___ _ __ | |_ |
6 : | | '_ \ / // _` |/ _` |/ _ \ '_ \| __| | HTTP/2 AGENT FOR MOCK TESTING
7 : | | | | |/ /| (_| | (_| | __/ | | | |_ | Version 0.0.z
8 : | |_| |_|____\__,_|\__, |\___|_| |_|\__| | https://github.com/testillano/h2agent
9 : | __/ | |
10 : | |___/ |
11 : |___________________________________________|
12 :
13 : Licensed under the MIT License <http://opensource.org/licenses/MIT>.
14 : SPDX-License-Identifier: MIT
15 : Copyright (c) 2021 Eduardo Ramos
16 :
17 : Permission is hereby granted, free of charge, to any person obtaining a copy
18 : of this software and associated documentation files (the "Software"), to deal
19 : in the Software without restriction, including without limitation the rights
20 : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21 : copies of the Software, and to permit persons to whom the Software is
22 : furnished to do so, subject to the following conditions:
23 :
24 : The above copyright notice and this permission notice shall be included in all
25 : copies or substantial portions of the Software.
26 :
27 : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28 : IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29 : FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30 : AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31 : LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32 : OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33 : SOFTWARE.
34 : */
35 :
36 : #pragma once
37 :
38 : #include <nlohmann/json.hpp>
39 :
40 : #include <Map.hpp>
41 : #include <JsonSchema.hpp>
42 :
43 :
44 : namespace h2agent
45 : {
46 : namespace model
47 : {
48 :
49 : class WaitManager;
50 :
51 : /**
52 : * Converts a json value to its string representation for variable substitution.
53 : * Strings are returned without quotes (backward compatible with former string storage).
54 : */
55 19 : inline std::string jsonToString(const nlohmann::json &j) {
56 19 : if (j.is_string()) return j.get<std::string>();
57 8 : if (j.is_null()) return "";
58 5 : return j.dump();
59 : }
60 :
61 : /**
62 : * This class stores the vault list.
63 : */
64 : class Vault : public Map<std::string, nlohmann::json>
65 : {
66 : h2agent::jsonschema::JsonSchema vault_schema_{};
67 : WaitManager *wait_manager_{};
68 :
69 : public:
70 : Vault();
71 302 : ~Vault() = default;
72 :
73 5 : void setWaitManager(WaitManager *p) { wait_manager_ = p; }
74 :
75 : /**
76 : * Loads variable with a json value.
77 : *
78 : * @param variable variable name
79 : * @param value json value to store
80 : */
81 : void load(const std::string &variable, const nlohmann::json &value);
82 : void load(const std::string &variable, nlohmann::json &&value);
83 :
84 : /**
85 : * Loads a value at a specific path within an existing json variable.
86 : * Creates the variable as an empty object if it does not exist.
87 : *
88 : * @param variable variable name
89 : * @param path json pointer path (e.g. "/request/headers/auth")
90 : * @param value json value to set at path
91 : */
92 : void loadAtPath(const std::string &variable, const std::string &path, const nlohmann::json &value);
93 :
94 : /**
95 : * Loads server data global operation data
96 : *
97 : * @param j Json document from operation body request
98 : *
99 : * @return Load operation result
100 : */
101 : bool loadJson(const nlohmann::json &j);
102 :
103 : /**
104 : * Json string representation for class information (json object)
105 : *
106 : * @return Json string representation ('{}' for empty object).
107 : */
108 : std::string asJsonString() const;
109 :
110 : /**
111 : * Builds json document for class information
112 : *
113 : * @return Json object
114 : */
115 : nlohmann::json getJson() const;
116 :
117 : /**
118 : * Gets vault schema
119 : */
120 1 : const h2agent::jsonschema::JsonSchema& getSchema() const {
121 1 : return vault_schema_;
122 : }
123 : };
124 :
125 : }
126 : }
127 :
|