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