Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
main.cc
1 #include <unistd.h>
2 #include <iostream>
3 
4 #include <boost/filesystem.hpp>
5 #include <boost/program_options.hpp>
6 
7 #include "get.h"
8 #include "libaktualizr/config.h"
9 #include "logging/logging.h"
10 #include "utilities/aktualizr_version.h"
11 
12 namespace bpo = boost::program_options;
13 
14 void check_info_options(const bpo::options_description &description, const bpo::variables_map &vm) {
15  if (vm.count("help") != 0 || (vm.count("command") == 0 && vm.count("version") == 0)) {
16  std::cout << description << '\n';
17  exit(EXIT_SUCCESS);
18  }
19  if (vm.count("version") != 0) {
20  std::cout << "Current aktualizr-get version is: " << aktualizr_version() << "\n";
21  exit(EXIT_SUCCESS);
22  }
23 }
24 
25 bpo::variables_map parse_options(int argc, char **argv) {
26  bpo::options_description description(
27  "A tool similar to wget that will do an HTTP get on the given URL using the device's configured credentials.");
28  // clang-format off
29  // Try to keep these options in the same order as Config::updateFromCommandLine().
30  // The first three are commandline only.
31  description.add_options()
32  ("help,h", "print usage")
33  ("version,v", "Current aktualizr-get version")
34  ("config,c", bpo::value<std::vector<boost::filesystem::path> >()->composing(), "configuration file or directory")
35  ("loglevel", bpo::value<int>(), "set log level 0-5 (trace, debug, info, warning, error, fatal)")
36  ("url,u", bpo::value<std::string>(), "url to get");
37  // clang-format on
38 
39  bpo::variables_map vm;
40  std::vector<std::string> unregistered_options;
41  try {
42  bpo::basic_parsed_options<char> parsed_options = bpo::command_line_parser(argc, argv).options(description).run();
43  bpo::store(parsed_options, vm);
44  check_info_options(description, vm);
45  bpo::notify(vm);
46  } catch (const bpo::required_option &ex) {
47  // print the error and append the default commandline option description
48  std::cout << ex.what() << std::endl << description;
49  exit(EXIT_FAILURE);
50  } catch (const bpo::error &ex) {
51  std::cout << ex.what() << std::endl;
52  std::cout << description;
53  exit(EXIT_FAILURE);
54  }
55 
56  return vm;
57 }
58 
59 int main(int argc, char *argv[]) {
60  logger_init(isatty(1) == 1);
61  logger_set_threshold(boost::log::trivial::info);
62 
63  bpo::variables_map commandline_map = parse_options(argc, argv);
64 
65  int r = EXIT_FAILURE;
66  try {
67  Config config(commandline_map);
68  std::string body = aktualizrGet(config, commandline_map["url"].as<std::string>());
69  std::cout << body;
70 
71  r = EXIT_SUCCESS;
72  } catch (const std::exception &ex) {
73  LOG_ERROR << ex.what();
74  }
75  return r;
76 }
Configuration object for an aktualizr instance running on a Primary ECU.
Definition: config.h:210