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 */
16*c94ad49bSEd Tanous #include <logging.h>
17f4c4dcf4SKowalski, Kamil 
181abe55efSEd Tanous #include <error_messages.hpp>
19f4c4dcf4SKowalski, Kamil 
201abe55efSEd Tanous namespace redfish
211abe55efSEd Tanous {
221abe55efSEd Tanous 
231abe55efSEd Tanous namespace messages
241abe55efSEd Tanous {
25f4c4dcf4SKowalski, Kamil 
26f12894f8SJason M. Bills static void addMessageToErrorJson(nlohmann::json& target,
271abe55efSEd Tanous                                   const nlohmann::json& message)
281abe55efSEd Tanous {
29f4c4dcf4SKowalski, Kamil     auto& error = target["error"];
30f4c4dcf4SKowalski, Kamil 
311abe55efSEd Tanous     // If this is the first error message, fill in the information from the
321abe55efSEd Tanous     // first error message to the top level struct
331abe55efSEd Tanous     if (!error.is_object())
341abe55efSEd Tanous     {
35c074230bSJason M. Bills         auto messageIdIterator = message.find("MessageId");
36c074230bSJason M. Bills         if (messageIdIterator == 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 
43c074230bSJason M. Bills         auto messageFieldIterator = message.find("Message");
44c074230bSJason M. Bills         if (messageFieldIterator == message.end())
451abe55efSEd Tanous         {
461abe55efSEd Tanous             BMCWEB_LOG_CRITICAL
471abe55efSEd Tanous                 << "Attempt to add error message without Message";
48f4c4dcf4SKowalski, Kamil             return;
49f4c4dcf4SKowalski, Kamil         }
50c21055aaSEd Tanous         error = {{"code", *messageIdIterator},
51c21055aaSEd Tanous                  {"message", *messageFieldIterator}};
521abe55efSEd Tanous     }
531abe55efSEd Tanous     else
541abe55efSEd Tanous     {
55f4c4dcf4SKowalski, Kamil         // More than 1 error occurred, so the message has to be generic
5655c7b7a2SEd Tanous         error["code"] = std::string(messageVersionPrefix) + "GeneralError";
57cc9139ecSJason M. Bills         error["message"] = "A general error has occurred. See Resolution for "
58cc9139ecSJason M. Bills                            "information on how to resolve the error.";
59f4c4dcf4SKowalski, Kamil     }
60f4c4dcf4SKowalski, Kamil 
61f4c4dcf4SKowalski, Kamil     // This check could technically be done in in the default construction
62f4c4dcf4SKowalski, Kamil     // branch above, but because we need the pointer to the extended info field
63f4c4dcf4SKowalski, Kamil     // anyway, it's more efficient to do it here.
64c074230bSJason M. Bills     auto& extendedInfo = error[messages::messageAnnotation];
65c074230bSJason M. Bills     if (!extendedInfo.is_array())
661abe55efSEd Tanous     {
67c074230bSJason M. Bills         extendedInfo = nlohmann::json::array();
68f4c4dcf4SKowalski, Kamil     }
69f4c4dcf4SKowalski, Kamil 
70c074230bSJason M. Bills     extendedInfo.push_back(message);
71f4c4dcf4SKowalski, Kamil }
72f4c4dcf4SKowalski, Kamil 
73f12894f8SJason M. Bills static void addMessageToJsonRoot(nlohmann::json& target,
74f12894f8SJason M. Bills                                  const nlohmann::json& message)
751abe55efSEd Tanous {
761abe55efSEd Tanous     if (!target[messages::messageAnnotation].is_array())
771abe55efSEd Tanous     {
78f4c4dcf4SKowalski, Kamil         // Force object to be an array
7955c7b7a2SEd Tanous         target[messages::messageAnnotation] = nlohmann::json::array();
80f4c4dcf4SKowalski, Kamil     }
81f4c4dcf4SKowalski, Kamil 
8255c7b7a2SEd Tanous     target[messages::messageAnnotation].push_back(message);
83f4c4dcf4SKowalski, Kamil }
84f4c4dcf4SKowalski, Kamil 
85f12894f8SJason M. Bills static void addMessageToJson(nlohmann::json& target,
86f12894f8SJason M. Bills                              const nlohmann::json& message,
871abe55efSEd Tanous                              const std::string& fieldPath)
881abe55efSEd Tanous {
89a08b46ccSJason M. Bills     std::string extendedInfo(fieldPath + messages::messageAnnotation);
90f4c4dcf4SKowalski, Kamil 
911abe55efSEd Tanous     if (!target[extendedInfo].is_array())
921abe55efSEd Tanous     {
93f4c4dcf4SKowalski, Kamil         // Force object to be an array
94f4c4dcf4SKowalski, Kamil         target[extendedInfo] = nlohmann::json::array();
95f4c4dcf4SKowalski, Kamil     }
96f4c4dcf4SKowalski, Kamil 
97f4c4dcf4SKowalski, Kamil     // Object exists and it is an array so we can just push in the message
98f4c4dcf4SKowalski, Kamil     target[extendedInfo].push_back(message);
99f4c4dcf4SKowalski, Kamil }
100f4c4dcf4SKowalski, Kamil 
101f4c4dcf4SKowalski, Kamil /**
102f4c4dcf4SKowalski, Kamil  * @internal
103f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceInUse message into JSON
104f4c4dcf4SKowalski, Kamil  *
105f4c4dcf4SKowalski, Kamil  * See header file for more information
106f4c4dcf4SKowalski, Kamil  * @endinternal
107f4c4dcf4SKowalski, Kamil  */
108f12894f8SJason M. Bills void resourceInUse(crow::Response& res)
1091abe55efSEd Tanous {
110f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
111f12894f8SJason M. Bills     addMessageToErrorJson(
112f12894f8SJason M. Bills         res.jsonValue,
113f12894f8SJason M. Bills         nlohmann::json{
114f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
115cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceInUse"},
11666ac2b8cSJason M. Bills             {"Message", "The change to the requested resource failed because "
11766ac2b8cSJason M. Bills                         "the resource is in use or in transition."},
11885659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
119f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
12066ac2b8cSJason M. Bills             {"Resolution", "Remove the condition and resubmit the request if "
12166ac2b8cSJason M. Bills                            "the operation failed."}});
122f4c4dcf4SKowalski, Kamil }
123f4c4dcf4SKowalski, Kamil 
124f4c4dcf4SKowalski, Kamil /**
125f4c4dcf4SKowalski, Kamil  * @internal
126f4c4dcf4SKowalski, Kamil  * @brief Formats MalformedJSON message into JSON
127f4c4dcf4SKowalski, Kamil  *
128f4c4dcf4SKowalski, Kamil  * See header file for more information
129f4c4dcf4SKowalski, Kamil  * @endinternal
130f4c4dcf4SKowalski, Kamil  */
131f12894f8SJason M. Bills void malformedJSON(crow::Response& res)
1321abe55efSEd Tanous {
133f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
134f12894f8SJason M. Bills     addMessageToErrorJson(
135f12894f8SJason M. Bills         res.jsonValue,
136f12894f8SJason M. Bills         nlohmann::json{
137f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
138cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.MalformedJSON"},
13966ac2b8cSJason M. Bills             {"Message", "The request body submitted was malformed JSON and "
14066ac2b8cSJason M. Bills                         "could not be parsed by the receiving service."},
14185659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
142f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1431abe55efSEd Tanous             {"Resolution", "Ensure that the request body is valid JSON and "
144f12894f8SJason M. Bills                            "resubmit the request."}});
145f4c4dcf4SKowalski, Kamil }
146f4c4dcf4SKowalski, Kamil 
147f4c4dcf4SKowalski, Kamil /**
148f4c4dcf4SKowalski, Kamil  * @internal
149f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceMissingAtURI message into JSON
150f4c4dcf4SKowalski, Kamil  *
151f4c4dcf4SKowalski, Kamil  * See header file for more information
152f4c4dcf4SKowalski, Kamil  * @endinternal
153f4c4dcf4SKowalski, Kamil  */
154f12894f8SJason M. Bills void resourceMissingAtURI(crow::Response& res, const std::string& arg1)
1551abe55efSEd Tanous {
156f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
157f12894f8SJason M. Bills     addMessageToErrorJson(
158f12894f8SJason M. Bills         res.jsonValue,
159f12894f8SJason M. Bills         nlohmann::json{
160f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
161cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceMissingAtURI"},
162f4c4dcf4SKowalski, Kamil             {"Message", "The resource at the URI " + arg1 + " was not found."},
16385659adfSJason M. Bills             {"MessageArgs", {arg1}},
164f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
16566ac2b8cSJason M. Bills             {"Resolution", "Place a valid resource at the URI or correct the "
16666ac2b8cSJason M. Bills                            "URI and resubmit the request."}});
167f4c4dcf4SKowalski, Kamil }
168f4c4dcf4SKowalski, Kamil 
169f4c4dcf4SKowalski, Kamil /**
170f4c4dcf4SKowalski, Kamil  * @internal
171f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterValueFormatError message into JSON
172f4c4dcf4SKowalski, Kamil  *
173f4c4dcf4SKowalski, Kamil  * See header file for more information
174f4c4dcf4SKowalski, Kamil  * @endinternal
175f4c4dcf4SKowalski, Kamil  */
176f12894f8SJason M. Bills void actionParameterValueFormatError(crow::Response& res,
177f12894f8SJason M. Bills                                      const std::string& arg1,
178f4c4dcf4SKowalski, Kamil                                      const std::string& arg2,
1791abe55efSEd Tanous                                      const std::string& arg3)
1801abe55efSEd Tanous {
181f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
182f12894f8SJason M. Bills     addMessageToErrorJson(
183f12894f8SJason M. Bills         res.jsonValue,
184f12894f8SJason M. Bills         nlohmann::json{
185f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
186cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterValueFormatError"},
187f4c4dcf4SKowalski, Kamil             {"Message",
1881abe55efSEd Tanous              "The value " + arg1 + " for the parameter " + arg2 +
1891abe55efSEd Tanous                  " in the action " + arg3 +
1901abe55efSEd Tanous                  " is of a different format than the parameter can accept."},
19185659adfSJason M. Bills             {"MessageArgs", {arg1, arg2, arg3}},
192f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
19366ac2b8cSJason M. Bills             {"Resolution",
19466ac2b8cSJason M. Bills              "Correct the value for the parameter in the request body and "
19566ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
196f4c4dcf4SKowalski, Kamil }
197f4c4dcf4SKowalski, Kamil 
198f4c4dcf4SKowalski, Kamil /**
199f4c4dcf4SKowalski, Kamil  * @internal
200f4c4dcf4SKowalski, Kamil  * @brief Formats InternalError message into JSON
201f4c4dcf4SKowalski, Kamil  *
202f4c4dcf4SKowalski, Kamil  * See header file for more information
203f4c4dcf4SKowalski, Kamil  * @endinternal
204f4c4dcf4SKowalski, Kamil  */
205f12894f8SJason M. Bills void internalError(crow::Response& res)
2061abe55efSEd Tanous {
207f12894f8SJason M. Bills     res.result(boost::beast::http::status::internal_server_error);
208f12894f8SJason M. Bills     addMessageToErrorJson(
209f12894f8SJason M. Bills         res.jsonValue,
210f12894f8SJason M. Bills         nlohmann::json{
211f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
212cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InternalError"},
213f12894f8SJason M. Bills             {"Message", "The request failed due to an internal service error.  "
21466ac2b8cSJason M. Bills                         "The service is still operational."},
21585659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
216f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
2171abe55efSEd Tanous             {"Resolution", "Resubmit the request.  If the problem persists, "
21866ac2b8cSJason M. Bills                            "consider resetting the service."}});
219f12894f8SJason M. Bills }
220f12894f8SJason M. Bills 
221f12894f8SJason M. Bills /**
222f12894f8SJason M. Bills  * @internal
223f4c4dcf4SKowalski, Kamil  * @brief Formats UnrecognizedRequestBody message into JSON
224f4c4dcf4SKowalski, Kamil  *
225f4c4dcf4SKowalski, Kamil  * See header file for more information
226f4c4dcf4SKowalski, Kamil  * @endinternal
227f4c4dcf4SKowalski, Kamil  */
228f12894f8SJason M. Bills void unrecognizedRequestBody(crow::Response& res)
2291abe55efSEd Tanous {
230f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
231f12894f8SJason M. Bills     addMessageToErrorJson(
232f12894f8SJason M. Bills         res.jsonValue,
233f12894f8SJason M. Bills         nlohmann::json{
234f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
235cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.UnrecognizedRequestBody"},
236f12894f8SJason M. Bills             {"Message", "The service detected a malformed request body that it "
23766ac2b8cSJason M. Bills                         "was unable to interpret."},
23885659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
239f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
240f12894f8SJason M. Bills             {"Resolution", "Correct the request body and resubmit the request "
241f12894f8SJason M. Bills                            "if it failed."}});
242f4c4dcf4SKowalski, Kamil }
243f4c4dcf4SKowalski, Kamil 
244f4c4dcf4SKowalski, Kamil /**
245f4c4dcf4SKowalski, Kamil  * @internal
246f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceAtUriUnauthorized message into JSON
247f4c4dcf4SKowalski, Kamil  *
248f4c4dcf4SKowalski, Kamil  * See header file for more information
249f4c4dcf4SKowalski, Kamil  * @endinternal
250f4c4dcf4SKowalski, Kamil  */
251f12894f8SJason M. Bills void resourceAtUriUnauthorized(crow::Response& res, const std::string& arg1,
2521abe55efSEd Tanous                                const std::string& arg2)
2531abe55efSEd Tanous {
254f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
255f12894f8SJason M. Bills     addMessageToErrorJson(
256f12894f8SJason M. Bills         res.jsonValue,
257f12894f8SJason M. Bills         nlohmann::json{
258f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
259cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceAtUriUnauthorized"},
260f4c4dcf4SKowalski, Kamil             {"Message", "While accessing the resource at " + arg1 +
2611abe55efSEd Tanous                             ", the service received an authorization error " +
2621abe55efSEd Tanous                             arg2 + "."},
26385659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
264f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
265f12894f8SJason M. Bills             {"Resolution", "Ensure that the appropriate access is provided for "
26666ac2b8cSJason M. Bills                            "the service in order for it to access the URI."}});
267f4c4dcf4SKowalski, Kamil }
268f4c4dcf4SKowalski, Kamil 
269f4c4dcf4SKowalski, Kamil /**
270f4c4dcf4SKowalski, Kamil  * @internal
271f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterUnknown message into JSON
272f4c4dcf4SKowalski, Kamil  *
273f4c4dcf4SKowalski, Kamil  * See header file for more information
274f4c4dcf4SKowalski, Kamil  * @endinternal
275f4c4dcf4SKowalski, Kamil  */
276f12894f8SJason M. Bills void actionParameterUnknown(crow::Response& res, const std::string& arg1,
2771abe55efSEd Tanous                             const std::string& arg2)
2781abe55efSEd Tanous {
279f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
280f12894f8SJason M. Bills     addMessageToErrorJson(
281f12894f8SJason M. Bills         res.jsonValue,
282f12894f8SJason M. Bills         nlohmann::json{
283f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
284cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterUnknown"},
285f4c4dcf4SKowalski, Kamil             {"Message", "The action " + arg1 +
286f12894f8SJason M. Bills                             " was submitted with the invalid parameter " +
287f12894f8SJason M. Bills                             arg2 + "."},
28885659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
289f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
29066ac2b8cSJason M. Bills             {"Resolution", "Correct the invalid parameter and resubmit the "
29166ac2b8cSJason M. Bills                            "request if the operation failed."}});
292f4c4dcf4SKowalski, Kamil }
293f4c4dcf4SKowalski, Kamil 
294f4c4dcf4SKowalski, Kamil /**
295f4c4dcf4SKowalski, Kamil  * @internal
296f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceCannotBeDeleted message into JSON
297f4c4dcf4SKowalski, Kamil  *
298f4c4dcf4SKowalski, Kamil  * See header file for more information
299f4c4dcf4SKowalski, Kamil  * @endinternal
300f4c4dcf4SKowalski, Kamil  */
301f12894f8SJason M. Bills void resourceCannotBeDeleted(crow::Response& res)
3021abe55efSEd Tanous {
303f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
304f12894f8SJason M. Bills     addMessageToErrorJson(
305f12894f8SJason M. Bills         res.jsonValue,
306f12894f8SJason M. Bills         nlohmann::json{
307f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
308cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceCannotBeDeleted"},
309f12894f8SJason M. Bills             {"Message", "The delete request failed because the resource "
31066ac2b8cSJason M. Bills                         "requested cannot be deleted."},
31185659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
312f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
313f12894f8SJason M. Bills             {"Resolution",
314f12894f8SJason M. Bills              "Do not attempt to delete a non-deletable resource."}});
315f4c4dcf4SKowalski, Kamil }
316f4c4dcf4SKowalski, Kamil 
317f4c4dcf4SKowalski, Kamil /**
318f4c4dcf4SKowalski, Kamil  * @internal
319f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyDuplicate message into JSON
320f4c4dcf4SKowalski, Kamil  *
321f4c4dcf4SKowalski, Kamil  * See header file for more information
322f4c4dcf4SKowalski, Kamil  * @endinternal
323f4c4dcf4SKowalski, Kamil  */
324f12894f8SJason M. Bills void propertyDuplicate(crow::Response& res, const std::string& arg1)
3251abe55efSEd Tanous {
326f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
327a08b46ccSJason M. Bills     addMessageToJson(
328f12894f8SJason M. Bills         res.jsonValue,
329f12894f8SJason M. Bills         nlohmann::json{
330f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
331cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyDuplicate"},
332f12894f8SJason M. Bills             {"Message",
333f12894f8SJason M. Bills              "The property " + arg1 + " was duplicated in the request."},
33485659adfSJason M. Bills             {"MessageArgs", {arg1}},
335f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
33666ac2b8cSJason M. Bills             {"Resolution",
33766ac2b8cSJason M. Bills              "Remove the duplicate property from the request body and resubmit "
338a08b46ccSJason M. Bills              "the request if the operation failed."}},
339a08b46ccSJason M. Bills         arg1);
340f4c4dcf4SKowalski, Kamil }
341f4c4dcf4SKowalski, Kamil 
342f4c4dcf4SKowalski, Kamil /**
343f4c4dcf4SKowalski, Kamil  * @internal
344f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceTemporarilyUnavailable message into JSON
345f4c4dcf4SKowalski, Kamil  *
346f4c4dcf4SKowalski, Kamil  * See header file for more information
347f4c4dcf4SKowalski, Kamil  * @endinternal
348f4c4dcf4SKowalski, Kamil  */
349f12894f8SJason M. Bills void serviceTemporarilyUnavailable(crow::Response& res, const std::string& arg1)
3501abe55efSEd Tanous {
351f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
352f12894f8SJason M. Bills     addMessageToErrorJson(
353f12894f8SJason M. Bills         res.jsonValue,
354f12894f8SJason M. Bills         nlohmann::json{
355f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
356cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ServiceTemporarilyUnavailable"},
3571abe55efSEd Tanous             {"Message", "The service is temporarily unavailable.  Retry in " +
3581abe55efSEd Tanous                             arg1 + " seconds."},
35985659adfSJason M. Bills             {"MessageArgs", {arg1}},
360f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
361f12894f8SJason M. Bills             {"Resolution", "Wait for the indicated retry duration and retry "
362f12894f8SJason M. Bills                            "the operation."}});
363f4c4dcf4SKowalski, Kamil }
364f4c4dcf4SKowalski, Kamil 
365f4c4dcf4SKowalski, Kamil /**
366f4c4dcf4SKowalski, Kamil  * @internal
367f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceAlreadyExists message into JSON
368f4c4dcf4SKowalski, Kamil  *
369f4c4dcf4SKowalski, Kamil  * See header file for more information
370f4c4dcf4SKowalski, Kamil  * @endinternal
371f4c4dcf4SKowalski, Kamil  */
372f12894f8SJason M. Bills void resourceAlreadyExists(crow::Response& res, const std::string& arg1,
373f12894f8SJason M. Bills                            const std::string& arg2, const std::string& arg3)
3741abe55efSEd Tanous {
375f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
376a08b46ccSJason M. Bills     addMessageToJson(
377f12894f8SJason M. Bills         res.jsonValue,
378f12894f8SJason M. Bills         nlohmann::json{
379f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
380cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceAlreadyExists"},
381f4c4dcf4SKowalski, Kamil             {"Message", "The requested resource of type " + arg1 +
3821abe55efSEd Tanous                             " with the property " + arg2 + " with the value " +
3831abe55efSEd Tanous                             arg3 + " already exists."},
38485659adfSJason M. Bills             {"MessageArgs", {arg1, arg2, arg3}},
385f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
386f12894f8SJason M. Bills             {"Resolution", "Do not repeat the create operation as the resource "
387a08b46ccSJason M. Bills                            "has already been created."}},
388a08b46ccSJason M. Bills         arg2);
389f4c4dcf4SKowalski, Kamil }
390f4c4dcf4SKowalski, Kamil 
391f4c4dcf4SKowalski, Kamil /**
392f4c4dcf4SKowalski, Kamil  * @internal
393f4c4dcf4SKowalski, Kamil  * @brief Formats AccountForSessionNoLongerExists message into JSON
394f4c4dcf4SKowalski, Kamil  *
395f4c4dcf4SKowalski, Kamil  * See header file for more information
396f4c4dcf4SKowalski, Kamil  * @endinternal
397f4c4dcf4SKowalski, Kamil  */
398a08b46ccSJason M. Bills void accountForSessionNoLongerExists(crow::Response& res)
3991abe55efSEd Tanous {
400f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
401a08b46ccSJason M. Bills     addMessageToErrorJson(
402f12894f8SJason M. Bills         res.jsonValue,
403f12894f8SJason M. Bills         nlohmann::json{
404f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
405cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccountForSessionNoLongerExists"},
4061abe55efSEd Tanous             {"Message", "The account for the current session has been removed, "
40766ac2b8cSJason M. Bills                         "thus the current session has been removed as well."},
40885659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
409f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
410a08b46ccSJason M. Bills             {"Resolution", "Attempt to connect with a valid account."}});
411f4c4dcf4SKowalski, Kamil }
412f4c4dcf4SKowalski, Kamil 
413f4c4dcf4SKowalski, Kamil /**
414f4c4dcf4SKowalski, Kamil  * @internal
415f4c4dcf4SKowalski, Kamil  * @brief Formats CreateFailedMissingReqProperties message into JSON
416f4c4dcf4SKowalski, Kamil  *
417f4c4dcf4SKowalski, Kamil  * See header file for more information
418f4c4dcf4SKowalski, Kamil  * @endinternal
419f4c4dcf4SKowalski, Kamil  */
420f12894f8SJason M. Bills void createFailedMissingReqProperties(crow::Response& res,
421f12894f8SJason M. Bills                                       const std::string& arg1)
4221abe55efSEd Tanous {
423f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
424a08b46ccSJason M. Bills     addMessageToJson(
425f12894f8SJason M. Bills         res.jsonValue,
426f12894f8SJason M. Bills         nlohmann::json{
427f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
428cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.CreateFailedMissingReqProperties"},
4291abe55efSEd Tanous             {"Message",
430f12894f8SJason M. Bills              "The create operation failed because the required property " +
431f12894f8SJason M. Bills                  arg1 + " was missing from the request."},
43285659adfSJason M. Bills             {"MessageArgs", {arg1}},
433f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
434f4c4dcf4SKowalski, Kamil             {"Resolution",
435f12894f8SJason M. Bills              "Correct the body to include the required property with a valid "
436a08b46ccSJason M. Bills              "value and resubmit the request if the operation failed."}},
437a08b46ccSJason M. Bills         arg1);
438f12894f8SJason M. Bills }
439f12894f8SJason M. Bills 
440f12894f8SJason M. Bills /**
441f12894f8SJason M. Bills  * @internal
442f12894f8SJason M. Bills  * @brief Formats PropertyValueFormatError message into JSON for the specified
443f12894f8SJason M. Bills  * property
444f12894f8SJason M. Bills  *
445f12894f8SJason M. Bills  * See header file for more information
446f12894f8SJason M. Bills  * @endinternal
447f12894f8SJason M. Bills  */
448f12894f8SJason M. Bills void propertyValueFormatError(crow::Response& res, const std::string& arg1,
449a08b46ccSJason M. Bills                               const std::string& arg2)
450f12894f8SJason M. Bills {
451f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
452f12894f8SJason M. Bills     addMessageToJson(
453f12894f8SJason M. Bills         res.jsonValue,
454f12894f8SJason M. Bills         nlohmann::json{
455f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
456cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueFormatError"},
457f12894f8SJason M. Bills             {"Message",
458f12894f8SJason M. Bills              "The value " + arg1 + " for the property " + arg2 +
459f12894f8SJason M. Bills                  " is of a different format than the property can accept."},
46085659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
461f12894f8SJason M. Bills             {"Severity", "Warning"},
46266ac2b8cSJason M. Bills             {"Resolution",
46366ac2b8cSJason M. Bills              "Correct the value for the property in the request body and "
46466ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}},
465a08b46ccSJason M. Bills         arg2);
466f12894f8SJason M. Bills }
467f12894f8SJason M. Bills 
468f12894f8SJason M. Bills /**
469f12894f8SJason M. Bills  * @internal
470f12894f8SJason M. Bills  * @brief Formats PropertyValueNotInList message into JSON for the specified
471f12894f8SJason M. Bills  * property
472f12894f8SJason M. Bills  *
473f12894f8SJason M. Bills  * See header file for more information
474f12894f8SJason M. Bills  * @endinternal
475f12894f8SJason M. Bills  */
476f12894f8SJason M. Bills void propertyValueNotInList(crow::Response& res, const std::string& arg1,
477a08b46ccSJason M. Bills                             const std::string& arg2)
478f12894f8SJason M. Bills {
479f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
480f12894f8SJason M. Bills     addMessageToJson(
481f12894f8SJason M. Bills         res.jsonValue,
482f12894f8SJason M. Bills         nlohmann::json{
483f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
484cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueNotInList"},
485f12894f8SJason M. Bills             {"Message", "The value " + arg1 + " for the property " + arg2 +
486f12894f8SJason M. Bills                             " is not in the list of acceptable values."},
48785659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
488f12894f8SJason M. Bills             {"Severity", "Warning"},
489f12894f8SJason M. Bills             {"Resolution",
490f12894f8SJason M. Bills              "Choose a value from the enumeration list that the implementation "
49166ac2b8cSJason M. Bills              "can support and resubmit the request if the operation failed."}},
492a08b46ccSJason M. Bills         arg2);
493f4c4dcf4SKowalski, Kamil }
494f4c4dcf4SKowalski, Kamil 
495f4c4dcf4SKowalski, Kamil /**
496f4c4dcf4SKowalski, Kamil  * @internal
497f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceAtUriInUnknownFormat message into JSON
498f4c4dcf4SKowalski, Kamil  *
499f4c4dcf4SKowalski, Kamil  * See header file for more information
500f4c4dcf4SKowalski, Kamil  * @endinternal
501f4c4dcf4SKowalski, Kamil  */
502f12894f8SJason M. Bills void resourceAtUriInUnknownFormat(crow::Response& res, const std::string& arg1)
5031abe55efSEd Tanous {
504f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
505f12894f8SJason M. Bills     addMessageToErrorJson(
506f12894f8SJason M. Bills         res.jsonValue,
507f12894f8SJason M. Bills         nlohmann::json{
508f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
509cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceAtUriInUnknownFormat"},
510f4c4dcf4SKowalski, Kamil             {"Message", "The resource at " + arg1 +
511f4c4dcf4SKowalski, Kamil                             " is in a format not recognized by the service."},
51285659adfSJason M. Bills             {"MessageArgs", {arg1}},
513f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
514f12894f8SJason M. Bills             {"Resolution", "Place an image or resource or file that is "
51566ac2b8cSJason M. Bills                            "recognized by the service at the URI."}});
516f4c4dcf4SKowalski, Kamil }
517f4c4dcf4SKowalski, Kamil 
518f4c4dcf4SKowalski, Kamil /**
519f4c4dcf4SKowalski, Kamil  * @internal
520f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceInUnknownState message into JSON
521f4c4dcf4SKowalski, Kamil  *
522f4c4dcf4SKowalski, Kamil  * See header file for more information
523f4c4dcf4SKowalski, Kamil  * @endinternal
524f4c4dcf4SKowalski, Kamil  */
525f12894f8SJason M. Bills void serviceInUnknownState(crow::Response& res)
5261abe55efSEd Tanous {
527f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
528f12894f8SJason M. Bills     addMessageToErrorJson(
529f12894f8SJason M. Bills         res.jsonValue,
530f12894f8SJason M. Bills         nlohmann::json{
531f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
532cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ServiceInUnknownState"},
53366ac2b8cSJason M. Bills             {"Message",
53466ac2b8cSJason M. Bills              "The operation failed because the service is in an unknown state "
53566ac2b8cSJason M. Bills              "and can no longer take incoming requests."},
53685659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
537f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
53866ac2b8cSJason M. Bills             {"Resolution", "Restart the service and resubmit the request if "
53966ac2b8cSJason M. Bills                            "the operation failed."}});
540f4c4dcf4SKowalski, Kamil }
541f4c4dcf4SKowalski, Kamil 
542f4c4dcf4SKowalski, Kamil /**
543f4c4dcf4SKowalski, Kamil  * @internal
544f4c4dcf4SKowalski, Kamil  * @brief Formats EventSubscriptionLimitExceeded message into JSON
545f4c4dcf4SKowalski, Kamil  *
546f4c4dcf4SKowalski, Kamil  * See header file for more information
547f4c4dcf4SKowalski, Kamil  * @endinternal
548f4c4dcf4SKowalski, Kamil  */
549f12894f8SJason M. Bills void eventSubscriptionLimitExceeded(crow::Response& res)
5501abe55efSEd Tanous {
551f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
552f12894f8SJason M. Bills     addMessageToErrorJson(
553f12894f8SJason M. Bills         res.jsonValue,
554f12894f8SJason M. Bills         nlohmann::json{
555f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
556cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.EventSubscriptionLimitExceeded"},
557f4c4dcf4SKowalski, Kamil             {"Message",
558f4c4dcf4SKowalski, Kamil              "The event subscription failed due to the number of simultaneous "
559f4c4dcf4SKowalski, Kamil              "subscriptions exceeding the limit of the implementation."},
56085659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
561f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
562f4c4dcf4SKowalski, Kamil             {"Resolution",
563f12894f8SJason M. Bills              "Reduce the number of other subscriptions before trying to "
56466ac2b8cSJason M. Bills              "establish the event subscription or increase the limit of "
56566ac2b8cSJason M. Bills              "simultaneous subscriptions (if supported)."}});
566f4c4dcf4SKowalski, Kamil }
567f4c4dcf4SKowalski, Kamil 
568f4c4dcf4SKowalski, Kamil /**
569f4c4dcf4SKowalski, Kamil  * @internal
570f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterMissing message into JSON
571f4c4dcf4SKowalski, Kamil  *
572f4c4dcf4SKowalski, Kamil  * See header file for more information
573f4c4dcf4SKowalski, Kamil  * @endinternal
574f4c4dcf4SKowalski, Kamil  */
575f12894f8SJason M. Bills void actionParameterMissing(crow::Response& res, const std::string& arg1,
5761abe55efSEd Tanous                             const std::string& arg2)
5771abe55efSEd Tanous {
578f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
579f12894f8SJason M. Bills     addMessageToErrorJson(
580f12894f8SJason M. Bills         res.jsonValue,
581f12894f8SJason M. Bills         nlohmann::json{
582f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
583cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterMissing"},
584f12894f8SJason M. Bills             {"Message", "The action " + arg1 + " requires the parameter " +
585f12894f8SJason M. Bills                             arg2 + " to be present in the request body."},
58685659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
587f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
588f12894f8SJason M. Bills             {"Resolution",
58966ac2b8cSJason M. Bills              "Supply the action with the required parameter in the request "
59066ac2b8cSJason M. Bills              "body when the request is resubmitted."}});
591f4c4dcf4SKowalski, Kamil }
592f4c4dcf4SKowalski, Kamil 
593f4c4dcf4SKowalski, Kamil /**
594f4c4dcf4SKowalski, Kamil  * @internal
595f4c4dcf4SKowalski, Kamil  * @brief Formats StringValueTooLong message into JSON
596f4c4dcf4SKowalski, Kamil  *
597f4c4dcf4SKowalski, Kamil  * See header file for more information
598f4c4dcf4SKowalski, Kamil  * @endinternal
599f4c4dcf4SKowalski, Kamil  */
600f12894f8SJason M. Bills void stringValueTooLong(crow::Response& res, const std::string& arg1,
601f12894f8SJason M. Bills                         const int& arg2)
6021abe55efSEd Tanous {
603f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
604f12894f8SJason M. Bills     addMessageToErrorJson(
605f12894f8SJason M. Bills         res.jsonValue,
606f12894f8SJason M. Bills         nlohmann::json{
607f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
608cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.StringValueTooLong"},
609f4c4dcf4SKowalski, Kamil             {"Message", "The string " + arg1 + " exceeds the length limit " +
610f4c4dcf4SKowalski, Kamil                             std::to_string(arg2) + "."},
61185659adfSJason M. Bills             {"MessageArgs", {arg1, std::to_string(arg2)}},
612f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
613f4c4dcf4SKowalski, Kamil             {"Resolution",
614f12894f8SJason M. Bills              "Resubmit the request with an appropriate string length."}});
615f4c4dcf4SKowalski, Kamil }
616f4c4dcf4SKowalski, Kamil 
617f4c4dcf4SKowalski, Kamil /**
618f4c4dcf4SKowalski, Kamil  * @internal
619cc9139ecSJason M. Bills  * @brief Formats SessionTerminated message into JSON
620cc9139ecSJason M. Bills  *
621cc9139ecSJason M. Bills  * See header file for more information
622cc9139ecSJason M. Bills  * @endinternal
623cc9139ecSJason M. Bills  */
624cc9139ecSJason M. Bills void sessionTerminated(crow::Response& res)
625cc9139ecSJason M. Bills {
626cc9139ecSJason M. Bills     res.result(boost::beast::http::status::ok);
627cc9139ecSJason M. Bills     addMessageToJsonRoot(
628cc9139ecSJason M. Bills         res.jsonValue,
629cc9139ecSJason M. Bills         nlohmann::json{
630cc9139ecSJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
631cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.SessionTerminated"},
632cc9139ecSJason M. Bills             {"Message", "The session was successfully terminated."},
63385659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
634cc9139ecSJason M. Bills             {"Severity", "OK"},
635cc9139ecSJason M. Bills             {"Resolution", "No resolution is required."}});
636cc9139ecSJason M. Bills }
637cc9139ecSJason M. Bills 
638cc9139ecSJason M. Bills /**
639cc9139ecSJason M. Bills  * @internal
640cc9139ecSJason M. Bills  * @brief Formats ResourceTypeIncompatible message into JSON
641cc9139ecSJason M. Bills  *
642cc9139ecSJason M. Bills  * See header file for more information
643cc9139ecSJason M. Bills  * @endinternal
644cc9139ecSJason M. Bills  */
645cc9139ecSJason M. Bills void resourceTypeIncompatible(crow::Response& res, const std::string& arg1,
646cc9139ecSJason M. Bills                               const std::string& arg2)
647cc9139ecSJason M. Bills {
648cc9139ecSJason M. Bills     res.result(boost::beast::http::status::bad_request);
649cc9139ecSJason M. Bills     addMessageToErrorJson(
650cc9139ecSJason M. Bills         res.jsonValue,
651cc9139ecSJason M. Bills         nlohmann::json{
652cc9139ecSJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
653cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceTypeIncompatible"},
654cc9139ecSJason M. Bills             {"Message", "The @odata.type of the request body " + arg1 +
655cc9139ecSJason M. Bills                             " is incompatible with the @odata.type of the "
656cc9139ecSJason M. Bills                             "resource which is " +
657cc9139ecSJason M. Bills                             arg2 + "."},
65885659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
659cc9139ecSJason M. Bills             {"Severity", "Critical"},
660cc9139ecSJason M. Bills             {"Resolution", "Resubmit the request with a payload compatible "
661cc9139ecSJason M. Bills                            "with the resource's schema."}});
662cc9139ecSJason M. Bills }
663cc9139ecSJason M. Bills 
664cc9139ecSJason M. Bills /**
665cc9139ecSJason M. Bills  * @internal
666f12894f8SJason M. Bills  * @brief Formats PropertyValueTypeError message into JSON for the specified
667f12894f8SJason M. Bills  * property
668f12894f8SJason M. Bills  *
669f12894f8SJason M. Bills  * See header file for more information
670f12894f8SJason M. Bills  * @endinternal
671f12894f8SJason M. Bills  */
672f12894f8SJason M. Bills void propertyValueTypeError(crow::Response& res, const std::string& arg1,
673a08b46ccSJason M. Bills                             const std::string& arg2)
674f12894f8SJason M. Bills {
675f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
676f12894f8SJason M. Bills     addMessageToJson(
677f12894f8SJason M. Bills         res.jsonValue,
678f12894f8SJason M. Bills         nlohmann::json{
679f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
680cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueTypeError"},
681f12894f8SJason M. Bills             {"Message",
682f12894f8SJason M. Bills              "The value " + arg1 + " for the property " + arg2 +
683f12894f8SJason M. Bills                  " is of a different type than the property can accept."},
68485659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
685f12894f8SJason M. Bills             {"Severity", "Warning"},
68666ac2b8cSJason M. Bills             {"Resolution",
68766ac2b8cSJason M. Bills              "Correct the value for the property in the request body and "
68866ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}},
689a08b46ccSJason M. Bills         arg2);
690f4c4dcf4SKowalski, Kamil }
691f4c4dcf4SKowalski, Kamil 
692f4c4dcf4SKowalski, Kamil /**
693f4c4dcf4SKowalski, Kamil  * @internal
694f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceNotFound message into JSON
695f4c4dcf4SKowalski, Kamil  *
696f4c4dcf4SKowalski, Kamil  * See header file for more information
697f4c4dcf4SKowalski, Kamil  * @endinternal
698f4c4dcf4SKowalski, Kamil  */
699f12894f8SJason M. Bills void resourceNotFound(crow::Response& res, const std::string& arg1,
7001abe55efSEd Tanous                       const std::string& arg2)
7011abe55efSEd Tanous {
702f12894f8SJason M. Bills     res.result(boost::beast::http::status::not_found);
703f12894f8SJason M. Bills     addMessageToErrorJson(
704f12894f8SJason M. Bills         res.jsonValue,
705f12894f8SJason M. Bills         nlohmann::json{
706f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
707cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceNotFound"},
7081abe55efSEd Tanous             {"Message", "The requested resource of type " + arg1 + " named " +
7091abe55efSEd Tanous                             arg2 + " was not found."},
71085659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
711f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
712f4c4dcf4SKowalski, Kamil             {"Resolution",
713f12894f8SJason M. Bills              "Provide a valid resource identifier and resubmit the request."}});
714f4c4dcf4SKowalski, Kamil }
715f4c4dcf4SKowalski, Kamil 
716f4c4dcf4SKowalski, Kamil /**
717f4c4dcf4SKowalski, Kamil  * @internal
718f4c4dcf4SKowalski, Kamil  * @brief Formats CouldNotEstablishConnection message into JSON
719f4c4dcf4SKowalski, Kamil  *
720f4c4dcf4SKowalski, Kamil  * See header file for more information
721f4c4dcf4SKowalski, Kamil  * @endinternal
722f4c4dcf4SKowalski, Kamil  */
723f12894f8SJason M. Bills void couldNotEstablishConnection(crow::Response& res, const std::string& arg1)
7241abe55efSEd Tanous {
725f12894f8SJason M. Bills     res.result(boost::beast::http::status::not_found);
726f12894f8SJason M. Bills     addMessageToErrorJson(
727f12894f8SJason M. Bills         res.jsonValue,
728f12894f8SJason M. Bills         nlohmann::json{
729f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
730cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.CouldNotEstablishConnection"},
7311abe55efSEd Tanous             {"Message",
732f12894f8SJason M. Bills              "The service failed to establish a Connection with the URI " +
733f12894f8SJason M. Bills                  arg1 + "."},
73485659adfSJason M. Bills             {"MessageArgs", {arg1}},
735f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
73666ac2b8cSJason M. Bills             {"Resolution",
73766ac2b8cSJason M. Bills              "Ensure that the URI contains a valid and reachable node name, "
73866ac2b8cSJason M. Bills              "protocol information and other URI components."}});
739f4c4dcf4SKowalski, Kamil }
740f4c4dcf4SKowalski, Kamil 
741f4c4dcf4SKowalski, Kamil /**
742f4c4dcf4SKowalski, Kamil  * @internal
743f12894f8SJason M. Bills  * @brief Formats PropertyNotWritable message into JSON for the specified
744f12894f8SJason M. Bills  * property
745f12894f8SJason M. Bills  *
746f12894f8SJason M. Bills  * See header file for more information
747f12894f8SJason M. Bills  * @endinternal
748f12894f8SJason M. Bills  */
749a08b46ccSJason M. Bills void propertyNotWritable(crow::Response& res, const std::string& arg1)
750f12894f8SJason M. Bills {
751f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
752f12894f8SJason M. Bills     addMessageToJson(
753f12894f8SJason M. Bills         res.jsonValue,
754f12894f8SJason M. Bills         nlohmann::json{
755f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
756cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyNotWritable"},
757f12894f8SJason M. Bills             {"Message",
758f12894f8SJason M. Bills              "The property " + arg1 +
759f12894f8SJason M. Bills                  " is a read only property and cannot be assigned a value."},
76085659adfSJason M. Bills             {"MessageArgs", {arg1}},
761f12894f8SJason M. Bills             {"Severity", "Warning"},
76266ac2b8cSJason M. Bills             {"Resolution", "Remove the property from the request body and "
76366ac2b8cSJason M. Bills                            "resubmit the request if the operation failed."}},
764a08b46ccSJason M. Bills         arg1);
765f4c4dcf4SKowalski, Kamil }
766f4c4dcf4SKowalski, Kamil 
767f4c4dcf4SKowalski, Kamil /**
768f4c4dcf4SKowalski, Kamil  * @internal
769f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterValueTypeError message into JSON
770f4c4dcf4SKowalski, Kamil  *
771f4c4dcf4SKowalski, Kamil  * See header file for more information
772f4c4dcf4SKowalski, Kamil  * @endinternal
773f4c4dcf4SKowalski, Kamil  */
774f12894f8SJason M. Bills void queryParameterValueTypeError(crow::Response& res, const std::string& arg1,
7751abe55efSEd Tanous                                   const std::string& arg2)
7761abe55efSEd Tanous {
777f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
778f12894f8SJason M. Bills     addMessageToErrorJson(
779f12894f8SJason M. Bills         res.jsonValue,
780f12894f8SJason M. Bills         nlohmann::json{
781f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
782cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryParameterValueTypeError"},
7831abe55efSEd Tanous             {"Message",
7841abe55efSEd Tanous              "The value " + arg1 + " for the query parameter " + arg2 +
785f4c4dcf4SKowalski, Kamil                  " is of a different type than the parameter can accept."},
78685659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
787f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
78866ac2b8cSJason M. Bills             {"Resolution",
78966ac2b8cSJason M. Bills              "Correct the value for the query parameter in the request and "
79066ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
791f4c4dcf4SKowalski, Kamil }
792f4c4dcf4SKowalski, Kamil 
793f4c4dcf4SKowalski, Kamil /**
794f4c4dcf4SKowalski, Kamil  * @internal
795f4c4dcf4SKowalski, Kamil  * @brief Formats ServiceShuttingDown message into JSON
796f4c4dcf4SKowalski, Kamil  *
797f4c4dcf4SKowalski, Kamil  * See header file for more information
798f4c4dcf4SKowalski, Kamil  * @endinternal
799f4c4dcf4SKowalski, Kamil  */
800f12894f8SJason M. Bills void serviceShuttingDown(crow::Response& res)
8011abe55efSEd Tanous {
802f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
803f12894f8SJason M. Bills     addMessageToErrorJson(
804f12894f8SJason M. Bills         res.jsonValue,
805f12894f8SJason M. Bills         nlohmann::json{
806f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
807cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ServiceShuttingDown"},
808f12894f8SJason M. Bills             {"Message", "The operation failed because the service is shutting "
80966ac2b8cSJason M. Bills                         "down and can no longer take incoming requests."},
81085659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
811f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
81266ac2b8cSJason M. Bills             {"Resolution", "When the service becomes available, resubmit the "
81366ac2b8cSJason M. Bills                            "request if the operation failed."}});
814f4c4dcf4SKowalski, Kamil }
815f4c4dcf4SKowalski, Kamil 
816f4c4dcf4SKowalski, Kamil /**
817f4c4dcf4SKowalski, Kamil  * @internal
818f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterDuplicate message into JSON
819f4c4dcf4SKowalski, Kamil  *
820f4c4dcf4SKowalski, Kamil  * See header file for more information
821f4c4dcf4SKowalski, Kamil  * @endinternal
822f4c4dcf4SKowalski, Kamil  */
823f12894f8SJason M. Bills void actionParameterDuplicate(crow::Response& res, const std::string& arg1,
8241abe55efSEd Tanous                               const std::string& arg2)
8251abe55efSEd Tanous {
826f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
827f12894f8SJason M. Bills     addMessageToErrorJson(
828f12894f8SJason M. Bills         res.jsonValue,
829f12894f8SJason M. Bills         nlohmann::json{
830f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
831cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterDuplicate"},
832f4c4dcf4SKowalski, Kamil             {"Message",
833f4c4dcf4SKowalski, Kamil              "The action " + arg1 +
8341abe55efSEd Tanous                  " was submitted with more than one value for the parameter " +
8351abe55efSEd Tanous                  arg2 + "."},
83685659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
837f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
83866ac2b8cSJason M. Bills             {"Resolution",
83966ac2b8cSJason M. Bills              "Resubmit the action with only one instance of the parameter in "
84066ac2b8cSJason M. Bills              "the request body if the operation failed."}});
841f4c4dcf4SKowalski, Kamil }
842f4c4dcf4SKowalski, Kamil 
843f4c4dcf4SKowalski, Kamil /**
844f4c4dcf4SKowalski, Kamil  * @internal
845f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterNotSupported message into JSON
846f4c4dcf4SKowalski, Kamil  *
847f4c4dcf4SKowalski, Kamil  * See header file for more information
848f4c4dcf4SKowalski, Kamil  * @endinternal
849f4c4dcf4SKowalski, Kamil  */
850f12894f8SJason M. Bills void actionParameterNotSupported(crow::Response& res, const std::string& arg1,
8511abe55efSEd Tanous                                  const std::string& arg2)
8521abe55efSEd Tanous {
853f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
854f12894f8SJason M. Bills     addMessageToErrorJson(
855f12894f8SJason M. Bills         res.jsonValue,
856f12894f8SJason M. Bills         nlohmann::json{
857f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
858cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterNotSupported"},
859f4c4dcf4SKowalski, Kamil             {"Message", "The parameter " + arg1 + " for the action " + arg2 +
860f4c4dcf4SKowalski, Kamil                             " is not supported on the target resource."},
86185659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
862f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
86366ac2b8cSJason M. Bills             {"Resolution", "Remove the parameter supplied and resubmit the "
86466ac2b8cSJason M. Bills                            "request if the operation failed."}});
865f4c4dcf4SKowalski, Kamil }
866f4c4dcf4SKowalski, Kamil 
867f4c4dcf4SKowalski, Kamil /**
868f4c4dcf4SKowalski, Kamil  * @internal
869f4c4dcf4SKowalski, Kamil  * @brief Formats SourceDoesNotSupportProtocol message into JSON
870f4c4dcf4SKowalski, Kamil  *
871f4c4dcf4SKowalski, Kamil  * See header file for more information
872f4c4dcf4SKowalski, Kamil  * @endinternal
873f4c4dcf4SKowalski, Kamil  */
874f12894f8SJason M. Bills void sourceDoesNotSupportProtocol(crow::Response& res, const std::string& arg1,
8751abe55efSEd Tanous                                   const std::string& arg2)
8761abe55efSEd Tanous {
877f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
878f12894f8SJason M. Bills     addMessageToErrorJson(
879f12894f8SJason M. Bills         res.jsonValue,
880f12894f8SJason M. Bills         nlohmann::json{
881f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
882cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.SourceDoesNotSupportProtocol"},
88355c7b7a2SEd Tanous             {"Message", "The other end of the Connection at " + arg1 +
8841abe55efSEd Tanous                             " does not support the specified protocol " + arg2 +
8851abe55efSEd Tanous                             "."},
88685659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
887f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
888f12894f8SJason M. Bills             {"Resolution", "Change protocols or URIs. "}});
889f4c4dcf4SKowalski, Kamil }
890f4c4dcf4SKowalski, Kamil 
891f4c4dcf4SKowalski, Kamil /**
892f4c4dcf4SKowalski, Kamil  * @internal
893f4c4dcf4SKowalski, Kamil  * @brief Formats AccountRemoved message into JSON
894f4c4dcf4SKowalski, Kamil  *
895f4c4dcf4SKowalski, Kamil  * See header file for more information
896f4c4dcf4SKowalski, Kamil  * @endinternal
897f4c4dcf4SKowalski, Kamil  */
898f12894f8SJason M. Bills void accountRemoved(crow::Response& res)
8991abe55efSEd Tanous {
900f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
901f12894f8SJason M. Bills     addMessageToJsonRoot(
902f12894f8SJason M. Bills         res.jsonValue,
903f12894f8SJason M. Bills         nlohmann::json{
904f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
905cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccountRemoved"},
906f4c4dcf4SKowalski, Kamil             {"Message", "The account was successfully removed."},
90785659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
908f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
909f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}});
910f4c4dcf4SKowalski, Kamil }
911f4c4dcf4SKowalski, Kamil 
912f4c4dcf4SKowalski, Kamil /**
913f4c4dcf4SKowalski, Kamil  * @internal
914f4c4dcf4SKowalski, Kamil  * @brief Formats AccessDenied message into JSON
915f4c4dcf4SKowalski, Kamil  *
916f4c4dcf4SKowalski, Kamil  * See header file for more information
917f4c4dcf4SKowalski, Kamil  * @endinternal
918f4c4dcf4SKowalski, Kamil  */
919f12894f8SJason M. Bills void accessDenied(crow::Response& res, const std::string& arg1)
9201abe55efSEd Tanous {
921f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
922f12894f8SJason M. Bills     addMessageToErrorJson(
923f12894f8SJason M. Bills         res.jsonValue,
924f12894f8SJason M. Bills         nlohmann::json{
925f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
926cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccessDenied"},
927f12894f8SJason M. Bills             {"Message", "While attempting to establish a Connection to " +
928f12894f8SJason M. Bills                             arg1 + ", the service denied access."},
92985659adfSJason M. Bills             {"MessageArgs", {arg1}},
930f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
93166ac2b8cSJason M. Bills             {"Resolution", "Attempt to ensure that the URI is correct and that "
93266ac2b8cSJason M. Bills                            "the service has the appropriate credentials."}});
933f4c4dcf4SKowalski, Kamil }
934f4c4dcf4SKowalski, Kamil 
935f4c4dcf4SKowalski, Kamil /**
936f4c4dcf4SKowalski, Kamil  * @internal
937f4c4dcf4SKowalski, Kamil  * @brief Formats QueryNotSupported message into JSON
938f4c4dcf4SKowalski, Kamil  *
939f4c4dcf4SKowalski, Kamil  * See header file for more information
940f4c4dcf4SKowalski, Kamil  * @endinternal
941f4c4dcf4SKowalski, Kamil  */
942f12894f8SJason M. Bills void queryNotSupported(crow::Response& res)
9431abe55efSEd Tanous {
944f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
945f12894f8SJason M. Bills     addMessageToErrorJson(
946f12894f8SJason M. Bills         res.jsonValue,
947f12894f8SJason M. Bills         nlohmann::json{
948f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
949cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryNotSupported"},
950f4c4dcf4SKowalski, Kamil             {"Message", "Querying is not supported by the implementation."},
95185659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
952f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
95366ac2b8cSJason M. Bills             {"Resolution", "Remove the query parameters and resubmit the "
95466ac2b8cSJason M. Bills                            "request if the operation failed."}});
955f4c4dcf4SKowalski, Kamil }
956f4c4dcf4SKowalski, Kamil 
957f4c4dcf4SKowalski, Kamil /**
958f4c4dcf4SKowalski, Kamil  * @internal
959f4c4dcf4SKowalski, Kamil  * @brief Formats CreateLimitReachedForResource message into JSON
960f4c4dcf4SKowalski, Kamil  *
961f4c4dcf4SKowalski, Kamil  * See header file for more information
962f4c4dcf4SKowalski, Kamil  * @endinternal
963f4c4dcf4SKowalski, Kamil  */
964f12894f8SJason M. Bills void createLimitReachedForResource(crow::Response& res)
9651abe55efSEd Tanous {
966f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
967f12894f8SJason M. Bills     addMessageToErrorJson(
968f12894f8SJason M. Bills         res.jsonValue,
969f12894f8SJason M. Bills         nlohmann::json{
970f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
971cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.CreateLimitReachedForResource"},
9721abe55efSEd Tanous             {"Message", "The create operation failed because the resource has "
97366ac2b8cSJason M. Bills                         "reached the limit of possible resources."},
97485659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
975f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
97666ac2b8cSJason M. Bills             {"Resolution",
97766ac2b8cSJason M. Bills              "Either delete resources and resubmit the request if the "
97866ac2b8cSJason M. Bills              "operation failed or do not resubmit the request."}});
979f4c4dcf4SKowalski, Kamil }
980f4c4dcf4SKowalski, Kamil 
981f4c4dcf4SKowalski, Kamil /**
982f4c4dcf4SKowalski, Kamil  * @internal
983f4c4dcf4SKowalski, Kamil  * @brief Formats GeneralError message into JSON
984f4c4dcf4SKowalski, Kamil  *
985f4c4dcf4SKowalski, Kamil  * See header file for more information
986f4c4dcf4SKowalski, Kamil  * @endinternal
987f4c4dcf4SKowalski, Kamil  */
988f12894f8SJason M. Bills void generalError(crow::Response& res)
9891abe55efSEd Tanous {
990f12894f8SJason M. Bills     res.result(boost::beast::http::status::internal_server_error);
991f12894f8SJason M. Bills     addMessageToErrorJson(
992f12894f8SJason M. Bills         res.jsonValue,
993f12894f8SJason M. Bills         nlohmann::json{
994f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
995cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.GeneralError"},
996cc9139ecSJason M. Bills             {"Message", "A general error has occurred. See Resolution for "
997cc9139ecSJason M. Bills                         "information on how to resolve the error."},
99885659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
999f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1000cc9139ecSJason M. Bills             {"Resolution", "None."}});
1001f4c4dcf4SKowalski, Kamil }
1002f4c4dcf4SKowalski, Kamil 
1003f4c4dcf4SKowalski, Kamil /**
1004f4c4dcf4SKowalski, Kamil  * @internal
1005f4c4dcf4SKowalski, Kamil  * @brief Formats Success message into JSON
1006f4c4dcf4SKowalski, Kamil  *
1007f4c4dcf4SKowalski, Kamil  * See header file for more information
1008f4c4dcf4SKowalski, Kamil  * @endinternal
1009f4c4dcf4SKowalski, Kamil  */
1010f12894f8SJason M. Bills void success(crow::Response& res)
10111abe55efSEd Tanous {
1012be12c729SJames Feist     // don't set res.result here because success is the default and any error
1013be12c729SJames Feist     // should overwrite the default
1014f12894f8SJason M. Bills     addMessageToJsonRoot(
1015f12894f8SJason M. Bills         res.jsonValue,
1016f12894f8SJason M. Bills         nlohmann::json{
1017f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1018cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.Success"},
1019f4c4dcf4SKowalski, Kamil             {"Message", "Successfully Completed Request"},
102085659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1021f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1022f12894f8SJason M. Bills             {"Resolution", "None"}});
1023f12894f8SJason M. Bills }
1024f12894f8SJason M. Bills 
1025f12894f8SJason M. Bills /**
1026f12894f8SJason M. Bills  * @internal
1027f4c4dcf4SKowalski, Kamil  * @brief Formats Created message into JSON
1028f4c4dcf4SKowalski, Kamil  *
1029f4c4dcf4SKowalski, Kamil  * See header file for more information
1030f4c4dcf4SKowalski, Kamil  * @endinternal
1031f4c4dcf4SKowalski, Kamil  */
1032f12894f8SJason M. Bills void created(crow::Response& res)
10331abe55efSEd Tanous {
1034f12894f8SJason M. Bills     res.result(boost::beast::http::status::created);
1035f12894f8SJason M. Bills     addMessageToJsonRoot(
1036f12894f8SJason M. Bills         res.jsonValue,
1037f12894f8SJason M. Bills         nlohmann::json{
1038f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1039cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.Created"},
1040f4c4dcf4SKowalski, Kamil             {"Message", "The resource has been created successfully"},
104185659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1042f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1043f12894f8SJason M. Bills             {"Resolution", "None"}});
1044f4c4dcf4SKowalski, Kamil }
1045f4c4dcf4SKowalski, Kamil 
1046f4c4dcf4SKowalski, Kamil /**
1047f4c4dcf4SKowalski, Kamil  * @internal
1048cc9139ecSJason M. Bills  * @brief Formats NoOperation message into JSON
1049cc9139ecSJason M. Bills  *
1050cc9139ecSJason M. Bills  * See header file for more information
1051cc9139ecSJason M. Bills  * @endinternal
1052cc9139ecSJason M. Bills  */
1053cc9139ecSJason M. Bills void noOperation(crow::Response& res)
1054cc9139ecSJason M. Bills {
1055cc9139ecSJason M. Bills     res.result(boost::beast::http::status::bad_request);
1056cc9139ecSJason M. Bills     addMessageToErrorJson(
1057cc9139ecSJason M. Bills         res.jsonValue,
1058cc9139ecSJason M. Bills         nlohmann::json{
1059cc9139ecSJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1060cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.NoOperation"},
1061cc9139ecSJason M. Bills             {"Message", "The request body submitted contain no data to act "
1062cc9139ecSJason M. Bills                         "upon and no changes to the resource took place."},
106385659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1064cc9139ecSJason M. Bills             {"Severity", "Warning"},
1065cc9139ecSJason M. Bills             {"Resolution",
1066cc9139ecSJason M. Bills              "Add properties in the JSON object and resubmit the request."}});
1067cc9139ecSJason M. Bills }
1068cc9139ecSJason M. Bills 
1069cc9139ecSJason M. Bills /**
1070cc9139ecSJason M. Bills  * @internal
1071f12894f8SJason M. Bills  * @brief Formats PropertyUnknown message into JSON for the specified property
1072f12894f8SJason M. Bills  *
1073f12894f8SJason M. Bills  * See header file for more information
1074f12894f8SJason M. Bills  * @endinternal
1075f12894f8SJason M. Bills  */
1076a08b46ccSJason M. Bills void propertyUnknown(crow::Response& res, const std::string& arg1)
1077f12894f8SJason M. Bills {
1078f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1079f12894f8SJason M. Bills     addMessageToJson(
1080f12894f8SJason M. Bills         res.jsonValue,
1081f12894f8SJason M. Bills         nlohmann::json{
1082f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1083cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyUnknown"},
1084f12894f8SJason M. Bills             {"Message",
1085f12894f8SJason M. Bills              "The property " + arg1 +
1086f12894f8SJason M. Bills                  " is not in the list of valid properties for the resource."},
108785659adfSJason M. Bills             {"MessageArgs", {arg1}},
1088f12894f8SJason M. Bills             {"Severity", "Warning"},
108966ac2b8cSJason M. Bills             {"Resolution",
109066ac2b8cSJason M. Bills              "Remove the unknown property from the request body and resubmit "
109166ac2b8cSJason M. Bills              "the request if the operation failed."}},
1092a08b46ccSJason M. Bills         arg1);
1093f4c4dcf4SKowalski, Kamil }
1094f4c4dcf4SKowalski, Kamil 
1095f4c4dcf4SKowalski, Kamil /**
1096f4c4dcf4SKowalski, Kamil  * @internal
1097f4c4dcf4SKowalski, Kamil  * @brief Formats NoValidSession message into JSON
1098f4c4dcf4SKowalski, Kamil  *
1099f4c4dcf4SKowalski, Kamil  * See header file for more information
1100f4c4dcf4SKowalski, Kamil  * @endinternal
1101f4c4dcf4SKowalski, Kamil  */
1102f12894f8SJason M. Bills void noValidSession(crow::Response& res)
11031abe55efSEd Tanous {
1104f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1105f12894f8SJason M. Bills     addMessageToErrorJson(
1106f12894f8SJason M. Bills         res.jsonValue,
1107f12894f8SJason M. Bills         nlohmann::json{
1108f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1109cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.NoValidSession"},
1110f4c4dcf4SKowalski, Kamil             {"Message",
1111f4c4dcf4SKowalski, Kamil              "There is no valid session established with the implementation."},
111285659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1113f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
11141abe55efSEd Tanous             {"Resolution",
1115f12894f8SJason M. Bills              "Establish as session before attempting any operations."}});
1116f4c4dcf4SKowalski, Kamil }
1117f4c4dcf4SKowalski, Kamil 
1118f4c4dcf4SKowalski, Kamil /**
1119f4c4dcf4SKowalski, Kamil  * @internal
1120f4c4dcf4SKowalski, Kamil  * @brief Formats InvalidObject message into JSON
1121f4c4dcf4SKowalski, Kamil  *
1122f4c4dcf4SKowalski, Kamil  * See header file for more information
1123f4c4dcf4SKowalski, Kamil  * @endinternal
1124f4c4dcf4SKowalski, Kamil  */
1125f12894f8SJason M. Bills void invalidObject(crow::Response& res, const std::string& arg1)
11261abe55efSEd Tanous {
1127f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1128f12894f8SJason M. Bills     addMessageToErrorJson(
1129f12894f8SJason M. Bills         res.jsonValue,
1130f12894f8SJason M. Bills         nlohmann::json{
1131f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1132cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InvalidObject"},
1133f4c4dcf4SKowalski, Kamil             {"Message", "The object at " + arg1 + " is invalid."},
113485659adfSJason M. Bills             {"MessageArgs", {arg1}},
1135f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1136f12894f8SJason M. Bills             {"Resolution",
113766ac2b8cSJason M. Bills              "Either the object is malformed or the URI is not correct.  "
113866ac2b8cSJason M. Bills              "Correct the condition and resubmit the request if it failed."}});
1139f4c4dcf4SKowalski, Kamil }
1140f4c4dcf4SKowalski, Kamil 
1141f4c4dcf4SKowalski, Kamil /**
1142f4c4dcf4SKowalski, Kamil  * @internal
1143f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceInStandby message into JSON
1144f4c4dcf4SKowalski, Kamil  *
1145f4c4dcf4SKowalski, Kamil  * See header file for more information
1146f4c4dcf4SKowalski, Kamil  * @endinternal
1147f4c4dcf4SKowalski, Kamil  */
1148f12894f8SJason M. Bills void resourceInStandby(crow::Response& res)
11491abe55efSEd Tanous {
1150f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1151f12894f8SJason M. Bills     addMessageToErrorJson(
1152f12894f8SJason M. Bills         res.jsonValue,
1153f12894f8SJason M. Bills         nlohmann::json{
1154f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1155cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceInStandby"},
115666ac2b8cSJason M. Bills             {"Message", "The request could not be performed because the "
115766ac2b8cSJason M. Bills                         "resource is in standby."},
115885659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1159f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1160f12894f8SJason M. Bills             {"Resolution", "Ensure that the resource is in the correct power "
116166ac2b8cSJason M. Bills                            "state and resubmit the request."}});
1162f4c4dcf4SKowalski, Kamil }
1163f4c4dcf4SKowalski, Kamil 
1164f4c4dcf4SKowalski, Kamil /**
1165f4c4dcf4SKowalski, Kamil  * @internal
1166f4c4dcf4SKowalski, Kamil  * @brief Formats ActionParameterValueTypeError message into JSON
1167f4c4dcf4SKowalski, Kamil  *
1168f4c4dcf4SKowalski, Kamil  * See header file for more information
1169f4c4dcf4SKowalski, Kamil  * @endinternal
1170f4c4dcf4SKowalski, Kamil  */
1171f12894f8SJason M. Bills void actionParameterValueTypeError(crow::Response& res, const std::string& arg1,
1172f4c4dcf4SKowalski, Kamil                                    const std::string& arg2,
11731abe55efSEd Tanous                                    const std::string& arg3)
11741abe55efSEd Tanous {
1175f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1176f12894f8SJason M. Bills     addMessageToErrorJson(
1177f12894f8SJason M. Bills         res.jsonValue,
1178f12894f8SJason M. Bills         nlohmann::json{
1179f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1180cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionParameterValueTypeError"},
11811abe55efSEd Tanous             {"Message",
11821abe55efSEd Tanous              "The value " + arg1 + " for the parameter " + arg2 +
1183f4c4dcf4SKowalski, Kamil                  " in the action " + arg3 +
1184f4c4dcf4SKowalski, Kamil                  " is of a different type than the parameter can accept."},
118585659adfSJason M. Bills             {"MessageArgs", {arg1, arg2, arg3}},
1186f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
118766ac2b8cSJason M. Bills             {"Resolution",
118866ac2b8cSJason M. Bills              "Correct the value for the parameter in the request body and "
118966ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
1190f4c4dcf4SKowalski, Kamil }
1191f4c4dcf4SKowalski, Kamil 
1192f4c4dcf4SKowalski, Kamil /**
1193f4c4dcf4SKowalski, Kamil  * @internal
1194f4c4dcf4SKowalski, Kamil  * @brief Formats SessionLimitExceeded message into JSON
1195f4c4dcf4SKowalski, Kamil  *
1196f4c4dcf4SKowalski, Kamil  * See header file for more information
1197f4c4dcf4SKowalski, Kamil  * @endinternal
1198f4c4dcf4SKowalski, Kamil  */
1199f12894f8SJason M. Bills void sessionLimitExceeded(crow::Response& res)
12001abe55efSEd Tanous {
1201f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1202f12894f8SJason M. Bills     addMessageToErrorJson(
1203f12894f8SJason M. Bills         res.jsonValue,
1204f12894f8SJason M. Bills         nlohmann::json{
1205f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1206cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.SessionLimitExceeded"},
1207f12894f8SJason M. Bills             {"Message", "The session establishment failed due to the number of "
120866ac2b8cSJason M. Bills                         "simultaneous sessions exceeding the limit of the "
120966ac2b8cSJason M. Bills                         "implementation."},
121085659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1211f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
121266ac2b8cSJason M. Bills             {"Resolution", "Reduce the number of other sessions before trying "
121366ac2b8cSJason M. Bills                            "to establish the session or increase the limit of "
121466ac2b8cSJason M. Bills                            "simultaneous sessions (if supported)."}});
1215f4c4dcf4SKowalski, Kamil }
1216f4c4dcf4SKowalski, Kamil 
1217f4c4dcf4SKowalski, Kamil /**
1218f4c4dcf4SKowalski, Kamil  * @internal
1219f4c4dcf4SKowalski, Kamil  * @brief Formats ActionNotSupported message into JSON
1220f4c4dcf4SKowalski, Kamil  *
1221f4c4dcf4SKowalski, Kamil  * See header file for more information
1222f4c4dcf4SKowalski, Kamil  * @endinternal
1223f4c4dcf4SKowalski, Kamil  */
1224f12894f8SJason M. Bills void actionNotSupported(crow::Response& res, const std::string& arg1)
12251abe55efSEd Tanous {
1226f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1227f12894f8SJason M. Bills     addMessageToErrorJson(
1228f12894f8SJason M. Bills         res.jsonValue,
1229f12894f8SJason M. Bills         nlohmann::json{
1230f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1231cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ActionNotSupported"},
12321abe55efSEd Tanous             {"Message",
12331abe55efSEd Tanous              "The action " + arg1 + " is not supported by the resource."},
123485659adfSJason M. Bills             {"MessageArgs", {arg1}},
1235f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1236f4c4dcf4SKowalski, Kamil             {"Resolution",
1237f4c4dcf4SKowalski, Kamil              "The action supplied cannot be resubmitted to the implementation. "
1238f12894f8SJason M. Bills              " Perhaps the action was invalid, the wrong resource was the "
123966ac2b8cSJason M. Bills              "target or the implementation documentation may be of "
124066ac2b8cSJason M. Bills              "assistance."}});
1241f4c4dcf4SKowalski, Kamil }
1242f4c4dcf4SKowalski, Kamil 
1243f4c4dcf4SKowalski, Kamil /**
1244f4c4dcf4SKowalski, Kamil  * @internal
1245f4c4dcf4SKowalski, Kamil  * @brief Formats InvalidIndex message into JSON
1246f4c4dcf4SKowalski, Kamil  *
1247f4c4dcf4SKowalski, Kamil  * See header file for more information
1248f4c4dcf4SKowalski, Kamil  * @endinternal
1249f4c4dcf4SKowalski, Kamil  */
1250f12894f8SJason M. Bills void invalidIndex(crow::Response& res, const int& arg1)
12511abe55efSEd Tanous {
1252f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1253f12894f8SJason M. Bills     addMessageToErrorJson(
1254f12894f8SJason M. Bills         res.jsonValue,
1255f12894f8SJason M. Bills         nlohmann::json{
1256f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1257cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InvalidIndex"},
125855c7b7a2SEd Tanous             {"Message", "The index " + std::to_string(arg1) +
1259f4c4dcf4SKowalski, Kamil                             " is not a valid offset into the array."},
126085659adfSJason M. Bills             {"MessageArgs", {std::to_string(arg1)}},
1261f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1262f12894f8SJason M. Bills             {"Resolution", "Verify the index value provided is within the "
1263f12894f8SJason M. Bills                            "bounds of the array."}});
1264f4c4dcf4SKowalski, Kamil }
1265f4c4dcf4SKowalski, Kamil 
1266f4c4dcf4SKowalski, Kamil /**
1267f4c4dcf4SKowalski, Kamil  * @internal
1268f4c4dcf4SKowalski, Kamil  * @brief Formats EmptyJSON message into JSON
1269f4c4dcf4SKowalski, Kamil  *
1270f4c4dcf4SKowalski, Kamil  * See header file for more information
1271f4c4dcf4SKowalski, Kamil  * @endinternal
1272f4c4dcf4SKowalski, Kamil  */
1273f12894f8SJason M. Bills void emptyJSON(crow::Response& res)
12741abe55efSEd Tanous {
1275f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1276f12894f8SJason M. Bills     addMessageToErrorJson(
1277f12894f8SJason M. Bills         res.jsonValue,
1278f12894f8SJason M. Bills         nlohmann::json{
1279f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1280cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.EmptyJSON"},
1281f12894f8SJason M. Bills             {"Message", "The request body submitted contained an empty JSON "
128266ac2b8cSJason M. Bills                         "object and the service is unable to process it."},
128385659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1284f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1285f4c4dcf4SKowalski, Kamil             {"Resolution",
1286f12894f8SJason M. Bills              "Add properties in the JSON object and resubmit the request."}});
1287f4c4dcf4SKowalski, Kamil }
1288f4c4dcf4SKowalski, Kamil 
1289f4c4dcf4SKowalski, Kamil /**
1290f4c4dcf4SKowalski, Kamil  * @internal
1291f4c4dcf4SKowalski, Kamil  * @brief Formats QueryNotSupportedOnResource message into JSON
1292f4c4dcf4SKowalski, Kamil  *
1293f4c4dcf4SKowalski, Kamil  * See header file for more information
1294f4c4dcf4SKowalski, Kamil  * @endinternal
1295f4c4dcf4SKowalski, Kamil  */
1296f12894f8SJason M. Bills void queryNotSupportedOnResource(crow::Response& res)
12971abe55efSEd Tanous {
1298f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1299f12894f8SJason M. Bills     addMessageToErrorJson(
1300f12894f8SJason M. Bills         res.jsonValue,
1301f12894f8SJason M. Bills         nlohmann::json{
1302f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1303cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryNotSupportedOnResource"},
1304f4c4dcf4SKowalski, Kamil             {"Message", "Querying is not supported on the requested resource."},
130585659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1306f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
130766ac2b8cSJason M. Bills             {"Resolution", "Remove the query parameters and resubmit the "
130866ac2b8cSJason M. Bills                            "request if the operation failed."}});
1309f4c4dcf4SKowalski, Kamil }
1310f4c4dcf4SKowalski, Kamil 
1311f4c4dcf4SKowalski, Kamil /**
1312f4c4dcf4SKowalski, Kamil  * @internal
1313f4c4dcf4SKowalski, Kamil  * @brief Formats InsufficientPrivilege message into JSON
1314f4c4dcf4SKowalski, Kamil  *
1315f4c4dcf4SKowalski, Kamil  * See header file for more information
1316f4c4dcf4SKowalski, Kamil  * @endinternal
1317f4c4dcf4SKowalski, Kamil  */
1318f12894f8SJason M. Bills void insufficientPrivilege(crow::Response& res)
13191abe55efSEd Tanous {
1320f12894f8SJason M. Bills     res.result(boost::beast::http::status::forbidden);
1321f12894f8SJason M. Bills     addMessageToErrorJson(
1322f12894f8SJason M. Bills         res.jsonValue,
1323f12894f8SJason M. Bills         nlohmann::json{
1324f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1325cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.InsufficientPrivilege"},
132666ac2b8cSJason M. Bills             {"Message", "There are insufficient privileges for the account or "
132766ac2b8cSJason M. Bills                         "credentials associated with the current session to "
132866ac2b8cSJason M. Bills                         "perform the requested operation."},
132985659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1330f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1331f4c4dcf4SKowalski, Kamil             {"Resolution",
1332f12894f8SJason M. Bills              "Either abandon the operation or change the associated access "
133366ac2b8cSJason M. Bills              "rights and resubmit the request if the operation failed."}});
1334f4c4dcf4SKowalski, Kamil }
1335f4c4dcf4SKowalski, Kamil 
1336f4c4dcf4SKowalski, Kamil /**
1337f4c4dcf4SKowalski, Kamil  * @internal
1338f4c4dcf4SKowalski, Kamil  * @brief Formats PropertyValueModified message into JSON
1339f4c4dcf4SKowalski, Kamil  *
1340f4c4dcf4SKowalski, Kamil  * See header file for more information
1341f4c4dcf4SKowalski, Kamil  * @endinternal
1342f4c4dcf4SKowalski, Kamil  */
1343f12894f8SJason M. Bills void propertyValueModified(crow::Response& res, const std::string& arg1,
1344a08b46ccSJason M. Bills                            const std::string& arg2)
13451abe55efSEd Tanous {
1346f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1347f12894f8SJason M. Bills     addMessageToJson(
1348f12894f8SJason M. Bills         res.jsonValue,
1349f12894f8SJason M. Bills         nlohmann::json{
1350f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1351cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyValueModified"},
1352f12894f8SJason M. Bills             {"Message", "The property " + arg1 + " was assigned the value " +
1353f12894f8SJason M. Bills                             arg2 + " due to modification by the service."},
135485659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
1355f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1356f12894f8SJason M. Bills             {"Resolution", "No resolution is required."}},
1357a08b46ccSJason M. Bills         arg1);
1358f4c4dcf4SKowalski, Kamil }
1359f4c4dcf4SKowalski, Kamil 
1360f4c4dcf4SKowalski, Kamil /**
1361f4c4dcf4SKowalski, Kamil  * @internal
1362f4c4dcf4SKowalski, Kamil  * @brief Formats AccountNotModified message into JSON
1363f4c4dcf4SKowalski, Kamil  *
1364f4c4dcf4SKowalski, Kamil  * See header file for more information
1365f4c4dcf4SKowalski, Kamil  * @endinternal
1366f4c4dcf4SKowalski, Kamil  */
1367f12894f8SJason M. Bills void accountNotModified(crow::Response& res)
13681abe55efSEd Tanous {
1369f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1370f12894f8SJason M. Bills     addMessageToErrorJson(
1371f12894f8SJason M. Bills         res.jsonValue,
1372f12894f8SJason M. Bills         nlohmann::json{
1373f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1374cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccountNotModified"},
1375f4c4dcf4SKowalski, Kamil             {"Message", "The account modification request failed."},
137685659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1377f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1378f12894f8SJason M. Bills             {"Resolution", "The modification may have failed due to permission "
137966ac2b8cSJason M. Bills                            "issues or issues with the request body."}});
1380f4c4dcf4SKowalski, Kamil }
1381f4c4dcf4SKowalski, Kamil 
1382f4c4dcf4SKowalski, Kamil /**
1383f4c4dcf4SKowalski, Kamil  * @internal
1384f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterValueFormatError message into JSON
1385f4c4dcf4SKowalski, Kamil  *
1386f4c4dcf4SKowalski, Kamil  * See header file for more information
1387f4c4dcf4SKowalski, Kamil  * @endinternal
1388f4c4dcf4SKowalski, Kamil  */
1389f12894f8SJason M. Bills void queryParameterValueFormatError(crow::Response& res,
1390f12894f8SJason M. Bills                                     const std::string& arg1,
13911abe55efSEd Tanous                                     const std::string& arg2)
13921abe55efSEd Tanous {
1393f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1394f12894f8SJason M. Bills     addMessageToErrorJson(
1395f12894f8SJason M. Bills         res.jsonValue,
1396f12894f8SJason M. Bills         nlohmann::json{
1397f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1398cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryParameterValueFormatError"},
1399f4c4dcf4SKowalski, Kamil             {"Message",
1400f4c4dcf4SKowalski, Kamil              "The value " + arg1 + " for the parameter " + arg2 +
1401f4c4dcf4SKowalski, Kamil                  " is of a different format than the parameter can accept."},
140285659adfSJason M. Bills             {"MessageArgs", {arg1, arg2}},
1403f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
140466ac2b8cSJason M. Bills             {"Resolution",
140566ac2b8cSJason M. Bills              "Correct the value for the query parameter in the request and "
140666ac2b8cSJason M. Bills              "resubmit the request if the operation failed."}});
1407f4c4dcf4SKowalski, Kamil }
1408f4c4dcf4SKowalski, Kamil 
1409f4c4dcf4SKowalski, Kamil /**
1410f4c4dcf4SKowalski, Kamil  * @internal
1411f12894f8SJason M. Bills  * @brief Formats PropertyMissing message into JSON for the specified property
1412f12894f8SJason M. Bills  *
1413f12894f8SJason M. Bills  * See header file for more information
1414f12894f8SJason M. Bills  * @endinternal
1415f12894f8SJason M. Bills  */
1416a08b46ccSJason M. Bills void propertyMissing(crow::Response& res, const std::string& arg1)
1417f12894f8SJason M. Bills {
1418f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1419f12894f8SJason M. Bills     addMessageToJson(
1420f12894f8SJason M. Bills         res.jsonValue,
1421f12894f8SJason M. Bills         nlohmann::json{
1422f12894f8SJason M. Bills             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1423cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.PropertyMissing"},
1424f12894f8SJason M. Bills             {"Message", "The property " + arg1 +
1425f12894f8SJason M. Bills                             " is a required property and must be included in "
1426f12894f8SJason M. Bills                             "the request."},
142785659adfSJason M. Bills             {"MessageArgs", {arg1}},
1428f12894f8SJason M. Bills             {"Severity", "Warning"},
1429f12894f8SJason M. Bills             {"Resolution",
143066ac2b8cSJason M. Bills              "Ensure that the property is in the request body and has a valid "
143166ac2b8cSJason M. Bills              "value and resubmit the request if the operation failed."}},
1432a08b46ccSJason M. Bills         arg1);
1433f4c4dcf4SKowalski, Kamil }
1434f4c4dcf4SKowalski, Kamil 
1435f4c4dcf4SKowalski, Kamil /**
1436f4c4dcf4SKowalski, Kamil  * @internal
1437f4c4dcf4SKowalski, Kamil  * @brief Formats ResourceExhaustion message into JSON
1438f4c4dcf4SKowalski, Kamil  *
1439f4c4dcf4SKowalski, Kamil  * See header file for more information
1440f4c4dcf4SKowalski, Kamil  * @endinternal
1441f4c4dcf4SKowalski, Kamil  */
1442f12894f8SJason M. Bills void resourceExhaustion(crow::Response& res, const std::string& arg1)
14431abe55efSEd Tanous {
1444f12894f8SJason M. Bills     res.result(boost::beast::http::status::service_unavailable);
1445f12894f8SJason M. Bills     addMessageToErrorJson(
1446f12894f8SJason M. Bills         res.jsonValue,
1447f12894f8SJason M. Bills         nlohmann::json{
1448f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1449cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.ResourceExhaustion"},
1450d425c6f6SEd Tanous             {"Message", "The resource " + arg1 +
145166ac2b8cSJason M. Bills                             " was unable to satisfy the request due to "
145266ac2b8cSJason M. Bills                             "unavailability of resources."},
145385659adfSJason M. Bills             {"MessageArgs", {arg1}},
1454f4c4dcf4SKowalski, Kamil             {"Severity", "Critical"},
1455f12894f8SJason M. Bills             {"Resolution", "Ensure that the resources are available and "
1456f12894f8SJason M. Bills                            "resubmit the request."}});
1457f4c4dcf4SKowalski, Kamil }
1458f4c4dcf4SKowalski, Kamil 
1459f4c4dcf4SKowalski, Kamil /**
1460f4c4dcf4SKowalski, Kamil  * @internal
1461f4c4dcf4SKowalski, Kamil  * @brief Formats AccountModified message into JSON
1462f4c4dcf4SKowalski, Kamil  *
1463f4c4dcf4SKowalski, Kamil  * See header file for more information
1464f4c4dcf4SKowalski, Kamil  * @endinternal
1465f4c4dcf4SKowalski, Kamil  */
1466a08b46ccSJason M. Bills void accountModified(crow::Response& res)
14671abe55efSEd Tanous {
1468f12894f8SJason M. Bills     res.result(boost::beast::http::status::ok);
1469a08b46ccSJason M. Bills     addMessageToErrorJson(
1470f12894f8SJason M. Bills         res.jsonValue,
1471f12894f8SJason M. Bills         nlohmann::json{
1472f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1473cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.AccountModified"},
1474f4c4dcf4SKowalski, Kamil             {"Message", "The account was successfully modified."},
147585659adfSJason M. Bills             {"MessageArgs", nlohmann::json::array()},
1476f4c4dcf4SKowalski, Kamil             {"Severity", "OK"},
1477a08b46ccSJason M. Bills             {"Resolution", "No resolution is required."}});
1478f4c4dcf4SKowalski, Kamil }
1479f4c4dcf4SKowalski, Kamil 
1480f4c4dcf4SKowalski, Kamil /**
1481f4c4dcf4SKowalski, Kamil  * @internal
1482f4c4dcf4SKowalski, Kamil  * @brief Formats QueryParameterOutOfRange message into JSON
1483f4c4dcf4SKowalski, Kamil  *
1484f4c4dcf4SKowalski, Kamil  * See header file for more information
1485f4c4dcf4SKowalski, Kamil  * @endinternal
1486f4c4dcf4SKowalski, Kamil  */
1487f12894f8SJason M. Bills void queryParameterOutOfRange(crow::Response& res, const std::string& arg1,
1488f12894f8SJason M. Bills                               const std::string& arg2, const std::string& arg3)
14891abe55efSEd Tanous {
1490f12894f8SJason M. Bills     res.result(boost::beast::http::status::bad_request);
1491f12894f8SJason M. Bills     addMessageToErrorJson(
1492f12894f8SJason M. Bills         res.jsonValue,
1493f12894f8SJason M. Bills         nlohmann::json{
1494f4c4dcf4SKowalski, Kamil             {"@odata.type", "/redfish/v1/$metadata#Message.v1_0_0.Message"},
1495cc9139ecSJason M. Bills             {"MessageId", "Base.1.4.0.QueryParameterOutOfRange"},
1496f12894f8SJason M. Bills             {"Message", "The value " + arg1 + " for the query parameter " +
1497f12894f8SJason M. Bills                             arg2 + " is out of range " + arg3 + "."},
149885659adfSJason M. Bills             {"MessageArgs", {arg1, arg2, arg3}},
1499f4c4dcf4SKowalski, Kamil             {"Severity", "Warning"},
1500f4c4dcf4SKowalski, Kamil             {"Resolution",
1501f12894f8SJason M. Bills              "Reduce the value for the query parameter to a value that is "
150266ac2b8cSJason M. Bills              "within range, such as a start or count value that is within "
150366ac2b8cSJason M. Bills              "bounds of the number of resources in a collection or a page that "
150466ac2b8cSJason M. Bills              "is within the range of valid pages."}});
1505f4c4dcf4SKowalski, Kamil }
1506f4c4dcf4SKowalski, Kamil 
1507f4c4dcf4SKowalski, Kamil } // namespace messages
1508f4c4dcf4SKowalski, Kamil 
1509d425c6f6SEd Tanous } // namespace redfish
1510