xref: /openbmc/phosphor-certificate-manager/certs_manager.cpp (revision bf7c588ccfe74a37f6a3ec2ca756f62e28c82963)
1cfbc8dc8SJayanth Othayoth #include "certs_manager.hpp"
2cfbc8dc8SJayanth Othayoth 
36ceec40bSMarri Devender Rao #include <phosphor-logging/elog-errors.hpp>
46ceec40bSMarri Devender Rao #include <xyz/openbmc_project/Certs/Install/error.hpp>
5cfbc8dc8SJayanth Othayoth #include <xyz/openbmc_project/Common/error.hpp>
6cfbc8dc8SJayanth Othayoth namespace phosphor
7cfbc8dc8SJayanth Othayoth {
8cfbc8dc8SJayanth Othayoth namespace certs
9cfbc8dc8SJayanth Othayoth {
10cfbc8dc8SJayanth Othayoth 
11*bf7c588cSMarri Devender Rao using namespace sdbusplus::xyz::openbmc_project::Common::Error;
12*bf7c588cSMarri Devender Rao using InvalidCertificate =
13*bf7c588cSMarri Devender Rao     sdbusplus::xyz::openbmc_project::Certs::Install::Error::InvalidCertificate;
146ceec40bSMarri Devender Rao using Reason = xyz::openbmc_project::Certs::Install::InvalidCertificate::REASON;
15cfbc8dc8SJayanth Othayoth 
166ceec40bSMarri Devender Rao /** @brief Constructor to put object onto bus at a dbus path.
176ceec40bSMarri Devender Rao  *  @param[in] bus - Bus to attach to.
186ceec40bSMarri Devender Rao  *  @param[in] path - Path to attach at.
196ceec40bSMarri Devender Rao  *  @param[in] type - Type of the certificate.
206ceec40bSMarri Devender Rao  *  @param[in] unit - Unit consumed by this certificate.
216ceec40bSMarri Devender Rao  *  @param[in] installPath - Certificate installation path.
226ceec40bSMarri Devender Rao  */
236ceec40bSMarri Devender Rao Manager::Manager(sdbusplus::bus::bus& bus, const char* path,
246ceec40bSMarri Devender Rao                  const CertificateType& type, UnitsToRestart&& unit,
256ceec40bSMarri Devender Rao                  CertInstallPath&& installPath) :
266ceec40bSMarri Devender Rao     Ifaces(bus, path),
276ceec40bSMarri Devender Rao     bus(bus), objectPath(path), certType(type), unitToRestart(std::move(unit)),
286ceec40bSMarri Devender Rao     certInstallPath(std::move(installPath))
29cfbc8dc8SJayanth Othayoth {
30*bf7c588cSMarri Devender Rao     if (fs::exists(certInstallPath))
31*bf7c588cSMarri Devender Rao     {
32*bf7c588cSMarri Devender Rao         try
33*bf7c588cSMarri Devender Rao         {
34*bf7c588cSMarri Devender Rao             // TODO: Issue#3 At present supporting only one certificate to be
35*bf7c588cSMarri Devender Rao             // uploaded this need to be revisited to support multiple
36*bf7c588cSMarri Devender Rao             // certificates
37*bf7c588cSMarri Devender Rao             auto certObjectPath = objectPath + '/' + '1';
38*bf7c588cSMarri Devender Rao             certificatePtr = std::make_unique<Certificate>(
39*bf7c588cSMarri Devender Rao                 bus, certObjectPath, certType, unitToRestart, certInstallPath,
40*bf7c588cSMarri Devender Rao                 certInstallPath);
41*bf7c588cSMarri Devender Rao         }
42*bf7c588cSMarri Devender Rao         catch (const InternalFailure& e)
43*bf7c588cSMarri Devender Rao         {
44*bf7c588cSMarri Devender Rao             certificatePtr.reset(nullptr);
45*bf7c588cSMarri Devender Rao             report<InternalFailure>();
46*bf7c588cSMarri Devender Rao         }
47*bf7c588cSMarri Devender Rao         catch (const InvalidCertificate& e)
48*bf7c588cSMarri Devender Rao         {
49*bf7c588cSMarri Devender Rao             certificatePtr.reset(nullptr);
50*bf7c588cSMarri Devender Rao             report<InvalidCertificate>(
51*bf7c588cSMarri Devender Rao                 Reason("Existing certificate file is corrupted"));
52*bf7c588cSMarri Devender Rao         }
53*bf7c588cSMarri Devender Rao     }
54dd74bd20SJayanth Othayoth }
55589159f2SJayanth Othayoth 
566ceec40bSMarri Devender Rao void Manager::install(const std::string filePath)
57cfbc8dc8SJayanth Othayoth {
58589159f2SJayanth Othayoth }
59ae70b3daSDeepak Kodihalli 
60ae70b3daSDeepak Kodihalli void Manager::delete_()
61ae70b3daSDeepak Kodihalli {
626ceec40bSMarri Devender Rao     // TODO: #Issue 4 when a certificate is deleted system auto generates
636ceec40bSMarri Devender Rao     // certificate file. At present we are not supporting creation of
646ceec40bSMarri Devender Rao     // certificate object for the auto-generated certificate file as
656ceec40bSMarri Devender Rao     // deletion if only applicable for REST server and Bmcweb does not allow
666ceec40bSMarri Devender Rao     // deletion of certificates
676ceec40bSMarri Devender Rao     if (certificatePtr != nullptr)
68ae70b3daSDeepak Kodihalli     {
696ceec40bSMarri Devender Rao         certificatePtr.reset(nullptr);
70ae70b3daSDeepak Kodihalli     }
71ae70b3daSDeepak Kodihalli }
72cfbc8dc8SJayanth Othayoth } // namespace certs
73cfbc8dc8SJayanth Othayoth } // namespace phosphor
74