Chromium Code Reviews| Index: remoting/host/setup/host_starter.cc |
| diff --git a/remoting/host/setup/host_starter.cc b/remoting/host/setup/host_starter.cc |
| index d16137bed6ceeaf77075a50395776fa150fed080..159cad18c3ee4aab767cf19ba706d05ff94e2135 100644 |
| --- a/remoting/host/setup/host_starter.cc |
| +++ b/remoting/host/setup/host_starter.cc |
| @@ -101,24 +101,62 @@ void HostStarter::OnGetUserEmailResponse(const std::string& user_email) { |
| &HostStarter::OnGetUserEmailResponse, weak_ptr_, user_email)); |
| return; |
| } |
| - user_email_ = user_email; |
| - // Register the host. |
| - host_id_ = base::GenerateGUID(); |
| - key_pair_ = RsaKeyPair::Generate(); |
| - service_client_->RegisterHost( |
| - host_id_, host_name_, key_pair_->GetPublicKey(), access_token_, this); |
| + |
| + if (host_id_.empty()) { |
|
Sergey Ulanov
2013/08/13 23:33:38
Add a comment that this function is used for both
rmsousa
2013/08/14 02:13:12
Done.
|
| + // Register the host. |
| + xmpp_login_ = user_email; |
|
Sergey Ulanov
2013/08/13 23:33:38
I think it's better to set host_owner_ here and co
rmsousa
2013/08/14 02:13:12
Done.
|
| + host_id_ = base::GenerateGUID(); |
| + key_pair_ = RsaKeyPair::Generate(); |
| + |
| + std::string host_client_id; |
| + host_client_id = google_apis::GetOAuth2ClientID( |
| + google_apis::CLIENT_REMOTING_HOST); |
| + |
| + service_client_->RegisterHost( |
| + host_id_, host_name_, key_pair_->GetPublicKey(), host_client_id, |
| + access_token_, this); |
| + } else { |
| + // Host is already registered, this response is for the service account. |
| + // The previous value of xmpp_login is the host owner's email. |
| + host_owner_ = xmpp_login_; |
| + xmpp_login_ = user_email; |
| + StartHostProcess(); |
| + } |
| } |
| -void HostStarter::OnHostRegistered() { |
| +void HostStarter::OnHostRegistered(const std::string& authorization_code) { |
| if (!main_task_runner_->BelongsToCurrentThread()) { |
| main_task_runner_->PostTask(FROM_HERE, base::Bind( |
| - &HostStarter::OnHostRegistered, weak_ptr_)); |
| + &HostStarter::OnHostRegistered, weak_ptr_, authorization_code)); |
| return; |
| } |
| + |
| + if (authorization_code.empty()) { |
| + // No service account code, start the host with the user's credentials. |
| + StartHostProcess(); |
| + } else { |
|
Sergey Ulanov
2013/08/13 23:33:38
add return in the case above and remove else. The
rmsousa
2013/08/14 02:13:12
Done.
|
| + // Received a service account authorization code, update oauth_client_info_ |
| + // to use the service account client keys, and get service account tokens. |
| + oauth_client_info_.client_id = |
| + google_apis::GetOAuth2ClientID( |
| + google_apis::CLIENT_REMOTING_HOST); |
| + oauth_client_info_.client_secret = |
| + google_apis::GetOAuth2ClientSecret( |
| + google_apis::CLIENT_REMOTING_HOST); |
| + oauth_client_info_.redirect_uri = "oob"; |
| + oauth_client_->GetTokensFromAuthCode( |
| + oauth_client_info_, authorization_code, kMaxGetTokensRetries, this); |
| + } |
| +} |
| + |
| +void HostStarter::StartHostProcess() { |
| // Start the host. |
| std::string host_secret_hash = remoting::MakeHostPinHash(host_id_, host_pin_); |
| scoped_ptr<base::DictionaryValue> config(new base::DictionaryValue()); |
| - config->SetString("xmpp_login", user_email_); |
| + if (!host_owner_.empty()) { |
|
Sergey Ulanov
2013/08/13 23:33:38
Can we always set host_owner, even when using user
rmsousa
2013/08/14 02:13:12
https://codereview.chromium.org/19796006/ uses the
|
| + config->SetString("host_owner", host_owner_); |
| + } |
| + config->SetString("xmpp_login", xmpp_login_); |
| config->SetString("oauth_refresh_token", refresh_token_); |
| config->SetString("host_id", host_id_); |
| config->SetString("host_name", host_name_); |