Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
aktualizr_secondary_factory.cc
1 #include "aktualizr_secondary_factory.h"
2 
3 #include "crypto/keymanager.h"
4 #include "update_agent_file.h"
5 
6 #ifdef BUILD_OSTREE
7 #include "package_manager/ostreemanager.h"
8 #include "update_agent_ostree.h"
9 #endif
10 
11 const std::string AktualizrSecondaryFactory::BinaryUpdateDefaultFile{"firmware.txt"};
12 
13 // TODO: consider implementation of a proper registry/builder/factory
14 AktualizrSecondary::Ptr AktualizrSecondaryFactory::create(const AktualizrSecondaryConfig& config) {
15  auto storage = INvStorage::newStorage(config.storage);
16  return AktualizrSecondaryFactory::create(config, storage);
17 }
18 
19 AktualizrSecondary::Ptr AktualizrSecondaryFactory::create(const AktualizrSecondaryConfig& config,
20  const std::shared_ptr<INvStorage>& storage) {
21  auto key_mngr = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
22 
23  UpdateAgent::Ptr update_agent;
24 
25  if (config.pacman.type != PACKAGE_MANAGER_OSTREE) {
26  std::string current_target_name;
27 
28  boost::optional<Uptane::Target> current_version;
29  boost::optional<Uptane::Target> pending_version;
30  auto installed_version_res = storage->loadInstalledVersions("", &current_version, &pending_version);
31 
32  if (installed_version_res && !!current_version) {
33  current_target_name = current_version->filename();
34  }
35 
36  update_agent =
37  std::make_shared<FileUpdateAgent>(config.storage.path / BinaryUpdateDefaultFile, current_target_name);
38  }
39 #ifdef BUILD_OSTREE
40  else {
41  std::shared_ptr<OstreeManager> pack_man =
42  std::make_shared<OstreeManager>(config.pacman, config.bootloader, storage, nullptr);
43  update_agent =
44  std::make_shared<OstreeUpdateAgent>(config.pacman.sysroot, key_mngr, pack_man, config.uptane.ecu_hardware_id);
45  }
46 #endif
47 
48  return std::make_shared<AktualizrSecondary>(config, storage, key_mngr, update_agent);
49 }
AktualizrSecondaryConfig
Definition: aktualizr_secondary_config.h:40