xref: /openbmc/bmcweb/features/redfish/src/error_messages.cpp (revision cc9139ec3fe5e354d046d5e00f33a5e97426924e)
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";
61*cc9139ecSJason M. Bills         error["message"] = "A general error has occurred. See Resolution for "
62*cc9139ecSJason 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 {
93d425c6f6SEd Tanous     nlohmann::json_pointer<nlohmann::json> extendedInfo(
9455c7b7a2SEd Tanous         fieldPath + messages::messageAnnotation);
95f4c4dcf4SKowalski, Kamil 
961abe55efSEd Tanous     if (!target[extendedInfo].is_array())
971abe55efSEd Tanous     {
98f4c4dcf4SKowalski, Kamil         // Force object to be an array
99f4c4dcf4SKowalski, Kamil         target[extendedInfo] = nlohmann::json::array();
100f4c4dcf4SKowalski, Kamil     }
101f4c4dcf4SKowalski, Kamil 
102f4c4dcf4SKowalski, Kamil     // Object exists and it is an array so we can just push in the message
103f4c4dcf4SKowalski, Kamil     target[extendedInfo].push_back(message);
104f4c4dcf4SKowalski, Kamil }
105f4c4dcf4SKowalski, Kamil 
106f4c4dcf4SKowalski, Kamil /**
107f4c4dcf4SKowalski, Kamil  * @internal
108f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceInUse message into JSON
109f4c4dcf4SKowalski, Kamil  *
110f4c4dcf4SKowalski, Kamil  * See header file for more information
111f4c4dcf4SKowalski, Kamil  * @endinternal
112f4c4dcf4SKowalski, Kamil  */
113f12894f8SJason M. Bills void resourceInUse(crow::Response& res)
1141abe55efSEd Tanous {
115f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
116f12894f8SJason M. Bills     addMessageToErrorJson(
117f12894f8SJason M. Bills         res.jsonValue,
118f12894f8SJason M. Bills         nlohmann::json{
119f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
120*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceInUse"},
12166ac2b8cSJason M. Bills             {"Message", "The change to the requested resource failed because "
12266ac2b8cSJason M. Bills                         "the resource is in use or in transition."},
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"},
142*cc9139ecSJason 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."},
145f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1461abe55efSEd Tanous             {"Resolution", "Ensure that the request body is valid JSON and "
147f12894f8SJason M. Bills                            "resubmit the request."}});
148f4c4dcf4SKowalski, Kamil }
149f4c4dcf4SKowalski, Kamil 
150f4c4dcf4SKowalski, Kamil /**
151f4c4dcf4SKowalski, Kamil  * @internal
152f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceMissingAtURI message into JSON
153f4c4dcf4SKowalski, Kamil  *
154f4c4dcf4SKowalski, Kamil  * See header file for more information
155f4c4dcf4SKowalski, Kamil  * @endinternal
156f4c4dcf4SKowalski, Kamil  */
157f12894f8SJason M. Bills void resourceMissingAtURI(crow::Response& res, const std::string& arg1)
1581abe55efSEd Tanous {
159f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
160f12894f8SJason M. Bills     addMessageToErrorJson(
161f12894f8SJason M. Bills         res.jsonValue,
162f12894f8SJason M. Bills         nlohmann::json{
163f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
164*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceMissingAtURI"},
165f4c4dcf4SKowalski, Kamil             {"Message", "The resource at the URI " + arg1 + " was not found."},
166f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
16766ac2b8cSJason M. Bills             {"Resolution", "Place a valid resource at the URI or correct the "
16866ac2b8cSJason M. Bills                            "URI and resubmit the request."}});
169f4c4dcf4SKowalski, Kamil }
170f4c4dcf4SKowalski, Kamil 
171f4c4dcf4SKowalski, Kamil /**
172f4c4dcf4SKowalski, Kamil  * @internal
173f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterValueFormatError message into JSON
174f4c4dcf4SKowalski, Kamil  *
175f4c4dcf4SKowalski, Kamil  * See header file for more information
176f4c4dcf4SKowalski, Kamil  * @endinternal
177f4c4dcf4SKowalski, Kamil  */
178f12894f8SJason M. Bills void actionParameterValueFormatError(crow::Response& res,
179f12894f8SJason M. Bills                                      const std::string& arg1,
180f4c4dcf4SKowalski, Kamil                                      const std::string& arg2,
1811abe55efSEd Tanous                                      const std::string& arg3)
1821abe55efSEd Tanous {
183f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
184f12894f8SJason M. Bills     addMessageToErrorJson(
185f12894f8SJason M. Bills         res.jsonValue,
186f12894f8SJason M. Bills         nlohmann::json{
187f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
188*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterValueFormatError"},
189f4c4dcf4SKowalski, Kamil             {"Message",
1901abe55efSEd Tanous              "The value " + arg1 + " for the parameter " + arg2 +
1911abe55efSEd Tanous                  " in the action " + arg3 +
1921abe55efSEd Tanous                  " is of a different format than the parameter can accept."},
193f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
19466ac2b8cSJason M. Bills             {"Resolution",
19566ac2b8cSJason M. Bills              "Correct the value for the parameter in the request body and "
19666ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
197f4c4dcf4SKowalski, Kamil }
198f4c4dcf4SKowalski, Kamil 
199f4c4dcf4SKowalski, Kamil /**
200f4c4dcf4SKowalski, Kamil  * @internal
201f4c4dcf4SKowalski, Kamil  * @brief Formats InternalError message into JSON
202f4c4dcf4SKowalski, Kamil  *
203f4c4dcf4SKowalski, Kamil  * See header file for more information
204f4c4dcf4SKowalski, Kamil  * @endinternal
205f4c4dcf4SKowalski, Kamil  */
206f12894f8SJason M. Bills void internalError(crow::Response& res)
2071abe55efSEd Tanous {
208f12894f8SJason M. Bills     res.result(boost::beast::http::status::internal_server_error);
209f12894f8SJason M. Bills     addMessageToErrorJson(
210f12894f8SJason M. Bills         res.jsonValue,
211f12894f8SJason M. Bills         nlohmann::json{
212f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
213*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InternalError"},
214f12894f8SJason M. Bills             {"Message", "The request failed due to an internal service error.  "
21566ac2b8cSJason M. Bills                         "The service is still operational."},
216f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
2171abe55efSEd Tanous             {"Resolution", "Resubmit the request.  If the problem persists, "
21866ac2b8cSJason M. Bills                            "consider resetting the service."}});
219f12894f8SJason M. Bills }
220f12894f8SJason M. Bills 
221f12894f8SJason M. Bills /**
222f12894f8SJason M. Bills  * @internal
223f12894f8SJason M. Bills  * @brief Formats InternalError message into JSON for the specified field
224f12894f8SJason M. Bills  *
225f12894f8SJason M. Bills  * See header file for more information
226f12894f8SJason M. Bills  * @endinternal
227f12894f8SJason M. Bills  */
228f12894f8SJason M. Bills void internalError(crow::Response& res, const std::string& field)
229f12894f8SJason M. Bills {
230f12894f8SJason M. Bills     res.result(boost::beast::http::status::internal_server_error);
231f12894f8SJason M. Bills     addMessageToJson(
232f12894f8SJason M. Bills         res.jsonValue,
233f12894f8SJason M. Bills         nlohmann::json{
234f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
235*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InternalError"},
236f12894f8SJason M. Bills             {"Message", "The request failed due to an internal service error.  "
23766ac2b8cSJason M. Bills                         "The service is still operational."},
238f12894f8SJason M. Bills             {"Severity", "Critical"},
239f12894f8SJason M. Bills             {"Resolution", "Resubmit the request.  If the problem persists, "
24066ac2b8cSJason M. Bills                            "consider resetting the service."}},
241f12894f8SJason M. Bills         field);
242f4c4dcf4SKowalski, Kamil }
243f4c4dcf4SKowalski, Kamil 
244f4c4dcf4SKowalski, Kamil /**
245f4c4dcf4SKowalski, Kamil  * @internal
246f4c4dcf4SKowalski, Kamil  * @brief Formats UnrecognizedRequestBody message into JSON
247f4c4dcf4SKowalski, Kamil  *
248f4c4dcf4SKowalski, Kamil  * See header file for more information
249f4c4dcf4SKowalski, Kamil  * @endinternal
250f4c4dcf4SKowalski, Kamil  */
251f12894f8SJason M. Bills void unrecognizedRequestBody(crow::Response& res)
2521abe55efSEd Tanous {
253f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
254f12894f8SJason M. Bills     addMessageToErrorJson(
255f12894f8SJason M. Bills         res.jsonValue,
256f12894f8SJason M. Bills         nlohmann::json{
257f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
258*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.UnrecognizedRequestBody"},
259f12894f8SJason M. Bills             {"Message", "The service detected a malformed request body that it "
26066ac2b8cSJason M. Bills                         "was unable to interpret."},
261f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
262f12894f8SJason M. Bills             {"Resolution", "Correct the request body and resubmit the request "
263f12894f8SJason M. Bills                            "if it failed."}});
264f4c4dcf4SKowalski, Kamil }
265f4c4dcf4SKowalski, Kamil 
266f4c4dcf4SKowalski, Kamil /**
267f4c4dcf4SKowalski, Kamil  * @internal
268f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceAtUriUnauthorized message into JSON
269f4c4dcf4SKowalski, Kamil  *
270f4c4dcf4SKowalski, Kamil  * See header file for more information
271f4c4dcf4SKowalski, Kamil  * @endinternal
272f4c4dcf4SKowalski, Kamil  */
273f12894f8SJason M. Bills void resourceAtUriUnauthorized(crow::Response& res, const std::string& arg1,
2741abe55efSEd Tanous                                const std::string& arg2)
2751abe55efSEd Tanous {
276f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
277f12894f8SJason M. Bills     addMessageToErrorJson(
278f12894f8SJason M. Bills         res.jsonValue,
279f12894f8SJason M. Bills         nlohmann::json{
280f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
281*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceAtUriUnauthorized"},
282f4c4dcf4SKowalski, Kamil             {"Message", "While accessing the resource at " + arg1 +
2831abe55efSEd Tanous                             ", the service received an authorization error " +
2841abe55efSEd Tanous                             arg2 + "."},
285f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
286f12894f8SJason M. Bills             {"Resolution", "Ensure that the appropriate access is provided for "
28766ac2b8cSJason M. Bills                            "the service in order for it to access the URI."}});
288f4c4dcf4SKowalski, Kamil }
289f4c4dcf4SKowalski, Kamil 
290f4c4dcf4SKowalski, Kamil /**
291f4c4dcf4SKowalski, Kamil  * @internal
292f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterUnknown message into JSON
293f4c4dcf4SKowalski, Kamil  *
294f4c4dcf4SKowalski, Kamil  * See header file for more information
295f4c4dcf4SKowalski, Kamil  * @endinternal
296f4c4dcf4SKowalski, Kamil  */
297f12894f8SJason M. Bills void actionParameterUnknown(crow::Response& res, const std::string& arg1,
2981abe55efSEd Tanous                             const std::string& arg2)
2991abe55efSEd Tanous {
300f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
301f12894f8SJason M. Bills     addMessageToErrorJson(
302f12894f8SJason M. Bills         res.jsonValue,
303f12894f8SJason M. Bills         nlohmann::json{
304f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
305*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterUnknown"},
306f4c4dcf4SKowalski, Kamil             {"Message", "The action " + arg1 +
307f12894f8SJason M. Bills                             " was submitted with the invalid parameter " +
308f12894f8SJason M. Bills                             arg2 + "."},
309f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
31066ac2b8cSJason M. Bills             {"Resolution", "Correct the invalid parameter and resubmit the "
31166ac2b8cSJason M. Bills                            "request if the operation failed."}});
312f4c4dcf4SKowalski, Kamil }
313f4c4dcf4SKowalski, Kamil 
314f4c4dcf4SKowalski, Kamil /**
315f4c4dcf4SKowalski, Kamil  * @internal
316f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceCannotBeDeleted message into JSON
317f4c4dcf4SKowalski, Kamil  *
318f4c4dcf4SKowalski, Kamil  * See header file for more information
319f4c4dcf4SKowalski, Kamil  * @endinternal
320f4c4dcf4SKowalski, Kamil  */
321f12894f8SJason M. Bills void resourceCannotBeDeleted(crow::Response& res)
3221abe55efSEd Tanous {
323f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
324f12894f8SJason M. Bills     addMessageToErrorJson(
325f12894f8SJason M. Bills         res.jsonValue,
326f12894f8SJason M. Bills         nlohmann::json{
327f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
328*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceCannotBeDeleted"},
329f12894f8SJason M. Bills             {"Message", "The delete request failed because the resource "
33066ac2b8cSJason M. Bills                         "requested cannot be deleted."},
331f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
332f12894f8SJason M. Bills             {"Resolution",
333f12894f8SJason M. Bills              "Do not attempt to delete a non-deletable resource."}});
334f4c4dcf4SKowalski, Kamil }
335f4c4dcf4SKowalski, Kamil 
336f4c4dcf4SKowalski, Kamil /**
337f4c4dcf4SKowalski, Kamil  * @internal
338f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyDuplicate message into JSON
339f4c4dcf4SKowalski, Kamil  *
340f4c4dcf4SKowalski, Kamil  * See header file for more information
341f4c4dcf4SKowalski, Kamil  * @endinternal
342f4c4dcf4SKowalski, Kamil  */
343f12894f8SJason M. Bills void propertyDuplicate(crow::Response& res, const std::string& arg1)
3441abe55efSEd Tanous {
345f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
346f12894f8SJason M. Bills     addMessageToErrorJson(
347f12894f8SJason M. Bills         res.jsonValue,
348f12894f8SJason M. Bills         nlohmann::json{
349f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
350*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyDuplicate"},
351f12894f8SJason M. Bills             {"Message",
352f12894f8SJason M. Bills              "The property " + arg1 + " was duplicated in the request."},
353f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
35466ac2b8cSJason M. Bills             {"Resolution",
35566ac2b8cSJason M. Bills              "Remove the duplicate property from the request body and resubmit "
35666ac2b8cSJason M. Bills              "the request if the operation failed."}});
357f4c4dcf4SKowalski, Kamil }
358f4c4dcf4SKowalski, Kamil 
359f4c4dcf4SKowalski, Kamil /**
360f4c4dcf4SKowalski, Kamil  * @internal
361f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceTemporarilyUnavailable message into JSON
362f4c4dcf4SKowalski, Kamil  *
363f4c4dcf4SKowalski, Kamil  * See header file for more information
364f4c4dcf4SKowalski, Kamil  * @endinternal
365f4c4dcf4SKowalski, Kamil  */
366f12894f8SJason M. Bills void serviceTemporarilyUnavailable(crow::Response& res, const std::string& arg1)
3671abe55efSEd Tanous {
368f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
369f12894f8SJason M. Bills     addMessageToErrorJson(
370f12894f8SJason M. Bills         res.jsonValue,
371f12894f8SJason M. Bills         nlohmann::json{
372f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
373*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ServiceTemporarilyUnavailable"},
3741abe55efSEd Tanous             {"Message", "The service is temporarily unavailable.  Retry in " +
3751abe55efSEd Tanous                             arg1 + " seconds."},
376f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
377f12894f8SJason M. Bills             {"Resolution", "Wait for the indicated retry duration and retry "
378f12894f8SJason M. Bills                            "the operation."}});
379f4c4dcf4SKowalski, Kamil }
380f4c4dcf4SKowalski, Kamil 
381f4c4dcf4SKowalski, Kamil /**
382f4c4dcf4SKowalski, Kamil  * @internal
383f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceAlreadyExists message into JSON
384f4c4dcf4SKowalski, Kamil  *
385f4c4dcf4SKowalski, Kamil  * See header file for more information
386f4c4dcf4SKowalski, Kamil  * @endinternal
387f4c4dcf4SKowalski, Kamil  */
388f12894f8SJason M. Bills void resourceAlreadyExists(crow::Response& res, const std::string& arg1,
389f12894f8SJason M. Bills                            const std::string& arg2, const std::string& arg3)
3901abe55efSEd Tanous {
391f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
392f12894f8SJason M. Bills     addMessageToErrorJson(
393f12894f8SJason M. Bills         res.jsonValue,
394f12894f8SJason M. Bills         nlohmann::json{
395f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
396*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceAlreadyExists"},
397f4c4dcf4SKowalski, Kamil             {"Message", "The requested resource of type " + arg1 +
3981abe55efSEd Tanous                             " with the property " + arg2 + " with the value " +
3991abe55efSEd Tanous                             arg3 + " already exists."},
400f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
401f12894f8SJason M. Bills             {"Resolution", "Do not repeat the create operation as the resource "
40266ac2b8cSJason M. Bills                            "has already been created."}});
403f4c4dcf4SKowalski, Kamil }
404f4c4dcf4SKowalski, Kamil 
405f4c4dcf4SKowalski, Kamil /**
406f4c4dcf4SKowalski, Kamil  * @internal
407f4c4dcf4SKowalski, Kamil  * @brief Formats AccountForSessionNoLongerExists message into JSON
408f4c4dcf4SKowalski, Kamil  *
409f4c4dcf4SKowalski, Kamil  * See header file for more information
410f4c4dcf4SKowalski, Kamil  * @endinternal
411f4c4dcf4SKowalski, Kamil  */
412f12894f8SJason M. Bills void accountForSessionNoLongerExists(crow::Response& res,
413f12894f8SJason M. Bills                                      const std::string& fieldPath)
4141abe55efSEd Tanous {
415f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
416f12894f8SJason M. Bills     addMessageToJson(
417f12894f8SJason M. Bills         res.jsonValue,
418f12894f8SJason M. Bills         nlohmann::json{
419f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
420*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccountForSessionNoLongerExists"},
4211abe55efSEd Tanous             {"Message", "The account for the current session has been removed, "
42266ac2b8cSJason M. Bills                         "thus the current session has been removed as well."},
423f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
424f12894f8SJason M. Bills             {"Resolution", "Attempt to connect with a valid account."}},
425f12894f8SJason M. Bills         fieldPath);
426f4c4dcf4SKowalski, Kamil }
427f4c4dcf4SKowalski, Kamil 
428f4c4dcf4SKowalski, Kamil /**
429f4c4dcf4SKowalski, Kamil  * @internal
430f4c4dcf4SKowalski, Kamil  * @brief Formats CreateFailedMissingReqProperties message into JSON
431f4c4dcf4SKowalski, Kamil  *
432f4c4dcf4SKowalski, Kamil  * See header file for more information
433f4c4dcf4SKowalski, Kamil  * @endinternal
434f4c4dcf4SKowalski, Kamil  */
435f12894f8SJason M. Bills void createFailedMissingReqProperties(crow::Response& res,
436f12894f8SJason M. Bills                                       const std::string& arg1)
4371abe55efSEd Tanous {
438f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
439f12894f8SJason M. Bills     addMessageToErrorJson(
440f12894f8SJason M. Bills         res.jsonValue,
441f12894f8SJason M. Bills         nlohmann::json{
442f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
443*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.CreateFailedMissingReqProperties"},
4441abe55efSEd Tanous             {"Message",
445f12894f8SJason M. Bills              "The create operation failed because the required property " +
446f12894f8SJason M. Bills                  arg1 + " was missing from the request."},
447f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
448f4c4dcf4SKowalski, Kamil             {"Resolution",
449f12894f8SJason M. Bills              "Correct the body to include the required property with a valid "
45066ac2b8cSJason M. Bills              "value and resubmit the request if the operation failed."}});
451f4c4dcf4SKowalski, Kamil }
452f4c4dcf4SKowalski, Kamil 
453f4c4dcf4SKowalski, Kamil /**
454f4c4dcf4SKowalski, Kamil  * @internal
455f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyValueFormatError message into JSON
456f4c4dcf4SKowalski, Kamil  *
457f4c4dcf4SKowalski, Kamil  * See header file for more information
458f4c4dcf4SKowalski, Kamil  * @endinternal
459f4c4dcf4SKowalski, Kamil  */
460f12894f8SJason M. Bills void propertyValueFormatError(crow::Response& res, const std::string& arg1,
4611abe55efSEd Tanous                               const std::string& arg2)
4621abe55efSEd Tanous {
463f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
464f12894f8SJason M. Bills     addMessageToErrorJson(
465f12894f8SJason M. Bills         res.jsonValue,
466f12894f8SJason M. Bills         nlohmann::json{
467f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
468*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueFormatError"},
469f4c4dcf4SKowalski, Kamil             {"Message",
470f4c4dcf4SKowalski, Kamil              "The value " + arg1 + " for the property " + arg2 +
471f4c4dcf4SKowalski, Kamil                  " is of a different format than the property can accept."},
472f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
47366ac2b8cSJason M. Bills             {"Resolution",
47466ac2b8cSJason M. Bills              "Correct the value for the property in the request body and "
47566ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
476f12894f8SJason M. Bills }
477f12894f8SJason M. Bills 
478f12894f8SJason M. Bills /**
479f12894f8SJason M. Bills  * @internal
480f12894f8SJason M. Bills  * @brief Formats PropertyValueFormatError message into JSON for the specified
481f12894f8SJason M. Bills  * property
482f12894f8SJason M. Bills  *
483f12894f8SJason M. Bills  * See header file for more information
484f12894f8SJason M. Bills  * @endinternal
485f12894f8SJason M. Bills  */
486f12894f8SJason M. Bills void propertyValueFormatError(crow::Response& res, const std::string& arg1,
487f12894f8SJason M. Bills                               const std::string& arg2,
488f12894f8SJason M. Bills                               const std::string property)
489f12894f8SJason M. Bills {
490f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
491f12894f8SJason M. Bills     addMessageToJson(
492f12894f8SJason M. Bills         res.jsonValue,
493f12894f8SJason M. Bills         nlohmann::json{
494f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
495*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueFormatError"},
496f12894f8SJason M. Bills             {"Message",
497f12894f8SJason M. Bills              "The value " + arg1 + " for the property " + arg2 +
498f12894f8SJason M. Bills                  " is of a different format than the property can accept."},
499f12894f8SJason M. Bills             {"Severity", "Warning"},
50066ac2b8cSJason M. Bills             {"Resolution",
50166ac2b8cSJason M. Bills              "Correct the value for the property in the request body and "
50266ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}},
503f12894f8SJason M. Bills         property);
504f4c4dcf4SKowalski, Kamil }
505f4c4dcf4SKowalski, Kamil 
506f4c4dcf4SKowalski, Kamil /**
507f4c4dcf4SKowalski, Kamil  * @internal
508f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyValueNotInList message into JSON
509f4c4dcf4SKowalski, Kamil  *
510f4c4dcf4SKowalski, Kamil  * See header file for more information
511f4c4dcf4SKowalski, Kamil  * @endinternal
512f4c4dcf4SKowalski, Kamil  */
513f12894f8SJason M. Bills void propertyValueNotInList(crow::Response& res, const std::string& arg1,
5141abe55efSEd Tanous                             const std::string& arg2)
5151abe55efSEd Tanous {
516f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
517f12894f8SJason M. Bills     addMessageToErrorJson(
518f12894f8SJason M. Bills         res.jsonValue,
519f12894f8SJason M. Bills         nlohmann::json{
520f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
521*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueNotInList"},
522f4c4dcf4SKowalski, Kamil             {"Message", "The value " + arg1 + " for the property " + arg2 +
523f4c4dcf4SKowalski, Kamil                             " is not in the list of acceptable values."},
524f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
525f4c4dcf4SKowalski, Kamil             {"Resolution",
526f12894f8SJason M. Bills              "Choose a value from the enumeration list that the implementation "
52766ac2b8cSJason M. Bills              "can support and resubmit the request if the operation failed."}});
528f12894f8SJason M. Bills }
529f12894f8SJason M. Bills 
530f12894f8SJason M. Bills /**
531f12894f8SJason M. Bills  * @internal
532f12894f8SJason M. Bills  * @brief Formats PropertyValueNotInList message into JSON for the specified
533f12894f8SJason M. Bills  * property
534f12894f8SJason M. Bills  *
535f12894f8SJason M. Bills  * See header file for more information
536f12894f8SJason M. Bills  * @endinternal
537f12894f8SJason M. Bills  */
538f12894f8SJason M. Bills void propertyValueNotInList(crow::Response& res, const std::string& arg1,
539f12894f8SJason M. Bills                             const std::string& arg2, const std::string property)
540f12894f8SJason M. Bills {
541f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
542f12894f8SJason M. Bills     addMessageToJson(
543f12894f8SJason M. Bills         res.jsonValue,
544f12894f8SJason M. Bills         nlohmann::json{
545f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
546*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueNotInList"},
547f12894f8SJason M. Bills             {"Message", "The value " + arg1 + " for the property " + arg2 +
548f12894f8SJason M. Bills                             " is not in the list of acceptable values."},
549f12894f8SJason M. Bills             {"Severity", "Warning"},
550f12894f8SJason M. Bills             {"Resolution",
551f12894f8SJason M. Bills              "Choose a value from the enumeration list that the implementation "
55266ac2b8cSJason M. Bills              "can support and resubmit the request if the operation failed."}},
553f12894f8SJason M. Bills         property);
554f4c4dcf4SKowalski, Kamil }
555f4c4dcf4SKowalski, Kamil 
556f4c4dcf4SKowalski, Kamil /**
557f4c4dcf4SKowalski, Kamil  * @internal
558f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceAtUriInUnknownFormat message into JSON
559f4c4dcf4SKowalski, Kamil  *
560f4c4dcf4SKowalski, Kamil  * See header file for more information
561f4c4dcf4SKowalski, Kamil  * @endinternal
562f4c4dcf4SKowalski, Kamil  */
563f12894f8SJason M. Bills void resourceAtUriInUnknownFormat(crow::Response& res, const std::string& arg1)
5641abe55efSEd Tanous {
565f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
566f12894f8SJason M. Bills     addMessageToErrorJson(
567f12894f8SJason M. Bills         res.jsonValue,
568f12894f8SJason M. Bills         nlohmann::json{
569f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
570*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceAtUriInUnknownFormat"},
571f4c4dcf4SKowalski, Kamil             {"Message", "The resource at " + arg1 +
572f4c4dcf4SKowalski, Kamil                             " is in a format not recognized by the service."},
573f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
574f12894f8SJason M. Bills             {"Resolution", "Place an image or resource or file that is "
57566ac2b8cSJason M. Bills                            "recognized by the service at the URI."}});
576f4c4dcf4SKowalski, Kamil }
577f4c4dcf4SKowalski, Kamil 
578f4c4dcf4SKowalski, Kamil /**
579f4c4dcf4SKowalski, Kamil  * @internal
580f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceInUnknownState message into JSON
581f4c4dcf4SKowalski, Kamil  *
582f4c4dcf4SKowalski, Kamil  * See header file for more information
583f4c4dcf4SKowalski, Kamil  * @endinternal
584f4c4dcf4SKowalski, Kamil  */
585f12894f8SJason M. Bills void serviceInUnknownState(crow::Response& res)
5861abe55efSEd Tanous {
587f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
588f12894f8SJason M. Bills     addMessageToErrorJson(
589f12894f8SJason M. Bills         res.jsonValue,
590f12894f8SJason M. Bills         nlohmann::json{
591f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
592*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ServiceInUnknownState"},
59366ac2b8cSJason M. Bills             {"Message",
59466ac2b8cSJason M. Bills              "The operation failed because the service is in an unknown state "
59566ac2b8cSJason M. Bills              "and can no longer take incoming requests."},
596f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
59766ac2b8cSJason M. Bills             {"Resolution", "Restart the service and resubmit the request if "
59866ac2b8cSJason M. Bills                            "the operation failed."}});
599f4c4dcf4SKowalski, Kamil }
600f4c4dcf4SKowalski, Kamil 
601f4c4dcf4SKowalski, Kamil /**
602f4c4dcf4SKowalski, Kamil  * @internal
603f4c4dcf4SKowalski, Kamil  * @brief Formats EventSubscriptionLimitExceeded message into JSON
604f4c4dcf4SKowalski, Kamil  *
605f4c4dcf4SKowalski, Kamil  * See header file for more information
606f4c4dcf4SKowalski, Kamil  * @endinternal
607f4c4dcf4SKowalski, Kamil  */
608f12894f8SJason M. Bills void eventSubscriptionLimitExceeded(crow::Response& res)
6091abe55efSEd Tanous {
610f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
611f12894f8SJason M. Bills     addMessageToErrorJson(
612f12894f8SJason M. Bills         res.jsonValue,
613f12894f8SJason M. Bills         nlohmann::json{
614f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
615*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.EventSubscriptionLimitExceeded"},
616f4c4dcf4SKowalski, Kamil             {"Message",
617f4c4dcf4SKowalski, Kamil              "The event subscription failed due to the number of simultaneous "
618f4c4dcf4SKowalski, Kamil              "subscriptions exceeding the limit of the implementation."},
619f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
620f4c4dcf4SKowalski, Kamil             {"Resolution",
621f12894f8SJason M. Bills              "Reduce the number of other subscriptions before trying to "
62266ac2b8cSJason M. Bills              "establish the event subscription or increase the limit of "
62366ac2b8cSJason M. Bills              "simultaneous subscriptions (if supported)."}});
624f4c4dcf4SKowalski, Kamil }
625f4c4dcf4SKowalski, Kamil 
626f4c4dcf4SKowalski, Kamil /**
627f4c4dcf4SKowalski, Kamil  * @internal
628f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterMissing message into JSON
629f4c4dcf4SKowalski, Kamil  *
630f4c4dcf4SKowalski, Kamil  * See header file for more information
631f4c4dcf4SKowalski, Kamil  * @endinternal
632f4c4dcf4SKowalski, Kamil  */
633f12894f8SJason M. Bills void actionParameterMissing(crow::Response& res, const std::string& arg1,
6341abe55efSEd Tanous                             const std::string& arg2)
6351abe55efSEd Tanous {
636f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
637f12894f8SJason M. Bills     addMessageToErrorJson(
638f12894f8SJason M. Bills         res.jsonValue,
639f12894f8SJason M. Bills         nlohmann::json{
640f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
641*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterMissing"},
642f12894f8SJason M. Bills             {"Message", "The action " + arg1 + " requires the parameter " +
643f12894f8SJason M. Bills                             arg2 + " to be present in the request body."},
644f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
645f12894f8SJason M. Bills             {"Resolution",
64666ac2b8cSJason M. Bills              "Supply the action with the required parameter in the request "
64766ac2b8cSJason M. Bills              "body when the request is resubmitted."}});
648f4c4dcf4SKowalski, Kamil }
649f4c4dcf4SKowalski, Kamil 
650f4c4dcf4SKowalski, Kamil /**
651f4c4dcf4SKowalski, Kamil  * @internal
652f4c4dcf4SKowalski, Kamil  * @brief Formats StringValueTooLong message into JSON
653f4c4dcf4SKowalski, Kamil  *
654f4c4dcf4SKowalski, Kamil  * See header file for more information
655f4c4dcf4SKowalski, Kamil  * @endinternal
656f4c4dcf4SKowalski, Kamil  */
657f12894f8SJason M. Bills void stringValueTooLong(crow::Response& res, const std::string& arg1,
658f12894f8SJason M. Bills                         const int& arg2)
6591abe55efSEd Tanous {
660f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
661f12894f8SJason M. Bills     addMessageToErrorJson(
662f12894f8SJason M. Bills         res.jsonValue,
663f12894f8SJason M. Bills         nlohmann::json{
664f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
665*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.StringValueTooLong"},
666f4c4dcf4SKowalski, Kamil             {"Message", "The string " + arg1 + " exceeds the length limit " +
667f4c4dcf4SKowalski, Kamil                             std::to_string(arg2) + "."},
668f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
669f4c4dcf4SKowalski, Kamil             {"Resolution",
670f12894f8SJason M. Bills              "Resubmit the request with an appropriate string length."}});
671f4c4dcf4SKowalski, Kamil }
672f4c4dcf4SKowalski, Kamil 
673f4c4dcf4SKowalski, Kamil /**
674f4c4dcf4SKowalski, Kamil  * @internal
675*cc9139ecSJason M. Bills  * @brief Formats SessionTerminated message into JSON
676*cc9139ecSJason M. Bills  *
677*cc9139ecSJason M. Bills  * See header file for more information
678*cc9139ecSJason M. Bills  * @endinternal
679*cc9139ecSJason M. Bills  */
680*cc9139ecSJason M. Bills void sessionTerminated(crow::Response& res)
681*cc9139ecSJason M. Bills {
682*cc9139ecSJason M. Bills     res.result(boost::beast::http::status::ok);
683*cc9139ecSJason M. Bills     addMessageToJsonRoot(
684*cc9139ecSJason M. Bills         res.jsonValue,
685*cc9139ecSJason M. Bills         nlohmann::json{
686*cc9139ecSJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
687*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.SessionTerminated"},
688*cc9139ecSJason M. Bills             {"Message", "The session was successfully terminated."},
689*cc9139ecSJason M. Bills             {"Severity", "OK"},
690*cc9139ecSJason M. Bills             {"Resolution", "No resolution is required."}});
691*cc9139ecSJason M. Bills }
692*cc9139ecSJason M. Bills 
693*cc9139ecSJason M. Bills /**
694*cc9139ecSJason M. Bills  * @internal
695*cc9139ecSJason M. Bills  * @brief Formats ResourceTypeIncompatible message into JSON
696*cc9139ecSJason M. Bills  *
697*cc9139ecSJason M. Bills  * See header file for more information
698*cc9139ecSJason M. Bills  * @endinternal
699*cc9139ecSJason M. Bills  */
700*cc9139ecSJason M. Bills void resourceTypeIncompatible(crow::Response& res, const std::string& arg1,
701*cc9139ecSJason M. Bills                               const std::string& arg2)
702*cc9139ecSJason M. Bills {
703*cc9139ecSJason M. Bills     res.result(boost::beast::http::status::bad_request);
704*cc9139ecSJason M. Bills     addMessageToErrorJson(
705*cc9139ecSJason M. Bills         res.jsonValue,
706*cc9139ecSJason M. Bills         nlohmann::json{
707*cc9139ecSJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
708*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceTypeIncompatible"},
709*cc9139ecSJason M. Bills             {"Message", "The @odata.type of the request body " + arg1 +
710*cc9139ecSJason M. Bills                             " is incompatible with the @odata.type of the "
711*cc9139ecSJason M. Bills                             "resource which is " +
712*cc9139ecSJason M. Bills                             arg2 + "."},
713*cc9139ecSJason M. Bills             {"Severity", "Critical"},
714*cc9139ecSJason M. Bills             {"Resolution", "Resubmit the request with a payload compatible "
715*cc9139ecSJason M. Bills                            "with the resource's schema."}});
716*cc9139ecSJason M. Bills }
717*cc9139ecSJason M. Bills 
718*cc9139ecSJason M. Bills /**
719*cc9139ecSJason M. Bills  * @internal
720f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyValueTypeError message into JSON
721f4c4dcf4SKowalski, Kamil  *
722f4c4dcf4SKowalski, Kamil  * See header file for more information
723f4c4dcf4SKowalski, Kamil  * @endinternal
724f4c4dcf4SKowalski, Kamil  */
725f12894f8SJason M. Bills void propertyValueTypeError(crow::Response& res, const std::string& arg1,
7261abe55efSEd Tanous                             const std::string& arg2)
7271abe55efSEd Tanous {
728f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
729f12894f8SJason M. Bills     addMessageToErrorJson(
730f12894f8SJason M. Bills         res.jsonValue,
731f12894f8SJason M. Bills         nlohmann::json{
732f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
733*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueTypeError"},
7341abe55efSEd Tanous             {"Message",
7351abe55efSEd Tanous              "The value " + arg1 + " for the property " + arg2 +
736f4c4dcf4SKowalski, Kamil                  " is of a different type than the property can accept."},
737f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
73866ac2b8cSJason M. Bills             {"Resolution",
73966ac2b8cSJason M. Bills              "Correct the value for the property in the request body and "
74066ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
741f12894f8SJason M. Bills }
742f12894f8SJason M. Bills 
743f12894f8SJason M. Bills /**
744f12894f8SJason M. Bills  * @internal
745f12894f8SJason M. Bills  * @brief Formats PropertyValueTypeError message into JSON for the specified
746f12894f8SJason M. Bills  * property
747f12894f8SJason M. Bills  *
748f12894f8SJason M. Bills  * See header file for more information
749f12894f8SJason M. Bills  * @endinternal
750f12894f8SJason M. Bills  */
751f12894f8SJason M. Bills void propertyValueTypeError(crow::Response& res, const std::string& arg1,
752f12894f8SJason M. Bills                             const std::string& arg2,
753f12894f8SJason M. Bills                             const std::string& property)
754f12894f8SJason M. Bills {
755f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
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"},
760*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueTypeError"},
761f12894f8SJason M. Bills             {"Message",
762f12894f8SJason M. Bills              "The value " + arg1 + " for the property " + arg2 +
763f12894f8SJason M. Bills                  " is of a different type than the property can accept."},
764f12894f8SJason M. Bills             {"Severity", "Warning"},
76566ac2b8cSJason M. Bills             {"Resolution",
76666ac2b8cSJason M. Bills              "Correct the value for the property in the request body and "
76766ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}},
768f12894f8SJason M. Bills         property);
769f4c4dcf4SKowalski, Kamil }
770f4c4dcf4SKowalski, Kamil 
771f4c4dcf4SKowalski, Kamil /**
772f4c4dcf4SKowalski, Kamil  * @internal
773f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceNotFound message into JSON
774f4c4dcf4SKowalski, Kamil  *
775f4c4dcf4SKowalski, Kamil  * See header file for more information
776f4c4dcf4SKowalski, Kamil  * @endinternal
777f4c4dcf4SKowalski, Kamil  */
778f12894f8SJason M. Bills void resourceNotFound(crow::Response& res, const std::string& arg1,
7791abe55efSEd Tanous                       const std::string& arg2)
7801abe55efSEd Tanous {
781f12894f8SJason M. Bills     res.result(boost::beast::http::status::not_found);
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"},
786*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceNotFound"},
7871abe55efSEd Tanous             {"Message", "The requested resource of type " + arg1 + " named " +
7881abe55efSEd Tanous                             arg2 + " was not found."},
789f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
790f4c4dcf4SKowalski, Kamil             {"Resolution",
791f12894f8SJason M. Bills              "Provide a valid resource identifier and resubmit the request."}});
792f4c4dcf4SKowalski, Kamil }
793f4c4dcf4SKowalski, Kamil 
794f4c4dcf4SKowalski, Kamil /**
795f4c4dcf4SKowalski, Kamil  * @internal
796f4c4dcf4SKowalski, Kamil  * @brief Formats CouldNotEstablishConnection message into JSON
797f4c4dcf4SKowalski, Kamil  *
798f4c4dcf4SKowalski, Kamil  * See header file for more information
799f4c4dcf4SKowalski, Kamil  * @endinternal
800f4c4dcf4SKowalski, Kamil  */
801f12894f8SJason M. Bills void couldNotEstablishConnection(crow::Response& res, const std::string& arg1)
8021abe55efSEd Tanous {
803f12894f8SJason M. Bills     res.result(boost::beast::http::status::not_found);
804f12894f8SJason M. Bills     addMessageToErrorJson(
805f12894f8SJason M. Bills         res.jsonValue,
806f12894f8SJason M. Bills         nlohmann::json{
807f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
808*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.CouldNotEstablishConnection"},
8091abe55efSEd Tanous             {"Message",
810f12894f8SJason M. Bills              "The service failed to establish a Connection with the URI " +
811f12894f8SJason M. Bills                  arg1 + "."},
812f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
81366ac2b8cSJason M. Bills             {"Resolution",
81466ac2b8cSJason M. Bills              "Ensure that the URI contains a valid and reachable node name, "
81566ac2b8cSJason M. Bills              "protocol information and other URI components."}});
816f4c4dcf4SKowalski, Kamil }
817f4c4dcf4SKowalski, Kamil 
818f4c4dcf4SKowalski, Kamil /**
819f4c4dcf4SKowalski, Kamil  * @internal
820f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyNotWritable message into JSON
821f4c4dcf4SKowalski, Kamil  *
822f4c4dcf4SKowalski, Kamil  * See header file for more information
823f4c4dcf4SKowalski, Kamil  * @endinternal
824f4c4dcf4SKowalski, Kamil  */
825f12894f8SJason M. Bills void propertyNotWritable(crow::Response& res, const std::string& arg1)
8261abe55efSEd Tanous {
827f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
828f12894f8SJason M. Bills     addMessageToErrorJson(
829f12894f8SJason M. Bills         res.jsonValue,
830f12894f8SJason M. Bills         nlohmann::json{
831f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
832*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyNotWritable"},
833f4c4dcf4SKowalski, Kamil             {"Message",
834f4c4dcf4SKowalski, Kamil              "The property " + arg1 +
835f4c4dcf4SKowalski, Kamil                  " is a read only property and cannot be assigned a value."},
836f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
83766ac2b8cSJason M. Bills             {"Resolution", "Remove the property from the request body and "
83866ac2b8cSJason M. Bills                            "resubmit the request if the operation failed."}});
839f12894f8SJason M. Bills }
840f12894f8SJason M. Bills 
841f12894f8SJason M. Bills /**
842f12894f8SJason M. Bills  * @internal
843f12894f8SJason M. Bills  * @brief Formats PropertyNotWritable message into JSON for the specified
844f12894f8SJason M. Bills  * property
845f12894f8SJason M. Bills  *
846f12894f8SJason M. Bills  * See header file for more information
847f12894f8SJason M. Bills  * @endinternal
848f12894f8SJason M. Bills  */
849f12894f8SJason M. Bills void propertyNotWritable(crow::Response& res, const std::string& arg1,
850f12894f8SJason M. Bills                          const std::string& property)
851f12894f8SJason M. Bills {
852f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
853f12894f8SJason M. Bills     addMessageToJson(
854f12894f8SJason M. Bills         res.jsonValue,
855f12894f8SJason M. Bills         nlohmann::json{
856f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
857*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyNotWritable"},
858f12894f8SJason M. Bills             {"Message",
859f12894f8SJason M. Bills              "The property " + arg1 +
860f12894f8SJason M. Bills                  " is a read only property and cannot be assigned a value."},
861f12894f8SJason M. Bills             {"Severity", "Warning"},
86266ac2b8cSJason M. Bills             {"Resolution", "Remove the property from the request body and "
86366ac2b8cSJason M. Bills                            "resubmit the request if the operation failed."}},
864f12894f8SJason M. Bills         property);
865f4c4dcf4SKowalski, Kamil }
866f4c4dcf4SKowalski, Kamil 
867f4c4dcf4SKowalski, Kamil /**
868f4c4dcf4SKowalski, Kamil  * @internal
869f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterValueTypeError message into JSON
870f4c4dcf4SKowalski, Kamil  *
871f4c4dcf4SKowalski, Kamil  * See header file for more information
872f4c4dcf4SKowalski, Kamil  * @endinternal
873f4c4dcf4SKowalski, Kamil  */
874f12894f8SJason M. Bills void queryParameterValueTypeError(crow::Response& res, const std::string& arg1,
8751abe55efSEd Tanous                                   const std::string& arg2)
8761abe55efSEd Tanous {
877f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
878f12894f8SJason M. Bills     addMessageToErrorJson(
879f12894f8SJason M. Bills         res.jsonValue,
880f12894f8SJason M. Bills         nlohmann::json{
881f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
882*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryParameterValueTypeError"},
8831abe55efSEd Tanous             {"Message",
8841abe55efSEd Tanous              "The value " + arg1 + " for the query parameter " + arg2 +
885f4c4dcf4SKowalski, Kamil                  " is of a different type than the parameter can accept."},
886f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
88766ac2b8cSJason M. Bills             {"Resolution",
88866ac2b8cSJason M. Bills              "Correct the value for the query parameter in the request and "
88966ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
890f4c4dcf4SKowalski, Kamil }
891f4c4dcf4SKowalski, Kamil 
892f4c4dcf4SKowalski, Kamil /**
893f4c4dcf4SKowalski, Kamil  * @internal
894f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceShuttingDown message into JSON
895f4c4dcf4SKowalski, Kamil  *
896f4c4dcf4SKowalski, Kamil  * See header file for more information
897f4c4dcf4SKowalski, Kamil  * @endinternal
898f4c4dcf4SKowalski, Kamil  */
899f12894f8SJason M. Bills void serviceShuttingDown(crow::Response& res)
9001abe55efSEd Tanous {
901f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
902f12894f8SJason M. Bills     addMessageToErrorJson(
903f12894f8SJason M. Bills         res.jsonValue,
904f12894f8SJason M. Bills         nlohmann::json{
905f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
906*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ServiceShuttingDown"},
907f12894f8SJason M. Bills             {"Message", "The operation failed because the service is shutting "
90866ac2b8cSJason M. Bills                         "down and can no longer take incoming requests."},
909f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
91066ac2b8cSJason M. Bills             {"Resolution", "When the service becomes available, resubmit the "
91166ac2b8cSJason M. Bills                            "request if the operation failed."}});
912f4c4dcf4SKowalski, Kamil }
913f4c4dcf4SKowalski, Kamil 
914f4c4dcf4SKowalski, Kamil /**
915f4c4dcf4SKowalski, Kamil  * @internal
916f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterDuplicate message into JSON
917f4c4dcf4SKowalski, Kamil  *
918f4c4dcf4SKowalski, Kamil  * See header file for more information
919f4c4dcf4SKowalski, Kamil  * @endinternal
920f4c4dcf4SKowalski, Kamil  */
921f12894f8SJason M. Bills void actionParameterDuplicate(crow::Response& res, const std::string& arg1,
9221abe55efSEd Tanous                               const std::string& arg2)
9231abe55efSEd Tanous {
924f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
925f12894f8SJason M. Bills     addMessageToErrorJson(
926f12894f8SJason M. Bills         res.jsonValue,
927f12894f8SJason M. Bills         nlohmann::json{
928f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
929*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterDuplicate"},
930f4c4dcf4SKowalski, Kamil             {"Message",
931f4c4dcf4SKowalski, Kamil              "The action " + arg1 +
9321abe55efSEd Tanous                  " was submitted with more than one value for the parameter " +
9331abe55efSEd Tanous                  arg2 + "."},
934f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
93566ac2b8cSJason M. Bills             {"Resolution",
93666ac2b8cSJason M. Bills              "Resubmit the action with only one instance of the parameter in "
93766ac2b8cSJason M. Bills              "the request body if the operation failed."}});
938f4c4dcf4SKowalski, Kamil }
939f4c4dcf4SKowalski, Kamil 
940f4c4dcf4SKowalski, Kamil /**
941f4c4dcf4SKowalski, Kamil  * @internal
942f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterNotSupported message into JSON
943f4c4dcf4SKowalski, Kamil  *
944f4c4dcf4SKowalski, Kamil  * See header file for more information
945f4c4dcf4SKowalski, Kamil  * @endinternal
946f4c4dcf4SKowalski, Kamil  */
947f12894f8SJason M. Bills void actionParameterNotSupported(crow::Response& res, const std::string& arg1,
9481abe55efSEd Tanous                                  const std::string& arg2)
9491abe55efSEd Tanous {
950f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
951f12894f8SJason M. Bills     addMessageToErrorJson(
952f12894f8SJason M. Bills         res.jsonValue,
953f12894f8SJason M. Bills         nlohmann::json{
954f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
955*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterNotSupported"},
956f4c4dcf4SKowalski, Kamil             {"Message", "The parameter " + arg1 + " for the action " + arg2 +
957f4c4dcf4SKowalski, Kamil                             " is not supported on the target resource."},
958f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
95966ac2b8cSJason M. Bills             {"Resolution", "Remove the parameter supplied and resubmit the "
96066ac2b8cSJason M. Bills                            "request if the operation failed."}});
961f4c4dcf4SKowalski, Kamil }
962f4c4dcf4SKowalski, Kamil 
963f4c4dcf4SKowalski, Kamil /**
964f4c4dcf4SKowalski, Kamil  * @internal
965f4c4dcf4SKowalski, Kamil  * @brief Formats SourceDoesNotSupportProtocol message into JSON
966f4c4dcf4SKowalski, Kamil  *
967f4c4dcf4SKowalski, Kamil  * See header file for more information
968f4c4dcf4SKowalski, Kamil  * @endinternal
969f4c4dcf4SKowalski, Kamil  */
970f12894f8SJason M. Bills void sourceDoesNotSupportProtocol(crow::Response& res, const std::string& arg1,
9711abe55efSEd Tanous                                   const std::string& arg2)
9721abe55efSEd Tanous {
973f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
974f12894f8SJason M. Bills     addMessageToErrorJson(
975f12894f8SJason M. Bills         res.jsonValue,
976f12894f8SJason M. Bills         nlohmann::json{
977f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
978*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.SourceDoesNotSupportProtocol"},
97955c7b7a2SEd Tanous             {"Message", "The other end of the Connection at " + arg1 +
9801abe55efSEd Tanous                             " does not support the specified protocol " + arg2 +
9811abe55efSEd Tanous                             "."},
982f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
983f12894f8SJason M. Bills             {"Resolution", "Change protocols or URIs. "}});
984f4c4dcf4SKowalski, Kamil }
985f4c4dcf4SKowalski, Kamil 
986f4c4dcf4SKowalski, Kamil /**
987f4c4dcf4SKowalski, Kamil  * @internal
988f4c4dcf4SKowalski, Kamil  * @brief Formats AccountRemoved message into JSON
989f4c4dcf4SKowalski, Kamil  *
990f4c4dcf4SKowalski, Kamil  * See header file for more information
991f4c4dcf4SKowalski, Kamil  * @endinternal
992f4c4dcf4SKowalski, Kamil  */
993f12894f8SJason M. Bills void accountRemoved(crow::Response& res)
9941abe55efSEd Tanous {
995f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
996f12894f8SJason M. Bills     addMessageToJsonRoot(
997f12894f8SJason M. Bills         res.jsonValue,
998f12894f8SJason M. Bills         nlohmann::json{
999f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1000*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccountRemoved"},
1001f4c4dcf4SKowalski, Kamil             {"Message", "The account was successfully removed."},
1002f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1003f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}});
1004f4c4dcf4SKowalski, Kamil }
1005f4c4dcf4SKowalski, Kamil 
1006f4c4dcf4SKowalski, Kamil /**
1007f4c4dcf4SKowalski, Kamil  * @internal
1008f4c4dcf4SKowalski, Kamil  * @brief Formats AccessDenied message into JSON
1009f4c4dcf4SKowalski, Kamil  *
1010f4c4dcf4SKowalski, Kamil  * See header file for more information
1011f4c4dcf4SKowalski, Kamil  * @endinternal
1012f4c4dcf4SKowalski, Kamil  */
1013f12894f8SJason M. Bills void accessDenied(crow::Response& res, const std::string& arg1)
10141abe55efSEd Tanous {
1015f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1016f12894f8SJason M. Bills     addMessageToErrorJson(
1017f12894f8SJason M. Bills         res.jsonValue,
1018f12894f8SJason M. Bills         nlohmann::json{
1019f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1020*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccessDenied"},
1021f12894f8SJason M. Bills             {"Message", "While attempting to establish a Connection to " +
1022f12894f8SJason M. Bills                             arg1 + ", the service denied access."},
1023f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
102466ac2b8cSJason M. Bills             {"Resolution", "Attempt to ensure that the URI is correct and that "
102566ac2b8cSJason M. Bills                            "the service has the appropriate credentials."}});
1026f4c4dcf4SKowalski, Kamil }
1027f4c4dcf4SKowalski, Kamil 
1028f4c4dcf4SKowalski, Kamil /**
1029f4c4dcf4SKowalski, Kamil  * @internal
1030f4c4dcf4SKowalski, Kamil  * @brief Formats QueryNotSupported message into JSON
1031f4c4dcf4SKowalski, Kamil  *
1032f4c4dcf4SKowalski, Kamil  * See header file for more information
1033f4c4dcf4SKowalski, Kamil  * @endinternal
1034f4c4dcf4SKowalski, Kamil  */
1035f12894f8SJason M. Bills void queryNotSupported(crow::Response& res)
10361abe55efSEd Tanous {
1037f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1038f12894f8SJason M. Bills     addMessageToErrorJson(
1039f12894f8SJason M. Bills         res.jsonValue,
1040f12894f8SJason M. Bills         nlohmann::json{
1041f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1042*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryNotSupported"},
1043f4c4dcf4SKowalski, Kamil             {"Message", "Querying is not supported by the implementation."},
1044f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
104566ac2b8cSJason M. Bills             {"Resolution", "Remove the query parameters and resubmit the "
104666ac2b8cSJason M. Bills                            "request if the operation failed."}});
1047f4c4dcf4SKowalski, Kamil }
1048f4c4dcf4SKowalski, Kamil 
1049f4c4dcf4SKowalski, Kamil /**
1050f4c4dcf4SKowalski, Kamil  * @internal
1051f4c4dcf4SKowalski, Kamil  * @brief Formats CreateLimitReachedForResource message into JSON
1052f4c4dcf4SKowalski, Kamil  *
1053f4c4dcf4SKowalski, Kamil  * See header file for more information
1054f4c4dcf4SKowalski, Kamil  * @endinternal
1055f4c4dcf4SKowalski, Kamil  */
1056f12894f8SJason M. Bills void createLimitReachedForResource(crow::Response& res)
10571abe55efSEd Tanous {
1058f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1059f12894f8SJason M. Bills     addMessageToErrorJson(
1060f12894f8SJason M. Bills         res.jsonValue,
1061f12894f8SJason M. Bills         nlohmann::json{
1062f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1063*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.CreateLimitReachedForResource"},
10641abe55efSEd Tanous             {"Message", "The create operation failed because the resource has "
106566ac2b8cSJason M. Bills                         "reached the limit of possible resources."},
1066f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
106766ac2b8cSJason M. Bills             {"Resolution",
106866ac2b8cSJason M. Bills              "Either delete resources and resubmit the request if the "
106966ac2b8cSJason M. Bills              "operation failed or do not resubmit the request."}});
1070f4c4dcf4SKowalski, Kamil }
1071f4c4dcf4SKowalski, Kamil 
1072f4c4dcf4SKowalski, Kamil /**
1073f4c4dcf4SKowalski, Kamil  * @internal
1074f4c4dcf4SKowalski, Kamil  * @brief Formats GeneralError message into JSON
1075f4c4dcf4SKowalski, Kamil  *
1076f4c4dcf4SKowalski, Kamil  * See header file for more information
1077f4c4dcf4SKowalski, Kamil  * @endinternal
1078f4c4dcf4SKowalski, Kamil  */
1079f12894f8SJason M. Bills void generalError(crow::Response& res)
10801abe55efSEd Tanous {
1081f12894f8SJason M. Bills     res.result(boost::beast::http::status::internal_server_error);
1082f12894f8SJason M. Bills     addMessageToErrorJson(
1083f12894f8SJason M. Bills         res.jsonValue,
1084f12894f8SJason M. Bills         nlohmann::json{
1085f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1086*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.GeneralError"},
1087*cc9139ecSJason M. Bills             {"Message", "A general error has occurred. See Resolution for "
1088*cc9139ecSJason M. Bills                         "information on how to resolve the error."},
1089f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1090*cc9139ecSJason M. Bills             {"Resolution", "None."}});
1091f4c4dcf4SKowalski, Kamil }
1092f4c4dcf4SKowalski, Kamil 
1093f4c4dcf4SKowalski, Kamil /**
1094f4c4dcf4SKowalski, Kamil  * @internal
1095f4c4dcf4SKowalski, Kamil  * @brief Formats Success message into JSON
1096f4c4dcf4SKowalski, Kamil  *
1097f4c4dcf4SKowalski, Kamil  * See header file for more information
1098f4c4dcf4SKowalski, Kamil  * @endinternal
1099f4c4dcf4SKowalski, Kamil  */
1100f12894f8SJason M. Bills void success(crow::Response& res)
11011abe55efSEd Tanous {
1102f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1103f12894f8SJason M. Bills     addMessageToJsonRoot(
1104f12894f8SJason M. Bills         res.jsonValue,
1105f12894f8SJason M. Bills         nlohmann::json{
1106f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1107*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.Success"},
1108f4c4dcf4SKowalski, Kamil             {"Message", "Successfully Completed Request"},
1109f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1110f12894f8SJason M. Bills             {"Resolution", "None"}});
1111f12894f8SJason M. Bills }
1112f12894f8SJason M. Bills 
1113f12894f8SJason M. Bills /**
1114f12894f8SJason M. Bills  * @internal
1115f12894f8SJason M. Bills  * @brief Formats Success message into JSON for the specified field
1116f12894f8SJason M. Bills  *
1117f12894f8SJason M. Bills  * See header file for more information
1118f12894f8SJason M. Bills  * @endinternal
1119f12894f8SJason M. Bills  */
1120f12894f8SJason M. Bills void success(crow::Response& res, const std::string& fieldPath)
1121f12894f8SJason M. Bills {
1122f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1123f12894f8SJason M. Bills     addMessageToJson(
1124f12894f8SJason M. Bills         res.jsonValue,
1125f12894f8SJason M. Bills         nlohmann::json{
1126f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1127*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.Success"},
1128f12894f8SJason M. Bills             {"Message", "Successfully Completed Request"},
1129f12894f8SJason M. Bills             {"Severity", "OK"},
1130f12894f8SJason M. Bills             {"Resolution", "None"}},
1131f12894f8SJason M. Bills         fieldPath);
1132f4c4dcf4SKowalski, Kamil }
1133f4c4dcf4SKowalski, Kamil 
1134f4c4dcf4SKowalski, Kamil /**
1135f4c4dcf4SKowalski, Kamil  * @internal
1136f4c4dcf4SKowalski, Kamil  * @brief Formats Created message into JSON
1137f4c4dcf4SKowalski, Kamil  *
1138f4c4dcf4SKowalski, Kamil  * See header file for more information
1139f4c4dcf4SKowalski, Kamil  * @endinternal
1140f4c4dcf4SKowalski, Kamil  */
1141f12894f8SJason M. Bills void created(crow::Response& res)
11421abe55efSEd Tanous {
1143f12894f8SJason M. Bills     res.result(boost::beast::http::status::created);
1144f12894f8SJason M. Bills     addMessageToJsonRoot(
1145f12894f8SJason M. Bills         res.jsonValue,
1146f12894f8SJason M. Bills         nlohmann::json{
1147f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1148*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.Created"},
1149f4c4dcf4SKowalski, Kamil             {"Message", "The resource has been created successfully"},
1150f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1151f12894f8SJason M. Bills             {"Resolution", "None"}});
1152f4c4dcf4SKowalski, Kamil }
1153f4c4dcf4SKowalski, Kamil 
1154f4c4dcf4SKowalski, Kamil /**
1155f4c4dcf4SKowalski, Kamil  * @internal
1156*cc9139ecSJason M. Bills  * @brief Formats NoOperation message into JSON
1157*cc9139ecSJason M. Bills  *
1158*cc9139ecSJason M. Bills  * See header file for more information
1159*cc9139ecSJason M. Bills  * @endinternal
1160*cc9139ecSJason M. Bills  */
1161*cc9139ecSJason M. Bills void noOperation(crow::Response& res)
1162*cc9139ecSJason M. Bills {
1163*cc9139ecSJason M. Bills     res.result(boost::beast::http::status::bad_request);
1164*cc9139ecSJason M. Bills     addMessageToErrorJson(
1165*cc9139ecSJason M. Bills         res.jsonValue,
1166*cc9139ecSJason M. Bills         nlohmann::json{
1167*cc9139ecSJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1168*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.NoOperation"},
1169*cc9139ecSJason M. Bills             {"Message", "The request body submitted contain no data to act "
1170*cc9139ecSJason M. Bills                         "upon and no changes to the resource took place."},
1171*cc9139ecSJason M. Bills             {"Severity", "Warning"},
1172*cc9139ecSJason M. Bills             {"Resolution",
1173*cc9139ecSJason M. Bills              "Add properties in the JSON object and resubmit the request."}});
1174*cc9139ecSJason M. Bills }
1175*cc9139ecSJason M. Bills 
1176*cc9139ecSJason M. Bills /**
1177*cc9139ecSJason M. Bills  * @internal
1178f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyUnknown message into JSON
1179f4c4dcf4SKowalski, Kamil  *
1180f4c4dcf4SKowalski, Kamil  * See header file for more information
1181f4c4dcf4SKowalski, Kamil  * @endinternal
1182f4c4dcf4SKowalski, Kamil  */
1183f12894f8SJason M. Bills void propertyUnknown(crow::Response& res, const std::string& arg1)
11841abe55efSEd Tanous {
1185f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1186f12894f8SJason M. Bills     addMessageToErrorJson(
1187f12894f8SJason M. Bills         res.jsonValue,
1188f12894f8SJason M. Bills         nlohmann::json{
1189f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1190*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyUnknown"},
1191f4c4dcf4SKowalski, Kamil             {"Message",
1192f4c4dcf4SKowalski, Kamil              "The property " + arg1 +
1193f4c4dcf4SKowalski, Kamil                  " is not in the list of valid properties for the resource."},
1194f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
119566ac2b8cSJason M. Bills             {"Resolution",
119666ac2b8cSJason M. Bills              "Remove the unknown property from the request body and resubmit "
119766ac2b8cSJason M. Bills              "the request if the operation failed."}});
1198f12894f8SJason M. Bills }
1199f12894f8SJason M. Bills 
1200f12894f8SJason M. Bills /**
1201f12894f8SJason M. Bills  * @internal
1202f12894f8SJason M. Bills  * @brief Formats PropertyUnknown message into JSON for the specified property
1203f12894f8SJason M. Bills  *
1204f12894f8SJason M. Bills  * See header file for more information
1205f12894f8SJason M. Bills  * @endinternal
1206f12894f8SJason M. Bills  */
1207f12894f8SJason M. Bills void propertyUnknown(crow::Response& res, const std::string& arg1,
1208f12894f8SJason M. Bills                      const std::string& property)
1209f12894f8SJason M. Bills {
1210f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1211f12894f8SJason M. Bills     addMessageToJson(
1212f12894f8SJason M. Bills         res.jsonValue,
1213f12894f8SJason M. Bills         nlohmann::json{
1214f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1215*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyUnknown"},
1216f12894f8SJason M. Bills             {"Message",
1217f12894f8SJason M. Bills              "The property " + arg1 +
1218f12894f8SJason M. Bills                  " is not in the list of valid properties for the resource."},
1219f12894f8SJason M. Bills             {"Severity", "Warning"},
122066ac2b8cSJason M. Bills             {"Resolution",
122166ac2b8cSJason M. Bills              "Remove the unknown property from the request body and resubmit "
122266ac2b8cSJason M. Bills              "the request if the operation failed."}},
1223f12894f8SJason M. Bills         property);
1224f4c4dcf4SKowalski, Kamil }
1225f4c4dcf4SKowalski, Kamil 
1226f4c4dcf4SKowalski, Kamil /**
1227f4c4dcf4SKowalski, Kamil  * @internal
1228f4c4dcf4SKowalski, Kamil  * @brief Formats NoValidSession message into JSON
1229f4c4dcf4SKowalski, Kamil  *
1230f4c4dcf4SKowalski, Kamil  * See header file for more information
1231f4c4dcf4SKowalski, Kamil  * @endinternal
1232f4c4dcf4SKowalski, Kamil  */
1233f12894f8SJason M. Bills void noValidSession(crow::Response& res)
12341abe55efSEd Tanous {
1235f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1236f12894f8SJason M. Bills     addMessageToErrorJson(
1237f12894f8SJason M. Bills         res.jsonValue,
1238f12894f8SJason M. Bills         nlohmann::json{
1239f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1240*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.NoValidSession"},
1241f4c4dcf4SKowalski, Kamil             {"Message",
1242f4c4dcf4SKowalski, Kamil              "There is no valid session established with the implementation."},
1243f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
12441abe55efSEd Tanous             {"Resolution",
1245f12894f8SJason M. Bills              "Establish as session before attempting any operations."}});
1246f4c4dcf4SKowalski, Kamil }
1247f4c4dcf4SKowalski, Kamil 
1248f4c4dcf4SKowalski, Kamil /**
1249f4c4dcf4SKowalski, Kamil  * @internal
1250f4c4dcf4SKowalski, Kamil  * @brief Formats InvalidObject message into JSON
1251f4c4dcf4SKowalski, Kamil  *
1252f4c4dcf4SKowalski, Kamil  * See header file for more information
1253f4c4dcf4SKowalski, Kamil  * @endinternal
1254f4c4dcf4SKowalski, Kamil  */
1255f12894f8SJason M. Bills void invalidObject(crow::Response& res, const std::string& arg1)
12561abe55efSEd Tanous {
1257f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1258f12894f8SJason M. Bills     addMessageToErrorJson(
1259f12894f8SJason M. Bills         res.jsonValue,
1260f12894f8SJason M. Bills         nlohmann::json{
1261f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1262*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InvalidObject"},
1263f4c4dcf4SKowalski, Kamil             {"Message", "The object at " + arg1 + " is invalid."},
1264f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1265f12894f8SJason M. Bills             {"Resolution",
126666ac2b8cSJason M. Bills              "Either the object is malformed or the URI is not correct.  "
126766ac2b8cSJason M. Bills              "Correct the condition and resubmit the request if it failed."}});
1268f4c4dcf4SKowalski, Kamil }
1269f4c4dcf4SKowalski, Kamil 
1270f4c4dcf4SKowalski, Kamil /**
1271f4c4dcf4SKowalski, Kamil  * @internal
1272f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceInStandby message into JSON
1273f4c4dcf4SKowalski, Kamil  *
1274f4c4dcf4SKowalski, Kamil  * See header file for more information
1275f4c4dcf4SKowalski, Kamil  * @endinternal
1276f4c4dcf4SKowalski, Kamil  */
1277f12894f8SJason M. Bills void resourceInStandby(crow::Response& res)
12781abe55efSEd Tanous {
1279f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1280f12894f8SJason M. Bills     addMessageToErrorJson(
1281f12894f8SJason M. Bills         res.jsonValue,
1282f12894f8SJason M. Bills         nlohmann::json{
1283f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1284*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceInStandby"},
128566ac2b8cSJason M. Bills             {"Message", "The request could not be performed because the "
128666ac2b8cSJason M. Bills                         "resource is in standby."},
1287f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1288f12894f8SJason M. Bills             {"Resolution", "Ensure that the resource is in the correct power "
128966ac2b8cSJason M. Bills                            "state and resubmit the request."}});
1290f4c4dcf4SKowalski, Kamil }
1291f4c4dcf4SKowalski, Kamil 
1292f4c4dcf4SKowalski, Kamil /**
1293f4c4dcf4SKowalski, Kamil  * @internal
1294f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterValueTypeError message into JSON
1295f4c4dcf4SKowalski, Kamil  *
1296f4c4dcf4SKowalski, Kamil  * See header file for more information
1297f4c4dcf4SKowalski, Kamil  * @endinternal
1298f4c4dcf4SKowalski, Kamil  */
1299f12894f8SJason M. Bills void actionParameterValueTypeError(crow::Response& res, const std::string& arg1,
1300f4c4dcf4SKowalski, Kamil                                    const std::string& arg2,
13011abe55efSEd Tanous                                    const std::string& arg3)
13021abe55efSEd Tanous {
1303f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1304f12894f8SJason M. Bills     addMessageToErrorJson(
1305f12894f8SJason M. Bills         res.jsonValue,
1306f12894f8SJason M. Bills         nlohmann::json{
1307f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1308*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterValueTypeError"},
13091abe55efSEd Tanous             {"Message",
13101abe55efSEd Tanous              "The value " + arg1 + " for the parameter " + arg2 +
1311f4c4dcf4SKowalski, Kamil                  " in the action " + arg3 +
1312f4c4dcf4SKowalski, Kamil                  " is of a different type than the parameter can accept."},
1313f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
131466ac2b8cSJason M. Bills             {"Resolution",
131566ac2b8cSJason M. Bills              "Correct the value for the parameter in the request body and "
131666ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
1317f4c4dcf4SKowalski, Kamil }
1318f4c4dcf4SKowalski, Kamil 
1319f4c4dcf4SKowalski, Kamil /**
1320f4c4dcf4SKowalski, Kamil  * @internal
1321f4c4dcf4SKowalski, Kamil  * @brief Formats SessionLimitExceeded message into JSON
1322f4c4dcf4SKowalski, Kamil  *
1323f4c4dcf4SKowalski, Kamil  * See header file for more information
1324f4c4dcf4SKowalski, Kamil  * @endinternal
1325f4c4dcf4SKowalski, Kamil  */
1326f12894f8SJason M. Bills void sessionLimitExceeded(crow::Response& res)
13271abe55efSEd Tanous {
1328f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1329f12894f8SJason M. Bills     addMessageToErrorJson(
1330f12894f8SJason M. Bills         res.jsonValue,
1331f12894f8SJason M. Bills         nlohmann::json{
1332f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1333*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.SessionLimitExceeded"},
1334f12894f8SJason M. Bills             {"Message", "The session establishment failed due to the number of "
133566ac2b8cSJason M. Bills                         "simultaneous sessions exceeding the limit of the "
133666ac2b8cSJason M. Bills                         "implementation."},
1337f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
133866ac2b8cSJason M. Bills             {"Resolution", "Reduce the number of other sessions before trying "
133966ac2b8cSJason M. Bills                            "to establish the session or increase the limit of "
134066ac2b8cSJason M. Bills                            "simultaneous sessions (if supported)."}});
1341f4c4dcf4SKowalski, Kamil }
1342f4c4dcf4SKowalski, Kamil 
1343f4c4dcf4SKowalski, Kamil /**
1344f4c4dcf4SKowalski, Kamil  * @internal
1345f4c4dcf4SKowalski, Kamil  * @brief Formats ActionNotSupported message into JSON
1346f4c4dcf4SKowalski, Kamil  *
1347f4c4dcf4SKowalski, Kamil  * See header file for more information
1348f4c4dcf4SKowalski, Kamil  * @endinternal
1349f4c4dcf4SKowalski, Kamil  */
1350f12894f8SJason M. Bills void actionNotSupported(crow::Response& res, const std::string& arg1)
13511abe55efSEd Tanous {
1352f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1353f12894f8SJason M. Bills     addMessageToErrorJson(
1354f12894f8SJason M. Bills         res.jsonValue,
1355f12894f8SJason M. Bills         nlohmann::json{
1356f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1357*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionNotSupported"},
13581abe55efSEd Tanous             {"Message",
13591abe55efSEd Tanous              "The action " + arg1 + " is not supported by the resource."},
1360f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1361f4c4dcf4SKowalski, Kamil             {"Resolution",
1362f4c4dcf4SKowalski, Kamil              "The action supplied cannot be resubmitted to the implementation. "
1363f12894f8SJason M. Bills              " Perhaps the action was invalid, the wrong resource was the "
136466ac2b8cSJason M. Bills              "target or the implementation documentation may be of "
136566ac2b8cSJason M. Bills              "assistance."}});
1366f4c4dcf4SKowalski, Kamil }
1367f4c4dcf4SKowalski, Kamil 
1368f4c4dcf4SKowalski, Kamil /**
1369f4c4dcf4SKowalski, Kamil  * @internal
1370f4c4dcf4SKowalski, Kamil  * @brief Formats InvalidIndex message into JSON
1371f4c4dcf4SKowalski, Kamil  *
1372f4c4dcf4SKowalski, Kamil  * See header file for more information
1373f4c4dcf4SKowalski, Kamil  * @endinternal
1374f4c4dcf4SKowalski, Kamil  */
1375f12894f8SJason M. Bills void invalidIndex(crow::Response& res, const int& arg1)
13761abe55efSEd Tanous {
1377f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1378f12894f8SJason M. Bills     addMessageToErrorJson(
1379f12894f8SJason M. Bills         res.jsonValue,
1380f12894f8SJason M. Bills         nlohmann::json{
1381f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1382*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InvalidIndex"},
138355c7b7a2SEd Tanous             {"Message", "The index " + std::to_string(arg1) +
1384f4c4dcf4SKowalski, Kamil                             " is not a valid offset into the array."},
1385f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1386f12894f8SJason M. Bills             {"Resolution", "Verify the index value provided is within the "
1387f12894f8SJason M. Bills                            "bounds of the array."}});
1388f4c4dcf4SKowalski, Kamil }
1389f4c4dcf4SKowalski, Kamil 
1390f4c4dcf4SKowalski, Kamil /**
1391f4c4dcf4SKowalski, Kamil  * @internal
1392f4c4dcf4SKowalski, Kamil  * @brief Formats EmptyJSON message into JSON
1393f4c4dcf4SKowalski, Kamil  *
1394f4c4dcf4SKowalski, Kamil  * See header file for more information
1395f4c4dcf4SKowalski, Kamil  * @endinternal
1396f4c4dcf4SKowalski, Kamil  */
1397f12894f8SJason M. Bills void emptyJSON(crow::Response& res)
13981abe55efSEd Tanous {
1399f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1400f12894f8SJason M. Bills     addMessageToErrorJson(
1401f12894f8SJason M. Bills         res.jsonValue,
1402f12894f8SJason M. Bills         nlohmann::json{
1403f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1404*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.EmptyJSON"},
1405f12894f8SJason M. Bills             {"Message", "The request body submitted contained an empty JSON "
140666ac2b8cSJason M. Bills                         "object and the service is unable to process it."},
1407f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1408f4c4dcf4SKowalski, Kamil             {"Resolution",
1409f12894f8SJason M. Bills              "Add properties in the JSON object and resubmit the request."}});
1410f4c4dcf4SKowalski, Kamil }
1411f4c4dcf4SKowalski, Kamil 
1412f4c4dcf4SKowalski, Kamil /**
1413f4c4dcf4SKowalski, Kamil  * @internal
1414f4c4dcf4SKowalski, Kamil  * @brief Formats QueryNotSupportedOnResource message into JSON
1415f4c4dcf4SKowalski, Kamil  *
1416f4c4dcf4SKowalski, Kamil  * See header file for more information
1417f4c4dcf4SKowalski, Kamil  * @endinternal
1418f4c4dcf4SKowalski, Kamil  */
1419f12894f8SJason M. Bills void queryNotSupportedOnResource(crow::Response& res)
14201abe55efSEd Tanous {
1421f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1422f12894f8SJason M. Bills     addMessageToErrorJson(
1423f12894f8SJason M. Bills         res.jsonValue,
1424f12894f8SJason M. Bills         nlohmann::json{
1425f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1426*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryNotSupportedOnResource"},
1427f4c4dcf4SKowalski, Kamil             {"Message", "Querying is not supported on the requested resource."},
1428f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
142966ac2b8cSJason M. Bills             {"Resolution", "Remove the query parameters and resubmit the "
143066ac2b8cSJason M. Bills                            "request if the operation failed."}});
1431f4c4dcf4SKowalski, Kamil }
1432f4c4dcf4SKowalski, Kamil 
1433f4c4dcf4SKowalski, Kamil /**
1434f4c4dcf4SKowalski, Kamil  * @internal
1435f4c4dcf4SKowalski, Kamil  * @brief Formats InsufficientPrivilege message into JSON
1436f4c4dcf4SKowalski, Kamil  *
1437f4c4dcf4SKowalski, Kamil  * See header file for more information
1438f4c4dcf4SKowalski, Kamil  * @endinternal
1439f4c4dcf4SKowalski, Kamil  */
1440f12894f8SJason M. Bills void insufficientPrivilege(crow::Response& res)
14411abe55efSEd Tanous {
1442f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1443f12894f8SJason M. Bills     addMessageToErrorJson(
1444f12894f8SJason M. Bills         res.jsonValue,
1445f12894f8SJason M. Bills         nlohmann::json{
1446f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1447*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InsufficientPrivilege"},
144866ac2b8cSJason M. Bills             {"Message", "There are insufficient privileges for the account or "
144966ac2b8cSJason M. Bills                         "credentials associated with the current session to "
145066ac2b8cSJason M. Bills                         "perform the requested operation."},
1451f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1452f4c4dcf4SKowalski, Kamil             {"Resolution",
1453f12894f8SJason M. Bills              "Either abandon the operation or change the associated access "
145466ac2b8cSJason M. Bills              "rights and resubmit the request if the operation failed."}});
1455f4c4dcf4SKowalski, Kamil }
1456f4c4dcf4SKowalski, Kamil 
1457f4c4dcf4SKowalski, Kamil /**
1458f4c4dcf4SKowalski, Kamil  * @internal
1459f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyValueModified message into JSON
1460f4c4dcf4SKowalski, Kamil  *
1461f4c4dcf4SKowalski, Kamil  * See header file for more information
1462f4c4dcf4SKowalski, Kamil  * @endinternal
1463f4c4dcf4SKowalski, Kamil  */
1464f12894f8SJason M. Bills void propertyValueModified(crow::Response& res, const std::string& arg1,
1465f12894f8SJason M. Bills                            const std::string& arg2,
1466f12894f8SJason M. Bills                            const std::string& fieldPath)
14671abe55efSEd Tanous {
1468f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1469f12894f8SJason M. Bills     addMessageToJson(
1470f12894f8SJason M. Bills         res.jsonValue,
1471f12894f8SJason M. Bills         nlohmann::json{
1472f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1473*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueModified"},
1474f12894f8SJason M. Bills             {"Message", "The property " + arg1 + " was assigned the value " +
1475f12894f8SJason M. Bills                             arg2 + " due to modification by the service."},
1476f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1477f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}},
1478f12894f8SJason M. Bills         fieldPath);
1479f4c4dcf4SKowalski, Kamil }
1480f4c4dcf4SKowalski, Kamil 
1481f4c4dcf4SKowalski, Kamil /**
1482f4c4dcf4SKowalski, Kamil  * @internal
1483f4c4dcf4SKowalski, Kamil  * @brief Formats AccountNotModified message into JSON
1484f4c4dcf4SKowalski, Kamil  *
1485f4c4dcf4SKowalski, Kamil  * See header file for more information
1486f4c4dcf4SKowalski, Kamil  * @endinternal
1487f4c4dcf4SKowalski, Kamil  */
1488f12894f8SJason M. Bills void accountNotModified(crow::Response& res)
14891abe55efSEd Tanous {
1490f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1491f12894f8SJason M. Bills     addMessageToErrorJson(
1492f12894f8SJason M. Bills         res.jsonValue,
1493f12894f8SJason M. Bills         nlohmann::json{
1494f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1495*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccountNotModified"},
1496f4c4dcf4SKowalski, Kamil             {"Message", "The account modification request failed."},
1497f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1498f12894f8SJason M. Bills             {"Resolution", "The modification may have failed due to permission "
149966ac2b8cSJason M. Bills                            "issues or issues with the request body."}});
1500f4c4dcf4SKowalski, Kamil }
1501f4c4dcf4SKowalski, Kamil 
1502f4c4dcf4SKowalski, Kamil /**
1503f4c4dcf4SKowalski, Kamil  * @internal
1504f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterValueFormatError message into JSON
1505f4c4dcf4SKowalski, Kamil  *
1506f4c4dcf4SKowalski, Kamil  * See header file for more information
1507f4c4dcf4SKowalski, Kamil  * @endinternal
1508f4c4dcf4SKowalski, Kamil  */
1509f12894f8SJason M. Bills void queryParameterValueFormatError(crow::Response& res,
1510f12894f8SJason M. Bills                                     const std::string& arg1,
15111abe55efSEd Tanous                                     const std::string& arg2)
15121abe55efSEd Tanous {
1513f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1514f12894f8SJason M. Bills     addMessageToErrorJson(
1515f12894f8SJason M. Bills         res.jsonValue,
1516f12894f8SJason M. Bills         nlohmann::json{
1517f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1518*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryParameterValueFormatError"},
1519f4c4dcf4SKowalski, Kamil             {"Message",
1520f4c4dcf4SKowalski, Kamil              "The value " + arg1 + " for the parameter " + arg2 +
1521f4c4dcf4SKowalski, Kamil                  " is of a different format than the parameter can accept."},
1522f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
152366ac2b8cSJason M. Bills             {"Resolution",
152466ac2b8cSJason M. Bills              "Correct the value for the query parameter in the request and "
152566ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
1526f4c4dcf4SKowalski, Kamil }
1527f4c4dcf4SKowalski, Kamil 
1528f4c4dcf4SKowalski, Kamil /**
1529f4c4dcf4SKowalski, Kamil  * @internal
1530f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyMissing message into JSON
1531f4c4dcf4SKowalski, Kamil  *
1532f4c4dcf4SKowalski, Kamil  * See header file for more information
1533f4c4dcf4SKowalski, Kamil  * @endinternal
1534f4c4dcf4SKowalski, Kamil  */
1535f12894f8SJason M. Bills void propertyMissing(crow::Response& res, const std::string& arg1)
15361abe55efSEd Tanous {
1537f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1538f12894f8SJason M. Bills     addMessageToErrorJson(
1539f12894f8SJason M. Bills         res.jsonValue,
1540f12894f8SJason M. Bills         nlohmann::json{
1541f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1542*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyMissing"},
1543f12894f8SJason M. Bills             {"Message", "The property " + arg1 +
1544f12894f8SJason M. Bills                             " is a required property and must be included in "
1545f12894f8SJason M. Bills                             "the request."},
1546f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1547f12894f8SJason M. Bills             {"Resolution",
154866ac2b8cSJason M. Bills              "Ensure that the property is in the request body and has a valid "
154966ac2b8cSJason M. Bills              "value and resubmit the request if the operation failed."}});
1550f12894f8SJason M. Bills }
1551f12894f8SJason M. Bills 
1552f12894f8SJason M. Bills /**
1553f12894f8SJason M. Bills  * @internal
1554f12894f8SJason M. Bills  * @brief Formats PropertyMissing message into JSON for the specified property
1555f12894f8SJason M. Bills  *
1556f12894f8SJason M. Bills  * See header file for more information
1557f12894f8SJason M. Bills  * @endinternal
1558f12894f8SJason M. Bills  */
1559f12894f8SJason M. Bills void propertyMissing(crow::Response& res, const std::string& arg1,
1560f12894f8SJason M. Bills                      const std::string& property)
1561f12894f8SJason M. Bills {
1562f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1563f12894f8SJason M. Bills     addMessageToJson(
1564f12894f8SJason M. Bills         res.jsonValue,
1565f12894f8SJason M. Bills         nlohmann::json{
1566f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1567*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyMissing"},
1568f12894f8SJason M. Bills             {"Message", "The property " + arg1 +
1569f12894f8SJason M. Bills                             " is a required property and must be included in "
1570f12894f8SJason M. Bills                             "the request."},
1571f12894f8SJason M. Bills             {"Severity", "Warning"},
1572f12894f8SJason M. Bills             {"Resolution",
157366ac2b8cSJason M. Bills              "Ensure that the property is in the request body and has a valid "
157466ac2b8cSJason M. Bills              "value and resubmit the request if the operation failed."}},
1575f12894f8SJason M. Bills         property);
1576f4c4dcf4SKowalski, Kamil }
1577f4c4dcf4SKowalski, Kamil 
1578f4c4dcf4SKowalski, Kamil /**
1579f4c4dcf4SKowalski, Kamil  * @internal
1580f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceExhaustion message into JSON
1581f4c4dcf4SKowalski, Kamil  *
1582f4c4dcf4SKowalski, Kamil  * See header file for more information
1583f4c4dcf4SKowalski, Kamil  * @endinternal
1584f4c4dcf4SKowalski, Kamil  */
1585f12894f8SJason M. Bills void resourceExhaustion(crow::Response& res, const std::string& arg1)
15861abe55efSEd Tanous {
1587f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1588f12894f8SJason M. Bills     addMessageToErrorJson(
1589f12894f8SJason M. Bills         res.jsonValue,
1590f12894f8SJason M. Bills         nlohmann::json{
1591f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1592*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceExhaustion"},
1593d425c6f6SEd Tanous             {"Message", "The resource " + arg1 +
159466ac2b8cSJason M. Bills                             " was unable to satisfy the request due to "
159566ac2b8cSJason M. Bills                             "unavailability of resources."},
1596f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1597f12894f8SJason M. Bills             {"Resolution", "Ensure that the resources are available and "
1598f12894f8SJason M. Bills                            "resubmit the request."}});
1599f4c4dcf4SKowalski, Kamil }
1600f4c4dcf4SKowalski, Kamil 
1601f4c4dcf4SKowalski, Kamil /**
1602f4c4dcf4SKowalski, Kamil  * @internal
1603f4c4dcf4SKowalski, Kamil  * @brief Formats AccountModified message into JSON
1604f4c4dcf4SKowalski, Kamil  *
1605f4c4dcf4SKowalski, Kamil  * See header file for more information
1606f4c4dcf4SKowalski, Kamil  * @endinternal
1607f4c4dcf4SKowalski, Kamil  */
1608f12894f8SJason M. Bills void accountModified(crow::Response& res, const std::string& fieldPath)
16091abe55efSEd Tanous {
1610f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1611f12894f8SJason M. Bills     addMessageToJson(
1612f12894f8SJason M. Bills         res.jsonValue,
1613f12894f8SJason M. Bills         nlohmann::json{
1614f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1615*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccountModified"},
1616f4c4dcf4SKowalski, Kamil             {"Message", "The account was successfully modified."},
1617f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1618f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}},
1619f12894f8SJason M. Bills         fieldPath);
1620f4c4dcf4SKowalski, Kamil }
1621f4c4dcf4SKowalski, Kamil 
1622f4c4dcf4SKowalski, Kamil /**
1623f4c4dcf4SKowalski, Kamil  * @internal
1624f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterOutOfRange message into JSON
1625f4c4dcf4SKowalski, Kamil  *
1626f4c4dcf4SKowalski, Kamil  * See header file for more information
1627f4c4dcf4SKowalski, Kamil  * @endinternal
1628f4c4dcf4SKowalski, Kamil  */
1629f12894f8SJason M. Bills void queryParameterOutOfRange(crow::Response& res, const std::string& arg1,
1630f12894f8SJason M. Bills                               const std::string& arg2, const std::string& arg3)
16311abe55efSEd Tanous {
1632f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1633f12894f8SJason M. Bills     addMessageToErrorJson(
1634f12894f8SJason M. Bills         res.jsonValue,
1635f12894f8SJason M. Bills         nlohmann::json{
1636f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1637*cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryParameterOutOfRange"},
1638f12894f8SJason M. Bills             {"Message", "The value " + arg1 + " for the query parameter " +
1639f12894f8SJason M. Bills                             arg2 + " is out of range " + arg3 + "."},
1640f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1641f4c4dcf4SKowalski, Kamil             {"Resolution",
1642f12894f8SJason M. Bills              "Reduce the value for the query parameter to a value that is "
164366ac2b8cSJason M. Bills              "within range, such as a start or count value that is within "
164466ac2b8cSJason M. Bills              "bounds of the number of resources in a collection or a page that "
164566ac2b8cSJason M. Bills              "is within the range of valid pages."}});
1646f4c4dcf4SKowalski, Kamil }
1647f4c4dcf4SKowalski, Kamil 
1648f4c4dcf4SKowalski, Kamil } // namespace messages
1649f4c4dcf4SKowalski, Kamil 
1650d425c6f6SEd Tanous } // namespace redfish
1651