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

Unified Diff: remoting/protocol/negotiating_client_authenticator.cc

Issue 14793021: PairingAuthenticator implementation and plumbing. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed clang errors. Created 7 years, 7 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 af5d56bc366454d93835eec27ff01be3e51de7bd..c6a2a7b6be5fdd3a572634a4c80d97cc85f951a9 100644
--- a/remoting/protocol/negotiating_client_authenticator.cc
+++ b/remoting/protocol/negotiating_client_authenticator.cc
@@ -12,6 +12,7 @@
#include "base/logging.h"
#include "base/strings/string_split.h"
#include "remoting/protocol/channel_authenticator.h"
+#include "remoting/protocol/pairing_client_authenticator.h"
#include "remoting/protocol/v2_authenticator.h"
#include "third_party/libjingle/source/talk/xmllite/xmlelement.h"
@@ -19,11 +20,15 @@ namespace remoting {
namespace protocol {
NegotiatingClientAuthenticator::NegotiatingClientAuthenticator(
+ const std::string& client_pairing_id,
+ const std::string& shared_secret,
const std::string& authentication_tag,
const FetchSecretCallback& fetch_secret_callback,
scoped_ptr<ThirdPartyClientAuthenticator::TokenFetcher> token_fetcher,
const std::vector<AuthenticationMethod>& methods)
: NegotiatingAuthenticatorBase(MESSAGE_READY),
+ client_pairing_id_(client_pairing_id),
+ shared_secret_(shared_secret),
authentication_tag_(authentication_tag),
fetch_secret_callback_(fetch_secret_callback),
token_fetcher_(token_fetcher.Pass()),
@@ -76,12 +81,13 @@ void NegotiatingClientAuthenticator::ProcessMessage(
scoped_ptr<buzz::XmlElement> NegotiatingClientAuthenticator::GetNextMessage() {
DCHECK_EQ(state(), MESSAGE_READY);
+
// This is the first message to the host, send a list of supported methods.
if (!current_method_.is_valid()) {
// If no authentication method has been chosen, see if we can optimistically
// choose one.
scoped_ptr<buzz::XmlElement> result;
- current_authenticator_ = CreatePreferredAuthenticator();
+ CreatePreferredAuthenticator();
if (current_authenticator_) {
DCHECK(current_authenticator_->state() == MESSAGE_READY);
result = GetNextMessageInternal();
@@ -117,16 +123,28 @@ void NegotiatingClientAuthenticator::CreateAuthenticatorForCurrentMethod(
token_fetcher_.Pass()));
resume_callback.Run();
} else {
+ DCHECK(current_method_.type() == AuthenticationMethod::SPAKE2 ||
+ current_method_.type() == AuthenticationMethod::SPAKE2_PAIR);
+ // TODO(jamiewalch): Add a bool parameter to the fetch secret callback to
+ // indicate whether or not to show the "remember me" checkbox. Set it to
+ // (current_method_.type() == AuthenticationMethod::SPAKE2_PAIR).
fetch_secret_callback_.Run(base::Bind(
&NegotiatingClientAuthenticator::CreateV2AuthenticatorWithSecret,
weak_factory_.GetWeakPtr(), preferred_initial_state, resume_callback));
}
}
-scoped_ptr<Authenticator>
-NegotiatingClientAuthenticator::CreatePreferredAuthenticator() {
- NOTIMPLEMENTED();
- return scoped_ptr<Authenticator>();
+void NegotiatingClientAuthenticator::CreatePreferredAuthenticator() {
+ if (!client_pairing_id_.empty() && !shared_secret_.empty() &&
+ std::find(methods_.begin(), methods_.end(),
+ AuthenticationMethod::Spake2Pair()) != methods_.end()) {
+ // If the client specified a pairing id and shared secret, then create a
+ // PairingAuthenticator.
+ current_authenticator_.reset(new PairingClientAuthenticator(
+ client_pairing_id_, shared_secret_, fetch_secret_callback_,
+ authentication_tag_));
+ current_method_ = AuthenticationMethod::Spake2Pair();
+ }
}
void NegotiatingClientAuthenticator::CreateV2AuthenticatorWithSecret(
« 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