buffet: Add DeviceId DBus property
Privetd needs to be notified when GCD ID is changed.
CQ-DEPEND=CL:260681
BUG=brillo:572
TEST=manual, register device using privetd, edit id in buffet.state, restart
buffet, check if privetd has new id
Change-Id: I590ee22f134261711f78da75a4766043e0867bf5
Reviewed-on: https://chromium-review.googlesource.com/260303
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index 3b9fdc9..f14ca21 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -171,8 +171,8 @@
return BuildURL(oauth_url_, {subpath}, params);
}
-std::string DeviceRegistrationInfo::GetDeviceId(chromeos::ErrorPtr* error) {
- return CheckRegistration(error) ? device_id_ : std::string();
+const std::string& DeviceRegistrationInfo::GetDeviceId() const {
+ return device_id_;
}
bool DeviceRegistrationInfo::Load() {
@@ -233,7 +233,6 @@
client_secret_ = client_secret;
api_key_ = api_key;
refresh_token_ = refresh_token;
- device_id_ = device_id;
oauth_url_ = oauth_url;
service_url_ = service_url;
device_robot_account_ = device_robot_account;
@@ -243,6 +242,8 @@
description_ = description;
location_ = location;
+ SetDeviceId(device_id);
+
if (HaveRegistrationCredentials(nullptr)) {
// Wait a significant amount of time for local daemons to publish their
// state to Buffet before publishing it to the cloud.
@@ -544,14 +545,16 @@
}
std::string auth_code;
+ std::string device_id;
if (!json_resp->GetString("robotAccountEmail", &device_robot_account_) ||
!json_resp->GetString("robotAccountAuthorizationCode", &auth_code) ||
- !json_resp->GetString("deviceDraft.id", &device_id_)) {
+ !json_resp->GetString("deviceDraft.id", &device_id)) {
chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainGCD,
"unexpected_response",
"Device account missing in response");
return std::string();
}
+ SetDeviceId(device_id);
// Now get access_token and refresh_token
response = chromeos::http::PostFormDataAndBlock(GetOAuthURL("token"), {
@@ -994,7 +997,15 @@
VLOG(1) << "Changing registration status to " << StatusToString(new_status);
registration_status_ = new_status;
if (!registration_status_handler_.is_null())
- registration_status_handler_.Run(registration_status_);
+ registration_status_handler_.Run();
+}
+
+void DeviceRegistrationInfo::SetDeviceId(const std::string& device_id) {
+ if (device_id == device_id_)
+ return;
+ device_id_ = device_id;
+ if (!registration_status_handler_.is_null())
+ registration_status_handler_.Run();
}
} // namespace buffet