blob: 688d9467a9308a5374f114b32138620fb5da41df [file] [log] [blame] [edit]
/*
// Copyright (c) 2018 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*/
#include "error_messages.hpp"
#include <array>
#include <cstddef>
#include <cstdint>
#include <span> // NOLINT
#include <string>
#include <string_view>
#include <utility>
#include "boost/beast/http/field.hpp" // NOLINT
#include "boost/beast/http/status.hpp" // NOLINT
#include "http_response.hpp"
#include "logging.hpp"
#include "source_location.hpp"
#include "registries.hpp"
#include "registries/base_message_registry.hpp"
#include <nlohmann/json.hpp>
// IWYU pragma: no_include <stddef.h>
namespace redfish {
namespace messages {
static void addMessageToErrorJson(nlohmann::json& target,
const nlohmann::json& message) {
auto& error = target["error"];
// If this is the first error message, fill in the information from the
// first error message to the top level struct
if (!error.is_object()) {
// Have default error messages so that we dont end up with empty errors.
error["code"] = std::string(messageVersionPrefix) + "GeneralError";
error["message"] =
"A general error has occurred. See Resolution for "
"information on how to resolve the error.";
auto message_id_iterator = message.find("MessageId");
if (message_id_iterator != message.end()) {
error["code"] = *message_id_iterator;
}
auto message_field_iterator = message.find("Message");
if (message_field_iterator != message.end()) {
error["message"] = *message_field_iterator;
}
} else {
// More than 1 error occurred, so the message has to be generic
error["code"] = std::string(messageVersionPrefix) + "GeneralError";
error["message"] =
"A general error has occurred. See Resolution for "
"information on how to resolve the error.";
}
// This check could technically be done in the default construction
// branch above, but because we need the pointer to the extended info field
// anyway, it's more efficient to do it here.
auto& extended_info = error[messages::messageAnnotation];
if (!extended_info.is_array()) {
extended_info = nlohmann::json::array();
}
extended_info.emplace_back(message);
}
void moveErrorsToErrorJson(nlohmann::json& target, nlohmann::json& source) {
if (!source.is_object()) {
return;
}
auto error_it = source.find("error");
if (error_it == source.end()) {
// caller puts error message in root
messages::addMessageToErrorJson(target, source);
return;
}
auto extended_info_it = error_it->find(messages::messageAnnotation);
if (extended_info_it == error_it->end()) {
return;
}
const nlohmann::json::array_t* extended_info =
(*extended_info_it).get_ptr<const nlohmann::json::array_t*>();
if (extended_info == nullptr) {
source.erase(error_it);
return;
}
for (const nlohmann::json& message : *extended_info) {
addMessageToErrorJson(target, message);
}
source.erase(error_it);
}
static void addMessageToJsonRoot(nlohmann::json& target,
const nlohmann::json& message) {
if (!target[messages::messageAnnotation].is_array()) {
// Force object to be an array
target[messages::messageAnnotation] = nlohmann::json::array();
}
target[messages::messageAnnotation].emplace_back(message);
}
static void addMessageToJson(nlohmann::json& target,
const nlohmann::json& message,
std::string_view fieldPath) {
std::string extended_info(fieldPath);
extended_info += messages::messageAnnotation;
nlohmann::json& field = target[extended_info];
if (!field.is_array()) {
// Force object to be an array
field = nlohmann::json::array();
}
// Object exists and it is an array so we can just push in the message
field.emplace_back(message);
}
static nlohmann::json getLog(redfish::registries::base::Index name,
std::span<const std::string_view> args) {
size_t index = static_cast<size_t>(name);
if (index >= redfish::registries::base::registry.size()) {
return {};
}
return getLogFromRegistry(redfish::registries::base::header,
redfish::registries::base::registry, index, args);
}
/**
* @internal
* @brief Formats ResourceInUse message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json resourceInUse() {
return getLog(redfish::registries::base::Index::resourceInUse, {});
}
void resourceInUse(crow::Response& res) {
res.result(boost::beast::http::status::service_unavailable);
addMessageToErrorJson(res.jsonValue, resourceInUse());
}
/**
* @internal
* @brief Formats MalformedJSON message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json malformedJSON() {
return getLog(redfish::registries::base::Index::malformedJSON, {});
}
void malformedJSON(crow::Response& res) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, malformedJSON());
}
/**
* @internal
* @brief Formats ResourceMissingAtURI message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json resourceMissingAtURI(boost::urls::url_view arg1) // NOLINT
{
std::array<std::string_view, 1> args{arg1.buffer()};
return getLog(redfish::registries::base::Index::resourceMissingAtURI, args);
}
void resourceMissingAtURI(crow::Response& res,
boost::urls::url_view arg1) // NOLINT
{
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, resourceMissingAtURI(arg1));
}
/**
* @internal
* @brief Formats ActionParameterValueError message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json actionParameterValueError(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::actionParameterValueError,
std::to_array({arg1, arg2}));
}
void actionParameterValueError(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, actionParameterValueError(arg1, arg2));
}
/**
* @internal
* @brief Formats ActionParameterValueFormatError message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json actionParameterValueFormatError(std::string_view arg1,
std::string_view arg2,
std::string_view arg3) {
return getLog(
redfish::registries::base::Index::actionParameterValueFormatError,
std::to_array({arg1, arg2, arg3}));
}
void actionParameterValueFormatError(crow::Response& res, std::string_view arg1,
std::string_view arg2,
std::string_view arg3) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue,
actionParameterValueFormatError(arg1, arg2, arg3));
}
/**
* @internal
* @brief Formats ActionParameterValueNotInList message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json actionParameterValueNotInList(std::string_view arg1,
std::string_view arg2,
std::string_view arg3) {
return getLog(redfish::registries::base::Index::actionParameterValueNotInList,
std::to_array({arg1, arg2, arg3}));
}
void actionParameterValueNotInList(crow::Response& res, std::string_view arg1,
std::string_view arg2,
std::string_view arg3) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue,
actionParameterValueNotInList(arg1, arg2, arg3));
}
/**
* @internal
* @brief Formats InternalError message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json internalError() {
return getLog(redfish::registries::base::Index::internalError, {});
}
void internalError(crow::Response& res,
const bmcweb::source_location location) {
BMCWEB_LOG_CRITICAL << "Internal Error " << location.file_name() << "("
<< location.line() << ":" << location.column() << ") `"
<< location.function_name() << "`: ";
res.result(boost::beast::http::status::internal_server_error);
addMessageToErrorJson(res.jsonValue, internalError());
}
/**
* @internal
* @brief Formats UnrecognizedRequestBody message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json unrecognizedRequestBody() {
return getLog(redfish::registries::base::Index::unrecognizedRequestBody, {});
}
void unrecognizedRequestBody(crow::Response& res) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, unrecognizedRequestBody());
}
/**
* @internal
* @brief Formats ResourceAtUriUnauthorized message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json resourceAtUriUnauthorized(boost::urls::url_view arg1, // NOLINT
std::string_view arg2) {
return getLog(redfish::registries::base::Index::resourceAtUriUnauthorized,
std::to_array<std::string_view>({arg1.buffer(), arg2}));
}
void resourceAtUriUnauthorized(crow::Response& res,
boost::urls::url_view arg1, // NOLINT
std::string_view arg2) {
res.result(boost::beast::http::status::unauthorized);
addMessageToErrorJson(res.jsonValue, resourceAtUriUnauthorized(arg1, arg2));
}
/**
* @internal
* @brief Formats ActionParameterUnknown message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json actionParameterUnknown(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::actionParameterUnknown,
std::to_array({arg1, arg2}));
}
void actionParameterUnknown(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, actionParameterUnknown(arg1, arg2));
}
/**
* @internal
* @brief Formats ResourceCannotBeDeleted message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json resourceCannotBeDeleted() {
return getLog(redfish::registries::base::Index::resourceCannotBeDeleted, {});
}
void resourceCannotBeDeleted(crow::Response& res) {
res.result(boost::beast::http::status::method_not_allowed);
addMessageToErrorJson(res.jsonValue, resourceCannotBeDeleted());
}
/**
* @internal
* @brief Formats PropertyDuplicate message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyDuplicate(std::string_view arg1) {
return getLog(redfish::registries::base::Index::propertyDuplicate,
std::to_array({arg1}));
}
void propertyDuplicate(crow::Response& res, std::string_view arg1) {
res.result(boost::beast::http::status::bad_request);
addMessageToJson(res.jsonValue, propertyDuplicate(arg1), arg1);
}
/**
* @internal
* @brief Formats ServiceTemporarilyUnavailable message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json serviceTemporarilyUnavailable(std::string_view arg1) {
return getLog(redfish::registries::base::Index::serviceTemporarilyUnavailable,
std::to_array({arg1}));
}
void serviceTemporarilyUnavailable(crow::Response& res, std::string_view arg1) {
res.addHeader(boost::beast::http::field::retry_after, arg1);
res.result(boost::beast::http::status::service_unavailable);
addMessageToErrorJson(res.jsonValue, serviceTemporarilyUnavailable(arg1));
}
/**
* @internal
* @brief Formats ResourceAlreadyExists message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json resourceAlreadyExists(std::string_view arg1,
std::string_view arg2,
std::string_view arg3) {
return getLog(redfish::registries::base::Index::resourceAlreadyExists,
std::to_array({arg1, arg2, arg3}));
}
void resourceAlreadyExists(crow::Response& res, std::string_view arg1,
std::string_view arg2, std::string_view arg3) {
res.result(boost::beast::http::status::bad_request);
addMessageToJson(res.jsonValue, resourceAlreadyExists(arg1, arg2, arg3),
arg2);
}
/**
* @internal
* @brief Formats AccountForSessionNoLongerExists message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json accountForSessionNoLongerExists() {
return getLog(
redfish::registries::base::Index::accountForSessionNoLongerExists, {});
}
void accountForSessionNoLongerExists(crow::Response& res) {
res.result(boost::beast::http::status::forbidden);
addMessageToErrorJson(res.jsonValue, accountForSessionNoLongerExists());
}
/**
* @internal
* @brief Formats CreateFailedMissingReqProperties message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json createFailedMissingReqProperties(std::string_view arg1) {
return getLog(
redfish::registries::base::Index::createFailedMissingReqProperties,
std::to_array({arg1}));
}
void createFailedMissingReqProperties(crow::Response& res,
std::string_view arg1) {
res.result(boost::beast::http::status::bad_request);
addMessageToJson(res.jsonValue, createFailedMissingReqProperties(arg1), arg1);
}
/**
* @internal
* @brief Formats PropertyValueError message into JSON for the specified
* property
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyValueError(std::string_view arg1) {
return getLog(redfish::registries::base::Index::propertyValueError,
std::to_array({arg1}));
}
void propertyValueError(crow::Response& res, std::string_view arg1) {
res.result(boost::beast::http::status::bad_request);
addMessageToJson(res.jsonValue, propertyValueError(arg1), arg1);
}
/**
* @internal
* @brief Formats PropertyValueFormatError message into JSON for the specified
* property
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyValueFormatError(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::propertyValueFormatError,
std::to_array({arg1, arg2}));
}
void propertyValueFormatError(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToJson(res.jsonValue, propertyValueFormatError(arg1, arg2), arg2);
}
/**
* @internal
* @brief Formats PropertyValueNotInList message into JSON for the specified
* property
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyValueNotInList(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::propertyValueNotInList,
std::to_array({arg1, arg2}));
}
void propertyValueNotInList(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToJson(res.jsonValue, propertyValueNotInList(arg1, arg2), arg2);
}
/**
* @internal
* @brief Formats PropertyValueOutOfRange message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyValueOutOfRange(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::propertyValueOutOfRange,
std::to_array({arg1, arg2}));
}
void propertyValueOutOfRange(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, propertyValueOutOfRange(arg1, arg2));
}
/**
* @internal
* @brief Formats ResourceAtUriInUnknownFormat message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json resourceAtUriInUnknownFormat(
boost::urls::url_view arg1) // NOLINT
{
return getLog(redfish::registries::base::Index::resourceAtUriInUnknownFormat,
std::to_array<std::string_view>({arg1.buffer()}));
}
void resourceAtUriInUnknownFormat(crow::Response& res,
boost::urls::url_view arg1) // NOLINT
{
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, resourceAtUriInUnknownFormat(arg1));
}
/**
* @internal
* @brief Formats ServiceDisabled message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json serviceDisabled(std::string_view arg1) {
return getLog(redfish::registries::base::Index::serviceDisabled,
std::to_array({arg1}));
}
void serviceDisabled(crow::Response& res, std::string_view arg1) {
res.result(boost::beast::http::status::service_unavailable);
addMessageToErrorJson(res.jsonValue, serviceDisabled(arg1));
}
/**
* @internal
* @brief Formats ServiceInUnknownState message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json serviceInUnknownState() {
return getLog(redfish::registries::base::Index::serviceInUnknownState, {});
}
void serviceInUnknownState(crow::Response& res) {
res.result(boost::beast::http::status::service_unavailable);
addMessageToErrorJson(res.jsonValue, serviceInUnknownState());
}
/**
* @internal
* @brief Formats EventSubscriptionLimitExceeded message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json eventSubscriptionLimitExceeded() {
return getLog(
redfish::registries::base::Index::eventSubscriptionLimitExceeded, {});
}
void eventSubscriptionLimitExceeded(crow::Response& res) {
res.result(boost::beast::http::status::service_unavailable);
addMessageToErrorJson(res.jsonValue, eventSubscriptionLimitExceeded());
}
/**
* @internal
* @brief Formats ActionParameterMissing message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json actionParameterMissing(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::actionParameterMissing,
std::to_array({arg1, arg2}));
}
void actionParameterMissing(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, actionParameterMissing(arg1, arg2));
}
/**
* @internal
* @brief Formats StringValueTooLong message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json stringValueTooLong(std::string_view arg1, int arg2) {
std::string arg_to_string = std::to_string(arg2);
return getLog(redfish::registries::base::Index::stringValueTooLong,
std::to_array({arg1, std::string_view(arg_to_string)}));
}
void stringValueTooLong(crow::Response& res, std::string_view arg1, int arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, stringValueTooLong(arg1, arg2));
}
/**
* @internal
* @brief Formats SessionTerminated message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json sessionTerminated() {
return getLog(redfish::registries::base::Index::sessionTerminated, {});
}
void sessionTerminated(crow::Response& res) {
res.result(boost::beast::http::status::ok);
addMessageToJsonRoot(res.jsonValue, sessionTerminated());
}
/**
* @internal
* @brief Formats SubscriptionTerminated message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json subscriptionTerminated() {
return getLog(redfish::registries::base::Index::subscriptionTerminated, {});
}
void subscriptionTerminated(crow::Response& res) {
res.result(boost::beast::http::status::ok);
addMessageToJsonRoot(res.jsonValue, subscriptionTerminated());
}
/**
* @internal
* @brief Formats ResourceTypeIncompatible message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json resourceTypeIncompatible(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::resourceTypeIncompatible,
std::to_array({arg1, arg2}));
}
void resourceTypeIncompatible(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, resourceTypeIncompatible(arg1, arg2));
}
/**
* @internal
* @brief Formats ResetRequired message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json resetRequired(boost::urls::url_view arg1, // NOLINT
std::string_view arg2) // NOLINT
{
return getLog(redfish::registries::base::Index::resetRequired,
std::to_array<std::string_view>({arg1.buffer(), arg2}));
}
void resetRequired(crow::Response& res, boost::urls::url_view arg1, // NOLINT
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, resetRequired(arg1, arg2));
}
/**
* @internal
* @brief Formats ChassisPowerStateOnRequired message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json chassisPowerStateOnRequired(std::string_view arg1) {
return getLog(redfish::registries::base::Index::resetRequired,
std::to_array({arg1}));
}
void chassisPowerStateOnRequired(crow::Response& res, std::string_view arg1) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, chassisPowerStateOnRequired(arg1));
}
/**
* @internal
* @brief Formats ChassisPowerStateOffRequired message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json chassisPowerStateOffRequired(std::string_view arg1) {
return getLog(redfish::registries::base::Index::chassisPowerStateOffRequired,
std::to_array({arg1}));
}
void chassisPowerStateOffRequired(crow::Response& res, std::string_view arg1) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, chassisPowerStateOffRequired(arg1));
}
/**
* @internal
* @brief Formats PropertyValueConflict message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyValueConflict(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::propertyValueConflict,
std::to_array({arg1, arg2}));
}
void propertyValueConflict(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, propertyValueConflict(arg1, arg2));
}
/**
* @internal
* @brief Formats PropertyValueResourceConflict message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyValueResourceConflict(
std::string_view arg1, std::string_view arg2,
boost::urls::url_view arg3) // NOLINT
{
return getLog(redfish::registries::base::Index::propertyValueResourceConflict,
std::to_array<std::string_view>({arg1, arg2, arg3.buffer()}));
}
void propertyValueResourceConflict(crow::Response& res, std::string_view arg1,
std::string_view arg2,
boost::urls::url_view arg3) // NOLINT
{
res.result(boost::beast::http::status::conflict);
addMessageToErrorJson(res.jsonValue,
propertyValueResourceConflict(arg1, arg2, arg3));
}
/**
* @internal
* @brief Formats PropertyValueExternalConflict message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyValueExternalConflict(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::propertyValueExternalConflict,
std::to_array({arg1, arg2}));
}
void propertyValueExternalConflict(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::conflict);
addMessageToErrorJson(res.jsonValue,
propertyValueExternalConflict(arg1, arg2));
}
/**
* @internal
* @brief Formats PropertyValueIncorrect message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyValueIncorrect(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::propertyValueIncorrect,
std::to_array({arg1, arg2}));
}
void propertyValueIncorrect(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, propertyValueIncorrect(arg1, arg2));
}
/**
* @internal
* @brief Formats ResourceCreationConflict message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json resourceCreationConflict(boost::urls::url_view arg1) // NOLINT
{
return getLog(redfish::registries::base::Index::resourceCreationConflict,
std::to_array<std::string_view>({arg1.buffer()}));
}
void resourceCreationConflict(crow::Response& res,
boost::urls::url_view arg1) // NOLINT
{
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, resourceCreationConflict(arg1));
}
/**
* @internal
* @brief Formats MaximumErrorsExceeded message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json maximumErrorsExceeded() {
return getLog(redfish::registries::base::Index::maximumErrorsExceeded, {});
}
void maximumErrorsExceeded(crow::Response& res) {
res.result(boost::beast::http::status::internal_server_error);
addMessageToErrorJson(res.jsonValue, maximumErrorsExceeded());
}
/**
* @internal
* @brief Formats PreconditionFailed message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json preconditionFailed() {
return getLog(redfish::registries::base::Index::preconditionFailed, {});
}
void preconditionFailed(crow::Response& res) {
res.result(boost::beast::http::status::precondition_failed);
addMessageToErrorJson(res.jsonValue, preconditionFailed());
}
/**
* @internal
* @brief Formats PreconditionRequired message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json preconditionRequired() {
return getLog(redfish::registries::base::Index::preconditionRequired, {});
}
void preconditionRequired(crow::Response& res) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, preconditionRequired());
}
/**
* @internal
* @brief Formats OperationFailed message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json operationFailed() {
return getLog(redfish::registries::base::Index::operationFailed, {});
}
void operationFailed(crow::Response& res) {
res.result(boost::beast::http::status::bad_gateway);
addMessageToErrorJson(res.jsonValue, operationFailed());
}
/**
* @internal
* @brief Formats OperationTimeout message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json operationTimeout() {
return getLog(redfish::registries::base::Index::operationTimeout, {});
}
void operationTimeout(crow::Response& res) {
res.result(boost::beast::http::status::internal_server_error);
addMessageToErrorJson(res.jsonValue, operationTimeout());
}
/**
* @internal
* @brief Formats PropertyValueTypeError message into JSON for the specified
* property
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyValueTypeError(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::propertyValueTypeError,
std::to_array({arg1, arg2}));
}
void propertyValueTypeError(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToJson(res.jsonValue, propertyValueTypeError(arg1, arg2), arg2);
}
/**
* @internal
* @brief Formats ResourceNotFound message into JSONd
*
* See header file for more information
* @endinternal
*/
nlohmann::json resourceNotFound(std::string_view arg1, std::string_view arg2) {
return getLog(redfish::registries::base::Index::resourceNotFound,
std::to_array({arg1, arg2}));
}
void resourceNotFound(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::not_found);
addMessageToErrorJson(res.jsonValue, resourceNotFound(arg1, arg2));
}
/**
* @internal
* @brief Formats CouldNotEstablishConnection message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json couldNotEstablishConnection(
boost::urls::url_view arg1) // NOLINT
{
return getLog(redfish::registries::base::Index::couldNotEstablishConnection,
std::to_array<std::string_view>({arg1.buffer()}));
}
void couldNotEstablishConnection(crow::Response& res,
boost::urls::url_view arg1) // NOLINT
{
res.result(boost::beast::http::status::not_found);
addMessageToErrorJson(res.jsonValue, couldNotEstablishConnection(arg1));
}
/**
* @internal
* @brief Formats PropertyNotWritable message into JSON for the specified
* property
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyNotWritable(std::string_view arg1) {
return getLog(redfish::registries::base::Index::propertyNotWritable,
std::to_array({arg1}));
}
void propertyNotWritable(crow::Response& res, std::string_view arg1) {
res.result(boost::beast::http::status::forbidden);
addMessageToJson(res.jsonValue, propertyNotWritable(arg1), arg1);
}
/**
* @internal
* @brief Formats QueryParameterValueTypeError message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json queryParameterValueTypeError(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::queryParameterValueTypeError,
std::to_array({arg1, arg2}));
}
void queryParameterValueTypeError(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue,
queryParameterValueTypeError(arg1, arg2));
}
/**
* @internal
* @brief Formats ServiceShuttingDown message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json serviceShuttingDown() {
return getLog(redfish::registries::base::Index::serviceShuttingDown, {});
}
void serviceShuttingDown(crow::Response& res) {
res.result(boost::beast::http::status::service_unavailable);
addMessageToErrorJson(res.jsonValue, serviceShuttingDown());
}
/**
* @internal
* @brief Formats ActionParameterDuplicate message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json actionParameterDuplicate(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::actionParameterDuplicate,
std::to_array({arg1, arg2}));
}
void actionParameterDuplicate(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, actionParameterDuplicate(arg1, arg2));
}
/**
* @internal
* @brief Formats ActionParameterNotSupported message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json actionParameterNotSupported(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::actionParameterNotSupported,
std::to_array({arg1, arg2}));
}
void actionParameterNotSupported(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, actionParameterNotSupported(arg1, arg2));
}
/**
* @internal
* @brief Formats SourceDoesNotSupportProtocol message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json sourceDoesNotSupportProtocol(
boost::urls::url_view arg1, // NOLINT
std::string_view arg2) {
return getLog(redfish::registries::base::Index::sourceDoesNotSupportProtocol,
std::to_array<std::string_view>({arg1.buffer(), arg2}));
}
void sourceDoesNotSupportProtocol(crow::Response& res,
boost::urls::url_view arg1, // NOLINT
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue,
sourceDoesNotSupportProtocol(arg1, arg2));
}
/**
* @internal
* @brief Formats StrictAccountTypes message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json strictAccountTypes(std::string_view arg1) {
return getLog(redfish::registries::base::Index::strictAccountTypes,
std::to_array({arg1}));
}
void strictAccountTypes(crow::Response& res, std::string_view arg1) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, strictAccountTypes(arg1));
}
/**
* @internal
* @brief Formats AccountRemoved message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json accountRemoved() {
return getLog(redfish::registries::base::Index::accountRemoved, {});
}
void accountRemoved(crow::Response& res) {
res.result(boost::beast::http::status::ok);
addMessageToJsonRoot(res.jsonValue, accountRemoved());
}
/**
* @internal
* @brief Formats AccessDenied message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json accessDenied(boost::urls::url_view arg1) // NOLINT
{
return getLog(redfish::registries::base::Index::accessDenied,
std::to_array<std::string_view>({arg1.buffer()}));
}
void accessDenied(crow::Response& res, boost::urls::url_view arg1) // NOLINT
{
res.result(boost::beast::http::status::forbidden);
addMessageToErrorJson(res.jsonValue, accessDenied(arg1));
}
/**
* @internal
* @brief Formats QueryNotSupported message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json queryNotSupported() {
return getLog(redfish::registries::base::Index::queryNotSupported, {});
}
void queryNotSupported(crow::Response& res) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, queryNotSupported());
}
/**
* @internal
* @brief Formats CreateLimitReachedForResource message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json createLimitReachedForResource() {
return getLog(redfish::registries::base::Index::createLimitReachedForResource,
{});
}
void createLimitReachedForResource(crow::Response& res) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, createLimitReachedForResource());
}
/**
* @internal
* @brief Formats GeneralError message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json generalError() {
return getLog(redfish::registries::base::Index::generalError, {});
}
void generalError(crow::Response& res) {
res.result(boost::beast::http::status::internal_server_error);
addMessageToErrorJson(res.jsonValue, generalError());
}
/**
* @internal
* @brief Formats Success message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json success() {
return getLog(redfish::registries::base::Index::success, {});
}
void success(crow::Response& res) {
// don't set res.result here because success is the default and any
// error should overwrite the default
addMessageToJsonRoot(res.jsonValue, success());
}
/**
* @internal
* @brief Formats Created message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json created() {
return getLog(redfish::registries::base::Index::created, {});
}
void created(crow::Response& res) {
res.result(boost::beast::http::status::created);
addMessageToJsonRoot(res.jsonValue, created());
}
/**
* @internal
* @brief Formats NoOperation message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json noOperation() {
return getLog(redfish::registries::base::Index::noOperation, {});
}
void noOperation(crow::Response& res) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, noOperation());
}
/**
* @internal
* @brief Formats PropertyUnknown message into JSON for the specified
* property
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyUnknown(std::string_view arg1) {
return getLog(redfish::registries::base::Index::propertyUnknown,
std::to_array({arg1}));
}
void propertyUnknown(crow::Response& res, std::string_view arg1) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, propertyUnknown(arg1));
}
/**
* @internal
* @brief Formats NoValidSession message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json noValidSession() {
return getLog(redfish::registries::base::Index::noValidSession, {});
}
void noValidSession(crow::Response& res) {
res.result(boost::beast::http::status::forbidden);
addMessageToErrorJson(res.jsonValue, noValidSession());
}
/**
* @internal
* @brief Formats InvalidObject message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json invalidObject(boost::urls::url_view arg1) // NOLINT
{
return getLog(redfish::registries::base::Index::invalidObject,
std::to_array<std::string_view>({arg1.buffer()}));
}
void invalidObject(crow::Response& res, boost::urls::url_view arg1) // NOLINT
{
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, invalidObject(arg1));
}
/**
* @internal
* @brief Formats InvalidURI message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json invalidURI(boost::urls::url_view arg1) // NOLINT
{
return getLog(redfish::registries::base::Index::invalidURI,
std::to_array<std::string_view>({arg1.buffer()}));
}
void invalidURI(crow::Response& res, boost::urls::url_view arg1) // NOLINT
{
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, invalidURI(arg1));
}
/**
* @internal
* @brief Formats ResourceInStandby message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json resourceInStandby() {
return getLog(redfish::registries::base::Index::resourceInStandby, {});
}
void resourceInStandby(crow::Response& res) {
res.result(boost::beast::http::status::service_unavailable);
addMessageToErrorJson(res.jsonValue, resourceInStandby());
}
/**
* @internal
* @brief Formats ActionParameterValueTypeError message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json actionParameterValueTypeError(std::string_view arg1,
std::string_view arg2,
std::string_view arg3) {
return getLog(redfish::registries::base::Index::actionParameterValueTypeError,
std::to_array({arg1, arg2, arg3}));
}
void actionParameterValueTypeError(crow::Response& res, std::string_view arg1,
std::string_view arg2,
std::string_view arg3) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue,
actionParameterValueTypeError(arg1, arg2, arg3));
}
/**
* @internal
* @brief Formats SessionLimitExceeded message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json sessionLimitExceeded() {
return getLog(redfish::registries::base::Index::sessionLimitExceeded, {});
}
void sessionLimitExceeded(crow::Response& res) {
res.result(boost::beast::http::status::service_unavailable);
addMessageToErrorJson(res.jsonValue, sessionLimitExceeded());
}
/**
* @internal
* @brief Formats ActionNotSupported message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json actionNotSupported(std::string_view arg1) {
return getLog(redfish::registries::base::Index::actionNotSupported,
std::to_array({arg1}));
}
void actionNotSupported(crow::Response& res, std::string_view arg1) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, actionNotSupported(arg1));
}
/**
* @internal
* @brief Formats InvalidIndex message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json invalidIndex(int64_t arg1) {
std::string arg1_str = std::to_string(arg1);
return getLog(redfish::registries::base::Index::invalidIndex,
std::to_array<std::string_view>({arg1_str}));
}
void invalidIndex(crow::Response& res, int64_t arg1) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, invalidIndex(arg1));
}
/**
* @internal
* @brief Formats EmptyJSON message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json emptyJSON() {
return getLog(redfish::registries::base::Index::emptyJSON, {});
}
void emptyJSON(crow::Response& res) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, emptyJSON());
}
/**
* @internal
* @brief Formats QueryNotSupportedOnResource message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json queryNotSupportedOnResource() {
return getLog(redfish::registries::base::Index::queryNotSupportedOnResource,
{});
}
void queryNotSupportedOnResource(crow::Response& res) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, queryNotSupportedOnResource());
}
/**
* @internal
* @brief Formats QueryNotSupportedOnOperation message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json queryNotSupportedOnOperation() {
return getLog(redfish::registries::base::Index::queryNotSupportedOnOperation,
{});
}
void queryNotSupportedOnOperation(crow::Response& res) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, queryNotSupportedOnOperation());
}
/**
* @internal
* @brief Formats QueryCombinationInvalid message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json queryCombinationInvalid() {
return getLog(redfish::registries::base::Index::queryCombinationInvalid, {});
}
void queryCombinationInvalid(crow::Response& res) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, queryCombinationInvalid());
}
/**
* @internal
* @brief Formats InsufficientPrivilege message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json insufficientPrivilege() {
return getLog(redfish::registries::base::Index::insufficientPrivilege, {});
}
void insufficientPrivilege(crow::Response& res) {
res.result(boost::beast::http::status::forbidden);
addMessageToErrorJson(res.jsonValue, insufficientPrivilege());
}
/**
* @internal
* @brief Formats PropertyValueModified message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyValueModified(std::string_view arg1,
std::string_view arg2) {
return getLog(redfish::registries::base::Index::propertyValueModified,
std::to_array({arg1, arg2}));
}
void propertyValueModified(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::ok);
addMessageToJson(res.jsonValue, propertyValueModified(arg1, arg2), arg1);
}
/**
* @internal
* @brief Formats AccountNotModified message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json accountNotModified() {
return getLog(redfish::registries::base::Index::accountNotModified, {});
}
void accountNotModified(crow::Response& res) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, accountNotModified());
}
/**
* @internal
* @brief Formats QueryParameterValueFormatError message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json queryParameterValueFormatError(std::string_view arg1,
std::string_view arg2) {
return getLog(
redfish::registries::base::Index::queryParameterValueFormatError,
std::to_array({arg1, arg2}));
}
void queryParameterValueFormatError(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue,
queryParameterValueFormatError(arg1, arg2));
}
/**
* @internal
* @brief Formats PropertyMissing message into JSON for the specified
* property
*
* See header file for more information
* @endinternal
*/
nlohmann::json propertyMissing(std::string_view arg1) {
return getLog(redfish::registries::base::Index::propertyMissing,
std::to_array({arg1}));
}
void propertyMissing(crow::Response& res, std::string_view arg1) {
res.result(boost::beast::http::status::bad_request);
addMessageToJson(res.jsonValue, propertyMissing(arg1), arg1);
}
/**
* @internal
* @brief Formats ResourceExhaustion message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json resourceExhaustion(std::string_view arg1) {
return getLog(redfish::registries::base::Index::resourceExhaustion,
std::to_array({arg1}));
}
void resourceExhaustion(crow::Response& res, std::string_view arg1) {
res.result(boost::beast::http::status::service_unavailable);
addMessageToErrorJson(res.jsonValue, resourceExhaustion(arg1));
}
/**
* @internal
* @brief Formats AccountModified message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json accountModified() {
return getLog(redfish::registries::base::Index::accountModified, {});
}
void accountModified(crow::Response& res) {
res.result(boost::beast::http::status::ok);
addMessageToErrorJson(res.jsonValue, accountModified());
}
/**
* @internal
* @brief Formats QueryParameterOutOfRange message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json queryParameterOutOfRange(std::string_view arg1,
std::string_view arg2,
std::string_view arg3) {
return getLog(redfish::registries::base::Index::queryParameterOutOfRange,
std::to_array({arg1, arg2, arg3}));
}
void queryParameterOutOfRange(crow::Response& res, std::string_view arg1,
std::string_view arg2, std::string_view arg3) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue,
queryParameterOutOfRange(arg1, arg2, arg3));
}
nlohmann::json passwordChangeRequired(boost::urls::url_view arg1) // NOLINT
{
return getLog(redfish::registries::base::Index::passwordChangeRequired,
std::to_array<std::string_view>({arg1.buffer()}));
}
/**
* @internal
* @brief Formats PasswordChangeRequired message into JSON
*
* See header file for more information
* @endinternal
*/
void passwordChangeRequired(crow::Response& res,
boost::urls::url_view arg1) // NOLINT
{
messages::addMessageToJsonRoot(res.jsonValue, passwordChangeRequired(arg1));
}
/**
* @internal
* @brief Formats InsufficientStorage message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json insufficientStorage() {
return getLog(redfish::registries::base::Index::insufficientStorage, {});
}
void insufficientStorage(crow::Response& res) {
res.result(boost::beast::http::status::insufficient_storage);
addMessageToErrorJson(res.jsonValue, insufficientStorage());
}
/**
* @internal
* @brief Formats OperationNotAllowed message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json operationNotAllowed() {
return getLog(redfish::registries::base::Index::operationNotAllowed, {});
}
void operationNotAllowed(crow::Response& res) {
res.result(boost::beast::http::status::method_not_allowed);
addMessageToErrorJson(res.jsonValue, operationNotAllowed());
}
void invalidUpload(crow::Response& res, std::string_view arg1,
std::string_view arg2) {
res.result(boost::beast::http::status::bad_request);
addMessageToErrorJson(res.jsonValue, invalidUpload(arg1, arg2));
}
/**
* @internal
* @brief Formats Invalid File message into JSON
*
* See header file for more information
* @endinternal
*/
nlohmann::json invalidUpload(std::string_view arg1, std::string_view arg2) {
std::string msg = "Invalid file uploaded to ";
msg += arg1;
msg += ": ";
msg += arg2;
msg += ".";
nlohmann::json::object_t ret;
ret["@odata.type"] = "/redfish/v1/$metadata#Message.v1_1_1.Message";
ret["MessageId"] = "OpenBMC.0.2.InvalidUpload";
ret["Message"] = std::move(msg);
nlohmann::json::array_t args;
args.emplace_back(arg1);
args.emplace_back(arg2);
ret["MessageArgs"] = std::move(args);
ret["MessageSeverity"] = "Warning";
ret["Resolution"] = "None.";
return ret;
}
} // namespace messages
} // namespace redfish