Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(427)

Unified Diff: remoting/protocol/negotiating_client_authenticator.cc

Issue 1781173005: Handle pairing_client_id in the negotiating authenticators. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@config
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: remoting/protocol/negotiating_client_authenticator.cc
diff --git a/remoting/protocol/negotiating_client_authenticator.cc b/remoting/protocol/negotiating_client_authenticator.cc
index d243f86d3e4f404a176a6b62190bf12112d2c489..0d6751792e9cd8b1512b6db9075dd8ce215b20ff 100644
--- a/remoting/protocol/negotiating_client_authenticator.cc
+++ b/remoting/protocol/negotiating_client_authenticator.cc
@@ -50,6 +50,7 @@ void NegotiatingClientAuthenticator::ProcessMessage(
const buzz::XmlElement* message,
const base::Closure& resume_callback) {
DCHECK_EQ(state(), WAITING_MESSAGE);
+ state_ = PROCESSING_MESSAGE;
std::string method_attr = message->Attr(kMethodAttributeQName);
Method method = ParseMethodString(method_attr);
@@ -68,7 +69,6 @@ void NegotiatingClientAuthenticator::ProcessMessage(
current_method_ = method;
method_set_by_host_ = true;
- state_ = PROCESSING_MESSAGE;
// Copy the message since the authenticator may process it asynchronously.
base::Closure callback = base::Bind(
@@ -97,6 +97,14 @@ scoped_ptr<buzz::XmlElement> NegotiatingClientAuthenticator::GetNextMessage() {
result = CreateEmptyAuthenticatorMessage();
}
+ if (is_paired()) {
+ // If the client is paired with the host then attach pairing client_id to
+ // the message.
+ buzz::XmlElement* pairing_tag = new buzz::XmlElement(kPairingInfoTag);
+ result->AddElement(pairing_tag);
+ pairing_tag->AddAttr(kClientIdAttribute, config_.pairing_client_id);
+ }
+
// Include a list of supported methods.
std::string supported_methods;
for (Method method : methods_) {
@@ -114,6 +122,7 @@ scoped_ptr<buzz::XmlElement> NegotiatingClientAuthenticator::GetNextMessage() {
void NegotiatingClientAuthenticator::CreateAuthenticatorForCurrentMethod(
Authenticator::State preferred_initial_state,
const base::Closure& resume_callback) {
+ DCHECK_EQ(state(), PROCESSING_MESSAGE);
DCHECK(current_method_ != Method::INVALID);
if (current_method_ == Method::THIRD_PARTY_SPAKE2_P224) {
current_authenticator_.reset(new ThirdPartyClientAuthenticator(
@@ -126,14 +135,18 @@ void NegotiatingClientAuthenticator::CreateAuthenticatorForCurrentMethod(
remote_id_),
config_.fetch_third_party_token_callback));
resume_callback.Run();
+ } else if (current_method_ == Method::PAIRED_SPAKE2_P224) {
+ PairingClientAuthenticator* pairing_authenticator =
+ new PairingClientAuthenticator(
+ config_, base::Bind(&V2Authenticator::CreateForClient));
+ current_authenticator_ = make_scoped_ptr(pairing_authenticator);
+ pairing_authenticator->Start(preferred_initial_state, resume_callback);
} else {
DCHECK(current_method_ == Method::SHARED_SECRET_PLAIN_SPAKE2_P224 ||
- current_method_ == Method::PAIRED_SPAKE2_P224 ||
current_method_ == Method::SHARED_SECRET_SPAKE2_P224 ||
current_method_ == Method::SHARED_SECRET_SPAKE2_CURVE25519);
- bool pairing_supported = (current_method_ == Method::PAIRED_SPAKE2_P224);
config_.fetch_secret_callback.Run(
- pairing_supported,
+ false,
base::Bind(
&NegotiatingClientAuthenticator::CreateSharedSecretAuthenticator,
weak_factory_.GetWeakPtr(), preferred_initial_state,
@@ -142,13 +155,14 @@ void NegotiatingClientAuthenticator::CreateAuthenticatorForCurrentMethod(
}
void NegotiatingClientAuthenticator::CreatePreferredAuthenticator() {
- if (!config_.pairing_client_id.empty() && !config_.pairing_secret.empty() &&
+ if (is_paired() &&
std::find(methods_.begin(), methods_.end(), Method::PAIRED_SPAKE2_P224) !=
methods_.end()) {
- // If the client specified a pairing id and shared secret, then create a
- // PairingAuthenticator.
- current_authenticator_.reset(new PairingClientAuthenticator(
- config_, base::Bind(&V2Authenticator::CreateForClient)));
+ PairingClientAuthenticator* pairing_authenticator =
+ new PairingClientAuthenticator(
+ config_, base::Bind(&V2Authenticator::CreateForClient));
+ current_authenticator_ = make_scoped_ptr(pairing_authenticator);
+ pairing_authenticator->StartPaired(MESSAGE_READY);
current_method_ = Method::PAIRED_SPAKE2_P224;
}
}
@@ -172,5 +186,9 @@ void NegotiatingClientAuthenticator::CreateSharedSecretAuthenticator(
resume_callback.Run();
}
+bool NegotiatingClientAuthenticator::is_paired() {
+ return !config_.pairing_client_id.empty() && !config_.pairing_secret.empty();
+}
+
} // namespace protocol
} // namespace remoting
« no previous file with comments | « remoting/protocol/negotiating_client_authenticator.h ('k') | remoting/protocol/negotiating_host_authenticator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698