buffet: Rework buffet configuration

Manufacturer supplied fields will come from the buffet configuration
file with good defaults provided by buffet itself.  This includes
a few default values for user supplied fields.

User supplied and other per device instance state will be stored in
a state file as before.

Keeping these fields separate greatly simplifies reasoning about
adding configuration settings to buffet.

BUG=brillo:658
TEST=unittests, tendo_experimental passes
CQ-DEPEND=CL:262292

Change-Id: Ib74721b9c99d11c189042aa78cc43a076072de32
Reviewed-on: https://chromium-review.googlesource.com/262296
Tested-by: Christopher Wiley <wiley@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Anton Muhin <antonm@chromium.org>
Commit-Queue: Christopher Wiley <wiley@chromium.org>
diff --git a/buffet/buffet_config.cc b/buffet/buffet_config.cc
new file mode 100644
index 0000000..36acee9
--- /dev/null
+++ b/buffet/buffet_config.cc
@@ -0,0 +1,45 @@
+// Copyright 2015 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "buffet/buffet_config.h"
+
+namespace buffet {
+namespace config_keys {
+
+const char kClientId[]             = "client_id";
+const char kClientSecret[]         = "client_secret";
+const char kApiKey[]               = "api_key";
+const char kOAuthURL[]             = "oauth_url";
+const char kServiceURL[]           = "service_url";
+const char kDeviceKind[]           = "device_kind";
+const char kName[]                 = "name";
+const char kDefaultDisplayName[]   = "default_display_name";
+const char kDefaultDescription[]   = "default_description";
+const char kDefaultLocation[]      = "default_location";
+const char kModelId[]              = "model_id";
+
+}  // namespace config_keys
+
+void BuffetConfig::Load(const base::FilePath& config_path) {
+  chromeos::KeyValueStore store;
+  if (store.Load(config_path)) {
+    Load(store);
+  }
+}
+
+void BuffetConfig::Load(const chromeos::KeyValueStore& store) {
+  store.GetString(config_keys::kClientId, &client_id_);
+  store.GetString(config_keys::kClientSecret, &client_secret_);
+  store.GetString(config_keys::kApiKey, &api_key_);
+  store.GetString(config_keys::kOAuthURL, &oauth_url_);
+  store.GetString(config_keys::kServiceURL, &service_url_);
+  store.GetString(config_keys::kDeviceKind, &device_kind_);
+  store.GetString(config_keys::kName, &name_);
+  store.GetString(config_keys::kDefaultDisplayName, &default_display_name_);
+  store.GetString(config_keys::kDefaultDescription, &default_description_);
+  store.GetString(config_keys::kDefaultLocation, &default_location_);
+  store.GetString(config_keys::kModelId, &model_id_);
+}
+
+}  // namespace buffet