1f4c4dcf4SKowalski, Kamil /*
2f4c4dcf4SKowalski, Kamil // Copyright (c) 2018 Intel Corporation
3f4c4dcf4SKowalski, Kamil //
4f4c4dcf4SKowalski, Kamil // Licensed under the Apache License, Version 2.0 (the "License");
5f4c4dcf4SKowalski, Kamil // you may not use this file except in compliance with the License.
6f4c4dcf4SKowalski, Kamil // You may obtain a copy of the License at
7f4c4dcf4SKowalski, Kamil //
8f4c4dcf4SKowalski, Kamil //      http://www.apache.org/licenses/LICENSE-2.0
9f4c4dcf4SKowalski, Kamil //
10f4c4dcf4SKowalski, Kamil // Unless required by applicable law or agreed to in writing, software
11f4c4dcf4SKowalski, Kamil // distributed under the License is distributed on an "AS IS" BASIS,
12f4c4dcf4SKowalski, Kamil // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f4c4dcf4SKowalski, Kamil // See the License for the specific language governing permissions and
14f4c4dcf4SKowalski, Kamil // limitations under the License.
15f4c4dcf4SKowalski, Kamil */
16f4c4dcf4SKowalski, Kamil #include <crow/logging.h>
17f4c4dcf4SKowalski, Kamil 
181abe55efSEd Tanous #include <error_messages.hpp>
19f4c4dcf4SKowalski, Kamil 
201abe55efSEd Tanous namespace redfish
211abe55efSEd Tanous {
221abe55efSEd Tanous 
231abe55efSEd Tanous namespace messages
241abe55efSEd Tanous {
25f4c4dcf4SKowalski, Kamil 
26f12894f8SJason M. Bills static void addMessageToErrorJson(nlohmann::json& target,
271abe55efSEd Tanous                                   const nlohmann::json& message)
281abe55efSEd Tanous {
29f4c4dcf4SKowalski, Kamil     auto& error = target["error"];
30f4c4dcf4SKowalski, Kamil 
311abe55efSEd Tanous     // If this is the first error message, fill in the information from the
321abe55efSEd Tanous     // first error message to the top level struct
331abe55efSEd Tanous     if (!error.is_object())
341abe55efSEd Tanous     {
35f4c4dcf4SKowalski, Kamil         auto message_id_iterator = message.find("MessageId");
361abe55efSEd Tanous         if (message_id_iterator == message.end())
371abe55efSEd Tanous         {
381abe55efSEd Tanous             BMCWEB_LOG_CRITICAL
391abe55efSEd Tanous                 << "Attempt to add error message without MessageId";
40f4c4dcf4SKowalski, Kamil             return;
41f4c4dcf4SKowalski, Kamil         }
42f4c4dcf4SKowalski, Kamil 
43f4c4dcf4SKowalski, Kamil         auto message_field_iterator = message.find("Message");
441abe55efSEd Tanous         if (message_field_iterator == message.end())
451abe55efSEd Tanous         {
461abe55efSEd Tanous             BMCWEB_LOG_CRITICAL
471abe55efSEd Tanous                 << "Attempt to add error message without Message";
48f4c4dcf4SKowalski, Kamil             return;
49f4c4dcf4SKowalski, Kamil         }
50f4c4dcf4SKowalski, Kamil         // clang-format off
51f4c4dcf4SKowalski, Kamil     error = {
52f4c4dcf4SKowalski, Kamil         {"code", *message_id_iterator},
53f4c4dcf4SKowalski, Kamil         {"message", *message_field_iterator}
54f4c4dcf4SKowalski, Kamil     };
55f4c4dcf4SKowalski, Kamil         // clang-format on
561abe55efSEd Tanous     }
571abe55efSEd Tanous     else
581abe55efSEd Tanous     {
59f4c4dcf4SKowalski, Kamil         // More than 1 error occurred, so the message has to be generic
6055c7b7a2SEd Tanous         error["code"] = std::string(messageVersionPrefix) + "GeneralError";
61cc9139ecSJason M. Bills         error["message"] = "A general error has occurred. See Resolution for "
62cc9139ecSJason M. Bills                            "information on how to resolve the error.";
63f4c4dcf4SKowalski, Kamil     }
64f4c4dcf4SKowalski, Kamil 
65f4c4dcf4SKowalski, Kamil     // This check could technically be done in in the default construction
66f4c4dcf4SKowalski, Kamil     // branch above, but because we need the pointer to the extended info field
67f4c4dcf4SKowalski, Kamil     // anyway, it's more efficient to do it here.
6855c7b7a2SEd Tanous     auto& extended_info = error[messages::messageAnnotation];
691abe55efSEd Tanous     if (!extended_info.is_array())
701abe55efSEd Tanous     {
71f4c4dcf4SKowalski, Kamil         extended_info = nlohmann::json::array();
72f4c4dcf4SKowalski, Kamil     }
73f4c4dcf4SKowalski, Kamil 
74f4c4dcf4SKowalski, Kamil     extended_info.push_back(message);
75f4c4dcf4SKowalski, Kamil }
76f4c4dcf4SKowalski, Kamil 
77f12894f8SJason M. Bills static void addMessageToJsonRoot(nlohmann::json& target,
78f12894f8SJason M. Bills                                  const nlohmann::json& message)
791abe55efSEd Tanous {
801abe55efSEd Tanous     if (!target[messages::messageAnnotation].is_array())
811abe55efSEd Tanous     {
82f4c4dcf4SKowalski, Kamil         // Force object to be an array
8355c7b7a2SEd Tanous         target[messages::messageAnnotation] = nlohmann::json::array();
84f4c4dcf4SKowalski, Kamil     }
85f4c4dcf4SKowalski, Kamil 
8655c7b7a2SEd Tanous     target[messages::messageAnnotation].push_back(message);
87f4c4dcf4SKowalski, Kamil }
88f4c4dcf4SKowalski, Kamil 
89f12894f8SJason M. Bills static void addMessageToJson(nlohmann::json& target,
90f12894f8SJason M. Bills                              const nlohmann::json& message,
911abe55efSEd Tanous                              const std::string& fieldPath)
921abe55efSEd Tanous {
93a08b46ccSJason M. Bills     std::string extendedInfo(fieldPath + messages::messageAnnotation);
94f4c4dcf4SKowalski, Kamil 
951abe55efSEd Tanous     if (!target[extendedInfo].is_array())
961abe55efSEd Tanous     {
97f4c4dcf4SKowalski, Kamil         // Force object to be an array
98f4c4dcf4SKowalski, Kamil         target[extendedInfo] = nlohmann::json::array();
99f4c4dcf4SKowalski, Kamil     }
100f4c4dcf4SKowalski, Kamil 
101f4c4dcf4SKowalski, Kamil     // Object exists and it is an array so we can just push in the message
102f4c4dcf4SKowalski, Kamil     target[extendedInfo].push_back(message);
103f4c4dcf4SKowalski, Kamil }
104f4c4dcf4SKowalski, Kamil 
105f4c4dcf4SKowalski, Kamil /**
106f4c4dcf4SKowalski, Kamil  * @internal
107f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceInUse message into JSON
108f4c4dcf4SKowalski, Kamil  *
109f4c4dcf4SKowalski, Kamil  * See header file for more information
110f4c4dcf4SKowalski, Kamil  * @endinternal
111f4c4dcf4SKowalski, Kamil  */
112f12894f8SJason M. Bills void resourceInUse(crow::Response& res)
1131abe55efSEd Tanous {
114f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
115f12894f8SJason M. Bills     addMessageToErrorJson(
116f12894f8SJason M. Bills         res.jsonValue,
117f12894f8SJason M. Bills         nlohmann::json{
118f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
119cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceInUse"},
12066ac2b8cSJason M. Bills             {"Message", "The change to the requested resource failed because "
12166ac2b8cSJason M. Bills                         "the resource is in use or in transition."},
122*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
123f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
12466ac2b8cSJason M. Bills             {"Resolution", "Remove the condition and resubmit the request if "
12566ac2b8cSJason M. Bills                            "the operation failed."}});
126f4c4dcf4SKowalski, Kamil }
127f4c4dcf4SKowalski, Kamil 
128f4c4dcf4SKowalski, Kamil /**
129f4c4dcf4SKowalski, Kamil  * @internal
130f4c4dcf4SKowalski, Kamil  * @brief Formats MalformedJSON message into JSON
131f4c4dcf4SKowalski, Kamil  *
132f4c4dcf4SKowalski, Kamil  * See header file for more information
133f4c4dcf4SKowalski, Kamil  * @endinternal
134f4c4dcf4SKowalski, Kamil  */
135f12894f8SJason M. Bills void malformedJSON(crow::Response& res)
1361abe55efSEd Tanous {
137f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
138f12894f8SJason M. Bills     addMessageToErrorJson(
139f12894f8SJason M. Bills         res.jsonValue,
140f12894f8SJason M. Bills         nlohmann::json{
141f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
142cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.MalformedJSON"},
14366ac2b8cSJason M. Bills             {"Message", "The request body submitted was malformed JSON and "
14466ac2b8cSJason M. Bills                         "could not be parsed by the receiving service."},
145*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
146f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1471abe55efSEd Tanous             {"Resolution", "Ensure that the request body is valid JSON and "
148f12894f8SJason M. Bills                            "resubmit the request."}});
149f4c4dcf4SKowalski, Kamil }
150f4c4dcf4SKowalski, Kamil 
151f4c4dcf4SKowalski, Kamil /**
152f4c4dcf4SKowalski, Kamil  * @internal
153f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceMissingAtURI message into JSON
154f4c4dcf4SKowalski, Kamil  *
155f4c4dcf4SKowalski, Kamil  * See header file for more information
156f4c4dcf4SKowalski, Kamil  * @endinternal
157f4c4dcf4SKowalski, Kamil  */
158f12894f8SJason M. Bills void resourceMissingAtURI(crow::Response& res, const std::string& arg1)
1591abe55efSEd Tanous {
160f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
161f12894f8SJason M. Bills     addMessageToErrorJson(
162f12894f8SJason M. Bills         res.jsonValue,
163f12894f8SJason M. Bills         nlohmann::json{
164f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
165cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceMissingAtURI"},
166f4c4dcf4SKowalski, Kamil             {"Message", "The resource at the URI " + arg1 + " was not found."},
167*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
168f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
16966ac2b8cSJason M. Bills             {"Resolution", "Place a valid resource at the URI or correct the "
17066ac2b8cSJason M. Bills                            "URI and resubmit the request."}});
171f4c4dcf4SKowalski, Kamil }
172f4c4dcf4SKowalski, Kamil 
173f4c4dcf4SKowalski, Kamil /**
174f4c4dcf4SKowalski, Kamil  * @internal
175f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterValueFormatError message into JSON
176f4c4dcf4SKowalski, Kamil  *
177f4c4dcf4SKowalski, Kamil  * See header file for more information
178f4c4dcf4SKowalski, Kamil  * @endinternal
179f4c4dcf4SKowalski, Kamil  */
180f12894f8SJason M. Bills void actionParameterValueFormatError(crow::Response& res,
181f12894f8SJason M. Bills                                      const std::string& arg1,
182f4c4dcf4SKowalski, Kamil                                      const std::string& arg2,
1831abe55efSEd Tanous                                      const std::string& arg3)
1841abe55efSEd Tanous {
185f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
186f12894f8SJason M. Bills     addMessageToErrorJson(
187f12894f8SJason M. Bills         res.jsonValue,
188f12894f8SJason M. Bills         nlohmann::json{
189f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
190cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterValueFormatError"},
191f4c4dcf4SKowalski, Kamil             {"Message",
1921abe55efSEd Tanous              "The value " + arg1 + " for the parameter " + arg2 +
1931abe55efSEd Tanous                  " in the action " + arg3 +
1941abe55efSEd Tanous                  " is of a different format than the parameter can accept."},
195*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2, arg3}},
196f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
19766ac2b8cSJason M. Bills             {"Resolution",
19866ac2b8cSJason M. Bills              "Correct the value for the parameter in the request body and "
19966ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
200f4c4dcf4SKowalski, Kamil }
201f4c4dcf4SKowalski, Kamil 
202f4c4dcf4SKowalski, Kamil /**
203f4c4dcf4SKowalski, Kamil  * @internal
204f4c4dcf4SKowalski, Kamil  * @brief Formats InternalError message into JSON
205f4c4dcf4SKowalski, Kamil  *
206f4c4dcf4SKowalski, Kamil  * See header file for more information
207f4c4dcf4SKowalski, Kamil  * @endinternal
208f4c4dcf4SKowalski, Kamil  */
209f12894f8SJason M. Bills void internalError(crow::Response& res)
2101abe55efSEd Tanous {
211f12894f8SJason M. Bills     res.result(boost::beast::http::status::internal_server_error);
212f12894f8SJason M. Bills     addMessageToErrorJson(
213f12894f8SJason M. Bills         res.jsonValue,
214f12894f8SJason M. Bills         nlohmann::json{
215f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
216cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InternalError"},
217f12894f8SJason M. Bills             {"Message", "The request failed due to an internal service error.  "
21866ac2b8cSJason M. Bills                         "The service is still operational."},
219*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
220f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
2211abe55efSEd Tanous             {"Resolution", "Resubmit the request.  If the problem persists, "
22266ac2b8cSJason M. Bills                            "consider resetting the service."}});
223f12894f8SJason M. Bills }
224f12894f8SJason M. Bills 
225f12894f8SJason M. Bills /**
226f12894f8SJason M. Bills  * @internal
227f4c4dcf4SKowalski, Kamil  * @brief Formats UnrecognizedRequestBody message into JSON
228f4c4dcf4SKowalski, Kamil  *
229f4c4dcf4SKowalski, Kamil  * See header file for more information
230f4c4dcf4SKowalski, Kamil  * @endinternal
231f4c4dcf4SKowalski, Kamil  */
232f12894f8SJason M. Bills void unrecognizedRequestBody(crow::Response& res)
2331abe55efSEd Tanous {
234f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
235f12894f8SJason M. Bills     addMessageToErrorJson(
236f12894f8SJason M. Bills         res.jsonValue,
237f12894f8SJason M. Bills         nlohmann::json{
238f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
239cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.UnrecognizedRequestBody"},
240f12894f8SJason M. Bills             {"Message", "The service detected a malformed request body that it "
24166ac2b8cSJason M. Bills                         "was unable to interpret."},
242*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
243f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
244f12894f8SJason M. Bills             {"Resolution", "Correct the request body and resubmit the request "
245f12894f8SJason M. Bills                            "if it failed."}});
246f4c4dcf4SKowalski, Kamil }
247f4c4dcf4SKowalski, Kamil 
248f4c4dcf4SKowalski, Kamil /**
249f4c4dcf4SKowalski, Kamil  * @internal
250f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceAtUriUnauthorized message into JSON
251f4c4dcf4SKowalski, Kamil  *
252f4c4dcf4SKowalski, Kamil  * See header file for more information
253f4c4dcf4SKowalski, Kamil  * @endinternal
254f4c4dcf4SKowalski, Kamil  */
255f12894f8SJason M. Bills void resourceAtUriUnauthorized(crow::Response& res, const std::string& arg1,
2561abe55efSEd Tanous                                const std::string& arg2)
2571abe55efSEd Tanous {
258f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
259f12894f8SJason M. Bills     addMessageToErrorJson(
260f12894f8SJason M. Bills         res.jsonValue,
261f12894f8SJason M. Bills         nlohmann::json{
262f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
263cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceAtUriUnauthorized"},
264f4c4dcf4SKowalski, Kamil             {"Message", "While accessing the resource at " + arg1 +
2651abe55efSEd Tanous                             ", the service received an authorization error " +
2661abe55efSEd Tanous                             arg2 + "."},
267*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
268f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
269f12894f8SJason M. Bills             {"Resolution", "Ensure that the appropriate access is provided for "
27066ac2b8cSJason M. Bills                            "the service in order for it to access the URI."}});
271f4c4dcf4SKowalski, Kamil }
272f4c4dcf4SKowalski, Kamil 
273f4c4dcf4SKowalski, Kamil /**
274f4c4dcf4SKowalski, Kamil  * @internal
275f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterUnknown message into JSON
276f4c4dcf4SKowalski, Kamil  *
277f4c4dcf4SKowalski, Kamil  * See header file for more information
278f4c4dcf4SKowalski, Kamil  * @endinternal
279f4c4dcf4SKowalski, Kamil  */
280f12894f8SJason M. Bills void actionParameterUnknown(crow::Response& res, const std::string& arg1,
2811abe55efSEd Tanous                             const std::string& arg2)
2821abe55efSEd Tanous {
283f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
284f12894f8SJason M. Bills     addMessageToErrorJson(
285f12894f8SJason M. Bills         res.jsonValue,
286f12894f8SJason M. Bills         nlohmann::json{
287f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
288cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterUnknown"},
289f4c4dcf4SKowalski, Kamil             {"Message", "The action " + arg1 +
290f12894f8SJason M. Bills                             " was submitted with the invalid parameter " +
291f12894f8SJason M. Bills                             arg2 + "."},
292*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
293f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
29466ac2b8cSJason M. Bills             {"Resolution", "Correct the invalid parameter and resubmit the "
29566ac2b8cSJason M. Bills                            "request if the operation failed."}});
296f4c4dcf4SKowalski, Kamil }
297f4c4dcf4SKowalski, Kamil 
298f4c4dcf4SKowalski, Kamil /**
299f4c4dcf4SKowalski, Kamil  * @internal
300f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceCannotBeDeleted message into JSON
301f4c4dcf4SKowalski, Kamil  *
302f4c4dcf4SKowalski, Kamil  * See header file for more information
303f4c4dcf4SKowalski, Kamil  * @endinternal
304f4c4dcf4SKowalski, Kamil  */
305f12894f8SJason M. Bills void resourceCannotBeDeleted(crow::Response& res)
3061abe55efSEd Tanous {
307f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
308f12894f8SJason M. Bills     addMessageToErrorJson(
309f12894f8SJason M. Bills         res.jsonValue,
310f12894f8SJason M. Bills         nlohmann::json{
311f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
312cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceCannotBeDeleted"},
313f12894f8SJason M. Bills             {"Message", "The delete request failed because the resource "
31466ac2b8cSJason M. Bills                         "requested cannot be deleted."},
315*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
316f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
317f12894f8SJason M. Bills             {"Resolution",
318f12894f8SJason M. Bills              "Do not attempt to delete a non-deletable resource."}});
319f4c4dcf4SKowalski, Kamil }
320f4c4dcf4SKowalski, Kamil 
321f4c4dcf4SKowalski, Kamil /**
322f4c4dcf4SKowalski, Kamil  * @internal
323f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyDuplicate message into JSON
324f4c4dcf4SKowalski, Kamil  *
325f4c4dcf4SKowalski, Kamil  * See header file for more information
326f4c4dcf4SKowalski, Kamil  * @endinternal
327f4c4dcf4SKowalski, Kamil  */
328f12894f8SJason M. Bills void propertyDuplicate(crow::Response& res, const std::string& arg1)
3291abe55efSEd Tanous {
330f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
331a08b46ccSJason M. Bills     addMessageToJson(
332f12894f8SJason M. Bills         res.jsonValue,
333f12894f8SJason M. Bills         nlohmann::json{
334f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
335cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyDuplicate"},
336f12894f8SJason M. Bills             {"Message",
337f12894f8SJason M. Bills              "The property " + arg1 + " was duplicated in the request."},
338*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
339f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
34066ac2b8cSJason M. Bills             {"Resolution",
34166ac2b8cSJason M. Bills              "Remove the duplicate property from the request body and resubmit "
342a08b46ccSJason M. Bills              "the request if the operation failed."}},
343a08b46ccSJason M. Bills         arg1);
344f4c4dcf4SKowalski, Kamil }
345f4c4dcf4SKowalski, Kamil 
346f4c4dcf4SKowalski, Kamil /**
347f4c4dcf4SKowalski, Kamil  * @internal
348f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceTemporarilyUnavailable message into JSON
349f4c4dcf4SKowalski, Kamil  *
350f4c4dcf4SKowalski, Kamil  * See header file for more information
351f4c4dcf4SKowalski, Kamil  * @endinternal
352f4c4dcf4SKowalski, Kamil  */
353f12894f8SJason M. Bills void serviceTemporarilyUnavailable(crow::Response& res, const std::string& arg1)
3541abe55efSEd Tanous {
355f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
356f12894f8SJason M. Bills     addMessageToErrorJson(
357f12894f8SJason M. Bills         res.jsonValue,
358f12894f8SJason M. Bills         nlohmann::json{
359f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
360cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ServiceTemporarilyUnavailable"},
3611abe55efSEd Tanous             {"Message", "The service is temporarily unavailable.  Retry in " +
3621abe55efSEd Tanous                             arg1 + " seconds."},
363*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
364f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
365f12894f8SJason M. Bills             {"Resolution", "Wait for the indicated retry duration and retry "
366f12894f8SJason M. Bills                            "the operation."}});
367f4c4dcf4SKowalski, Kamil }
368f4c4dcf4SKowalski, Kamil 
369f4c4dcf4SKowalski, Kamil /**
370f4c4dcf4SKowalski, Kamil  * @internal
371f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceAlreadyExists message into JSON
372f4c4dcf4SKowalski, Kamil  *
373f4c4dcf4SKowalski, Kamil  * See header file for more information
374f4c4dcf4SKowalski, Kamil  * @endinternal
375f4c4dcf4SKowalski, Kamil  */
376f12894f8SJason M. Bills void resourceAlreadyExists(crow::Response& res, const std::string& arg1,
377f12894f8SJason M. Bills                            const std::string& arg2, const std::string& arg3)
3781abe55efSEd Tanous {
379f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
380a08b46ccSJason M. Bills     addMessageToJson(
381f12894f8SJason M. Bills         res.jsonValue,
382f12894f8SJason M. Bills         nlohmann::json{
383f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
384cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceAlreadyExists"},
385f4c4dcf4SKowalski, Kamil             {"Message", "The requested resource of type " + arg1 +
3861abe55efSEd Tanous                             " with the property " + arg2 + " with the value " +
3871abe55efSEd Tanous                             arg3 + " already exists."},
388*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2, arg3}},
389f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
390f12894f8SJason M. Bills             {"Resolution", "Do not repeat the create operation as the resource "
391a08b46ccSJason M. Bills                            "has already been created."}},
392a08b46ccSJason M. Bills         arg2);
393f4c4dcf4SKowalski, Kamil }
394f4c4dcf4SKowalski, Kamil 
395f4c4dcf4SKowalski, Kamil /**
396f4c4dcf4SKowalski, Kamil  * @internal
397f4c4dcf4SKowalski, Kamil  * @brief Formats AccountForSessionNoLongerExists message into JSON
398f4c4dcf4SKowalski, Kamil  *
399f4c4dcf4SKowalski, Kamil  * See header file for more information
400f4c4dcf4SKowalski, Kamil  * @endinternal
401f4c4dcf4SKowalski, Kamil  */
402a08b46ccSJason M. Bills void accountForSessionNoLongerExists(crow::Response& res)
4031abe55efSEd Tanous {
404f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
405a08b46ccSJason M. Bills     addMessageToErrorJson(
406f12894f8SJason M. Bills         res.jsonValue,
407f12894f8SJason M. Bills         nlohmann::json{
408f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
409cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccountForSessionNoLongerExists"},
4101abe55efSEd Tanous             {"Message", "The account for the current session has been removed, "
41166ac2b8cSJason M. Bills                         "thus the current session has been removed as well."},
412*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
413f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
414a08b46ccSJason M. Bills             {"Resolution", "Attempt to connect with a valid account."}});
415f4c4dcf4SKowalski, Kamil }
416f4c4dcf4SKowalski, Kamil 
417f4c4dcf4SKowalski, Kamil /**
418f4c4dcf4SKowalski, Kamil  * @internal
419f4c4dcf4SKowalski, Kamil  * @brief Formats CreateFailedMissingReqProperties message into JSON
420f4c4dcf4SKowalski, Kamil  *
421f4c4dcf4SKowalski, Kamil  * See header file for more information
422f4c4dcf4SKowalski, Kamil  * @endinternal
423f4c4dcf4SKowalski, Kamil  */
424f12894f8SJason M. Bills void createFailedMissingReqProperties(crow::Response& res,
425f12894f8SJason M. Bills                                       const std::string& arg1)
4261abe55efSEd Tanous {
427f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
428a08b46ccSJason M. Bills     addMessageToJson(
429f12894f8SJason M. Bills         res.jsonValue,
430f12894f8SJason M. Bills         nlohmann::json{
431f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
432cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.CreateFailedMissingReqProperties"},
4331abe55efSEd Tanous             {"Message",
434f12894f8SJason M. Bills              "The create operation failed because the required property " +
435f12894f8SJason M. Bills                  arg1 + " was missing from the request."},
436*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
437f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
438f4c4dcf4SKowalski, Kamil             {"Resolution",
439f12894f8SJason M. Bills              "Correct the body to include the required property with a valid "
440a08b46ccSJason M. Bills              "value and resubmit the request if the operation failed."}},
441a08b46ccSJason M. Bills         arg1);
442f12894f8SJason M. Bills }
443f12894f8SJason M. Bills 
444f12894f8SJason M. Bills /**
445f12894f8SJason M. Bills  * @internal
446f12894f8SJason M. Bills  * @brief Formats PropertyValueFormatError message into JSON for the specified
447f12894f8SJason M. Bills  * property
448f12894f8SJason M. Bills  *
449f12894f8SJason M. Bills  * See header file for more information
450f12894f8SJason M. Bills  * @endinternal
451f12894f8SJason M. Bills  */
452f12894f8SJason M. Bills void propertyValueFormatError(crow::Response& res, const std::string& arg1,
453a08b46ccSJason M. Bills                               const std::string& arg2)
454f12894f8SJason M. Bills {
455f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
456f12894f8SJason M. Bills     addMessageToJson(
457f12894f8SJason M. Bills         res.jsonValue,
458f12894f8SJason M. Bills         nlohmann::json{
459f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
460cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueFormatError"},
461f12894f8SJason M. Bills             {"Message",
462f12894f8SJason M. Bills              "The value " + arg1 + " for the property " + arg2 +
463f12894f8SJason M. Bills                  " is of a different format than the property can accept."},
464*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
465f12894f8SJason M. Bills             {"Severity", "Warning"},
46666ac2b8cSJason M. Bills             {"Resolution",
46766ac2b8cSJason M. Bills              "Correct the value for the property in the request body and "
46866ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}},
469a08b46ccSJason M. Bills         arg2);
470f12894f8SJason M. Bills }
471f12894f8SJason M. Bills 
472f12894f8SJason M. Bills /**
473f12894f8SJason M. Bills  * @internal
474f12894f8SJason M. Bills  * @brief Formats PropertyValueNotInList message into JSON for the specified
475f12894f8SJason M. Bills  * property
476f12894f8SJason M. Bills  *
477f12894f8SJason M. Bills  * See header file for more information
478f12894f8SJason M. Bills  * @endinternal
479f12894f8SJason M. Bills  */
480f12894f8SJason M. Bills void propertyValueNotInList(crow::Response& res, const std::string& arg1,
481a08b46ccSJason M. Bills                             const std::string& arg2)
482f12894f8SJason M. Bills {
483f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
484f12894f8SJason M. Bills     addMessageToJson(
485f12894f8SJason M. Bills         res.jsonValue,
486f12894f8SJason M. Bills         nlohmann::json{
487f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
488cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueNotInList"},
489f12894f8SJason M. Bills             {"Message", "The value " + arg1 + " for the property " + arg2 +
490f12894f8SJason M. Bills                             " is not in the list of acceptable values."},
491*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
492f12894f8SJason M. Bills             {"Severity", "Warning"},
493f12894f8SJason M. Bills             {"Resolution",
494f12894f8SJason M. Bills              "Choose a value from the enumeration list that the implementation "
49566ac2b8cSJason M. Bills              "can support and resubmit the request if the operation failed."}},
496a08b46ccSJason M. Bills         arg2);
497f4c4dcf4SKowalski, Kamil }
498f4c4dcf4SKowalski, Kamil 
499f4c4dcf4SKowalski, Kamil /**
500f4c4dcf4SKowalski, Kamil  * @internal
501f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceAtUriInUnknownFormat message into JSON
502f4c4dcf4SKowalski, Kamil  *
503f4c4dcf4SKowalski, Kamil  * See header file for more information
504f4c4dcf4SKowalski, Kamil  * @endinternal
505f4c4dcf4SKowalski, Kamil  */
506f12894f8SJason M. Bills void resourceAtUriInUnknownFormat(crow::Response& res, const std::string& arg1)
5071abe55efSEd Tanous {
508f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
509f12894f8SJason M. Bills     addMessageToErrorJson(
510f12894f8SJason M. Bills         res.jsonValue,
511f12894f8SJason M. Bills         nlohmann::json{
512f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
513cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceAtUriInUnknownFormat"},
514f4c4dcf4SKowalski, Kamil             {"Message", "The resource at " + arg1 +
515f4c4dcf4SKowalski, Kamil                             " is in a format not recognized by the service."},
516*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
517f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
518f12894f8SJason M. Bills             {"Resolution", "Place an image or resource or file that is "
51966ac2b8cSJason M. Bills                            "recognized by the service at the URI."}});
520f4c4dcf4SKowalski, Kamil }
521f4c4dcf4SKowalski, Kamil 
522f4c4dcf4SKowalski, Kamil /**
523f4c4dcf4SKowalski, Kamil  * @internal
524f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceInUnknownState message into JSON
525f4c4dcf4SKowalski, Kamil  *
526f4c4dcf4SKowalski, Kamil  * See header file for more information
527f4c4dcf4SKowalski, Kamil  * @endinternal
528f4c4dcf4SKowalski, Kamil  */
529f12894f8SJason M. Bills void serviceInUnknownState(crow::Response& res)
5301abe55efSEd Tanous {
531f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
532f12894f8SJason M. Bills     addMessageToErrorJson(
533f12894f8SJason M. Bills         res.jsonValue,
534f12894f8SJason M. Bills         nlohmann::json{
535f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
536cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ServiceInUnknownState"},
53766ac2b8cSJason M. Bills             {"Message",
53866ac2b8cSJason M. Bills              "The operation failed because the service is in an unknown state "
53966ac2b8cSJason M. Bills              "and can no longer take incoming requests."},
540*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
541f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
54266ac2b8cSJason M. Bills             {"Resolution", "Restart the service and resubmit the request if "
54366ac2b8cSJason M. Bills                            "the operation failed."}});
544f4c4dcf4SKowalski, Kamil }
545f4c4dcf4SKowalski, Kamil 
546f4c4dcf4SKowalski, Kamil /**
547f4c4dcf4SKowalski, Kamil  * @internal
548f4c4dcf4SKowalski, Kamil  * @brief Formats EventSubscriptionLimitExceeded message into JSON
549f4c4dcf4SKowalski, Kamil  *
550f4c4dcf4SKowalski, Kamil  * See header file for more information
551f4c4dcf4SKowalski, Kamil  * @endinternal
552f4c4dcf4SKowalski, Kamil  */
553f12894f8SJason M. Bills void eventSubscriptionLimitExceeded(crow::Response& res)
5541abe55efSEd Tanous {
555f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
556f12894f8SJason M. Bills     addMessageToErrorJson(
557f12894f8SJason M. Bills         res.jsonValue,
558f12894f8SJason M. Bills         nlohmann::json{
559f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
560cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.EventSubscriptionLimitExceeded"},
561f4c4dcf4SKowalski, Kamil             {"Message",
562f4c4dcf4SKowalski, Kamil              "The event subscription failed due to the number of simultaneous "
563f4c4dcf4SKowalski, Kamil              "subscriptions exceeding the limit of the implementation."},
564*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
565f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
566f4c4dcf4SKowalski, Kamil             {"Resolution",
567f12894f8SJason M. Bills              "Reduce the number of other subscriptions before trying to "
56866ac2b8cSJason M. Bills              "establish the event subscription or increase the limit of "
56966ac2b8cSJason M. Bills              "simultaneous subscriptions (if supported)."}});
570f4c4dcf4SKowalski, Kamil }
571f4c4dcf4SKowalski, Kamil 
572f4c4dcf4SKowalski, Kamil /**
573f4c4dcf4SKowalski, Kamil  * @internal
574f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterMissing message into JSON
575f4c4dcf4SKowalski, Kamil  *
576f4c4dcf4SKowalski, Kamil  * See header file for more information
577f4c4dcf4SKowalski, Kamil  * @endinternal
578f4c4dcf4SKowalski, Kamil  */
579f12894f8SJason M. Bills void actionParameterMissing(crow::Response& res, const std::string& arg1,
5801abe55efSEd Tanous                             const std::string& arg2)
5811abe55efSEd Tanous {
582f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
583f12894f8SJason M. Bills     addMessageToErrorJson(
584f12894f8SJason M. Bills         res.jsonValue,
585f12894f8SJason M. Bills         nlohmann::json{
586f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
587cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterMissing"},
588f12894f8SJason M. Bills             {"Message", "The action " + arg1 + " requires the parameter " +
589f12894f8SJason M. Bills                             arg2 + " to be present in the request body."},
590*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
591f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
592f12894f8SJason M. Bills             {"Resolution",
59366ac2b8cSJason M. Bills              "Supply the action with the required parameter in the request "
59466ac2b8cSJason M. Bills              "body when the request is resubmitted."}});
595f4c4dcf4SKowalski, Kamil }
596f4c4dcf4SKowalski, Kamil 
597f4c4dcf4SKowalski, Kamil /**
598f4c4dcf4SKowalski, Kamil  * @internal
599f4c4dcf4SKowalski, Kamil  * @brief Formats StringValueTooLong message into JSON
600f4c4dcf4SKowalski, Kamil  *
601f4c4dcf4SKowalski, Kamil  * See header file for more information
602f4c4dcf4SKowalski, Kamil  * @endinternal
603f4c4dcf4SKowalski, Kamil  */
604f12894f8SJason M. Bills void stringValueTooLong(crow::Response& res, const std::string& arg1,
605f12894f8SJason M. Bills                         const int& arg2)
6061abe55efSEd Tanous {
607f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
608f12894f8SJason M. Bills     addMessageToErrorJson(
609f12894f8SJason M. Bills         res.jsonValue,
610f12894f8SJason M. Bills         nlohmann::json{
611f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
612cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.StringValueTooLong"},
613f4c4dcf4SKowalski, Kamil             {"Message", "The string " + arg1 + " exceeds the length limit " +
614f4c4dcf4SKowalski, Kamil                             std::to_string(arg2) + "."},
615*85659adfSJason M. Bills             {"MessageArgs", {arg1, std::to_string(arg2)}},
616f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
617f4c4dcf4SKowalski, Kamil             {"Resolution",
618f12894f8SJason M. Bills              "Resubmit the request with an appropriate string length."}});
619f4c4dcf4SKowalski, Kamil }
620f4c4dcf4SKowalski, Kamil 
621f4c4dcf4SKowalski, Kamil /**
622f4c4dcf4SKowalski, Kamil  * @internal
623cc9139ecSJason M. Bills  * @brief Formats SessionTerminated message into JSON
624cc9139ecSJason M. Bills  *
625cc9139ecSJason M. Bills  * See header file for more information
626cc9139ecSJason M. Bills  * @endinternal
627cc9139ecSJason M. Bills  */
628cc9139ecSJason M. Bills void sessionTerminated(crow::Response& res)
629cc9139ecSJason M. Bills {
630cc9139ecSJason M. Bills     res.result(boost::beast::http::status::ok);
631cc9139ecSJason M. Bills     addMessageToJsonRoot(
632cc9139ecSJason M. Bills         res.jsonValue,
633cc9139ecSJason M. Bills         nlohmann::json{
634cc9139ecSJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
635cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.SessionTerminated"},
636cc9139ecSJason M. Bills             {"Message", "The session was successfully terminated."},
637*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
638cc9139ecSJason M. Bills             {"Severity", "OK"},
639cc9139ecSJason M. Bills             {"Resolution", "No resolution is required."}});
640cc9139ecSJason M. Bills }
641cc9139ecSJason M. Bills 
642cc9139ecSJason M. Bills /**
643cc9139ecSJason M. Bills  * @internal
644cc9139ecSJason M. Bills  * @brief Formats ResourceTypeIncompatible message into JSON
645cc9139ecSJason M. Bills  *
646cc9139ecSJason M. Bills  * See header file for more information
647cc9139ecSJason M. Bills  * @endinternal
648cc9139ecSJason M. Bills  */
649cc9139ecSJason M. Bills void resourceTypeIncompatible(crow::Response& res, const std::string& arg1,
650cc9139ecSJason M. Bills                               const std::string& arg2)
651cc9139ecSJason M. Bills {
652cc9139ecSJason M. Bills     res.result(boost::beast::http::status::bad_request);
653cc9139ecSJason M. Bills     addMessageToErrorJson(
654cc9139ecSJason M. Bills         res.jsonValue,
655cc9139ecSJason M. Bills         nlohmann::json{
656cc9139ecSJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
657cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceTypeIncompatible"},
658cc9139ecSJason M. Bills             {"Message", "The @odata.type of the request body " + arg1 +
659cc9139ecSJason M. Bills                             " is incompatible with the @odata.type of the "
660cc9139ecSJason M. Bills                             "resource which is " +
661cc9139ecSJason M. Bills                             arg2 + "."},
662*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
663cc9139ecSJason M. Bills             {"Severity", "Critical"},
664cc9139ecSJason M. Bills             {"Resolution", "Resubmit the request with a payload compatible "
665cc9139ecSJason M. Bills                            "with the resource's schema."}});
666cc9139ecSJason M. Bills }
667cc9139ecSJason M. Bills 
668cc9139ecSJason M. Bills /**
669cc9139ecSJason M. Bills  * @internal
670f12894f8SJason M. Bills  * @brief Formats PropertyValueTypeError message into JSON for the specified
671f12894f8SJason M. Bills  * property
672f12894f8SJason M. Bills  *
673f12894f8SJason M. Bills  * See header file for more information
674f12894f8SJason M. Bills  * @endinternal
675f12894f8SJason M. Bills  */
676f12894f8SJason M. Bills void propertyValueTypeError(crow::Response& res, const std::string& arg1,
677a08b46ccSJason M. Bills                             const std::string& arg2)
678f12894f8SJason M. Bills {
679f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
680f12894f8SJason M. Bills     addMessageToJson(
681f12894f8SJason M. Bills         res.jsonValue,
682f12894f8SJason M. Bills         nlohmann::json{
683f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
684cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueTypeError"},
685f12894f8SJason M. Bills             {"Message",
686f12894f8SJason M. Bills              "The value " + arg1 + " for the property " + arg2 +
687f12894f8SJason M. Bills                  " is of a different type than the property can accept."},
688*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
689f12894f8SJason M. Bills             {"Severity", "Warning"},
69066ac2b8cSJason M. Bills             {"Resolution",
69166ac2b8cSJason M. Bills              "Correct the value for the property in the request body and "
69266ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}},
693a08b46ccSJason M. Bills         arg2);
694f4c4dcf4SKowalski, Kamil }
695f4c4dcf4SKowalski, Kamil 
696f4c4dcf4SKowalski, Kamil /**
697f4c4dcf4SKowalski, Kamil  * @internal
698f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceNotFound message into JSON
699f4c4dcf4SKowalski, Kamil  *
700f4c4dcf4SKowalski, Kamil  * See header file for more information
701f4c4dcf4SKowalski, Kamil  * @endinternal
702f4c4dcf4SKowalski, Kamil  */
703f12894f8SJason M. Bills void resourceNotFound(crow::Response& res, const std::string& arg1,
7041abe55efSEd Tanous                       const std::string& arg2)
7051abe55efSEd Tanous {
706f12894f8SJason M. Bills     res.result(boost::beast::http::status::not_found);
707f12894f8SJason M. Bills     addMessageToErrorJson(
708f12894f8SJason M. Bills         res.jsonValue,
709f12894f8SJason M. Bills         nlohmann::json{
710f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
711cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceNotFound"},
7121abe55efSEd Tanous             {"Message", "The requested resource of type " + arg1 + " named " +
7131abe55efSEd Tanous                             arg2 + " was not found."},
714*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
715f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
716f4c4dcf4SKowalski, Kamil             {"Resolution",
717f12894f8SJason M. Bills              "Provide a valid resource identifier and resubmit the request."}});
718f4c4dcf4SKowalski, Kamil }
719f4c4dcf4SKowalski, Kamil 
720f4c4dcf4SKowalski, Kamil /**
721f4c4dcf4SKowalski, Kamil  * @internal
722f4c4dcf4SKowalski, Kamil  * @brief Formats CouldNotEstablishConnection message into JSON
723f4c4dcf4SKowalski, Kamil  *
724f4c4dcf4SKowalski, Kamil  * See header file for more information
725f4c4dcf4SKowalski, Kamil  * @endinternal
726f4c4dcf4SKowalski, Kamil  */
727f12894f8SJason M. Bills void couldNotEstablishConnection(crow::Response& res, const std::string& arg1)
7281abe55efSEd Tanous {
729f12894f8SJason M. Bills     res.result(boost::beast::http::status::not_found);
730f12894f8SJason M. Bills     addMessageToErrorJson(
731f12894f8SJason M. Bills         res.jsonValue,
732f12894f8SJason M. Bills         nlohmann::json{
733f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
734cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.CouldNotEstablishConnection"},
7351abe55efSEd Tanous             {"Message",
736f12894f8SJason M. Bills              "The service failed to establish a Connection with the URI " +
737f12894f8SJason M. Bills                  arg1 + "."},
738*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
739f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
74066ac2b8cSJason M. Bills             {"Resolution",
74166ac2b8cSJason M. Bills              "Ensure that the URI contains a valid and reachable node name, "
74266ac2b8cSJason M. Bills              "protocol information and other URI components."}});
743f4c4dcf4SKowalski, Kamil }
744f4c4dcf4SKowalski, Kamil 
745f4c4dcf4SKowalski, Kamil /**
746f4c4dcf4SKowalski, Kamil  * @internal
747f12894f8SJason M. Bills  * @brief Formats PropertyNotWritable message into JSON for the specified
748f12894f8SJason M. Bills  * property
749f12894f8SJason M. Bills  *
750f12894f8SJason M. Bills  * See header file for more information
751f12894f8SJason M. Bills  * @endinternal
752f12894f8SJason M. Bills  */
753a08b46ccSJason M. Bills void propertyNotWritable(crow::Response& res, const std::string& arg1)
754f12894f8SJason M. Bills {
755f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
756f12894f8SJason M. Bills     addMessageToJson(
757f12894f8SJason M. Bills         res.jsonValue,
758f12894f8SJason M. Bills         nlohmann::json{
759f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
760cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyNotWritable"},
761f12894f8SJason M. Bills             {"Message",
762f12894f8SJason M. Bills              "The property " + arg1 +
763f12894f8SJason M. Bills                  " is a read only property and cannot be assigned a value."},
764*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
765f12894f8SJason M. Bills             {"Severity", "Warning"},
76666ac2b8cSJason M. Bills             {"Resolution", "Remove the property from the request body and "
76766ac2b8cSJason M. Bills                            "resubmit the request if the operation failed."}},
768a08b46ccSJason M. Bills         arg1);
769f4c4dcf4SKowalski, Kamil }
770f4c4dcf4SKowalski, Kamil 
771f4c4dcf4SKowalski, Kamil /**
772f4c4dcf4SKowalski, Kamil  * @internal
773f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterValueTypeError message into JSON
774f4c4dcf4SKowalski, Kamil  *
775f4c4dcf4SKowalski, Kamil  * See header file for more information
776f4c4dcf4SKowalski, Kamil  * @endinternal
777f4c4dcf4SKowalski, Kamil  */
778f12894f8SJason M. Bills void queryParameterValueTypeError(crow::Response& res, const std::string& arg1,
7791abe55efSEd Tanous                                   const std::string& arg2)
7801abe55efSEd Tanous {
781f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
782f12894f8SJason M. Bills     addMessageToErrorJson(
783f12894f8SJason M. Bills         res.jsonValue,
784f12894f8SJason M. Bills         nlohmann::json{
785f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
786cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryParameterValueTypeError"},
7871abe55efSEd Tanous             {"Message",
7881abe55efSEd Tanous              "The value " + arg1 + " for the query parameter " + arg2 +
789f4c4dcf4SKowalski, Kamil                  " is of a different type than the parameter can accept."},
790*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
791f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
79266ac2b8cSJason M. Bills             {"Resolution",
79366ac2b8cSJason M. Bills              "Correct the value for the query parameter in the request and "
79466ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
795f4c4dcf4SKowalski, Kamil }
796f4c4dcf4SKowalski, Kamil 
797f4c4dcf4SKowalski, Kamil /**
798f4c4dcf4SKowalski, Kamil  * @internal
799f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceShuttingDown message into JSON
800f4c4dcf4SKowalski, Kamil  *
801f4c4dcf4SKowalski, Kamil  * See header file for more information
802f4c4dcf4SKowalski, Kamil  * @endinternal
803f4c4dcf4SKowalski, Kamil  */
804f12894f8SJason M. Bills void serviceShuttingDown(crow::Response& res)
8051abe55efSEd Tanous {
806f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
807f12894f8SJason M. Bills     addMessageToErrorJson(
808f12894f8SJason M. Bills         res.jsonValue,
809f12894f8SJason M. Bills         nlohmann::json{
810f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
811cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ServiceShuttingDown"},
812f12894f8SJason M. Bills             {"Message", "The operation failed because the service is shutting "
81366ac2b8cSJason M. Bills                         "down and can no longer take incoming requests."},
814*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
815f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
81666ac2b8cSJason M. Bills             {"Resolution", "When the service becomes available, resubmit the "
81766ac2b8cSJason M. Bills                            "request if the operation failed."}});
818f4c4dcf4SKowalski, Kamil }
819f4c4dcf4SKowalski, Kamil 
820f4c4dcf4SKowalski, Kamil /**
821f4c4dcf4SKowalski, Kamil  * @internal
822f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterDuplicate message into JSON
823f4c4dcf4SKowalski, Kamil  *
824f4c4dcf4SKowalski, Kamil  * See header file for more information
825f4c4dcf4SKowalski, Kamil  * @endinternal
826f4c4dcf4SKowalski, Kamil  */
827f12894f8SJason M. Bills void actionParameterDuplicate(crow::Response& res, const std::string& arg1,
8281abe55efSEd Tanous                               const std::string& arg2)
8291abe55efSEd Tanous {
830f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
831f12894f8SJason M. Bills     addMessageToErrorJson(
832f12894f8SJason M. Bills         res.jsonValue,
833f12894f8SJason M. Bills         nlohmann::json{
834f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
835cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterDuplicate"},
836f4c4dcf4SKowalski, Kamil             {"Message",
837f4c4dcf4SKowalski, Kamil              "The action " + arg1 +
8381abe55efSEd Tanous                  " was submitted with more than one value for the parameter " +
8391abe55efSEd Tanous                  arg2 + "."},
840*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
841f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
84266ac2b8cSJason M. Bills             {"Resolution",
84366ac2b8cSJason M. Bills              "Resubmit the action with only one instance of the parameter in "
84466ac2b8cSJason M. Bills              "the request body if the operation failed."}});
845f4c4dcf4SKowalski, Kamil }
846f4c4dcf4SKowalski, Kamil 
847f4c4dcf4SKowalski, Kamil /**
848f4c4dcf4SKowalski, Kamil  * @internal
849f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterNotSupported message into JSON
850f4c4dcf4SKowalski, Kamil  *
851f4c4dcf4SKowalski, Kamil  * See header file for more information
852f4c4dcf4SKowalski, Kamil  * @endinternal
853f4c4dcf4SKowalski, Kamil  */
854f12894f8SJason M. Bills void actionParameterNotSupported(crow::Response& res, const std::string& arg1,
8551abe55efSEd Tanous                                  const std::string& arg2)
8561abe55efSEd Tanous {
857f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
858f12894f8SJason M. Bills     addMessageToErrorJson(
859f12894f8SJason M. Bills         res.jsonValue,
860f12894f8SJason M. Bills         nlohmann::json{
861f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
862cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterNotSupported"},
863f4c4dcf4SKowalski, Kamil             {"Message", "The parameter " + arg1 + " for the action " + arg2 +
864f4c4dcf4SKowalski, Kamil                             " is not supported on the target resource."},
865*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
866f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
86766ac2b8cSJason M. Bills             {"Resolution", "Remove the parameter supplied and resubmit the "
86866ac2b8cSJason M. Bills                            "request if the operation failed."}});
869f4c4dcf4SKowalski, Kamil }
870f4c4dcf4SKowalski, Kamil 
871f4c4dcf4SKowalski, Kamil /**
872f4c4dcf4SKowalski, Kamil  * @internal
873f4c4dcf4SKowalski, Kamil  * @brief Formats SourceDoesNotSupportProtocol message into JSON
874f4c4dcf4SKowalski, Kamil  *
875f4c4dcf4SKowalski, Kamil  * See header file for more information
876f4c4dcf4SKowalski, Kamil  * @endinternal
877f4c4dcf4SKowalski, Kamil  */
878f12894f8SJason M. Bills void sourceDoesNotSupportProtocol(crow::Response& res, const std::string& arg1,
8791abe55efSEd Tanous                                   const std::string& arg2)
8801abe55efSEd Tanous {
881f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
882f12894f8SJason M. Bills     addMessageToErrorJson(
883f12894f8SJason M. Bills         res.jsonValue,
884f12894f8SJason M. Bills         nlohmann::json{
885f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
886cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.SourceDoesNotSupportProtocol"},
88755c7b7a2SEd Tanous             {"Message", "The other end of the Connection at " + arg1 +
8881abe55efSEd Tanous                             " does not support the specified protocol " + arg2 +
8891abe55efSEd Tanous                             "."},
890*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
891f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
892f12894f8SJason M. Bills             {"Resolution", "Change protocols or URIs. "}});
893f4c4dcf4SKowalski, Kamil }
894f4c4dcf4SKowalski, Kamil 
895f4c4dcf4SKowalski, Kamil /**
896f4c4dcf4SKowalski, Kamil  * @internal
897f4c4dcf4SKowalski, Kamil  * @brief Formats AccountRemoved message into JSON
898f4c4dcf4SKowalski, Kamil  *
899f4c4dcf4SKowalski, Kamil  * See header file for more information
900f4c4dcf4SKowalski, Kamil  * @endinternal
901f4c4dcf4SKowalski, Kamil  */
902f12894f8SJason M. Bills void accountRemoved(crow::Response& res)
9031abe55efSEd Tanous {
904f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
905f12894f8SJason M. Bills     addMessageToJsonRoot(
906f12894f8SJason M. Bills         res.jsonValue,
907f12894f8SJason M. Bills         nlohmann::json{
908f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
909cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccountRemoved"},
910f4c4dcf4SKowalski, Kamil             {"Message", "The account was successfully removed."},
911*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
912f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
913f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}});
914f4c4dcf4SKowalski, Kamil }
915f4c4dcf4SKowalski, Kamil 
916f4c4dcf4SKowalski, Kamil /**
917f4c4dcf4SKowalski, Kamil  * @internal
918f4c4dcf4SKowalski, Kamil  * @brief Formats AccessDenied message into JSON
919f4c4dcf4SKowalski, Kamil  *
920f4c4dcf4SKowalski, Kamil  * See header file for more information
921f4c4dcf4SKowalski, Kamil  * @endinternal
922f4c4dcf4SKowalski, Kamil  */
923f12894f8SJason M. Bills void accessDenied(crow::Response& res, const std::string& arg1)
9241abe55efSEd Tanous {
925f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
926f12894f8SJason M. Bills     addMessageToErrorJson(
927f12894f8SJason M. Bills         res.jsonValue,
928f12894f8SJason M. Bills         nlohmann::json{
929f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
930cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccessDenied"},
931f12894f8SJason M. Bills             {"Message", "While attempting to establish a Connection to " +
932f12894f8SJason M. Bills                             arg1 + ", the service denied access."},
933*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
934f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
93566ac2b8cSJason M. Bills             {"Resolution", "Attempt to ensure that the URI is correct and that "
93666ac2b8cSJason M. Bills                            "the service has the appropriate credentials."}});
937f4c4dcf4SKowalski, Kamil }
938f4c4dcf4SKowalski, Kamil 
939f4c4dcf4SKowalski, Kamil /**
940f4c4dcf4SKowalski, Kamil  * @internal
941f4c4dcf4SKowalski, Kamil  * @brief Formats QueryNotSupported message into JSON
942f4c4dcf4SKowalski, Kamil  *
943f4c4dcf4SKowalski, Kamil  * See header file for more information
944f4c4dcf4SKowalski, Kamil  * @endinternal
945f4c4dcf4SKowalski, Kamil  */
946f12894f8SJason M. Bills void queryNotSupported(crow::Response& res)
9471abe55efSEd Tanous {
948f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
949f12894f8SJason M. Bills     addMessageToErrorJson(
950f12894f8SJason M. Bills         res.jsonValue,
951f12894f8SJason M. Bills         nlohmann::json{
952f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
953cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryNotSupported"},
954f4c4dcf4SKowalski, Kamil             {"Message", "Querying is not supported by the implementation."},
955*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
956f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
95766ac2b8cSJason M. Bills             {"Resolution", "Remove the query parameters and resubmit the "
95866ac2b8cSJason M. Bills                            "request if the operation failed."}});
959f4c4dcf4SKowalski, Kamil }
960f4c4dcf4SKowalski, Kamil 
961f4c4dcf4SKowalski, Kamil /**
962f4c4dcf4SKowalski, Kamil  * @internal
963f4c4dcf4SKowalski, Kamil  * @brief Formats CreateLimitReachedForResource message into JSON
964f4c4dcf4SKowalski, Kamil  *
965f4c4dcf4SKowalski, Kamil  * See header file for more information
966f4c4dcf4SKowalski, Kamil  * @endinternal
967f4c4dcf4SKowalski, Kamil  */
968f12894f8SJason M. Bills void createLimitReachedForResource(crow::Response& res)
9691abe55efSEd Tanous {
970f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
971f12894f8SJason M. Bills     addMessageToErrorJson(
972f12894f8SJason M. Bills         res.jsonValue,
973f12894f8SJason M. Bills         nlohmann::json{
974f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
975cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.CreateLimitReachedForResource"},
9761abe55efSEd Tanous             {"Message", "The create operation failed because the resource has "
97766ac2b8cSJason M. Bills                         "reached the limit of possible resources."},
978*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
979f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
98066ac2b8cSJason M. Bills             {"Resolution",
98166ac2b8cSJason M. Bills              "Either delete resources and resubmit the request if the "
98266ac2b8cSJason M. Bills              "operation failed or do not resubmit the request."}});
983f4c4dcf4SKowalski, Kamil }
984f4c4dcf4SKowalski, Kamil 
985f4c4dcf4SKowalski, Kamil /**
986f4c4dcf4SKowalski, Kamil  * @internal
987f4c4dcf4SKowalski, Kamil  * @brief Formats GeneralError message into JSON
988f4c4dcf4SKowalski, Kamil  *
989f4c4dcf4SKowalski, Kamil  * See header file for more information
990f4c4dcf4SKowalski, Kamil  * @endinternal
991f4c4dcf4SKowalski, Kamil  */
992f12894f8SJason M. Bills void generalError(crow::Response& res)
9931abe55efSEd Tanous {
994f12894f8SJason M. Bills     res.result(boost::beast::http::status::internal_server_error);
995f12894f8SJason M. Bills     addMessageToErrorJson(
996f12894f8SJason M. Bills         res.jsonValue,
997f12894f8SJason M. Bills         nlohmann::json{
998f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
999cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.GeneralError"},
1000cc9139ecSJason M. Bills             {"Message", "A general error has occurred. See Resolution for "
1001cc9139ecSJason M. Bills                         "information on how to resolve the error."},
1002*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1003f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1004cc9139ecSJason M. Bills             {"Resolution", "None."}});
1005f4c4dcf4SKowalski, Kamil }
1006f4c4dcf4SKowalski, Kamil 
1007f4c4dcf4SKowalski, Kamil /**
1008f4c4dcf4SKowalski, Kamil  * @internal
1009f4c4dcf4SKowalski, Kamil  * @brief Formats Success message into JSON
1010f4c4dcf4SKowalski, Kamil  *
1011f4c4dcf4SKowalski, Kamil  * See header file for more information
1012f4c4dcf4SKowalski, Kamil  * @endinternal
1013f4c4dcf4SKowalski, Kamil  */
1014f12894f8SJason M. Bills void success(crow::Response& res)
10151abe55efSEd Tanous {
1016f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1017f12894f8SJason M. Bills     addMessageToJsonRoot(
1018f12894f8SJason M. Bills         res.jsonValue,
1019f12894f8SJason M. Bills         nlohmann::json{
1020f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1021cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.Success"},
1022f4c4dcf4SKowalski, Kamil             {"Message", "Successfully Completed Request"},
1023*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1024f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1025f12894f8SJason M. Bills             {"Resolution", "None"}});
1026f12894f8SJason M. Bills }
1027f12894f8SJason M. Bills 
1028f12894f8SJason M. Bills /**
1029f12894f8SJason M. Bills  * @internal
1030f4c4dcf4SKowalski, Kamil  * @brief Formats Created message into JSON
1031f4c4dcf4SKowalski, Kamil  *
1032f4c4dcf4SKowalski, Kamil  * See header file for more information
1033f4c4dcf4SKowalski, Kamil  * @endinternal
1034f4c4dcf4SKowalski, Kamil  */
1035f12894f8SJason M. Bills void created(crow::Response& res)
10361abe55efSEd Tanous {
1037f12894f8SJason M. Bills     res.result(boost::beast::http::status::created);
1038f12894f8SJason M. Bills     addMessageToJsonRoot(
1039f12894f8SJason M. Bills         res.jsonValue,
1040f12894f8SJason M. Bills         nlohmann::json{
1041f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1042cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.Created"},
1043f4c4dcf4SKowalski, Kamil             {"Message", "The resource has been created successfully"},
1044*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1045f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1046f12894f8SJason M. Bills             {"Resolution", "None"}});
1047f4c4dcf4SKowalski, Kamil }
1048f4c4dcf4SKowalski, Kamil 
1049f4c4dcf4SKowalski, Kamil /**
1050f4c4dcf4SKowalski, Kamil  * @internal
1051cc9139ecSJason M. Bills  * @brief Formats NoOperation message into JSON
1052cc9139ecSJason M. Bills  *
1053cc9139ecSJason M. Bills  * See header file for more information
1054cc9139ecSJason M. Bills  * @endinternal
1055cc9139ecSJason M. Bills  */
1056cc9139ecSJason M. Bills void noOperation(crow::Response& res)
1057cc9139ecSJason M. Bills {
1058cc9139ecSJason M. Bills     res.result(boost::beast::http::status::bad_request);
1059cc9139ecSJason M. Bills     addMessageToErrorJson(
1060cc9139ecSJason M. Bills         res.jsonValue,
1061cc9139ecSJason M. Bills         nlohmann::json{
1062cc9139ecSJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1063cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.NoOperation"},
1064cc9139ecSJason M. Bills             {"Message", "The request body submitted contain no data to act "
1065cc9139ecSJason M. Bills                         "upon and no changes to the resource took place."},
1066*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1067cc9139ecSJason M. Bills             {"Severity", "Warning"},
1068cc9139ecSJason M. Bills             {"Resolution",
1069cc9139ecSJason M. Bills              "Add properties in the JSON object and resubmit the request."}});
1070cc9139ecSJason M. Bills }
1071cc9139ecSJason M. Bills 
1072cc9139ecSJason M. Bills /**
1073cc9139ecSJason M. Bills  * @internal
1074f12894f8SJason M. Bills  * @brief Formats PropertyUnknown message into JSON for the specified property
1075f12894f8SJason M. Bills  *
1076f12894f8SJason M. Bills  * See header file for more information
1077f12894f8SJason M. Bills  * @endinternal
1078f12894f8SJason M. Bills  */
1079a08b46ccSJason M. Bills void propertyUnknown(crow::Response& res, const std::string& arg1)
1080f12894f8SJason M. Bills {
1081f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1082f12894f8SJason M. Bills     addMessageToJson(
1083f12894f8SJason M. Bills         res.jsonValue,
1084f12894f8SJason M. Bills         nlohmann::json{
1085f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1086cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyUnknown"},
1087f12894f8SJason M. Bills             {"Message",
1088f12894f8SJason M. Bills              "The property " + arg1 +
1089f12894f8SJason M. Bills                  " is not in the list of valid properties for the resource."},
1090*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
1091f12894f8SJason M. Bills             {"Severity", "Warning"},
109266ac2b8cSJason M. Bills             {"Resolution",
109366ac2b8cSJason M. Bills              "Remove the unknown property from the request body and resubmit "
109466ac2b8cSJason M. Bills              "the request if the operation failed."}},
1095a08b46ccSJason M. Bills         arg1);
1096f4c4dcf4SKowalski, Kamil }
1097f4c4dcf4SKowalski, Kamil 
1098f4c4dcf4SKowalski, Kamil /**
1099f4c4dcf4SKowalski, Kamil  * @internal
1100f4c4dcf4SKowalski, Kamil  * @brief Formats NoValidSession message into JSON
1101f4c4dcf4SKowalski, Kamil  *
1102f4c4dcf4SKowalski, Kamil  * See header file for more information
1103f4c4dcf4SKowalski, Kamil  * @endinternal
1104f4c4dcf4SKowalski, Kamil  */
1105f12894f8SJason M. Bills void noValidSession(crow::Response& res)
11061abe55efSEd Tanous {
1107f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1108f12894f8SJason M. Bills     addMessageToErrorJson(
1109f12894f8SJason M. Bills         res.jsonValue,
1110f12894f8SJason M. Bills         nlohmann::json{
1111f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1112cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.NoValidSession"},
1113f4c4dcf4SKowalski, Kamil             {"Message",
1114f4c4dcf4SKowalski, Kamil              "There is no valid session established with the implementation."},
1115*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1116f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
11171abe55efSEd Tanous             {"Resolution",
1118f12894f8SJason M. Bills              "Establish as session before attempting any operations."}});
1119f4c4dcf4SKowalski, Kamil }
1120f4c4dcf4SKowalski, Kamil 
1121f4c4dcf4SKowalski, Kamil /**
1122f4c4dcf4SKowalski, Kamil  * @internal
1123f4c4dcf4SKowalski, Kamil  * @brief Formats InvalidObject message into JSON
1124f4c4dcf4SKowalski, Kamil  *
1125f4c4dcf4SKowalski, Kamil  * See header file for more information
1126f4c4dcf4SKowalski, Kamil  * @endinternal
1127f4c4dcf4SKowalski, Kamil  */
1128f12894f8SJason M. Bills void invalidObject(crow::Response& res, const std::string& arg1)
11291abe55efSEd Tanous {
1130f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1131f12894f8SJason M. Bills     addMessageToErrorJson(
1132f12894f8SJason M. Bills         res.jsonValue,
1133f12894f8SJason M. Bills         nlohmann::json{
1134f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1135cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InvalidObject"},
1136f4c4dcf4SKowalski, Kamil             {"Message", "The object at " + arg1 + " is invalid."},
1137*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
1138f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1139f12894f8SJason M. Bills             {"Resolution",
114066ac2b8cSJason M. Bills              "Either the object is malformed or the URI is not correct.  "
114166ac2b8cSJason M. Bills              "Correct the condition and resubmit the request if it failed."}});
1142f4c4dcf4SKowalski, Kamil }
1143f4c4dcf4SKowalski, Kamil 
1144f4c4dcf4SKowalski, Kamil /**
1145f4c4dcf4SKowalski, Kamil  * @internal
1146f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceInStandby message into JSON
1147f4c4dcf4SKowalski, Kamil  *
1148f4c4dcf4SKowalski, Kamil  * See header file for more information
1149f4c4dcf4SKowalski, Kamil  * @endinternal
1150f4c4dcf4SKowalski, Kamil  */
1151f12894f8SJason M. Bills void resourceInStandby(crow::Response& res)
11521abe55efSEd Tanous {
1153f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1154f12894f8SJason M. Bills     addMessageToErrorJson(
1155f12894f8SJason M. Bills         res.jsonValue,
1156f12894f8SJason M. Bills         nlohmann::json{
1157f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1158cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceInStandby"},
115966ac2b8cSJason M. Bills             {"Message", "The request could not be performed because the "
116066ac2b8cSJason M. Bills                         "resource is in standby."},
1161*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1162f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1163f12894f8SJason M. Bills             {"Resolution", "Ensure that the resource is in the correct power "
116466ac2b8cSJason M. Bills                            "state and resubmit the request."}});
1165f4c4dcf4SKowalski, Kamil }
1166f4c4dcf4SKowalski, Kamil 
1167f4c4dcf4SKowalski, Kamil /**
1168f4c4dcf4SKowalski, Kamil  * @internal
1169f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterValueTypeError message into JSON
1170f4c4dcf4SKowalski, Kamil  *
1171f4c4dcf4SKowalski, Kamil  * See header file for more information
1172f4c4dcf4SKowalski, Kamil  * @endinternal
1173f4c4dcf4SKowalski, Kamil  */
1174f12894f8SJason M. Bills void actionParameterValueTypeError(crow::Response& res, const std::string& arg1,
1175f4c4dcf4SKowalski, Kamil                                    const std::string& arg2,
11761abe55efSEd Tanous                                    const std::string& arg3)
11771abe55efSEd Tanous {
1178f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1179f12894f8SJason M. Bills     addMessageToErrorJson(
1180f12894f8SJason M. Bills         res.jsonValue,
1181f12894f8SJason M. Bills         nlohmann::json{
1182f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1183cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterValueTypeError"},
11841abe55efSEd Tanous             {"Message",
11851abe55efSEd Tanous              "The value " + arg1 + " for the parameter " + arg2 +
1186f4c4dcf4SKowalski, Kamil                  " in the action " + arg3 +
1187f4c4dcf4SKowalski, Kamil                  " is of a different type than the parameter can accept."},
1188*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2, arg3}},
1189f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
119066ac2b8cSJason M. Bills             {"Resolution",
119166ac2b8cSJason M. Bills              "Correct the value for the parameter in the request body and "
119266ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
1193f4c4dcf4SKowalski, Kamil }
1194f4c4dcf4SKowalski, Kamil 
1195f4c4dcf4SKowalski, Kamil /**
1196f4c4dcf4SKowalski, Kamil  * @internal
1197f4c4dcf4SKowalski, Kamil  * @brief Formats SessionLimitExceeded message into JSON
1198f4c4dcf4SKowalski, Kamil  *
1199f4c4dcf4SKowalski, Kamil  * See header file for more information
1200f4c4dcf4SKowalski, Kamil  * @endinternal
1201f4c4dcf4SKowalski, Kamil  */
1202f12894f8SJason M. Bills void sessionLimitExceeded(crow::Response& res)
12031abe55efSEd Tanous {
1204f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1205f12894f8SJason M. Bills     addMessageToErrorJson(
1206f12894f8SJason M. Bills         res.jsonValue,
1207f12894f8SJason M. Bills         nlohmann::json{
1208f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1209cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.SessionLimitExceeded"},
1210f12894f8SJason M. Bills             {"Message", "The session establishment failed due to the number of "
121166ac2b8cSJason M. Bills                         "simultaneous sessions exceeding the limit of the "
121266ac2b8cSJason M. Bills                         "implementation."},
1213*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1214f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
121566ac2b8cSJason M. Bills             {"Resolution", "Reduce the number of other sessions before trying "
121666ac2b8cSJason M. Bills                            "to establish the session or increase the limit of "
121766ac2b8cSJason M. Bills                            "simultaneous sessions (if supported)."}});
1218f4c4dcf4SKowalski, Kamil }
1219f4c4dcf4SKowalski, Kamil 
1220f4c4dcf4SKowalski, Kamil /**
1221f4c4dcf4SKowalski, Kamil  * @internal
1222f4c4dcf4SKowalski, Kamil  * @brief Formats ActionNotSupported message into JSON
1223f4c4dcf4SKowalski, Kamil  *
1224f4c4dcf4SKowalski, Kamil  * See header file for more information
1225f4c4dcf4SKowalski, Kamil  * @endinternal
1226f4c4dcf4SKowalski, Kamil  */
1227f12894f8SJason M. Bills void actionNotSupported(crow::Response& res, const std::string& arg1)
12281abe55efSEd Tanous {
1229f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1230f12894f8SJason M. Bills     addMessageToErrorJson(
1231f12894f8SJason M. Bills         res.jsonValue,
1232f12894f8SJason M. Bills         nlohmann::json{
1233f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1234cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionNotSupported"},
12351abe55efSEd Tanous             {"Message",
12361abe55efSEd Tanous              "The action " + arg1 + " is not supported by the resource."},
1237*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
1238f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1239f4c4dcf4SKowalski, Kamil             {"Resolution",
1240f4c4dcf4SKowalski, Kamil              "The action supplied cannot be resubmitted to the implementation. "
1241f12894f8SJason M. Bills              " Perhaps the action was invalid, the wrong resource was the "
124266ac2b8cSJason M. Bills              "target or the implementation documentation may be of "
124366ac2b8cSJason M. Bills              "assistance."}});
1244f4c4dcf4SKowalski, Kamil }
1245f4c4dcf4SKowalski, Kamil 
1246f4c4dcf4SKowalski, Kamil /**
1247f4c4dcf4SKowalski, Kamil  * @internal
1248f4c4dcf4SKowalski, Kamil  * @brief Formats InvalidIndex message into JSON
1249f4c4dcf4SKowalski, Kamil  *
1250f4c4dcf4SKowalski, Kamil  * See header file for more information
1251f4c4dcf4SKowalski, Kamil  * @endinternal
1252f4c4dcf4SKowalski, Kamil  */
1253f12894f8SJason M. Bills void invalidIndex(crow::Response& res, const int& arg1)
12541abe55efSEd Tanous {
1255f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1256f12894f8SJason M. Bills     addMessageToErrorJson(
1257f12894f8SJason M. Bills         res.jsonValue,
1258f12894f8SJason M. Bills         nlohmann::json{
1259f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1260cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InvalidIndex"},
126155c7b7a2SEd Tanous             {"Message", "The index " + std::to_string(arg1) +
1262f4c4dcf4SKowalski, Kamil                             " is not a valid offset into the array."},
1263*85659adfSJason M. Bills             {"MessageArgs", {std::to_string(arg1)}},
1264f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1265f12894f8SJason M. Bills             {"Resolution", "Verify the index value provided is within the "
1266f12894f8SJason M. Bills                            "bounds of the array."}});
1267f4c4dcf4SKowalski, Kamil }
1268f4c4dcf4SKowalski, Kamil 
1269f4c4dcf4SKowalski, Kamil /**
1270f4c4dcf4SKowalski, Kamil  * @internal
1271f4c4dcf4SKowalski, Kamil  * @brief Formats EmptyJSON message into JSON
1272f4c4dcf4SKowalski, Kamil  *
1273f4c4dcf4SKowalski, Kamil  * See header file for more information
1274f4c4dcf4SKowalski, Kamil  * @endinternal
1275f4c4dcf4SKowalski, Kamil  */
1276f12894f8SJason M. Bills void emptyJSON(crow::Response& res)
12771abe55efSEd Tanous {
1278f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1279f12894f8SJason M. Bills     addMessageToErrorJson(
1280f12894f8SJason M. Bills         res.jsonValue,
1281f12894f8SJason M. Bills         nlohmann::json{
1282f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1283cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.EmptyJSON"},
1284f12894f8SJason M. Bills             {"Message", "The request body submitted contained an empty JSON "
128566ac2b8cSJason M. Bills                         "object and the service is unable to process it."},
1286*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1287f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1288f4c4dcf4SKowalski, Kamil             {"Resolution",
1289f12894f8SJason M. Bills              "Add properties in the JSON object and resubmit the request."}});
1290f4c4dcf4SKowalski, Kamil }
1291f4c4dcf4SKowalski, Kamil 
1292f4c4dcf4SKowalski, Kamil /**
1293f4c4dcf4SKowalski, Kamil  * @internal
1294f4c4dcf4SKowalski, Kamil  * @brief Formats QueryNotSupportedOnResource message into JSON
1295f4c4dcf4SKowalski, Kamil  *
1296f4c4dcf4SKowalski, Kamil  * See header file for more information
1297f4c4dcf4SKowalski, Kamil  * @endinternal
1298f4c4dcf4SKowalski, Kamil  */
1299f12894f8SJason M. Bills void queryNotSupportedOnResource(crow::Response& res)
13001abe55efSEd Tanous {
1301f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1302f12894f8SJason M. Bills     addMessageToErrorJson(
1303f12894f8SJason M. Bills         res.jsonValue,
1304f12894f8SJason M. Bills         nlohmann::json{
1305f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1306cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryNotSupportedOnResource"},
1307f4c4dcf4SKowalski, Kamil             {"Message", "Querying is not supported on the requested resource."},
1308*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1309f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
131066ac2b8cSJason M. Bills             {"Resolution", "Remove the query parameters and resubmit the "
131166ac2b8cSJason M. Bills                            "request if the operation failed."}});
1312f4c4dcf4SKowalski, Kamil }
1313f4c4dcf4SKowalski, Kamil 
1314f4c4dcf4SKowalski, Kamil /**
1315f4c4dcf4SKowalski, Kamil  * @internal
1316f4c4dcf4SKowalski, Kamil  * @brief Formats InsufficientPrivilege message into JSON
1317f4c4dcf4SKowalski, Kamil  *
1318f4c4dcf4SKowalski, Kamil  * See header file for more information
1319f4c4dcf4SKowalski, Kamil  * @endinternal
1320f4c4dcf4SKowalski, Kamil  */
1321f12894f8SJason M. Bills void insufficientPrivilege(crow::Response& res)
13221abe55efSEd Tanous {
1323f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1324f12894f8SJason M. Bills     addMessageToErrorJson(
1325f12894f8SJason M. Bills         res.jsonValue,
1326f12894f8SJason M. Bills         nlohmann::json{
1327f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1328cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InsufficientPrivilege"},
132966ac2b8cSJason M. Bills             {"Message", "There are insufficient privileges for the account or "
133066ac2b8cSJason M. Bills                         "credentials associated with the current session to "
133166ac2b8cSJason M. Bills                         "perform the requested operation."},
1332*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1333f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1334f4c4dcf4SKowalski, Kamil             {"Resolution",
1335f12894f8SJason M. Bills              "Either abandon the operation or change the associated access "
133666ac2b8cSJason M. Bills              "rights and resubmit the request if the operation failed."}});
1337f4c4dcf4SKowalski, Kamil }
1338f4c4dcf4SKowalski, Kamil 
1339f4c4dcf4SKowalski, Kamil /**
1340f4c4dcf4SKowalski, Kamil  * @internal
1341f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyValueModified message into JSON
1342f4c4dcf4SKowalski, Kamil  *
1343f4c4dcf4SKowalski, Kamil  * See header file for more information
1344f4c4dcf4SKowalski, Kamil  * @endinternal
1345f4c4dcf4SKowalski, Kamil  */
1346f12894f8SJason M. Bills void propertyValueModified(crow::Response& res, const std::string& arg1,
1347a08b46ccSJason M. Bills                            const std::string& arg2)
13481abe55efSEd Tanous {
1349f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1350f12894f8SJason M. Bills     addMessageToJson(
1351f12894f8SJason M. Bills         res.jsonValue,
1352f12894f8SJason M. Bills         nlohmann::json{
1353f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1354cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueModified"},
1355f12894f8SJason M. Bills             {"Message", "The property " + arg1 + " was assigned the value " +
1356f12894f8SJason M. Bills                             arg2 + " due to modification by the service."},
1357*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
1358f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1359f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}},
1360a08b46ccSJason M. Bills         arg1);
1361f4c4dcf4SKowalski, Kamil }
1362f4c4dcf4SKowalski, Kamil 
1363f4c4dcf4SKowalski, Kamil /**
1364f4c4dcf4SKowalski, Kamil  * @internal
1365f4c4dcf4SKowalski, Kamil  * @brief Formats AccountNotModified message into JSON
1366f4c4dcf4SKowalski, Kamil  *
1367f4c4dcf4SKowalski, Kamil  * See header file for more information
1368f4c4dcf4SKowalski, Kamil  * @endinternal
1369f4c4dcf4SKowalski, Kamil  */
1370f12894f8SJason M. Bills void accountNotModified(crow::Response& res)
13711abe55efSEd Tanous {
1372f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1373f12894f8SJason M. Bills     addMessageToErrorJson(
1374f12894f8SJason M. Bills         res.jsonValue,
1375f12894f8SJason M. Bills         nlohmann::json{
1376f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1377cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccountNotModified"},
1378f4c4dcf4SKowalski, Kamil             {"Message", "The account modification request failed."},
1379*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1380f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1381f12894f8SJason M. Bills             {"Resolution", "The modification may have failed due to permission "
138266ac2b8cSJason M. Bills                            "issues or issues with the request body."}});
1383f4c4dcf4SKowalski, Kamil }
1384f4c4dcf4SKowalski, Kamil 
1385f4c4dcf4SKowalski, Kamil /**
1386f4c4dcf4SKowalski, Kamil  * @internal
1387f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterValueFormatError message into JSON
1388f4c4dcf4SKowalski, Kamil  *
1389f4c4dcf4SKowalski, Kamil  * See header file for more information
1390f4c4dcf4SKowalski, Kamil  * @endinternal
1391f4c4dcf4SKowalski, Kamil  */
1392f12894f8SJason M. Bills void queryParameterValueFormatError(crow::Response& res,
1393f12894f8SJason M. Bills                                     const std::string& arg1,
13941abe55efSEd Tanous                                     const std::string& arg2)
13951abe55efSEd Tanous {
1396f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1397f12894f8SJason M. Bills     addMessageToErrorJson(
1398f12894f8SJason M. Bills         res.jsonValue,
1399f12894f8SJason M. Bills         nlohmann::json{
1400f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1401cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryParameterValueFormatError"},
1402f4c4dcf4SKowalski, Kamil             {"Message",
1403f4c4dcf4SKowalski, Kamil              "The value " + arg1 + " for the parameter " + arg2 +
1404f4c4dcf4SKowalski, Kamil                  " is of a different format than the parameter can accept."},
1405*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
1406f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
140766ac2b8cSJason M. Bills             {"Resolution",
140866ac2b8cSJason M. Bills              "Correct the value for the query parameter in the request and "
140966ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
1410f4c4dcf4SKowalski, Kamil }
1411f4c4dcf4SKowalski, Kamil 
1412f4c4dcf4SKowalski, Kamil /**
1413f4c4dcf4SKowalski, Kamil  * @internal
1414f12894f8SJason M. Bills  * @brief Formats PropertyMissing message into JSON for the specified property
1415f12894f8SJason M. Bills  *
1416f12894f8SJason M. Bills  * See header file for more information
1417f12894f8SJason M. Bills  * @endinternal
1418f12894f8SJason M. Bills  */
1419a08b46ccSJason M. Bills void propertyMissing(crow::Response& res, const std::string& arg1)
1420f12894f8SJason M. Bills {
1421f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1422f12894f8SJason M. Bills     addMessageToJson(
1423f12894f8SJason M. Bills         res.jsonValue,
1424f12894f8SJason M. Bills         nlohmann::json{
1425f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1426cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyMissing"},
1427f12894f8SJason M. Bills             {"Message", "The property " + arg1 +
1428f12894f8SJason M. Bills                             " is a required property and must be included in "
1429f12894f8SJason M. Bills                             "the request."},
1430*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
1431f12894f8SJason M. Bills             {"Severity", "Warning"},
1432f12894f8SJason M. Bills             {"Resolution",
143366ac2b8cSJason M. Bills              "Ensure that the property is in the request body and has a valid "
143466ac2b8cSJason M. Bills              "value and resubmit the request if the operation failed."}},
1435a08b46ccSJason M. Bills         arg1);
1436f4c4dcf4SKowalski, Kamil }
1437f4c4dcf4SKowalski, Kamil 
1438f4c4dcf4SKowalski, Kamil /**
1439f4c4dcf4SKowalski, Kamil  * @internal
1440f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceExhaustion message into JSON
1441f4c4dcf4SKowalski, Kamil  *
1442f4c4dcf4SKowalski, Kamil  * See header file for more information
1443f4c4dcf4SKowalski, Kamil  * @endinternal
1444f4c4dcf4SKowalski, Kamil  */
1445f12894f8SJason M. Bills void resourceExhaustion(crow::Response& res, const std::string& arg1)
14461abe55efSEd Tanous {
1447f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1448f12894f8SJason M. Bills     addMessageToErrorJson(
1449f12894f8SJason M. Bills         res.jsonValue,
1450f12894f8SJason M. Bills         nlohmann::json{
1451f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1452cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceExhaustion"},
1453d425c6f6SEd Tanous             {"Message", "The resource " + arg1 +
145466ac2b8cSJason M. Bills                             " was unable to satisfy the request due to "
145566ac2b8cSJason M. Bills                             "unavailability of resources."},
1456*85659adfSJason M. Bills             {"MessageArgs", {arg1}},
1457f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1458f12894f8SJason M. Bills             {"Resolution", "Ensure that the resources are available and "
1459f12894f8SJason M. Bills                            "resubmit the request."}});
1460f4c4dcf4SKowalski, Kamil }
1461f4c4dcf4SKowalski, Kamil 
1462f4c4dcf4SKowalski, Kamil /**
1463f4c4dcf4SKowalski, Kamil  * @internal
1464f4c4dcf4SKowalski, Kamil  * @brief Formats AccountModified message into JSON
1465f4c4dcf4SKowalski, Kamil  *
1466f4c4dcf4SKowalski, Kamil  * See header file for more information
1467f4c4dcf4SKowalski, Kamil  * @endinternal
1468f4c4dcf4SKowalski, Kamil  */
1469a08b46ccSJason M. Bills void accountModified(crow::Response& res)
14701abe55efSEd Tanous {
1471f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1472a08b46ccSJason M. Bills     addMessageToErrorJson(
1473f12894f8SJason M. Bills         res.jsonValue,
1474f12894f8SJason M. Bills         nlohmann::json{
1475f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1476cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccountModified"},
1477f4c4dcf4SKowalski, Kamil             {"Message", "The account was successfully modified."},
1478*85659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1479f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1480a08b46ccSJason M. Bills             {"Resolution", "No resolution is required."}});
1481f4c4dcf4SKowalski, Kamil }
1482f4c4dcf4SKowalski, Kamil 
1483f4c4dcf4SKowalski, Kamil /**
1484f4c4dcf4SKowalski, Kamil  * @internal
1485f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterOutOfRange message into JSON
1486f4c4dcf4SKowalski, Kamil  *
1487f4c4dcf4SKowalski, Kamil  * See header file for more information
1488f4c4dcf4SKowalski, Kamil  * @endinternal
1489f4c4dcf4SKowalski, Kamil  */
1490f12894f8SJason M. Bills void queryParameterOutOfRange(crow::Response& res, const std::string& arg1,
1491f12894f8SJason M. Bills                               const std::string& arg2, const std::string& arg3)
14921abe55efSEd Tanous {
1493f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1494f12894f8SJason M. Bills     addMessageToErrorJson(
1495f12894f8SJason M. Bills         res.jsonValue,
1496f12894f8SJason M. Bills         nlohmann::json{
1497f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1498cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryParameterOutOfRange"},
1499f12894f8SJason M. Bills             {"Message", "The value " + arg1 + " for the query parameter " +
1500f12894f8SJason M. Bills                             arg2 + " is out of range " + arg3 + "."},
1501*85659adfSJason M. Bills             {"MessageArgs", {arg1, arg2, arg3}},
1502f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1503f4c4dcf4SKowalski, Kamil             {"Resolution",
1504f12894f8SJason M. Bills              "Reduce the value for the query parameter to a value that is "
150566ac2b8cSJason M. Bills              "within range, such as a start or count value that is within "
150666ac2b8cSJason M. Bills              "bounds of the number of resources in a collection or a page that "
150766ac2b8cSJason M. Bills              "is within the range of valid pages."}});
1508f4c4dcf4SKowalski, Kamil }
1509f4c4dcf4SKowalski, Kamil 
1510f4c4dcf4SKowalski, Kamil } // namespace messages
1511f4c4dcf4SKowalski, Kamil 
1512d425c6f6SEd Tanous } // namespace redfish
1513