@@ -81,21 +81,8 @@ std::unordered_map<std::string, std::string> MergeHeaders(
8181 return merged;
8282}
8383
84- // / \brief Authenticate the request and return the final cpr::Header.
85- Result<cpr::Header> AuthenticateRequest (const auth::HTTPRequest& request,
86- auth::AuthSession& session) {
87- ICEBERG_ASSIGN_OR_RAISE (auto authenticated, session.Authenticate (request));
88- return cpr::Header (authenticated.headers .begin (), authenticated.headers .end ());
89- }
90-
91- // / \brief Converts a map of string key-value pairs to cpr::Parameters.
92- cpr::Parameters GetParameters (
93- const std::unordered_map<std::string, std::string>& params) {
94- cpr::Parameters cpr_params;
95- for (const auto & [key, val] : params) {
96- cpr_params.Add ({key, val});
97- }
98- return cpr_params;
84+ cpr::Header ToCprHeader (const auth::HTTPRequest& request) {
85+ return cpr::Header (request.headers .begin (), request.headers .end ());
9986}
10087
10188// / \brief Append URL-encoded query parameters to a URL, sorted by key.
@@ -175,14 +162,13 @@ Result<HttpResponse> HttpClient::Get(
175162 const std::unordered_map<std::string, std::string>& headers,
176163 const ErrorHandler& error_handler, auth::AuthSession& session) {
177164 ICEBERG_ASSIGN_OR_RAISE (
178- auto all_headers,
179- AuthenticateRequest ({.method = HttpMethod::kGet ,
180- .url = AppendQueryString (path, params),
181- .headers = MergeHeaders (default_headers_, headers),
182- .body = " " },
183- session));
184- cpr::Response response =
185- cpr::Get (cpr::Url{path}, GetParameters (params), all_headers, *connection_pool_);
165+ auto authenticated,
166+ session.Authenticate ({.method = HttpMethod::kGet ,
167+ .url = AppendQueryString (path, params),
168+ .headers = MergeHeaders (default_headers_, headers),
169+ .body = " " }));
170+ cpr::Response response = cpr::Get (cpr::Url{authenticated.url },
171+ ToCprHeader (authenticated), *connection_pool_);
186172
187173 ICEBERG_RETURN_UNEXPECTED (HandleFailureResponse (response, error_handler));
188174 HttpResponse http_response;
@@ -195,14 +181,14 @@ Result<HttpResponse> HttpClient::Post(
195181 const std::unordered_map<std::string, std::string>& headers,
196182 const ErrorHandler& error_handler, auth::AuthSession& session) {
197183 ICEBERG_ASSIGN_OR_RAISE (
198- auto all_headers,
199- AuthenticateRequest ({.method = HttpMethod::kPost ,
200- .url = path,
201- .headers = MergeHeaders (default_headers_, headers),
202- .body = body},
203- session));
184+ auto authenticated,
185+ session.Authenticate ({.method = HttpMethod::kPost ,
186+ .url = path,
187+ .headers = MergeHeaders (default_headers_, headers),
188+ .body = body}));
204189 cpr::Response response =
205- cpr::Post (cpr::Url{path}, cpr::Body{body}, all_headers, *connection_pool_);
190+ cpr::Post (cpr::Url{authenticated.url }, cpr::Body{authenticated.body },
191+ ToCprHeader (authenticated), *connection_pool_);
206192
207193 ICEBERG_RETURN_UNEXPECTED (HandleFailureResponse (response, error_handler));
208194 HttpResponse http_response;
@@ -222,19 +208,18 @@ Result<HttpResponse> HttpClient::PostForm(
222208 for (const auto & [key, val] : form_data) {
223209 pair_list.emplace_back (key, val);
224210 }
225- // Use cpr's own encoding as the signing body to ensure consistency with the
226- // actual payload sent over the wire.
227- cpr::Payload payload (pair_list.begin (), pair_list.end ());
228- std::string encoded_body = payload.GetContent ();
211+ // Sign the exact bytes cpr will put on the wire.
212+ std::string encoded_body =
213+ cpr::Payload (pair_list.begin (), pair_list.end ()).GetContent ();
229214 ICEBERG_ASSIGN_OR_RAISE (
230- auto all_headers,
231- AuthenticateRequest ({.method = HttpMethod::kPost ,
232- .url = path,
233- .headers = MergeHeaders (default_headers_, form_headers),
234- .body = encoded_body},
235- session));
215+ auto authenticated,
216+ session.Authenticate ({.method = HttpMethod::kPost ,
217+ .url = path,
218+ .headers = MergeHeaders (default_headers_, form_headers),
219+ .body = std::move (encoded_body)}));
236220 cpr::Response response =
237- cpr::Post (cpr::Url{path}, std::move (payload), all_headers, *connection_pool_);
221+ cpr::Post (cpr::Url{authenticated.url }, cpr::Body{authenticated.body },
222+ ToCprHeader (authenticated), *connection_pool_);
238223
239224 ICEBERG_RETURN_UNEXPECTED (HandleFailureResponse (response, error_handler));
240225 HttpResponse http_response;
@@ -246,13 +231,13 @@ Result<HttpResponse> HttpClient::Head(
246231 const std::string& path, const std::unordered_map<std::string, std::string>& headers,
247232 const ErrorHandler& error_handler, auth::AuthSession& session) {
248233 ICEBERG_ASSIGN_OR_RAISE (
249- auto all_headers ,
250- AuthenticateRequest ({.method = HttpMethod::kHead ,
251- .url = path,
252- .headers = MergeHeaders (default_headers_, headers),
253- .body = " " },
254- session));
255- cpr::Response response = cpr::Head (cpr::Url{path}, all_headers , *connection_pool_);
234+ auto authenticated ,
235+ session. Authenticate ({.method = HttpMethod::kHead ,
236+ .url = path,
237+ .headers = MergeHeaders (default_headers_, headers),
238+ .body = " " }));
239+ cpr::Response response = cpr::Head (cpr::Url{authenticated. url },
240+ ToCprHeader (authenticated) , *connection_pool_);
256241
257242 ICEBERG_RETURN_UNEXPECTED (HandleFailureResponse (response, error_handler));
258243 HttpResponse http_response;
@@ -265,14 +250,13 @@ Result<HttpResponse> HttpClient::Delete(
265250 const std::unordered_map<std::string, std::string>& headers,
266251 const ErrorHandler& error_handler, auth::AuthSession& session) {
267252 ICEBERG_ASSIGN_OR_RAISE (
268- auto all_headers,
269- AuthenticateRequest ({.method = HttpMethod::kDelete ,
270- .url = AppendQueryString (path, params),
271- .headers = MergeHeaders (default_headers_, headers),
272- .body = " " },
273- session));
274- cpr::Response response =
275- cpr::Delete (cpr::Url{path}, GetParameters (params), all_headers, *connection_pool_);
253+ auto authenticated,
254+ session.Authenticate ({.method = HttpMethod::kDelete ,
255+ .url = AppendQueryString (path, params),
256+ .headers = MergeHeaders (default_headers_, headers),
257+ .body = " " }));
258+ cpr::Response response = cpr::Delete (cpr::Url{authenticated.url },
259+ ToCprHeader (authenticated), *connection_pool_);
276260
277261 ICEBERG_RETURN_UNEXPECTED (HandleFailureResponse (response, error_handler));
278262 HttpResponse http_response;
0 commit comments