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