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*1396511dSMarri Devender Rao using InternalFailure = 12*1396511dSMarri Devender Rao sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure; 13cfbc8dc8SJayanth Othayoth 146ceec40bSMarri Devender Rao /** @brief Constructor to put object onto bus at a dbus path. 156ceec40bSMarri Devender Rao * @param[in] bus - Bus to attach to. 166ceec40bSMarri Devender Rao * @param[in] path - Path to attach at. 176ceec40bSMarri Devender Rao * @param[in] type - Type of the certificate. 186ceec40bSMarri Devender Rao * @param[in] unit - Unit consumed by this certificate. 196ceec40bSMarri Devender Rao * @param[in] installPath - Certificate installation path. 206ceec40bSMarri Devender Rao */ 216ceec40bSMarri Devender Rao Manager::Manager(sdbusplus::bus::bus& bus, const char* path, 226ceec40bSMarri Devender Rao const CertificateType& type, UnitsToRestart&& unit, 236ceec40bSMarri Devender Rao CertInstallPath&& installPath) : 246ceec40bSMarri Devender Rao Ifaces(bus, path), 256ceec40bSMarri Devender Rao bus(bus), objectPath(path), certType(type), unitToRestart(std::move(unit)), 266ceec40bSMarri Devender Rao certInstallPath(std::move(installPath)) 27cfbc8dc8SJayanth Othayoth { 28*1396511dSMarri Devender Rao using InvalidCertificate = sdbusplus::xyz::openbmc_project::Certs::Install:: 29*1396511dSMarri Devender Rao Error::InvalidCertificate; 30*1396511dSMarri Devender Rao using Reason = 31*1396511dSMarri Devender Rao xyz::openbmc_project::Certs::Install::InvalidCertificate::REASON; 32bf7c588cSMarri Devender Rao if (fs::exists(certInstallPath)) 33bf7c588cSMarri Devender Rao { 34bf7c588cSMarri Devender Rao try 35bf7c588cSMarri Devender Rao { 36bf7c588cSMarri Devender Rao // TODO: Issue#3 At present supporting only one certificate to be 37bf7c588cSMarri Devender Rao // uploaded this need to be revisited to support multiple 38bf7c588cSMarri Devender Rao // certificates 39bf7c588cSMarri Devender Rao auto certObjectPath = objectPath + '/' + '1'; 40bf7c588cSMarri Devender Rao certificatePtr = std::make_unique<Certificate>( 41bf7c588cSMarri Devender Rao bus, certObjectPath, certType, unitToRestart, certInstallPath, 42bf7c588cSMarri Devender Rao certInstallPath); 43bf7c588cSMarri Devender Rao } 44bf7c588cSMarri Devender Rao catch (const InternalFailure& e) 45bf7c588cSMarri Devender Rao { 46bf7c588cSMarri Devender Rao report<InternalFailure>(); 47bf7c588cSMarri Devender Rao } 48bf7c588cSMarri Devender Rao catch (const InvalidCertificate& e) 49bf7c588cSMarri Devender Rao { 50bf7c588cSMarri Devender Rao report<InvalidCertificate>( 51bf7c588cSMarri Devender Rao Reason("Existing certificate file is corrupted")); 52bf7c588cSMarri Devender Rao } 53bf7c588cSMarri Devender Rao } 54dd74bd20SJayanth Othayoth } 55589159f2SJayanth Othayoth 566ceec40bSMarri Devender Rao void Manager::install(const std::string filePath) 57cfbc8dc8SJayanth Othayoth { 58*1396511dSMarri Devender Rao using NotAllowed = 59*1396511dSMarri Devender Rao sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed; 60*1396511dSMarri Devender Rao using Reason = xyz::openbmc_project::Common::NotAllowed::REASON; 61*1396511dSMarri Devender Rao // TODO: Issue#3 At present supporting only one certificate to be 62*1396511dSMarri Devender Rao // uploaded this need to be revisited to support multiple 63*1396511dSMarri Devender Rao // certificates 64*1396511dSMarri Devender Rao if (certificatePtr != nullptr) 65*1396511dSMarri Devender Rao { 66*1396511dSMarri Devender Rao elog<NotAllowed>(Reason("Certificate already exist")); 67*1396511dSMarri Devender Rao } 68*1396511dSMarri Devender Rao auto certObjectPath = objectPath + '/' + '1'; 69*1396511dSMarri Devender Rao certificatePtr = 70*1396511dSMarri Devender Rao std::make_unique<Certificate>(bus, certObjectPath, certType, 71*1396511dSMarri Devender Rao unitToRestart, certInstallPath, filePath); 72589159f2SJayanth Othayoth } 73ae70b3daSDeepak Kodihalli 74ae70b3daSDeepak Kodihalli void Manager::delete_() 75ae70b3daSDeepak Kodihalli { 766ceec40bSMarri Devender Rao // TODO: #Issue 4 when a certificate is deleted system auto generates 776ceec40bSMarri Devender Rao // certificate file. At present we are not supporting creation of 786ceec40bSMarri Devender Rao // certificate object for the auto-generated certificate file as 796ceec40bSMarri Devender Rao // deletion if only applicable for REST server and Bmcweb does not allow 806ceec40bSMarri Devender Rao // deletion of certificates 816ceec40bSMarri Devender Rao if (certificatePtr != nullptr) 82ae70b3daSDeepak Kodihalli { 836ceec40bSMarri Devender Rao certificatePtr.reset(nullptr); 84ae70b3daSDeepak Kodihalli } 85ae70b3daSDeepak Kodihalli } 86cfbc8dc8SJayanth Othayoth } // namespace certs 87cfbc8dc8SJayanth Othayoth } // namespace phosphor 88