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 : class SseManager;
51 :
52 : /**
53 : * Converts a json value to its string representation for variable substitution.
54 : * Strings are returned without quotes (backward compatible with former string storage).
55 : */
56 19 : inline std::string jsonToString(const nlohmann::json &j) {
57 19 : if (j.is_string()) return j.get<std::string>();
58 8 : if (j.is_null()) return "";
59 5 : return j.dump();
60 : }
61 :
62 : /**
63 : * This class stores the vault list.
64 : */
65 : class Vault : public Map<std::string, nlohmann::json>
66 : {
67 : h2agent::jsonschema::JsonSchema vault_schema_{};
68 : WaitManager *wait_manager_{};
69 : SseManager *sse_manager_{};
70 :
71 : public:
72 : Vault();
73 302 : ~Vault() = default;
74 :
75 5 : void setWaitManager(WaitManager *p) { wait_manager_ = p; }
76 0 : void setSseManager(SseManager *p) { sse_manager_ = p; }
77 :
78 : /**
79 : * Loads variable with a json value.
80 : *
81 : * @param variable variable name
82 : * @param value json value to store
83 : */
84 : void load(const std::string &variable, const nlohmann::json &value);
85 : void load(const std::string &variable, nlohmann::json &&value);
86 :
87 : /**
88 : * Loads a value at a specific path within an existing json variable.
89 : * Creates the variable as an empty object if it does not exist.
90 : *
91 : * @param variable variable name
92 : * @param path json pointer path (e.g. "/request/headers/auth")
93 : * @param value json value to set at path
94 : */
95 : void loadAtPath(const std::string &variable, const std::string &path, const nlohmann::json &value);
96 :
97 : /**
98 : * Loads server data global operation data
99 : *
100 : * @param j Json document from operation body request
101 : *
102 : * @return Load operation result
103 : */
104 : bool loadJson(const nlohmann::json &j);
105 :
106 : /**
107 : * Json string representation for class information (json object)
108 : *
109 : * @return Json string representation ('{}' for empty object).
110 : */
111 : std::string asJsonString() const;
112 :
113 : /**
114 : * Builds json document for class information
115 : *
116 : * @return Json object
117 : */
118 : nlohmann::json getJson() const;
119 :
120 : /**
121 : * Gets vault schema
122 : */
123 1 : const h2agent::jsonschema::JsonSchema& getSchema() const {
124 1 : return vault_schema_;
125 : }
126 : };
127 :
128 : }
129 : }
130 :
|