weave/settings: add device_id with persisted guid

Bug: 24485657
Change-Id: Iad88280c83c962a4843f3d4def8ef64767303197
Reviewed-on: https://weave-review.googlesource.com/1181
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/libweave/src/config.cc b/libweave/src/config.cc
index d014198..4f59497 100644
--- a/libweave/src/config.cc
+++ b/libweave/src/config.cc
@@ -7,6 +7,7 @@
 #include <set>
 
 #include <base/bind.h>
+#include <base/guid.h>
 #include <base/json/json_reader.h>
 #include <base/json/json_writer.h>
 #include <base/logging.h>
@@ -34,6 +35,7 @@
 const char kLocalPairingEnabled[] = "local_pairing_enabled";
 const char kRefreshToken[] = "refresh_token";
 const char kCloudId[] = "cloud_id";
+const char kDeviceId[] = "device_id";
 const char kRobotAccount[] = "robot_account";
 const char kLastConfiguredSsid[] = "last_configured_ssid";
 const char kSecret[] = "secret";
@@ -48,6 +50,7 @@
   result.service_url = "https://www.googleapis.com/clouddevices/v1/";
   result.local_anonymous_access_role = AuthScope::kViewer;
   result.pairing_modes.emplace(PairingType::kPinCode);
+  result.device_id = base::GenerateGUID();
   return result;
 }
 
@@ -88,7 +91,7 @@
   CHECK(!settings_.model_name.empty());
   CHECK(!settings_.model_id.empty());
   CHECK(!settings_.name.empty());
-
+  CHECK(!settings_.device_id.empty());
   CHECK_EQ(
       settings_.embedded_code.empty(),
       std::find(settings_.pairing_modes.begin(), settings_.pairing_modes.end(),
@@ -160,6 +163,9 @@
   if (dict->GetString(config_keys::kCloudId, &tmp))
     set_cloud_id(tmp);
 
+  if (dict->GetString(config_keys::kDeviceId, &tmp))
+    set_device_id(tmp);
+
   if (dict->GetString(config_keys::kRefreshToken, &tmp))
     set_refresh_token(tmp);
 
@@ -185,6 +191,7 @@
   dict.SetString(config_keys::kServiceURL, settings_.service_url);
   dict.SetString(config_keys::kRefreshToken, settings_.refresh_token);
   dict.SetString(config_keys::kCloudId, settings_.cloud_id);
+  dict.SetString(config_keys::kDeviceId, settings_.device_id);
   dict.SetString(config_keys::kRobotAccount, settings_.robot_account);
   dict.SetString(config_keys::kLastConfiguredSsid,
                  settings_.last_configured_ssid);