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 // TODO: consider implementation of a proper registry/builder/factory
12 AktualizrSecondary::Ptr AktualizrSecondaryFactory::create(const AktualizrSecondaryConfig& config) {
13  auto storage = INvStorage::newStorage(config.storage);
14  return AktualizrSecondaryFactory::create(config, storage);
15 }
16 
17 AktualizrSecondary::Ptr AktualizrSecondaryFactory::create(const AktualizrSecondaryConfig& config,
18  const std::shared_ptr<INvStorage>& storage) {
19  auto key_mngr = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
20 
21  UpdateAgent::Ptr update_agent;
22 
23  if (config.pacman.type != PackageManager::kOstree) {
24  std::string current_target_name;
25 
26  boost::optional<Uptane::Target> current_version;
27  boost::optional<Uptane::Target> pending_version;
28  auto installed_version_res = storage->loadInstalledVersions("", &current_version, &pending_version);
29 
30  if (installed_version_res && !!current_version) {
31  current_target_name = current_version->filename();
32  }
33 
34  update_agent = std::make_shared<FileUpdateAgent>(config.storage.path / "firmware.txt", current_target_name);
35  }
36 #ifdef BUILD_OSTREE
37  else {
38  std::shared_ptr<OstreeManager> pack_man =
39  std::make_shared<OstreeManager>(config.pacman, config.bootloader, storage, nullptr);
40  update_agent =
41  std::make_shared<OstreeUpdateAgent>(config.pacman.sysroot, key_mngr, pack_man, config.uptane.ecu_hardware_id);
42  }
43 #endif
44 
45  return std::make_shared<AktualizrSecondary>(config, storage, key_mngr, update_agent);
46 }
AktualizrSecondaryConfig
Definition: aktualizr_secondary_config.h:39