xref: /openbmc/bmcweb/features/redfish/src/error_messages.cpp (revision 66ac2b8ca5bfc8d2a3529969ee17f7e2eef2e7ff)
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*66ac2b8cSJason M. Bills         error["message"] = "A general error has occurred. See ExtendedInfo for "
62*66ac2b8cSJason M. Bills                            "more information.";
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"},
120f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceInUse"},
121*66ac2b8cSJason M. Bills             {"Message", "The change to the requested resource failed because "
122*66ac2b8cSJason M. Bills                         "the resource is in use or in transition."},
123f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
124*66ac2b8cSJason M. Bills             {"Resolution", "Remove the condition and resubmit the request if "
125*66ac2b8cSJason 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"},
142f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.MalformedJSON"},
143*66ac2b8cSJason M. Bills             {"Message", "The request body submitted was malformed JSON and "
144*66ac2b8cSJason 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"},
164f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceMissingAtURI"},
165f4c4dcf4SKowalski, Kamil             {"Message", "The resource at the URI " + arg1 + " was not found."},
166f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
167*66ac2b8cSJason M. Bills             {"Resolution", "Place a valid resource at the URI or correct the "
168*66ac2b8cSJason 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"},
188f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.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"},
194*66ac2b8cSJason M. Bills             {"Resolution",
195*66ac2b8cSJason M. Bills              "Correct the value for the parameter in the request body and "
196*66ac2b8cSJason 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"},
213f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.InternalError"},
214f12894f8SJason M. Bills             {"Message", "The request failed due to an internal service error.  "
215*66ac2b8cSJason M. Bills                         "The service is still operational."},
216f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
2171abe55efSEd Tanous             {"Resolution", "Resubmit the request.  If the problem persists, "
218*66ac2b8cSJason 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"},
235f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.InternalError"},
236f12894f8SJason M. Bills             {"Message", "The request failed due to an internal service error.  "
237*66ac2b8cSJason M. Bills                         "The service is still operational."},
238f12894f8SJason M. Bills             {"Severity", "Critical"},
239f12894f8SJason M. Bills             {"Resolution", "Resubmit the request.  If the problem persists, "
240*66ac2b8cSJason 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"},
258f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.UnrecognizedRequestBody"},
259f12894f8SJason M. Bills             {"Message", "The service detected a malformed request body that it "
260*66ac2b8cSJason 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"},
281f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.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 "
287*66ac2b8cSJason 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"},
305f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.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"},
310*66ac2b8cSJason M. Bills             {"Resolution", "Correct the invalid parameter and resubmit the "
311*66ac2b8cSJason 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"},
328f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceCannotBeDeleted"},
329f12894f8SJason M. Bills             {"Message", "The delete request failed because the resource "
330*66ac2b8cSJason 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"},
350f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyDuplicate"},
351f12894f8SJason M. Bills             {"Message",
352f12894f8SJason M. Bills              "The property " + arg1 + " was duplicated in the request."},
353f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
354*66ac2b8cSJason M. Bills             {"Resolution",
355*66ac2b8cSJason M. Bills              "Remove the duplicate property from the request body and resubmit "
356*66ac2b8cSJason 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"},
373f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.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"},
396f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.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 "
402*66ac2b8cSJason 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"},
420f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.AccountForSessionNoLongerExists"},
4211abe55efSEd Tanous             {"Message", "The account for the current session has been removed, "
422*66ac2b8cSJason 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"},
443f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.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 "
450*66ac2b8cSJason 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"},
468f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.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"},
473*66ac2b8cSJason M. Bills             {"Resolution",
474*66ac2b8cSJason M. Bills              "Correct the value for the property in the request body and "
475*66ac2b8cSJason 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"},
495f12894f8SJason M. Bills             {"MessageId", "Base.1.2.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"},
500*66ac2b8cSJason M. Bills             {"Resolution",
501*66ac2b8cSJason M. Bills              "Correct the value for the property in the request body and "
502*66ac2b8cSJason 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"},
521f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.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 "
527*66ac2b8cSJason 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"},
546f12894f8SJason M. Bills             {"MessageId", "Base.1.2.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 "
552*66ac2b8cSJason 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"},
570f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.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 "
575*66ac2b8cSJason 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"},
592f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ServiceInUnknownState"},
593*66ac2b8cSJason M. Bills             {"Message",
594*66ac2b8cSJason M. Bills              "The operation failed because the service is in an unknown state "
595*66ac2b8cSJason M. Bills              "and can no longer take incoming requests."},
596f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
597*66ac2b8cSJason M. Bills             {"Resolution", "Restart the service and resubmit the request if "
598*66ac2b8cSJason 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"},
615f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.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 "
622*66ac2b8cSJason M. Bills              "establish the event subscription or increase the limit of "
623*66ac2b8cSJason 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"},
641f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.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",
646*66ac2b8cSJason M. Bills              "Supply the action with the required parameter in the request "
647*66ac2b8cSJason 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"},
665f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.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
675f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyValueTypeError message into JSON
676f4c4dcf4SKowalski, Kamil  *
677f4c4dcf4SKowalski, Kamil  * See header file for more information
678f4c4dcf4SKowalski, Kamil  * @endinternal
679f4c4dcf4SKowalski, Kamil  */
680f12894f8SJason M. Bills void propertyValueTypeError(crow::Response& res, const std::string& arg1,
6811abe55efSEd Tanous                             const std::string& arg2)
6821abe55efSEd Tanous {
683f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
684f12894f8SJason M. Bills     addMessageToErrorJson(
685f12894f8SJason M. Bills         res.jsonValue,
686f12894f8SJason M. Bills         nlohmann::json{
687f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
688f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyValueTypeError"},
6891abe55efSEd Tanous             {"Message",
6901abe55efSEd Tanous              "The value " + arg1 + " for the property " + arg2 +
691f4c4dcf4SKowalski, Kamil                  " is of a different type than the property can accept."},
692f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
693*66ac2b8cSJason M. Bills             {"Resolution",
694*66ac2b8cSJason M. Bills              "Correct the value for the property in the request body and "
695*66ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
696f12894f8SJason M. Bills }
697f12894f8SJason M. Bills 
698f12894f8SJason M. Bills /**
699f12894f8SJason M. Bills  * @internal
700f12894f8SJason M. Bills  * @brief Formats PropertyValueTypeError message into JSON for the specified
701f12894f8SJason M. Bills  * property
702f12894f8SJason M. Bills  *
703f12894f8SJason M. Bills  * See header file for more information
704f12894f8SJason M. Bills  * @endinternal
705f12894f8SJason M. Bills  */
706f12894f8SJason M. Bills void propertyValueTypeError(crow::Response& res, const std::string& arg1,
707f12894f8SJason M. Bills                             const std::string& arg2,
708f12894f8SJason M. Bills                             const std::string& property)
709f12894f8SJason M. Bills {
710f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
711f12894f8SJason M. Bills     addMessageToJson(
712f12894f8SJason M. Bills         res.jsonValue,
713f12894f8SJason M. Bills         nlohmann::json{
714f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
715f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.PropertyValueTypeError"},
716f12894f8SJason M. Bills             {"Message",
717f12894f8SJason M. Bills              "The value " + arg1 + " for the property " + arg2 +
718f12894f8SJason M. Bills                  " is of a different type than the property can accept."},
719f12894f8SJason M. Bills             {"Severity", "Warning"},
720*66ac2b8cSJason M. Bills             {"Resolution",
721*66ac2b8cSJason M. Bills              "Correct the value for the property in the request body and "
722*66ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}},
723f12894f8SJason M. Bills         property);
724f4c4dcf4SKowalski, Kamil }
725f4c4dcf4SKowalski, Kamil 
726f4c4dcf4SKowalski, Kamil /**
727f4c4dcf4SKowalski, Kamil  * @internal
728f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceNotFound message into JSON
729f4c4dcf4SKowalski, Kamil  *
730f4c4dcf4SKowalski, Kamil  * See header file for more information
731f4c4dcf4SKowalski, Kamil  * @endinternal
732f4c4dcf4SKowalski, Kamil  */
733f12894f8SJason M. Bills void resourceNotFound(crow::Response& res, const std::string& arg1,
7341abe55efSEd Tanous                       const std::string& arg2)
7351abe55efSEd Tanous {
736f12894f8SJason M. Bills     res.result(boost::beast::http::status::not_found);
737f12894f8SJason M. Bills     addMessageToErrorJson(
738f12894f8SJason M. Bills         res.jsonValue,
739f12894f8SJason M. Bills         nlohmann::json{
740f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
741f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceNotFound"},
7421abe55efSEd Tanous             {"Message", "The requested resource of type " + arg1 + " named " +
7431abe55efSEd Tanous                             arg2 + " was not found."},
744f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
745f4c4dcf4SKowalski, Kamil             {"Resolution",
746f12894f8SJason M. Bills              "Provide a valid resource identifier and resubmit the request."}});
747f4c4dcf4SKowalski, Kamil }
748f4c4dcf4SKowalski, Kamil 
749f4c4dcf4SKowalski, Kamil /**
750f4c4dcf4SKowalski, Kamil  * @internal
751f4c4dcf4SKowalski, Kamil  * @brief Formats CouldNotEstablishConnection message into JSON
752f4c4dcf4SKowalski, Kamil  *
753f4c4dcf4SKowalski, Kamil  * See header file for more information
754f4c4dcf4SKowalski, Kamil  * @endinternal
755f4c4dcf4SKowalski, Kamil  */
756f12894f8SJason M. Bills void couldNotEstablishConnection(crow::Response& res, const std::string& arg1)
7571abe55efSEd Tanous {
758f12894f8SJason M. Bills     res.result(boost::beast::http::status::not_found);
759f12894f8SJason M. Bills     addMessageToErrorJson(
760f12894f8SJason M. Bills         res.jsonValue,
761f12894f8SJason M. Bills         nlohmann::json{
762f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
763f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.CouldNotEstablishConnection"},
7641abe55efSEd Tanous             {"Message",
765f12894f8SJason M. Bills              "The service failed to establish a Connection with the URI " +
766f12894f8SJason M. Bills                  arg1 + "."},
767f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
768*66ac2b8cSJason M. Bills             {"Resolution",
769*66ac2b8cSJason M. Bills              "Ensure that the URI contains a valid and reachable node name, "
770*66ac2b8cSJason M. Bills              "protocol information and other URI components."}});
771f4c4dcf4SKowalski, Kamil }
772f4c4dcf4SKowalski, Kamil 
773f4c4dcf4SKowalski, Kamil /**
774f4c4dcf4SKowalski, Kamil  * @internal
775f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyNotWritable message into JSON
776f4c4dcf4SKowalski, Kamil  *
777f4c4dcf4SKowalski, Kamil  * See header file for more information
778f4c4dcf4SKowalski, Kamil  * @endinternal
779f4c4dcf4SKowalski, Kamil  */
780f12894f8SJason M. Bills void propertyNotWritable(crow::Response& res, const std::string& arg1)
7811abe55efSEd Tanous {
782f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
783f12894f8SJason M. Bills     addMessageToErrorJson(
784f12894f8SJason M. Bills         res.jsonValue,
785f12894f8SJason M. Bills         nlohmann::json{
786f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
787f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyNotWritable"},
788f4c4dcf4SKowalski, Kamil             {"Message",
789f4c4dcf4SKowalski, Kamil              "The property " + arg1 +
790f4c4dcf4SKowalski, Kamil                  " is a read only property and cannot be assigned a value."},
791f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
792*66ac2b8cSJason M. Bills             {"Resolution", "Remove the property from the request body and "
793*66ac2b8cSJason M. Bills                            "resubmit the request if the operation failed."}});
794f12894f8SJason M. Bills }
795f12894f8SJason M. Bills 
796f12894f8SJason M. Bills /**
797f12894f8SJason M. Bills  * @internal
798f12894f8SJason M. Bills  * @brief Formats PropertyNotWritable message into JSON for the specified
799f12894f8SJason M. Bills  * property
800f12894f8SJason M. Bills  *
801f12894f8SJason M. Bills  * See header file for more information
802f12894f8SJason M. Bills  * @endinternal
803f12894f8SJason M. Bills  */
804f12894f8SJason M. Bills void propertyNotWritable(crow::Response& res, const std::string& arg1,
805f12894f8SJason M. Bills                          const std::string& property)
806f12894f8SJason M. Bills {
807f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
808f12894f8SJason M. Bills     addMessageToJson(
809f12894f8SJason M. Bills         res.jsonValue,
810f12894f8SJason M. Bills         nlohmann::json{
811f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
812f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.PropertyNotWritable"},
813f12894f8SJason M. Bills             {"Message",
814f12894f8SJason M. Bills              "The property " + arg1 +
815f12894f8SJason M. Bills                  " is a read only property and cannot be assigned a value."},
816f12894f8SJason M. Bills             {"Severity", "Warning"},
817*66ac2b8cSJason M. Bills             {"Resolution", "Remove the property from the request body and "
818*66ac2b8cSJason M. Bills                            "resubmit the request if the operation failed."}},
819f12894f8SJason M. Bills         property);
820f4c4dcf4SKowalski, Kamil }
821f4c4dcf4SKowalski, Kamil 
822f4c4dcf4SKowalski, Kamil /**
823f4c4dcf4SKowalski, Kamil  * @internal
824f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterValueTypeError message into JSON
825f4c4dcf4SKowalski, Kamil  *
826f4c4dcf4SKowalski, Kamil  * See header file for more information
827f4c4dcf4SKowalski, Kamil  * @endinternal
828f4c4dcf4SKowalski, Kamil  */
829f12894f8SJason M. Bills void queryParameterValueTypeError(crow::Response& res, const std::string& arg1,
8301abe55efSEd Tanous                                   const std::string& arg2)
8311abe55efSEd Tanous {
832f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
833f12894f8SJason M. Bills     addMessageToErrorJson(
834f12894f8SJason M. Bills         res.jsonValue,
835f12894f8SJason M. Bills         nlohmann::json{
836f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
837f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.QueryParameterValueTypeError"},
8381abe55efSEd Tanous             {"Message",
8391abe55efSEd Tanous              "The value " + arg1 + " for the query parameter " + arg2 +
840f4c4dcf4SKowalski, Kamil                  " is of a different type than the parameter can accept."},
841f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
842*66ac2b8cSJason M. Bills             {"Resolution",
843*66ac2b8cSJason M. Bills              "Correct the value for the query parameter in the request and "
844*66ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
845f4c4dcf4SKowalski, Kamil }
846f4c4dcf4SKowalski, Kamil 
847f4c4dcf4SKowalski, Kamil /**
848f4c4dcf4SKowalski, Kamil  * @internal
849f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceShuttingDown message into JSON
850f4c4dcf4SKowalski, Kamil  *
851f4c4dcf4SKowalski, Kamil  * See header file for more information
852f4c4dcf4SKowalski, Kamil  * @endinternal
853f4c4dcf4SKowalski, Kamil  */
854f12894f8SJason M. Bills void serviceShuttingDown(crow::Response& res)
8551abe55efSEd Tanous {
856f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
857f12894f8SJason M. Bills     addMessageToErrorJson(
858f12894f8SJason M. Bills         res.jsonValue,
859f12894f8SJason M. Bills         nlohmann::json{
860f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
861f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ServiceShuttingDown"},
862f12894f8SJason M. Bills             {"Message", "The operation failed because the service is shutting "
863*66ac2b8cSJason M. Bills                         "down and can no longer take incoming requests."},
864f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
865*66ac2b8cSJason M. Bills             {"Resolution", "When the service becomes available, resubmit the "
866*66ac2b8cSJason M. Bills                            "request if the operation failed."}});
867f4c4dcf4SKowalski, Kamil }
868f4c4dcf4SKowalski, Kamil 
869f4c4dcf4SKowalski, Kamil /**
870f4c4dcf4SKowalski, Kamil  * @internal
871f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterDuplicate message into JSON
872f4c4dcf4SKowalski, Kamil  *
873f4c4dcf4SKowalski, Kamil  * See header file for more information
874f4c4dcf4SKowalski, Kamil  * @endinternal
875f4c4dcf4SKowalski, Kamil  */
876f12894f8SJason M. Bills void actionParameterDuplicate(crow::Response& res, const std::string& arg1,
8771abe55efSEd Tanous                               const std::string& arg2)
8781abe55efSEd Tanous {
879f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
880f12894f8SJason M. Bills     addMessageToErrorJson(
881f12894f8SJason M. Bills         res.jsonValue,
882f12894f8SJason M. Bills         nlohmann::json{
883f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
884f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ActionParameterDuplicate"},
885f4c4dcf4SKowalski, Kamil             {"Message",
886f4c4dcf4SKowalski, Kamil              "The action " + arg1 +
8871abe55efSEd Tanous                  " was submitted with more than one value for the parameter " +
8881abe55efSEd Tanous                  arg2 + "."},
889f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
890*66ac2b8cSJason M. Bills             {"Resolution",
891*66ac2b8cSJason M. Bills              "Resubmit the action with only one instance of the parameter in "
892*66ac2b8cSJason M. Bills              "the request body if the operation failed."}});
893f4c4dcf4SKowalski, Kamil }
894f4c4dcf4SKowalski, Kamil 
895f4c4dcf4SKowalski, Kamil /**
896f4c4dcf4SKowalski, Kamil  * @internal
897f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterNotSupported message into JSON
898f4c4dcf4SKowalski, Kamil  *
899f4c4dcf4SKowalski, Kamil  * See header file for more information
900f4c4dcf4SKowalski, Kamil  * @endinternal
901f4c4dcf4SKowalski, Kamil  */
902f12894f8SJason M. Bills void actionParameterNotSupported(crow::Response& res, const std::string& arg1,
9031abe55efSEd Tanous                                  const std::string& arg2)
9041abe55efSEd Tanous {
905f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
906f12894f8SJason M. Bills     addMessageToErrorJson(
907f12894f8SJason M. Bills         res.jsonValue,
908f12894f8SJason M. Bills         nlohmann::json{
909f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
910f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ActionParameterNotSupported"},
911f4c4dcf4SKowalski, Kamil             {"Message", "The parameter " + arg1 + " for the action " + arg2 +
912f4c4dcf4SKowalski, Kamil                             " is not supported on the target resource."},
913f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
914*66ac2b8cSJason M. Bills             {"Resolution", "Remove the parameter supplied and resubmit the "
915*66ac2b8cSJason M. Bills                            "request if the operation failed."}});
916f4c4dcf4SKowalski, Kamil }
917f4c4dcf4SKowalski, Kamil 
918f4c4dcf4SKowalski, Kamil /**
919f4c4dcf4SKowalski, Kamil  * @internal
920f4c4dcf4SKowalski, Kamil  * @brief Formats SourceDoesNotSupportProtocol message into JSON
921f4c4dcf4SKowalski, Kamil  *
922f4c4dcf4SKowalski, Kamil  * See header file for more information
923f4c4dcf4SKowalski, Kamil  * @endinternal
924f4c4dcf4SKowalski, Kamil  */
925f12894f8SJason M. Bills void sourceDoesNotSupportProtocol(crow::Response& res, const std::string& arg1,
9261abe55efSEd Tanous                                   const std::string& arg2)
9271abe55efSEd Tanous {
928f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
929f12894f8SJason M. Bills     addMessageToErrorJson(
930f12894f8SJason M. Bills         res.jsonValue,
931f12894f8SJason M. Bills         nlohmann::json{
932f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
933f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.SourceDoesNotSupportProtocol"},
93455c7b7a2SEd Tanous             {"Message", "The other end of the Connection at " + arg1 +
9351abe55efSEd Tanous                             " does not support the specified protocol " + arg2 +
9361abe55efSEd Tanous                             "."},
937f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
938f12894f8SJason M. Bills             {"Resolution", "Change protocols or URIs. "}});
939f4c4dcf4SKowalski, Kamil }
940f4c4dcf4SKowalski, Kamil 
941f4c4dcf4SKowalski, Kamil /**
942f4c4dcf4SKowalski, Kamil  * @internal
943f4c4dcf4SKowalski, Kamil  * @brief Formats AccountRemoved message into JSON
944f4c4dcf4SKowalski, Kamil  *
945f4c4dcf4SKowalski, Kamil  * See header file for more information
946f4c4dcf4SKowalski, Kamil  * @endinternal
947f4c4dcf4SKowalski, Kamil  */
948f12894f8SJason M. Bills void accountRemoved(crow::Response& res)
9491abe55efSEd Tanous {
950f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
951f12894f8SJason M. Bills     addMessageToJsonRoot(
952f12894f8SJason M. Bills         res.jsonValue,
953f12894f8SJason M. Bills         nlohmann::json{
954f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
955f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.AccountRemoved"},
956f4c4dcf4SKowalski, Kamil             {"Message", "The account was successfully removed."},
957f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
958f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}});
959f4c4dcf4SKowalski, Kamil }
960f4c4dcf4SKowalski, Kamil 
961f4c4dcf4SKowalski, Kamil /**
962f4c4dcf4SKowalski, Kamil  * @internal
963f4c4dcf4SKowalski, Kamil  * @brief Formats AccessDenied message into JSON
964f4c4dcf4SKowalski, Kamil  *
965f4c4dcf4SKowalski, Kamil  * See header file for more information
966f4c4dcf4SKowalski, Kamil  * @endinternal
967f4c4dcf4SKowalski, Kamil  */
968f12894f8SJason M. Bills void accessDenied(crow::Response& res, const std::string& arg1)
9691abe55efSEd Tanous {
970f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
971f12894f8SJason M. Bills     addMessageToErrorJson(
972f12894f8SJason M. Bills         res.jsonValue,
973f12894f8SJason M. Bills         nlohmann::json{
974f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
975f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.AccessDenied"},
976f12894f8SJason M. Bills             {"Message", "While attempting to establish a Connection to " +
977f12894f8SJason M. Bills                             arg1 + ", the service denied access."},
978f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
979*66ac2b8cSJason M. Bills             {"Resolution", "Attempt to ensure that the URI is correct and that "
980*66ac2b8cSJason M. Bills                            "the service has the appropriate credentials."}});
981f4c4dcf4SKowalski, Kamil }
982f4c4dcf4SKowalski, Kamil 
983f4c4dcf4SKowalski, Kamil /**
984f4c4dcf4SKowalski, Kamil  * @internal
985f4c4dcf4SKowalski, Kamil  * @brief Formats QueryNotSupported message into JSON
986f4c4dcf4SKowalski, Kamil  *
987f4c4dcf4SKowalski, Kamil  * See header file for more information
988f4c4dcf4SKowalski, Kamil  * @endinternal
989f4c4dcf4SKowalski, Kamil  */
990f12894f8SJason M. Bills void queryNotSupported(crow::Response& res)
9911abe55efSEd Tanous {
992f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
993f12894f8SJason M. Bills     addMessageToErrorJson(
994f12894f8SJason M. Bills         res.jsonValue,
995f12894f8SJason M. Bills         nlohmann::json{
996f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
997f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.QueryNotSupported"},
998f4c4dcf4SKowalski, Kamil             {"Message", "Querying is not supported by the implementation."},
999f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1000*66ac2b8cSJason M. Bills             {"Resolution", "Remove the query parameters and resubmit the "
1001*66ac2b8cSJason M. Bills                            "request if the operation failed."}});
1002f4c4dcf4SKowalski, Kamil }
1003f4c4dcf4SKowalski, Kamil 
1004f4c4dcf4SKowalski, Kamil /**
1005f4c4dcf4SKowalski, Kamil  * @internal
1006f4c4dcf4SKowalski, Kamil  * @brief Formats CreateLimitReachedForResource message into JSON
1007f4c4dcf4SKowalski, Kamil  *
1008f4c4dcf4SKowalski, Kamil  * See header file for more information
1009f4c4dcf4SKowalski, Kamil  * @endinternal
1010f4c4dcf4SKowalski, Kamil  */
1011f12894f8SJason M. Bills void createLimitReachedForResource(crow::Response& res)
10121abe55efSEd Tanous {
1013f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1014f12894f8SJason M. Bills     addMessageToErrorJson(
1015f12894f8SJason M. Bills         res.jsonValue,
1016f12894f8SJason M. Bills         nlohmann::json{
1017f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1018f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.CreateLimitReachedForResource"},
10191abe55efSEd Tanous             {"Message", "The create operation failed because the resource has "
1020*66ac2b8cSJason M. Bills                         "reached the limit of possible resources."},
1021f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1022*66ac2b8cSJason M. Bills             {"Resolution",
1023*66ac2b8cSJason M. Bills              "Either delete resources and resubmit the request if the "
1024*66ac2b8cSJason M. Bills              "operation failed or do not resubmit the request."}});
1025f4c4dcf4SKowalski, Kamil }
1026f4c4dcf4SKowalski, Kamil 
1027f4c4dcf4SKowalski, Kamil /**
1028f4c4dcf4SKowalski, Kamil  * @internal
1029f4c4dcf4SKowalski, Kamil  * @brief Formats GeneralError message into JSON
1030f4c4dcf4SKowalski, Kamil  *
1031f4c4dcf4SKowalski, Kamil  * See header file for more information
1032f4c4dcf4SKowalski, Kamil  * @endinternal
1033f4c4dcf4SKowalski, Kamil  */
1034f12894f8SJason M. Bills void generalError(crow::Response& res)
10351abe55efSEd Tanous {
1036f12894f8SJason M. Bills     res.result(boost::beast::http::status::internal_server_error);
1037f12894f8SJason M. Bills     addMessageToErrorJson(
1038f12894f8SJason M. Bills         res.jsonValue,
1039f12894f8SJason M. Bills         nlohmann::json{
1040f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1041f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.GeneralError"},
1042*66ac2b8cSJason M. Bills             {"Message", "A general error has occurred. See ExtendedInfo for "
1043*66ac2b8cSJason M. Bills                         "more information."},
1044f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1045f12894f8SJason M. Bills             {"Resolution", "See ExtendedInfo for more information."}});
1046f4c4dcf4SKowalski, Kamil }
1047f4c4dcf4SKowalski, Kamil 
1048f4c4dcf4SKowalski, Kamil /**
1049f4c4dcf4SKowalski, Kamil  * @internal
1050f4c4dcf4SKowalski, Kamil  * @brief Formats Success message into JSON
1051f4c4dcf4SKowalski, Kamil  *
1052f4c4dcf4SKowalski, Kamil  * See header file for more information
1053f4c4dcf4SKowalski, Kamil  * @endinternal
1054f4c4dcf4SKowalski, Kamil  */
1055f12894f8SJason M. Bills void success(crow::Response& res)
10561abe55efSEd Tanous {
1057f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1058f12894f8SJason M. Bills     addMessageToJsonRoot(
1059f12894f8SJason M. Bills         res.jsonValue,
1060f12894f8SJason M. Bills         nlohmann::json{
1061f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1062f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.Success"},
1063f4c4dcf4SKowalski, Kamil             {"Message", "Successfully Completed Request"},
1064f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1065f12894f8SJason M. Bills             {"Resolution", "None"}});
1066f12894f8SJason M. Bills }
1067f12894f8SJason M. Bills 
1068f12894f8SJason M. Bills /**
1069f12894f8SJason M. Bills  * @internal
1070f12894f8SJason M. Bills  * @brief Formats Success message into JSON for the specified field
1071f12894f8SJason M. Bills  *
1072f12894f8SJason M. Bills  * See header file for more information
1073f12894f8SJason M. Bills  * @endinternal
1074f12894f8SJason M. Bills  */
1075f12894f8SJason M. Bills void success(crow::Response& res, const std::string& fieldPath)
1076f12894f8SJason M. Bills {
1077f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1078f12894f8SJason M. Bills     addMessageToJson(
1079f12894f8SJason M. Bills         res.jsonValue,
1080f12894f8SJason M. Bills         nlohmann::json{
1081f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1082f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.Success"},
1083f12894f8SJason M. Bills             {"Message", "Successfully Completed Request"},
1084f12894f8SJason M. Bills             {"Severity", "OK"},
1085f12894f8SJason M. Bills             {"Resolution", "None"}},
1086f12894f8SJason M. Bills         fieldPath);
1087f4c4dcf4SKowalski, Kamil }
1088f4c4dcf4SKowalski, Kamil 
1089f4c4dcf4SKowalski, Kamil /**
1090f4c4dcf4SKowalski, Kamil  * @internal
1091f4c4dcf4SKowalski, Kamil  * @brief Formats Created message into JSON
1092f4c4dcf4SKowalski, Kamil  *
1093f4c4dcf4SKowalski, Kamil  * See header file for more information
1094f4c4dcf4SKowalski, Kamil  * @endinternal
1095f4c4dcf4SKowalski, Kamil  */
1096f12894f8SJason M. Bills void created(crow::Response& res)
10971abe55efSEd Tanous {
1098f12894f8SJason M. Bills     res.result(boost::beast::http::status::created);
1099f12894f8SJason M. Bills     addMessageToJsonRoot(
1100f12894f8SJason M. Bills         res.jsonValue,
1101f12894f8SJason M. Bills         nlohmann::json{
1102f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1103f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.Created"},
1104f4c4dcf4SKowalski, Kamil             {"Message", "The resource has been created successfully"},
1105f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1106f12894f8SJason M. Bills             {"Resolution", "None"}});
1107f4c4dcf4SKowalski, Kamil }
1108f4c4dcf4SKowalski, Kamil 
1109f4c4dcf4SKowalski, Kamil /**
1110f4c4dcf4SKowalski, Kamil  * @internal
1111f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyUnknown message into JSON
1112f4c4dcf4SKowalski, Kamil  *
1113f4c4dcf4SKowalski, Kamil  * See header file for more information
1114f4c4dcf4SKowalski, Kamil  * @endinternal
1115f4c4dcf4SKowalski, Kamil  */
1116f12894f8SJason M. Bills void propertyUnknown(crow::Response& res, const std::string& arg1)
11171abe55efSEd Tanous {
1118f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1119f12894f8SJason M. Bills     addMessageToErrorJson(
1120f12894f8SJason M. Bills         res.jsonValue,
1121f12894f8SJason M. Bills         nlohmann::json{
1122f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1123f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyUnknown"},
1124f4c4dcf4SKowalski, Kamil             {"Message",
1125f4c4dcf4SKowalski, Kamil              "The property " + arg1 +
1126f4c4dcf4SKowalski, Kamil                  " is not in the list of valid properties for the resource."},
1127f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1128*66ac2b8cSJason M. Bills             {"Resolution",
1129*66ac2b8cSJason M. Bills              "Remove the unknown property from the request body and resubmit "
1130*66ac2b8cSJason M. Bills              "the request if the operation failed."}});
1131f12894f8SJason M. Bills }
1132f12894f8SJason M. Bills 
1133f12894f8SJason M. Bills /**
1134f12894f8SJason M. Bills  * @internal
1135f12894f8SJason M. Bills  * @brief Formats PropertyUnknown message into JSON for the specified property
1136f12894f8SJason M. Bills  *
1137f12894f8SJason M. Bills  * See header file for more information
1138f12894f8SJason M. Bills  * @endinternal
1139f12894f8SJason M. Bills  */
1140f12894f8SJason M. Bills void propertyUnknown(crow::Response& res, const std::string& arg1,
1141f12894f8SJason M. Bills                      const std::string& property)
1142f12894f8SJason M. Bills {
1143f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1144f12894f8SJason M. Bills     addMessageToJson(
1145f12894f8SJason M. Bills         res.jsonValue,
1146f12894f8SJason M. Bills         nlohmann::json{
1147f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1148f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.PropertyUnknown"},
1149f12894f8SJason M. Bills             {"Message",
1150f12894f8SJason M. Bills              "The property " + arg1 +
1151f12894f8SJason M. Bills                  " is not in the list of valid properties for the resource."},
1152f12894f8SJason M. Bills             {"Severity", "Warning"},
1153*66ac2b8cSJason M. Bills             {"Resolution",
1154*66ac2b8cSJason M. Bills              "Remove the unknown property from the request body and resubmit "
1155*66ac2b8cSJason M. Bills              "the request if the operation failed."}},
1156f12894f8SJason M. Bills         property);
1157f4c4dcf4SKowalski, Kamil }
1158f4c4dcf4SKowalski, Kamil 
1159f4c4dcf4SKowalski, Kamil /**
1160f4c4dcf4SKowalski, Kamil  * @internal
1161f4c4dcf4SKowalski, Kamil  * @brief Formats NoValidSession message into JSON
1162f4c4dcf4SKowalski, Kamil  *
1163f4c4dcf4SKowalski, Kamil  * See header file for more information
1164f4c4dcf4SKowalski, Kamil  * @endinternal
1165f4c4dcf4SKowalski, Kamil  */
1166f12894f8SJason M. Bills void noValidSession(crow::Response& res)
11671abe55efSEd Tanous {
1168f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1169f12894f8SJason M. Bills     addMessageToErrorJson(
1170f12894f8SJason M. Bills         res.jsonValue,
1171f12894f8SJason M. Bills         nlohmann::json{
1172f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1173f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.NoValidSession"},
1174f4c4dcf4SKowalski, Kamil             {"Message",
1175f4c4dcf4SKowalski, Kamil              "There is no valid session established with the implementation."},
1176f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
11771abe55efSEd Tanous             {"Resolution",
1178f12894f8SJason M. Bills              "Establish as session before attempting any operations."}});
1179f4c4dcf4SKowalski, Kamil }
1180f4c4dcf4SKowalski, Kamil 
1181f4c4dcf4SKowalski, Kamil /**
1182f4c4dcf4SKowalski, Kamil  * @internal
1183f4c4dcf4SKowalski, Kamil  * @brief Formats InvalidObject message into JSON
1184f4c4dcf4SKowalski, Kamil  *
1185f4c4dcf4SKowalski, Kamil  * See header file for more information
1186f4c4dcf4SKowalski, Kamil  * @endinternal
1187f4c4dcf4SKowalski, Kamil  */
1188f12894f8SJason M. Bills void invalidObject(crow::Response& res, const std::string& arg1)
11891abe55efSEd Tanous {
1190f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1191f12894f8SJason M. Bills     addMessageToErrorJson(
1192f12894f8SJason M. Bills         res.jsonValue,
1193f12894f8SJason M. Bills         nlohmann::json{
1194f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1195f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.InvalidObject"},
1196f4c4dcf4SKowalski, Kamil             {"Message", "The object at " + arg1 + " is invalid."},
1197f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1198f12894f8SJason M. Bills             {"Resolution",
1199*66ac2b8cSJason M. Bills              "Either the object is malformed or the URI is not correct.  "
1200*66ac2b8cSJason M. Bills              "Correct the condition and resubmit the request if it failed."}});
1201f4c4dcf4SKowalski, Kamil }
1202f4c4dcf4SKowalski, Kamil 
1203f4c4dcf4SKowalski, Kamil /**
1204f4c4dcf4SKowalski, Kamil  * @internal
1205f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceInStandby message into JSON
1206f4c4dcf4SKowalski, Kamil  *
1207f4c4dcf4SKowalski, Kamil  * See header file for more information
1208f4c4dcf4SKowalski, Kamil  * @endinternal
1209f4c4dcf4SKowalski, Kamil  */
1210f12894f8SJason M. Bills void resourceInStandby(crow::Response& res)
12111abe55efSEd Tanous {
1212f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1213f12894f8SJason M. Bills     addMessageToErrorJson(
1214f12894f8SJason M. Bills         res.jsonValue,
1215f12894f8SJason M. Bills         nlohmann::json{
1216f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1217f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceInStandby"},
1218*66ac2b8cSJason M. Bills             {"Message", "The request could not be performed because the "
1219*66ac2b8cSJason M. Bills                         "resource is in standby."},
1220f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1221f12894f8SJason M. Bills             {"Resolution", "Ensure that the resource is in the correct power "
1222*66ac2b8cSJason M. Bills                            "state and resubmit the request."}});
1223f4c4dcf4SKowalski, Kamil }
1224f4c4dcf4SKowalski, Kamil 
1225f4c4dcf4SKowalski, Kamil /**
1226f4c4dcf4SKowalski, Kamil  * @internal
1227f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterValueTypeError message into JSON
1228f4c4dcf4SKowalski, Kamil  *
1229f4c4dcf4SKowalski, Kamil  * See header file for more information
1230f4c4dcf4SKowalski, Kamil  * @endinternal
1231f4c4dcf4SKowalski, Kamil  */
1232f12894f8SJason M. Bills void actionParameterValueTypeError(crow::Response& res, const std::string& arg1,
1233f4c4dcf4SKowalski, Kamil                                    const std::string& arg2,
12341abe55efSEd Tanous                                    const std::string& arg3)
12351abe55efSEd Tanous {
1236f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1237f12894f8SJason M. Bills     addMessageToErrorJson(
1238f12894f8SJason M. Bills         res.jsonValue,
1239f12894f8SJason M. Bills         nlohmann::json{
1240f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1241f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ActionParameterValueTypeError"},
12421abe55efSEd Tanous             {"Message",
12431abe55efSEd Tanous              "The value " + arg1 + " for the parameter " + arg2 +
1244f4c4dcf4SKowalski, Kamil                  " in the action " + arg3 +
1245f4c4dcf4SKowalski, Kamil                  " is of a different type than the parameter can accept."},
1246f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1247*66ac2b8cSJason M. Bills             {"Resolution",
1248*66ac2b8cSJason M. Bills              "Correct the value for the parameter in the request body and "
1249*66ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
1250f4c4dcf4SKowalski, Kamil }
1251f4c4dcf4SKowalski, Kamil 
1252f4c4dcf4SKowalski, Kamil /**
1253f4c4dcf4SKowalski, Kamil  * @internal
1254f4c4dcf4SKowalski, Kamil  * @brief Formats SessionLimitExceeded message into JSON
1255f4c4dcf4SKowalski, Kamil  *
1256f4c4dcf4SKowalski, Kamil  * See header file for more information
1257f4c4dcf4SKowalski, Kamil  * @endinternal
1258f4c4dcf4SKowalski, Kamil  */
1259f12894f8SJason M. Bills void sessionLimitExceeded(crow::Response& res)
12601abe55efSEd Tanous {
1261f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1262f12894f8SJason M. Bills     addMessageToErrorJson(
1263f12894f8SJason M. Bills         res.jsonValue,
1264f12894f8SJason M. Bills         nlohmann::json{
1265f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1266f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.SessionLimitExceeded"},
1267f12894f8SJason M. Bills             {"Message", "The session establishment failed due to the number of "
1268*66ac2b8cSJason M. Bills                         "simultaneous sessions exceeding the limit of the "
1269*66ac2b8cSJason M. Bills                         "implementation."},
1270f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1271*66ac2b8cSJason M. Bills             {"Resolution", "Reduce the number of other sessions before trying "
1272*66ac2b8cSJason M. Bills                            "to establish the session or increase the limit of "
1273*66ac2b8cSJason M. Bills                            "simultaneous sessions (if supported)."}});
1274f4c4dcf4SKowalski, Kamil }
1275f4c4dcf4SKowalski, Kamil 
1276f4c4dcf4SKowalski, Kamil /**
1277f4c4dcf4SKowalski, Kamil  * @internal
1278f4c4dcf4SKowalski, Kamil  * @brief Formats ActionNotSupported message into JSON
1279f4c4dcf4SKowalski, Kamil  *
1280f4c4dcf4SKowalski, Kamil  * See header file for more information
1281f4c4dcf4SKowalski, Kamil  * @endinternal
1282f4c4dcf4SKowalski, Kamil  */
1283f12894f8SJason M. Bills void actionNotSupported(crow::Response& res, const std::string& arg1)
12841abe55efSEd Tanous {
1285f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1286f12894f8SJason M. Bills     addMessageToErrorJson(
1287f12894f8SJason M. Bills         res.jsonValue,
1288f12894f8SJason M. Bills         nlohmann::json{
1289f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1290f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ActionNotSupported"},
12911abe55efSEd Tanous             {"Message",
12921abe55efSEd Tanous              "The action " + arg1 + " is not supported by the resource."},
1293f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1294f4c4dcf4SKowalski, Kamil             {"Resolution",
1295f4c4dcf4SKowalski, Kamil              "The action supplied cannot be resubmitted to the implementation. "
1296f12894f8SJason M. Bills              " Perhaps the action was invalid, the wrong resource was the "
1297*66ac2b8cSJason M. Bills              "target or the implementation documentation may be of "
1298*66ac2b8cSJason M. Bills              "assistance."}});
1299f4c4dcf4SKowalski, Kamil }
1300f4c4dcf4SKowalski, Kamil 
1301f4c4dcf4SKowalski, Kamil /**
1302f4c4dcf4SKowalski, Kamil  * @internal
1303f4c4dcf4SKowalski, Kamil  * @brief Formats InvalidIndex message into JSON
1304f4c4dcf4SKowalski, Kamil  *
1305f4c4dcf4SKowalski, Kamil  * See header file for more information
1306f4c4dcf4SKowalski, Kamil  * @endinternal
1307f4c4dcf4SKowalski, Kamil  */
1308f12894f8SJason M. Bills void invalidIndex(crow::Response& res, const int& arg1)
13091abe55efSEd Tanous {
1310f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1311f12894f8SJason M. Bills     addMessageToErrorJson(
1312f12894f8SJason M. Bills         res.jsonValue,
1313f12894f8SJason M. Bills         nlohmann::json{
1314f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1315f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.InvalidIndex"},
131655c7b7a2SEd Tanous             {"Message", "The index " + std::to_string(arg1) +
1317f4c4dcf4SKowalski, Kamil                             " is not a valid offset into the array."},
1318f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1319f12894f8SJason M. Bills             {"Resolution", "Verify the index value provided is within the "
1320f12894f8SJason M. Bills                            "bounds of the array."}});
1321f4c4dcf4SKowalski, Kamil }
1322f4c4dcf4SKowalski, Kamil 
1323f4c4dcf4SKowalski, Kamil /**
1324f4c4dcf4SKowalski, Kamil  * @internal
1325f4c4dcf4SKowalski, Kamil  * @brief Formats EmptyJSON message into JSON
1326f4c4dcf4SKowalski, Kamil  *
1327f4c4dcf4SKowalski, Kamil  * See header file for more information
1328f4c4dcf4SKowalski, Kamil  * @endinternal
1329f4c4dcf4SKowalski, Kamil  */
1330f12894f8SJason M. Bills void emptyJSON(crow::Response& res)
13311abe55efSEd Tanous {
1332f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1333f12894f8SJason M. Bills     addMessageToErrorJson(
1334f12894f8SJason M. Bills         res.jsonValue,
1335f12894f8SJason M. Bills         nlohmann::json{
1336f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1337f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.EmptyJSON"},
1338f12894f8SJason M. Bills             {"Message", "The request body submitted contained an empty JSON "
1339*66ac2b8cSJason M. Bills                         "object and the service is unable to process it."},
1340f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1341f4c4dcf4SKowalski, Kamil             {"Resolution",
1342f12894f8SJason M. Bills              "Add properties in the JSON object and resubmit the request."}});
1343f4c4dcf4SKowalski, Kamil }
1344f4c4dcf4SKowalski, Kamil 
1345f4c4dcf4SKowalski, Kamil /**
1346f4c4dcf4SKowalski, Kamil  * @internal
1347f4c4dcf4SKowalski, Kamil  * @brief Formats QueryNotSupportedOnResource message into JSON
1348f4c4dcf4SKowalski, Kamil  *
1349f4c4dcf4SKowalski, Kamil  * See header file for more information
1350f4c4dcf4SKowalski, Kamil  * @endinternal
1351f4c4dcf4SKowalski, Kamil  */
1352f12894f8SJason M. Bills void queryNotSupportedOnResource(crow::Response& res)
13531abe55efSEd Tanous {
1354f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1355f12894f8SJason M. Bills     addMessageToErrorJson(
1356f12894f8SJason M. Bills         res.jsonValue,
1357f12894f8SJason M. Bills         nlohmann::json{
1358f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1359f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.QueryNotSupportedOnResource"},
1360f4c4dcf4SKowalski, Kamil             {"Message", "Querying is not supported on the requested resource."},
1361f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1362*66ac2b8cSJason M. Bills             {"Resolution", "Remove the query parameters and resubmit the "
1363*66ac2b8cSJason M. Bills                            "request if the operation failed."}});
1364f4c4dcf4SKowalski, Kamil }
1365f4c4dcf4SKowalski, Kamil 
1366f4c4dcf4SKowalski, Kamil /**
1367f4c4dcf4SKowalski, Kamil  * @internal
1368f4c4dcf4SKowalski, Kamil  * @brief Formats InsufficientPrivilege message into JSON
1369f4c4dcf4SKowalski, Kamil  *
1370f4c4dcf4SKowalski, Kamil  * See header file for more information
1371f4c4dcf4SKowalski, Kamil  * @endinternal
1372f4c4dcf4SKowalski, Kamil  */
1373f12894f8SJason M. Bills void insufficientPrivilege(crow::Response& res)
13741abe55efSEd Tanous {
1375f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1376f12894f8SJason M. Bills     addMessageToErrorJson(
1377f12894f8SJason M. Bills         res.jsonValue,
1378f12894f8SJason M. Bills         nlohmann::json{
1379f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1380f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.InsufficientPrivilege"},
1381*66ac2b8cSJason M. Bills             {"Message", "There are insufficient privileges for the account or "
1382*66ac2b8cSJason M. Bills                         "credentials associated with the current session to "
1383*66ac2b8cSJason M. Bills                         "perform the requested operation."},
1384f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1385f4c4dcf4SKowalski, Kamil             {"Resolution",
1386f12894f8SJason M. Bills              "Either abandon the operation or change the associated access "
1387*66ac2b8cSJason M. Bills              "rights and resubmit the request if the operation failed."}});
1388f4c4dcf4SKowalski, Kamil }
1389f4c4dcf4SKowalski, Kamil 
1390f4c4dcf4SKowalski, Kamil /**
1391f4c4dcf4SKowalski, Kamil  * @internal
1392f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyValueModified message into JSON
1393f4c4dcf4SKowalski, Kamil  *
1394f4c4dcf4SKowalski, Kamil  * See header file for more information
1395f4c4dcf4SKowalski, Kamil  * @endinternal
1396f4c4dcf4SKowalski, Kamil  */
1397f12894f8SJason M. Bills void propertyValueModified(crow::Response& res, const std::string& arg1,
1398f12894f8SJason M. Bills                            const std::string& arg2,
1399f12894f8SJason M. Bills                            const std::string& fieldPath)
14001abe55efSEd Tanous {
1401f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1402f12894f8SJason M. Bills     addMessageToJson(
1403f12894f8SJason M. Bills         res.jsonValue,
1404f12894f8SJason M. Bills         nlohmann::json{
1405f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1406f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyValueModified"},
1407f12894f8SJason M. Bills             {"Message", "The property " + arg1 + " was assigned the value " +
1408f12894f8SJason M. Bills                             arg2 + " due to modification by the service."},
1409f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1410f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}},
1411f12894f8SJason M. Bills         fieldPath);
1412f4c4dcf4SKowalski, Kamil }
1413f4c4dcf4SKowalski, Kamil 
1414f4c4dcf4SKowalski, Kamil /**
1415f4c4dcf4SKowalski, Kamil  * @internal
1416f4c4dcf4SKowalski, Kamil  * @brief Formats AccountNotModified message into JSON
1417f4c4dcf4SKowalski, Kamil  *
1418f4c4dcf4SKowalski, Kamil  * See header file for more information
1419f4c4dcf4SKowalski, Kamil  * @endinternal
1420f4c4dcf4SKowalski, Kamil  */
1421f12894f8SJason M. Bills void accountNotModified(crow::Response& res)
14221abe55efSEd Tanous {
1423f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1424f12894f8SJason M. Bills     addMessageToErrorJson(
1425f12894f8SJason M. Bills         res.jsonValue,
1426f12894f8SJason M. Bills         nlohmann::json{
1427f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1428f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.AccountNotModified"},
1429f4c4dcf4SKowalski, Kamil             {"Message", "The account modification request failed."},
1430f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1431f12894f8SJason M. Bills             {"Resolution", "The modification may have failed due to permission "
1432*66ac2b8cSJason M. Bills                            "issues or issues with the request body."}});
1433f4c4dcf4SKowalski, Kamil }
1434f4c4dcf4SKowalski, Kamil 
1435f4c4dcf4SKowalski, Kamil /**
1436f4c4dcf4SKowalski, Kamil  * @internal
1437f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterValueFormatError message into JSON
1438f4c4dcf4SKowalski, Kamil  *
1439f4c4dcf4SKowalski, Kamil  * See header file for more information
1440f4c4dcf4SKowalski, Kamil  * @endinternal
1441f4c4dcf4SKowalski, Kamil  */
1442f12894f8SJason M. Bills void queryParameterValueFormatError(crow::Response& res,
1443f12894f8SJason M. Bills                                     const std::string& arg1,
14441abe55efSEd Tanous                                     const std::string& arg2)
14451abe55efSEd Tanous {
1446f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1447f12894f8SJason M. Bills     addMessageToErrorJson(
1448f12894f8SJason M. Bills         res.jsonValue,
1449f12894f8SJason M. Bills         nlohmann::json{
1450f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1451f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.QueryParameterValueFormatError"},
1452f4c4dcf4SKowalski, Kamil             {"Message",
1453f4c4dcf4SKowalski, Kamil              "The value " + arg1 + " for the parameter " + arg2 +
1454f4c4dcf4SKowalski, Kamil                  " is of a different format than the parameter can accept."},
1455f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1456*66ac2b8cSJason M. Bills             {"Resolution",
1457*66ac2b8cSJason M. Bills              "Correct the value for the query parameter in the request and "
1458*66ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
1459f4c4dcf4SKowalski, Kamil }
1460f4c4dcf4SKowalski, Kamil 
1461f4c4dcf4SKowalski, Kamil /**
1462f4c4dcf4SKowalski, Kamil  * @internal
1463f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyMissing message into JSON
1464f4c4dcf4SKowalski, Kamil  *
1465f4c4dcf4SKowalski, Kamil  * See header file for more information
1466f4c4dcf4SKowalski, Kamil  * @endinternal
1467f4c4dcf4SKowalski, Kamil  */
1468f12894f8SJason M. Bills void propertyMissing(crow::Response& res, const std::string& arg1)
14691abe55efSEd Tanous {
1470f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1471f12894f8SJason M. Bills     addMessageToErrorJson(
1472f12894f8SJason M. Bills         res.jsonValue,
1473f12894f8SJason M. Bills         nlohmann::json{
1474f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1475f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyMissing"},
1476f12894f8SJason M. Bills             {"Message", "The property " + arg1 +
1477f12894f8SJason M. Bills                             " is a required property and must be included in "
1478f12894f8SJason M. Bills                             "the request."},
1479f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1480f12894f8SJason M. Bills             {"Resolution",
1481*66ac2b8cSJason M. Bills              "Ensure that the property is in the request body and has a valid "
1482*66ac2b8cSJason M. Bills              "value and resubmit the request if the operation failed."}});
1483f12894f8SJason M. Bills }
1484f12894f8SJason M. Bills 
1485f12894f8SJason M. Bills /**
1486f12894f8SJason M. Bills  * @internal
1487f12894f8SJason M. Bills  * @brief Formats PropertyMissing message into JSON for the specified property
1488f12894f8SJason M. Bills  *
1489f12894f8SJason M. Bills  * See header file for more information
1490f12894f8SJason M. Bills  * @endinternal
1491f12894f8SJason M. Bills  */
1492f12894f8SJason M. Bills void propertyMissing(crow::Response& res, const std::string& arg1,
1493f12894f8SJason M. Bills                      const std::string& property)
1494f12894f8SJason M. Bills {
1495f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1496f12894f8SJason M. Bills     addMessageToJson(
1497f12894f8SJason M. Bills         res.jsonValue,
1498f12894f8SJason M. Bills         nlohmann::json{
1499f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1500f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.PropertyMissing"},
1501f12894f8SJason M. Bills             {"Message", "The property " + arg1 +
1502f12894f8SJason M. Bills                             " is a required property and must be included in "
1503f12894f8SJason M. Bills                             "the request."},
1504f12894f8SJason M. Bills             {"Severity", "Warning"},
1505f12894f8SJason M. Bills             {"Resolution",
1506*66ac2b8cSJason M. Bills              "Ensure that the property is in the request body and has a valid "
1507*66ac2b8cSJason M. Bills              "value and resubmit the request if the operation failed."}},
1508f12894f8SJason M. Bills         property);
1509f4c4dcf4SKowalski, Kamil }
1510f4c4dcf4SKowalski, Kamil 
1511f4c4dcf4SKowalski, Kamil /**
1512f4c4dcf4SKowalski, Kamil  * @internal
1513f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceExhaustion message into JSON
1514f4c4dcf4SKowalski, Kamil  *
1515f4c4dcf4SKowalski, Kamil  * See header file for more information
1516f4c4dcf4SKowalski, Kamil  * @endinternal
1517f4c4dcf4SKowalski, Kamil  */
1518f12894f8SJason M. Bills void resourceExhaustion(crow::Response& res, const std::string& arg1)
15191abe55efSEd Tanous {
1520f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1521f12894f8SJason M. Bills     addMessageToErrorJson(
1522f12894f8SJason M. Bills         res.jsonValue,
1523f12894f8SJason M. Bills         nlohmann::json{
1524f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1525f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceExhaustion"},
1526d425c6f6SEd Tanous             {"Message", "The resource " + arg1 +
1527*66ac2b8cSJason M. Bills                             " was unable to satisfy the request due to "
1528*66ac2b8cSJason M. Bills                             "unavailability of resources."},
1529f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1530f12894f8SJason M. Bills             {"Resolution", "Ensure that the resources are available and "
1531f12894f8SJason M. Bills                            "resubmit the request."}});
1532f4c4dcf4SKowalski, Kamil }
1533f4c4dcf4SKowalski, Kamil 
1534f4c4dcf4SKowalski, Kamil /**
1535f4c4dcf4SKowalski, Kamil  * @internal
1536f4c4dcf4SKowalski, Kamil  * @brief Formats AccountModified message into JSON
1537f4c4dcf4SKowalski, Kamil  *
1538f4c4dcf4SKowalski, Kamil  * See header file for more information
1539f4c4dcf4SKowalski, Kamil  * @endinternal
1540f4c4dcf4SKowalski, Kamil  */
1541f12894f8SJason M. Bills void accountModified(crow::Response& res, const std::string& fieldPath)
15421abe55efSEd Tanous {
1543f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1544f12894f8SJason M. Bills     addMessageToJson(
1545f12894f8SJason M. Bills         res.jsonValue,
1546f12894f8SJason M. Bills         nlohmann::json{
1547f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1548f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.AccountModified"},
1549f4c4dcf4SKowalski, Kamil             {"Message", "The account was successfully modified."},
1550f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1551f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}},
1552f12894f8SJason M. Bills         fieldPath);
1553f4c4dcf4SKowalski, Kamil }
1554f4c4dcf4SKowalski, Kamil 
1555f4c4dcf4SKowalski, Kamil /**
1556f4c4dcf4SKowalski, Kamil  * @internal
1557f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterOutOfRange message into JSON
1558f4c4dcf4SKowalski, Kamil  *
1559f4c4dcf4SKowalski, Kamil  * See header file for more information
1560f4c4dcf4SKowalski, Kamil  * @endinternal
1561f4c4dcf4SKowalski, Kamil  */
1562f12894f8SJason M. Bills void queryParameterOutOfRange(crow::Response& res, const std::string& arg1,
1563f12894f8SJason M. Bills                               const std::string& arg2, const std::string& arg3)
15641abe55efSEd Tanous {
1565f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1566f12894f8SJason M. Bills     addMessageToErrorJson(
1567f12894f8SJason M. Bills         res.jsonValue,
1568f12894f8SJason M. Bills         nlohmann::json{
1569f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1570f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.QueryParameterOutOfRange"},
1571f12894f8SJason M. Bills             {"Message", "The value " + arg1 + " for the query parameter " +
1572f12894f8SJason M. Bills                             arg2 + " is out of range " + arg3 + "."},
1573f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1574f4c4dcf4SKowalski, Kamil             {"Resolution",
1575f12894f8SJason M. Bills              "Reduce the value for the query parameter to a value that is "
1576*66ac2b8cSJason M. Bills              "within range, such as a start or count value that is within "
1577*66ac2b8cSJason M. Bills              "bounds of the number of resources in a collection or a page that "
1578*66ac2b8cSJason M. Bills              "is within the range of valid pages."}});
1579f4c4dcf4SKowalski, Kamil }
1580f4c4dcf4SKowalski, Kamil 
1581f4c4dcf4SKowalski, Kamil } // namespace messages
1582f4c4dcf4SKowalski, Kamil 
1583d425c6f6SEd Tanous } // namespace redfish
1584