libweave: Remove device_kind and embedded_code_path
Keep only embedded_code, implementation will decide how to get it.
device_kind is not supported by server already.
BUG=brillo:1257
TEST=`FEATURES=test emerge-gizmo libweave buffet`
Change-Id: I6a4a438d78eab188f3e454ebf4f12a4d4684622a
Reviewed-on: https://chromium-review.googlesource.com/293896
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/libweave/include/weave/config.h b/libweave/include/weave/config.h
index 523adf7..e2512cb 100644
--- a/libweave/include/weave/config.h
+++ b/libweave/include/weave/config.h
@@ -29,14 +29,13 @@
std::string oem_name;
std::string model_name;
std::string model_id;
- std::string device_kind;
base::TimeDelta polling_period;
base::TimeDelta backup_polling_period;
bool wifi_auto_setup_enabled{true};
bool ble_setup_enabled{false};
std::set<PairingType> pairing_modes;
- base::FilePath embedded_code_path;
+ std::string embedded_code;
std::string device_id;
std::string refresh_token;
diff --git a/libweave/src/buffet_config.cc b/libweave/src/buffet_config.cc
index 2698630..3f5bd8a 100644
--- a/libweave/src/buffet_config.cc
+++ b/libweave/src/buffet_config.cc
@@ -17,36 +17,6 @@
namespace {
-// TODO(vitalybuka): Remove this when deviceKind is gone from server.
-std::string GetDeviceKind(const std::string& manifest_id) {
- CHECK_EQ(5u, manifest_id.size());
- std::string kind = manifest_id.substr(0, 2);
- if (kind == "AC")
- return "accessPoint";
- if (kind == "AK")
- return "aggregator";
- if (kind == "AM")
- return "camera";
- if (kind == "AB")
- return "developmentBoard";
- if (kind == "AE")
- return "printer";
- if (kind == "AF")
- return "scanner";
- if (kind == "AD")
- return "speaker";
- if (kind == "AL")
- return "storage";
- if (kind == "AJ")
- return "toy";
- if (kind == "AA")
- return "vendor";
- if (kind == "AN")
- return "video";
- LOG(FATAL) << "Invalid model id: " << manifest_id;
- return std::string();
-}
-
bool IsValidAccessRole(const std::string& role) {
return role == "none" || role == "viewer" || role == "user";
}
@@ -86,7 +56,7 @@
const char kRobotAccount[] = "robot_account";
const char kWifiAutoSetupEnabled[] = "wifi_auto_setup_enabled";
const char kBleSetupEnabled[] = "ble_setup_enabled";
-const char kEmbeddedCodePath[] = "embedded_code_path";
+const char kEmbeddedCode[] = "embedded_code";
const char kPairingModes[] = "pairing_modes";
const char kLastConfiguredSsid[] = "last_configured_ssid";
@@ -106,7 +76,6 @@
result.oem_name = "Chromium";
result.model_name = "Brillo";
result.model_id = "AAAAA";
- result.device_kind = "vendor";
result.polling_period = base::TimeDelta::FromSeconds(7);
result.backup_polling_period = base::TimeDelta::FromMinutes(30);
result.wifi_auto_setup_enabled = true;
@@ -169,7 +138,7 @@
CHECK(!settings_.model_name.empty());
store.GetString(config_keys::kModelId, &settings_.model_id);
- settings_.device_kind = GetDeviceKind(settings_.model_id);
+ CHECK(!settings_.model_id.empty());
std::string polling_period_str;
if (store.GetString(config_keys::kPollingPeriodMs, &polling_period_str))
@@ -185,12 +154,7 @@
store.GetBoolean(config_keys::kBleSetupEnabled,
&settings_.ble_setup_enabled);
- std::string embedded_code_path;
- if (store.GetString(config_keys::kEmbeddedCodePath, &embedded_code_path)) {
- settings_.embedded_code_path = base::FilePath(embedded_code_path);
- if (!settings_.embedded_code_path.empty())
- settings_.pairing_modes = {PairingType::kEmbeddedCode};
- }
+ store.GetString(config_keys::kEmbeddedCode, &settings_.embedded_code);
std::string modes_str;
if (store.GetString(config_keys::kPairingModes, &modes_str)) {
diff --git a/libweave/src/buffet_config.h b/libweave/src/buffet_config.h
index 2d161e1..f8a387f 100644
--- a/libweave/src/buffet_config.h
+++ b/libweave/src/buffet_config.h
@@ -103,7 +103,6 @@
const std::string& oem_name() const { return settings_.oem_name; }
const std::string& model_name() const { return settings_.model_name; }
const std::string& model_id() const { return settings_.model_id; }
- const std::string& device_kind() const { return settings_.device_kind; }
base::TimeDelta polling_period() const { return settings_.polling_period; }
base::TimeDelta backup_polling_period() const {
return settings_.backup_polling_period;
@@ -118,9 +117,7 @@
const std::set<PairingType>& pairing_modes() const {
return settings_.pairing_modes;
}
- const base::FilePath& embedded_code_path() const {
- return settings_.embedded_code_path;
- }
+ const std::string& embedded_code() const { return settings_.embedded_code; }
const std::string& name() const { return settings_.name; }
const std::string& description() const { return settings_.description; }
diff --git a/libweave/src/buffet_config_unittest.cc b/libweave/src/buffet_config_unittest.cc
index 7c80b06..38bb5b8 100644
--- a/libweave/src/buffet_config_unittest.cc
+++ b/libweave/src/buffet_config_unittest.cc
@@ -54,14 +54,13 @@
EXPECT_EQ("Chromium", config_->oem_name());
EXPECT_EQ("Brillo", config_->model_name());
EXPECT_EQ("AAAAA", config_->model_id());
- EXPECT_EQ("vendor", config_->device_kind());
EXPECT_EQ(base::TimeDelta::FromSeconds(7), config_->polling_period());
EXPECT_EQ(base::TimeDelta::FromMinutes(30), config_->backup_polling_period());
EXPECT_TRUE(config_->wifi_auto_setup_enabled());
EXPECT_FALSE(config_->ble_setup_enabled());
EXPECT_EQ(std::set<PairingType>{PairingType::kPinCode},
config_->pairing_modes());
- EXPECT_EQ("", config_->embedded_code_path().value());
+ EXPECT_EQ("", config_->embedded_code());
EXPECT_EQ("Developer device", config_->name());
EXPECT_EQ("", config_->description());
EXPECT_EQ("", config_->location());
@@ -90,7 +89,7 @@
config_store.SetBoolean("ble_setup_enabled", true);
config_store.SetString("pairing_modes",
"pinCode,embeddedCode,ultrasound32,audible32");
- config_store.SetString("embedded_code_path", "/conf_code");
+ config_store.SetString("embedded_code", "1234");
config_store.SetString("name", "conf_name");
config_store.SetString("description", "conf_description");
config_store.SetString("location", "conf_location");
@@ -116,7 +115,6 @@
EXPECT_EQ("conf_oem_name", config_->oem_name());
EXPECT_EQ("conf_model_name", config_->model_name());
EXPECT_EQ("ABCDE", config_->model_id());
- EXPECT_EQ("developmentBoard", config_->device_kind());
EXPECT_EQ(base::TimeDelta::FromMilliseconds(12345),
config_->polling_period());
EXPECT_EQ(base::TimeDelta::FromMilliseconds(6589),
@@ -127,7 +125,7 @@
PairingType::kPinCode, PairingType::kEmbeddedCode,
PairingType::kUltrasound32, PairingType::kAudible32};
EXPECT_EQ(pairing_types, config_->pairing_modes());
- EXPECT_EQ("/conf_code", config_->embedded_code_path().value());
+ EXPECT_EQ("1234", config_->embedded_code());
EXPECT_EQ("conf_name", config_->name());
EXPECT_EQ("conf_description", config_->description());
EXPECT_EQ("conf_location", config_->location());
@@ -203,7 +201,6 @@
EXPECT_EQ(default_.oem_name(), config_->oem_name());
EXPECT_EQ(default_.model_name(), config_->model_name());
EXPECT_EQ(default_.model_id(), config_->model_id());
- EXPECT_EQ(default_.device_kind(), config_->device_kind());
EXPECT_EQ(default_.polling_period(), config_->polling_period());
EXPECT_EQ(default_.backup_polling_period(), config_->backup_polling_period());
EXPECT_EQ(default_.wifi_auto_setup_enabled(),
@@ -211,7 +208,7 @@
EXPECT_EQ(default_.ble_setup_enabled(),
config_->ble_setup_enabled());
EXPECT_EQ(default_.pairing_modes(), config_->pairing_modes());
- EXPECT_EQ(default_.embedded_code_path(), config_->embedded_code_path());
+ EXPECT_EQ(default_.embedded_code(), config_->embedded_code());
EXPECT_EQ("state_name", config_->name());
EXPECT_EQ("state_description", config_->description());
EXPECT_EQ("state_location", config_->location());
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index d3dc1c0..0f150e1 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -506,7 +506,6 @@
if (!config_->location().empty())
resource->SetString("location", config_->location());
resource->SetString("modelManifestId", config_->model_id());
- resource->SetString("deviceKind", config_->device_kind());
std::unique_ptr<base::DictionaryValue> channel{new base::DictionaryValue};
if (current_notification_channel_) {
channel->SetString("supportedType",
diff --git a/libweave/src/device_registration_info_unittest.cc b/libweave/src/device_registration_info_unittest.cc
index c73b55a..9c70207 100644
--- a/libweave/src/device_registration_info_unittest.cc
+++ b/libweave/src/device_registration_info_unittest.cc
@@ -389,8 +389,6 @@
EXPECT_EQ("pull", value);
EXPECT_TRUE(json->GetString("oauthClientId", &value));
EXPECT_EQ(test_data::kClientId, value);
- EXPECT_TRUE(json->GetString("deviceDraft.deviceKind", &value));
- EXPECT_EQ("vendor", value);
EXPECT_TRUE(json->GetString("deviceDraft.description", &value));
EXPECT_EQ("Easy to clean", value);
EXPECT_TRUE(json->GetString("deviceDraft.location", &value));
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index c64430a..16bbb4d 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -16,7 +16,6 @@
#include <base/scoped_observer.h>
#include <base/strings/string_number_conversions.h>
#include <base/values.h>
-#include <chromeos/key_value_store.h>
#include <weave/network.h>
#include "libweave/src/device_registration_info.h"
@@ -52,8 +51,8 @@
state_manager);
cloud_observer_.Add(cloud_.get());
security_.reset(new SecurityManager(device->GetConfig().pairing_modes(),
- device->GetConfig().embedded_code_path(),
- task_runner, disable_security_));
+ device->GetConfig().embedded_code(),
+ disable_security_, task_runner));
network->AddOnConnectionChangedCallback(
base::Bind(&Manager::OnConnectivityChanged, base::Unretained(this)));
diff --git a/libweave/src/privet/security_manager.cc b/libweave/src/privet/security_manager.cc
index 8f90cc4..409f09a 100644
--- a/libweave/src/privet/security_manager.cc
+++ b/libweave/src/privet/security_manager.cc
@@ -17,7 +17,6 @@
#include <base/strings/string_number_conversions.h>
#include <base/strings/stringprintf.h>
#include <base/time/time.h>
-#include <chromeos/key_value_store.h>
#include <weave/task_runner.h>
#include "libweave/external/crypto/p224_spake.h"
@@ -37,8 +36,6 @@
const int kMaxAllowedPairingAttemts = 3;
const int kPairingBlockingTimeMinutes = 1;
-const char kEmbeddedCode[] = "embedded_code";
-
// Returns "scope:id:time".
std::string CreateTokenData(const UserInfo& user_info, const base::Time& time) {
return base::IntToString(static_cast<int>(user_info.scope())) +
@@ -70,14 +67,6 @@
return UserInfo{static_cast<AuthScope>(scope), id};
}
-std::string LoadEmbeddedCode(const base::FilePath& path) {
- std::string code;
- chromeos::KeyValueStore store;
- if (store.Load(path))
- store.GetString(kEmbeddedCode, &code);
- return code;
-}
-
class Spakep224Exchanger : public SecurityManager::KeyExchanger {
public:
explicit Spakep224Exchanger(const std::string& password)
@@ -131,17 +120,17 @@
} // namespace
SecurityManager::SecurityManager(const std::set<PairingType>& pairing_modes,
- const base::FilePath& embedded_code_path,
- TaskRunner* task_runner,
- bool disable_security)
+ const std::string& embedded_code,
+ bool disable_security,
+ TaskRunner* task_runner)
: is_security_disabled_(disable_security),
pairing_modes_(pairing_modes),
- embedded_code_path_(embedded_code_path),
+ embedded_code_(embedded_code),
task_runner_{task_runner},
secret_(kSha256OutputSize) {
base::RandBytes(secret_.data(), kSha256OutputSize);
- CHECK_EQ(embedded_code_path_.empty(),
+ CHECK_EQ(embedded_code_.empty(),
std::find(pairing_modes_.begin(), pairing_modes_.end(),
PairingType::kEmbeddedCode) == pairing_modes_.end());
}
@@ -225,17 +214,7 @@
std::string code;
switch (mode) {
case PairingType::kEmbeddedCode:
- CHECK(!embedded_code_path_.empty());
-
- if (embedded_code_.empty())
- embedded_code_ = LoadEmbeddedCode(embedded_code_path_);
-
- if (embedded_code_.empty()) { // File is not created yet.
- Error::AddTo(error, FROM_HERE, errors::kDomain, errors::kDeviceBusy,
- "Embedded code is not ready");
- return false;
- }
-
+ CHECK(!embedded_code_.empty());
code = embedded_code_;
break;
case PairingType::kUltrasound32:
diff --git a/libweave/src/privet/security_manager.h b/libweave/src/privet/security_manager.h
index f0a6de4..eda7946 100644
--- a/libweave/src/privet/security_manager.h
+++ b/libweave/src/privet/security_manager.h
@@ -48,9 +48,9 @@
};
SecurityManager(const std::set<PairingType>& pairing_modes,
- const base::FilePath& embedded_code_path,
- TaskRunner* task_runner,
- bool disable_security);
+ const std::string& embedded_code,
+ bool disable_security,
+ TaskRunner* task_runner);
~SecurityManager() override;
// SecurityDelegate methods
@@ -92,7 +92,6 @@
// If true allows unencrypted pairing and accepts any access code.
bool is_security_disabled_{false};
std::set<PairingType> pairing_modes_;
- const base::FilePath embedded_code_path_;
std::string embedded_code_;
// TODO(vitalybuka): Session cleanup can be done without posting tasks.
TaskRunner* task_runner_{nullptr};
diff --git a/libweave/src/privet/security_manager_unittest.cc b/libweave/src/privet/security_manager_unittest.cc
index 8ce0ba9..2b7babb 100644
--- a/libweave/src/privet/security_manager_unittest.cc
+++ b/libweave/src/privet/security_manager_unittest.cc
@@ -13,17 +13,15 @@
#include <vector>
#include <base/bind.h>
-#include <base/files/file_util.h>
#include <base/logging.h>
#include <base/rand_util.h>
#include <base/strings/string_number_conversions.h>
#include <base/strings/string_util.h>
-#include <chromeos/key_value_store.h>
-#include "libweave/external/crypto/p224_spake.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <weave/mock_task_runner.h>
+#include "libweave/external/crypto/p224_spake.h"
#include "libweave/src/data_encoding.h"
#include "libweave/src/privet/openssl_utils.h"
@@ -54,12 +52,6 @@
MOCK_METHOD1(OnPairingEnd, void(const std::string& session_id));
};
-base::FilePath GetTempFilePath() {
- base::FilePath file_path;
- EXPECT_TRUE(base::CreateTemporaryFile(&file_path));
- return file_path;
-}
-
} // namespace
class SecurityManagerTest : public testing::Test {
@@ -69,14 +61,8 @@
fingerprint.resize(256 / 8);
base::RandBytes(fingerprint.data(), fingerprint.size());
security_.SetCertificateFingerprint(fingerprint);
-
- chromeos::KeyValueStore store;
- store.SetString("embedded_code", "1234");
- EXPECT_TRUE(store.Save(embedded_code_path_));
}
- void TearDown() override { base::DeleteFile(embedded_code_path_, false); }
-
protected:
void PairAndAuthenticate(std::string* fingerprint, std::string* signature) {
std::string session_id;
@@ -114,12 +100,11 @@
}
const base::Time time_ = base::Time::FromTimeT(1410000000);
- base::FilePath embedded_code_path_{GetTempFilePath()};
unittests::MockTaskRunner task_runner_;
SecurityManager security_{{PairingType::kEmbeddedCode},
- embedded_code_path_,
- &task_runner_,
- false};
+ "1234",
+ false,
+ &task_runner_};
};
TEST_F(SecurityManagerTest, IsBase64) {
@@ -154,14 +139,14 @@
TEST_F(SecurityManagerTest, CreateTokenDifferentInstance) {
EXPECT_NE(security_.CreateAccessToken(UserInfo{AuthScope::kUser, 123}, time_),
- SecurityManager({}, base::FilePath{}, &task_runner_, false)
+ SecurityManager({}, "", false, &task_runner_)
.CreateAccessToken(UserInfo{AuthScope::kUser, 123}, time_));
}
TEST_F(SecurityManagerTest, ParseAccessToken) {
// Multiple attempts with random secrets.
for (size_t i = 0; i < 1000; ++i) {
- SecurityManager security{{}, base::FilePath{}, &task_runner_, false};
+ SecurityManager security{{}, "", false, &task_runner_};
std::string token =
security.CreateAccessToken(UserInfo{AuthScope::kUser, 5}, time_);
@@ -302,16 +287,5 @@
}
}
-TEST_F(SecurityManagerTest, EmbeddedCodeNotReady) {
- std::string session_id;
- std::string device_commitment;
- base::DeleteFile(embedded_code_path_, false);
- ErrorPtr error;
- ASSERT_FALSE(security_.StartPairing(PairingType::kEmbeddedCode,
- CryptoType::kSpake_p224, &session_id,
- &device_commitment, &error));
- EXPECT_EQ("deviceBusy", error->GetCode());
-}
-
} // namespace privet
} // namespace weave
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index d5f7916..5529030 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -6,7 +6,6 @@
#include <base/logging.h>
#include <base/memory/weak_ptr.h>
-#include <chromeos/key_value_store.h>
#include <weave/enum_to_string.h>
#include <weave/network.h>
#include <weave/task_runner.h>