1 /*
2 // Copyright (c) 2018 Intel Corporation
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 */
16 #include "error_messages.hpp"
17
18 #include "http_response.hpp"
19 #include "logging.hpp"
20 #include "registries.hpp"
21 #include "registries/base_message_registry.hpp"
22
23 #include <boost/beast/http/field.hpp>
24 #include <boost/beast/http/status.hpp>
25 #include <boost/url/url_view_base.hpp>
26 #include <nlohmann/json.hpp>
27
28 #include <array>
29 #include <cstddef>
30 #include <cstdint>
31 #include <source_location>
32 #include <span>
33 #include <string>
34 #include <string_view>
35 #include <utility>
36
37 // IWYU pragma: no_include <stddef.h>
38
39 namespace redfish
40 {
41
42 namespace messages
43 {
44
addMessageToErrorJson(nlohmann::json & target,const nlohmann::json & message)45 static void addMessageToErrorJson(nlohmann::json& target,
46 const nlohmann::json& message)
47 {
48 auto& error = target["error"];
49
50 // If this is the first error message, fill in the information from the
51 // first error message to the top level struct
52 if (!error.is_object())
53 {
54 auto messageIdIterator = message.find("MessageId");
55 if (messageIdIterator == message.end())
56 {
57 BMCWEB_LOG_CRITICAL(
58 "Attempt to add error message without MessageId");
59 return;
60 }
61
62 auto messageFieldIterator = message.find("Message");
63 if (messageFieldIterator == message.end())
64 {
65 BMCWEB_LOG_CRITICAL("Attempt to add error message without Message");
66 return;
67 }
68 error["code"] = *messageIdIterator;
69 error["message"] = *messageFieldIterator;
70 }
71 else
72 {
73 // More than 1 error occurred, so the message has to be generic
74 error["code"] = std::string(messageVersionPrefix) + "GeneralError";
75 error["message"] = "A general error has occurred. See Resolution for "
76 "information on how to resolve the error.";
77 }
78
79 // This check could technically be done in the default construction
80 // branch above, but because we need the pointer to the extended info field
81 // anyway, it's more efficient to do it here.
82 auto& extendedInfo = error[messages::messageAnnotation];
83 if (!extendedInfo.is_array())
84 {
85 extendedInfo = nlohmann::json::array();
86 }
87
88 extendedInfo.push_back(message);
89 }
90
moveErrorsToErrorJson(nlohmann::json & target,nlohmann::json & source)91 void moveErrorsToErrorJson(nlohmann::json& target, nlohmann::json& source)
92 {
93 if (!source.is_object())
94 {
95 return;
96 }
97 auto errorIt = source.find("error");
98 if (errorIt == source.end())
99 {
100 // caller puts error message in root
101 messages::addMessageToErrorJson(target, source);
102 source.clear();
103 return;
104 }
105 auto extendedInfoIt = errorIt->find(messages::messageAnnotation);
106 if (extendedInfoIt == errorIt->end())
107 {
108 return;
109 }
110 const nlohmann::json::array_t* extendedInfo =
111 (*extendedInfoIt).get_ptr<const nlohmann::json::array_t*>();
112 if (extendedInfo == nullptr)
113 {
114 source.erase(errorIt);
115 return;
116 }
117 for (const nlohmann::json& message : *extendedInfo)
118 {
119 addMessageToErrorJson(target, message);
120 }
121 source.erase(errorIt);
122 }
123
addMessageToJsonRoot(nlohmann::json & target,const nlohmann::json & message)124 static void addMessageToJsonRoot(nlohmann::json& target,
125 const nlohmann::json& message)
126 {
127 if (!target[messages::messageAnnotation].is_array())
128 {
129 // Force object to be an array
130 target[messages::messageAnnotation] = nlohmann::json::array();
131 }
132
133 target[messages::messageAnnotation].push_back(message);
134 }
135
addMessageToJson(nlohmann::json & target,const nlohmann::json & message,std::string_view fieldPath)136 static void addMessageToJson(nlohmann::json& target,
137 const nlohmann::json& message,
138 std::string_view fieldPath)
139 {
140 std::string extendedInfo(fieldPath);
141 extendedInfo += messages::messageAnnotation;
142
143 nlohmann::json& field = target[extendedInfo];
144 if (!field.is_array())
145 {
146 // Force object to be an array
147 field = nlohmann::json::array();
148 }
149
150 // Object exists and it is an array so we can just push in the message
151 field.push_back(message);
152 }
153
getLog(redfish::registries::base::Index name,std::span<const std::string_view> args)154 static nlohmann::json getLog(redfish::registries::base::Index name,
155 std::span<const std::string_view> args)
156 {
157 size_t index = static_cast<size_t>(name);
158 if (index >= redfish::registries::base::registry.size())
159 {
160 return {};
161 }
162 return getLogFromRegistry(redfish::registries::base::header,
163 redfish::registries::base::registry, index, args);
164 }
165
166 /**
167 * @internal
168 * @brief Formats ResourceInUse message into JSON
169 *
170 * See header file for more information
171 * @endinternal
172 */
resourceInUse()173 nlohmann::json resourceInUse()
174 {
175 return getLog(redfish::registries::base::Index::resourceInUse, {});
176 }
177
resourceInUse(crow::Response & res)178 void resourceInUse(crow::Response& res)
179 {
180 res.result(boost::beast::http::status::service_unavailable);
181 addMessageToErrorJson(res.jsonValue, resourceInUse());
182 }
183
184 /**
185 * @internal
186 * @brief Formats MalformedJSON message into JSON
187 *
188 * See header file for more information
189 * @endinternal
190 */
malformedJSON()191 nlohmann::json malformedJSON()
192 {
193 return getLog(redfish::registries::base::Index::malformedJSON, {});
194 }
195
malformedJSON(crow::Response & res)196 void malformedJSON(crow::Response& res)
197 {
198 res.result(boost::beast::http::status::bad_request);
199 addMessageToErrorJson(res.jsonValue, malformedJSON());
200 }
201
202 /**
203 * @internal
204 * @brief Formats ResourceMissingAtURI message into JSON
205 *
206 * See header file for more information
207 * @endinternal
208 */
resourceMissingAtURI(const boost::urls::url_view_base & arg1)209 nlohmann::json resourceMissingAtURI(const boost::urls::url_view_base& arg1)
210 {
211 std::array<std::string_view, 1> args{arg1.buffer()};
212 return getLog(redfish::registries::base::Index::resourceMissingAtURI, args);
213 }
214
resourceMissingAtURI(crow::Response & res,const boost::urls::url_view_base & arg1)215 void resourceMissingAtURI(crow::Response& res,
216 const boost::urls::url_view_base& arg1)
217 {
218 res.result(boost::beast::http::status::bad_request);
219 addMessageToErrorJson(res.jsonValue, resourceMissingAtURI(arg1));
220 }
221
222 /**
223 * @internal
224 * @brief Formats ActionParameterValueFormatError message into JSON
225 *
226 * See header file for more information
227 * @endinternal
228 */
actionParameterValueFormatError(const nlohmann::json & arg1,std::string_view arg2,std::string_view arg3)229 nlohmann::json actionParameterValueFormatError(const nlohmann::json& arg1,
230 std::string_view arg2,
231 std::string_view arg3)
232 {
233 std::string arg1Str = arg1.dump(2, ' ', true,
234 nlohmann::json::error_handler_t::replace);
235 return getLog(
236 redfish::registries::base::Index::actionParameterValueFormatError,
237 std::to_array<std::string_view>({arg1Str, arg2, arg3}));
238 }
239
actionParameterValueFormatError(crow::Response & res,const nlohmann::json & arg1,std::string_view arg2,std::string_view arg3)240 void actionParameterValueFormatError(crow::Response& res,
241 const nlohmann::json& arg1,
242 std::string_view arg2,
243 std::string_view arg3)
244 {
245 res.result(boost::beast::http::status::bad_request);
246 addMessageToErrorJson(res.jsonValue,
247 actionParameterValueFormatError(arg1, arg2, arg3));
248 }
249
250 /**
251 * @internal
252 * @brief Formats ActionParameterValueNotInList message into JSON
253 *
254 * See header file for more information
255 * @endinternal
256 */
actionParameterValueNotInList(std::string_view arg1,std::string_view arg2,std::string_view arg3)257 nlohmann::json actionParameterValueNotInList(std::string_view arg1,
258 std::string_view arg2,
259 std::string_view arg3)
260 {
261 return getLog(
262 redfish::registries::base::Index::actionParameterValueNotInList,
263 std::to_array({arg1, arg2, arg3}));
264 }
265
actionParameterValueNotInList(crow::Response & res,std::string_view arg1,std::string_view arg2,std::string_view arg3)266 void actionParameterValueNotInList(crow::Response& res, std::string_view arg1,
267 std::string_view arg2, std::string_view arg3)
268 {
269 res.result(boost::beast::http::status::bad_request);
270 addMessageToErrorJson(res.jsonValue,
271 actionParameterValueNotInList(arg1, arg2, arg3));
272 }
273
274 /**
275 * @internal
276 * @brief Formats InternalError message into JSON
277 *
278 * See header file for more information
279 * @endinternal
280 */
internalError()281 nlohmann::json internalError()
282 {
283 return getLog(redfish::registries::base::Index::internalError, {});
284 }
285
internalError(crow::Response & res,const std::source_location location)286 void internalError(crow::Response& res, const std::source_location location)
287 {
288 BMCWEB_LOG_CRITICAL("Internal Error {}({}:{}) `{}`: ", location.file_name(),
289 location.line(), location.column(),
290 location.function_name());
291 res.result(boost::beast::http::status::internal_server_error);
292 addMessageToErrorJson(res.jsonValue, internalError());
293 }
294
295 /**
296 * @internal
297 * @brief Formats UnrecognizedRequestBody message into JSON
298 *
299 * See header file for more information
300 * @endinternal
301 */
unrecognizedRequestBody()302 nlohmann::json unrecognizedRequestBody()
303 {
304 return getLog(redfish::registries::base::Index::unrecognizedRequestBody,
305 {});
306 }
307
unrecognizedRequestBody(crow::Response & res)308 void unrecognizedRequestBody(crow::Response& res)
309 {
310 res.result(boost::beast::http::status::bad_request);
311 addMessageToErrorJson(res.jsonValue, unrecognizedRequestBody());
312 }
313
314 /**
315 * @internal
316 * @brief Formats ResourceAtUriUnauthorized message into JSON
317 *
318 * See header file for more information
319 * @endinternal
320 */
resourceAtUriUnauthorized(const boost::urls::url_view_base & arg1,std::string_view arg2)321 nlohmann::json resourceAtUriUnauthorized(const boost::urls::url_view_base& arg1,
322 std::string_view arg2)
323 {
324 return getLog(redfish::registries::base::Index::resourceAtUriUnauthorized,
325 std::to_array<std::string_view>({arg1.buffer(), arg2}));
326 }
327
resourceAtUriUnauthorized(crow::Response & res,const boost::urls::url_view_base & arg1,std::string_view arg2)328 void resourceAtUriUnauthorized(crow::Response& res,
329 const boost::urls::url_view_base& arg1,
330 std::string_view arg2)
331 {
332 res.result(boost::beast::http::status::unauthorized);
333 addMessageToErrorJson(res.jsonValue, resourceAtUriUnauthorized(arg1, arg2));
334 }
335
336 /**
337 * @internal
338 * @brief Formats ActionParameterUnknown message into JSON
339 *
340 * See header file for more information
341 * @endinternal
342 */
actionParameterUnknown(std::string_view arg1,std::string_view arg2)343 nlohmann::json actionParameterUnknown(std::string_view arg1,
344 std::string_view arg2)
345 {
346 return getLog(redfish::registries::base::Index::actionParameterUnknown,
347 std::to_array({arg1, arg2}));
348 }
349
actionParameterUnknown(crow::Response & res,std::string_view arg1,std::string_view arg2)350 void actionParameterUnknown(crow::Response& res, std::string_view arg1,
351 std::string_view arg2)
352 {
353 res.result(boost::beast::http::status::bad_request);
354 addMessageToErrorJson(res.jsonValue, actionParameterUnknown(arg1, arg2));
355 }
356
357 /**
358 * @internal
359 * @brief Formats ResourceCannotBeDeleted message into JSON
360 *
361 * See header file for more information
362 * @endinternal
363 */
resourceCannotBeDeleted()364 nlohmann::json resourceCannotBeDeleted()
365 {
366 return getLog(redfish::registries::base::Index::resourceCannotBeDeleted,
367 {});
368 }
369
resourceCannotBeDeleted(crow::Response & res)370 void resourceCannotBeDeleted(crow::Response& res)
371 {
372 res.result(boost::beast::http::status::method_not_allowed);
373 addMessageToErrorJson(res.jsonValue, resourceCannotBeDeleted());
374 }
375
376 /**
377 * @internal
378 * @brief Formats PropertyDuplicate message into JSON
379 *
380 * See header file for more information
381 * @endinternal
382 */
propertyDuplicate(std::string_view arg1)383 nlohmann::json propertyDuplicate(std::string_view arg1)
384 {
385 return getLog(redfish::registries::base::Index::propertyDuplicate,
386 std::to_array({arg1}));
387 }
388
propertyDuplicate(crow::Response & res,std::string_view arg1)389 void propertyDuplicate(crow::Response& res, std::string_view arg1)
390 {
391 res.result(boost::beast::http::status::bad_request);
392 addMessageToJson(res.jsonValue, propertyDuplicate(arg1), arg1);
393 }
394
395 /**
396 * @internal
397 * @brief Formats ServiceTemporarilyUnavailable message into JSON
398 *
399 * See header file for more information
400 * @endinternal
401 */
serviceTemporarilyUnavailable(std::string_view arg1)402 nlohmann::json serviceTemporarilyUnavailable(std::string_view arg1)
403 {
404 return getLog(
405 redfish::registries::base::Index::serviceTemporarilyUnavailable,
406 std::to_array({arg1}));
407 }
408
serviceTemporarilyUnavailable(crow::Response & res,std::string_view arg1)409 void serviceTemporarilyUnavailable(crow::Response& res, std::string_view arg1)
410 {
411 res.addHeader(boost::beast::http::field::retry_after, arg1);
412 res.result(boost::beast::http::status::service_unavailable);
413 addMessageToErrorJson(res.jsonValue, serviceTemporarilyUnavailable(arg1));
414 }
415
416 /**
417 * @internal
418 * @brief Formats ResourceAlreadyExists message into JSON
419 *
420 * See header file for more information
421 * @endinternal
422 */
resourceAlreadyExists(std::string_view arg1,std::string_view arg2,std::string_view arg3)423 nlohmann::json resourceAlreadyExists(std::string_view arg1,
424 std::string_view arg2,
425 std::string_view arg3)
426 {
427 return getLog(redfish::registries::base::Index::resourceAlreadyExists,
428 std::to_array({arg1, arg2, arg3}));
429 }
430
resourceAlreadyExists(crow::Response & res,std::string_view arg1,std::string_view arg2,std::string_view arg3)431 void resourceAlreadyExists(crow::Response& res, std::string_view arg1,
432 std::string_view arg2, std::string_view arg3)
433 {
434 res.result(boost::beast::http::status::bad_request);
435 addMessageToJson(res.jsonValue, resourceAlreadyExists(arg1, arg2, arg3),
436 arg2);
437 }
438
439 /**
440 * @internal
441 * @brief Formats AccountForSessionNoLongerExists message into JSON
442 *
443 * See header file for more information
444 * @endinternal
445 */
accountForSessionNoLongerExists()446 nlohmann::json accountForSessionNoLongerExists()
447 {
448 return getLog(
449 redfish::registries::base::Index::accountForSessionNoLongerExists, {});
450 }
451
accountForSessionNoLongerExists(crow::Response & res)452 void accountForSessionNoLongerExists(crow::Response& res)
453 {
454 res.result(boost::beast::http::status::forbidden);
455 addMessageToErrorJson(res.jsonValue, accountForSessionNoLongerExists());
456 }
457
458 /**
459 * @internal
460 * @brief Formats CreateFailedMissingReqProperties message into JSON
461 *
462 * See header file for more information
463 * @endinternal
464 */
createFailedMissingReqProperties(std::string_view arg1)465 nlohmann::json createFailedMissingReqProperties(std::string_view arg1)
466 {
467 return getLog(
468 redfish::registries::base::Index::createFailedMissingReqProperties,
469 std::to_array({arg1}));
470 }
471
createFailedMissingReqProperties(crow::Response & res,std::string_view arg1)472 void createFailedMissingReqProperties(crow::Response& res,
473 std::string_view arg1)
474 {
475 res.result(boost::beast::http::status::bad_request);
476 addMessageToJson(res.jsonValue, createFailedMissingReqProperties(arg1),
477 arg1);
478 }
479
480 /**
481 * @internal
482 * @brief Formats PropertyValueFormatError message into JSON for the specified
483 * property
484 *
485 * See header file for more information
486 * @endinternal
487 */
propertyValueFormatError(const nlohmann::json & arg1,std::string_view arg2)488 nlohmann::json propertyValueFormatError(const nlohmann::json& arg1,
489 std::string_view arg2)
490 {
491 std::string arg1Str = arg1.dump(2, ' ', true,
492 nlohmann::json::error_handler_t::replace);
493 return getLog(redfish::registries::base::Index::propertyValueFormatError,
494 std::to_array<std::string_view>({arg1Str, arg2}));
495 }
496
propertyValueFormatError(crow::Response & res,const nlohmann::json & arg1,std::string_view arg2)497 void propertyValueFormatError(crow::Response& res, const nlohmann::json& arg1,
498 std::string_view arg2)
499 {
500 res.result(boost::beast::http::status::bad_request);
501 addMessageToJson(res.jsonValue, propertyValueFormatError(arg1, arg2), arg2);
502 }
503
504 /**
505 * @internal
506 * @brief Formats PropertyValueNotInList message into JSON for the specified
507 * property
508 *
509 * See header file for more information
510 * @endinternal
511 */
512
propertyValueNotInList(const nlohmann::json & arg1,std::string_view arg2)513 nlohmann::json propertyValueNotInList(const nlohmann::json& arg1,
514 std::string_view arg2)
515 {
516 std::string arg1Str = arg1.dump(-1, ' ', true,
517 nlohmann::json::error_handler_t::replace);
518 return getLog(redfish::registries::base::Index::propertyValueNotInList,
519 std::to_array<std::string_view>({arg1Str, arg2}));
520 }
521
propertyValueNotInList(crow::Response & res,const nlohmann::json & arg1,std::string_view arg2)522 void propertyValueNotInList(crow::Response& res, const nlohmann::json& arg1,
523 std::string_view arg2)
524 {
525 res.result(boost::beast::http::status::bad_request);
526 addMessageToJson(res.jsonValue, propertyValueNotInList(arg1, arg2), arg2);
527 }
528
529 /**
530 * @internal
531 * @brief Formats PropertyValueOutOfRange message into JSON
532 *
533 * See header file for more information
534 * @endinternal
535 */
propertyValueOutOfRange(const nlohmann::json & arg1,std::string_view arg2)536 nlohmann::json propertyValueOutOfRange(const nlohmann::json& arg1,
537 std::string_view arg2)
538 {
539 std::string arg1Str = arg1.dump(2, ' ', true,
540 nlohmann::json::error_handler_t::replace);
541 return getLog(redfish::registries::base::Index::propertyValueOutOfRange,
542 std::to_array<std::string_view>({arg1Str, arg2}));
543 }
544
propertyValueOutOfRange(crow::Response & res,const nlohmann::json & arg1,std::string_view arg2)545 void propertyValueOutOfRange(crow::Response& res, const nlohmann::json& arg1,
546 std::string_view arg2)
547 {
548 res.result(boost::beast::http::status::bad_request);
549 addMessageToErrorJson(res.jsonValue, propertyValueOutOfRange(arg1, arg2));
550 }
551
552 /**
553 * @internal
554 * @brief Formats ResourceAtUriInUnknownFormat message into JSON
555 *
556 * See header file for more information
557 * @endinternal
558 */
559 nlohmann::json
resourceAtUriInUnknownFormat(const boost::urls::url_view_base & arg1)560 resourceAtUriInUnknownFormat(const boost::urls::url_view_base& arg1)
561 {
562 return getLog(
563 redfish::registries::base::Index::resourceAtUriInUnknownFormat,
564 std::to_array<std::string_view>({arg1.buffer()}));
565 }
566
resourceAtUriInUnknownFormat(crow::Response & res,const boost::urls::url_view_base & arg1)567 void resourceAtUriInUnknownFormat(crow::Response& res,
568 const boost::urls::url_view_base& arg1)
569 {
570 res.result(boost::beast::http::status::bad_request);
571 addMessageToErrorJson(res.jsonValue, resourceAtUriInUnknownFormat(arg1));
572 }
573
574 /**
575 * @internal
576 * @brief Formats ServiceDisabled message into JSON
577 *
578 * See header file for more information
579 * @endinternal
580 */
serviceDisabled(std::string_view arg1)581 nlohmann::json serviceDisabled(std::string_view arg1)
582 {
583 return getLog(redfish::registries::base::Index::serviceDisabled,
584 std::to_array({arg1}));
585 }
586
serviceDisabled(crow::Response & res,std::string_view arg1)587 void serviceDisabled(crow::Response& res, std::string_view arg1)
588 {
589 res.result(boost::beast::http::status::service_unavailable);
590 addMessageToErrorJson(res.jsonValue, serviceDisabled(arg1));
591 }
592
593 /**
594 * @internal
595 * @brief Formats ServiceInUnknownState message into JSON
596 *
597 * See header file for more information
598 * @endinternal
599 */
serviceInUnknownState()600 nlohmann::json serviceInUnknownState()
601 {
602 return getLog(redfish::registries::base::Index::serviceInUnknownState, {});
603 }
604
serviceInUnknownState(crow::Response & res)605 void serviceInUnknownState(crow::Response& res)
606 {
607 res.result(boost::beast::http::status::service_unavailable);
608 addMessageToErrorJson(res.jsonValue, serviceInUnknownState());
609 }
610
611 /**
612 * @internal
613 * @brief Formats EventSubscriptionLimitExceeded message into JSON
614 *
615 * See header file for more information
616 * @endinternal
617 */
eventSubscriptionLimitExceeded()618 nlohmann::json eventSubscriptionLimitExceeded()
619 {
620 return getLog(
621 redfish::registries::base::Index::eventSubscriptionLimitExceeded, {});
622 }
623
eventSubscriptionLimitExceeded(crow::Response & res)624 void eventSubscriptionLimitExceeded(crow::Response& res)
625 {
626 res.result(boost::beast::http::status::service_unavailable);
627 addMessageToErrorJson(res.jsonValue, eventSubscriptionLimitExceeded());
628 }
629
630 /**
631 * @internal
632 * @brief Formats ActionParameterMissing message into JSON
633 *
634 * See header file for more information
635 * @endinternal
636 */
actionParameterMissing(std::string_view arg1,std::string_view arg2)637 nlohmann::json actionParameterMissing(std::string_view arg1,
638 std::string_view arg2)
639 {
640 return getLog(redfish::registries::base::Index::actionParameterMissing,
641 std::to_array({arg1, arg2}));
642 }
643
actionParameterMissing(crow::Response & res,std::string_view arg1,std::string_view arg2)644 void actionParameterMissing(crow::Response& res, std::string_view arg1,
645 std::string_view arg2)
646 {
647 res.result(boost::beast::http::status::bad_request);
648 addMessageToErrorJson(res.jsonValue, actionParameterMissing(arg1, arg2));
649 }
650
651 /**
652 * @internal
653 * @brief Formats StringValueTooLong message into JSON
654 *
655 * See header file for more information
656 * @endinternal
657 */
stringValueTooLong(std::string_view arg1,int arg2)658 nlohmann::json stringValueTooLong(std::string_view arg1, int arg2)
659 {
660 std::string arg2String = std::to_string(arg2);
661 return getLog(redfish::registries::base::Index::stringValueTooLong,
662 std::to_array({arg1, std::string_view(arg2String)}));
663 }
664
stringValueTooLong(crow::Response & res,std::string_view arg1,int arg2)665 void stringValueTooLong(crow::Response& res, std::string_view arg1, int arg2)
666 {
667 res.result(boost::beast::http::status::bad_request);
668 addMessageToErrorJson(res.jsonValue, stringValueTooLong(arg1, arg2));
669 }
670
671 /**
672 * @internal
673 * @brief Formats SessionTerminated message into JSON
674 *
675 * See header file for more information
676 * @endinternal
677 */
sessionTerminated()678 nlohmann::json sessionTerminated()
679 {
680 return getLog(redfish::registries::base::Index::sessionTerminated, {});
681 }
682
sessionTerminated(crow::Response & res)683 void sessionTerminated(crow::Response& res)
684 {
685 res.result(boost::beast::http::status::ok);
686 addMessageToJsonRoot(res.jsonValue, sessionTerminated());
687 }
688
689 /**
690 * @internal
691 * @brief Formats SubscriptionTerminated message into JSON
692 *
693 * See header file for more information
694 * @endinternal
695 */
subscriptionTerminated()696 nlohmann::json subscriptionTerminated()
697 {
698 return getLog(redfish::registries::base::Index::subscriptionTerminated, {});
699 }
700
subscriptionTerminated(crow::Response & res)701 void subscriptionTerminated(crow::Response& res)
702 {
703 res.result(boost::beast::http::status::ok);
704 addMessageToJsonRoot(res.jsonValue, subscriptionTerminated());
705 }
706
707 /**
708 * @internal
709 * @brief Formats ResourceTypeIncompatible message into JSON
710 *
711 * See header file for more information
712 * @endinternal
713 */
resourceTypeIncompatible(std::string_view arg1,std::string_view arg2)714 nlohmann::json resourceTypeIncompatible(std::string_view arg1,
715 std::string_view arg2)
716 {
717 return getLog(redfish::registries::base::Index::resourceTypeIncompatible,
718 std::to_array({arg1, arg2}));
719 }
720
resourceTypeIncompatible(crow::Response & res,std::string_view arg1,std::string_view arg2)721 void resourceTypeIncompatible(crow::Response& res, std::string_view arg1,
722 std::string_view arg2)
723 {
724 res.result(boost::beast::http::status::bad_request);
725 addMessageToErrorJson(res.jsonValue, resourceTypeIncompatible(arg1, arg2));
726 }
727
728 /**
729 * @internal
730 * @brief Formats ResetRequired message into JSON
731 *
732 * See header file for more information
733 * @endinternal
734 */
resetRequired(const boost::urls::url_view_base & arg1,std::string_view arg2)735 nlohmann::json resetRequired(const boost::urls::url_view_base& arg1,
736 std::string_view arg2)
737 {
738 return getLog(redfish::registries::base::Index::resetRequired,
739 std::to_array<std::string_view>({arg1.buffer(), arg2}));
740 }
741
resetRequired(crow::Response & res,const boost::urls::url_view_base & arg1,std::string_view arg2)742 void resetRequired(crow::Response& res, const boost::urls::url_view_base& arg1,
743 std::string_view arg2)
744 {
745 res.result(boost::beast::http::status::bad_request);
746 addMessageToErrorJson(res.jsonValue, resetRequired(arg1, arg2));
747 }
748
749 /**
750 * @internal
751 * @brief Formats ChassisPowerStateOnRequired message into JSON
752 *
753 * See header file for more information
754 * @endinternal
755 */
chassisPowerStateOnRequired(std::string_view arg1)756 nlohmann::json chassisPowerStateOnRequired(std::string_view arg1)
757 {
758 return getLog(redfish::registries::base::Index::resetRequired,
759 std::to_array({arg1}));
760 }
761
chassisPowerStateOnRequired(crow::Response & res,std::string_view arg1)762 void chassisPowerStateOnRequired(crow::Response& res, std::string_view arg1)
763 {
764 res.result(boost::beast::http::status::bad_request);
765 addMessageToErrorJson(res.jsonValue, chassisPowerStateOnRequired(arg1));
766 }
767
768 /**
769 * @internal
770 * @brief Formats ChassisPowerStateOffRequired message into JSON
771 *
772 * See header file for more information
773 * @endinternal
774 */
chassisPowerStateOffRequired(std::string_view arg1)775 nlohmann::json chassisPowerStateOffRequired(std::string_view arg1)
776 {
777 return getLog(
778 redfish::registries::base::Index::chassisPowerStateOffRequired,
779 std::to_array({arg1}));
780 }
781
chassisPowerStateOffRequired(crow::Response & res,std::string_view arg1)782 void chassisPowerStateOffRequired(crow::Response& res, std::string_view arg1)
783 {
784 res.result(boost::beast::http::status::bad_request);
785 addMessageToErrorJson(res.jsonValue, chassisPowerStateOffRequired(arg1));
786 }
787
788 /**
789 * @internal
790 * @brief Formats PropertyValueConflict message into JSON
791 *
792 * See header file for more information
793 * @endinternal
794 */
propertyValueConflict(std::string_view arg1,std::string_view arg2)795 nlohmann::json propertyValueConflict(std::string_view arg1,
796 std::string_view arg2)
797 {
798 return getLog(redfish::registries::base::Index::propertyValueConflict,
799 std::to_array({arg1, arg2}));
800 }
801
propertyValueConflict(crow::Response & res,std::string_view arg1,std::string_view arg2)802 void propertyValueConflict(crow::Response& res, std::string_view arg1,
803 std::string_view arg2)
804 {
805 res.result(boost::beast::http::status::bad_request);
806 addMessageToErrorJson(res.jsonValue, propertyValueConflict(arg1, arg2));
807 }
808
809 /**
810 * @internal
811 * @brief Formats PropertyValueResourceConflict message into JSON
812 *
813 * See header file for more information
814 * @endinternal
815 */
816 nlohmann::json
propertyValueResourceConflict(std::string_view arg1,const nlohmann::json & arg2,const boost::urls::url_view_base & arg3)817 propertyValueResourceConflict(std::string_view arg1,
818 const nlohmann::json& arg2,
819 const boost::urls::url_view_base& arg3)
820 {
821 std::string arg2Str = arg2.dump(2, ' ', true,
822 nlohmann::json::error_handler_t::replace);
823
824 return getLog(
825 redfish::registries::base::Index::propertyValueResourceConflict,
826 std::to_array<std::string_view>({arg1, arg2Str, arg3.buffer()}));
827 }
828
propertyValueResourceConflict(crow::Response & res,std::string_view arg1,const nlohmann::json & arg2,const boost::urls::url_view_base & arg3)829 void propertyValueResourceConflict(crow::Response& res, std::string_view arg1,
830 const nlohmann::json& arg2,
831 const boost::urls::url_view_base& arg3)
832 {
833 res.result(boost::beast::http::status::conflict);
834 addMessageToErrorJson(res.jsonValue,
835 propertyValueResourceConflict(arg1, arg2, arg3));
836 }
837
838 /**
839 * @internal
840 * @brief Formats PropertyValueExternalConflict message into JSON
841 *
842 * See header file for more information
843 * @endinternal
844 */
propertyValueExternalConflict(std::string_view arg1,const nlohmann::json & arg2)845 nlohmann::json propertyValueExternalConflict(std::string_view arg1,
846 const nlohmann::json& arg2)
847 {
848 std::string arg2Str = arg2.dump(2, ' ', true,
849 nlohmann::json::error_handler_t::replace);
850
851 return getLog(
852 redfish::registries::base::Index::propertyValueExternalConflict,
853 std::to_array<std::string_view>({arg1, arg2Str}));
854 }
855
propertyValueExternalConflict(crow::Response & res,std::string_view arg1,const nlohmann::json & arg2)856 void propertyValueExternalConflict(crow::Response& res, std::string_view arg1,
857 const nlohmann::json& arg2)
858 {
859 res.result(boost::beast::http::status::conflict);
860 addMessageToErrorJson(res.jsonValue,
861 propertyValueExternalConflict(arg1, arg2));
862 }
863
864 /**
865 * @internal
866 * @brief Formats PropertyValueIncorrect message into JSON
867 *
868 * See header file for more information
869 * @endinternal
870 */
propertyValueIncorrect(std::string_view arg1,const nlohmann::json & arg2)871 nlohmann::json propertyValueIncorrect(std::string_view arg1,
872 const nlohmann::json& arg2)
873 {
874 std::string arg2Str = arg2.dump(2, ' ', true,
875 nlohmann::json::error_handler_t::replace);
876 return getLog(redfish::registries::base::Index::propertyValueIncorrect,
877 std::to_array<std::string_view>({arg1, arg2Str}));
878 }
879
propertyValueIncorrect(crow::Response & res,std::string_view arg1,const nlohmann::json & arg2)880 void propertyValueIncorrect(crow::Response& res, std::string_view arg1,
881 const nlohmann::json& arg2)
882 {
883 res.result(boost::beast::http::status::bad_request);
884 addMessageToErrorJson(res.jsonValue, propertyValueIncorrect(arg1, arg2));
885 }
886
887 /**
888 * @internal
889 * @brief Formats ResourceCreationConflict message into JSON
890 *
891 * See header file for more information
892 * @endinternal
893 */
resourceCreationConflict(const boost::urls::url_view_base & arg1)894 nlohmann::json resourceCreationConflict(const boost::urls::url_view_base& arg1)
895 {
896 return getLog(redfish::registries::base::Index::resourceCreationConflict,
897 std::to_array<std::string_view>({arg1.buffer()}));
898 }
899
resourceCreationConflict(crow::Response & res,const boost::urls::url_view_base & arg1)900 void resourceCreationConflict(crow::Response& res,
901 const boost::urls::url_view_base& arg1)
902 {
903 res.result(boost::beast::http::status::bad_request);
904 addMessageToErrorJson(res.jsonValue, resourceCreationConflict(arg1));
905 }
906
907 /**
908 * @internal
909 * @brief Formats MaximumErrorsExceeded message into JSON
910 *
911 * See header file for more information
912 * @endinternal
913 */
maximumErrorsExceeded()914 nlohmann::json maximumErrorsExceeded()
915 {
916 return getLog(redfish::registries::base::Index::maximumErrorsExceeded, {});
917 }
918
maximumErrorsExceeded(crow::Response & res)919 void maximumErrorsExceeded(crow::Response& res)
920 {
921 res.result(boost::beast::http::status::internal_server_error);
922 addMessageToErrorJson(res.jsonValue, maximumErrorsExceeded());
923 }
924
925 /**
926 * @internal
927 * @brief Formats PreconditionFailed message into JSON
928 *
929 * See header file for more information
930 * @endinternal
931 */
preconditionFailed()932 nlohmann::json preconditionFailed()
933 {
934 return getLog(redfish::registries::base::Index::preconditionFailed, {});
935 }
936
preconditionFailed(crow::Response & res)937 void preconditionFailed(crow::Response& res)
938 {
939 res.result(boost::beast::http::status::precondition_failed);
940 addMessageToErrorJson(res.jsonValue, preconditionFailed());
941 }
942
943 /**
944 * @internal
945 * @brief Formats PreconditionRequired message into JSON
946 *
947 * See header file for more information
948 * @endinternal
949 */
preconditionRequired()950 nlohmann::json preconditionRequired()
951 {
952 return getLog(redfish::registries::base::Index::preconditionRequired, {});
953 }
954
preconditionRequired(crow::Response & res)955 void preconditionRequired(crow::Response& res)
956 {
957 res.result(boost::beast::http::status::bad_request);
958 addMessageToErrorJson(res.jsonValue, preconditionRequired());
959 }
960
961 /**
962 * @internal
963 * @brief Formats OperationFailed message into JSON
964 *
965 * See header file for more information
966 * @endinternal
967 */
operationFailed()968 nlohmann::json operationFailed()
969 {
970 return getLog(redfish::registries::base::Index::operationFailed, {});
971 }
972
operationFailed(crow::Response & res)973 void operationFailed(crow::Response& res)
974 {
975 res.result(boost::beast::http::status::bad_gateway);
976 addMessageToErrorJson(res.jsonValue, operationFailed());
977 }
978
979 /**
980 * @internal
981 * @brief Formats OperationTimeout message into JSON
982 *
983 * See header file for more information
984 * @endinternal
985 */
operationTimeout()986 nlohmann::json operationTimeout()
987 {
988 return getLog(redfish::registries::base::Index::operationTimeout, {});
989 }
990
operationTimeout(crow::Response & res)991 void operationTimeout(crow::Response& res)
992 {
993 res.result(boost::beast::http::status::internal_server_error);
994 addMessageToErrorJson(res.jsonValue, operationTimeout());
995 }
996
997 /**
998 * @internal
999 * @brief Formats PropertyValueTypeError message into JSON for the specified
1000 * property
1001 *
1002 * See header file for more information
1003 * @endinternal
1004 */
propertyValueTypeError(const nlohmann::json & arg1,std::string_view arg2)1005 nlohmann::json propertyValueTypeError(const nlohmann::json& arg1,
1006 std::string_view arg2)
1007 {
1008 std::string arg1Str = arg1.dump(2, ' ', true,
1009 nlohmann::json::error_handler_t::replace);
1010 return getLog(redfish::registries::base::Index::propertyValueTypeError,
1011 std::to_array<std::string_view>({arg1Str, arg2}));
1012 }
1013
propertyValueTypeError(crow::Response & res,const nlohmann::json & arg1,std::string_view arg2)1014 void propertyValueTypeError(crow::Response& res, const nlohmann::json& arg1,
1015 std::string_view arg2)
1016 {
1017 res.result(boost::beast::http::status::bad_request);
1018 addMessageToJson(res.jsonValue, propertyValueTypeError(arg1, arg2), arg2);
1019 }
1020
1021 /**
1022 * @internal
1023 * @brief Formats ResourceNotFound message into JSONd
1024 *
1025 * See header file for more information
1026 * @endinternal
1027 */
resourceNotFound(std::string_view arg1,std::string_view arg2)1028 nlohmann::json resourceNotFound(std::string_view arg1, std::string_view arg2)
1029 {
1030 return getLog(redfish::registries::base::Index::resourceNotFound,
1031 std::to_array({arg1, arg2}));
1032 }
1033
resourceNotFound(crow::Response & res,std::string_view arg1,std::string_view arg2)1034 void resourceNotFound(crow::Response& res, std::string_view arg1,
1035 std::string_view arg2)
1036 {
1037 res.result(boost::beast::http::status::not_found);
1038 addMessageToErrorJson(res.jsonValue, resourceNotFound(arg1, arg2));
1039 }
1040
1041 /**
1042 * @internal
1043 * @brief Formats CouldNotEstablishConnection message into JSON
1044 *
1045 * See header file for more information
1046 * @endinternal
1047 */
1048 nlohmann::json
couldNotEstablishConnection(const boost::urls::url_view_base & arg1)1049 couldNotEstablishConnection(const boost::urls::url_view_base& arg1)
1050 {
1051 return getLog(redfish::registries::base::Index::couldNotEstablishConnection,
1052 std::to_array<std::string_view>({arg1.buffer()}));
1053 }
1054
couldNotEstablishConnection(crow::Response & res,const boost::urls::url_view_base & arg1)1055 void couldNotEstablishConnection(crow::Response& res,
1056 const boost::urls::url_view_base& arg1)
1057 {
1058 res.result(boost::beast::http::status::not_found);
1059 addMessageToErrorJson(res.jsonValue, couldNotEstablishConnection(arg1));
1060 }
1061
1062 /**
1063 * @internal
1064 * @brief Formats PropertyNotWritable message into JSON for the specified
1065 * property
1066 *
1067 * See header file for more information
1068 * @endinternal
1069 */
propertyNotWritable(std::string_view arg1)1070 nlohmann::json propertyNotWritable(std::string_view arg1)
1071 {
1072 return getLog(redfish::registries::base::Index::propertyNotWritable,
1073 std::to_array({arg1}));
1074 }
1075
propertyNotWritable(crow::Response & res,std::string_view arg1)1076 void propertyNotWritable(crow::Response& res, std::string_view arg1)
1077 {
1078 res.result(boost::beast::http::status::forbidden);
1079 addMessageToJson(res.jsonValue, propertyNotWritable(arg1), arg1);
1080 }
1081
1082 /**
1083 * @internal
1084 * @brief Formats QueryParameterValueTypeError message into JSON
1085 *
1086 * See header file for more information
1087 * @endinternal
1088 */
queryParameterValueTypeError(const nlohmann::json & arg1,std::string_view arg2)1089 nlohmann::json queryParameterValueTypeError(const nlohmann::json& arg1,
1090 std::string_view arg2)
1091 {
1092 std::string arg1Str = arg1.dump(2, ' ', true,
1093 nlohmann::json::error_handler_t::replace);
1094 return getLog(
1095 redfish::registries::base::Index::queryParameterValueTypeError,
1096 std::to_array<std::string_view>({arg1Str, arg2}));
1097 }
1098
queryParameterValueTypeError(crow::Response & res,const nlohmann::json & arg1,std::string_view arg2)1099 void queryParameterValueTypeError(crow::Response& res,
1100 const nlohmann::json& arg1,
1101 std::string_view arg2)
1102 {
1103 res.result(boost::beast::http::status::bad_request);
1104 addMessageToErrorJson(res.jsonValue,
1105 queryParameterValueTypeError(arg1, arg2));
1106 }
1107
1108 /**
1109 * @internal
1110 * @brief Formats ServiceShuttingDown message into JSON
1111 *
1112 * See header file for more information
1113 * @endinternal
1114 */
serviceShuttingDown()1115 nlohmann::json serviceShuttingDown()
1116 {
1117 return getLog(redfish::registries::base::Index::serviceShuttingDown, {});
1118 }
1119
serviceShuttingDown(crow::Response & res)1120 void serviceShuttingDown(crow::Response& res)
1121 {
1122 res.result(boost::beast::http::status::service_unavailable);
1123 addMessageToErrorJson(res.jsonValue, serviceShuttingDown());
1124 }
1125
1126 /**
1127 * @internal
1128 * @brief Formats ActionParameterDuplicate message into JSON
1129 *
1130 * See header file for more information
1131 * @endinternal
1132 */
actionParameterDuplicate(std::string_view arg1,std::string_view arg2)1133 nlohmann::json actionParameterDuplicate(std::string_view arg1,
1134 std::string_view arg2)
1135 {
1136 return getLog(redfish::registries::base::Index::actionParameterDuplicate,
1137 std::to_array({arg1, arg2}));
1138 }
1139
actionParameterDuplicate(crow::Response & res,std::string_view arg1,std::string_view arg2)1140 void actionParameterDuplicate(crow::Response& res, std::string_view arg1,
1141 std::string_view arg2)
1142 {
1143 res.result(boost::beast::http::status::bad_request);
1144 addMessageToErrorJson(res.jsonValue, actionParameterDuplicate(arg1, arg2));
1145 }
1146
1147 /**
1148 * @internal
1149 * @brief Formats ActionParameterNotSupported message into JSON
1150 *
1151 * See header file for more information
1152 * @endinternal
1153 */
actionParameterNotSupported(std::string_view arg1,std::string_view arg2)1154 nlohmann::json actionParameterNotSupported(std::string_view arg1,
1155 std::string_view arg2)
1156 {
1157 return getLog(redfish::registries::base::Index::actionParameterNotSupported,
1158 std::to_array({arg1, arg2}));
1159 }
1160
actionParameterNotSupported(crow::Response & res,std::string_view arg1,std::string_view arg2)1161 void actionParameterNotSupported(crow::Response& res, std::string_view arg1,
1162 std::string_view arg2)
1163 {
1164 res.result(boost::beast::http::status::bad_request);
1165 addMessageToErrorJson(res.jsonValue,
1166 actionParameterNotSupported(arg1, arg2));
1167 }
1168
1169 /**
1170 * @internal
1171 * @brief Formats SourceDoesNotSupportProtocol message into JSON
1172 *
1173 * See header file for more information
1174 * @endinternal
1175 */
1176 nlohmann::json
sourceDoesNotSupportProtocol(const boost::urls::url_view_base & arg1,std::string_view arg2)1177 sourceDoesNotSupportProtocol(const boost::urls::url_view_base& arg1,
1178 std::string_view arg2)
1179 {
1180 return getLog(
1181 redfish::registries::base::Index::sourceDoesNotSupportProtocol,
1182 std::to_array<std::string_view>({arg1.buffer(), arg2}));
1183 }
1184
sourceDoesNotSupportProtocol(crow::Response & res,const boost::urls::url_view_base & arg1,std::string_view arg2)1185 void sourceDoesNotSupportProtocol(crow::Response& res,
1186 const boost::urls::url_view_base& arg1,
1187 std::string_view arg2)
1188 {
1189 res.result(boost::beast::http::status::bad_request);
1190 addMessageToErrorJson(res.jsonValue,
1191 sourceDoesNotSupportProtocol(arg1, arg2));
1192 }
1193
1194 /**
1195 * @internal
1196 * @brief Formats StrictAccountTypes message into JSON
1197 *
1198 * See header file for more information
1199 * @endinternal
1200 */
strictAccountTypes(std::string_view arg1)1201 nlohmann::json strictAccountTypes(std::string_view arg1)
1202 {
1203 return getLog(redfish::registries::base::Index::strictAccountTypes,
1204 std::to_array({arg1}));
1205 }
1206
strictAccountTypes(crow::Response & res,std::string_view arg1)1207 void strictAccountTypes(crow::Response& res, std::string_view arg1)
1208 {
1209 res.result(boost::beast::http::status::bad_request);
1210 addMessageToErrorJson(res.jsonValue, strictAccountTypes(arg1));
1211 }
1212
1213 /**
1214 * @internal
1215 * @brief Formats AccountRemoved message into JSON
1216 *
1217 * See header file for more information
1218 * @endinternal
1219 */
accountRemoved()1220 nlohmann::json accountRemoved()
1221 {
1222 return getLog(redfish::registries::base::Index::accountRemoved, {});
1223 }
1224
accountRemoved(crow::Response & res)1225 void accountRemoved(crow::Response& res)
1226 {
1227 res.result(boost::beast::http::status::ok);
1228 addMessageToJsonRoot(res.jsonValue, accountRemoved());
1229 }
1230
1231 /**
1232 * @internal
1233 * @brief Formats AccessDenied message into JSON
1234 *
1235 * See header file for more information
1236 * @endinternal
1237 */
accessDenied(const boost::urls::url_view_base & arg1)1238 nlohmann::json accessDenied(const boost::urls::url_view_base& arg1)
1239 {
1240 return getLog(redfish::registries::base::Index::accessDenied,
1241 std::to_array<std::string_view>({arg1.buffer()}));
1242 }
1243
accessDenied(crow::Response & res,const boost::urls::url_view_base & arg1)1244 void accessDenied(crow::Response& res, const boost::urls::url_view_base& arg1)
1245 {
1246 res.result(boost::beast::http::status::forbidden);
1247 addMessageToErrorJson(res.jsonValue, accessDenied(arg1));
1248 }
1249
1250 /**
1251 * @internal
1252 * @brief Formats QueryNotSupported message into JSON
1253 *
1254 * See header file for more information
1255 * @endinternal
1256 */
queryNotSupported()1257 nlohmann::json queryNotSupported()
1258 {
1259 return getLog(redfish::registries::base::Index::queryNotSupported, {});
1260 }
1261
queryNotSupported(crow::Response & res)1262 void queryNotSupported(crow::Response& res)
1263 {
1264 res.result(boost::beast::http::status::bad_request);
1265 addMessageToErrorJson(res.jsonValue, queryNotSupported());
1266 }
1267
1268 /**
1269 * @internal
1270 * @brief Formats CreateLimitReachedForResource message into JSON
1271 *
1272 * See header file for more information
1273 * @endinternal
1274 */
createLimitReachedForResource()1275 nlohmann::json createLimitReachedForResource()
1276 {
1277 return getLog(
1278 redfish::registries::base::Index::createLimitReachedForResource, {});
1279 }
1280
createLimitReachedForResource(crow::Response & res)1281 void createLimitReachedForResource(crow::Response& res)
1282 {
1283 res.result(boost::beast::http::status::bad_request);
1284 addMessageToErrorJson(res.jsonValue, createLimitReachedForResource());
1285 }
1286
1287 /**
1288 * @internal
1289 * @brief Formats GeneralError message into JSON
1290 *
1291 * See header file for more information
1292 * @endinternal
1293 */
generalError()1294 nlohmann::json generalError()
1295 {
1296 return getLog(redfish::registries::base::Index::generalError, {});
1297 }
1298
generalError(crow::Response & res)1299 void generalError(crow::Response& res)
1300 {
1301 res.result(boost::beast::http::status::internal_server_error);
1302 addMessageToErrorJson(res.jsonValue, generalError());
1303 }
1304
1305 /**
1306 * @internal
1307 * @brief Formats Success message into JSON
1308 *
1309 * See header file for more information
1310 * @endinternal
1311 */
success()1312 nlohmann::json success()
1313 {
1314 return getLog(redfish::registries::base::Index::success, {});
1315 }
1316
success(crow::Response & res)1317 void success(crow::Response& res)
1318 {
1319 // don't set res.result here because success is the default and any
1320 // error should overwrite the default
1321 addMessageToJsonRoot(res.jsonValue, success());
1322 }
1323
1324 /**
1325 * @internal
1326 * @brief Formats Created message into JSON
1327 *
1328 * See header file for more information
1329 * @endinternal
1330 */
created()1331 nlohmann::json created()
1332 {
1333 return getLog(redfish::registries::base::Index::created, {});
1334 }
1335
created(crow::Response & res)1336 void created(crow::Response& res)
1337 {
1338 res.result(boost::beast::http::status::created);
1339 addMessageToJsonRoot(res.jsonValue, created());
1340 }
1341
1342 /**
1343 * @internal
1344 * @brief Formats NoOperation message into JSON
1345 *
1346 * See header file for more information
1347 * @endinternal
1348 */
noOperation()1349 nlohmann::json noOperation()
1350 {
1351 return getLog(redfish::registries::base::Index::noOperation, {});
1352 }
1353
noOperation(crow::Response & res)1354 void noOperation(crow::Response& res)
1355 {
1356 res.result(boost::beast::http::status::bad_request);
1357 addMessageToErrorJson(res.jsonValue, noOperation());
1358 }
1359
1360 /**
1361 * @internal
1362 * @brief Formats PropertyUnknown message into JSON for the specified
1363 * property
1364 *
1365 * See header file for more information
1366 * @endinternal
1367 */
propertyUnknown(std::string_view arg1)1368 nlohmann::json propertyUnknown(std::string_view arg1)
1369 {
1370 return getLog(redfish::registries::base::Index::propertyUnknown,
1371 std::to_array({arg1}));
1372 }
1373
propertyUnknown(crow::Response & res,std::string_view arg1)1374 void propertyUnknown(crow::Response& res, std::string_view arg1)
1375 {
1376 res.result(boost::beast::http::status::bad_request);
1377 addMessageToErrorJson(res.jsonValue, propertyUnknown(arg1));
1378 }
1379
1380 /**
1381 * @internal
1382 * @brief Formats NoValidSession message into JSON
1383 *
1384 * See header file for more information
1385 * @endinternal
1386 */
noValidSession()1387 nlohmann::json noValidSession()
1388 {
1389 return getLog(redfish::registries::base::Index::noValidSession, {});
1390 }
1391
noValidSession(crow::Response & res)1392 void noValidSession(crow::Response& res)
1393 {
1394 res.result(boost::beast::http::status::forbidden);
1395 addMessageToErrorJson(res.jsonValue, noValidSession());
1396 }
1397
1398 /**
1399 * @internal
1400 * @brief Formats InvalidObject message into JSON
1401 *
1402 * See header file for more information
1403 * @endinternal
1404 */
invalidObject(const boost::urls::url_view_base & arg1)1405 nlohmann::json invalidObject(const boost::urls::url_view_base& arg1)
1406 {
1407 return getLog(redfish::registries::base::Index::invalidObject,
1408 std::to_array<std::string_view>({arg1.buffer()}));
1409 }
1410
invalidObject(crow::Response & res,const boost::urls::url_view_base & arg1)1411 void invalidObject(crow::Response& res, const boost::urls::url_view_base& arg1)
1412 {
1413 res.result(boost::beast::http::status::bad_request);
1414 addMessageToErrorJson(res.jsonValue, invalidObject(arg1));
1415 }
1416
1417 /**
1418 * @internal
1419 * @brief Formats ResourceInStandby message into JSON
1420 *
1421 * See header file for more information
1422 * @endinternal
1423 */
resourceInStandby()1424 nlohmann::json resourceInStandby()
1425 {
1426 return getLog(redfish::registries::base::Index::resourceInStandby, {});
1427 }
1428
resourceInStandby(crow::Response & res)1429 void resourceInStandby(crow::Response& res)
1430 {
1431 res.result(boost::beast::http::status::service_unavailable);
1432 addMessageToErrorJson(res.jsonValue, resourceInStandby());
1433 }
1434
1435 /**
1436 * @internal
1437 * @brief Formats ActionParameterValueTypeError message into JSON
1438 *
1439 * See header file for more information
1440 * @endinternal
1441 */
actionParameterValueTypeError(const nlohmann::json & arg1,std::string_view arg2,std::string_view arg3)1442 nlohmann::json actionParameterValueTypeError(const nlohmann::json& arg1,
1443 std::string_view arg2,
1444 std::string_view arg3)
1445 {
1446 std::string arg1Str = arg1.dump(2, ' ', true,
1447 nlohmann::json::error_handler_t::replace);
1448 return getLog(
1449 redfish::registries::base::Index::actionParameterValueTypeError,
1450 std::to_array<std::string_view>({arg1Str, arg2, arg3}));
1451 }
1452
actionParameterValueTypeError(crow::Response & res,const nlohmann::json & arg1,std::string_view arg2,std::string_view arg3)1453 void actionParameterValueTypeError(crow::Response& res,
1454 const nlohmann::json& arg1,
1455 std::string_view arg2, std::string_view arg3)
1456 {
1457 res.result(boost::beast::http::status::bad_request);
1458 addMessageToErrorJson(res.jsonValue,
1459 actionParameterValueTypeError(arg1, arg2, arg3));
1460 }
1461
1462 /**
1463 * @internal
1464 * @brief Formats actionParameterValueError message into JSON
1465 *
1466 * See header file for more information
1467 * @endinternal
1468 */
actionParameterValueError(const nlohmann::json & arg1,std::string_view arg2)1469 nlohmann::json actionParameterValueError(const nlohmann::json& arg1,
1470 std::string_view arg2)
1471 {
1472 std::string arg1Str = arg1.dump(2, ' ', true,
1473 nlohmann::json::error_handler_t::replace);
1474 return getLog(redfish::registries::base::Index::actionParameterValueError,
1475 std::to_array<std::string_view>({arg1Str, arg2}));
1476 }
1477
actionParameterValueError(crow::Response & res,const nlohmann::json & arg1,std::string_view arg2)1478 void actionParameterValueError(crow::Response& res, const nlohmann::json& arg1,
1479 std::string_view arg2)
1480 {
1481 res.result(boost::beast::http::status::bad_request);
1482 addMessageToErrorJson(res.jsonValue, actionParameterValueError(arg1, arg2));
1483 }
1484
1485 /**
1486 * @internal
1487 * @brief Formats SessionLimitExceeded message into JSON
1488 *
1489 * See header file for more information
1490 * @endinternal
1491 */
sessionLimitExceeded()1492 nlohmann::json sessionLimitExceeded()
1493 {
1494 return getLog(redfish::registries::base::Index::sessionLimitExceeded, {});
1495 }
1496
sessionLimitExceeded(crow::Response & res)1497 void sessionLimitExceeded(crow::Response& res)
1498 {
1499 res.result(boost::beast::http::status::service_unavailable);
1500 addMessageToErrorJson(res.jsonValue, sessionLimitExceeded());
1501 }
1502
1503 /**
1504 * @internal
1505 * @brief Formats ActionNotSupported message into JSON
1506 *
1507 * See header file for more information
1508 * @endinternal
1509 */
actionNotSupported(std::string_view arg1)1510 nlohmann::json actionNotSupported(std::string_view arg1)
1511 {
1512 return getLog(redfish::registries::base::Index::actionNotSupported,
1513 std::to_array({arg1}));
1514 }
1515
actionNotSupported(crow::Response & res,std::string_view arg1)1516 void actionNotSupported(crow::Response& res, std::string_view arg1)
1517 {
1518 res.result(boost::beast::http::status::bad_request);
1519 addMessageToErrorJson(res.jsonValue, actionNotSupported(arg1));
1520 }
1521
1522 /**
1523 * @internal
1524 * @brief Formats InvalidIndex message into JSON
1525 *
1526 * See header file for more information
1527 * @endinternal
1528 */
invalidIndex(int64_t arg1)1529 nlohmann::json invalidIndex(int64_t arg1)
1530 {
1531 std::string arg1Str = std::to_string(arg1);
1532 return getLog(redfish::registries::base::Index::invalidIndex,
1533 std::to_array<std::string_view>({arg1Str}));
1534 }
1535
invalidIndex(crow::Response & res,int64_t arg1)1536 void invalidIndex(crow::Response& res, int64_t arg1)
1537 {
1538 res.result(boost::beast::http::status::bad_request);
1539 addMessageToErrorJson(res.jsonValue, invalidIndex(arg1));
1540 }
1541
1542 /**
1543 * @internal
1544 * @brief Formats EmptyJSON message into JSON
1545 *
1546 * See header file for more information
1547 * @endinternal
1548 */
emptyJSON()1549 nlohmann::json emptyJSON()
1550 {
1551 return getLog(redfish::registries::base::Index::emptyJSON, {});
1552 }
1553
emptyJSON(crow::Response & res)1554 void emptyJSON(crow::Response& res)
1555 {
1556 res.result(boost::beast::http::status::bad_request);
1557 addMessageToErrorJson(res.jsonValue, emptyJSON());
1558 }
1559
1560 /**
1561 * @internal
1562 * @brief Formats QueryNotSupportedOnResource message into JSON
1563 *
1564 * See header file for more information
1565 * @endinternal
1566 */
queryNotSupportedOnResource()1567 nlohmann::json queryNotSupportedOnResource()
1568 {
1569 return getLog(redfish::registries::base::Index::queryNotSupportedOnResource,
1570 {});
1571 }
1572
queryNotSupportedOnResource(crow::Response & res)1573 void queryNotSupportedOnResource(crow::Response& res)
1574 {
1575 res.result(boost::beast::http::status::bad_request);
1576 addMessageToErrorJson(res.jsonValue, queryNotSupportedOnResource());
1577 }
1578
1579 /**
1580 * @internal
1581 * @brief Formats QueryNotSupportedOnOperation message into JSON
1582 *
1583 * See header file for more information
1584 * @endinternal
1585 */
queryNotSupportedOnOperation()1586 nlohmann::json queryNotSupportedOnOperation()
1587 {
1588 return getLog(
1589 redfish::registries::base::Index::queryNotSupportedOnOperation, {});
1590 }
1591
queryNotSupportedOnOperation(crow::Response & res)1592 void queryNotSupportedOnOperation(crow::Response& res)
1593 {
1594 res.result(boost::beast::http::status::bad_request);
1595 addMessageToErrorJson(res.jsonValue, queryNotSupportedOnOperation());
1596 }
1597
1598 /**
1599 * @internal
1600 * @brief Formats QueryCombinationInvalid message into JSON
1601 *
1602 * See header file for more information
1603 * @endinternal
1604 */
queryCombinationInvalid()1605 nlohmann::json queryCombinationInvalid()
1606 {
1607 return getLog(redfish::registries::base::Index::queryCombinationInvalid,
1608 {});
1609 }
1610
queryCombinationInvalid(crow::Response & res)1611 void queryCombinationInvalid(crow::Response& res)
1612 {
1613 res.result(boost::beast::http::status::bad_request);
1614 addMessageToErrorJson(res.jsonValue, queryCombinationInvalid());
1615 }
1616
1617 /**
1618 * @internal
1619 * @brief Formats EventBufferExceeded message into JSON
1620 *
1621 * See header file for more information
1622 * @endinternal
1623 */
eventBufferExceeded()1624 nlohmann::json eventBufferExceeded()
1625 {
1626 return getLog(redfish::registries::base::Index::eventBufferExceeded, {});
1627 }
1628
eventBufferExceeded(crow::Response & res)1629 void eventBufferExceeded(crow::Response& res)
1630 {
1631 res.result(boost::beast::http::status::bad_request);
1632 addMessageToErrorJson(res.jsonValue, eventBufferExceeded());
1633 }
1634
1635 /**
1636 * @internal
1637 * @brief Formats InsufficientPrivilege message into JSON
1638 *
1639 * See header file for more information
1640 * @endinternal
1641 */
insufficientPrivilege()1642 nlohmann::json insufficientPrivilege()
1643 {
1644 return getLog(redfish::registries::base::Index::insufficientPrivilege, {});
1645 }
1646
insufficientPrivilege(crow::Response & res)1647 void insufficientPrivilege(crow::Response& res)
1648 {
1649 res.result(boost::beast::http::status::forbidden);
1650 addMessageToErrorJson(res.jsonValue, insufficientPrivilege());
1651 }
1652
1653 /**
1654 * @internal
1655 * @brief Formats PropertyValueModified message into JSON
1656 *
1657 * See header file for more information
1658 * @endinternal
1659 */
propertyValueModified(std::string_view arg1,const nlohmann::json & arg2)1660 nlohmann::json propertyValueModified(std::string_view arg1,
1661 const nlohmann::json& arg2)
1662 {
1663 std::string arg2Str = arg2.dump(2, ' ', true,
1664 nlohmann::json::error_handler_t::replace);
1665 return getLog(redfish::registries::base::Index::propertyValueModified,
1666 std::to_array<std::string_view>({arg1, arg2Str}));
1667 }
1668
propertyValueModified(crow::Response & res,std::string_view arg1,const nlohmann::json & arg2)1669 void propertyValueModified(crow::Response& res, std::string_view arg1,
1670 const nlohmann::json& arg2)
1671 {
1672 res.result(boost::beast::http::status::ok);
1673 addMessageToJson(res.jsonValue, propertyValueModified(arg1, arg2), arg1);
1674 }
1675
1676 /**
1677 * @internal
1678 * @brief Formats AccountNotModified message into JSON
1679 *
1680 * See header file for more information
1681 * @endinternal
1682 */
accountNotModified()1683 nlohmann::json accountNotModified()
1684 {
1685 return getLog(redfish::registries::base::Index::accountNotModified, {});
1686 }
1687
accountNotModified(crow::Response & res)1688 void accountNotModified(crow::Response& res)
1689 {
1690 res.result(boost::beast::http::status::bad_request);
1691 addMessageToErrorJson(res.jsonValue, accountNotModified());
1692 }
1693
1694 /**
1695 * @internal
1696 * @brief Formats QueryParameterValueFormatError message into JSON
1697 *
1698 * See header file for more information
1699 * @endinternal
1700 */
queryParameterValueFormatError(const nlohmann::json & arg1,std::string_view arg2)1701 nlohmann::json queryParameterValueFormatError(const nlohmann::json& arg1,
1702 std::string_view arg2)
1703 {
1704 std::string arg1Str = arg1.dump(2, ' ', true,
1705 nlohmann::json::error_handler_t::replace);
1706 return getLog(
1707 redfish::registries::base::Index::queryParameterValueFormatError,
1708 std::to_array<std::string_view>({arg1Str, arg2}));
1709 }
1710
queryParameterValueFormatError(crow::Response & res,const nlohmann::json & arg1,std::string_view arg2)1711 void queryParameterValueFormatError(crow::Response& res,
1712 const nlohmann::json& arg1,
1713 std::string_view arg2)
1714 {
1715 res.result(boost::beast::http::status::bad_request);
1716 addMessageToErrorJson(res.jsonValue,
1717 queryParameterValueFormatError(arg1, arg2));
1718 }
1719
1720 /**
1721 * @internal
1722 * @brief Formats PropertyMissing message into JSON for the specified
1723 * property
1724 *
1725 * See header file for more information
1726 * @endinternal
1727 */
propertyMissing(std::string_view arg1)1728 nlohmann::json propertyMissing(std::string_view arg1)
1729 {
1730 return getLog(redfish::registries::base::Index::propertyMissing,
1731 std::to_array({arg1}));
1732 }
1733
propertyMissing(crow::Response & res,std::string_view arg1)1734 void propertyMissing(crow::Response& res, std::string_view arg1)
1735 {
1736 res.result(boost::beast::http::status::bad_request);
1737 addMessageToJson(res.jsonValue, propertyMissing(arg1), arg1);
1738 }
1739
1740 /**
1741 * @internal
1742 * @brief Formats ResourceExhaustion message into JSON
1743 *
1744 * See header file for more information
1745 * @endinternal
1746 */
resourceExhaustion(std::string_view arg1)1747 nlohmann::json resourceExhaustion(std::string_view arg1)
1748 {
1749 return getLog(redfish::registries::base::Index::resourceExhaustion,
1750 std::to_array({arg1}));
1751 }
1752
resourceExhaustion(crow::Response & res,std::string_view arg1)1753 void resourceExhaustion(crow::Response& res, std::string_view arg1)
1754 {
1755 res.result(boost::beast::http::status::service_unavailable);
1756 addMessageToErrorJson(res.jsonValue, resourceExhaustion(arg1));
1757 }
1758
1759 /**
1760 * @internal
1761 * @brief Formats AccountModified message into JSON
1762 *
1763 * See header file for more information
1764 * @endinternal
1765 */
accountModified()1766 nlohmann::json accountModified()
1767 {
1768 return getLog(redfish::registries::base::Index::accountModified, {});
1769 }
1770
accountModified(crow::Response & res)1771 void accountModified(crow::Response& res)
1772 {
1773 res.result(boost::beast::http::status::ok);
1774 addMessageToErrorJson(res.jsonValue, accountModified());
1775 }
1776
1777 /**
1778 * @internal
1779 * @brief Formats QueryParameterOutOfRange message into JSON
1780 *
1781 * See header file for more information
1782 * @endinternal
1783 */
queryParameterOutOfRange(std::string_view arg1,std::string_view arg2,std::string_view arg3)1784 nlohmann::json queryParameterOutOfRange(std::string_view arg1,
1785 std::string_view arg2,
1786 std::string_view arg3)
1787 {
1788 return getLog(redfish::registries::base::Index::queryParameterOutOfRange,
1789 std::to_array({arg1, arg2, arg3}));
1790 }
1791
queryParameterOutOfRange(crow::Response & res,std::string_view arg1,std::string_view arg2,std::string_view arg3)1792 void queryParameterOutOfRange(crow::Response& res, std::string_view arg1,
1793 std::string_view arg2, std::string_view arg3)
1794 {
1795 res.result(boost::beast::http::status::bad_request);
1796 addMessageToErrorJson(res.jsonValue,
1797 queryParameterOutOfRange(arg1, arg2, arg3));
1798 }
1799
passwordChangeRequired(const boost::urls::url_view_base & arg1)1800 nlohmann::json passwordChangeRequired(const boost::urls::url_view_base& arg1)
1801 {
1802 return getLog(redfish::registries::base::Index::passwordChangeRequired,
1803 std::to_array<std::string_view>({arg1.buffer()}));
1804 }
1805
1806 /**
1807 * @internal
1808 * @brief Formats PasswordChangeRequired message into JSON
1809 *
1810 * See header file for more information
1811 * @endinternal
1812 */
passwordChangeRequired(crow::Response & res,const boost::urls::url_view_base & arg1)1813 void passwordChangeRequired(crow::Response& res,
1814 const boost::urls::url_view_base& arg1)
1815 {
1816 messages::addMessageToJsonRoot(res.jsonValue, passwordChangeRequired(arg1));
1817 }
1818
1819 /**
1820 * @internal
1821 * @brief Formats InsufficientStorage message into JSON
1822 *
1823 * See header file for more information
1824 * @endinternal
1825 */
insufficientStorage()1826 nlohmann::json insufficientStorage()
1827 {
1828 return getLog(redfish::registries::base::Index::insufficientStorage, {});
1829 }
1830
insufficientStorage(crow::Response & res)1831 void insufficientStorage(crow::Response& res)
1832 {
1833 res.result(boost::beast::http::status::insufficient_storage);
1834 addMessageToErrorJson(res.jsonValue, insufficientStorage());
1835 }
1836
1837 /**
1838 * @internal
1839 * @brief Formats OperationNotAllowed message into JSON
1840 *
1841 * See header file for more information
1842 * @endinternal
1843 */
operationNotAllowed()1844 nlohmann::json operationNotAllowed()
1845 {
1846 return getLog(redfish::registries::base::Index::operationNotAllowed, {});
1847 }
1848
operationNotAllowed(crow::Response & res)1849 void operationNotAllowed(crow::Response& res)
1850 {
1851 res.result(boost::beast::http::status::method_not_allowed);
1852 addMessageToErrorJson(res.jsonValue, operationNotAllowed());
1853 }
1854
1855 /**
1856 * @internal
1857 * @brief Formats ArraySizeTooLong message into JSON
1858 *
1859 * See header file for more information
1860 * @endinternal
1861 */
arraySizeTooLong(std::string_view property,uint64_t length)1862 nlohmann::json arraySizeTooLong(std::string_view property, uint64_t length)
1863 {
1864 std::string valStr = std::to_string(length);
1865 return getLog(redfish::registries::base::Index::arraySizeTooLong,
1866 std::to_array<std::string_view>({property, valStr}));
1867 }
1868
arraySizeTooLong(crow::Response & res,std::string_view property,uint64_t length)1869 void arraySizeTooLong(crow::Response& res, std::string_view property,
1870 uint64_t length)
1871 {
1872 res.result(boost::beast::http::status::bad_request);
1873 addMessageToErrorJson(res.jsonValue, arraySizeTooLong(property, length));
1874 }
1875
invalidUpload(crow::Response & res,std::string_view arg1,std::string_view arg2)1876 void invalidUpload(crow::Response& res, std::string_view arg1,
1877 std::string_view arg2)
1878 {
1879 res.result(boost::beast::http::status::bad_request);
1880 addMessageToErrorJson(res.jsonValue, invalidUpload(arg1, arg2));
1881 }
1882
1883 /**
1884 * @internal
1885 * @brief Formats Invalid File message into JSON
1886 *
1887 * See header file for more information
1888 * @endinternal
1889 */
invalidUpload(std::string_view arg1,std::string_view arg2)1890 nlohmann::json invalidUpload(std::string_view arg1, std::string_view arg2)
1891 {
1892 std::string msg = "Invalid file uploaded to ";
1893 msg += arg1;
1894 msg += ": ";
1895 msg += arg2;
1896 msg += ".";
1897
1898 nlohmann::json::object_t ret;
1899 ret["@odata.type"] = "/redfish/v1/$metadata#Message.v1_1_1.Message";
1900 ret["MessageId"] = "OpenBMC.0.2.InvalidUpload";
1901 ret["Message"] = std::move(msg);
1902 nlohmann::json::array_t args;
1903 args.emplace_back(arg1);
1904 args.emplace_back(arg2);
1905 ret["MessageArgs"] = std::move(args);
1906 ret["MessageSeverity"] = "Warning";
1907 ret["Resolution"] = "None.";
1908 return ret;
1909 }
1910
1911 } // namespace messages
1912
1913 } // namespace redfish
1914