// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/proximity_auth/cryptauth/cryptauth_api_call_flow.h" #include "base/strings/string_number_conversions.h" #include "components/proximity_auth/logging/logging.h" #include "net/url_request/url_fetcher.h" namespace proximity_auth { namespace { const char kResponseBodyError[] = "Failed to get response body"; const char kRequestFailedError[] = "Request failed"; const char kHttpStatusErrorPrefix[] = "HTTP status: "; } // namespace CryptAuthApiCallFlow::CryptAuthApiCallFlow() { } CryptAuthApiCallFlow::~CryptAuthApiCallFlow() { } void CryptAuthApiCallFlow::Start(const GURL& request_url, net::URLRequestContextGetter* context, const std::string& access_token, const std::string& serialized_request, const ResultCallback& result_callback, const ErrorCallback& error_callback) { request_url_ = request_url; serialized_request_ = serialized_request; result_callback_ = result_callback; error_callback_ = error_callback; OAuth2ApiCallFlow::Start(context, access_token); } GURL CryptAuthApiCallFlow::CreateApiCallUrl() { return request_url_; } std::string CryptAuthApiCallFlow::CreateApiCallBody() { return serialized_request_; } std::string CryptAuthApiCallFlow::CreateApiCallBodyContentType() { return "application/x-protobuf"; } net::URLFetcher::RequestType CryptAuthApiCallFlow::GetRequestTypeForBody( const std::string& body) { return net::URLFetcher::POST; } void CryptAuthApiCallFlow::ProcessApiCallSuccess( const net::URLFetcher* source) { std::string serialized_response; if (!source->GetResponseAsString(&serialized_response)) { error_callback_.Run(kResponseBodyError); return; } result_callback_.Run(serialized_response); } void CryptAuthApiCallFlow::ProcessApiCallFailure( const net::URLFetcher* source) { std::string error_message; if (source->GetStatus().status() == net::URLRequestStatus::SUCCESS) { error_message = kHttpStatusErrorPrefix + base::IntToString(source->GetResponseCode()); } else { error_message = kRequestFailedError; } std::string response; source->GetResponseAsString(&response); PA_LOG(INFO) << "API call failed:\n" << response; error_callback_.Run(error_message); } } // proximity_auth