1 #pragma once 2 3 #include "ca_cert_entry.hpp" 4 #include "xyz/openbmc_project/Certs/Authority/server.hpp" 5 #include "xyz/openbmc_project/Collection/DeleteAll/server.hpp" 6 7 #include <sdbusplus/bus.hpp> 8 #include <sdbusplus/server/object.hpp> 9 #include <sdeventplus/source/event.hpp> 10 11 namespace ca 12 { 13 namespace cert 14 { 15 16 class CACertMgr; 17 18 using CreateIface = sdbusplus::server::object::object< 19 sdbusplus::xyz::openbmc_project::Certs::server::Authority, 20 sdbusplus::xyz::openbmc_project::Collection::server::DeleteAll>; 21 using Mgr = ca::cert::CACertMgr; 22 23 /** @class Manager 24 * @brief Implementation for the 25 * xyz.openbmc_project.Certs.ca.authority.Manager DBus API. 26 */ 27 class CACertMgr : public CreateIface 28 { 29 public: 30 CACertMgr() = delete; 31 CACertMgr(const CACertMgr&) = delete; 32 CACertMgr& operator=(const CACertMgr&) = delete; 33 CACertMgr(CACertMgr&&) = delete; 34 CACertMgr& operator=(CACertMgr&&) = delete; 35 virtual ~CACertMgr() = default; 36 37 /** @brief Constructor to put object onto bus at a dbus path. 38 * @param[in] bus - Bus to attach to. 39 * @param[in] path - Path to attach at. 40 */ 41 CACertMgr(sdbusplus::bus::bus& bus, sdeventplus::Event& event, 42 const char* path) : 43 CreateIface(bus, path), 44 bus(bus), event(event), objectPath(path), lastEntryId(0){}; 45 46 /** @brief This method provides signing authority functionality. 47 It signs the certificate and creates the CSR request entry Dbus 48 Object. 49 * @param[in] csr - csr string 50 * @return Object path 51 */ 52 sdbusplus::message::object_path signCSR(std::string csr) override; 53 54 /** @brief Erase specified entry d-bus object 55 * @param[in] entryId - unique identifier of the entry 56 */ 57 void erase(uint32_t entryId); 58 59 /** @brief Erase all entries 60 */ 61 void deleteAll() override; 62 63 protected: 64 std::map<uint32_t, std::unique_ptr<Entry>> entries; 65 66 private: 67 /** @brief sdbusplus DBus bus connection. */ 68 sdbusplus::bus::bus& bus; 69 // sdevent Event handle 70 sdeventplus::Event& event; 71 /** @brief object path */ 72 std::string objectPath; 73 /** @brief Id of the last certificate entry */ 74 uint32_t lastEntryId; 75 }; 76 77 } // namespace cert 78 } // namespace ca 79