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