Remove path_and_query specifier from BlindSignHttpInterface. DoRequest will now specify which BlindSignAuth RPC it's doing and the interface implementor must use the correct URL. PiperOrigin-RevId: 555481040
diff --git a/quiche/blind_sign_auth/blind_sign_auth.cc b/quiche/blind_sign_auth/blind_sign_auth.cc index b13005f..f998154 100644 --- a/quiche/blind_sign_auth/blind_sign_auth.cc +++ b/quiche/blind_sign_auth/blind_sign_auth.cc
@@ -48,13 +48,12 @@ privacy::ppn::GetInitialDataRequest_LocationGranularity_CITY_GEOS); // Call GetInitialData on the HttpFetcher. - std::string path_and_query = "/v1/getInitialData"; std::string body = request.SerializeAsString(); BlindSignHttpCallback initial_data_callback = absl::bind_front(&BlindSignAuth::GetInitialDataCallback, this, oauth_token, num_tokens, std::move(callback)); - http_fetcher_->DoRequest(path_and_query, oauth_token, body, - std::move(initial_data_callback)); + http_fetcher_->DoRequest(BlindSignHttpRequestType::kGetInitialData, + oauth_token, body, std::move(initial_data_callback)); } void BlindSignAuth::GetInitialDataCallback( @@ -165,8 +164,8 @@ &BlindSignAuth::AuthAndSignCallback, this, public_metadata_info, public_metadata_expiry_time.value(), *at_sign_request, *std::move(bssa_client), std::move(callback)); - http_fetcher_->DoRequest("/v1/authWithHeaderCreds", oauth_token.data(), - sign_request.SerializeAsString(), + http_fetcher_->DoRequest(BlindSignHttpRequestType::kAuthAndSign, + oauth_token.data(), sign_request.SerializeAsString(), std::move(auth_and_sign_callback)); }
diff --git a/quiche/blind_sign_auth/blind_sign_auth_test.cc b/quiche/blind_sign_auth/blind_sign_auth_test.cc index 6128750..edd8626 100644 --- a/quiche/blind_sign_auth/blind_sign_auth_test.cc +++ b/quiche/blind_sign_auth/blind_sign_auth_test.cc
@@ -18,10 +18,12 @@ #include "absl/status/statusor.h" #include "absl/strings/escaping.h" #include "absl/strings/string_view.h" +#include "absl/time/time.h" #include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/proto_utils.h" #include "quiche/blind_sign_auth/anonymous_tokens/cpp/testing/utils.h" #include "quiche/blind_sign_auth/anonymous_tokens/proto/anonymous_tokens.pb.h" #include "openssl/base.h" +#include "quiche/blind_sign_auth/blind_sign_http_interface.h" #include "quiche/blind_sign_auth/blind_sign_http_response.h" #include "quiche/blind_sign_auth/test_tools/mock_blind_sign_http_interface.h" #include "quiche/common/platform/api/quiche_mutex.h" @@ -66,18 +68,10 @@ public_key; // Create public metadata info. - std::string public_metadata_str = R"pb( - public_metadata { - exit_location { country: "US" } - service_type: "chromeipblinding" - expiration { seconds: 3600 } - } - validation_version: 1 - )pb"; privacy::ppn::PublicMetadata::Location location; location.set_country("US"); quiche::protobuf::Timestamp expiration; - expiration.set_seconds(3600); + expiration.set_seconds(absl::ToUnixSeconds(absl::Now() + absl::Hours(1))); privacy::ppn::PublicMetadata public_metadata; *public_metadata.mutable_exit_location() = location; public_metadata.set_service_type("chromeipblinding"); @@ -168,16 +162,17 @@ EXPECT_CALL( mock_http_interface_, - DoRequest(Eq("/v1/getInitialData"), Eq(oauth_token_), - Eq(expected_get_initial_data_request_.SerializeAsString()), - _)) + DoRequest( + Eq(BlindSignHttpRequestType::kGetInitialData), Eq(oauth_token_), + Eq(expected_get_initial_data_request_.SerializeAsString()), _)) .Times(1) .WillOnce([=](auto&&, auto&&, auto&&, auto get_initial_data_cb) { std::move(get_initial_data_cb)(fake_public_key_response); }); - EXPECT_CALL(mock_http_interface_, DoRequest(Eq("/v1/authWithHeaderCreds"), - Eq(oauth_token_), _, _)) + EXPECT_CALL(mock_http_interface_, + DoRequest(Eq(BlindSignHttpRequestType::kAuthAndSign), + Eq(oauth_token_), _, _)) .Times(1) .WillOnce(Invoke([this](Unused, Unused, const std::string& body, BlindSignHttpCallback callback) { @@ -204,7 +199,8 @@ TEST_F(BlindSignAuthTest, TestGetTokensFailedNetworkError) { EXPECT_CALL(mock_http_interface_, - DoRequest(Eq("/v1/getInitialData"), Eq(oauth_token_), _, _)) + DoRequest(Eq(BlindSignHttpRequestType::kGetInitialData), + Eq(oauth_token_), _, _)) .Times(1) .WillOnce([=](auto&&, auto&&, auto&&, auto get_initial_data_cb) { std::move(get_initial_data_cb)( @@ -212,7 +208,7 @@ }); EXPECT_CALL(mock_http_interface_, - DoRequest(Eq("/v1/authWithHeaderCreds"), _, _, _)) + DoRequest(Eq(BlindSignHttpRequestType::kAuthAndSign), _, _, _)) .Times(0); int num_tokens = 1; @@ -235,7 +231,7 @@ EXPECT_CALL( mock_http_interface_, - DoRequest(Eq("/v1/getInitialData"), Eq(oauth_token_), + DoRequest(Eq(BlindSignHttpRequestType::kGetInitialData), Eq(oauth_token_), Eq(expected_get_initial_data_request_.SerializeAsString()), _)) .Times(1) .WillOnce([=](auto&&, auto&&, auto&&, auto get_initial_data_cb) { @@ -243,7 +239,7 @@ }); EXPECT_CALL(mock_http_interface_, - DoRequest(Eq("/v1/authWithHeaderCreds"), _, _, _)) + DoRequest(Eq(BlindSignHttpRequestType::kAuthAndSign), _, _, _)) .Times(0); int num_tokens = 1; @@ -265,16 +261,17 @@ EXPECT_CALL( mock_http_interface_, - DoRequest(Eq("/v1/getInitialData"), Eq(oauth_token_), - Eq(expected_get_initial_data_request_.SerializeAsString()), - _)) + DoRequest( + Eq(BlindSignHttpRequestType::kGetInitialData), Eq(oauth_token_), + Eq(expected_get_initial_data_request_.SerializeAsString()), _)) .Times(1) .WillOnce([=](auto&&, auto&&, auto&&, auto get_initial_data_cb) { std::move(get_initial_data_cb)(fake_public_key_response); }); - EXPECT_CALL(mock_http_interface_, DoRequest(Eq("/v1/authWithHeaderCreds"), - Eq(oauth_token_), _, _)) + EXPECT_CALL(mock_http_interface_, + DoRequest(Eq(BlindSignHttpRequestType::kAuthAndSign), + Eq(oauth_token_), _, _)) .Times(1) .WillOnce(Invoke([this](Unused, Unused, const std::string& body, BlindSignHttpCallback callback) {
diff --git a/quiche/blind_sign_auth/blind_sign_http_interface.h b/quiche/blind_sign_auth/blind_sign_http_interface.h index 09e92b2..294ae7f 100644 --- a/quiche/blind_sign_auth/blind_sign_http_interface.h +++ b/quiche/blind_sign_auth/blind_sign_http_interface.h
@@ -17,9 +17,15 @@ using BlindSignHttpCallback = quiche::SingleUseCallback<void(absl::StatusOr<BlindSignHttpResponse>)>; +enum class BlindSignHttpRequestType { + kUnknown = 0, + kGetInitialData, + kAuthAndSign, +}; + // Interface for async HTTP POST requests in BlindSignAuth. -// Implementers must send a request to a signer hostname, using the request's -// arguments, and call the provided callback when a request is complete. +// Implementers must send a request to a signer server's URL +// and call the provided callback when the request is complete. class QUICHE_EXPORT BlindSignHttpInterface { public: virtual ~BlindSignHttpInterface() = default; @@ -32,7 +38,7 @@ // "application/x-protobuf". // DoRequest is async. When the request completes, the implementer must call // the provided callback. - virtual void DoRequest(const std::string& path_and_query, + virtual void DoRequest(BlindSignHttpRequestType request_type, const std::string& authorization_header, const std::string& body, BlindSignHttpCallback callback) = 0;
diff --git a/quiche/blind_sign_auth/test_tools/mock_blind_sign_http_interface.h b/quiche/blind_sign_auth/test_tools/mock_blind_sign_http_interface.h index 1b4f729..6e86e58 100644 --- a/quiche/blind_sign_auth/test_tools/mock_blind_sign_http_interface.h +++ b/quiche/blind_sign_auth/test_tools/mock_blind_sign_http_interface.h
@@ -17,7 +17,7 @@ : public BlindSignHttpInterface { public: MOCK_METHOD(void, DoRequest, - (const std::string& path_and_query, + (BlindSignHttpRequestType request_type, const std::string& authorization_header, const std::string& body, BlindSignHttpCallback callback), (override));