xref: /openbmc/bmcweb/features/redfish/src/error_messages.cpp (revision f12894f8bd7fc26ffa16e5a89072e6c19095f866)
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 
26*f12894f8SJason 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";
61f4c4dcf4SKowalski, Kamil         error["message"] =
62f4c4dcf4SKowalski, Kamil             "A general error has occurred. See ExtendedInfo for more"
63f4c4dcf4SKowalski, Kamil             "information.";
64f4c4dcf4SKowalski, Kamil     }
65f4c4dcf4SKowalski, Kamil 
66f4c4dcf4SKowalski, Kamil     // This check could technically be done in in the default construction
67f4c4dcf4SKowalski, Kamil     // branch above, but because we need the pointer to the extended info field
68f4c4dcf4SKowalski, Kamil     // anyway, it's more efficient to do it here.
6955c7b7a2SEd Tanous     auto& extended_info = error[messages::messageAnnotation];
701abe55efSEd Tanous     if (!extended_info.is_array())
711abe55efSEd Tanous     {
72f4c4dcf4SKowalski, Kamil         extended_info = nlohmann::json::array();
73f4c4dcf4SKowalski, Kamil     }
74f4c4dcf4SKowalski, Kamil 
75f4c4dcf4SKowalski, Kamil     extended_info.push_back(message);
76f4c4dcf4SKowalski, Kamil }
77f4c4dcf4SKowalski, Kamil 
78*f12894f8SJason M. Bills static void addMessageToJsonRoot(nlohmann::json& target,
79*f12894f8SJason M. Bills                                  const nlohmann::json& message)
801abe55efSEd Tanous {
811abe55efSEd Tanous     if (!target[messages::messageAnnotation].is_array())
821abe55efSEd Tanous     {
83f4c4dcf4SKowalski, Kamil         // Force object to be an array
8455c7b7a2SEd Tanous         target[messages::messageAnnotation] = nlohmann::json::array();
85f4c4dcf4SKowalski, Kamil     }
86f4c4dcf4SKowalski, Kamil 
8755c7b7a2SEd Tanous     target[messages::messageAnnotation].push_back(message);
88f4c4dcf4SKowalski, Kamil }
89f4c4dcf4SKowalski, Kamil 
90*f12894f8SJason M. Bills static void addMessageToJson(nlohmann::json& target,
91*f12894f8SJason M. Bills                              const nlohmann::json& message,
921abe55efSEd Tanous                              const std::string& fieldPath)
931abe55efSEd Tanous {
94d425c6f6SEd Tanous     nlohmann::json_pointer<nlohmann::json> extendedInfo(
9555c7b7a2SEd Tanous         fieldPath + messages::messageAnnotation);
96f4c4dcf4SKowalski, Kamil 
971abe55efSEd Tanous     if (!target[extendedInfo].is_array())
981abe55efSEd Tanous     {
99f4c4dcf4SKowalski, Kamil         // Force object to be an array
100f4c4dcf4SKowalski, Kamil         target[extendedInfo] = nlohmann::json::array();
101f4c4dcf4SKowalski, Kamil     }
102f4c4dcf4SKowalski, Kamil 
103f4c4dcf4SKowalski, Kamil     // Object exists and it is an array so we can just push in the message
104f4c4dcf4SKowalski, Kamil     target[extendedInfo].push_back(message);
105f4c4dcf4SKowalski, Kamil }
106f4c4dcf4SKowalski, Kamil 
107f4c4dcf4SKowalski, Kamil /**
108f4c4dcf4SKowalski, Kamil  * @internal
109f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceInUse message into JSON
110f4c4dcf4SKowalski, Kamil  *
111f4c4dcf4SKowalski, Kamil  * See header file for more information
112f4c4dcf4SKowalski, Kamil  * @endinternal
113f4c4dcf4SKowalski, Kamil  */
114*f12894f8SJason M. Bills void resourceInUse(crow::Response& res)
1151abe55efSEd Tanous {
116*f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
117*f12894f8SJason M. Bills     addMessageToErrorJson(
118*f12894f8SJason M. Bills         res.jsonValue,
119*f12894f8SJason M. Bills         nlohmann::json{
120f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
121f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceInUse"},
122*f12894f8SJason M. Bills             {"Message",
123*f12894f8SJason M. Bills              "The change to the requested resource failed because the "
1241abe55efSEd Tanous              "resource is in "
125f4c4dcf4SKowalski, Kamil              "use or in transition."},
126f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
127f4c4dcf4SKowalski, Kamil             {"Resolution",
128f4c4dcf4SKowalski, Kamil              "Remove the condition and resubmit the request if the operation "
129*f12894f8SJason M. Bills              "failed."}});
130f4c4dcf4SKowalski, Kamil }
131f4c4dcf4SKowalski, Kamil 
132f4c4dcf4SKowalski, Kamil /**
133f4c4dcf4SKowalski, Kamil  * @internal
134f4c4dcf4SKowalski, Kamil  * @brief Formats MalformedJSON message into JSON
135f4c4dcf4SKowalski, Kamil  *
136f4c4dcf4SKowalski, Kamil  * See header file for more information
137f4c4dcf4SKowalski, Kamil  * @endinternal
138f4c4dcf4SKowalski, Kamil  */
139*f12894f8SJason M. Bills void malformedJSON(crow::Response& res)
1401abe55efSEd Tanous {
141*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
142*f12894f8SJason M. Bills     addMessageToErrorJson(
143*f12894f8SJason M. Bills         res.jsonValue,
144*f12894f8SJason M. Bills         nlohmann::json{
145f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
146f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.MalformedJSON"},
147*f12894f8SJason M. Bills             {"Message",
148*f12894f8SJason M. Bills              "The request body submitted was malformed JSON and could "
1491abe55efSEd Tanous              "not be parsed "
150f4c4dcf4SKowalski, Kamil              "by the receiving service."},
151f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1521abe55efSEd Tanous             {"Resolution", "Ensure that the request body is valid JSON and "
153*f12894f8SJason M. Bills                            "resubmit the request."}});
154f4c4dcf4SKowalski, Kamil }
155f4c4dcf4SKowalski, Kamil 
156f4c4dcf4SKowalski, Kamil /**
157f4c4dcf4SKowalski, Kamil  * @internal
158f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceMissingAtURI message into JSON
159f4c4dcf4SKowalski, Kamil  *
160f4c4dcf4SKowalski, Kamil  * See header file for more information
161f4c4dcf4SKowalski, Kamil  * @endinternal
162f4c4dcf4SKowalski, Kamil  */
163*f12894f8SJason M. Bills void resourceMissingAtURI(crow::Response& res, const std::string& arg1)
1641abe55efSEd Tanous {
165*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
166*f12894f8SJason M. Bills     addMessageToErrorJson(
167*f12894f8SJason M. Bills         res.jsonValue,
168*f12894f8SJason M. Bills         nlohmann::json{
169f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
170f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceMissingAtURI"},
171f4c4dcf4SKowalski, Kamil             {"Message", "The resource at the URI " + arg1 + " was not found."},
172f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
173*f12894f8SJason M. Bills             {"Resolution",
174*f12894f8SJason M. Bills              "Place a valid resource at the URI or correct the URI "
1751abe55efSEd Tanous              "and resubmit the "
176*f12894f8SJason M. Bills              "request."}});
177f4c4dcf4SKowalski, Kamil }
178f4c4dcf4SKowalski, Kamil 
179f4c4dcf4SKowalski, Kamil /**
180f4c4dcf4SKowalski, Kamil  * @internal
181f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterValueFormatError message into JSON
182f4c4dcf4SKowalski, Kamil  *
183f4c4dcf4SKowalski, Kamil  * See header file for more information
184f4c4dcf4SKowalski, Kamil  * @endinternal
185f4c4dcf4SKowalski, Kamil  */
186*f12894f8SJason M. Bills void actionParameterValueFormatError(crow::Response& res,
187*f12894f8SJason M. Bills                                      const std::string& arg1,
188f4c4dcf4SKowalski, Kamil                                      const std::string& arg2,
1891abe55efSEd Tanous                                      const std::string& arg3)
1901abe55efSEd Tanous {
191*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
192*f12894f8SJason M. Bills     addMessageToErrorJson(
193*f12894f8SJason M. Bills         res.jsonValue,
194*f12894f8SJason M. Bills         nlohmann::json{
195f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
196f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ActionParameterValueFormatError"},
197f4c4dcf4SKowalski, Kamil             {"Message",
1981abe55efSEd Tanous              "The value " + arg1 + " for the parameter " + arg2 +
1991abe55efSEd Tanous                  " in the action " + arg3 +
2001abe55efSEd Tanous                  " is of a different format than the parameter can accept."},
201f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
202*f12894f8SJason M. Bills             {"Resolution", "Correct the value for the parameter in the request "
203*f12894f8SJason M. Bills                            "body and resubmit "
204*f12894f8SJason M. Bills                            "the request if the operation failed."}});
205f4c4dcf4SKowalski, Kamil }
206f4c4dcf4SKowalski, Kamil 
207f4c4dcf4SKowalski, Kamil /**
208f4c4dcf4SKowalski, Kamil  * @internal
209f4c4dcf4SKowalski, Kamil  * @brief Formats InternalError message into JSON
210f4c4dcf4SKowalski, Kamil  *
211f4c4dcf4SKowalski, Kamil  * See header file for more information
212f4c4dcf4SKowalski, Kamil  * @endinternal
213f4c4dcf4SKowalski, Kamil  */
214*f12894f8SJason M. Bills void internalError(crow::Response& res)
2151abe55efSEd Tanous {
216*f12894f8SJason M. Bills     res.result(boost::beast::http::status::internal_server_error);
217*f12894f8SJason M. Bills     addMessageToErrorJson(
218*f12894f8SJason M. Bills         res.jsonValue,
219*f12894f8SJason M. Bills         nlohmann::json{
220f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
221f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.InternalError"},
222*f12894f8SJason M. Bills             {"Message", "The request failed due to an internal service error.  "
223*f12894f8SJason M. Bills                         "The service is "
224f4c4dcf4SKowalski, Kamil                         "still operational."},
225f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
2261abe55efSEd Tanous             {"Resolution", "Resubmit the request.  If the problem persists, "
2271abe55efSEd Tanous                            "consider resetting the "
228*f12894f8SJason M. Bills                            "service."}});
229*f12894f8SJason M. Bills }
230*f12894f8SJason M. Bills 
231*f12894f8SJason M. Bills /**
232*f12894f8SJason M. Bills  * @internal
233*f12894f8SJason M. Bills  * @brief Formats InternalError message into JSON for the specified field
234*f12894f8SJason M. Bills  *
235*f12894f8SJason M. Bills  * See header file for more information
236*f12894f8SJason M. Bills  * @endinternal
237*f12894f8SJason M. Bills  */
238*f12894f8SJason M. Bills void internalError(crow::Response& res, const std::string& field)
239*f12894f8SJason M. Bills {
240*f12894f8SJason M. Bills     res.result(boost::beast::http::status::internal_server_error);
241*f12894f8SJason M. Bills     addMessageToJson(
242*f12894f8SJason M. Bills         res.jsonValue,
243*f12894f8SJason M. Bills         nlohmann::json{
244*f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
245*f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.InternalError"},
246*f12894f8SJason M. Bills             {"Message", "The request failed due to an internal service error.  "
247*f12894f8SJason M. Bills                         "The service is "
248*f12894f8SJason M. Bills                         "still operational."},
249*f12894f8SJason M. Bills             {"Severity", "Critical"},
250*f12894f8SJason M. Bills             {"Resolution", "Resubmit the request.  If the problem persists, "
251*f12894f8SJason M. Bills                            "consider resetting the "
252*f12894f8SJason M. Bills                            "service."}},
253*f12894f8SJason M. Bills         field);
254f4c4dcf4SKowalski, Kamil }
255f4c4dcf4SKowalski, Kamil 
256f4c4dcf4SKowalski, Kamil /**
257f4c4dcf4SKowalski, Kamil  * @internal
258f4c4dcf4SKowalski, Kamil  * @brief Formats UnrecognizedRequestBody message into JSON
259f4c4dcf4SKowalski, Kamil  *
260f4c4dcf4SKowalski, Kamil  * See header file for more information
261f4c4dcf4SKowalski, Kamil  * @endinternal
262f4c4dcf4SKowalski, Kamil  */
263*f12894f8SJason M. Bills void unrecognizedRequestBody(crow::Response& res)
2641abe55efSEd Tanous {
265*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
266*f12894f8SJason M. Bills     addMessageToErrorJson(
267*f12894f8SJason M. Bills         res.jsonValue,
268*f12894f8SJason M. Bills         nlohmann::json{
269f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
270f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.UnrecognizedRequestBody"},
271*f12894f8SJason M. Bills             {"Message", "The service detected a malformed request body that it "
272*f12894f8SJason M. Bills                         "was unable to "
273f4c4dcf4SKowalski, Kamil                         "interpret."},
274f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
275*f12894f8SJason M. Bills             {"Resolution", "Correct the request body and resubmit the request "
276*f12894f8SJason M. Bills                            "if it failed."}});
277f4c4dcf4SKowalski, Kamil }
278f4c4dcf4SKowalski, Kamil 
279f4c4dcf4SKowalski, Kamil /**
280f4c4dcf4SKowalski, Kamil  * @internal
281f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceAtUriUnauthorized message into JSON
282f4c4dcf4SKowalski, Kamil  *
283f4c4dcf4SKowalski, Kamil  * See header file for more information
284f4c4dcf4SKowalski, Kamil  * @endinternal
285f4c4dcf4SKowalski, Kamil  */
286*f12894f8SJason M. Bills void resourceAtUriUnauthorized(crow::Response& res, const std::string& arg1,
2871abe55efSEd Tanous                                const std::string& arg2)
2881abe55efSEd Tanous {
289*f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
290*f12894f8SJason M. Bills     addMessageToErrorJson(
291*f12894f8SJason M. Bills         res.jsonValue,
292*f12894f8SJason M. Bills         nlohmann::json{
293f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
294f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceAtUriUnauthorized"},
295f4c4dcf4SKowalski, Kamil             {"Message", "While accessing the resource at " + arg1 +
2961abe55efSEd Tanous                             ", the service received an authorization error " +
2971abe55efSEd Tanous                             arg2 + "."},
298f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
299*f12894f8SJason M. Bills             {"Resolution", "Ensure that the appropriate access is provided for "
300*f12894f8SJason M. Bills                            "the service in "
301*f12894f8SJason M. Bills                            "order for it to access the URI."}});
302f4c4dcf4SKowalski, Kamil }
303f4c4dcf4SKowalski, Kamil 
304f4c4dcf4SKowalski, Kamil /**
305f4c4dcf4SKowalski, Kamil  * @internal
306f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterUnknown message into JSON
307f4c4dcf4SKowalski, Kamil  *
308f4c4dcf4SKowalski, Kamil  * See header file for more information
309f4c4dcf4SKowalski, Kamil  * @endinternal
310f4c4dcf4SKowalski, Kamil  */
311*f12894f8SJason M. Bills void actionParameterUnknown(crow::Response& res, const std::string& arg1,
3121abe55efSEd Tanous                             const std::string& arg2)
3131abe55efSEd Tanous {
314*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
315*f12894f8SJason M. Bills     addMessageToErrorJson(
316*f12894f8SJason M. Bills         res.jsonValue,
317*f12894f8SJason M. Bills         nlohmann::json{
318f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
319f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ActionParameterUnknown"},
320f4c4dcf4SKowalski, Kamil             {"Message", "The action " + arg1 +
321*f12894f8SJason M. Bills                             " was submitted with the invalid parameter " +
322*f12894f8SJason M. Bills                             arg2 + "."},
323f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
324f4c4dcf4SKowalski, Kamil             {"Resolution",
325f4c4dcf4SKowalski, Kamil              "Correct the invalid parameter and resubmit the request if the "
326*f12894f8SJason M. Bills              "operation failed."}});
327f4c4dcf4SKowalski, Kamil }
328f4c4dcf4SKowalski, Kamil 
329f4c4dcf4SKowalski, Kamil /**
330f4c4dcf4SKowalski, Kamil  * @internal
331f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceCannotBeDeleted message into JSON
332f4c4dcf4SKowalski, Kamil  *
333f4c4dcf4SKowalski, Kamil  * See header file for more information
334f4c4dcf4SKowalski, Kamil  * @endinternal
335f4c4dcf4SKowalski, Kamil  */
336*f12894f8SJason M. Bills void resourceCannotBeDeleted(crow::Response& res)
3371abe55efSEd Tanous {
338*f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
339*f12894f8SJason M. Bills     addMessageToErrorJson(
340*f12894f8SJason M. Bills         res.jsonValue,
341*f12894f8SJason M. Bills         nlohmann::json{
342f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
343f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceCannotBeDeleted"},
344*f12894f8SJason M. Bills             {"Message", "The delete request failed because the resource "
345*f12894f8SJason M. Bills                         "requested cannot be "
346f4c4dcf4SKowalski, Kamil                         "deleted."},
347f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
348*f12894f8SJason M. Bills             {"Resolution",
349*f12894f8SJason M. Bills              "Do not attempt to delete a non-deletable resource."}});
350f4c4dcf4SKowalski, Kamil }
351f4c4dcf4SKowalski, Kamil 
352f4c4dcf4SKowalski, Kamil /**
353f4c4dcf4SKowalski, Kamil  * @internal
354f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyDuplicate message into JSON
355f4c4dcf4SKowalski, Kamil  *
356f4c4dcf4SKowalski, Kamil  * See header file for more information
357f4c4dcf4SKowalski, Kamil  * @endinternal
358f4c4dcf4SKowalski, Kamil  */
359*f12894f8SJason M. Bills void propertyDuplicate(crow::Response& res, const std::string& arg1)
3601abe55efSEd Tanous {
361*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
362*f12894f8SJason M. Bills     addMessageToErrorJson(
363*f12894f8SJason M. Bills         res.jsonValue,
364*f12894f8SJason M. Bills         nlohmann::json{
365f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
366f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyDuplicate"},
367*f12894f8SJason M. Bills             {"Message",
368*f12894f8SJason M. Bills              "The property " + arg1 + " was duplicated in the request."},
369f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
370*f12894f8SJason M. Bills             {"Resolution", "Remove the duplicate property from the request "
371*f12894f8SJason M. Bills                            "body and resubmit the "
372*f12894f8SJason M. Bills                            "request if the operation failed."}});
373f4c4dcf4SKowalski, Kamil }
374f4c4dcf4SKowalski, Kamil 
375f4c4dcf4SKowalski, Kamil /**
376f4c4dcf4SKowalski, Kamil  * @internal
377f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceTemporarilyUnavailable message into JSON
378f4c4dcf4SKowalski, Kamil  *
379f4c4dcf4SKowalski, Kamil  * See header file for more information
380f4c4dcf4SKowalski, Kamil  * @endinternal
381f4c4dcf4SKowalski, Kamil  */
382*f12894f8SJason M. Bills void serviceTemporarilyUnavailable(crow::Response& res, const std::string& arg1)
3831abe55efSEd Tanous {
384*f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
385*f12894f8SJason M. Bills     addMessageToErrorJson(
386*f12894f8SJason M. Bills         res.jsonValue,
387*f12894f8SJason M. Bills         nlohmann::json{
388f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
389f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ServiceTemporarilyUnavailable"},
3901abe55efSEd Tanous             {"Message", "The service is temporarily unavailable.  Retry in " +
3911abe55efSEd Tanous                             arg1 + " seconds."},
392f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
393*f12894f8SJason M. Bills             {"Resolution", "Wait for the indicated retry duration and retry "
394*f12894f8SJason M. Bills                            "the operation."}});
395f4c4dcf4SKowalski, Kamil }
396f4c4dcf4SKowalski, Kamil 
397f4c4dcf4SKowalski, Kamil /**
398f4c4dcf4SKowalski, Kamil  * @internal
399f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceAlreadyExists message into JSON
400f4c4dcf4SKowalski, Kamil  *
401f4c4dcf4SKowalski, Kamil  * See header file for more information
402f4c4dcf4SKowalski, Kamil  * @endinternal
403f4c4dcf4SKowalski, Kamil  */
404*f12894f8SJason M. Bills void resourceAlreadyExists(crow::Response& res, const std::string& arg1,
405*f12894f8SJason M. Bills                            const std::string& arg2, const std::string& arg3)
4061abe55efSEd Tanous {
407*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
408*f12894f8SJason M. Bills     addMessageToErrorJson(
409*f12894f8SJason M. Bills         res.jsonValue,
410*f12894f8SJason M. Bills         nlohmann::json{
411f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
412f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceAlreadyExists"},
413f4c4dcf4SKowalski, Kamil             {"Message", "The requested resource of type " + arg1 +
4141abe55efSEd Tanous                             " with the property " + arg2 + " with the value " +
4151abe55efSEd Tanous                             arg3 + " already exists."},
416f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
417*f12894f8SJason M. Bills             {"Resolution", "Do not repeat the create operation as the resource "
418*f12894f8SJason M. Bills                            "has already been "
419*f12894f8SJason M. Bills                            "created."}});
420f4c4dcf4SKowalski, Kamil }
421f4c4dcf4SKowalski, Kamil 
422f4c4dcf4SKowalski, Kamil /**
423f4c4dcf4SKowalski, Kamil  * @internal
424f4c4dcf4SKowalski, Kamil  * @brief Formats AccountForSessionNoLongerExists message into JSON
425f4c4dcf4SKowalski, Kamil  *
426f4c4dcf4SKowalski, Kamil  * See header file for more information
427f4c4dcf4SKowalski, Kamil  * @endinternal
428f4c4dcf4SKowalski, Kamil  */
429*f12894f8SJason M. Bills void accountForSessionNoLongerExists(crow::Response& res,
430*f12894f8SJason M. Bills                                      const std::string& fieldPath)
4311abe55efSEd Tanous {
432*f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
433*f12894f8SJason M. Bills     addMessageToJson(
434*f12894f8SJason M. Bills         res.jsonValue,
435*f12894f8SJason M. Bills         nlohmann::json{
436f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
437f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.AccountForSessionNoLongerExists"},
4381abe55efSEd Tanous             {"Message", "The account for the current session has been removed, "
4391abe55efSEd Tanous                         "thus the current "
440f4c4dcf4SKowalski, Kamil                         "session has been removed as well."},
441f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
442*f12894f8SJason M. Bills             {"Resolution", "Attempt to connect with a valid account."}},
443*f12894f8SJason M. Bills         fieldPath);
444f4c4dcf4SKowalski, Kamil }
445f4c4dcf4SKowalski, Kamil 
446f4c4dcf4SKowalski, Kamil /**
447f4c4dcf4SKowalski, Kamil  * @internal
448f4c4dcf4SKowalski, Kamil  * @brief Formats CreateFailedMissingReqProperties message into JSON
449f4c4dcf4SKowalski, Kamil  *
450f4c4dcf4SKowalski, Kamil  * See header file for more information
451f4c4dcf4SKowalski, Kamil  * @endinternal
452f4c4dcf4SKowalski, Kamil  */
453*f12894f8SJason M. Bills void createFailedMissingReqProperties(crow::Response& res,
454*f12894f8SJason M. Bills                                       const std::string& arg1)
4551abe55efSEd Tanous {
456*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
457*f12894f8SJason M. Bills     addMessageToErrorJson(
458*f12894f8SJason M. Bills         res.jsonValue,
459*f12894f8SJason M. Bills         nlohmann::json{
460f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
461f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.CreateFailedMissingReqProperties"},
4621abe55efSEd Tanous             {"Message",
463*f12894f8SJason M. Bills              "The create operation failed because the required property " +
464*f12894f8SJason M. Bills                  arg1 + " was missing from the request."},
465f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
466f4c4dcf4SKowalski, Kamil             {"Resolution",
467*f12894f8SJason M. Bills              "Correct the body to include the required property with a valid "
468*f12894f8SJason M. Bills              "value "
469*f12894f8SJason M. Bills              "and resubmit the request if the operation failed."}});
470f4c4dcf4SKowalski, Kamil }
471f4c4dcf4SKowalski, Kamil 
472f4c4dcf4SKowalski, Kamil /**
473f4c4dcf4SKowalski, Kamil  * @internal
474f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyValueFormatError message into JSON
475f4c4dcf4SKowalski, Kamil  *
476f4c4dcf4SKowalski, Kamil  * See header file for more information
477f4c4dcf4SKowalski, Kamil  * @endinternal
478f4c4dcf4SKowalski, Kamil  */
479*f12894f8SJason M. Bills void propertyValueFormatError(crow::Response& res, const std::string& arg1,
4801abe55efSEd Tanous                               const std::string& arg2)
4811abe55efSEd Tanous {
482*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
483*f12894f8SJason M. Bills     addMessageToErrorJson(
484*f12894f8SJason M. Bills         res.jsonValue,
485*f12894f8SJason M. Bills         nlohmann::json{
486f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
487f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyValueFormatError"},
488f4c4dcf4SKowalski, Kamil             {"Message",
489f4c4dcf4SKowalski, Kamil              "The value " + arg1 + " for the property " + arg2 +
490f4c4dcf4SKowalski, Kamil                  " is of a different format than the property can accept."},
491f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
492*f12894f8SJason M. Bills             {"Resolution", "Correct the value for the property in the request "
493*f12894f8SJason M. Bills                            "body and resubmit "
494*f12894f8SJason M. Bills                            "the request if the operation failed."}});
495*f12894f8SJason M. Bills }
496*f12894f8SJason M. Bills 
497*f12894f8SJason M. Bills /**
498*f12894f8SJason M. Bills  * @internal
499*f12894f8SJason M. Bills  * @brief Formats PropertyValueFormatError message into JSON for the specified
500*f12894f8SJason M. Bills  * property
501*f12894f8SJason M. Bills  *
502*f12894f8SJason M. Bills  * See header file for more information
503*f12894f8SJason M. Bills  * @endinternal
504*f12894f8SJason M. Bills  */
505*f12894f8SJason M. Bills void propertyValueFormatError(crow::Response& res, const std::string& arg1,
506*f12894f8SJason M. Bills                               const std::string& arg2,
507*f12894f8SJason M. Bills                               const std::string property)
508*f12894f8SJason M. Bills {
509*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
510*f12894f8SJason M. Bills     addMessageToJson(
511*f12894f8SJason M. Bills         res.jsonValue,
512*f12894f8SJason M. Bills         nlohmann::json{
513*f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
514*f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.PropertyValueFormatError"},
515*f12894f8SJason M. Bills             {"Message",
516*f12894f8SJason M. Bills              "The value " + arg1 + " for the property " + arg2 +
517*f12894f8SJason M. Bills                  " is of a different format than the property can accept."},
518*f12894f8SJason M. Bills             {"Severity", "Warning"},
519*f12894f8SJason M. Bills             {"Resolution", "Correct the value for the property in the request "
520*f12894f8SJason M. Bills                            "body and resubmit "
521*f12894f8SJason M. Bills                            "the request if the operation failed."}},
522*f12894f8SJason M. Bills         property);
523f4c4dcf4SKowalski, Kamil }
524f4c4dcf4SKowalski, Kamil 
525f4c4dcf4SKowalski, Kamil /**
526f4c4dcf4SKowalski, Kamil  * @internal
527f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyValueNotInList message into JSON
528f4c4dcf4SKowalski, Kamil  *
529f4c4dcf4SKowalski, Kamil  * See header file for more information
530f4c4dcf4SKowalski, Kamil  * @endinternal
531f4c4dcf4SKowalski, Kamil  */
532*f12894f8SJason M. Bills void propertyValueNotInList(crow::Response& res, const std::string& arg1,
5331abe55efSEd Tanous                             const std::string& arg2)
5341abe55efSEd Tanous {
535*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
536*f12894f8SJason M. Bills     addMessageToErrorJson(
537*f12894f8SJason M. Bills         res.jsonValue,
538*f12894f8SJason M. Bills         nlohmann::json{
539f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
540f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyValueNotInList"},
541f4c4dcf4SKowalski, Kamil             {"Message", "The value " + arg1 + " for the property " + arg2 +
542f4c4dcf4SKowalski, Kamil                             " is not in the list of acceptable values."},
543f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
544f4c4dcf4SKowalski, Kamil             {"Resolution",
545*f12894f8SJason M. Bills              "Choose a value from the enumeration list that the implementation "
546*f12894f8SJason M. Bills              "can "
547*f12894f8SJason M. Bills              "support and resubmit the request if the operation failed."}});
548*f12894f8SJason M. Bills }
549*f12894f8SJason M. Bills 
550*f12894f8SJason M. Bills /**
551*f12894f8SJason M. Bills  * @internal
552*f12894f8SJason M. Bills  * @brief Formats PropertyValueNotInList message into JSON for the specified
553*f12894f8SJason M. Bills  * property
554*f12894f8SJason M. Bills  *
555*f12894f8SJason M. Bills  * See header file for more information
556*f12894f8SJason M. Bills  * @endinternal
557*f12894f8SJason M. Bills  */
558*f12894f8SJason M. Bills void propertyValueNotInList(crow::Response& res, const std::string& arg1,
559*f12894f8SJason M. Bills                             const std::string& arg2, const std::string property)
560*f12894f8SJason M. Bills {
561*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
562*f12894f8SJason M. Bills     addMessageToJson(
563*f12894f8SJason M. Bills         res.jsonValue,
564*f12894f8SJason M. Bills         nlohmann::json{
565*f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
566*f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.PropertyValueNotInList"},
567*f12894f8SJason M. Bills             {"Message", "The value " + arg1 + " for the property " + arg2 +
568*f12894f8SJason M. Bills                             " is not in the list of acceptable values."},
569*f12894f8SJason M. Bills             {"Severity", "Warning"},
570*f12894f8SJason M. Bills             {"Resolution",
571*f12894f8SJason M. Bills              "Choose a value from the enumeration list that the implementation "
572*f12894f8SJason M. Bills              "can "
573*f12894f8SJason M. Bills              "support and resubmit the request if the operation failed."}},
574*f12894f8SJason M. Bills         property);
575f4c4dcf4SKowalski, Kamil }
576f4c4dcf4SKowalski, Kamil 
577f4c4dcf4SKowalski, Kamil /**
578f4c4dcf4SKowalski, Kamil  * @internal
579f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceAtUriInUnknownFormat message into JSON
580f4c4dcf4SKowalski, Kamil  *
581f4c4dcf4SKowalski, Kamil  * See header file for more information
582f4c4dcf4SKowalski, Kamil  * @endinternal
583f4c4dcf4SKowalski, Kamil  */
584*f12894f8SJason M. Bills void resourceAtUriInUnknownFormat(crow::Response& res, const std::string& arg1)
5851abe55efSEd Tanous {
586*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
587*f12894f8SJason M. Bills     addMessageToErrorJson(
588*f12894f8SJason M. Bills         res.jsonValue,
589*f12894f8SJason M. Bills         nlohmann::json{
590f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
591f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceAtUriInUnknownFormat"},
592f4c4dcf4SKowalski, Kamil             {"Message", "The resource at " + arg1 +
593f4c4dcf4SKowalski, Kamil                             " is in a format not recognized by the service."},
594f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
595*f12894f8SJason M. Bills             {"Resolution", "Place an image or resource or file that is "
596*f12894f8SJason M. Bills                            "recognized by the service "
597*f12894f8SJason M. Bills                            "at the URI."}});
598f4c4dcf4SKowalski, Kamil }
599f4c4dcf4SKowalski, Kamil 
600f4c4dcf4SKowalski, Kamil /**
601f4c4dcf4SKowalski, Kamil  * @internal
602f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceInUnknownState message into JSON
603f4c4dcf4SKowalski, Kamil  *
604f4c4dcf4SKowalski, Kamil  * See header file for more information
605f4c4dcf4SKowalski, Kamil  * @endinternal
606f4c4dcf4SKowalski, Kamil  */
607*f12894f8SJason M. Bills void serviceInUnknownState(crow::Response& res)
6081abe55efSEd Tanous {
609*f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
610*f12894f8SJason M. Bills     addMessageToErrorJson(
611*f12894f8SJason M. Bills         res.jsonValue,
612*f12894f8SJason M. Bills         nlohmann::json{
613f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
614f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ServiceInUnknownState"},
615*f12894f8SJason M. Bills             {"Message", "The operation failed because the service is in an "
616*f12894f8SJason M. Bills                         "unknown state and "
617f4c4dcf4SKowalski, Kamil                         "can no longer take incoming requests."},
618f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
619f4c4dcf4SKowalski, Kamil             {"Resolution",
620f4c4dcf4SKowalski, Kamil              "Restart the service and resubmit the request if the operation "
621*f12894f8SJason M. Bills              "failed."}});
622f4c4dcf4SKowalski, Kamil }
623f4c4dcf4SKowalski, Kamil 
624f4c4dcf4SKowalski, Kamil /**
625f4c4dcf4SKowalski, Kamil  * @internal
626f4c4dcf4SKowalski, Kamil  * @brief Formats EventSubscriptionLimitExceeded message into JSON
627f4c4dcf4SKowalski, Kamil  *
628f4c4dcf4SKowalski, Kamil  * See header file for more information
629f4c4dcf4SKowalski, Kamil  * @endinternal
630f4c4dcf4SKowalski, Kamil  */
631*f12894f8SJason M. Bills void eventSubscriptionLimitExceeded(crow::Response& res)
6321abe55efSEd Tanous {
633*f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
634*f12894f8SJason M. Bills     addMessageToErrorJson(
635*f12894f8SJason M. Bills         res.jsonValue,
636*f12894f8SJason M. Bills         nlohmann::json{
637f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
638f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.EventSubscriptionLimitExceeded"},
639f4c4dcf4SKowalski, Kamil             {"Message",
640f4c4dcf4SKowalski, Kamil              "The event subscription failed due to the number of simultaneous "
641f4c4dcf4SKowalski, Kamil              "subscriptions exceeding the limit of the implementation."},
642f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
643f4c4dcf4SKowalski, Kamil             {"Resolution",
644*f12894f8SJason M. Bills              "Reduce the number of other subscriptions before trying to "
645*f12894f8SJason M. Bills              "establish "
646f4c4dcf4SKowalski, Kamil              "the event subscription or increase the limit of simultaneous "
647*f12894f8SJason M. Bills              "subscriptions (if supported)."}});
648f4c4dcf4SKowalski, Kamil }
649f4c4dcf4SKowalski, Kamil 
650f4c4dcf4SKowalski, Kamil /**
651f4c4dcf4SKowalski, Kamil  * @internal
652f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterMissing message into JSON
653f4c4dcf4SKowalski, Kamil  *
654f4c4dcf4SKowalski, Kamil  * See header file for more information
655f4c4dcf4SKowalski, Kamil  * @endinternal
656f4c4dcf4SKowalski, Kamil  */
657*f12894f8SJason M. Bills void actionParameterMissing(crow::Response& res, const std::string& arg1,
6581abe55efSEd Tanous                             const std::string& arg2)
6591abe55efSEd Tanous {
660*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
661*f12894f8SJason M. Bills     addMessageToErrorJson(
662*f12894f8SJason M. Bills         res.jsonValue,
663*f12894f8SJason M. Bills         nlohmann::json{
664f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
665f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ActionParameterMissing"},
666*f12894f8SJason M. Bills             {"Message", "The action " + arg1 + " requires the parameter " +
667*f12894f8SJason M. Bills                             arg2 + " to be present in the request body."},
668f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
669*f12894f8SJason M. Bills             {"Resolution",
670*f12894f8SJason M. Bills              "Supply the action with the required parameter in the "
6711abe55efSEd Tanous              "request body when "
672*f12894f8SJason M. Bills              "the request is resubmitted."}});
673f4c4dcf4SKowalski, Kamil }
674f4c4dcf4SKowalski, Kamil 
675f4c4dcf4SKowalski, Kamil /**
676f4c4dcf4SKowalski, Kamil  * @internal
677f4c4dcf4SKowalski, Kamil  * @brief Formats StringValueTooLong message into JSON
678f4c4dcf4SKowalski, Kamil  *
679f4c4dcf4SKowalski, Kamil  * See header file for more information
680f4c4dcf4SKowalski, Kamil  * @endinternal
681f4c4dcf4SKowalski, Kamil  */
682*f12894f8SJason M. Bills void stringValueTooLong(crow::Response& res, const std::string& arg1,
683*f12894f8SJason M. Bills                         const int& arg2)
6841abe55efSEd Tanous {
685*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
686*f12894f8SJason M. Bills     addMessageToErrorJson(
687*f12894f8SJason M. Bills         res.jsonValue,
688*f12894f8SJason M. Bills         nlohmann::json{
689f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
690f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.StringValueTooLong"},
691f4c4dcf4SKowalski, Kamil             {"Message", "The string " + arg1 + " exceeds the length limit " +
692f4c4dcf4SKowalski, Kamil                             std::to_string(arg2) + "."},
693f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
694f4c4dcf4SKowalski, Kamil             {"Resolution",
695*f12894f8SJason M. Bills              "Resubmit the request with an appropriate string length."}});
696f4c4dcf4SKowalski, Kamil }
697f4c4dcf4SKowalski, Kamil 
698f4c4dcf4SKowalski, Kamil /**
699f4c4dcf4SKowalski, Kamil  * @internal
700f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyValueTypeError message into JSON
701f4c4dcf4SKowalski, Kamil  *
702f4c4dcf4SKowalski, Kamil  * See header file for more information
703f4c4dcf4SKowalski, Kamil  * @endinternal
704f4c4dcf4SKowalski, Kamil  */
705*f12894f8SJason M. Bills void propertyValueTypeError(crow::Response& res, const std::string& arg1,
7061abe55efSEd Tanous                             const std::string& arg2)
7071abe55efSEd Tanous {
708*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
709*f12894f8SJason M. Bills     addMessageToErrorJson(
710*f12894f8SJason M. Bills         res.jsonValue,
711*f12894f8SJason M. Bills         nlohmann::json{
712f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
713f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyValueTypeError"},
7141abe55efSEd Tanous             {"Message",
7151abe55efSEd Tanous              "The value " + arg1 + " for the property " + arg2 +
716f4c4dcf4SKowalski, Kamil                  " is of a different type than the property can accept."},
717f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
718*f12894f8SJason M. Bills             {"Resolution", "Correct the value for the property in the request "
719*f12894f8SJason M. Bills                            "body and resubmit "
720*f12894f8SJason M. Bills                            "the request if the operation failed."}});
721*f12894f8SJason M. Bills }
722*f12894f8SJason M. Bills 
723*f12894f8SJason M. Bills /**
724*f12894f8SJason M. Bills  * @internal
725*f12894f8SJason M. Bills  * @brief Formats PropertyValueTypeError message into JSON for the specified
726*f12894f8SJason M. Bills  * property
727*f12894f8SJason M. Bills  *
728*f12894f8SJason M. Bills  * See header file for more information
729*f12894f8SJason M. Bills  * @endinternal
730*f12894f8SJason M. Bills  */
731*f12894f8SJason M. Bills void propertyValueTypeError(crow::Response& res, const std::string& arg1,
732*f12894f8SJason M. Bills                             const std::string& arg2,
733*f12894f8SJason M. Bills                             const std::string& property)
734*f12894f8SJason M. Bills {
735*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
736*f12894f8SJason M. Bills     addMessageToJson(
737*f12894f8SJason M. Bills         res.jsonValue,
738*f12894f8SJason M. Bills         nlohmann::json{
739*f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
740*f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.PropertyValueTypeError"},
741*f12894f8SJason M. Bills             {"Message",
742*f12894f8SJason M. Bills              "The value " + arg1 + " for the property " + arg2 +
743*f12894f8SJason M. Bills                  " is of a different type than the property can accept."},
744*f12894f8SJason M. Bills             {"Severity", "Warning"},
745*f12894f8SJason M. Bills             {"Resolution", "Correct the value for the property in the request "
746*f12894f8SJason M. Bills                            "body and resubmit "
747*f12894f8SJason M. Bills                            "the request if the operation failed."}},
748*f12894f8SJason M. Bills         property);
749f4c4dcf4SKowalski, Kamil }
750f4c4dcf4SKowalski, Kamil 
751f4c4dcf4SKowalski, Kamil /**
752f4c4dcf4SKowalski, Kamil  * @internal
753f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceNotFound message into JSON
754f4c4dcf4SKowalski, Kamil  *
755f4c4dcf4SKowalski, Kamil  * See header file for more information
756f4c4dcf4SKowalski, Kamil  * @endinternal
757f4c4dcf4SKowalski, Kamil  */
758*f12894f8SJason M. Bills void resourceNotFound(crow::Response& res, const std::string& arg1,
7591abe55efSEd Tanous                       const std::string& arg2)
7601abe55efSEd Tanous {
761*f12894f8SJason M. Bills     res.result(boost::beast::http::status::not_found);
762*f12894f8SJason M. Bills     addMessageToErrorJson(
763*f12894f8SJason M. Bills         res.jsonValue,
764*f12894f8SJason M. Bills         nlohmann::json{
765f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
766f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceNotFound"},
7671abe55efSEd Tanous             {"Message", "The requested resource of type " + arg1 + " named " +
7681abe55efSEd Tanous                             arg2 + " was not found."},
769f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
770f4c4dcf4SKowalski, Kamil             {"Resolution",
771*f12894f8SJason M. Bills              "Provide a valid resource identifier and resubmit the request."}});
772f4c4dcf4SKowalski, Kamil }
773f4c4dcf4SKowalski, Kamil 
774f4c4dcf4SKowalski, Kamil /**
775f4c4dcf4SKowalski, Kamil  * @internal
776f4c4dcf4SKowalski, Kamil  * @brief Formats CouldNotEstablishConnection message into JSON
777f4c4dcf4SKowalski, Kamil  *
778f4c4dcf4SKowalski, Kamil  * See header file for more information
779f4c4dcf4SKowalski, Kamil  * @endinternal
780f4c4dcf4SKowalski, Kamil  */
781*f12894f8SJason M. Bills void couldNotEstablishConnection(crow::Response& res, const std::string& arg1)
7821abe55efSEd Tanous {
783*f12894f8SJason M. Bills     res.result(boost::beast::http::status::not_found);
784*f12894f8SJason M. Bills     addMessageToErrorJson(
785*f12894f8SJason M. Bills         res.jsonValue,
786*f12894f8SJason M. Bills         nlohmann::json{
787f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
788f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.CouldNotEstablishConnection"},
7891abe55efSEd Tanous             {"Message",
790*f12894f8SJason M. Bills              "The service failed to establish a Connection with the URI " +
791*f12894f8SJason M. Bills                  arg1 + "."},
792f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
7931abe55efSEd Tanous             {"Resolution", "Ensure that the URI contains a valid and reachable "
7941abe55efSEd Tanous                            "node name, protocol "
795*f12894f8SJason M. Bills                            "information and other URI components."}});
796f4c4dcf4SKowalski, Kamil }
797f4c4dcf4SKowalski, Kamil 
798f4c4dcf4SKowalski, Kamil /**
799f4c4dcf4SKowalski, Kamil  * @internal
800f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyNotWritable message into JSON
801f4c4dcf4SKowalski, Kamil  *
802f4c4dcf4SKowalski, Kamil  * See header file for more information
803f4c4dcf4SKowalski, Kamil  * @endinternal
804f4c4dcf4SKowalski, Kamil  */
805*f12894f8SJason M. Bills void propertyNotWritable(crow::Response& res, const std::string& arg1)
8061abe55efSEd Tanous {
807*f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
808*f12894f8SJason M. Bills     addMessageToErrorJson(
809*f12894f8SJason M. Bills         res.jsonValue,
810*f12894f8SJason M. Bills         nlohmann::json{
811f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
812f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyNotWritable"},
813f4c4dcf4SKowalski, Kamil             {"Message",
814f4c4dcf4SKowalski, Kamil              "The property " + arg1 +
815f4c4dcf4SKowalski, Kamil                  " is a read only property and cannot be assigned a value."},
816f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
817*f12894f8SJason M. Bills             {"Resolution",
818*f12894f8SJason M. Bills              "Remove the property from the request body and resubmit "
8191abe55efSEd Tanous              "the request if "
820*f12894f8SJason M. Bills              "the operation failed."}});
821*f12894f8SJason M. Bills }
822*f12894f8SJason M. Bills 
823*f12894f8SJason M. Bills /**
824*f12894f8SJason M. Bills  * @internal
825*f12894f8SJason M. Bills  * @brief Formats PropertyNotWritable message into JSON for the specified
826*f12894f8SJason M. Bills  * property
827*f12894f8SJason M. Bills  *
828*f12894f8SJason M. Bills  * See header file for more information
829*f12894f8SJason M. Bills  * @endinternal
830*f12894f8SJason M. Bills  */
831*f12894f8SJason M. Bills void propertyNotWritable(crow::Response& res, const std::string& arg1,
832*f12894f8SJason M. Bills                          const std::string& property)
833*f12894f8SJason M. Bills {
834*f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
835*f12894f8SJason M. Bills     addMessageToJson(
836*f12894f8SJason M. Bills         res.jsonValue,
837*f12894f8SJason M. Bills         nlohmann::json{
838*f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
839*f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.PropertyNotWritable"},
840*f12894f8SJason M. Bills             {"Message",
841*f12894f8SJason M. Bills              "The property " + arg1 +
842*f12894f8SJason M. Bills                  " is a read only property and cannot be assigned a value."},
843*f12894f8SJason M. Bills             {"Severity", "Warning"},
844*f12894f8SJason M. Bills             {"Resolution",
845*f12894f8SJason M. Bills              "Remove the property from the request body and resubmit "
846*f12894f8SJason M. Bills              "the request if "
847*f12894f8SJason M. Bills              "the operation failed."}},
848*f12894f8SJason M. Bills         property);
849f4c4dcf4SKowalski, Kamil }
850f4c4dcf4SKowalski, Kamil 
851f4c4dcf4SKowalski, Kamil /**
852f4c4dcf4SKowalski, Kamil  * @internal
853f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterValueTypeError message into JSON
854f4c4dcf4SKowalski, Kamil  *
855f4c4dcf4SKowalski, Kamil  * See header file for more information
856f4c4dcf4SKowalski, Kamil  * @endinternal
857f4c4dcf4SKowalski, Kamil  */
858*f12894f8SJason M. Bills void queryParameterValueTypeError(crow::Response& res, const std::string& arg1,
8591abe55efSEd Tanous                                   const std::string& arg2)
8601abe55efSEd Tanous {
861*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
862*f12894f8SJason M. Bills     addMessageToErrorJson(
863*f12894f8SJason M. Bills         res.jsonValue,
864*f12894f8SJason M. Bills         nlohmann::json{
865f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
866f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.QueryParameterValueTypeError"},
8671abe55efSEd Tanous             {"Message",
8681abe55efSEd Tanous              "The value " + arg1 + " for the query parameter " + arg2 +
869f4c4dcf4SKowalski, Kamil                  " is of a different type than the parameter can accept."},
870f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
8711abe55efSEd Tanous             {"Resolution", "Correct the value for the query parameter in the "
8721abe55efSEd Tanous                            "request and resubmit "
873*f12894f8SJason M. Bills                            "the request if the operation failed."}});
874f4c4dcf4SKowalski, Kamil }
875f4c4dcf4SKowalski, Kamil 
876f4c4dcf4SKowalski, Kamil /**
877f4c4dcf4SKowalski, Kamil  * @internal
878f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceShuttingDown message into JSON
879f4c4dcf4SKowalski, Kamil  *
880f4c4dcf4SKowalski, Kamil  * See header file for more information
881f4c4dcf4SKowalski, Kamil  * @endinternal
882f4c4dcf4SKowalski, Kamil  */
883*f12894f8SJason M. Bills void serviceShuttingDown(crow::Response& res)
8841abe55efSEd Tanous {
885*f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
886*f12894f8SJason M. Bills     addMessageToErrorJson(
887*f12894f8SJason M. Bills         res.jsonValue,
888*f12894f8SJason M. Bills         nlohmann::json{
889f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
890f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ServiceShuttingDown"},
891*f12894f8SJason M. Bills             {"Message", "The operation failed because the service is shutting "
892*f12894f8SJason M. Bills                         "down and can no "
893f4c4dcf4SKowalski, Kamil                         "longer take incoming requests."},
894f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
895f4c4dcf4SKowalski, Kamil             {"Resolution",
896f4c4dcf4SKowalski, Kamil              "When the service becomes available, resubmit the request if the "
897*f12894f8SJason M. Bills              "operation failed."}});
898f4c4dcf4SKowalski, Kamil }
899f4c4dcf4SKowalski, Kamil 
900f4c4dcf4SKowalski, Kamil /**
901f4c4dcf4SKowalski, Kamil  * @internal
902f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterDuplicate message into JSON
903f4c4dcf4SKowalski, Kamil  *
904f4c4dcf4SKowalski, Kamil  * See header file for more information
905f4c4dcf4SKowalski, Kamil  * @endinternal
906f4c4dcf4SKowalski, Kamil  */
907*f12894f8SJason M. Bills void actionParameterDuplicate(crow::Response& res, const std::string& arg1,
9081abe55efSEd Tanous                               const std::string& arg2)
9091abe55efSEd Tanous {
910*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
911*f12894f8SJason M. Bills     addMessageToErrorJson(
912*f12894f8SJason M. Bills         res.jsonValue,
913*f12894f8SJason M. Bills         nlohmann::json{
914f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
915f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ActionParameterDuplicate"},
916f4c4dcf4SKowalski, Kamil             {"Message",
917f4c4dcf4SKowalski, Kamil              "The action " + arg1 +
9181abe55efSEd Tanous                  " was submitted with more than one value for the parameter " +
9191abe55efSEd Tanous                  arg2 + "."},
920f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
921*f12894f8SJason M. Bills             {"Resolution", "Resubmit the action with only one instance of the "
922*f12894f8SJason M. Bills                            "parameter in the "
923*f12894f8SJason M. Bills                            "request body if the operation failed."}});
924f4c4dcf4SKowalski, Kamil }
925f4c4dcf4SKowalski, Kamil 
926f4c4dcf4SKowalski, Kamil /**
927f4c4dcf4SKowalski, Kamil  * @internal
928f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterNotSupported message into JSON
929f4c4dcf4SKowalski, Kamil  *
930f4c4dcf4SKowalski, Kamil  * See header file for more information
931f4c4dcf4SKowalski, Kamil  * @endinternal
932f4c4dcf4SKowalski, Kamil  */
933*f12894f8SJason M. Bills void actionParameterNotSupported(crow::Response& res, const std::string& arg1,
9341abe55efSEd Tanous                                  const std::string& arg2)
9351abe55efSEd Tanous {
936*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
937*f12894f8SJason M. Bills     addMessageToErrorJson(
938*f12894f8SJason M. Bills         res.jsonValue,
939*f12894f8SJason M. Bills         nlohmann::json{
940f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
941f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ActionParameterNotSupported"},
942f4c4dcf4SKowalski, Kamil             {"Message", "The parameter " + arg1 + " for the action " + arg2 +
943f4c4dcf4SKowalski, Kamil                             " is not supported on the target resource."},
944f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
945f4c4dcf4SKowalski, Kamil             {"Resolution",
946f4c4dcf4SKowalski, Kamil              "Remove the parameter supplied and resubmit the request if the "
947*f12894f8SJason M. Bills              "operation failed."}});
948f4c4dcf4SKowalski, Kamil }
949f4c4dcf4SKowalski, Kamil 
950f4c4dcf4SKowalski, Kamil /**
951f4c4dcf4SKowalski, Kamil  * @internal
952f4c4dcf4SKowalski, Kamil  * @brief Formats SourceDoesNotSupportProtocol message into JSON
953f4c4dcf4SKowalski, Kamil  *
954f4c4dcf4SKowalski, Kamil  * See header file for more information
955f4c4dcf4SKowalski, Kamil  * @endinternal
956f4c4dcf4SKowalski, Kamil  */
957*f12894f8SJason M. Bills void sourceDoesNotSupportProtocol(crow::Response& res, const std::string& arg1,
9581abe55efSEd Tanous                                   const std::string& arg2)
9591abe55efSEd Tanous {
960*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
961*f12894f8SJason M. Bills     addMessageToErrorJson(
962*f12894f8SJason M. Bills         res.jsonValue,
963*f12894f8SJason M. Bills         nlohmann::json{
964f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
965f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.SourceDoesNotSupportProtocol"},
96655c7b7a2SEd Tanous             {"Message", "The other end of the Connection at " + arg1 +
9671abe55efSEd Tanous                             " does not support the specified protocol " + arg2 +
9681abe55efSEd Tanous                             "."},
969f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
970*f12894f8SJason M. Bills             {"Resolution", "Change protocols or URIs. "}});
971f4c4dcf4SKowalski, Kamil }
972f4c4dcf4SKowalski, Kamil 
973f4c4dcf4SKowalski, Kamil /**
974f4c4dcf4SKowalski, Kamil  * @internal
975f4c4dcf4SKowalski, Kamil  * @brief Formats AccountRemoved message into JSON
976f4c4dcf4SKowalski, Kamil  *
977f4c4dcf4SKowalski, Kamil  * See header file for more information
978f4c4dcf4SKowalski, Kamil  * @endinternal
979f4c4dcf4SKowalski, Kamil  */
980*f12894f8SJason M. Bills void accountRemoved(crow::Response& res)
9811abe55efSEd Tanous {
982*f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
983*f12894f8SJason M. Bills     addMessageToJsonRoot(
984*f12894f8SJason M. Bills         res.jsonValue,
985*f12894f8SJason M. Bills         nlohmann::json{
986f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
987f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.AccountRemoved"},
988f4c4dcf4SKowalski, Kamil             {"Message", "The account was successfully removed."},
989f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
990*f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}});
991f4c4dcf4SKowalski, Kamil }
992f4c4dcf4SKowalski, Kamil 
993f4c4dcf4SKowalski, Kamil /**
994f4c4dcf4SKowalski, Kamil  * @internal
995f4c4dcf4SKowalski, Kamil  * @brief Formats AccessDenied message into JSON
996f4c4dcf4SKowalski, Kamil  *
997f4c4dcf4SKowalski, Kamil  * See header file for more information
998f4c4dcf4SKowalski, Kamil  * @endinternal
999f4c4dcf4SKowalski, Kamil  */
1000*f12894f8SJason M. Bills void accessDenied(crow::Response& res, const std::string& arg1)
10011abe55efSEd Tanous {
1002*f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1003*f12894f8SJason M. Bills     addMessageToErrorJson(
1004*f12894f8SJason M. Bills         res.jsonValue,
1005*f12894f8SJason M. Bills         nlohmann::json{
1006f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1007f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.AccessDenied"},
1008*f12894f8SJason M. Bills             {"Message", "While attempting to establish a Connection to " +
1009*f12894f8SJason M. Bills                             arg1 + ", the service denied access."},
1010f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1011*f12894f8SJason M. Bills             {"Resolution",
1012*f12894f8SJason M. Bills              "Attempt to ensure that the URI is correct and that the "
10131abe55efSEd Tanous              "service has the "
1014*f12894f8SJason M. Bills              "appropriate credentials."}});
1015f4c4dcf4SKowalski, Kamil }
1016f4c4dcf4SKowalski, Kamil 
1017f4c4dcf4SKowalski, Kamil /**
1018f4c4dcf4SKowalski, Kamil  * @internal
1019f4c4dcf4SKowalski, Kamil  * @brief Formats QueryNotSupported message into JSON
1020f4c4dcf4SKowalski, Kamil  *
1021f4c4dcf4SKowalski, Kamil  * See header file for more information
1022f4c4dcf4SKowalski, Kamil  * @endinternal
1023f4c4dcf4SKowalski, Kamil  */
1024*f12894f8SJason M. Bills void queryNotSupported(crow::Response& res)
10251abe55efSEd Tanous {
1026*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1027*f12894f8SJason M. Bills     addMessageToErrorJson(
1028*f12894f8SJason M. Bills         res.jsonValue,
1029*f12894f8SJason M. Bills         nlohmann::json{
1030f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1031f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.QueryNotSupported"},
1032f4c4dcf4SKowalski, Kamil             {"Message", "Querying is not supported by the implementation."},
1033f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1034*f12894f8SJason M. Bills             {"Resolution",
1035*f12894f8SJason M. Bills              "Remove the query parameters and resubmit the request "
10361abe55efSEd Tanous              "if the operation "
1037*f12894f8SJason M. Bills              "failed."}});
1038f4c4dcf4SKowalski, Kamil }
1039f4c4dcf4SKowalski, Kamil 
1040f4c4dcf4SKowalski, Kamil /**
1041f4c4dcf4SKowalski, Kamil  * @internal
1042f4c4dcf4SKowalski, Kamil  * @brief Formats CreateLimitReachedForResource message into JSON
1043f4c4dcf4SKowalski, Kamil  *
1044f4c4dcf4SKowalski, Kamil  * See header file for more information
1045f4c4dcf4SKowalski, Kamil  * @endinternal
1046f4c4dcf4SKowalski, Kamil  */
1047*f12894f8SJason M. Bills void createLimitReachedForResource(crow::Response& res)
10481abe55efSEd Tanous {
1049*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1050*f12894f8SJason M. Bills     addMessageToErrorJson(
1051*f12894f8SJason M. Bills         res.jsonValue,
1052*f12894f8SJason M. Bills         nlohmann::json{
1053f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1054f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.CreateLimitReachedForResource"},
10551abe55efSEd Tanous             {"Message", "The create operation failed because the resource has "
10561abe55efSEd Tanous                         "reached the limit "
1057f4c4dcf4SKowalski, Kamil                         "of possible resources."},
1058f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1059*f12894f8SJason M. Bills             {"Resolution", "Either delete resources and resubmit the request "
1060*f12894f8SJason M. Bills                            "if the operation "
1061*f12894f8SJason M. Bills                            "failed or do not resubmit the request."}});
1062f4c4dcf4SKowalski, Kamil }
1063f4c4dcf4SKowalski, Kamil 
1064f4c4dcf4SKowalski, Kamil /**
1065f4c4dcf4SKowalski, Kamil  * @internal
1066f4c4dcf4SKowalski, Kamil  * @brief Formats GeneralError message into JSON
1067f4c4dcf4SKowalski, Kamil  *
1068f4c4dcf4SKowalski, Kamil  * See header file for more information
1069f4c4dcf4SKowalski, Kamil  * @endinternal
1070f4c4dcf4SKowalski, Kamil  */
1071*f12894f8SJason M. Bills void generalError(crow::Response& res)
10721abe55efSEd Tanous {
1073*f12894f8SJason M. Bills     res.result(boost::beast::http::status::internal_server_error);
1074*f12894f8SJason M. Bills     addMessageToErrorJson(
1075*f12894f8SJason M. Bills         res.jsonValue,
1076*f12894f8SJason M. Bills         nlohmann::json{
1077f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1078f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.GeneralError"},
1079*f12894f8SJason M. Bills             {"Message",
1080*f12894f8SJason M. Bills              "A general error has occurred. See ExtendedInfo for more "
10811abe55efSEd Tanous              "information."},
1082f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1083*f12894f8SJason M. Bills             {"Resolution", "See ExtendedInfo for more information."}});
1084f4c4dcf4SKowalski, Kamil }
1085f4c4dcf4SKowalski, Kamil 
1086f4c4dcf4SKowalski, Kamil /**
1087f4c4dcf4SKowalski, Kamil  * @internal
1088f4c4dcf4SKowalski, Kamil  * @brief Formats Success message into JSON
1089f4c4dcf4SKowalski, Kamil  *
1090f4c4dcf4SKowalski, Kamil  * See header file for more information
1091f4c4dcf4SKowalski, Kamil  * @endinternal
1092f4c4dcf4SKowalski, Kamil  */
1093*f12894f8SJason M. Bills void success(crow::Response& res)
10941abe55efSEd Tanous {
1095*f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1096*f12894f8SJason M. Bills     addMessageToJsonRoot(
1097*f12894f8SJason M. Bills         res.jsonValue,
1098*f12894f8SJason M. Bills         nlohmann::json{
1099f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1100f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.Success"},
1101f4c4dcf4SKowalski, Kamil             {"Message", "Successfully Completed Request"},
1102f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1103*f12894f8SJason M. Bills             {"Resolution", "None"}});
1104*f12894f8SJason M. Bills }
1105*f12894f8SJason M. Bills 
1106*f12894f8SJason M. Bills /**
1107*f12894f8SJason M. Bills  * @internal
1108*f12894f8SJason M. Bills  * @brief Formats Success message into JSON for the specified field
1109*f12894f8SJason M. Bills  *
1110*f12894f8SJason M. Bills  * See header file for more information
1111*f12894f8SJason M. Bills  * @endinternal
1112*f12894f8SJason M. Bills  */
1113*f12894f8SJason M. Bills void success(crow::Response& res, const std::string& fieldPath)
1114*f12894f8SJason M. Bills {
1115*f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1116*f12894f8SJason M. Bills     addMessageToJson(
1117*f12894f8SJason M. Bills         res.jsonValue,
1118*f12894f8SJason M. Bills         nlohmann::json{
1119*f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1120*f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.Success"},
1121*f12894f8SJason M. Bills             {"Message", "Successfully Completed Request"},
1122*f12894f8SJason M. Bills             {"Severity", "OK"},
1123*f12894f8SJason M. Bills             {"Resolution", "None"}},
1124*f12894f8SJason M. Bills         fieldPath);
1125f4c4dcf4SKowalski, Kamil }
1126f4c4dcf4SKowalski, Kamil 
1127f4c4dcf4SKowalski, Kamil /**
1128f4c4dcf4SKowalski, Kamil  * @internal
1129f4c4dcf4SKowalski, Kamil  * @brief Formats Created message into JSON
1130f4c4dcf4SKowalski, Kamil  *
1131f4c4dcf4SKowalski, Kamil  * See header file for more information
1132f4c4dcf4SKowalski, Kamil  * @endinternal
1133f4c4dcf4SKowalski, Kamil  */
1134*f12894f8SJason M. Bills void created(crow::Response& res)
11351abe55efSEd Tanous {
1136*f12894f8SJason M. Bills     res.result(boost::beast::http::status::created);
1137*f12894f8SJason M. Bills     addMessageToJsonRoot(
1138*f12894f8SJason M. Bills         res.jsonValue,
1139*f12894f8SJason M. Bills         nlohmann::json{
1140f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1141f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.Created"},
1142f4c4dcf4SKowalski, Kamil             {"Message", "The resource has been created successfully"},
1143f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1144*f12894f8SJason M. Bills             {"Resolution", "None"}});
1145f4c4dcf4SKowalski, Kamil }
1146f4c4dcf4SKowalski, Kamil 
1147f4c4dcf4SKowalski, Kamil /**
1148f4c4dcf4SKowalski, Kamil  * @internal
1149f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyUnknown message into JSON
1150f4c4dcf4SKowalski, Kamil  *
1151f4c4dcf4SKowalski, Kamil  * See header file for more information
1152f4c4dcf4SKowalski, Kamil  * @endinternal
1153f4c4dcf4SKowalski, Kamil  */
1154*f12894f8SJason M. Bills void propertyUnknown(crow::Response& res, const std::string& arg1)
11551abe55efSEd Tanous {
1156*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1157*f12894f8SJason M. Bills     addMessageToErrorJson(
1158*f12894f8SJason M. Bills         res.jsonValue,
1159*f12894f8SJason M. Bills         nlohmann::json{
1160f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1161f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyUnknown"},
1162f4c4dcf4SKowalski, Kamil             {"Message",
1163f4c4dcf4SKowalski, Kamil              "The property " + arg1 +
1164f4c4dcf4SKowalski, Kamil                  " is not in the list of valid properties for the resource."},
1165f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1166*f12894f8SJason M. Bills             {"Resolution", "Remove the unknown property from the request body "
1167*f12894f8SJason M. Bills                            "and resubmit the "
1168*f12894f8SJason M. Bills                            "request if the operation failed."}});
1169*f12894f8SJason M. Bills }
1170*f12894f8SJason M. Bills 
1171*f12894f8SJason M. Bills /**
1172*f12894f8SJason M. Bills  * @internal
1173*f12894f8SJason M. Bills  * @brief Formats PropertyUnknown message into JSON for the specified property
1174*f12894f8SJason M. Bills  *
1175*f12894f8SJason M. Bills  * See header file for more information
1176*f12894f8SJason M. Bills  * @endinternal
1177*f12894f8SJason M. Bills  */
1178*f12894f8SJason M. Bills void propertyUnknown(crow::Response& res, const std::string& arg1,
1179*f12894f8SJason M. Bills                      const std::string& property)
1180*f12894f8SJason M. Bills {
1181*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1182*f12894f8SJason M. Bills     addMessageToJson(
1183*f12894f8SJason M. Bills         res.jsonValue,
1184*f12894f8SJason M. Bills         nlohmann::json{
1185*f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1186*f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.PropertyUnknown"},
1187*f12894f8SJason M. Bills             {"Message",
1188*f12894f8SJason M. Bills              "The property " + arg1 +
1189*f12894f8SJason M. Bills                  " is not in the list of valid properties for the resource."},
1190*f12894f8SJason M. Bills             {"Severity", "Warning"},
1191*f12894f8SJason M. Bills             {"Resolution", "Remove the unknown property from the request body "
1192*f12894f8SJason M. Bills                            "and resubmit the "
1193*f12894f8SJason M. Bills                            "request if the operation failed."}},
1194*f12894f8SJason M. Bills         property);
1195f4c4dcf4SKowalski, Kamil }
1196f4c4dcf4SKowalski, Kamil 
1197f4c4dcf4SKowalski, Kamil /**
1198f4c4dcf4SKowalski, Kamil  * @internal
1199f4c4dcf4SKowalski, Kamil  * @brief Formats NoValidSession message into JSON
1200f4c4dcf4SKowalski, Kamil  *
1201f4c4dcf4SKowalski, Kamil  * See header file for more information
1202f4c4dcf4SKowalski, Kamil  * @endinternal
1203f4c4dcf4SKowalski, Kamil  */
1204*f12894f8SJason M. Bills void noValidSession(crow::Response& res)
12051abe55efSEd Tanous {
1206*f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1207*f12894f8SJason M. Bills     addMessageToErrorJson(
1208*f12894f8SJason M. Bills         res.jsonValue,
1209*f12894f8SJason M. Bills         nlohmann::json{
1210f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1211f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.NoValidSession"},
1212f4c4dcf4SKowalski, Kamil             {"Message",
1213f4c4dcf4SKowalski, Kamil              "There is no valid session established with the implementation."},
1214f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
12151abe55efSEd Tanous             {"Resolution",
1216*f12894f8SJason M. Bills              "Establish as session before attempting any operations."}});
1217f4c4dcf4SKowalski, Kamil }
1218f4c4dcf4SKowalski, Kamil 
1219f4c4dcf4SKowalski, Kamil /**
1220f4c4dcf4SKowalski, Kamil  * @internal
1221f4c4dcf4SKowalski, Kamil  * @brief Formats InvalidObject message into JSON
1222f4c4dcf4SKowalski, Kamil  *
1223f4c4dcf4SKowalski, Kamil  * See header file for more information
1224f4c4dcf4SKowalski, Kamil  * @endinternal
1225f4c4dcf4SKowalski, Kamil  */
1226*f12894f8SJason M. Bills void invalidObject(crow::Response& res, const std::string& arg1)
12271abe55efSEd Tanous {
1228*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1229*f12894f8SJason M. Bills     addMessageToErrorJson(
1230*f12894f8SJason M. Bills         res.jsonValue,
1231*f12894f8SJason M. Bills         nlohmann::json{
1232f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1233f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.InvalidObject"},
1234f4c4dcf4SKowalski, Kamil             {"Message", "The object at " + arg1 + " is invalid."},
1235f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1236*f12894f8SJason M. Bills             {"Resolution",
1237*f12894f8SJason M. Bills              "Either the object is malformed or the URI is not "
12381abe55efSEd Tanous              "correct.  Correct the "
1239*f12894f8SJason M. Bills              "condition and resubmit the request if it failed."}});
1240f4c4dcf4SKowalski, Kamil }
1241f4c4dcf4SKowalski, Kamil 
1242f4c4dcf4SKowalski, Kamil /**
1243f4c4dcf4SKowalski, Kamil  * @internal
1244f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceInStandby message into JSON
1245f4c4dcf4SKowalski, Kamil  *
1246f4c4dcf4SKowalski, Kamil  * See header file for more information
1247f4c4dcf4SKowalski, Kamil  * @endinternal
1248f4c4dcf4SKowalski, Kamil  */
1249*f12894f8SJason M. Bills void resourceInStandby(crow::Response& res)
12501abe55efSEd Tanous {
1251*f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1252*f12894f8SJason M. Bills     addMessageToErrorJson(
1253*f12894f8SJason M. Bills         res.jsonValue,
1254*f12894f8SJason M. Bills         nlohmann::json{
1255f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1256f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceInStandby"},
1257f4c4dcf4SKowalski, Kamil             {"Message",
1258f4c4dcf4SKowalski, Kamil              "The request could not be performed because the resource is in "
1259f4c4dcf4SKowalski, Kamil              "standby."},
1260f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1261*f12894f8SJason M. Bills             {"Resolution", "Ensure that the resource is in the correct power "
1262*f12894f8SJason M. Bills                            "state and resubmit "
1263*f12894f8SJason M. Bills                            "the request."}});
1264f4c4dcf4SKowalski, Kamil }
1265f4c4dcf4SKowalski, Kamil 
1266f4c4dcf4SKowalski, Kamil /**
1267f4c4dcf4SKowalski, Kamil  * @internal
1268f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterValueTypeError message into JSON
1269f4c4dcf4SKowalski, Kamil  *
1270f4c4dcf4SKowalski, Kamil  * See header file for more information
1271f4c4dcf4SKowalski, Kamil  * @endinternal
1272f4c4dcf4SKowalski, Kamil  */
1273*f12894f8SJason M. Bills void actionParameterValueTypeError(crow::Response& res, const std::string& arg1,
1274f4c4dcf4SKowalski, Kamil                                    const std::string& arg2,
12751abe55efSEd Tanous                                    const std::string& arg3)
12761abe55efSEd Tanous {
1277*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1278*f12894f8SJason M. Bills     addMessageToErrorJson(
1279*f12894f8SJason M. Bills         res.jsonValue,
1280*f12894f8SJason M. Bills         nlohmann::json{
1281f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1282f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ActionParameterValueTypeError"},
12831abe55efSEd Tanous             {"Message",
12841abe55efSEd Tanous              "The value " + arg1 + " for the parameter " + arg2 +
1285f4c4dcf4SKowalski, Kamil                  " in the action " + arg3 +
1286f4c4dcf4SKowalski, Kamil                  " is of a different type than the parameter can accept."},
1287f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1288*f12894f8SJason M. Bills             {"Resolution", "Correct the value for the parameter in the request "
1289*f12894f8SJason M. Bills                            "body and resubmit "
1290*f12894f8SJason M. Bills                            "the request if the operation failed."}});
1291f4c4dcf4SKowalski, Kamil }
1292f4c4dcf4SKowalski, Kamil 
1293f4c4dcf4SKowalski, Kamil /**
1294f4c4dcf4SKowalski, Kamil  * @internal
1295f4c4dcf4SKowalski, Kamil  * @brief Formats SessionLimitExceeded message into JSON
1296f4c4dcf4SKowalski, Kamil  *
1297f4c4dcf4SKowalski, Kamil  * See header file for more information
1298f4c4dcf4SKowalski, Kamil  * @endinternal
1299f4c4dcf4SKowalski, Kamil  */
1300*f12894f8SJason M. Bills void sessionLimitExceeded(crow::Response& res)
13011abe55efSEd Tanous {
1302*f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1303*f12894f8SJason M. Bills     addMessageToErrorJson(
1304*f12894f8SJason M. Bills         res.jsonValue,
1305*f12894f8SJason M. Bills         nlohmann::json{
1306f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1307f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.SessionLimitExceeded"},
1308*f12894f8SJason M. Bills             {"Message", "The session establishment failed due to the number of "
1309*f12894f8SJason M. Bills                         "simultaneous "
1310f4c4dcf4SKowalski, Kamil                         "sessions exceeding the limit of the implementation."},
1311f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1312f4c4dcf4SKowalski, Kamil             {"Resolution",
1313*f12894f8SJason M. Bills              "Reduce the number of other sessions before trying to establish "
1314*f12894f8SJason M. Bills              "the "
1315f4c4dcf4SKowalski, Kamil              "session or increase the limit of simultaneous sessions (if "
1316*f12894f8SJason M. Bills              "supported)."}});
1317f4c4dcf4SKowalski, Kamil }
1318f4c4dcf4SKowalski, Kamil 
1319f4c4dcf4SKowalski, Kamil /**
1320f4c4dcf4SKowalski, Kamil  * @internal
1321f4c4dcf4SKowalski, Kamil  * @brief Formats ActionNotSupported message into JSON
1322f4c4dcf4SKowalski, Kamil  *
1323f4c4dcf4SKowalski, Kamil  * See header file for more information
1324f4c4dcf4SKowalski, Kamil  * @endinternal
1325f4c4dcf4SKowalski, Kamil  */
1326*f12894f8SJason M. Bills void actionNotSupported(crow::Response& res, const std::string& arg1)
13271abe55efSEd Tanous {
1328*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1329*f12894f8SJason M. Bills     addMessageToErrorJson(
1330*f12894f8SJason M. Bills         res.jsonValue,
1331*f12894f8SJason M. Bills         nlohmann::json{
1332f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1333f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ActionNotSupported"},
13341abe55efSEd Tanous             {"Message",
13351abe55efSEd Tanous              "The action " + arg1 + " is not supported by the resource."},
1336f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1337f4c4dcf4SKowalski, Kamil             {"Resolution",
1338f4c4dcf4SKowalski, Kamil              "The action supplied cannot be resubmitted to the implementation. "
1339*f12894f8SJason M. Bills              " "
1340*f12894f8SJason M. Bills              "Perhaps the action was invalid, the wrong resource was the "
1341*f12894f8SJason M. Bills              "target or "
1342*f12894f8SJason M. Bills              "the implementation documentation may be of assistance."}});
1343f4c4dcf4SKowalski, Kamil }
1344f4c4dcf4SKowalski, Kamil 
1345f4c4dcf4SKowalski, Kamil /**
1346f4c4dcf4SKowalski, Kamil  * @internal
1347f4c4dcf4SKowalski, Kamil  * @brief Formats InvalidIndex message into JSON
1348f4c4dcf4SKowalski, Kamil  *
1349f4c4dcf4SKowalski, Kamil  * See header file for more information
1350f4c4dcf4SKowalski, Kamil  * @endinternal
1351f4c4dcf4SKowalski, Kamil  */
1352*f12894f8SJason M. Bills void invalidIndex(crow::Response& res, const int& arg1)
13531abe55efSEd Tanous {
1354*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1355*f12894f8SJason M. Bills     addMessageToErrorJson(
1356*f12894f8SJason M. Bills         res.jsonValue,
1357*f12894f8SJason M. Bills         nlohmann::json{
1358f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1359f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.InvalidIndex"},
136055c7b7a2SEd Tanous             {"Message", "The index " + std::to_string(arg1) +
1361f4c4dcf4SKowalski, Kamil                             " is not a valid offset into the array."},
1362f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1363*f12894f8SJason M. Bills             {"Resolution", "Verify the index value provided is within the "
1364*f12894f8SJason M. Bills                            "bounds of the array."}});
1365f4c4dcf4SKowalski, Kamil }
1366f4c4dcf4SKowalski, Kamil 
1367f4c4dcf4SKowalski, Kamil /**
1368f4c4dcf4SKowalski, Kamil  * @internal
1369f4c4dcf4SKowalski, Kamil  * @brief Formats EmptyJSON message into JSON
1370f4c4dcf4SKowalski, Kamil  *
1371f4c4dcf4SKowalski, Kamil  * See header file for more information
1372f4c4dcf4SKowalski, Kamil  * @endinternal
1373f4c4dcf4SKowalski, Kamil  */
1374*f12894f8SJason M. Bills void emptyJSON(crow::Response& res)
13751abe55efSEd Tanous {
1376*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1377*f12894f8SJason M. Bills     addMessageToErrorJson(
1378*f12894f8SJason M. Bills         res.jsonValue,
1379*f12894f8SJason M. Bills         nlohmann::json{
1380f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1381f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.EmptyJSON"},
1382*f12894f8SJason M. Bills             {"Message", "The request body submitted contained an empty JSON "
1383*f12894f8SJason M. Bills                         "object and the "
1384f4c4dcf4SKowalski, Kamil                         "service is unable to process it."},
1385f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1386f4c4dcf4SKowalski, Kamil             {"Resolution",
1387*f12894f8SJason M. Bills              "Add properties in the JSON object and resubmit the request."}});
1388f4c4dcf4SKowalski, Kamil }
1389f4c4dcf4SKowalski, Kamil 
1390f4c4dcf4SKowalski, Kamil /**
1391f4c4dcf4SKowalski, Kamil  * @internal
1392f4c4dcf4SKowalski, Kamil  * @brief Formats QueryNotSupportedOnResource message into JSON
1393f4c4dcf4SKowalski, Kamil  *
1394f4c4dcf4SKowalski, Kamil  * See header file for more information
1395f4c4dcf4SKowalski, Kamil  * @endinternal
1396f4c4dcf4SKowalski, Kamil  */
1397*f12894f8SJason M. Bills void queryNotSupportedOnResource(crow::Response& res)
13981abe55efSEd Tanous {
1399*f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1400*f12894f8SJason M. Bills     addMessageToErrorJson(
1401*f12894f8SJason M. Bills         res.jsonValue,
1402*f12894f8SJason M. Bills         nlohmann::json{
1403f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1404f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.QueryNotSupportedOnResource"},
1405f4c4dcf4SKowalski, Kamil             {"Message", "Querying is not supported on the requested resource."},
1406f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1407*f12894f8SJason M. Bills             {"Resolution",
1408*f12894f8SJason M. Bills              "Remove the query parameters and resubmit the request "
14091abe55efSEd Tanous              "if the operation "
1410*f12894f8SJason M. Bills              "failed."}});
1411f4c4dcf4SKowalski, Kamil }
1412f4c4dcf4SKowalski, Kamil 
1413f4c4dcf4SKowalski, Kamil /**
1414f4c4dcf4SKowalski, Kamil  * @internal
1415f4c4dcf4SKowalski, Kamil  * @brief Formats InsufficientPrivilege message into JSON
1416f4c4dcf4SKowalski, Kamil  *
1417f4c4dcf4SKowalski, Kamil  * See header file for more information
1418f4c4dcf4SKowalski, Kamil  * @endinternal
1419f4c4dcf4SKowalski, Kamil  */
1420*f12894f8SJason M. Bills void insufficientPrivilege(crow::Response& res)
14211abe55efSEd Tanous {
1422*f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1423*f12894f8SJason M. Bills     addMessageToErrorJson(
1424*f12894f8SJason M. Bills         res.jsonValue,
1425*f12894f8SJason M. Bills         nlohmann::json{
1426f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1427f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.InsufficientPrivilege"},
1428f4c4dcf4SKowalski, Kamil             {"Message",
1429f4c4dcf4SKowalski, Kamil              "There are insufficient privileges for the account or credentials "
1430f4c4dcf4SKowalski, Kamil              "associated with the current session to perform the requested "
1431f4c4dcf4SKowalski, Kamil              "operation."},
1432f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1433f4c4dcf4SKowalski, Kamil             {"Resolution",
1434*f12894f8SJason M. Bills              "Either abandon the operation or change the associated access "
1435*f12894f8SJason M. Bills              "rights "
1436*f12894f8SJason M. Bills              "and resubmit the request if the operation failed."}});
1437f4c4dcf4SKowalski, Kamil }
1438f4c4dcf4SKowalski, Kamil 
1439f4c4dcf4SKowalski, Kamil /**
1440f4c4dcf4SKowalski, Kamil  * @internal
1441f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyValueModified message into JSON
1442f4c4dcf4SKowalski, Kamil  *
1443f4c4dcf4SKowalski, Kamil  * See header file for more information
1444f4c4dcf4SKowalski, Kamil  * @endinternal
1445f4c4dcf4SKowalski, Kamil  */
1446*f12894f8SJason M. Bills void propertyValueModified(crow::Response& res, const std::string& arg1,
1447*f12894f8SJason M. Bills                            const std::string& arg2,
1448*f12894f8SJason M. Bills                            const std::string& fieldPath)
14491abe55efSEd Tanous {
1450*f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1451*f12894f8SJason M. Bills     addMessageToJson(
1452*f12894f8SJason M. Bills         res.jsonValue,
1453*f12894f8SJason M. Bills         nlohmann::json{
1454f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1455f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyValueModified"},
1456*f12894f8SJason M. Bills             {"Message", "The property " + arg1 + " was assigned the value " +
1457*f12894f8SJason M. Bills                             arg2 + " due to modification by the service."},
1458f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1459*f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}},
1460*f12894f8SJason M. Bills         fieldPath);
1461f4c4dcf4SKowalski, Kamil }
1462f4c4dcf4SKowalski, Kamil 
1463f4c4dcf4SKowalski, Kamil /**
1464f4c4dcf4SKowalski, Kamil  * @internal
1465f4c4dcf4SKowalski, Kamil  * @brief Formats AccountNotModified message into JSON
1466f4c4dcf4SKowalski, Kamil  *
1467f4c4dcf4SKowalski, Kamil  * See header file for more information
1468f4c4dcf4SKowalski, Kamil  * @endinternal
1469f4c4dcf4SKowalski, Kamil  */
1470*f12894f8SJason M. Bills void accountNotModified(crow::Response& res)
14711abe55efSEd Tanous {
1472*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1473*f12894f8SJason M. Bills     addMessageToErrorJson(
1474*f12894f8SJason M. Bills         res.jsonValue,
1475*f12894f8SJason M. Bills         nlohmann::json{
1476f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1477f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.AccountNotModified"},
1478f4c4dcf4SKowalski, Kamil             {"Message", "The account modification request failed."},
1479f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1480*f12894f8SJason M. Bills             {"Resolution", "The modification may have failed due to permission "
1481*f12894f8SJason M. Bills                            "issues or issues "
1482*f12894f8SJason M. Bills                            "with the request body."}});
1483f4c4dcf4SKowalski, Kamil }
1484f4c4dcf4SKowalski, Kamil 
1485f4c4dcf4SKowalski, Kamil /**
1486f4c4dcf4SKowalski, Kamil  * @internal
1487f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterValueFormatError message into JSON
1488f4c4dcf4SKowalski, Kamil  *
1489f4c4dcf4SKowalski, Kamil  * See header file for more information
1490f4c4dcf4SKowalski, Kamil  * @endinternal
1491f4c4dcf4SKowalski, Kamil  */
1492*f12894f8SJason M. Bills void queryParameterValueFormatError(crow::Response& res,
1493*f12894f8SJason M. Bills                                     const std::string& arg1,
14941abe55efSEd Tanous                                     const std::string& arg2)
14951abe55efSEd Tanous {
1496*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1497*f12894f8SJason M. Bills     addMessageToErrorJson(
1498*f12894f8SJason M. Bills         res.jsonValue,
1499*f12894f8SJason M. Bills         nlohmann::json{
1500f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1501f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.QueryParameterValueFormatError"},
1502f4c4dcf4SKowalski, Kamil             {"Message",
1503f4c4dcf4SKowalski, Kamil              "The value " + arg1 + " for the parameter " + arg2 +
1504f4c4dcf4SKowalski, Kamil                  " is of a different format than the parameter can accept."},
1505f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
15061abe55efSEd Tanous             {"Resolution", "Correct the value for the query parameter in the "
15071abe55efSEd Tanous                            "request and resubmit "
1508*f12894f8SJason M. Bills                            "the request if the operation failed."}});
1509f4c4dcf4SKowalski, Kamil }
1510f4c4dcf4SKowalski, Kamil 
1511f4c4dcf4SKowalski, Kamil /**
1512f4c4dcf4SKowalski, Kamil  * @internal
1513f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyMissing message into JSON
1514f4c4dcf4SKowalski, Kamil  *
1515f4c4dcf4SKowalski, Kamil  * See header file for more information
1516f4c4dcf4SKowalski, Kamil  * @endinternal
1517f4c4dcf4SKowalski, Kamil  */
1518*f12894f8SJason M. Bills void propertyMissing(crow::Response& res, const std::string& arg1)
15191abe55efSEd Tanous {
1520*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1521*f12894f8SJason M. Bills     addMessageToErrorJson(
1522*f12894f8SJason M. Bills         res.jsonValue,
1523*f12894f8SJason M. Bills         nlohmann::json{
1524f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1525f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.PropertyMissing"},
1526*f12894f8SJason M. Bills             {"Message", "The property " + arg1 +
1527*f12894f8SJason M. Bills                             " is a required property and must be included in "
1528*f12894f8SJason M. Bills                             "the request."},
1529f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1530*f12894f8SJason M. Bills             {"Resolution",
1531*f12894f8SJason M. Bills              "Ensure that the property is in the request body and "
15321abe55efSEd Tanous              "has a valid value "
1533*f12894f8SJason M. Bills              "and resubmit the request if the operation failed."}});
1534*f12894f8SJason M. Bills }
1535*f12894f8SJason M. Bills 
1536*f12894f8SJason M. Bills /**
1537*f12894f8SJason M. Bills  * @internal
1538*f12894f8SJason M. Bills  * @brief Formats PropertyMissing message into JSON for the specified property
1539*f12894f8SJason M. Bills  *
1540*f12894f8SJason M. Bills  * See header file for more information
1541*f12894f8SJason M. Bills  * @endinternal
1542*f12894f8SJason M. Bills  */
1543*f12894f8SJason M. Bills void propertyMissing(crow::Response& res, const std::string& arg1,
1544*f12894f8SJason M. Bills                      const std::string& property)
1545*f12894f8SJason M. Bills {
1546*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1547*f12894f8SJason M. Bills     addMessageToJson(
1548*f12894f8SJason M. Bills         res.jsonValue,
1549*f12894f8SJason M. Bills         nlohmann::json{
1550*f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1551*f12894f8SJason M. Bills             {"MessageId", "Base.1.2.0.PropertyMissing"},
1552*f12894f8SJason M. Bills             {"Message", "The property " + arg1 +
1553*f12894f8SJason M. Bills                             " is a required property and must be included in "
1554*f12894f8SJason M. Bills                             "the request."},
1555*f12894f8SJason M. Bills             {"Severity", "Warning"},
1556*f12894f8SJason M. Bills             {"Resolution",
1557*f12894f8SJason M. Bills              "Ensure that the property is in the request body and "
1558*f12894f8SJason M. Bills              "has a valid value "
1559*f12894f8SJason M. Bills              "and resubmit the request if the operation failed."}},
1560*f12894f8SJason M. Bills         property);
1561f4c4dcf4SKowalski, Kamil }
1562f4c4dcf4SKowalski, Kamil 
1563f4c4dcf4SKowalski, Kamil /**
1564f4c4dcf4SKowalski, Kamil  * @internal
1565f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceExhaustion message into JSON
1566f4c4dcf4SKowalski, Kamil  *
1567f4c4dcf4SKowalski, Kamil  * See header file for more information
1568f4c4dcf4SKowalski, Kamil  * @endinternal
1569f4c4dcf4SKowalski, Kamil  */
1570*f12894f8SJason M. Bills void resourceExhaustion(crow::Response& res, const std::string& arg1)
15711abe55efSEd Tanous {
1572*f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1573*f12894f8SJason M. Bills     addMessageToErrorJson(
1574*f12894f8SJason M. Bills         res.jsonValue,
1575*f12894f8SJason M. Bills         nlohmann::json{
1576f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1577f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.ResourceExhaustion"},
1578d425c6f6SEd Tanous             {"Message", "The resource " + arg1 +
1579d425c6f6SEd Tanous                             " was unable to satisfy the request "
1580f4c4dcf4SKowalski, Kamil                             "due to unavailability of "
1581f4c4dcf4SKowalski, Kamil                             "resources."},
1582f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1583*f12894f8SJason M. Bills             {"Resolution", "Ensure that the resources are available and "
1584*f12894f8SJason M. Bills                            "resubmit the request."}});
1585f4c4dcf4SKowalski, Kamil }
1586f4c4dcf4SKowalski, Kamil 
1587f4c4dcf4SKowalski, Kamil /**
1588f4c4dcf4SKowalski, Kamil  * @internal
1589f4c4dcf4SKowalski, Kamil  * @brief Formats AccountModified message into JSON
1590f4c4dcf4SKowalski, Kamil  *
1591f4c4dcf4SKowalski, Kamil  * See header file for more information
1592f4c4dcf4SKowalski, Kamil  * @endinternal
1593f4c4dcf4SKowalski, Kamil  */
1594*f12894f8SJason M. Bills void accountModified(crow::Response& res, const std::string& fieldPath)
15951abe55efSEd Tanous {
1596*f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1597*f12894f8SJason M. Bills     addMessageToJson(
1598*f12894f8SJason M. Bills         res.jsonValue,
1599*f12894f8SJason M. Bills         nlohmann::json{
1600f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1601f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.AccountModified"},
1602f4c4dcf4SKowalski, Kamil             {"Message", "The account was successfully modified."},
1603f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1604*f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}},
1605*f12894f8SJason M. Bills         fieldPath);
1606f4c4dcf4SKowalski, Kamil }
1607f4c4dcf4SKowalski, Kamil 
1608f4c4dcf4SKowalski, Kamil /**
1609f4c4dcf4SKowalski, Kamil  * @internal
1610f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterOutOfRange message into JSON
1611f4c4dcf4SKowalski, Kamil  *
1612f4c4dcf4SKowalski, Kamil  * See header file for more information
1613f4c4dcf4SKowalski, Kamil  * @endinternal
1614f4c4dcf4SKowalski, Kamil  */
1615*f12894f8SJason M. Bills void queryParameterOutOfRange(crow::Response& res, const std::string& arg1,
1616*f12894f8SJason M. Bills                               const std::string& arg2, const std::string& arg3)
16171abe55efSEd Tanous {
1618*f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1619*f12894f8SJason M. Bills     addMessageToErrorJson(
1620*f12894f8SJason M. Bills         res.jsonValue,
1621*f12894f8SJason M. Bills         nlohmann::json{
1622f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1623f4c4dcf4SKowalski, Kamil             {"MessageId", "Base.1.2.0.QueryParameterOutOfRange"},
1624*f12894f8SJason M. Bills             {"Message", "The value " + arg1 + " for the query parameter " +
1625*f12894f8SJason M. Bills                             arg2 + " is out of range " + arg3 + "."},
1626f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1627f4c4dcf4SKowalski, Kamil             {"Resolution",
1628*f12894f8SJason M. Bills              "Reduce the value for the query parameter to a value that is "
1629*f12894f8SJason M. Bills              "within "
1630*f12894f8SJason M. Bills              "range, such as a start or count value that is within bounds of "
1631*f12894f8SJason M. Bills              "the "
16321abe55efSEd Tanous              "number of resources in a collection or a page that is within the "
16331abe55efSEd Tanous              "range "
1634*f12894f8SJason M. Bills              "of valid pages."}});
1635f4c4dcf4SKowalski, Kamil }
1636f4c4dcf4SKowalski, Kamil 
1637f4c4dcf4SKowalski, Kamil } // namespace messages
1638f4c4dcf4SKowalski, Kamil 
1639d425c6f6SEd Tanous } // namespace redfish
1640