blob: a1db91838371cf7ec98b75e13feb0aa2cadd27be [file] [log] [blame]
#pragma once
#include "ca_cert_entry.hpp"
#include "xyz/openbmc_project/Certs/Authority/server.hpp"
#include "xyz/openbmc_project/Collection/DeleteAll/server.hpp"
#include <sdbusplus/bus.hpp>
#include <sdbusplus/server/object.hpp>
#include <sdeventplus/source/event.hpp>
namespace ca
{
namespace cert
{
class CACertMgr;
using CreateIface = sdbusplus::server::object::object<
sdbusplus::xyz::openbmc_project::Certs::server::Authority,
sdbusplus::xyz::openbmc_project::Collection::server::DeleteAll>;
using Mgr = ca::cert::CACertMgr;
/** @class Manager
* @brief Implementation for the
* xyz.openbmc_project.Certs.ca.authority.Manager DBus API.
*/
class CACertMgr : public CreateIface
{
public:
CACertMgr() = delete;
CACertMgr(const CACertMgr&) = delete;
CACertMgr& operator=(const CACertMgr&) = delete;
CACertMgr(CACertMgr&&) = delete;
CACertMgr& operator=(CACertMgr&&) = delete;
virtual ~CACertMgr() = default;
/** @brief Constructor to put object onto bus at a dbus path.
* @param[in] bus - Bus to attach to.
* @param[in] path - Path to attach at.
*/
CACertMgr(sdbusplus::bus::bus& bus, sdeventplus::Event& event,
const char* path) :
CreateIface(bus, path),
bus(bus), event(event), objectPath(path), lastEntryId(0){};
/** @brief This method provides signing authority functionality.
It signs the certificate and creates the CSR request entry Dbus
Object.
* @param[in] csr - csr string
* @return Object path
*/
sdbusplus::message::object_path signCSR(std::string csr) override;
/** @brief Erase specified entry d-bus object
* @param[in] entryId - unique identifier of the entry
*/
void erase(uint32_t entryId);
/** @brief Erase all entries
*/
void deleteAll() override;
protected:
std::map<uint32_t, std::unique_ptr<Entry>> entries;
private:
/** @brief sdbusplus DBus bus connection. */
sdbusplus::bus::bus& bus;
// sdevent Event handle
sdeventplus::Event& event;
/** @brief object path */
std::string objectPath;
/** @brief Id of the last certificate entry */
uint32_t lastEntryId;
};
} // namespace cert
} // namespace ca