buffet: Make RegisterDevice accept only ticket ID Changing name, description and location is possible using UpdateDeviceInfo. BUG=none TEST='FEATURES=test emerge-gizmo buffet' CQ-DEPEND=CL:*216413,CL:271616 Change-Id: Ieed8b8537184e0dada9c36551ee7502bd50259f4 Reviewed-on: https://chromium-review.googlesource.com/271377 Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Commit-Queue: Vitaly Buka <vitalybuka@chromium.org> Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc index a874ec0..ef4bf03 100644 --- a/buffet/buffet_client.cc +++ b/buffet/buffet_client.cc
@@ -313,17 +313,18 @@ void CallRegisterDevice(const std::string& args, ManagerProxy* manager_proxy) { - chromeos::VariantDictionary params; + std::string ticket_id; if (!args.empty()) { auto key_values = chromeos::data_encoding::WebParamsDecode(args); for (const auto& pair : key_values) { - params.insert(std::make_pair(pair.first, chromeos::Any(pair.second))); + if (pair.first == "ticket_id") + ticket_id = pair.second; } } ErrorPtr error; std::string device_id; - if (!manager_proxy->RegisterDevice(params, &device_id, &error)) { + if (!manager_proxy->RegisterDevice(ticket_id, &device_id, &error)) { return ReportError(error.get()); } @@ -380,8 +381,8 @@ } void CallSetCommandVisibility(const std::string& command_list, - const std::string& visibility, - ManagerProxy* manager_proxy) { + const std::string& visibility, + ManagerProxy* manager_proxy) { ErrorPtr error; std::vector<std::string> commands = chromeos::string_utils::Split(command_list, ",", true, true);
diff --git a/buffet/dbus_bindings/org.chromium.Buffet.Manager.xml b/buffet/dbus_bindings/org.chromium.Buffet.Manager.xml index 67c265d..73d3547 100644 --- a/buffet/dbus_bindings/org.chromium.Buffet.Manager.xml +++ b/buffet/dbus_bindings/org.chromium.Buffet.Manager.xml
@@ -17,7 +17,7 @@ <annotation name="org.chromium.DBus.Method.Kind" value="async"/> </method> <method name="RegisterDevice"> - <arg name="params" type="a{sv}" direction="in"/> + <arg name="ticket_id" type="s" direction="in"/> <arg name="device_id" type="s" direction="out"/> <annotation name="org.chromium.DBus.Method.Kind" value="async"/> </method>
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc index 7d8c608..454853b 100644 --- a/buffet/device_registration_info.cc +++ b/buffet/device_registration_info.cc
@@ -26,7 +26,6 @@ #include "buffet/commands/command_definition.h" #include "buffet/commands/command_manager.h" #include "buffet/commands/schema_constants.h" -#include "buffet/device_registration_storage_keys.h" #include "buffet/notification/xmpp_channel.h" #include "buffet/states/state_manager.h" #include "buffet/utils.h" @@ -35,23 +34,6 @@ const char buffet::kErrorDomainGCD[] = "gcd"; const char buffet::kErrorDomainGCDServer[] = "gcd_server"; -namespace buffet { -namespace storage_keys { - -// Persistent keys -const char kRefreshToken[] = "refresh_token"; -const char kDeviceId[] = "device_id"; -const char kRobotAccount[] = "robot_account"; -const char kName[] = "name"; -const char kDescription[] = "description"; -const char kLocation[] = "location"; -const char kLocalAnonymousAccessRole[] = "local_anonymous_access_role"; -const char kLocalDiscoveryEnabled[] = "local_discovery_enabled"; -const char kLocalPairingEnabled[] = "local_pairing_enabled"; - -} // namespace storage_keys -} // namespace buffet - namespace { const int kMaxStartDeviceRetryDelayMinutes{1}; @@ -390,47 +372,8 @@ return json; } -namespace { - -bool GetWithDefault(const std::map<std::string, std::string>& source, - const std::string& key, - const std::string& default_value, - std::string* output) { - auto it = source.find(key); - if (it == source.end()) { - *output = default_value; - return false; - } - *output = it->second; - return true; -} - -} // namespace - -std::string DeviceRegistrationInfo::RegisterDevice( - const std::map<std::string, std::string>& params, - chromeos::ErrorPtr* error) { - std::string ticket_id; - if (!GetWithDefault(params, "ticket_id", "", &ticket_id)) { - chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet, - "missing_parameter", - "Need ticket_id parameter for RegisterDevice()"); - return std::string(); - } - - // These fields are optional, and will default to values from the manufacturer - // supplied config. - std::string name; - GetWithDefault(params, storage_keys::kName, config_->name(), &name); - std::string description; - GetWithDefault(params, storage_keys::kDescription, config_->description(), - &description); - std::string location; - GetWithDefault(params, storage_keys::kLocation, config_->location(), - &location); - if (!UpdateDeviceInfo(name, description, location, error)) - return std::string(); - +std::string DeviceRegistrationInfo::RegisterDevice(const std::string& ticket_id, + chromeos::ErrorPtr* error) { std::unique_ptr<base::DictionaryValue> device_draft = BuildDeviceResource(error); if (!device_draft)
diff --git a/buffet/device_registration_info.h b/buffet/device_registration_info.h index c9ca7b4..5a9a1a3 100644 --- a/buffet/device_registration_info.h +++ b/buffet/device_registration_info.h
@@ -105,13 +105,8 @@ chromeos::ErrorPtr* error); // Registers the device. - // - // |params| are a list of key-value pairs of device information, - // such as client_id, client_secret, and so on. If a particular key-value pair - // is omitted, a default value is used when possible. // Returns a device ID on success. - // The values are all strings for now. - std::string RegisterDevice(const std::map<std::string, std::string>& params, + std::string RegisterDevice(const std::string& ticket_id, chromeos::ErrorPtr* error); // Updates a command.
diff --git a/buffet/device_registration_info_unittest.cc b/buffet/device_registration_info_unittest.cc index f41d408..e3e9d22 100644 --- a/buffet/device_registration_info_unittest.cc +++ b/buffet/device_registration_info_unittest.cc
@@ -16,7 +16,6 @@ #include "buffet/commands/command_manager.h" #include "buffet/commands/unittest_utils.h" -#include "buffet/device_registration_storage_keys.h" #include "buffet/states/mock_state_change_queue_interface.h" #include "buffet/states/state_manager.h" #include "buffet/storage_impls.h" @@ -55,14 +54,13 @@ "VZDei530-w0yE2urpQ"; const char kUserRefreshToken[] = "1/zQLKjlKJlkLkLKjLkjLKjLkjLjLkjl0ftc6" "cp1nI-GQ"; - } // namespace test_data // Add the test device registration information. void SetDefaultDeviceRegistration(base::DictionaryValue* data) { - data->SetString(storage_keys::kRefreshToken, test_data::kRefreshToken); - data->SetString(storage_keys::kDeviceId, test_data::kDeviceId); - data->SetString(storage_keys::kRobotAccount, test_data::kRobotAccountEmail); + data->SetString("refresh_token", test_data::kRefreshToken); + data->SetString("device_id", test_data::kDeviceId); + data->SetString("robot_account", test_data::kRobotAccountEmail); } void OAuth2Handler(const ServerRequest& request, ServerResponse* response) { @@ -447,9 +445,8 @@ transport_->AddHandler(dev_reg_->GetOAuthURL("token"), chromeos::http::request_type::kPost, base::Bind(OAuth2Handler)); - std::map<std::string, std::string> params; - params["ticket_id"] = test_data::kClaimTicketId; - std::string device_id = dev_reg_->RegisterDevice(params, nullptr); + std::string device_id = + dev_reg_->RegisterDevice(test_data::kClaimTicketId, nullptr); EXPECT_EQ(test_data::kDeviceId, device_id); EXPECT_EQ(3, transport_->GetRequestCount()); @@ -460,11 +457,11 @@ base::DictionaryValue* dict = nullptr; EXPECT_TRUE(storage_data->GetAsDictionary(&dict)); std::string value; - EXPECT_TRUE(dict->GetString(storage_keys::kDeviceId, &value)); + EXPECT_TRUE(dict->GetString("device_id", &value)); EXPECT_EQ(test_data::kDeviceId, value); - EXPECT_TRUE(dict->GetString(storage_keys::kRefreshToken, &value)); + EXPECT_TRUE(dict->GetString("refresh_token", &value)); EXPECT_EQ(test_data::kRefreshToken, value); - EXPECT_TRUE(dict->GetString(storage_keys::kRobotAccount, &value)); + EXPECT_TRUE(dict->GetString("robot_account", &value)); EXPECT_EQ(test_data::kRobotAccountEmail, value); }
diff --git a/buffet/device_registration_storage_keys.h b/buffet/device_registration_storage_keys.h deleted file mode 100644 index 5ce8083..0000000 --- a/buffet/device_registration_storage_keys.h +++ /dev/null
@@ -1,27 +0,0 @@ -// Copyright 2014 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. - -#ifndef BUFFET_DEVICE_REGISTRATION_STORAGE_KEYS_H_ -#define BUFFET_DEVICE_REGISTRATION_STORAGE_KEYS_H_ - -// These are the keys used to identify specific device registration information -// being saved to a storage. Used mostly internally by DeviceRegistrationInfo -// but also exposed so that tests can access them. -namespace buffet { -namespace storage_keys { - -extern const char kRefreshToken[]; -extern const char kDeviceId[]; -extern const char kRobotAccount[]; -extern const char kName[]; -extern const char kDescription[]; -extern const char kLocation[]; -extern const char kLocalAnonymousAccessRole[]; -extern const char kLocalDiscoveryEnabled[]; -extern const char kLocalPairingEnabled[]; - -} // namespace storage_keys -} // namespace buffet - -#endif // BUFFET_DEVICE_REGISTRATION_STORAGE_KEYS_H_
diff --git a/buffet/manager.cc b/buffet/manager.cc index d21ec8b..78a0a8c 100644 --- a/buffet/manager.cc +++ b/buffet/manager.cc
@@ -116,22 +116,11 @@ } void Manager::RegisterDevice(DBusMethodResponse<std::string> response, - const chromeos::VariantDictionary& params) { + const std::string& ticket_id) { LOG(INFO) << "Received call to Manager.RegisterDevice()"; chromeos::ErrorPtr error; - std::map<std::string, std::string> str_params; - for (const auto& pair : params) { - if (!pair.second.IsTypeCompatible<std::string>()) { - response->ReplyWithError(FROM_HERE, chromeos::errors::dbus::kDomain, - DBUS_ERROR_INVALID_ARGS, - "String value expected"); - return; - } - str_params.emplace_hint(str_params.end(), pair.first, - pair.second.Get<std::string>()); - } - std::string device_id = device_info_->RegisterDevice(str_params, &error); + std::string device_id = device_info_->RegisterDevice(ticket_id, &error); if (!device_id.empty()) { response->Return(device_id); return;
diff --git a/buffet/manager.h b/buffet/manager.h index 479ac9b..b15d7b0 100644 --- a/buffet/manager.h +++ b/buffet/manager.h
@@ -62,7 +62,7 @@ void CheckDeviceRegistered(DBusMethodResponse<std::string> response) override; void GetDeviceInfo(DBusMethodResponse<std::string> response) override; void RegisterDevice(DBusMethodResponse<std::string> response, - const chromeos::VariantDictionary& params) override; + const std::string& ticket_id) override; bool UpdateDeviceInfo(chromeos::ErrorPtr* error, const std::string& in_name, const std::string& in_description,