1 #pragma once 2 3 #include "firmware_handler.hpp" 4 #include "image_handler.hpp" 5 6 #include <memory> 7 #include <nlohmann/json.hpp> 8 #include <string> 9 #include <vector> 10 11 namespace ipmi_flash 12 { 13 14 class HandlerConfig 15 { 16 public: 17 HandlerConfig() = default; 18 ~HandlerConfig() = default; 19 HandlerConfig(const HandlerConfig&) = delete; 20 HandlerConfig& operator=(const HandlerConfig&) = delete; 21 HandlerConfig(HandlerConfig&&) = default; 22 HandlerConfig& operator=(HandlerConfig&&) = default; 23 24 /* A string in the form: /flash/{unique}, s.t. unique is something like, 25 * flash, ubitar, statictar, or bios 26 */ 27 std::string blobId; 28 29 /* This owns a handler interface, this is typically going to be a file 30 * writer object. 31 */ 32 std::unique_ptr<ImageHandlerInterface> handler; 33 34 /* Only the hashBlobId doesn't have an action pack, otherwise it's required. 35 */ 36 std::unique_ptr<ActionPack> actions; 37 }; 38 39 /** 40 * Given a list of handlers as json data, construct the appropriate 41 * HandlerConfig objects. This method is meant to be called per json 42 * configuration file found. 43 * 44 * The list will only contain validly build HandlerConfig objects. Any invalid 45 * configuration is skipped. The hope is that the BMC firmware update 46 * configuration will never be invalid, but if another aspect is invalid, it can 47 * be fixed with a BMC firmware update once the bug is identified. 48 * 49 * This code does not validate that the blob specified is unique, that should 50 * be handled at a higher layer. 51 * 52 * @param[in] data - json data from a json file. 53 * @return list of HandlerConfig objects. 54 */ 55 std::vector<HandlerConfig> buildHandlerFromJson(const nlohmann::json& data); 56 57 /** 58 * Given a folder of json configs, build the configurations. 59 * 60 * @param[in] directory - the directory to search (recurisvely). 61 * @return list of HandlerConfig objects. 62 */ 63 std::vector<HandlerConfig> BuildHandlerConfigs(const std::string& directory); 64 65 } // namespace ipmi_flash 66