blob: cfacd8992bb756a5992fea97af5af287d297879e [file] [log] [blame]
// 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/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 cryptauth {
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);
}
} // namespace cryptauth