Skip to content

Commit

Permalink
Adds payment server handler
Browse files Browse the repository at this point in the history
  • Loading branch information
NejcZdovc committed Aug 24, 2020
1 parent d2939ba commit 57464ad
Show file tree
Hide file tree
Showing 54 changed files with 2,888 additions and 951 deletions.
2 changes: 0 additions & 2 deletions components/brave_ads/browser/ads_service_browsertest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,6 @@
using ::testing::NiceMock;
using ::testing::Return;

using braveledger_request_util::ServerTypes;

namespace {

using RewardsNotificationType =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,6 @@

namespace rewards_browsertest_util {

bool URLMatches(
const std::string& url,
const std::string& path,
const std::string& prefix,
const braveledger_request_util::ServerTypes server) {
const std::string target_url =
braveledger_request_util::BuildUrl(path, prefix, server);
return (url.find(target_url) == 0);
}

std::unique_ptr<net::test_server::HttpResponse> HandleRequest(
const net::test_server::HttpRequest& request) {
std::unique_ptr<net::test_server::BasicHttpResponse> http_response(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,6 @@

namespace rewards_browsertest_util {

bool URLMatches(
const std::string& url,
const std::string& path,
const std::string& prefix,
const braveledger_request_util::ServerTypes server);

std::unique_ptr<net::test_server::HttpResponse> HandleRequest(
const net::test_server::HttpRequest& request);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,6 @@ std::string GetPublisherChannelResponse(

namespace rewards_browsertest {

using braveledger_request_util::ServerTypes;
using rewards_browsertest_util::URLMatches;

RewardsBrowserTestResponse::RewardsBrowserTestResponse() = default;

RewardsBrowserTestResponse::~RewardsBrowserTestResponse() = default;
Expand Down Expand Up @@ -244,7 +241,7 @@ void RewardsBrowserTestResponse::Get(
return;
}

if (url.find("v1/promotions?") != std::string::npos) {
if (url.find("/v1/promotions?") != std::string::npos) {
if (empty_promotion_key_) {
*response = promotion_empty_key_;
} else {
Expand Down Expand Up @@ -324,11 +321,7 @@ void RewardsBrowserTestResponse::Get(
return;
}

if (URLMatches(
url,
"/order",
PREFIX_V1,
ServerTypes::kPayments)) {
if (url.find("/v1/orders") != std::string::npos) {
if (url.find("credentials") != std::string::npos) {
if (method == 0) {
#if defined(OFFICIAL_BUILD)
Expand Down
7 changes: 7 additions & 0 deletions components/brave_rewards/test/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,13 @@ source_set("brave_rewards_unit_tests") {
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/publisher/publisher_unittest.cc",
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/api/api_util_unittest.cc",
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/api/get_parameters/get_parameters_unittest.cc",
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/payment/payment_util_unittest.cc",
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/payment/get_credentials/get_credentials_unittest.cc",
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/payment/post_credentials/post_credentials_unittest.cc",
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/payment/post_order/post_order_unittest.cc",
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/payment/post_transaction_anon/post_transaction_anon_unittest.cc",
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/payment/post_transaction_uphold/post_transaction_uphold_unittest.cc",
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/payment/post_votes/post_votes_unittest.cc",
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/private_cdn/get_publisher/get_publisher_unittest.cc",
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/private_cdn/private_cdn_util_unittest.cc",
"//brave/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/promotion/get_available/get_available_unittest.cc",
Expand Down
22 changes: 16 additions & 6 deletions vendor/bat-native-ledger/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -307,14 +307,8 @@ source_set("ledger") {
"src/bat/ledger/internal/recovery/recovery_empty_balance.h",
"src/bat/ledger/internal/report/report.cc",
"src/bat/ledger/internal/report/report.h",
"src/bat/ledger/internal/request/request_sku.cc",
"src/bat/ledger/internal/request/request_sku.h",
"src/bat/ledger/internal/request/request_util.cc",
"src/bat/ledger/internal/request/request_util.h",
"src/bat/ledger/internal/response/response_credentials.cc",
"src/bat/ledger/internal/response/response_credentials.h",
"src/bat/ledger/internal/response/response_sku.cc",
"src/bat/ledger/internal/response/response_sku.h",
"src/bat/ledger/internal/response/response_uphold.cc",
"src/bat/ledger/internal/response/response_uphold.h",
"src/bat/ledger/internal/endpoint/api/api_server.cc",
Expand All @@ -323,6 +317,22 @@ source_set("ledger") {
"src/bat/ledger/internal/endpoint/api/api_util.h",
"src/bat/ledger/internal/endpoint/api/get_parameters/get_parameters.cc",
"src/bat/ledger/internal/endpoint/api/get_parameters/get_parameters.h",
"src/bat/ledger/internal/endpoint/payment/payment_server.cc",
"src/bat/ledger/internal/endpoint/payment/payment_server.h",
"src/bat/ledger/internal/endpoint/payment/payment_util.cc",
"src/bat/ledger/internal/endpoint/payment/payment_util.h",
"src/bat/ledger/internal/endpoint/payment/get_credentials/get_credentials.cc",
"src/bat/ledger/internal/endpoint/payment/get_credentials/get_credentials.h",
"src/bat/ledger/internal/endpoint/payment/post_credentials/post_credentials.cc",
"src/bat/ledger/internal/endpoint/payment/post_credentials/post_credentials.h",
"src/bat/ledger/internal/endpoint/payment/post_order/post_order.cc",
"src/bat/ledger/internal/endpoint/payment/post_order/post_order.h",
"src/bat/ledger/internal/endpoint/payment/post_transaction_anon/post_transaction_anon.cc",
"src/bat/ledger/internal/endpoint/payment/post_transaction_anon/post_transaction_anon.h",
"src/bat/ledger/internal/endpoint/payment/post_transaction_uphold/post_transaction_uphold.cc",
"src/bat/ledger/internal/endpoint/payment/post_transaction_uphold/post_transaction_uphold.h",
"src/bat/ledger/internal/endpoint/payment/post_votes/post_votes.cc",
"src/bat/ledger/internal/endpoint/payment/post_votes/post_votes.h",
"src/bat/ledger/internal/endpoint/private_cdn/get_publisher/get_publisher.cc",
"src/bat/ledger/internal/endpoint/private_cdn/get_publisher/get_publisher.h",
"src/bat/ledger/internal/endpoint/private_cdn/private_cdn_server.cc",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,73 +12,17 @@
#include "base/values.h"
#include "bat/ledger/internal/contribution/contribution_anon_card.h"
#include "bat/ledger/internal/ledger_impl.h"
#include "bat/ledger/internal/request/request_sku.h"
#include "bat/ledger/internal/request/request_util.h"
#include "bat/ledger/internal/response/response_sku.h"
#include "bat/ledger/internal/sku/sku_util.h"

using std::placeholders::_1;
using std::placeholders::_2;
using std::placeholders::_3;

namespace {

std::string GetTransactionPayload(
const double amount,
const std::string& order_id,
const std::string& destination,
const std::string& payment_id,
const std::vector<uint8_t>& seed) {
base::Value denomination(base::Value::Type::DICTIONARY);
denomination.SetStringKey("amount", base::StringPrintf("%g", amount));
denomination.SetStringKey("currency", "BAT");

base::Value octets(base::Value::Type::DICTIONARY);
octets.SetKey("denomination", std::move(denomination));
octets.SetStringKey("destination", destination);

std::string octets_json;
base::JSONWriter::Write(octets, &octets_json);

const auto sign_headers = braveledger_request_util::GetSignHeaders(
order_id,
octets_json,
"primary",
seed,
true);

base::Value headers(base::Value::Type::DICTIONARY);
headers.SetStringKey("digest", sign_headers.at("digest"));
headers.SetStringKey("idempotency-key", order_id);
headers.SetStringKey("signature", sign_headers.at("signature"));

base::Value transaction(base::Value::Type::DICTIONARY);
transaction.SetKey("headers", std::move(headers));
transaction.SetStringKey("octets", octets_json);

std::string transaction_json;
base::JSONWriter::Write(transaction, &transaction_json);
std::string transaction_base64;
base::Base64Encode(transaction_json, &transaction_base64);

base::Value body(base::Value::Type::DICTIONARY);
body.SetStringKey("paymentId", payment_id);
body.SetStringKey("kind", braveledger_sku::ConvertTransactionTypeToString(
ledger::SKUTransactionType::ANONYMOUS_CARD));
body.SetStringKey("transaction", transaction_base64);

std::string body_json;
base::JSONWriter::Write(body, &body_json);

return body_json;
}

} // namespace

namespace braveledger_contribution {

ContributionAnonCard::ContributionAnonCard(bat_ledger::LedgerImpl* ledger) :
ledger_(ledger) {
ledger_(ledger),
payment_server_(new ledger::endpoint::PaymentServer(ledger)) {
DCHECK(ledger_);
}

Expand All @@ -89,38 +33,21 @@ void ContributionAnonCard::SendTransaction(
const std::string& order_id,
const std::string& destination,
ledger::TransactionCallback callback) {
const std::string payload = GetTransactionPayload(
amount,
order_id,
destination,
ledger_->state()->GetPaymentId(),
ledger_->state()->GetRecoverySeed());

auto url_callback = std::bind(&ContributionAnonCard::OnSendTransaction,
this,
_1,
callback);

const std::string url = braveledger_request_util::GetCreateTransactionURL(
payment_server_->post_transaction_anon()->Request(
amount,
order_id,
ledger::SKUTransactionType::ANONYMOUS_CARD);

ledger_->LoadURL(
url,
{},
payload,
"application/json; charset=utf-8",
ledger::UrlMethod::POST,
destination,
url_callback);
}

void ContributionAnonCard::OnSendTransaction(
const ledger::UrlResponse& response,
const ledger::Result result,
ledger::TransactionCallback callback) {
BLOG(6, ledger::UrlResponseToString(__func__, response));

const ledger::Result result =
braveledger_response_util::CheckSendExternalTransaction(response);
if (result != ledger::Result::LEDGER_OK) {
BLOG(0, "Problem sending transaction");
callback(ledger::Result::LEDGER_ERROR, "");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
#define BRAVELEDGER_CONTRIBUTION_CONTRIBUTION_ANON_FUNDS_H_

#include <map>
#include <memory>
#include <string>

#include "bat/ledger/internal/endpoint/payment/payment_server.h"
#include "bat/ledger/ledger.h"

namespace bat_ledger {
Expand All @@ -31,10 +33,11 @@ class ContributionAnonCard {

private:
void OnSendTransaction(
const ledger::UrlResponse& response,
const ledger::Result result,
ledger::TransactionCallback callback);

bat_ledger::LedgerImpl* ledger_; // NOT OWNED
std::unique_ptr<ledger::endpoint::PaymentServer> payment_server_;
};

} // namespace braveledger_contribution
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
#include "bat/ledger/internal/credentials/credentials_common.h"
#include "bat/ledger/internal/credentials/credentials_util.h"
#include "bat/ledger/internal/ledger_impl.h"
#include "bat/ledger/internal/response/response_credentials.h"

using std::placeholders::_1;
using std::placeholders::_2;
Expand Down Expand Up @@ -77,56 +76,6 @@ void CredentialsCommon::BlindedCredsSaved(
callback(ledger::Result::LEDGER_OK);
}

void CredentialsCommon::GetSignedCredsFromResponse(
const CredentialsTrigger& trigger,
const ledger::UrlResponse& response,
ledger::ResultCallback callback) {
base::Value parsed_response(base::Value::Type::DICTIONARY);
const ledger::Result result =
braveledger_response_util::ParseSignedCreds(response, &parsed_response);

if (result == ledger::Result::RETRY_SHORT) {
callback(ledger::Result::RETRY_SHORT);
return;
}

if (result != ledger::Result::LEDGER_OK || parsed_response.DictSize() != 3) {
BLOG(0, "Parsing failed");
callback(ledger::Result::RETRY);
return;
}

auto* signed_creds = parsed_response.FindListKey("signed_creds");
if (!signed_creds || signed_creds->GetList().empty()) {
BLOG(0, "Failed to parse signed creds");
callback(ledger::Result::RETRY);
return;
}

auto* public_key = parsed_response.FindStringKey("public_key");
if (!public_key || public_key->empty()) {
BLOG(0, "Public key is empty");
callback(ledger::Result::RETRY);
return;
}

auto* batch_proof = parsed_response.FindStringKey("batch_proof");
if (!batch_proof || batch_proof->empty()) {
BLOG(0, "Batch proof is empty");
callback(ledger::Result::RETRY);
return;
}

auto creds_batch = ledger::CredsBatch::New();
creds_batch->trigger_id = trigger.id;
creds_batch->trigger_type = trigger.type;
base::JSONWriter::Write(*signed_creds, &creds_batch->signed_creds);
creds_batch->public_key = *public_key;
creds_batch->batch_proof = *batch_proof;

ledger_->database()->SaveSignedCreds(std::move(creds_batch), callback);
}

void CredentialsCommon::SaveUnblindedCreds(
const uint64_t expires_at,
const double token_value,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,6 @@ class CredentialsCommon {
const CredentialsTrigger& trigger,
ledger::ResultCallback callback);

void GetSignedCredsFromResponse(
const CredentialsTrigger& trigger,
const ledger::UrlResponse& response,
ledger::ResultCallback callback);

void SaveUnblindedCreds(
const uint64_t expires_at,
const double token_value,
Expand Down
Loading

0 comments on commit 57464ad

Please sign in to comment.