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