| Index: chrome/browser/local_discovery/privetv3_session.cc
|
| diff --git a/chrome/browser/local_discovery/privetv3_session.cc b/chrome/browser/local_discovery/privetv3_session.cc
|
| index 10e0c38dec79fb47fa2d26ac3445d0407dbfc0dd..9ae83ddf7a921cb37c4ca74b2d0578860546e3dc 100644
|
| --- a/chrome/browser/local_discovery/privetv3_session.cc
|
| +++ b/chrome/browser/local_discovery/privetv3_session.cc
|
| @@ -22,11 +22,14 @@ namespace {
|
|
|
| const char kPrivetV3AuthAnonymous[] = "Privet anonymous";
|
| const char kPrivetV3CryptoP224Spake2[] = "p224_spake2";
|
| +const char kPrivetV3Auto[] = "auto";
|
|
|
| const char kPrivetV3InfoKeyAuth[] = "authentication";
|
| const char kPrivetV3InfoKeyVersion[] = "version";
|
| const char kPrivetV3InfoVersion[] = "3.0";
|
|
|
| +const char kPrivetV3KeyAccessToken[] = "accessToken";
|
| +const char kPrivetV3KeyAuthCode[] = "authCode";
|
| const char kPrivetV3KeyCertFingerprint[] = "certFingerprint";
|
| const char kPrivetV3KeyCertSignature[] = "certSignature";
|
| const char kPrivetV3KeyClientCommitment[] = "clientCommitment";
|
| @@ -34,10 +37,14 @@ const char kPrivetV3KeyCrypto[] = "crypto";
|
| const char kPrivetV3KeyDeviceCommitment[] = "deviceCommitment";
|
| const char kPrivetV3KeyMode[] = "mode";
|
| const char kPrivetV3KeyPairing[] = "pairing";
|
| +const char kPrivetV3KeyRequestedScope[] = "requestedScope";
|
| +const char kPrivetV3KeyScope[] = "scope";
|
| const char kPrivetV3KeySessionId[] = "sessionId";
|
| +const char kPrivetV3KeyTokenType[] = "tokenType";
|
|
|
| -const char kPrivetV3PairingConfirmPath[] = "/privet/v3/pairing/confirm";
|
| const char kPrivetV3PairingStartPath[] = "/privet/v3/pairing/start";
|
| +const char kPrivetV3PairingConfirmPath[] = "/privet/v3/pairing/confirm";
|
| +const char kPrivetV3AuthPath[] = "/privet/v3/auth";
|
|
|
| const char kUrlPlaceHolder[] = "http://host/";
|
|
|
| @@ -345,6 +352,48 @@ void PrivetV3Session::OnPairingConfirmDone(
|
| return callback.Run(Result::STATUS_SESSIONERROR);
|
| }
|
|
|
| + std::string auth_code(hmac.DigestLength(), ' ');
|
| + if (!hmac.Sign(session_id_,
|
| + reinterpret_cast<unsigned char*>(string_as_array(&auth_code)),
|
| + auth_code.size())) {
|
| + NOTREACHED();
|
| + return callback.Run(Result::STATUS_SESSIONERROR);
|
| + }
|
| + // From now this is expected certificate.
|
| + fingerprint_ = fingerprint;
|
| +
|
| + std::string auth_code_base64;
|
| + base::Base64Encode(auth_code, &auth_code_base64);
|
| +
|
| + base::DictionaryValue input;
|
| + input.SetString(kPrivetV3KeyAuthCode, auth_code_base64);
|
| + input.SetString(kPrivetV3KeyMode, kPrivetV3KeyPairing);
|
| + input.SetString(kPrivetV3KeyRequestedScope, kPrivetV3Auto);
|
| +
|
| + // Now we can use SendMessage with certificate validateion.
|
| + SendMessage(kPrivetV3AuthPath, input,
|
| + base::Bind(&PrivetV3Session::OnAuthenticateDone,
|
| + weak_ptr_factory_.GetWeakPtr(), callback));
|
| +}
|
| +
|
| +void PrivetV3Session::OnAuthenticateDone(
|
| + const ResultCallback& callback,
|
| + Result result,
|
| + const base::DictionaryValue& response) {
|
| + if (result != Result::STATUS_SUCCESS)
|
| + return callback.Run(result);
|
| +
|
| + std::string access_token;
|
| + std::string token_type;
|
| + std::string scope;
|
| + if (!response.GetString(kPrivetV3KeyAccessToken, &access_token) ||
|
| + !response.GetString(kPrivetV3KeyTokenType, &token_type) ||
|
| + !response.GetString(kPrivetV3KeyScope, &scope)) {
|
| + return callback.Run(Result::STATUS_SESSIONERROR);
|
| + }
|
| +
|
| + privet_auth_token_ = token_type + " " + access_token;
|
| +
|
| return callback.Run(Result::STATUS_SUCCESS);
|
| }
|
|
|
|
|