buffet: Configure buffet from the file.

We used to keep a lot of constants in the source files, now
let's start to move necessary constants into configuration
file to make it easier control buffet behaviour.

BUG=chromium:364692
TEST=manual

Change-Id: I77b95976746ac11e9b1a16cfc6476b8ac1464295
Reviewed-on: https://chromium-review.googlesource.com/231301
Reviewed-by: Anton Muhin <antonm@chromium.org>
Commit-Queue: Anton Muhin <antonm@chromium.org>
Tested-by: Anton Muhin <antonm@chromium.org>
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index a54825c..6336c5d 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -15,6 +15,7 @@
 #include <chromeos/data_encoding.h>
 #include <chromeos/errors/error_codes.h>
 #include <chromeos/http/http_utils.h>
+#include <chromeos/key_value_store.h>
 #include <chromeos/mime_utils.h>
 #include <chromeos/strings/string_utils.h>
 #include <chromeos/url_utils.h>
@@ -58,18 +59,6 @@
 const base::FilePath::CharType kDeviceInfoFilePath[] =
     FILE_PATH_LITERAL("/var/lib/buffet/device_reg_info");
 
-bool GetParamValue(
-    const std::map<std::string, std::string>& params,
-    const std::string& param_name,
-    std::string* param_value) {
-  auto p = params.find(param_name);
-  if (p == params.end())
-    return false;
-
-  *param_value = p->second;
-  return true;
-}
-
 std::pair<std::string, std::string> BuildAuthHeader(
     const std::string& access_token_type,
     const std::string& access_token) {
@@ -155,10 +144,12 @@
 
 DeviceRegistrationInfo::DeviceRegistrationInfo(
     const std::shared_ptr<CommandManager>& command_manager,
-    const std::shared_ptr<StateManager>& state_manager)
+    const std::shared_ptr<StateManager>& state_manager,
+    std::unique_ptr<chromeos::KeyValueStore> config_store)
     : DeviceRegistrationInfo(
         command_manager,
         state_manager,
+        std::move(config_store),
         chromeos::http::Transport::CreateDefault(),
         // TODO(avakulenko): Figure out security implications of storing
         // this data unencrypted.
@@ -168,14 +159,18 @@
 DeviceRegistrationInfo::DeviceRegistrationInfo(
     const std::shared_ptr<CommandManager>& command_manager,
     const std::shared_ptr<StateManager>& state_manager,
+    std::unique_ptr<chromeos::KeyValueStore> config_store,
     const std::shared_ptr<chromeos::http::Transport>& transport,
     const std::shared_ptr<StorageInterface>& storage)
     : transport_{transport},
       storage_{storage},
       command_manager_{command_manager},
-      state_manager_{state_manager} {
+      state_manager_{state_manager},
+      config_store_{std::move(config_store)} {
 }
 
+DeviceRegistrationInfo::~DeviceRegistrationInfo() = default;
+
 std::pair<std::string, std::string>
     DeviceRegistrationInfo::GetAuthorizationHeader() const {
   return BuildAuthHeader("Bearer", access_token_);
@@ -833,4 +828,18 @@
       base::Bind(&IgnoreCloudResult), base::Bind(&IgnoreCloudError));
 }
 
+void DeviceRegistrationInfo::GetParamValue(
+    const std::map<std::string, std::string>& params,
+    const std::string& param_name,
+    std::string* param_value) {
+  auto p = params.find(param_name);
+  if (p != params.end()) {
+    *param_value = p->second;
+    return;
+  }
+
+  bool present = config_store_->GetString(param_name, param_value);
+  CHECK(present) << "No default for parameter " << param_name;
+}
+
 }  // namespace buffet