Add config flag to mark that local auth info was changed

libWeave must upload changed local auth info to the server.

BUG=25766813

Change-Id: I3d82e2dab363554b1ed7ad164edbe8fbe04a7b7a
Reviewed-on: https://weave-review.googlesource.com/1801
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/src/config.cc b/src/config.cc
index c20f18d..f0ec963 100644
--- a/src/config.cc
+++ b/src/config.cc
@@ -42,6 +42,7 @@
 const char kRobotAccount[] = "robot_account";
 const char kLastConfiguredSsid[] = "last_configured_ssid";
 const char kSecret[] = "secret";
+const char kLocalAuthInfoChanged[] = "local_auth_info_changed";
 
 }  // namespace config_keys
 
@@ -120,6 +121,7 @@
   CHECK(settings_.robot_account.empty());
   CHECK(settings_.last_configured_ssid.empty());
   CHECK(settings_.secret.empty());
+  CHECK(settings_.local_auth_info_changed);
 
   change.LoadState();
 }
@@ -211,6 +213,9 @@
   std::vector<uint8_t> secret;
   if (dict->GetString(config_keys::kSecret, &tmp) && Base64Decode(tmp, &secret))
     set_secret(secret);
+
+  if (dict->GetBoolean(config_keys::kLocalAuthInfoChanged, &tmp_bool))
+    set_local_auth_info_changed(tmp_bool);
 }
 
 void Config::Save() {
@@ -232,6 +237,8 @@
   dict.SetString(config_keys::kLastConfiguredSsid,
                  settings_.last_configured_ssid);
   dict.SetString(config_keys::kSecret, Base64Encode(settings_.secret));
+  dict.SetBoolean(config_keys::kLocalAuthInfoChanged,
+                  settings_.local_auth_info_changed);
   dict.SetString(config_keys::kName, settings_.name);
   dict.SetString(config_keys::kDescription, settings_.description);
   dict.SetString(config_keys::kLocation, settings_.location);
diff --git a/src/config.h b/src/config.h
index bab50ca..fc2568f 100644
--- a/src/config.h
+++ b/src/config.h
@@ -28,6 +28,7 @@
     std::string robot_account;
     std::string last_configured_ssid;
     std::vector<uint8_t> secret;
+    bool local_auth_info_changed{true};
   };
 
   using OnChangedCallback = base::Callback<void(const weave::Settings&)>;
@@ -91,6 +92,9 @@
     void set_secret(const std::vector<uint8_t>& secret) {
       settings_->secret = secret;
     }
+    void set_local_auth_info_changed(bool local_auth_info_changed) {
+      settings_->local_auth_info_changed = local_auth_info_changed;
+    }
 
     void Commit();
 
diff --git a/src/config_unittest.cc b/src/config_unittest.cc
index 67c3bfe..8c99131 100644
--- a/src/config_unittest.cc
+++ b/src/config_unittest.cc
@@ -77,6 +77,7 @@
   EXPECT_EQ("", GetSettings().robot_account);
   EXPECT_EQ("", GetSettings().last_configured_ssid);
   EXPECT_EQ(std::vector<uint8_t>(), GetSettings().secret);
+  EXPECT_TRUE(GetSettings().local_auth_info_changed);
 }
 
 TEST_F(ConfigTest, LoadStateV0) {
@@ -116,6 +117,7 @@
     "device_id": "state_device_id",
     "last_configured_ssid": "state_last_configured_ssid",
     "local_anonymous_access_role": "user",
+    "local_auth_info_changed": false,
     "local_discovery_enabled": false,
     "local_pairing_enabled": false,
     "location": "state_location",
@@ -159,6 +161,7 @@
   EXPECT_EQ("state_robot_account", GetSettings().robot_account);
   EXPECT_EQ("state_last_configured_ssid", GetSettings().last_configured_ssid);
   EXPECT_EQ("c3RhdGVfc2VjcmV0", Base64Encode(GetSettings().secret));
+  EXPECT_FALSE(GetSettings().local_auth_info_changed);
 }
 
 TEST_F(ConfigTest, Setters) {
@@ -228,6 +231,9 @@
   change.set_secret(secret);
   EXPECT_EQ(secret, GetSettings().secret);
 
+  change.set_local_auth_info_changed(false);
+  EXPECT_FALSE(GetSettings().local_auth_info_changed);
+
   EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
 
   EXPECT_CALL(config_store_, SaveSettings(_))
@@ -242,6 +248,7 @@
           'device_id': 'set_device_id',
           'last_configured_ssid': 'set_last_configured_ssid',
           'local_anonymous_access_role': 'user',
+          'local_auth_info_changed': false,
           'local_discovery_enabled': true,
           'local_pairing_enabled': true,
           'location': 'set_location',