1 #pragma once
2 #include <sdbusplus/server.hpp>
3 #include "version.hpp"
4 
5 namespace phosphor
6 {
7 namespace software
8 {
9 namespace manager
10 {
11 
12 /** @class Manager
13  *  @brief Contains a map of Version dbus objects.
14  *  @details The software image manager class that contains the Version dbus
15  *           objects and their version ids.
16  */
17 class Manager
18 {
19   public:
20     /** @brief Constructs Manager Class
21      *
22      * @param[in] bus - The Dbus bus object
23      */
24     Manager(sdbusplus::bus::bus& bus) : bus(bus){};
25 
26     /**
27      * @brief Verify and untar the tarball. Verify the manifest file.
28      *        Create and populate the version and filepath interfaces.
29      *
30      * @param[in]  tarballFilePath - Tarball path.
31      * @param[out] result          - 0 if successful.
32      */
33     int processImage(const std::string& tarballFilePath);
34 
35     /**
36      * @brief Erase specified entry d-bus object
37      *        and deletes the image file.
38      *
39      * @param[in] entryId - unique identifier of the entry
40      */
41     void erase(std::string entryId);
42 
43   private:
44     /** @brief Persistent map of Version dbus objects and their
45      * version id */
46     std::map<std::string, std::unique_ptr<Version>> versions;
47 
48     /** @brief Persistent sdbusplus DBus bus connection. */
49     sdbusplus::bus::bus& bus;
50 
51     /**
52      * @brief Untar the tarball.
53      *
54      * @param[in]  tarballFilePath - Tarball path.
55      * @param[in]  extractDirPath  - Dir path to extract tarball ball to.
56      * @param[out] result          - 0 if successful.
57      */
58     static int unTar(const std::string& tarballFilePath,
59                      const std::string& extractDirPath);
60 };
61 
62 } // namespace manager
63 } // namespace software
64 } // namespace phosphor
65