Handling of adding certificates the Redfish way (TrustStore)

Added handling for POSTing certificates the Redfish way (as proper JSON).
Currently it was only possible to add certificate as a RAW certificate in
request body. Now user is able to add it as
{
	"CertificateType": "PEM",
	"CertificateString": "..."
}
as well as previously in RAW form.

Tested:
- Uploading certificates in RAW form
- Uploading certificates in JSON form
- In case of malformend reqeust a propser error message is returnd.

Signed-off-by: Zbigniew Kurzynski <zbigniew.kurzynski@intel.com>
Change-Id: Iab563964102b0a1a351cb0bb1ea181643da33480
diff --git a/redfish-core/lib/certificate_service.hpp b/redfish-core/lib/certificate_service.hpp
index 5fdff1f..b40b1e9 100644
--- a/redfish-core/lib/certificate_service.hpp
+++ b/redfish-core/lib/certificate_service.hpp
@@ -930,6 +930,8 @@
 
         if (certFileBody.empty())
         {
+            BMCWEB_LOG_ERROR << "Cannot get certificate from request body.";
+            messages::unrecognizedRequestBody(asyncResp->res);
             return;
         }
 
@@ -1129,6 +1131,8 @@
 
         if (certFileBody.empty())
         {
+            BMCWEB_LOG_ERROR << "Cannot get certificate from request body.";
+            messages::unrecognizedRequestBody(asyncResp->res);
             return;
         }
 
@@ -1271,9 +1275,18 @@
     void doPost(crow::Response &res, const crow::Request &req,
                 const std::vector<std::string> &params) override
     {
-        std::shared_ptr<CertificateFile> certFile =
-            std::make_shared<CertificateFile>(req.body);
         auto asyncResp = std::make_shared<AsyncResp>(res);
+        std::string certFileBody = getCertificateFromReqBody(asyncResp, req);
+
+        if (certFileBody.empty())
+        {
+            BMCWEB_LOG_ERROR << "Cannot get certificate from request body.";
+            messages::unrecognizedRequestBody(asyncResp->res);
+            return;
+        }
+
+        std::shared_ptr<CertificateFile> certFile =
+            std::make_shared<CertificateFile>(certFileBody);
         crow::connections::systemBus->async_method_call(
             [asyncResp, certFile](const boost::system::error_code ec,
                                   const std::string &objectPath) {