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